<?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>209875</bug_id>
          
          <creation_ts>2020-04-01 13:35:04 -0700</creation_ts>
          <short_desc>Remove unused media controls code</short_desc>
          <delta_ts>2020-04-02 17:37:09 -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>Media</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>darin</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1636632</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-04-01 13:35:04 -0700</bug_when>
    <thetext>Remove code for the, now unused, C++ based media controls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636633</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-01 13:35:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/61172738&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636636</commentid>
    <comment_count>2</comment_count>
      <attachid>395197</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-04-01 13:38:21 -0700</bug_when>
    <thetext>Created attachment 395197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636660</commentid>
    <comment_count>3</comment_count>
      <attachid>395203</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-04-01 14:42:28 -0700</bug_when>
    <thetext>Created attachment 395203
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636693</commentid>
    <comment_count>4</comment_count>
      <attachid>395212</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-04-01 15:31:48 -0700</bug_when>
    <thetext>Created attachment 395212
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636706</commentid>
    <comment_count>5</comment_count>
      <attachid>395216</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-04-01 15:51:22 -0700</bug_when>
    <thetext>Created attachment 395216
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636777</commentid>
    <comment_count>6</comment_count>
      <attachid>395216</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-01 19:41:08 -0700</bug_when>
    <thetext>Comment on attachment 395216
Patch

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

Patch looks good. Check Windows.

&gt; Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp:163
&gt; +        return m_textTrackContainer.get();

Ok as is. No change needed. Looks like line is indented.

&gt; Source/WebCore/html/HTMLMediaElement.cpp:4300
&gt; +    if (m_creatingControls)

This is ok as-is. No change needed. Is this change concealing a bug revealed by this removal? If so, why is it ok to make this change? If not, proceed.

&gt; Source/WebCore/html/HTMLMediaElement.cpp:4303
&gt;      m_creatingControls = true;

Ok as-is. No change needed. In the future the optimal solution is to use SETforScope() class for this ivar toggling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636798</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-01 21:21:30 -0700</bug_when>
    <thetext>rendering/RenderThemeWin.cpp(846,30): error C3861: &apos;adjustMediaSliderThumbSize&apos;: identifier not found</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636964</commentid>
    <comment_count>8</comment_count>
      <attachid>395281</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-04-02 11:28:38 -0700</bug_when>
    <thetext>Created attachment 395281
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636976</commentid>
    <comment_count>9</comment_count>
      <attachid>395281</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-02 11:46:56 -0700</bug_when>
    <thetext>Comment on attachment 395281
Patch for landing

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

&gt; Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp:163
&gt; +        return m_textTrackContainer.get();

Indentation mistake here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636988</commentid>
    <comment_count>10</comment_count>
      <attachid>395216</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-04-02 11:57:24 -0700</bug_when>
    <thetext>Comment on attachment 395216
Patch

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

&gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:4300
&gt;&gt; +    if (m_creatingControls)
&gt; 
&gt; This is ok as-is. No change needed. Is this change concealing a bug revealed by this removal? If so, why is it ok to make this change? If not, proceed.

ensureUserAgentShadowRoot creates the media controls in the shadow DOM which can trigger scripts in the page and cause this to be called again recursively. In that case we don&apos;t need to call ensureUserAgentShadowRoot again.

&gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:4303
&gt;&gt;      m_creatingControls = true;
&gt; 
&gt; Ok as-is. No change needed. In the future the optimal solution is to use SETforScope() class for this ivar toggling.

I should have thought of that! I&apos;ll make that change in another patch, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636997</commentid>
    <comment_count>11</comment_count>
      <attachid>395286</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-04-02 12:07:47 -0700</bug_when>
    <thetext>Created attachment 395286
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1637089</commentid>
    <comment_count>12</comment_count>
      <attachid>395307</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-04-02 15:05:55 -0700</bug_when>
    <thetext>Created attachment 395307
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1637164</commentid>
    <comment_count>13</comment_count>
      <attachid>395307</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-04-02 17:10:04 -0700</bug_when>
    <thetext>Comment on attachment 395307
Patch for landing

The Windows test failures seem to be unrelated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1637176</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-02 17:37:07 -0700</bug_when>
    <thetext>Committed r259435: &lt;https://trac.webkit.org/changeset/259435&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 395307.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395197</attachid>
            <date>2020-04-01 13:38:21 -0700</date>
            <delta_ts>2020-04-01 14:42:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209875-20200401133820.patch</filename>
            <type>text/plain</type>
            <size>213676</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5MzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmRjMzc2NGI5NjMwYzlk
Nzc0ZjczM2FmNGEyNGU4YWRhNzA4ODZhMi4uNTc5NjQ2NDkxYTA0NjQ1YjEzYmNiYmNhMGYwMDlh
Mzc2YTM4ZTE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAyMC0wNC0wMSAgRXJp
YyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdW51
c2VkIG1lZGlhIGNvbnRyb2xzIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwOTg3NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjExNzI3Mzg+
CisKKyAgICAgICAgUmVtb3ZlIGNvZGUgZm9yIHRoZSwgbm93IHVudXNlZCwgQysrIGJhc2VkIG1l
ZGlhIGNvbnRyb2xzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuCisKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OnRleHRUcmFja0NvbnRhaW5lcik6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0Lmg6CisgICAgICAgICogTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRnJvbVJlbmRlcmVyKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmg6IFJlbW92ZWQuCisgICAgICAgICogZG9t
L05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzTWVkaWFDb250cm9sRWxlbWVudCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc01lZGlhQ29udHJvbHMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6On5IVE1MTWVkaWFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVy
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGF1c2VBZnRl
ckRldGFjaGVkVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRh
dGVSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RN
ZWRpYVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
TG9hZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRO
ZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y2hhbmdl
TmV0d29ya1N0YXRlRnJvbUxvYWRpbmdUb0lkbGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50Ojpwcm9ncmVzc0V2ZW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpwbGF5YmFja1Byb2dyZXNzVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjphZGRUZXh0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6cmVtb3ZlVGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OmRpZEFkZFRleHRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjplbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVDYXB0aW9uQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmxheW91dFNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja3MpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJDaGFyYWN0ZXJpc3RpY0NoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlVm9sdW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZGlkQmVjb21lRnVsbHNjcmVlbkVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6d2lsbFN0b3BCZWluZ0Z1bGxzY3Jl
ZW5FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFj
a1JlYWR5U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OmNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0Q2xvc2VkQ2FwdGlvbnNW
aXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZU1l
ZGlhQ29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y2FwdGlv
blByZWZlcmVuY2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
OjpzZXRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Omdl
dEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OmNsb3NlQ2FwdGlvblRyYWNrc0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFDb250cm9scyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpoYXNNZWRpYUNvbnRyb2xzIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0
ZU1lZGlhQ29udHJvbHMpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFDb250cm9sc0hv
c3QpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVz
Lmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
Lmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbXBhcmVDdWVJbnRlcnZhbEZvckRpc3BsYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50
Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6cHJvY2Vzc0Fj
dGl2ZVZUVEN1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50Ojp1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFN0cm9r
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y2xlYXJU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjplbnRlcmVk
RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50OjpleGl0ZWRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVZpZGVvRGlzcGxheVNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6dXBkYXRlU2l6ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp0
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6aGlkZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpzaG93KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6Omlz
U2hvd2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50Ojpsb2dnZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nSWRlbnRpZmllciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojps
b2dDaGFubmVsIGNvbnN0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01l
ZGlhQ29udHJvbHMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29u
dHJvbHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
ZWRpYUFGLmNwcDoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZTo6c2V0UGFnZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJN
ZWRpYUNvbnRyb2xzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVk
aWFDb250cm9scy5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ29jb2EuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ29jb2E6Om1lZGlhQ29udHJvbHNGb3JtYXR0
ZWRTdHJpbmdGb3JEdXJhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6Om1lZGlhQ29udHJvbHNTdHls
ZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjptb2Rlcm5NZWRpYUNv
bnRyb2xzU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6bWVk
aWFDb250cm9sc1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6bWVk
aWFDb250cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5kVHlwZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6Om1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjptb2Rlcm5NZWRpYUNvbnRyb2xzU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6bWVkaWFDb250cm9sc1NjcmlwdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6bWVkaWFDb250cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5k
VHlwZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpnZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1c0ZvckVsZW1lbnQpOgor
CiAyMDIwLTAzLTMxICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFtpUGFkXSBVc2UgQVZBdWRpb1Nlc3Npb24gdG8gZGV0ZWN0IEFpclBsYXkgcm91dGUg
Y2hhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xz
L01lZGlhQ29udHJvbHNIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250
cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKaW5kZXggNTA4YjlhMThlZWYyMzgzYWI2MWI5OWNm
NjVmNTY1MmJjYjk1NzY3Ny4uMjc1MjYxZTk5OGQzMWYxNjg5MjlhNDkyMzg3NjdhODFhZjM0ODI0
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlh
Q29udHJvbHNIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJv
bHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCkBAIC0yNSwxNCArMjUsMTIgQEAKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLQogI2luY2x1
ZGUgIk1lZGlhQ29udHJvbHNIb3N0LmgiCiAKICNpbmNsdWRlICJDYXB0aW9uVXNlclByZWZlcmVu
Y2VzLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgorI2luY2x1ZGUgIk1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTE1OSwxMSAr
MTU3LDEwIEBAIHZvaWQgTWVkaWFDb250cm9sc0hvc3Q6OnNldFNlbGVjdGVkVGV4dFRyYWNrKFRl
eHRUcmFjayogdHJhY2spCiAKIEVsZW1lbnQqIE1lZGlhQ29udHJvbHNIb3N0Ojp0ZXh0VHJhY2tD
b250YWluZXIoKQogewotICAgIGlmICghbV90ZXh0VHJhY2tDb250YWluZXIgJiYgbV9tZWRpYUVs
ZW1lbnQpIHsKLSAgICAgICAgbV90ZXh0VHJhY2tDb250YWluZXIgPSBNZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkp
OwotICAgICAgICBtX3RleHRUcmFja0NvbnRhaW5lci0+c2V0TWVkaWFDb250cm9sbGVyKG1fbWVk
aWFFbGVtZW50LmdldCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fdGV4dFRyYWNrQ29udGFpbmVy
LmdldCgpOworICAgIGlmICghbV90ZXh0VHJhY2tDb250YWluZXIgJiYgbV9tZWRpYUVsZW1lbnQp
CisgICAgICAgIG1fdGV4dFRyYWNrQ29udGFpbmVyID0gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29u
dGFpbmVyRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLCAqbV9tZWRp
YUVsZW1lbnQpOworCisgICAgICAgIHJldHVybiBtX3RleHRUcmFja0NvbnRhaW5lci5nZXQoKTsK
IH0KIAogdm9pZCBNZWRpYUNvbnRyb2xzSG9zdDo6dXBkYXRlVGV4dFRyYWNrQ29udGFpbmVyKCkK
QEAgLTMyMSw1ICszMTgsMyBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0Ojpjb21wYWN0TW9kZSgp
IGNvbnN0CiB9CiAKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCmluZGV4IGU0MGY1MWYzM2Nm
MThkZmJlNTI2OGZlYTExYzc1MDkyZDU3MWFiOGIuLjQxNGNiMGNiNTZhMmYyODVhZDI0YzljNTIx
OWY0ODlmZjRlZTBhZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFj
b250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCkBAIC0yNSw4ICsyNSw2IEBACiAKICNw
cmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLQogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WYXJpYW50Lmg+CkBAIC0xMDQsNCArMTAyLDMgQEAgcHJpdmF0ZToKIAogfQogCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQppbmRleCA1Y2VhNWUxYzVlYmIwMDU1Yzg0MzMzZmJm
NGViMWM4NmQyZWM2YjY4Li41MzdlZWU3ZGFjYzdkYzQ0NmQ5ODk5NmQ4NGRiNWQxZGEzNGYxZWE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1
Z2luUmVwbGFjZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCkBAIC0yNSw4ICsyNSw2IEBACiAKICNpbXBvcnQg
ImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLQogI2ltcG9y
dCAiUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKIAogI2ltcG9ydCAiQ29tbW9uVk0uaCIK
QEAgLTQzNyw0ICs0MzUsMyBAQCBKU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNl
bWVudDo6ZXJyb3JMb2coSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUpCiAKIH0KIAotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDNkZTI1YzQwYTZlOTVkM2RiZDU3Mzg3NmJiNGZhMTYyZWZmZTcy
ZDUuLjNiYTI0ZDcxYzUyZjk0OGNkY2ZhYjhhZjkwYzNjY2E4M2E5ODBmZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC00NDcsNyArNDQ3LDYgQEAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5j
cHAKIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwCiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5TWF0aE1MRWxlbWVudC5jcHAKLWFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29u
dHJvbHMuY3BwCiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAKIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNwcAogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAKQEAgLTEzNjgsOSArMTM2Nyw3IEBAIGh0bWwv
cGFyc2VyL1hTU0F1ZGl0b3JEZWxlZ2F0ZS5jcHAKIGh0bWwvc2hhZG93L0F1dG9GaWxsQnV0dG9u
RWxlbWVudC5jcHAKIGh0bWwvc2hhZG93L0RhdGFMaXN0QnV0dG9uRWxlbWVudC5jcHAKIGh0bWwv
c2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcAotaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
RWxlbWVudFR5cGVzLmNwcAotaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCi1o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAoraHRtbC9zaGFkb3cvTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudC5jcHAKIGh0bWwvc2hhZG93L1Byb2dyZXNzU2hhZG93RWxl
bWVudC5jcHAKIGh0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKIGh0bWwvc2hhZG93
L1NwaW5CdXR0b25FbGVtZW50LmNwcApAQCAtMjE5MCw3ICsyMTg3LDYgQEAgcmVuZGVyaW5nL1Jl
bmRlckxpc3RJdGVtLmNwcAogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCiByZW5kZXJp
bmcvUmVuZGVyTWFycXVlZS5jcHAKIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAKLXJlbmRlcmlu
Zy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAog
cmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxv
dy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA5ZWNlYTYwYmVkY2Y4YzMzOGI0ZDg3NDc1ZDNhZGYxNTk4YWRiZTljLi5mYWY0
MzY3YWRiMGU1YWRmZGU3MGEyMGNlZjJhYjllNTdkNTQ4N2E1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MzgsNyArNjM4LDYg
QEAKIAkJMUQ5RjBGQzEyMTIyMDI5QjAwNUQ4RkQ0IC8qIFNoYXJlRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMURDNTU0MDAyMTFCQThDODAwNEI3
ODBFIC8qIFNoYXJlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTFEQkMxQjU2MjM0N0IzRDIwMEI5MDFBRiAvKiBQaWN0dXJlSW5QaWN0dXJl
T2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFEQkMxQjU1MjM0N0IzRDIwMEI5MDFBRiAvKiBQaWN0dXJlSW5QaWN0dXJlT2JzZXJ2ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxRjM2RUE5
QzFFMjFCQTE3MDA2MjFFMjUgLyogV2ViQmFja2dyb3VuZFRhc2tDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjM2RUE5QTFFMjFCQTE3
MDA2MjFFMjUgLyogV2ViQmFja2dyb3VuZFRhc2tDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUYzQzNCRUIxMzVDQUYzQzAwQjhD
MUFDIC8qIE1lZGlhQ29udHJvbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFGM0MzQkU5MTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmgg
Ki87IH07CiAJCTFGNzJCRjBCMTg3RkQ0NUMwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1lbW9y
eUhhbmRsZXJJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFGNzJCRjA5MTg3RkQ0MjcwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1lbW9yeUhhbmRs
ZXJJT1MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxRjg3NTZCMjFFMjJDMzM1MDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjg3
NTZCMTFFMjJCRUVGMDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUZBRkJG
MTkxNUE1RkE3NDAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUZBRkJGMTYxNUE1RkE1MjAwMDgzQTIwIC8qIFVU
SVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xMDg2LDcgKzEwODUsNyBAQAogCQk0MTZFNkZFOTFCQkQxMkU1MDAwQTYwNDMgLyog
UmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEQ4IC8qIFJlYWRhYmxlU3RyZWFt
QnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0MTZFNkZFOTFCQkQxMkU1MDAwQTYwNTMgLyogV3JpdGFibGVTdHJlYW1CdWlsdGlucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYx
QkIzMTEwRDAwQjc2NEU4IC8qIFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTZGRDI1RjI0MEZBNEU1MDA2
NjYxRDggLyogTm93UGxheWluZ0luZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxNkZEMjVEMjQwRUUxQUUwMDY2NjFEOCAvKiBOb3dQbGF5aW5nSW5m
by5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTQx
NzI1M0FCMTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE3MjUzQTkxMzU0QkJCQzAw
MzYwRjJBIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmggKi87IH07CisJCTQxNzI1M0FCMTM1NEJC
QkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTcyNTNBOTEzNTRC
QkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oICov
OyB9OwogCQk0MTc2MTJBRjFFM0E5OTQwMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2lu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTc2
MTJBQjFFM0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2ludC5jcHAgKi87IH07
CiAJCTQxNzYxMkIwMUUzQTk5NDAwMEMzRDgxRCAvKiBMaWJXZWJSVENNZWRpYUVuZHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTc2MTJBQzFF
M0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2ludC5oICovOyB9OwogCQk0MTc2
MTJCMTFFM0E5OTQwMDBDM0Q4MUQgLyogTGliV2ViUlRDUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNzYxMkFE
MUUzQTk5M0IwMEMzRDgxRCAvKiBMaWJXZWJSVENQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwICov
OyB9OwpAQCAtNDU2Niw3ICs0NTY1LDYgQEAKIAkJREU1Rjg2NTkxRkEyQUYyNDAwNkRCNjNCIC8q
IFVuaWZpZWRTb3VyY2U2MS1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IERFNUY4NjNBMUZBMkFGMDcwMDZEQjYzQiAvKiBVbmlmaWVkU291cmNlNjEt
bW0ubW0gKi87IH07CiAJCURFNzcxMDg2MUZBMkYwRDYwMDQ2MDAxNiAvKiBXZWJBcmNoaXZlRHVt
cFN1cHBvcnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMTc2M0YzQzFFMjA1MjM0MDAxRDU4REUgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0Lm1tICov
OyB9OwogCQlERUJDQ0REMjE2NjQ2RTgyMDBBNDUyRTEgLyogUmVuZGVyTWVkaWFDb250cm9scy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU0OUIzMDgx
NjVGMkZFMTAwMTAzMzhEIC8qIFJlbmRlck1lZGlhQ29udHJvbHMuaCAqLzsgfTsKLQkJREVCQ0NE
RDQxNjY0NkVBRjAwQTQ1MkUxIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU0OUIzMDAxNjVGMkZDNjAw
MTAzMzhEIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oICovOyB9OwogCQlERUNBN0Q5MzFG
OUU2N0I1MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTEzMS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERUNBN0Q2RDFGOUU2MUNGMDBFM0I2NjEgLyog
VW5pZmllZFNvdXJjZTEzMS5jcHAgKi87IH07CiAJCURFQ0E3RDk0MUY5RTY3QjUwMEUzQjY2MSAv
KiBVbmlmaWVkU291cmNlMTMyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IERFQ0E3RDdFMUY5RTYxRTMwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMTMy
LmNwcCAqLzsgfTsKIAkJREVDQTdEOTUxRjlFNjdCNTAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2Ux
MzMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREVD
QTdEODAxRjlFNjFFNTAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxMzMuY3BwICovOyB9OwpAQCAt
NjYzNCw4ICs2NjMyLDYgQEAKIAkJMURFRjA2REUyMzNEMkUxQzAwRUUyMjhEIC8qIERvY3VtZW50
UGljdHVyZUluUGljdHVyZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRG9jdW1lbnRQaWN0
dXJlSW5QaWN0dXJlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUYzNkVBOUEx
RTIxQkExNzAwNjIxRTI1IC8qIFdlYkJhY2tncm91bmRUYXNrQ29udHJvbGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJCYWNrZ3JvdW5kVGFza0NvbnRyb2xsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUYzNkVBOUIxRTIxQkExNzAwNjIxRTI1IC8q
IFdlYkJhY2tncm91bmRUYXNrQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdlYkJhY2tncm91bmRUYXNrQ29udHJvbGxlci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUYzQzNCRTgxMzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29u
dHJvbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFDb250
cm9scy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFGM0MzQkU5MTM1Q0FGM0Mw
MEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1lZGlhQ29udHJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUY3MkJG
MDgxODdGRDQyNzAwMDlCQ0IzIC8qIFRpbGVDb250cm9sbGVyTWVtb3J5SGFuZGxlcklPUy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaWxlQ29udHJvbGxlck1lbW9y
eUhhbmRsZXJJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRjcyQkYwOTE4
N0ZENDI3MDAwOUJDQjMgLyogVGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5kbGVySU9TLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbGVDb250cm9sbGVyTWVtb3J5SGFuZGxlcklP
Uy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRjg3NTZCMDFFMjJCRUVGMDA0MkM0
MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzQ0OCw4ICs3NDQ0LDggQEAKIAkJNDE2
RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtlclJlcG9ydGluZ1Byb3h5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlclJlcG9ydGluZ1Byb3h5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNkZEMjVEMjQwRUUxQUUwMDY2NjFEOCAvKiBOb3dQbGF5
aW5nSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb3dQbGF5aW5nSW5m
by5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTcwQTJFOTFEOEMwQ0MwMDAzMTg0
NTIgLyogSlNET01XcmFwcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTRE9NV3JhcHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxNzI1
M0E4MTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxNzI1M0E5MTM1NEJCQkMwMDM2MEYyQSAvKiBN
ZWRpYUNvbnRyb2xFbGVtZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
ZWRpYUNvbnRyb2xFbGVtZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTcy
NTNBODEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDE3MjUzQTkxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MTc2MTJBQjFFM0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2lu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMaWJXZWJSVENNZWRp
YUVuZHBvaW50LmNwcDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBvaW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE3NjEyQUMxRTNBOTkzQjAwQzNEODFE
IC8qIExpYldlYlJUQ01lZGlhRW5kcG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gTGliV2ViUlRDTWVkaWFFbmRwb2ludC5oOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJU
Q01lZGlhRW5kcG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE3NjEyQUQx
RTNBOTkzQjAwQzNEODFEIC8qIExpYldlYlJUQ1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMaWJXZWJSVENQZWVyQ29ubmVjdGlv
bkJhY2tlbmQuY3BwOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJUQ1BlZXJDb25uZWN0aW9uQmFj
a2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDU3Miw4ICsxNDU2OCw2
IEBACiAJCURCRkNCMEVCRkY1Q0Q3N0VCRUIzNTk1RiAvKiBSZW5kZXJNYXRoTUxQYWRkZWQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWF0aE1MUGFkZGVk
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREQwNUZFMEIwQjhCQTNDNjAwOUFD
REZFIC8qIFdlYkNvcmVPYmpDRXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJDb3JlT2JqQ0V4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
RDc2M0JCMTA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5keWxpYiAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIi
OyBuYW1lID0gbGlieG1sMi5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYnhtbDIuZHlsaWI7IHNv
dXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07Ci0JCURFNDlCMkZGMTY1RjJGQzYwMDEwMzM4RCAv
KiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJREU0OUIzMDAxNjVGMkZDNjAwMTAzMzhEIC8qIE1lZGlhQ29udHJvbEVs
ZW1lbnRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUNvbnRy
b2xFbGVtZW50VHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREU0OUIzMDcx
NjVGMkZFMTAwMTAzMzhEIC8qIFJlbmRlck1lZGlhQ29udHJvbHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWVkaWFDb250cm9scy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFNDlCMzA4MTY1RjJGRTEwMDEwMzM4RCAvKiBSZW5kZXJN
ZWRpYUNvbnRyb2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1l
ZGlhQ29udHJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREU1RjgzQjIxRkEx
ODY3NjAwNkRCNjNBIC8qIFVuaWZpZWRTb3VyY2UzMDEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gVW5pZmllZFNvdXJjZTMwMS5jcHA7IHBhdGggPSAiRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTMwMS5jcHAiOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTgyNTAsMTIgKzE4MjQ0LDggQEAK
IAkJCQlBN0M5QUJGNzEzNTdBM0JGMDBGNTUwM0YgLyogRGV0YWlsc01hcmtlckNvbnRyb2wuaCAq
LywKIAkJCQk1MTAxOTJEMzE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVt
ZW50LmNwcCAqLywKIAkJCQk1MTAxOTJENDE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9s
c1Jvb3RFbGVtZW50LmggKi8sCi0JCQkJNDE3MjUzQTgxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlh
Q29udHJvbEVsZW1lbnRzLmNwcCAqLywKLQkJCQk0MTcyNTNBOTEzNTRCQkJDMDAzNjBGMkEgLyog
TWVkaWFDb250cm9sRWxlbWVudHMuaCAqLywKLQkJCQlERTQ5QjJGRjE2NUYyRkM2MDAxMDMzOEQg
LyogTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcCAqLywKLQkJCQlERTQ5QjMwMDE2NUYyRkM2
MDAxMDMzOEQgLyogTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmggKi8sCi0JCQkJMUYzQzNCRTgx
MzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMuY3BwICovLAotCQkJCTFGM0MzQkU5MTM1
Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggKi8sCisJCQkJNDE3MjUzQTgxMzU0QkJC
QzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuY3BwICov
LAorCQkJCTQxNzI1M0E5MTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50LmggKi8sCiAJCQkJRTRFMjQzODIxREFCOTUzRTAwQzI2RTRCIC8qIG1l
dGVyRWxlbWVudFNoYWRvdy5jc3MgKi8sCiAJCQkJQTcxNUU2NTAxMzRCQkJFQzAwRDhFNzEzIC8q
IFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHAgKi8sCiAJCQkJQTcxNUU2NTExMzRCQkJFQzAwRDhF
NzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5oICovLApAQCAtMzE4MTgsMTIgKzMxODA4LDEw
IEBACiAJCQkJQ0RDQzlCQ0YyMjM4N0U5QTAwRkZCNTFDIC8qIE1lZGlhQ2FwYWJpbGl0aWVzRGVj
b2RpbmdJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRENDOUJEMTIyMzg3RUFBMDBGRkI1MUMg
LyogTWVkaWFDYXBhYmlsaXRpZXNFbmNvZGluZ0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTA3
OEUwOTNBMTdEMTZFMUMwMDQyMEFBMSAvKiBNZWRpYUNvbnN0cmFpbnRzLmggaW4gSGVhZGVycyAq
LywKLQkJCQk0MTcyNTNBQjEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sRWxlbWVudHMu
aCBpbiBIZWFkZXJzICovLAotCQkJCURFQkNDREQ0MTY2NDZFQUYwMEE0NTJFMSAvKiBNZWRpYUNv
bnRyb2xFbGVtZW50VHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjY1Q0M4MTQ1QjFFNzUw
MEM0QzdBQSAvKiBNZWRpYUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjY1Q0NB
MTQ1QjQ0ODgwMEM0QzdBQSAvKiBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTFGM0MzQkVCMTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDREFCNkQyOTE3QzdERTZDMDBDNjBCMzQgLyogTWVkaWFDb250cm9s
c0hvc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNzI1M0FCMTM1NEJCQkMwMDM2MEYyQSAvKiBN
ZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDREYyQjAwNDE4MUYwNTlDMDBGMkI0MjQgLyogTWVkaWFEZXNjcmlwdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTUxNDVCOTAxQjNBMUNFMDAwNjYyQkY3IC8qIE1lZGlhRGV2aWNlSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUVBNzI1RDMxQUNBQkQ0NzAwRUFEMTdCIC8qIE1lZGlhRGV2
aWNlcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcAppbmRleCBkN2Y1YzRjOGYzOTc5MGMxMDZlOGJmZDY1YzRlODU1NzE4
ZDg5MzZkLi5hMmFhZGY0MGY1ZTc5MjdhZTZiMzllM2E4NjEyYTc1YzIyOTVhNmZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTQ0LDcg
KzQ0LDYgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJveC5oIgogI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1hdGhN
TEVsZW1lbnQuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oIgogI2lu
Y2x1ZGUgIkFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdC5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxp
dHlNZW51TGlzdC5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5oIgpA
QCAtMTEyLDEwICsxMTEsNiBAQAogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8
d3RmL1NldEZvclNjb3BlLmg+CiAKLSNpZiBFTkFCTEUoVklERU8pCi0jaW5jbHVkZSAiTWVkaWFD
b250cm9sRWxlbWVudHMuaCIKLSNlbmRpZgotCiAjaWYgQ09NUElMRVIoTVNWQykKIC8vIFNlZSBo
dHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzF3ZWE1endlLmFzcHgKICNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQpAQCAtNTI5LDEyICs1MjQsNiBAQCBzdGF0aWMg
UmVmPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNyZWF0ZUZyb21SZW5kZXJlcihSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0OjpjcmVh
dGUocmVuZGVyZXIpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgLy8gbWVkaWEg
Y29udHJvbHMKLSAgICBpZiAobm9kZSAmJiBub2RlLT5pc01lZGlhQ29udHJvbEVsZW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OmNyZWF0ZShyZW5kZXJl
cik7Ci0jZW5kaWYKLQogICAgIGlmIChpczxSZW5kZXJTVkdSb290PigqcmVuZGVyZXIpKQogICAg
ICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVNWR1Jvb3Q6OmNyZWF0ZShyZW5kZXJlcik7CiAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlN
ZWRpYUNvbnRyb2xzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU1lZGlhQ29udHJvbHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTJk
ODQwM2IzNGJiZjdlMThmNDAxYzM4OTMzOWY2YTYxNGRhZGZhLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzM2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShWSURFTykKLQotI2luY2x1ZGUg
IkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmgiCi0KLSNpbmNsdWRlICJBWE9iamVjdENhY2hl
LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJp
bmdzLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwotCi0KLUFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OkFjY2Vzc2liaWxpdHlN
ZWRpYUNvbnRyb2woUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLSAgICA6IEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QocmVuZGVyZXIpCi17Ci19Ci0KLVJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBB
Y2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
LXsKLSAgICBBU1NFUlQocmVuZGVyZXItPm5vZGUoKSk7Ci0KLSAgICBzd2l0Y2ggKG1lZGlhQ29u
dHJvbEVsZW1lbnRUeXBlKHJlbmRlcmVyLT5ub2RlKCkpKSB7Ci0gICAgY2FzZSBNZWRpYVNsaWRl
cjoKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lOjpjcmVhdGUocmVu
ZGVyZXIpOwotCi0gICAgY2FzZSBNZWRpYUN1cnJlbnRUaW1lRGlzcGxheToKLSAgICBjYXNlIE1l
ZGlhVGltZVJlbWFpbmluZ0Rpc3BsYXk6Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5TWVk
aWFUaW1lRGlzcGxheTo6Y3JlYXRlKHJlbmRlcmVyKTsKLQotICAgIGNhc2UgTWVkaWFDb250cm9s
c1BhbmVsOgotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWlu
ZXI6OmNyZWF0ZShyZW5kZXJlcik7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sKHJlbmRlcmVyKSk7Ci0gICAgfQot
fQotCi1NZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpj
b250cm9sVHlwZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcigp
LT5ub2RlKCkpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWVsaW5lQ29udGFpbmVyOyAvLyBUaW1l
bGluZSBjb250YWluZXIgaXMgbm90IGFjY2Vzc2libGUuCi0KLSAgICByZXR1cm4gbWVkaWFDb250
cm9sRWxlbWVudFR5cGUocmVuZGVyZXIoKS0+bm9kZSgpKTsKLX0KLQotY29uc3QgU3RyaW5nJiBB
Y2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpjb250cm9sVHlwZU5hbWUoKSBjb25zdAotewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhRW50ZXJGdWxsc2NyZWVu
QnV0dG9uTmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiRW50ZXJGdWxsc2NyZWVuQnV0dG9u
IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhRXhpdEZ1
bGxzY3JlZW5CdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJFeGl0RnVsbHNjcmVl
bkJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRp
YU11dGVCdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJNdXRlQnV0dG9uIikpOwot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhUGxheUJ1dHRvbk5h
bWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlBsYXlCdXR0b24iKSk7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFTZWVrQmFja0J1dHRvbk5hbWUoTUFLRV9T
VEFUSUNfU1RSSU5HX0lNUEwoIlNlZWtCYWNrQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhU2Vla0ZvcndhcmRCdXR0b25OYW1lKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCJTZWVrRm9yd2FyZEJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVJld2luZEJ1dHRvbk5hbWUoTUFLRV9TVEFUSUNf
U1RSSU5HX0lNUEwoIlJld2luZEJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgU3RyaW5nPiBtZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b25OYW1lKE1BS0VfU1RBVElD
X1NUUklOR19JTVBMKCJSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhVW5NdXRlQnV0dG9uTmFtZShNQUtFX1NUQVRJ
Q19TVFJJTkdfSU1QTCgiVW5NdXRlQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBTdHJpbmc+IG1lZGlhUGF1c2VCdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19J
TVBMKCJQYXVzZUJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3Ry
aW5nPiBtZWRpYVN0YXR1c0Rpc3BsYXlOYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJTdGF0
dXNEaXNwbGF5IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1l
ZGlhQ3VycmVudFRpbWVEaXNwbGF5KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJDdXJyZW50VGlt
ZURpc3BsYXkiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVk
aWFUaW1lUmVtYWluaW5nRGlzcGxheShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVGltZVJlbWFp
bmluZ0Rpc3BsYXkiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4g
bWVkaWFTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBM
KCJTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b24iKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IFN0cmluZz4gbWVkaWFIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b25OYW1lKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCJIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24iKSk7Ci0KLSAgICBzd2l0
Y2ggKGNvbnRyb2xUeXBlKCkpIHsKLSAgICBjYXNlIE1lZGlhRW50ZXJGdWxsc2NyZWVuQnV0dG9u
OgotICAgICAgICByZXR1cm4gbWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b25OYW1lOwotICAgIGNh
c2UgTWVkaWFFeGl0RnVsbHNjcmVlbkJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhRXhpdEZ1
bGxzY3JlZW5CdXR0b25OYW1lOwotICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uOgotICAgICAgICBy
ZXR1cm4gbWVkaWFNdXRlQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhUGxheUJ1dHRvbjoKLSAg
ICAgICAgcmV0dXJuIG1lZGlhUGxheUJ1dHRvbk5hbWU7Ci0gICAgY2FzZSBNZWRpYVNlZWtCYWNr
QnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFTZWVrQmFja0J1dHRvbk5hbWU7Ci0gICAgY2Fz
ZSBNZWRpYVNlZWtGb3J3YXJkQnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFTZWVrRm9yd2Fy
ZEJ1dHRvbk5hbWU7Ci0gICAgY2FzZSBNZWRpYVJld2luZEJ1dHRvbjoKLSAgICAgICAgcmV0dXJu
IG1lZGlhUmV3aW5kQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1
dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvbk5hbWU7Ci0g
ICAgY2FzZSBNZWRpYVVuTXV0ZUJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhVW5NdXRlQnV0
dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhUGF1c2VCdXR0b246Ci0gICAgICAgIHJldHVybiBtZWRp
YVBhdXNlQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhU3RhdHVzRGlzcGxheToKLSAgICAgICAg
cmV0dXJuIG1lZGlhU3RhdHVzRGlzcGxheU5hbWU7Ci0gICAgY2FzZSBNZWRpYUN1cnJlbnRUaW1l
RGlzcGxheToKLSAgICAgICAgcmV0dXJuIG1lZGlhQ3VycmVudFRpbWVEaXNwbGF5OwotICAgIGNh
c2UgTWVkaWFUaW1lUmVtYWluaW5nRGlzcGxheToKLSAgICAgICAgcmV0dXJuIG1lZGlhVGltZVJl
bWFpbmluZ0Rpc3BsYXk7Ci0gICAgY2FzZSBNZWRpYVNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbjoK
LSAgICAgICAgcmV0dXJuIG1lZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uTmFtZTsKLSAgICBj
YXNlIE1lZGlhSGlkZUNsb3NlZENhcHRpb25zQnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFI
aWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b25OYW1lOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eU1lZGlhQ29udHJvbDo6YWNjZXNzaWJpbGl0eVRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlU
ZXh0PiYgdGV4dE9yZGVyKSBjb25zdAotewotICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGFjY2Vz
c2liaWxpdHlEZXNjcmlwdGlvbigpOwotICAgIGlmICghZGVzY3JpcHRpb24uaXNFbXB0eSgpKQot
ICAgICAgICB0ZXh0T3JkZXIuYXBwZW5kKEFjY2Vzc2liaWxpdHlUZXh0KGRlc2NyaXB0aW9uLCBB
Y2Nlc3NpYmlsaXR5VGV4dFNvdXJjZTo6QWx0ZXJuYXRpdmUpKTsKLQotICAgIFN0cmluZyB0aXRs
ZSA9IHRoaXMtPnRpdGxlKCk7Ci0gICAgaWYgKCF0aXRsZS5pc0VtcHR5KCkpCi0gICAgICAgIHRl
eHRPcmRlci5hcHBlbmQoQWNjZXNzaWJpbGl0eVRleHQodGl0bGUsIEFjY2Vzc2liaWxpdHlUZXh0
U291cmNlOjpBbHRlcm5hdGl2ZSkpOwotCi0gICAgU3RyaW5nIGhlbHB0ZXh0ID0gaGVscFRleHQo
KTsKLSAgICBpZiAoIWhlbHB0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgdGV4dE9yZGVyLmFwcGVu
ZChBY2Nlc3NpYmlsaXR5VGV4dChoZWxwdGV4dCwgQWNjZXNzaWJpbGl0eVRleHRTb3VyY2U6Okhl
bHApKTsKLX0KLSAgICAKLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OnRpdGxl
KCkgY29uc3QKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBjb250
cm9sc1BhbmVsKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJDb250cm9sc1BhbmVsIikpOwotCi0g
ICAgaWYgKGNvbnRyb2xUeXBlKCkgPT0gTWVkaWFDb250cm9sc1BhbmVsKQotICAgICAgICByZXR1
cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmluZyhjb250cm9sc1BhbmVsKTsKLQot
ICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0aXRsZSgpOwotfQotCi1TdHJp
bmcgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmluZyhj
b250cm9sVHlwZU5hbWUoKSk7Ci19Ci0KLVN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9s
OjpoZWxwVGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVs
ZW1lbnRIZWxwVGV4dChjb250cm9sVHlwZU5hbWUoKSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0
eU1lZGlhQ29udHJvbDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAotewot
ICAgIGlmICghbV9yZW5kZXJlciB8fCBtX3JlbmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAh
PSBWaXNpYmlsaXR5OjpWaXNpYmxlIHx8IGNvbnRyb2xUeXBlKCkgPT0gTWVkaWFUaW1lbGluZUNv
bnRhaW5lcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gYWNjZXNzaWJpbGl0
eUlzSWdub3JlZEJ5RGVmYXVsdCgpOwotfQotCi1BY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmls
aXR5TWVkaWFDb250cm9sOjpyb2xlVmFsdWUoKSBjb25zdAotewotICAgIHN3aXRjaCAoY29udHJv
bFR5cGUoKSkgewotICAgIGNhc2UgTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b246Ci0gICAgY2Fz
ZSBNZWRpYUV4aXRGdWxsc2NyZWVuQnV0dG9uOgotICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uOgot
ICAgIGNhc2UgTWVkaWFQbGF5QnV0dG9uOgotICAgIGNhc2UgTWVkaWFTZWVrQmFja0J1dHRvbjoK
LSAgICBjYXNlIE1lZGlhU2Vla0ZvcndhcmRCdXR0b246Ci0gICAgY2FzZSBNZWRpYVJld2luZEJ1
dHRvbjoKLSAgICBjYXNlIE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvbjoKLSAgICBjYXNlIE1l
ZGlhVW5NdXRlQnV0dG9uOgotICAgIGNhc2UgTWVkaWFQYXVzZUJ1dHRvbjoKLSAgICBjYXNlIE1l
ZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uOgotICAgIGNhc2UgTWVkaWFIaWRlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b246Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Um9sZTo6QnV0dG9uOwot
Ci0gICAgY2FzZSBNZWRpYVN0YXR1c0Rpc3BsYXk6Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5Um9sZTo6U3RhdGljVGV4dDsKLQotICAgIGNhc2UgTWVkaWFUaW1lbGluZUNvbnRhaW5lcjoK
LSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSb2xlOjpHcm91cDsKLQotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Um9sZTo6
VW5rbm93bjsKLX0KLQotCi0vLwotLy8gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWlu
ZXIKLQotQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXI6OkFjY2Vzc2liaWxpdHlN
ZWRpYUNvbnRyb2xzQ29udGFpbmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi0gICAgOiBBY2Nl
c3NpYmlsaXR5TWVkaWFDb250cm9sKHJlbmRlcmVyKQotewotfQotCi1SZWY8QWNjZXNzaWJpbGl0
eU9iamVjdD4gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXI6OmNyZWF0ZShSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFjY2Vzc2li
aWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyKHJlbmRlcmVyKSk7Ci19Ci0KLVN0cmluZyBBY2Nl
c3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmlu
ZyhlbGVtZW50VHlwZU5hbWUoKSk7Ci19Ci0KLVN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250
cm9sc0NvbnRhaW5lcjo6aGVscFRleHQoKSBjb25zdAotewotICAgIHJldHVybiBsb2NhbGl6ZWRN
ZWRpYUNvbnRyb2xFbGVtZW50SGVscFRleHQoZWxlbWVudFR5cGVOYW1lKCkpOwotfQotCi1ib29s
IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpjb250cm9sbGluZ1ZpZGVvRWxl
bWVudCgpIGNvbnN0Ci17Ci0gICAgYXV0byBlbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KCpt
X3JlbmRlcmVyKTsKLSAgICByZXR1cm4gIWVsZW1lbnQgfHwgZWxlbWVudC0+aXNWaWRlbygpOwot
fQotCi1jb25zdCBTdHJpbmcmIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpl
bGVtZW50VHlwZU5hbWUoKSBjb25zdAotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25z
dCBTdHJpbmc+IHZpZGVvRWxlbWVudChNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVmlkZW9FbGVt
ZW50IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGF1ZGlvRWxl
bWVudChNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQXVkaW9FbGVtZW50IikpOwotCi0gICAgaWYg
KGNvbnRyb2xsaW5nVmlkZW9FbGVtZW50KCkpCi0gICAgICAgIHJldHVybiB2aWRlb0VsZW1lbnQ7
Ci0gICAgcmV0dXJuIGF1ZGlvRWxlbWVudDsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5TWVkaWFD
b250cm9sc0NvbnRhaW5lcjo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAot
ewotICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZhdWx0KCk7Ci19Ci0KLS8v
Ci0vLyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZQotCi1BY2Nlc3NpYmlsaXR5TWVkaWFUaW1l
bGluZTo6QWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
LSAgICA6IEFjY2Vzc2liaWxpdHlTbGlkZXIocmVuZGVyZXIpCi17Ci19Ci0KLVJlZjxBY2Nlc3Np
YmlsaXR5T2JqZWN0PiBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6Y3JlYXRlKFJlbmRlck9i
amVjdCogcmVuZGVyZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQWNjZXNzaWJpbGl0
eU1lZGlhVGltZWxpbmUocmVuZGVyZXIpKTsKLX0KLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRp
YVRpbWVsaW5lOjp2YWx1ZURlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBOb2RlKiBub2RlID0g
bV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUp
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBmbG9hdCB0aW1lID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLnZhbHVlKCkudG9GbG9hdCgpOwotICAgIHJldHVybiBs
b2NhbGl6ZWRNZWRpYVRpbWVEZXNjcmlwdGlvbih0aW1lKTsKLX0KLQotU3RyaW5nIEFjY2Vzc2li
aWxpdHlNZWRpYVRpbWVsaW5lOjpoZWxwVGV4dCgpIGNvbnN0Ci17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IFN0cmluZz4gc2xpZGVyKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJT
bGlkZXIiKSk7Ci0gICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRIZWxwVGV4
dChzbGlkZXIpOwotfQotCi0KLS8vCi0vLyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheQot
Ci1BY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6QWNjZXNzaWJpbGl0eU1lZGlhVGltZURp
c3BsYXkoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLSAgICA6IEFjY2Vzc2liaWxpdHlNZWRpYUNv
bnRyb2wocmVuZGVyZXIpCi17Ci19Ci0KLVJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBBY2Nlc3Np
YmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3BsYXko
cmVuZGVyZXIpKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6Y29t
cHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAotewotICAgIGlmICghbV9yZW5kZXJl
ciB8fCBtX3JlbmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNp
YmxlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghbV9yZW5kZXJlci0+c3R5bGUo
KS53aWR0aCgpLnZhbHVlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIHJldHVy
biBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZhdWx0KCk7Ci19Ci0KLVN0cmluZyBBY2Nlc3Np
YmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3QK
LXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBjdXJyZW50VGltZURp
c3BsYXkoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkN1cnJlbnRUaW1lRGlzcGxheSIpKTsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0aW1lUmVtYWluaW5nRGlzcGxh
eShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVGltZVJlbWFpbmluZ0Rpc3BsYXkiKSk7Ci0KLSAg
ICBpZiAoY29udHJvbFR5cGUoKSA9PSBNZWRpYUN1cnJlbnRUaW1lRGlzcGxheSkKLSAgICAgICAg
cmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRTdHJpbmcoY3VycmVudFRpbWVEaXNw
bGF5KTsKLQotICAgIHJldHVybiBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50U3RyaW5nKHRp
bWVSZW1haW5pbmdEaXNwbGF5KTsKLX0KLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVE
aXNwbGF5OjpzdHJpbmdWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFt
X3JlbmRlcmVyLT5ub2RlKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGZsb2F0
IHRpbWUgPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQqPihtX3Jl
bmRlcmVyLT5ub2RlKCkpLT5jdXJyZW50VmFsdWUoKTsKLSAgICByZXR1cm4gbG9jYWxpemVkTWVk
aWFUaW1lRGVzY3JpcHRpb24oc3RkOjphYnModGltZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYWQ2ZDk2ZTM2Zjg1YjM3OWU1Y2Y5NWNlNGI0NWNi
M2Q2ZjdjZDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoVklERU8p
Ci0KLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5U2xpZGVyLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250
cm9sRWxlbWVudHMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBY2Nlc3NpYmls
aXR5TWVkaWFDb250cm9sIDogcHVibGljIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QgewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlKFJlbmRlck9i
amVjdCopOwotICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2woKSA9IGRlZmF1
bHQ7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlVmFsdWUoKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIFN0cmluZyB0aXRsZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBhY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgaGVscFRleHQo
KSBjb25zdCBvdmVycmlkZTsKLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IEFjY2Vzc2liaWxp
dHlNZWRpYUNvbnRyb2woUmVuZGVyT2JqZWN0Kik7Ci0gICAgTWVkaWFDb250cm9sRWxlbWVudFR5
cGUgY29udHJvbFR5cGUoKSBjb25zdDsKLSAgICBjb25zdCBTdHJpbmcmIGNvbnRyb2xUeXBlTmFt
ZSgpIGNvbnN0OwotICAgIGJvb2wgY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25z
dCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGFjY2Vzc2liaWxpdHlUZXh0KFZlY3Rv
cjxBY2Nlc3NpYmlsaXR5VGV4dD4mKSBjb25zdCBvdmVycmlkZTsKLX07Ci0KLQotY2xhc3MgQWNj
ZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUgZmluYWwgOiBwdWJsaWMgQWNjZXNzaWJpbGl0eVNsaWRl
ciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjcmVhdGUo
UmVuZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVhbCB+QWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUo
KSA9IGRlZmF1bHQ7Ci0KLSAgICBTdHJpbmcgaGVscFRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBTdHJpbmcgdmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgot
ICAgIGV4cGxpY2l0IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lKFJlbmRlck9iamVjdCopOwot
Ci0gICAgYm9vbCBpc01lZGlhVGltZWxpbmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9Ci19OwotCi0KLWNsYXNzIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyIGZp
bmFsIDogcHVibGljIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wgewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlKFJlbmRlck9iamVjdCopOwotICAg
IHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyKCkgPSBkZWZhdWx0
OwotCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gQWNjZXNzaWJpbGl0eVJvbGU6OlRvb2xiYXI7IH0KLQotICAgIFN0cmluZyBoZWxwVGV4
dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24o
KSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBBY2Nlc3NpYmlsaXR5
TWVkaWFDb250cm9sc0NvbnRhaW5lcihSZW5kZXJPYmplY3QqKTsKLSAgICBib29sIGNvbnRyb2xs
aW5nVmlkZW9FbGVtZW50KCkgY29uc3Q7Ci0gICAgY29uc3QgU3RyaW5nJiBlbGVtZW50VHlwZU5h
bWUoKSBjb25zdDsKLSAgICBib29sIGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29u
c3Qgb3ZlcnJpZGU7Ci19OwotCi0KLWNsYXNzIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5
IGZpbmFsIDogcHVibGljIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wgewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlKFJlbmRlck9iamVjdCopOwot
ICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5KCkgPSBkZWZhdWx0Owot
Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uVGltZXI7IH0KLQotICAgIFN0cmluZyBz
dHJpbmdWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVz
Y3JpcHRpb24oKSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBBY2Nl
c3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheShSZW5kZXJPYmplY3QqKTsKLSAgICBib29sIGlzTWVk
aWFDb250cm9sTGFiZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgYm9v
bCBjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IG92ZXJyaWRlOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgKaW5kZXggNmQ5NzZlOWRmYmRkZDg4YjU3Yzc5YjFlMzE4YjIwYWY5YmYwZjNmMi4uZDIwOGM3
MTc5NjkxNzJhYzQxMTM3ODAyMmQ0OGNhODdlYWMwZWYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC0xOTgs
OCArMTk4LDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNBZnRlclBzZXVkb0VsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBwc2V1ZG9JZCgpID09IFBzZXVkb0lkOjpBZnRlcjsgfQogICAgIFBzZXVkb0lk
IHBzZXVkb0lkKCkgY29uc3QgeyByZXR1cm4gKGlzRWxlbWVudE5vZGUoKSAmJiBoYXNDdXN0b21T
dHlsZVJlc29sdmVDYWxsYmFja3MoKSkgPyBjdXN0b21Qc2V1ZG9JZCgpIDogUHNldWRvSWQ6Ok5v
bmU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhQ29udHJvbHMoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICB2aXJ0dWFs
IGJvb2wgaXNXZWJWVFRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggNzE1MTdhNzc5YWQ2
ZjVkNzU5MTcwOWU4YmYwODQ2MmE2Yjc3NDRlMi4uMDI5YjhhNzE1MzI5OWFmMmViMGQ0NzU3Yjhl
MzdmNDQ4NWNkMjdmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2hy
b21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ29tbW9uVk0uaCIK
ICNpbmNsdWRlICJDb250ZW50UnVsZUxpc3RSZXN1bHRzLmgiCkBAIC02MCwxMCArNjEsMTEgQEAK
ICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVy
cmVkLmgiCiAjaW5jbHVkZSAiSlNIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNNZWRp
YUNvbnRyb2xzSG9zdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiTWVk
aWFDb250cm9scy5oIgorI2luY2x1ZGUgIk1lZGlhQ29udHJvbHNIb3N0LmgiCiAjaW5jbHVkZSAi
TWVkaWFEb2N1bWVudC5oIgogI2luY2x1ZGUgIk1lZGlhRXJyb3IuaCIKICNpbmNsdWRlICJNZWRp
YUZyYWdtZW50VVJJUGFyc2VyLmgiCkBAIC05Nyw2ICs5OSw3IEBACiAjaW5jbHVkZSAiVXNlckNv
bnRlbnRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKICNp
bmNsdWRlICJWaWRlb1BsYXliYWNrUXVhbGl0eS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1NjcmlwdE9iamVjdC5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4QXJyYXkuaD4K
ICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgpAQCAtMTU5LDEy
ICsxNjIsNiBAQAogI2luY2x1ZGUgIk1lZGlhS2V5cy5oIgogI2VuZGlmCiAKLSNpZiBFTkFCTEUo
TUVESUFfQ09OVFJPTFNfU0NSSVBUKQotI2luY2x1ZGUgIkpTTWVkaWFDb250cm9sc0hvc3QuaCIK
LSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzSG9zdC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1NjcmlwdE9iamVjdC5oPgotI2VuZGlmCi0KICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjZW5kaWYKQEAgLTQ0NywxMCArNDQ0LDggQEAg
SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCYgZG9jdW0KICAgICAsIG1faGFzRXZlck5vdGlmaWVkQWJvdXRQbGF5
aW5nKGZhbHNlKQogICAgICwgbV9oYXNFdmVySGFkQXVkaW8oZmFsc2UpCiAgICAgLCBtX2hhc0V2
ZXJIYWRWaWRlbyhmYWxzZSkKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAg
ICwgbV9tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IoZmFsc2UpCiAgICAgLCBt
X2hhdmVTZXRVcENhcHRpb25Db250YWluZXIoZmFsc2UpCi0jZW5kaWYKICAgICAsIG1faXNTY3J1
YmJpbmdSZW1vdGVseShmYWxzZSkKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgLCBtX3Ry
YWNrc0FyZVJlYWR5KHRydWUpCkBAIC02MDAsMTAgKzU5NSw4IEBAIEhUTUxNZWRpYUVsZW1lbnQ6
On5IVE1MTWVkaWFFbGVtZW50KCkKICAgICB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJQV9D
T05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKG1faXNvbGF0ZWRXb3JsZCkKICAgICAgICAgbV9pc29s
YXRlZFdvcmxkLT5jbGVhcldyYXBwZXJzKCk7Ci0jZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9T
RVNTSU9OKQogICAgIGlmIChtX3Nlc3Npb24pIHsKQEAgLTgyMiwxOSArODE1LDcgQEAgUmVuZGVy
UHRyPFJlbmRlckVsZW1lbnQ+IEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJl
cihSZW5kZXJTdHlsZSYmIHMKIAogYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpjaGlsZFNob3VsZENy
ZWF0ZVJlbmRlcmVyKGNvbnN0IE5vZGUmIGNoaWxkKSBjb25zdAogewotI2lmIEVOQUJMRShNRURJ
QV9DT05UUk9MU19TQ1JJUFQpCiAgICAgcmV0dXJuIGhhc1NoYWRvd1Jvb3RQYXJlbnQoY2hpbGQp
ICYmIEhUTUxFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNoaWxkKTsKLSNlbHNl
Ci0gICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAvLyA8bWVkaWE+IGRvZXNuJ3QgYWxsb3cgaXRzIGNvbnRlbnQsIGluY2x1ZGluZyBzaGFkb3cg
c3VidHJlZSwgdG8KLSAgICAvLyBiZSByZW5kZXJlZC4gU28gdGhpcyBzaG91bGQgcmV0dXJuIGZh
bHNlIGZvciBtb3N0IG9mIHRoZSBjaGlsZHJlbi4KLSAgICAvLyBPbmUgZXhjZXB0aW9uIGlzIGEg
c2hhZG93IHRyZWUgYnVpbHQgZm9yIHJlbmRlcmluZyBjb250cm9scyB3aGljaCBzaG91bGQgYmUg
dmlzaWJsZS4KLSAgICAvLyBTbyB3ZSBsZXQgdGhlbSBnbyBoZXJlIGJ5IGNvbXBhcmluZyBpdHMg
c3VidHJlZSByb290IHdpdGggb25lIG9mIHRoZSBjb250cm9scy4KLSAgICByZXR1cm4gJm1lZGlh
Q29udHJvbHMoKS0+dHJlZVNjb3BlKCkgPT0gJmNoaWxkLnRyZWVTY29wZSgpCi0gICAgICAgICYm
IGhhc1NoYWRvd1Jvb3RQYXJlbnQoY2hpbGQpCi0gICAgICAgICYmIEhUTUxFbGVtZW50OjpjaGls
ZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNoaWxkKTsKLSNlbmRpZgogfQogCiBOb2RlOjpJbnNlcnRl
ZEludG9BbmNlc3RvclJlc3VsdCBIVE1MTWVkaWFFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3Rv
cihJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5z
ZXJ0ZWRUcmVlKQpAQCAtODcyLDggKzg1Myw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGF1
c2VBZnRlckRldGFjaGVkVGFzaygpCiAgICAgaWYgKG1faW5BY3RpdmVEb2N1bWVudCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFD
b250cm9scygpLT5oaWRlKCk7CiAgICAgaWYgKG1fbmV0d29ya1N0YXRlID4gTkVUV09SS19FTVBU
WSkKICAgICAgICAgcGF1c2UoKTsKICAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlICE9IFZp
ZGVvRnVsbHNjcmVlbk1vZGVOb25lKQpAQCAtOTIxLDEwICs5MDAsOCBAQCBpbmxpbmUgdm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVSZW5kZXJlcigpCiAgICAgaWYgKGF1dG8qIHJlbmRlcmVy
ID0gdGhpcy0+cmVuZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUZyb21FbGVtZW50
KCk7CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChtX21lZGlh
Q29udHJvbHNIb3N0KQogICAgICAgICBtX21lZGlhQ29udHJvbHNIb3N0LT51cGRhdGVDYXB0aW9u
RGlzcGxheVNpemVzKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRB
dHRhY2hSZW5kZXJlcnMoKQpAQCAtMTMwNCw5ICsxMjgxLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpzZWxlY3RNZWRpYVJlc291cmNlKCkKIAogICAgICAgICAvLyA1LiBJZiB0aGUgbWVkaWEg
ZWxlbWVudOKAmXMgYmxvY2tlZC1vbi1wYXJzZXIgZmxhZyBpcyBmYWxzZSwgdGhlbiBwb3B1bGF0
ZSB0aGUgbGlzdCBvZiBwZW5kaW5nIHRleHQgdHJhY2tzLgogI2lmIEVOQUJMRShWSURFT19UUkFD
SykKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29u
dHJvbHMoKS0+Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgpOwotCiAgICAgICAgIC8v
IEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja3NBcmVSZWFkeSB3aWxsIG5lZWQgIi4uLiB0aGUg
dGV4dCB0cmFja3Mgd2hvc2UgbW9kZSB3YXMgbm90IGluIHRoZQogICAgICAgICAvLyBkaXNhYmxl
ZCBzdGF0ZSB3aGVuIHRoZSBlbGVtZW50J3MgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29yaXRobSBs
YXN0IHN0YXJ0ZWQiLgogICAgICAgICAvLyBGSVhNRTogVXBkYXRlIHRoaXMgdG8gbWF0Y2ggInBv
cHVsYXRlIHRoZSBsaXN0IG9mIHBlbmRpbmcgdGV4dCB0cmFja3MiIHN0ZXAuCkBAIC0yMjM1LDEw
ICsyMjA5LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUxvYWRpbmdGYWlsZWQoTWVk
aWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKICAgICAgICAgbm9uZVN1cHBvcnRlZCgpOwog
CiAgICAgdXBkYXRlRGlzcGxheVN0YXRlKCk7Ci0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkg
ewotICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnJlc2V0KCk7Ci0gICAgICAgIG1lZGlhQ29udHJv
bHMoKS0+cmVwb3J0ZWRFcnJvcigpOwotICAgIH0KIAogICAgIEVSUk9SX0xPRyhMT0dJREVOVElG
SUVSLCAiZXJyb3IgPSAiLCBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSk7CiAKQEAgLTIyODMsMTYg
KzIyNTMsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXROZXR3b3JrU3RhdGUoTWVkaWFQ
bGF5ZXI6Ok5ldHdvcmtTdGF0ZSBzdGF0ZSkKICAgICAgICAgICAgIGNoYW5nZU5ldHdvcmtTdGF0
ZUZyb21Mb2FkaW5nVG9JZGxlKCk7CiAgICAgICAgIG1fY29tcGxldGVseUxvYWRlZCA9IHRydWU7
CiAgICAgfQotCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250
cm9scygpLT51cGRhdGVTdGF0dXNEaXNwbGF5KCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6Y2hhbmdlTmV0d29ya1N0YXRlRnJvbUxvYWRpbmdUb0lkbGUoKQogewogICAgIG1fcHJvZ3Jl
c3NFdmVudFRpbWVyLnN0b3AoKTsKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpICYmIG1fcGxh
eWVyLT5kaWRMb2FkaW5nUHJvZ3Jlc3MoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5idWZm
ZXJpbmdQcm9ncmVzc2VkKCk7CiAKICAgICAvLyBTY2hlZHVsZSBvbmUgbGFzdCBwcm9ncmVzcyBl
dmVudCBzbyB3ZSBndWFyYW50ZWUgdGhhdCBhdCBsZWFzdCBvbmUgaXMgZmlyZWQKICAgICAvLyBm
b3IgZmlsZXMgdGhhdCBsb2FkIHZlcnkgcXVpY2tseS4KQEAgLTI0MzcsOCArMjQwMiw2IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSBzdGF0ZSkKICNlbmRpZgogICAgICAgICBtX2luaXRpYWxseU11dGVkID0gbV92b2x1bWUgPCAw
LjA1IHx8IG11dGVkKCk7CiAKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAg
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+bG9hZGVkTWV0YWRhdGEoKTsKICAgICAgICAgdXBkYXRl
UmVuZGVyZXIoKTsKIAogICAgICAgICBpZiAoaXM8TWVkaWFEb2N1bWVudD4oZG9jdW1lbnQoKSkp
CkBAIC0yNTA1LDEzICsyNDY4LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRSZWFkeVN0
YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0YXRlKQogICAgICAgICBzZXRBdXRvcGxheUV2
ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZTo6UHJldmVudGVkQXV0
b3BsYXkpOwogICAgIH0KIAotICAgIGlmIChzaG91bGRVcGRhdGVEaXNwbGF5U3RhdGUpIHsKKyAg
ICBpZiAoc2hvdWxkVXBkYXRlRGlzcGxheVN0YXRlKQogICAgICAgICB1cGRhdGVEaXNwbGF5U3Rh
dGUoKTsKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkgewotICAgICAgICAgICAgbWVk
aWFDb250cm9scygpLT5yZWZyZXNoQ2xvc2VkQ2FwdGlvbnNCdXR0b25WaXNpYmlsaXR5KCk7Ci0g
ICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnVwZGF0ZVN0YXR1c0Rpc3BsYXkoKTsKLSAgICAg
ICAgfQotICAgIH0KIAogICAgIHVwZGF0ZVBsYXlTdGF0ZSgpOwogICAgIHVwZGF0ZU1lZGlhQ29u
dHJvbGxlcigpOwpAQCAtMjg1NSw4ICsyODEzLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpw
cm9ncmVzc0V2ZW50VGltZXJGaXJlZCgpCiAgICAgICAgIG1fcHJldmlvdXNQcm9ncmVzc1RpbWUg
PSB0aW1lOwogICAgICAgICBtX3NlbnRTdGFsbGVkRXZlbnQgPSBmYWxzZTsKICAgICAgICAgdXBk
YXRlUmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAg
ICAgIG1lZGlhQ29udHJvbHMoKS0+YnVmZmVyaW5nUHJvZ3Jlc3NlZCgpOwogICAgIH0gZWxzZSBp
ZiAodGltZWRlbHRhID4gM19zICYmICFtX3NlbnRTdGFsbGVkRXZlbnQpIHsKICAgICAgICAgc2No
ZWR1bGVFdmVudChldmVudE5hbWVzKCkuc3RhbGxlZEV2ZW50KTsKICAgICAgICAgbV9zZW50U3Rh
bGxlZEV2ZW50ID0gdHJ1ZTsKQEAgLTM3NDAsOCArMzY5Niw2IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKICAgICAgICAgaWYgKCFwcm9jZXNzaW5nTWVkaWFQ
bGF5ZXJDYWxsYmFjaygpKSB7CiAgICAgICAgICAgICBpZiAobV9wbGF5ZXIpIHsKICAgICAgICAg
ICAgICAgICBtX3BsYXllci0+c2V0TXV0ZWQoZWZmZWN0aXZlTXV0ZWQoKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgICAgICAgICAgbWVkaWFD
b250cm9scygpLT5jaGFuZ2VkTXV0ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAg
LTM5MDgsOSArMzg2Miw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxheWJhY2tQcm9ncmVz
c1RpbWVyRmlyZWQoKQogICAgIGlmICghcmVxdWVzdGVkUGxheWJhY2tSYXRlKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghbV9wYXVzZWQgJiYgaGFzTWVkaWFDb250cm9scygpKQotICAg
ICAgICBtZWRpYUNvbnRyb2xzKCktPnBsYXliYWNrUHJvZ3Jlc3NlZCgpOwotCiAjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQogICAgIHVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoY3VycmVudE1lZGlh
VGltZSgpKTsKICNlbmRpZgpAQCAtNDAzNiwxMiArMzk4Nyw2IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6bWVkaWFQbGF5ZXJEaWRSZW1vdmVWaWRlb1RyYWNrKFZpZGVvVHJhY2tQcml2YXRlJiB0
cmFjaykKICAgICB0cmFjay53aWxsQmVSZW1vdmVkKCk7CiB9CiAKLXZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6Y2xvc2VDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpCi17Ci0gICAgaWYgKGhhc01lZGlhQ29u
dHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5jbG9zZWRDYXB0aW9uVHJhY2tzQ2hh
bmdlZCgpOwotfQotCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZEF1ZGlvVHJhY2soUmVmPEF1
ZGlvVHJhY2s+JiYgdHJhY2spCiB7CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECkBAIC00MDY1
LDggKzQwMTAsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhSZWY8VGV4
dFRyYWNrPiYmIHRyYWNrKQogICAgIH0KIAogICAgIGVuc3VyZVRleHRUcmFja3MoKS5hcHBlbmQo
V1RGTW92ZSh0cmFjaykpOwotCi0gICAgY2xvc2VDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpOwogfQog
CiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFZpZGVvVHJhY2soUmVmPFZpZGVvVHJhY2s+JiYg
dHJhY2spCkBAIC00MDkxLDggKzQwMzQsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92
ZVRleHRUcmFjayhSZWY8VGV4dFRyYWNrPiYmIHRyYWNrLCBib29sIHNjaGVkdWxlRXZlbgogICAg
IHRyYWNrLT5jbGVhckNsaWVudCgpOwogICAgIGlmIChtX3RleHRUcmFja3MpCiAgICAgICAgIG1f
dGV4dFRyYWNrcy0+cmVtb3ZlKHRyYWNrLCBzY2hlZHVsZUV2ZW50KTsKLQotICAgIGNsb3NlQ2Fw
dGlvblRyYWNrc0NoYW5nZWQoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZW1vdmVW
aWRlb1RyYWNrKFJlZjxWaWRlb1RyYWNrPiYmIHRyYWNrKQpAQCAtNDE5Myw5ICs0MTM0LDYgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRUZXh0VHJhY2soSFRNTFRyYWNrRWxlbWVudCYg
dHJhY2tFbGVtZW50KQogICAgIC8vIGluIHRoZSBtYXJrdXAgaGF2ZSBiZWVuIGFkZGVkLgogICAg
IGlmICghbV9wYXJzaW5nSW5Qcm9ncmVzcykKICAgICAgICAgc2NoZWR1bGVDb25maWd1cmVUZXh0
VHJhY2tzKCk7Ci0KLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICBtZWRpYUNv
bnRyb2xzKCktPmNsb3NlZENhcHRpb25UcmFja3NDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6ZGlkUmVtb3ZlVGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQmIHRyYWNrRWxl
bWVudCkKQEAgLTQzNTksNyArNDI5Nyw5IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udHJvbGxl
ckpTVmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwKIAogdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpCiB7Ci0g
ICAgQVNTRVJUKCFtX2NyZWF0aW5nQ29udHJvbHMpOworICAgIGlmIChtX2NyZWF0aW5nQ29udHJv
bHMpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fY3JlYXRpbmdDb250cm9scyA9IHRydWU7CiAg
ICAgZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwogICAgIG1fY3JlYXRpbmdDb250cm9scyA9
IGZhbHNlOwpAQCAtNDM4Nyw3ICs0MzI3LDYgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpzZXR1
cEFuZENhbGxKUyhjb25zdCBKU1NldHVwRnVuY3Rpb24mIHRhc2spCiAKIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6dXBkYXRlQ2FwdGlvbkNvbnRhaW5lcigpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NP
TlRST0xTX1NDUklQVCkKICAgICBpZiAobV9oYXZlU2V0VXBDYXB0aW9uQ29udGFpbmVyKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTQ0MzIsMTMgKzQzNzEsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojp1cGRhdGVDYXB0aW9uQ29udGFpbmVyKCkKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9KTsKLQotI2VuZGlmCiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bGF5b3V0U2l6ZUNo
YW5nZWQoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKGF1
dG8gZnJhbWVWaWV3ID0gbWFrZVJlZlB0cihkb2N1bWVudCgpLnZpZXcoKSkpIHsKICAgICAgICAg
YXV0byB0YXNrID0gW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewogICAg
ICAgICAgICAgaWYgKGF1dG8gcm9vdCA9IHVzZXJBZ2VudFNoYWRvd1Jvb3QoKSkKQEAgLTQ0NDYs
NyArNDM4Miw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bGF5b3V0U2l6ZUNoYW5nZWQoKQog
ICAgICAgICB9OwogICAgICAgICBmcmFtZVZpZXctPnF1ZXVlUG9zdExheW91dENhbGxiYWNrKFdU
Rk1vdmUodGFzaykpOwogICAgIH0KLSNlbmRpZgogCiAgICAgaWYgKCFtX3JlY2VpdmVkTGF5b3V0
U2l6ZUNoYW5nZWQpIHsKICAgICAgICAgbV9yZWNlaXZlZExheW91dFNpemVDaGFuZ2VkID0gdHJ1
ZTsKQEAgLTQ1ODYsOCArNDUyMSw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJl
VGV4dFRyYWNrcygpCiAKICAgICB1cGRhdGVDYXB0aW9uQ29udGFpbmVyKCk7CiAgICAgY29uZmln
dXJlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAg
ICAgIG1lZGlhQ29udHJvbHMoKS0+Y2xvc2VkQ2FwdGlvblRyYWNrc0NoYW5nZWQoKTsKIH0KICNl
bmRpZgogCkBAIC01MTU0LDggKzUwODcsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
UGxheWVyQ2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCkKICAgICAgICAgbWVkaWFQbGF5ZXJSZW5kZXJp
bmdNb2RlQ2hhbmdlZCgpOwogICAgIH0KIAotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0g
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVzZXQoKTsKICAgICB1cGRhdGVSZW5kZXJlcigpOwog
CiAgICAgaWYgKCFwYXVzZWQoKSAmJiAhbV9tZWRpYVNlc3Npb24tPnBsYXliYWNrUGVybWl0dGVk
KCkpIHsKQEAgLTUzNTAsOSArNTI4MSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRl
Vm9sdW1lKCkKICAgICBkb2N1bWVudCgpLnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7CiAjZW5kaWYK
IAotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+
Y2hhbmdlZFZvbHVtZSgpOwotI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkK
IH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzY2hlZHVsZVVwZGF0ZVBsYXlTdGF0ZSgpCkBA
IC01MzgwLDggKzUzMDksNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0
ZSgpCiAgICAgICAgICAgICBtX3BsYXllci0+cGF1c2UoKTsKICAgICAgICAgcmVmcmVzaENhY2hl
ZFRpbWUoKTsKICAgICAgICAgbV9wbGF5YmFja1Byb2dyZXNzVGltZXIuc3RvcCgpOwotICAgICAg
ICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5w
bGF5YmFja1N0b3BwZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTQyNSw5ICs1
MzUyLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUoKQogICAgICAg
ICAgICAgbV9wbGF5ZXItPnBsYXkoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChoYXNNZWRp
YUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnBsYXliYWNrU3RhcnRl
ZCgpOwotCiAgICAgICAgIHN0YXJ0UGxheWJhY2tQcm9ncmVzc1RpbWVyKCk7CiAgICAgICAgIHNl
dFBsYXlpbmcodHJ1ZSk7CiAgICAgfSBlbHNlIHsKQEAgLTU0NDUsOSArNTM2OSw2IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUGxheVN0YXRlKCkKIAogICAgICAgICBpZiAoY291bGRQ
bGF5SWZFbm91Z2hEYXRhKCkpCiAgICAgICAgICAgICBwcmVwYXJlVG9QbGF5KCk7Ci0KLSAgICAg
ICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+
cGxheWJhY2tTdG9wcGVkKCk7CiAgICAgfQogCiAgICAgdXBkYXRlTWVkaWFDb250cm9sbGVyKCk7
CkBAIC02MDczLDggKzU5OTQsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNj
cmVlbihWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCiAKICAgICAgICAgZnVsbHNjcmVlbk1vZGVD
aGFuZ2VkKG1vZGUpOwogICAgICAgICBjb25maWd1cmVNZWRpYUNvbnRyb2xzKCk7Ci0gICAgICAg
IGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmVu
dGVyZWRGdWxsc2NyZWVuKCk7CiAgICAgICAgIGlmIChpczxIVE1MVmlkZW9FbGVtZW50PigqdGhp
cykpIHsKICAgICAgICAgICAgIEhUTUxWaWRlb0VsZW1lbnQmIGFzVmlkZW8gPSBkb3duY2FzdDxI
VE1MVmlkZW9FbGVtZW50PigqdGhpcyk7CiAgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS5wYWdl
KCktPmNocm9tZSgpLmNsaWVudCgpLnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKG1fdmlkZW9GdWxs
c2NyZWVuTW9kZSkpIHsKQEAgLTYxMTAsMTIgKzYwMjksOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OmV4aXRGdWxsc2NyZWVuKCkKICAgICBBU1NFUlQobV92aWRlb0Z1bGxzY3JlZW5Nb2RlICE9
IFZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKICAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlIG9sZFZp
ZGVvRnVsbHNjcmVlbk1vZGUgPSBtX3ZpZGVvRnVsbHNjcmVlbk1vZGU7CiAgICAgZnVsbHNjcmVl
bk1vZGVDaGFuZ2VkKFZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSNpZiBFTkFCTEUoTUVESUFf
Q09OVFJPTFNfU0NSSVBUKQogICAgIFJlZjxIVE1MTWVkaWFFbGVtZW50PiBwcm90ZWN0ZWRUaGlz
KCp0aGlzKTsgLy8gdXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJlc2VudGF0aW9uTW9kZUNoYW5n
ZSBjYWxscyBtZXRob2RzIHRoYXQgY2FuIHRyaWdnZXIgYXJiaXRyYXJ5IERPTSBtdXRhdGlvbnMu
CiAgICAgdXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJlc2VudGF0aW9uTW9kZUNoYW5nZSgpOwot
I2VuZGlmCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9s
cygpLT5leGl0ZWRGdWxsc2NyZWVuKCk7CiAKICAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpIHx8
ICFpczxIVE1MVmlkZW9FbGVtZW50PigqdGhpcykpCiAgICAgICAgIHJldHVybjsKQEAgLTYxOTgs
MTYgKzYxMTMsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRCZWNvbWVGdWxsc2NyZWVu
RWxlbWVudCgpCiB7CiAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIiwgZnVsbHNjcmVlbiBt
b2RlID0gIiwgZnVsbHNjcmVlbk1vZGUoKSk7CiAgICAgbV93YWl0aW5nVG9FbnRlckZ1bGxzY3Jl
ZW4gPSBmYWxzZTsKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICBtZWRpYUNv
bnRyb2xzKCktPmVudGVyZWRGdWxsc2NyZWVuKCk7CiAgICAgc2NoZWR1bGVVcGRhdGVQbGF5U3Rh
dGUoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp3aWxsU3RvcEJlaW5nRnVsbHNjcmVl
bkVsZW1lbnQoKQogewotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlh
Q29udHJvbHMoKS0+ZXhpdGVkRnVsbHNjcmVlbigpOwotCiAgICAgaWYgKGZ1bGxzY3JlZW5Nb2Rl
KCkgPT0gVmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKQogICAgICAgICBmdWxsc2NyZWVuTW9k
ZUNoYW5nZWQoVmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwogfQpAQCAtNjM0OCwxOSArNjI1OCwx
MSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKFRl
eHRUcmFjayogdHJhY2spCiAgICAgICAgIC8vIFRoZSBkaXNwbGF5IHRyZWVzIGV4aXN0IGFzIGxv
bmcgYXMgdGhlIHRyYWNrIGlzIGFjdGl2ZSwgaW4gdGhpcyBjYXNlLAogICAgICAgICAvLyBhbmQg
aWYgdGhlIHNhbWUgdHJhY2sgaXMgbG9hZGVkIGFnYWluIChmb3IgZXhhbXBsZSBpZiB0aGUgc3Jj
IGF0dHJpYnV0ZSB3YXMgY2hhbmdlZCksCiAgICAgICAgIC8vIGN1ZXMgY2FuIGJlIGFjY3VtdWxh
dGVkIHdpdGggdGhlIG9sZCBvbmVzLCB0aGF0J3Mgd2h5IHRoZXkgbmVlZHMgdG8gYmUgZmx1c2hl
ZAotICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICAgICAgbWVkaWFDb250
cm9scygpLT5jbGVhclRleHREaXNwbGF5Q29udGFpbmVyKCk7CiAgICAgICAgIHVwZGF0ZVRleHRU
cmFja0Rpc3BsYXkoKTsKICAgICB9CiAgICAgaWYgKG1fcGxheWVyICYmIG1fdGV4dFRyYWNrc1do
ZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuLmNvbnRhaW5zKHRyYWNrKSkgewogICAgICAgICBpZiAo
dHJhY2stPnJlYWRpbmVzc1N0YXRlKCkgIT0gVGV4dFRyYWNrOjpMb2FkaW5nKQogICAgICAgICAg
ICAgc2V0UmVhZHlTdGF0ZShtX3BsYXllci0+cmVhZHlTdGF0ZSgpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBUaGUgdHJhY2sgcmVhZGluZXNzIHN0YXRlIG1pZ2h0IGhhdmUgY2hhbmdlZCBh
cyBhIHJlc3VsdCBvZiB0aGUgdXNlcgotICAgICAgICAvLyBjbGlja2luZyB0aGUgY2FwdGlvbnMg
YnV0dG9uLiBJbiB0aGlzIGNhc2UsIGEgY2hlY2sgd2hldGhlciBhbGwgdGhlCi0gICAgICAgIC8v
IHJlc291cmNlcyBoYXZlIGZhaWxlZCBsb2FkaW5nIHNob3VsZCBiZSBkb25lIGluIG9yZGVyIHRv
IGhpZGUgdGhlIENDIGJ1dHRvbi4KLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSAmJiB0
cmFjay0+cmVhZGluZXNzU3RhdGUoKSA9PSBUZXh0VHJhY2s6OkZhaWxlZFRvTG9hZCkKLSAgICAg
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVmcmVzaENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJp
bGl0eSgpOwogICAgIH0KIH0KIApAQCAtNjM5MSw1MSArNjI5MywyNyBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkoVGV4dFRyYWNrVmlzaWJpbGl0eUNo
ZWNrVHlwZSBjaAogICAgIG1faGF2ZVZpc2libGVUZXh0VHJhY2sgPSBoYXZlVmlzaWJsZVRleHRU
cmFjazsKICAgICBtX2Nsb3NlZENhcHRpb25zVmlzaWJsZSA9IG1faGF2ZVZpc2libGVUZXh0VHJh
Y2s7CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmICghbV9oYXZl
VmlzaWJsZVRleHRUcmFjaykKICAgICAgICAgcmV0dXJuOwogCiAgICAgZW5zdXJlTWVkaWFDb250
cm9sc1NoYWRvd1Jvb3QoKTsKICAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0jZWxzZQot
ICAgIGlmICghbV9oYXZlVmlzaWJsZVRleHRUcmFjayAmJiAhaGFzTWVkaWFDb250cm9scygpICYm
ICFjcmVhdGVNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1lZGlhQ29u
dHJvbHMoKS0+Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgpOwotCi0gICAgdXBkYXRl
VGV4dFRyYWNrRGlzcGxheSgpOwotICAgIHVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoY3VycmVu
dE1lZGlhVGltZSgpKTsKLSNlbmRpZgogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0
ZVRleHRUcmFja0Rpc3BsYXkoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQp
CiAgICAgZW5zdXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QoKTsKICAgICBpZiAoIW1fbWVkaWFD
b250cm9sc0hvc3QpCiAgICAgICAgIG1fbWVkaWFDb250cm9sc0hvc3QgPSBNZWRpYUNvbnRyb2xz
SG9zdDo6Y3JlYXRlKCp0aGlzKTsKICAgICBtX21lZGlhQ29udHJvbHNIb3N0LT51cGRhdGVUZXh0
VHJhY2tDb250YWluZXIoKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYg
IWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFDb250
cm9scygpLT51cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQo
KQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgZW5zdXJlTWVkaWFD
b250cm9sc1NoYWRvd1Jvb3QoKTsKICAgICBpZiAoIW1fbWVkaWFDb250cm9sc0hvc3QpCiAgICAg
ICAgIG1fbWVkaWFDb250cm9sc0hvc3QgPSBNZWRpYUNvbnRyb2xzSG9zdDo6Y3JlYXRlKCp0aGlz
KTsKICAgICBtX21lZGlhQ29udHJvbHNIb3N0LT51cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkltYWdlSWZOZWVkZWQoKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYg
IWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFDb250
cm9scygpLT51cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQoKTsKLSNl
bmRpZgogfQogCiAjZW5kaWYKQEAgLTY0NTYsOCArNjMzNCw2IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgY2xvc2VkQ2FwdGlvblZpc2libGUp
CiAgICAgbWFya0NhcHRpb25BbmRTdWJ0aXRsZVRyYWNrc0FzVW5jb25maWd1cmVkKEltbWVkaWF0
ZWx5KTsKICAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CiAjZWxzZQotICAgIGlmIChoYXNN
ZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+Y2hhbmdlZENsb3NlZENh
cHRpb25zVmlzaWJpbGl0eSgpOwogI2VuZGlmCiB9CiAKQEAgLTY1NzYsNjIgKzY0NTIsNiBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKICNlbmRpZgogfQogCi1NZWRpYUNvbnRyb2xzKiBIVE1MTWVk
aWFFbGVtZW50OjptZWRpYUNvbnRyb2xzKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoTUVESUFfQ09O
VFJPTFNfU0NSSVBUKQotICAgIHJldHVybiBudWxscHRyOwotI2Vsc2UKLSAgICBhdXRvIHJvb3Qg
PSB1c2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBjaGlsZHJlbk9mVHlwZTxNZWRpYUNvbnRyb2xzPigqcm9v
dCkuZmlyc3QoKTsKLSNlbmRpZgotfQotCi1ib29sIEhUTUxNZWRpYUVsZW1lbnQ6Omhhc01lZGlh
Q29udHJvbHMoKSBjb25zdAotewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0g
ICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKLQotICAgIGlmIChhdXRvIHVzZXJBZ2VudCA9IHVzZXJB
Z2VudFNoYWRvd1Jvb3QoKSkgewotICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNoaWxkcmVu
T2ZUeXBlPE1lZGlhQ29udHJvbHM+KCpyb290KS5maXJzdCgpOwotICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8fCBub2RlLT5pc01lZGlhQ29udHJvbHMoKSk7
Ci0gICAgICAgIHJldHVybiBub2RlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRp
ZgotfQotCi1ib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlhQ29udHJvbHMoKQotewot
I2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0gICAgZW5zdXJlTWVkaWFDb250cm9s
c1NoYWRvd1Jvb3QoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIGlmIChoYXNNZWRp
YUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byBtZWRpYUNvbnRy
b2xzID0gTWVkaWFDb250cm9sczo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgIGlmICghbWVkaWFD
b250cm9scykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbWVkaWFDb250cm9scy0+c2V0
TWVkaWFDb250cm9sbGVyKG1fbWVkaWFDb250cm9sbGVyID8gbV9tZWRpYUNvbnRyb2xsZXIuZ2V0
KCkgOiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqPih0aGlzKSk7Ci0gICAg
bWVkaWFDb250cm9scy0+cmVzZXQoKTsKLSAgICBpZiAoaXNGdWxsc2NyZWVuKCkpCi0gICAgICAg
IG1lZGlhQ29udHJvbHMtPmVudGVyZWRGdWxsc2NyZWVuKCk7Ci0KLSAgICBlbnN1cmVVc2VyQWdl
bnRTaGFkb3dSb290KCkuYXBwZW5kQ2hpbGQobWVkaWFDb250cm9scyk7Ci0KLSAgICBpZiAoIWNv
bnRyb2xzKCkgfHwgIWlzQ29ubmVjdGVkKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMtPmhpZGUo
KTsKLQotICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi19Ci0KIGJvb2wgSFRNTE1lZGlhRWxlbWVu
dDo6c2hvdWxkRm9yY2VDb250cm9sc0Rpc3BsYXkoKSBjb25zdAogewogICAgIC8vIEFsd2F5cyBj
cmVhdGUgY29udHJvbHMgZm9yIGF1dG9wbGF5IHZpZGVvIHRoYXQgcmVxdWlyZXMgdXNlciBnZXN0
dXJlIGR1ZSB0byBiZWluZyBpbiBsb3cgcG93ZXIgbW9kZS4KQEAgLTY2NTgsMjMgKzY0NzgsMTAg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVNZWRpYUNvbnRyb2xzKCkKICAgICAg
ICAgcmVxdWlyZUNvbnRyb2xzID0gdHJ1ZTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE1FRElBX0NP
TlRST0xTX1NDUklQVCkKICAgICBpZiAoIXJlcXVpcmVDb250cm9scyB8fCAhaXNDb25uZWN0ZWQo
KSB8fCAhaW5BY3RpdmVEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBlbnN1cmVN
ZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpOwotI2Vsc2UKLSAgICBpZiAoIXJlcXVpcmVDb250cm9s
cyB8fCAhaXNDb25uZWN0ZWQoKSB8fCAhaW5BY3RpdmVEb2N1bWVudCgpKSB7Ci0gICAgICAgIGlm
IChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmhpZGUo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaGFzTWVkaWFDb250cm9scygp
ICYmICFjcmVhdGVNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1lZGlh
Q29udHJvbHMoKS0+c2hvdygpOwotI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CkBAIC02Njg0LDEzICs2NDkxLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjYXB0aW9uUHJl
ZmVyZW5jZXNDaGFuZ2VkKCkKICAgICBpZiAoIWlzVmlkZW8oKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT50
ZXh0VHJhY2tQcmVmZXJlbmNlc0NoYW5nZWQoKTsKLQotI2lmIEVOQUJMRShNRURJQV9DT05UUk9M
U19TQ1JJUFQpCiAgICAgaWYgKG1fbWVkaWFDb250cm9sc0hvc3QpCiAgICAgICAgIG1fbWVkaWFD
b250cm9sc0hvc3QtPnVwZGF0ZUNhcHRpb25EaXNwbGF5U2l6ZXMoTWVkaWFDb250cm9sc0hvc3Q6
OkZvcmNlVXBkYXRlOjpZZXMpOwotI2VuZGlmCiAKICAgICBpZiAobV9wbGF5ZXIpCiAgICAgICAg
IG1fcGxheWVyLT50cmFja3NDaGFuZ2VkKCk7CkBAIC02ODY4LDkgKzY2NzAsNiBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnNldENvbnRyb2xsZXIoUmVmUHRyPE1lZGlhQ29udHJvbGxlcj4mJiBj
b250cm9sbGVyKQogCiAgICAgaWYgKG1fbWVkaWFDb250cm9sbGVyKQogICAgICAgICBtX21lZGlh
Q29udHJvbGxlci0+YWRkTWVkaWFFbGVtZW50KCp0aGlzKTsKLQotICAgIGlmIChoYXNNZWRpYUNv
bnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+c2V0TWVkaWFDb250cm9sbGVyKG1f
bWVkaWFDb250cm9sbGVyID8gbV9tZWRpYUNvbnRyb2xsZXIuZ2V0KCkgOiBzdGF0aWNfY2FzdDxN
ZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqPih0aGlzKSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0Q29udHJvbGxlckZvckJpbmRpbmdzKE1lZGlhQ29udHJvbGxlciogY29udHJvbGxl
cikKQEAgLTczMTAsNyArNzEwOSw2IEBAIFJlZlB0cjxWaWRlb1BsYXliYWNrUXVhbGl0eT4gSFRN
TE1lZGlhRWxlbWVudDo6Z2V0VmlkZW9QbGF5YmFja1F1YWxpdHkoKQogICAgIHJldHVybiBWaWRl
b1BsYXliYWNrUXVhbGl0eTo6Y3JlYXRlKHRpbWVzdGFtcCwgbWV0cmljcy52YWx1ZSgpKTsKIH0K
IAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiBET01XcmFwcGVyV29ybGQmIEhU
TUxNZWRpYUVsZW1lbnQ6OmVuc3VyZUlzb2xhdGVkV29ybGQoKQogewogICAgIGlmICghbV9pc29s
YXRlZFdvcmxkKQpAQCAtNzU2OSw3ICs3MzY3LDYgQEAgU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6
OmdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKCkKIAogICAgIHJldHVybiBzdGF0dXM7CiB9
Ci0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKIAogdW5zaWduZWQgbG9u
ZyBsb25nIEhUTUxNZWRpYUVsZW1lbnQ6OmZpbGVTaXplKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggZmNkOGVkZmFiYzI4NTg2MjQzOTIwMjI3OTM4
M2EwODMyZGQ4ZDJjYi4uMWE3MjlmNDA5MWFjZGZjZjc2NWMwYmY1NjkxNjYyNWMyNWEyM2ZkZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTQ0Nyw4ICs0NDcsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBjbG9zZWRDYXB0aW9uc1Zpc2libGUoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2b2lkIHNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sKSBvdmVycmlkZTsKIAot
ICAgIE1lZGlhQ29udHJvbHMqIG1lZGlhQ29udHJvbHMoKSBjb25zdDsKLQogICAgIHZvaWQgc291
cmNlV2FzUmVtb3ZlZChIVE1MU291cmNlRWxlbWVudCYpOwogICAgIHZvaWQgc291cmNlV2FzQWRk
ZWQoSFRNTFNvdXJjZUVsZW1lbnQmKTsKIApAQCAtNTA4LDEzICs1MDYsMTAgQEAgcHVibGljOgog
ICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIHByZWxvYWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJlbG9hZDsgfQogICAgIE1lZGlhRWxlbWVudFNlc3Npb24mIG1lZGlhU2Vzc2lvbigpIGNvbnN0
IHsgcmV0dXJuICptX21lZGlhU2Vzc2lvbjsgfQogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xT
X1NDUklQVCkKICAgICB2b2lkIHBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKICAgICB2b2lkIHVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIGdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKCk7Ci0KICAgICBNZWRpYUNvbnRy
b2xzSG9zdCogbWVkaWFDb250cm9sc0hvc3QoKSB7IHJldHVybiBtX21lZGlhQ29udHJvbHNIb3N0
LmdldCgpOyB9Ci0jZW5kaWYKIAogICAgIGJvb2wgaXNEaXNhYmxpbmdTbGVlcCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2xlZXBEaXNhYmxlci5nZXQoKTsgfQogCkBAIC02MTMsMTEgKzYwOCw5IEBAIHBy
b3RlY3RlZDoKIAogICAgIFNlY3VyaXR5T3JpZ2luRGF0YSBkb2N1bWVudFNlY3VyaXR5T3JpZ2lu
KCkgY29uc3QgZmluYWw7CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAg
IGJvb2wgbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3I7IH0KICAgICB2b2lkIHNl
dE1lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3Rvcihib29sKTsKICAgICB2b2lkIHVw
ZGF0ZU1lZGlhQ29udHJvbHNBZnRlclByZXNlbnRhdGlvbk1vZGVDaGFuZ2UoKTsKLSNlbmRpZgog
CiAgICAgdm9pZCBzY2hlZHVsZUV2ZW50KGNvbnN0IEF0b21TdHJpbmcmKTsKIApAQCAtODUyLDgg
Kzg0NSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGVkVGltZSgpIGNvbnN0
OwogICAgIHZvaWQgcmVmcmVzaENhY2hlZFRpbWUoKSBjb25zdDsKIAotICAgIGJvb2wgaGFzTWVk
aWFDb250cm9scygpIGNvbnN0OwotICAgIGJvb2wgY3JlYXRlTWVkaWFDb250cm9scygpOwogICAg
IHZvaWQgY29uZmlndXJlTWVkaWFDb250cm9scygpOwogCiAgICAgdm9pZCBwcmVwYXJlTWVkaWFG
cmFnbWVudFVSSSgpOwpAQCAtODczLDExICs4NjQsOSBAQCBwcml2YXRlOgogICAgIGVudW0gY2xh
c3MgU2xlZXBUeXBlIHsgTm9uZSwgRGlzcGxheSwgU3lzdGVtIH07CiAgICAgU2xlZXBUeXBlIHNo
b3VsZERpc2FibGVTbGVlcCgpIGNvbnN0OwogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKICAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIG92
ZXJyaWRlOwogICAgIERPTVdyYXBwZXJXb3JsZCYgZW5zdXJlSXNvbGF0ZWRXb3JsZCgpOwogICAg
IGJvb2wgZW5zdXJlTWVkaWFDb250cm9sc0luamVjdGVkU2NyaXB0KCk7Ci0jZW5kaWYKIAogICAg
IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUgbWVkaWFUeXBlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1lZGlhVHlwZSBwcmVzZW50YXRpb25UeXBl
KCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMTE1LDEwICsxMTA0LDggQEAgcHJpdmF0ZToKICAgICBi
b29sIG1faGFzRXZlckhhZEF1ZGlvIDogMTsKICAgICBib29sIG1faGFzRXZlckhhZFZpZGVvIDog
MTsKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgYm9vbCBtX21lZGlh
Q29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvciA6IDE7CiAgICAgYm9vbCBtX2hhdmVTZXRV
cENhcHRpb25Db250YWluZXIgOiAxOwotI2VuZGlmCiAKICAgICBib29sIG1faXNTY3J1YmJpbmdS
ZW1vdGVseSA6IDE7CiAgICAgYm9vbCBtX3dhaXRpbmdUb0VudGVyRnVsbHNjcmVlbiA6IDE7CkBA
IC0xMTkyLDExICsxMTc5LDkgQEAgcHJpdmF0ZToKICAgICBjb25zdCB2b2lkKiBtX2xvZ0lkZW50
aWZpZXI7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAg
ZnJpZW5kIGNsYXNzIE1lZGlhQ29udHJvbHNIb3N0OwogICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xz
SG9zdD4gbV9tZWRpYUNvbnRyb2xzSG9zdDsKICAgICBSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBt
X2lzb2xhdGVkV29ybGQ7Ci0jZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAg
UmVmUHRyPE1lZGlhU3RyZWFtPiBtX21lZGlhU3RyZWFtU3JjT2JqZWN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhYjgyYTE4MDAxMzIwNjk3YjAyY2FkOTYy
ZThlYjE4NjUyNGJhZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVz
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKQotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1l
bnRUeXBlcy5oIgotCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCi0jaW5jbHVkZSAiUmVuZGVyTWVkaWEuaCIKLSNpbmNsdWRlICJSZW5kZXJNZWRpYUNvbnRy
b2xzLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1XVEZfTUFLRV9JU09fQUxM
T0NBVEVEX0lNUEwoTWVkaWFDb250cm9sRGl2RWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NB
VEVEX0lNUEwoTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lT
T19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudCk7Ci0K
LXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLWNsYXNzIEV2ZW50OwotCi1SZWZQdHI8SFRN
TE1lZGlhRWxlbWVudD4gcGFyZW50TWVkaWFFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCi17Ci0g
ICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8Tm9kZT4g
bWVkaWFOb2RlID0gbm9kZS0+c2hhZG93SG9zdCgpOwotICAgIGlmICghbWVkaWFOb2RlKQotICAg
ICAgICBtZWRpYU5vZGUgPSBjb25zdF9jYXN0PE5vZGUqPihub2RlKTsKLSAgICBpZiAoIWlzPEhU
TUxNZWRpYUVsZW1lbnQ+KCptZWRpYU5vZGUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gZG93bmNhc3Q8SFRNTE1lZGlhRWxlbWVudD4obWVkaWFOb2RlLmdldCgpKTsKLX0K
LQotTWVkaWFDb250cm9sRWxlbWVudFR5cGUgbWVkaWFDb250cm9sRWxlbWVudFR5cGUoTm9kZSog
bm9kZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihub2RlLT5pc01l
ZGlhQ29udHJvbEVsZW1lbnQoKSk7Ci0gICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2Rl
KSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbElucHV0RWxlbWVudCo+
KG5vZGUpLT5kaXNwbGF5VHlwZSgpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRy
b2xEaXZFbGVtZW50Kj4obm9kZSktPmRpc3BsYXlUeXBlKCk7Ci19Ci0KLU1lZGlhQ29udHJvbEVs
ZW1lbnQ6Ok1lZGlhQ29udHJvbEVsZW1lbnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxh
eVR5cGUsIEhUTUxFbGVtZW50KiBlbGVtZW50KQotICAgIDogbV9tZWRpYUNvbnRyb2xsZXIoMCkK
LSAgICAsIG1fZGlzcGxheVR5cGUoZGlzcGxheVR5cGUpCi0gICAgLCBtX2VsZW1lbnQoZWxlbWVu
dCkKLXsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50OjpoaWRlKCkKLXsKLSAgICBtX2Vs
ZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5LCBDU1NWYWx1
ZU5vbmUpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnNob3coKQotewotICAgIG1f
ZWxlbWVudC0+cmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXkpOwot
fQotCi1ib29sIE1lZGlhQ29udHJvbEVsZW1lbnQ6OmlzU2hvd2luZygpIGNvbnN0Ci17Ci0gICAg
Y29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBwcm9wZXJ0eVNldCA9IG1fZWxlbWVudC0+aW5saW5lU3R5
bGUoKTsKLSAgICAvLyBGb2xsb3dpbmcgdGhlIGNvZGUgZnJvbSBzaG93KCkgYW5kIGhpZGUoKSBh
Ym92ZSwgd2Ugb25seSBoYXZlCi0gICAgLy8gdG8gY2hlY2sgZm9yIHRoZSBwcmVzZW5zZSBvZiBp
bmxpbmUgZGlzcGxheS4KLSAgICByZXR1cm4gKCFwcm9wZXJ0eVNldCB8fCAhcHJvcGVydHlTZXQt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXNwbGF5KSk7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sRWxlbWVudDo6c2V0RGlzcGxheVR5cGUoTWVkaWFDb250cm9sRWxlbWVudFR5cGUg
ZGlzcGxheVR5cGUpCi17Ci0gICAgaWYgKGRpc3BsYXlUeXBlID09IG1fZGlzcGxheVR5cGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fZGlzcGxheVR5cGUgPSBkaXNwbGF5VHlwZTsKLSAgICBp
ZiAoYXV0byBvYmplY3QgPSBtX2VsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgIG9iamVjdC0+
cmVwYWludCgpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlh
Q29udHJvbERpdkVsZW1lbnQ6Ok1lZGlhQ29udHJvbERpdkVsZW1lbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSkKLSAgICA6IEhUTUxEaXZF
bGVtZW50KGRpdlRhZywgZG9jdW1lbnQpCi0gICAgLCBNZWRpYUNvbnRyb2xFbGVtZW50KGRpc3Bs
YXlUeXBlLCB0aGlzKQotewotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LU1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6TWVkaWFDb250cm9sSW5wdXRFbGVtZW50KERvY3Vt
ZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUpCi0gICAg
OiBIVE1MSW5wdXRFbGVtZW50KGlucHV0VGFnLCBkb2N1bWVudCwgMCwgZmFsc2UpCi0gICAgLCBN
ZWRpYUNvbnRyb2xFbGVtZW50KGRpc3BsYXlUeXBlLCB0aGlzKQotewotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudDo6
TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFD
b250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVt
ZW50KGRvY3VtZW50LCBkaXNwbGF5VHlwZSkKLSAgICAsIG1fY3VycmVudFZhbHVlKDApCi17Ci19
Ci0KLXZvaWQgTWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50OjpzZXRDdXJyZW50VmFsdWUo
ZG91YmxlIHRpbWUpCi17Ci0gICAgbV9jdXJyZW50VmFsdWUgPSB0aW1lOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50
OjpNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlh
Q29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKQotICAgIDogTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50KGRvY3VtZW50LCBkaXNwbGF5VHlwZSkKLXsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xN
dXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0g
ICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewotICAgICAg
ICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0TXV0ZWQoIW1lZGlhQ29udHJvbGxlcigpLT5tdXRlZCgp
KTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0KLSAgICBIVE1M
SW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotdm9pZCBNZWRp
YUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6Y2hhbmdlZE11dGUoKQotewotICAgIHVwZGF0ZURp
c3BsYXlUeXBlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6OnVw
ZGF0ZURpc3BsYXlUeXBlKCkKLXsKLSAgICBzZXREaXNwbGF5VHlwZShtZWRpYUNvbnRyb2xsZXIo
KS0+bXV0ZWQoKSA/IE1lZGlhVW5NdXRlQnV0dG9uIDogTWVkaWFNdXRlQnV0dG9uKTsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xTZWVrQnV0dG9u
RWxlbWVudDo6TWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50
LCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSkKLSAgICA6IE1lZGlhQ29udHJv
bElucHV0RWxlbWVudChkb2N1bWVudCwgZGlzcGxheVR5cGUpCi17Ci19Ci0KLXZvaWQgTWVkaWFD
b250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50
KQotewotICAgIC8vIFNldCB0aGUgbW91c2Vkb3duIGFuZCBtb3VzZXVwIGV2ZW50cyBhcyBkZWZh
dWx0SGFuZGxlZCBzbyB0aGV5Ci0gICAgLy8gZG8gbm90IHRyaWdnZXIgZHJhZyBzdGFydCBvciBl
bmQgYWN0aW9ucyBpbiBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQuCi0gICAgaWYgKGV2ZW50LnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpCi0gICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVk
KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6OnNldEFjdGl2ZShi
b29sIGZsYWcsIGJvb2wgcGF1c2UpCi17Ci0gICAgaWYgKGZsYWcgPT0gYWN0aXZlKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChmbGFnKQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+
YmVnaW5TY2FubmluZyhpc0ZvcndhcmRCdXR0b24oKSA/IE1lZGlhQ29udHJvbGxlckludGVyZmFj
ZTo6Rm9yd2FyZCA6IE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQpOwotICAgIGVs
c2UKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPmVuZFNjYW5uaW5nKCk7Ci0KLSAgICBNZWRp
YUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnNldEFjdGl2ZShmbGFnLCBwYXVzZSk7Ci19Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxl
bWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQp
Ci0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhVm9sdW1lU2xp
ZGVyKQotICAgICwgbV9jbGVhck11dGVkT25Vc2VySW50ZXJhY3Rpb24oZmFsc2UpCi17Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCYgZXZlbnQpCi17Ci0gICAgLy8gTGVmdCBidXR0b24gaXMgMC4gUmVqZWN0cyBtb3Vz
ZSBldmVudHMgbm90IGZyb20gbGVmdCBidXR0b24uCi0gICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2
ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkuYnV0dG9uKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAg
IGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50IHx8IGV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCBldmVudC50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3Vi
bGUgdm9sdW1lID0gdmFsdWUoKS50b0RvdWJsZSgpOwotICAgIGlmICh2b2x1bWUgIT0gbWVkaWFD
b250cm9sbGVyKCktPnZvbHVtZSgpKQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0Vm9s
dW1lKHZvbHVtZSk7Ci0gICAgaWYgKG1fY2xlYXJNdXRlZE9uVXNlckludGVyYWN0aW9uKQotICAg
ICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0TXV0ZWQoZmFsc2UpOwotICAgIGV2ZW50LnNldERl
ZmF1bHRIYW5kbGVkKCk7Ci19Ci0KLWJvb2wgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVu
dDo6d2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50cygpCi17Ci0gICAgaWYgKCFyZW5kZXJlcigp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCk7Ci19Ci0KLWJvb2wgTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMo
KQotewotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tF
dmVudHMoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpzZXRW
b2x1bWUoZG91YmxlIHZvbHVtZSkKLXsKLSAgICBpZiAodmFsdWUoKS50b0RvdWJsZSgpICE9IHZv
bHVtZSkKLSAgICAgICAgc2V0VmFsdWUoU3RyaW5nOjpudW1iZXIodm9sdW1lKSk7Ci19Ci0KLXZv
aWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6c2V0Q2xlYXJNdXRlZE9uVXNlcklu
dGVyYWN0aW9uKGJvb2wgY2xlYXJNdXRlKQotewotICAgIG1fY2xlYXJNdXRlZE9uVXNlckludGVy
YWN0aW9uID0gY2xlYXJNdXRlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5MzFmYzBlMzk1ODNjYTI3ZDgxYjc1NzdjZWQ4Mzk2OTE0OTExN2VhLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShWSURFTykKLQotI2luY2x1
ZGUgIkhUTUxEaXZFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xsZXJJbnRl
cmZhY2UuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1lbnVtIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIHsKLSAgICBNZWRpYUVudGVyRnVsbHNj
cmVlbkJ1dHRvbiA9IDAsCi0gICAgTWVkaWFNdXRlQnV0dG9uLAotICAgIE1lZGlhUGxheUJ1dHRv
biwKLSAgICBNZWRpYVNlZWtCYWNrQnV0dG9uLAotICAgIE1lZGlhU2Vla0ZvcndhcmRCdXR0b24s
Ci0gICAgTWVkaWFTbGlkZXIsCi0gICAgTWVkaWFTbGlkZXJUaHVtYiwKLSAgICBNZWRpYVJld2lu
ZEJ1dHRvbiwKLSAgICBNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24sCi0gICAgTWVkaWFTaG93
Q2xvc2VkQ2FwdGlvbnNCdXR0b24sCi0gICAgTWVkaWFIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24s
Ci0gICAgTWVkaWFVbk11dGVCdXR0b24sCi0gICAgTWVkaWFQYXVzZUJ1dHRvbiwKLSAgICBNZWRp
YVRpbWVsaW5lQ29udGFpbmVyLAotICAgIE1lZGlhQ3VycmVudFRpbWVEaXNwbGF5LAotICAgIE1l
ZGlhVGltZVJlbWFpbmluZ0Rpc3BsYXksCi0gICAgTWVkaWFTdGF0dXNEaXNwbGF5LAotICAgIE1l
ZGlhQ29udHJvbHNQYW5lbCwKLSAgICBNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lciwKLSAgICBN
ZWRpYVZvbHVtZVNsaWRlciwKLSAgICBNZWRpYVZvbHVtZVNsaWRlclRodW1iLAotICAgIE1lZGlh
RnVsbFNjcmVlblZvbHVtZVNsaWRlciwKLSAgICBNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJU
aHVtYiwKLSAgICBNZWRpYVZvbHVtZVNsaWRlck11dGVCdXR0b24sCi0gICAgTWVkaWFUZXh0VHJh
Y2tEaXNwbGF5Q29udGFpbmVyLAotICAgIE1lZGlhVGV4dFRyYWNrRGlzcGxheSwKLSAgICBNZWRp
YUV4aXRGdWxsc2NyZWVuQnV0dG9uLAotICAgIE1lZGlhT3ZlcmxheVBsYXlCdXR0b24sCi0gICAg
TWVkaWFDbG9zZWRDYXB0aW9uc0NvbnRhaW5lciwKLSAgICBNZWRpYUNsb3NlZENhcHRpb25zVHJh
Y2tMaXN0LAotfTsKLQotUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IHBhcmVudE1lZGlhRWxlbWVu
dChjb25zdCBOb2RlKik7Ci1pbmxpbmUgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IHBhcmVudE1l
ZGlhRWxlbWVudChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSB7IHJldHVybiBwYXJlbnRN
ZWRpYUVsZW1lbnQocmVuZGVyZXIubm9kZSgpKTsgfQotCi1NZWRpYUNvbnRyb2xFbGVtZW50VHlw
ZSBtZWRpYUNvbnRyb2xFbGVtZW50VHlwZShOb2RlKik7Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sRWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB2b2lkIGhpZGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwotICAgIHZpcnR1
YWwgYm9vbCBpc1Nob3dpbmcoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxl
bWVudFR5cGUgZGlzcGxheVR5cGUoKSB7IHJldHVybiBtX2Rpc3BsYXlUeXBlOyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TWVkaWFDb250cm9sbGVyKE1lZGlhQ29udHJvbGxlckludGVyZmFjZSog
Y29udHJvbGxlcikgeyBtX21lZGlhQ29udHJvbGxlciA9IGNvbnRyb2xsZXI7IH0KLSAgICB2aXJ0
dWFsIE1lZGlhQ29udHJvbGxlckludGVyZmFjZSogbWVkaWFDb250cm9sbGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9tZWRpYUNvbnRyb2xsZXI7IH0KLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IE1l
ZGlhQ29udHJvbEVsZW1lbnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUsIEhUTUxFbGVtZW50Kik7
Ci0gICAgfk1lZGlhQ29udHJvbEVsZW1lbnQoKSA9IGRlZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0RGlzcGxheVR5cGUoTWVkaWFDb250cm9sRWxlbWVudFR5cGUpOwotICAgIHZpcnR1YWwg
Ym9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgTWVkaWFDb250cm9sbGVySW50ZXJmYWNlKiBtX21lZGlhQ29udHJvbGxlcjsK
LSAgICBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBtX2Rpc3BsYXlUeXBlOwotICAgIEhUTUxFbGVt
ZW50KiBtX2VsZW1lbnQ7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LWNsYXNzIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQsIHB1
YmxpYyBNZWRpYUNvbnRyb2xFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1l
ZGlhQ29udHJvbERpdkVsZW1lbnQpOwotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IE1lZGlhQ29u
dHJvbERpdkVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSk7Ci0KLXBy
aXZhdGU6Ci0gICAgYm9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBNZWRpYUNvbnRyb2xFbGVtZW50Ojppc01lZGlhQ29udHJvbEVsZW1lbnQoKTsgfQotfTsK
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xJ
bnB1dEVsZW1lbnQgOiBwdWJsaWMgSFRNTElucHV0RWxlbWVudCwgcHVibGljIE1lZGlhQ29udHJv
bEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50KTsKLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSk7Ci0KLXByaXZhdGU6Ci0gICAg
Ym9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBNZWRpYUNv
bnRyb2xFbGVtZW50Ojppc01lZGlhQ29udHJvbEVsZW1lbnQoKTsgfQotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVEaXNwbGF5VHlwZSgpIHsgfQotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQgOiBwdWJsaWMg
TWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRp
YUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQpOwotcHVibGljOgotICAgIHZvaWQgc2V0Q3VycmVu
dFZhbHVlKGRvdWJsZSk7Ci0gICAgZG91YmxlIGN1cnJlbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY3VycmVudFZhbHVlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRy
b2xUaW1lRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSk7
Ci0KLXByaXZhdGU6Ci0gICAgZG91YmxlIG1fY3VycmVudFZhbHVlOwotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxl
bWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAg
IHZvaWQgY2hhbmdlZE11dGUoKTsKLQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tF
dmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBleHBs
aWNpdCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChEb2N1bWVudCYsIE1lZGlhQ29udHJv
bEVsZW1lbnRUeXBlKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIG92
ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKSBvdmVycmlk
ZTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFD
b250cm9sU2Vla0J1dHRvbkVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50
IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVt
ZW50KTsKLXB1YmxpYzoKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgTWVk
aWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50
VHlwZSk7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNGb3J3YXJkQnV0dG9uKCkgY29uc3QgPSAwOwotCi1wcml2YXRl
OgotICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wgLypmbGFnKi8gPSB0cnVlLCBib29sIC8qcGF1c2Uq
LyA9IGZhbHNlKSBmaW5hbDsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotY2xhc3MgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgYm9vbCB3aWxsUmVzcG9uZFRv
TW91c2VNb3ZlRXZlbnRzKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VD
bGlja0V2ZW50cygpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Vm9sdW1lKGRvdWJsZSk7Ci0gICAg
dm9pZCBzZXRDbGVhck11dGVkT25Vc2VySW50ZXJhY3Rpb24oYm9vbCk7Ci0KLXByb3RlY3RlZDoK
LSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KERvY3VtZW50Jik7
Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotcHJp
dmF0ZToKLSAgICBib29sIG1fY2xlYXJNdXRlZE9uVXNlckludGVyYWN0aW9uOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmI0YjRjYjY0YWViZTIxNGI5MjgxNWEwNmQ3ZGFi
OTM4ODA1MDY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE1MDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKQot
Ci0jaW5jbHVkZSAiRE9NVG9rZW5MaXN0LmgiCi0jaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0
b3IuaCIKLSNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGdWxsc2NyZWVuTWFuYWdlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxIZWFkaW5nRWxlbWVudC5o
IgotI2luY2x1ZGUgIkhUTUxMSUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVUxpc3RFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCi0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
LSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzLmgiCi0jaW5jbHVkZSAiTW91c2VFdmVudC5oIgotI2lu
Y2x1ZGUgIlBPREludGVydmFsLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VH
cm91cC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyTWVkaWFD
b250cm9scy5oIgotI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgotI2luY2x1ZGUgIlJlbmRlclRo
ZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
Ci0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaGFkb3dSb290LmgiCi0jaW5jbHVk
ZSAiVGV4dFRyYWNrQ3VlR2VuZXJpYy5oIgotI2luY2x1ZGUgIlRleHRUcmFja0xpc3QuaCIKLSNp
bmNsdWRlICJWVFRSZWdpb25MaXN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMu
aD4KLSNpbmNsdWRlIDx3dGYvTGFuZ3VhZ2UuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1X
VEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sUGFuZWxFbGVtZW50KTsKLVdU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVsZW1l
bnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbE92ZXJsYXlFbmNs
b3N1cmVFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1l
ZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KTsKLVdURl9NQUtF
X0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50KTsK
LVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRl
QnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9s
UGxheUJ1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29u
dHJvbE92ZXJsYXlQbGF5QnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoTWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQpOwotV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQpOwot
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVC
dXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xU
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudCk7Ci1XVEZf
TUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xp
c3RFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5CdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRp
YUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50KTsKLVdURl9N
QUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0
dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sRnVs
bHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TVBMKE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudCk7Ci1XVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudCk7
Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudCk7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLXN0YXRpYyBjb25z
dCBBdG9tU3RyaW5nJiBnZXRNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50U2hh
ZG93UHNldWRvSWQoKTsKLXN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBnZXRNZWRpYUNvbnRyb2xU
aW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnRTaGFkb3dQc2V1ZG9JZCgpOwotCi1NZWRpYUNvbnRy
b2xQYW5lbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudChEb2N1bWVudCYgZG9jdW1l
bnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYUNvbnRyb2xz
UGFuZWwpCi0gICAgLCBtX2NhbkJlRHJhZ2dlZChmYWxzZSkKLSAgICAsIG1faXNCZWluZ0RyYWdn
ZWQoZmFsc2UpCi0gICAgLCBtX2lzRGlzcGxheWVkKGZhbHNlKQotICAgICwgbV9vcGFxdWUodHJ1
ZSkKLSAgICAsIG1fdHJhbnNpdGlvblRpbWVyKCp0aGlzLCAmTWVkaWFDb250cm9sUGFuZWxFbGVt
ZW50Ojp0cmFuc2l0aW9uVGltZXJGaXJlZCkKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygi
LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ+IE1lZGlhQ29udHJv
bFBhbmVsRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQoZG9jdW1lbnQpKTsKLX0KLQot
dm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnN0YXJ0RHJhZyhjb25zdCBMYXlvdXRQb2lu
dCYgZXZlbnRMb2NhdGlvbikKLXsKLSAgICBpZiAoIW1fY2FuQmVEcmFnZ2VkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pc0JlaW5nRHJhZ2dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8
fCAhcmVuZGVyZXItPmlzQm94KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxGcmFt
ZT4gZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9sYXN0RHJhZ0V2ZW50TG9jYXRpb24gPSBldmVudExvY2F0aW9uOwot
Ci0gICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLnNldENhcHR1cmluZ01vdXNlRXZlbnRzRWxlbWVu
dCh0aGlzKTsKLQotICAgIG1faXNCZWluZ0RyYWdnZWQgPSB0cnVlOwotfQotCi12b2lkIE1lZGlh
Q29udHJvbFBhbmVsRWxlbWVudDo6Y29udGludWVEcmFnKGNvbnN0IExheW91dFBvaW50JiBldmVu
dExvY2F0aW9uKQotewotICAgIGlmICghbV9pc0JlaW5nRHJhZ2dlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgTGF5b3V0U2l6ZSBkaXN0YW5jZURyYWdnZWQgPSBldmVudExvY2F0aW9uIC0gbV9s
YXN0RHJhZ0V2ZW50TG9jYXRpb247Ci0gICAgbV9jdW11bGF0aXZlRHJhZ09mZnNldC5tb3ZlKGRp
c3RhbmNlRHJhZ2dlZCk7Ci0gICAgbV9sYXN0RHJhZ0V2ZW50TG9jYXRpb24gPSBldmVudExvY2F0
aW9uOwotICAgIHNldFBvc2l0aW9uKG1fY3VtdWxhdGl2ZURyYWdPZmZzZXQpOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZW5kRHJhZygpCi17Ci0gICAgaWYgKCFtX2lzQmVp
bmdEcmFnZ2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzQmVpbmdEcmFnZ2VkID0gZmFs
c2U7Ci0KLSAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZyYW1lLT5ldmVudEhhbmRsZXIo
KS5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQobnVsbHB0cik7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sUGFuZWxFbGVtZW50OjpzdGFydFRpbWVyKCkKLXsKLSAgICBzdG9wVGltZXIoKTsK
LQotICAgIC8vIFRoZSB0aW1lciBpcyByZXF1aXJlZCB0byBzZXQgdGhlIHByb3BlcnR5IGRpc3Bs
YXk6J25vbmUnIG9uIHRoZSBwYW5lbCwKLSAgICAvLyBzdWNoIHRoYXQgY2FwdGlvbnMgYXJlIGNv
cnJlY3RseSBkaXNwbGF5ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdmlkZW8KLSAgICAvLyBhdCB0
aGUgZW5kIG9mIHRoZSBmYWRlb3V0IHRyYW5zaXRpb24uCi0gICAgU2Vjb25kcyBkdXJhdGlvbiA9
IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5tZWRpYUNvbnRyb2xzRmFkZU91dER1cmF0aW9uKCk7
Ci0gICAgbV90cmFuc2l0aW9uVGltZXIuc3RhcnRPbmVTaG90KGR1cmF0aW9uKTsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnN0b3BUaW1lcigpCi17Ci0gICAgaWYgKG1fdHJh
bnNpdGlvblRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdHJhbnNpdGlvblRpbWVyLnN0b3Ao
KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnRyYW5zaXRpb25UaW1lckZp
cmVkKCkKLXsKLSAgICBpZiAoIW1fb3BhcXVlKQotICAgICAgICBoaWRlKCk7Ci0KLSAgICBzdG9w
VGltZXIoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnNldFBvc2l0aW9u
KGNvbnN0IExheW91dFBvaW50JiBwb3NpdGlvbikKLXsKLSAgICBkb3VibGUgbGVmdCA9IHBvc2l0
aW9uLngoKTsKLSAgICBkb3VibGUgdG9wID0gcG9zaXRpb24ueSgpOwotCi0gICAgLy8gU2V0IHRo
ZSBsZWZ0IGFuZCB0b3AgdG8gY29udHJvbCB0aGUgcGFuZWwncyBwb3NpdGlvbjsgdGhpcyBkZXBl
bmRzIG9uIGl0IGJlaW5nIGFic29sdXRlIHBvc2l0aW9uZWQuCi0gICAgLy8gU2V0IHRoZSBtYXJn
aW4gdG8gemVybyBzaW5jZSB0aGUgcG9zaXRpb24gcGFzc2VkIGluIHdpbGwgYWxyZWFkeSBpbmNs
dWRlIHRoZSBlZmZlY3Qgb2YgdGhlIG1hcmdpbi4KLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5TGVmdCwgbGVmdCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgc2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgdG9wLCBDU1NVbml0VHlwZTo6Q1NTX1BY
KTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgMC4w
LCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5TWFyZ2luVG9wLCAwLjAsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotCi0gICAgY2xhc3NM
aXN0KCkuYWRkKCJkcmFnZ2VkIik7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50
OjpyZXNldFBvc2l0aW9uKCkKLXsKLSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5TGVmdCk7Ci0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRv
cCk7Ci0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQp
OwotICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3ApOwot
Ci0gICAgY2xhc3NMaXN0KCkucmVtb3ZlKCJkcmFnZ2VkIik7Ci0KLSAgICBtX2N1bXVsYXRpdmVE
cmFnT2Zmc2V0LnNldFgoMCk7Ci0gICAgbV9jdW11bGF0aXZlRHJhZ09mZnNldC5zZXRZKDApOwot
fQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6bWFrZU9wYXF1ZSgpCi17Ci0gICAg
aWYgKG1fb3BhcXVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3VibGUgZHVyYXRpb24gPSBS
ZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkubWVkaWFDb250cm9sc0ZhZGVJbkR1cmF0aW9uKCk7Ci0K
LSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNpdGlvblByb3BlcnR5
LCBDU1NQcm9wZXJ0eU9wYWNpdHkpOwotICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlUcmFuc2l0aW9uRHVyYXRpb24sIGR1cmF0aW9uLCBDU1NVbml0VHlwZTo6Q1NTX1MpOwot
ICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlPcGFjaXR5LCAxLjAsIENTU1Vu
aXRUeXBlOjpDU1NfTlVNQkVSKTsKLQotICAgIG1fb3BhcXVlID0gdHJ1ZTsKLQotICAgIGlmICht
X2lzRGlzcGxheWVkKQotICAgICAgICBzaG93KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFu
ZWxFbGVtZW50OjptYWtlVHJhbnNwYXJlbnQoKQotewotICAgIGlmICghbV9vcGFxdWUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFNlY29uZHMgZHVyYXRpb24gPSBSZW5kZXJUaGVtZTo6c2luZ2xl
dG9uKCkubWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpOwotCi0gICAgc2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlPcGFj
aXR5KTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNpdGlvbkR1
cmF0aW9uLCBkdXJhdGlvbi52YWx1ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX1MpOwotICAgIHNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlPcGFjaXR5LCAwLjAsIENTU1VuaXRUeXBlOjpD
U1NfTlVNQkVSKTsKLQotICAgIG1fb3BhcXVlID0gZmFsc2U7Ci0gICAgc3RhcnRUaW1lcigpOwot
fQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCYgZXZlbnQpCi17Ci0gICAgTWVkaWFDb250cm9sRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihldmVudCk7Ci0KLSAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpKSB7Ci0gICAg
ICAgIExheW91dFBvaW50IGxvY2F0aW9uID0gZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQpLmFi
c29sdXRlTG9jYXRpb24oKTsKLSAgICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQudGFyZ2V0KCkgPT0gdGhpcykgewotICAgICAgICAg
ICAgc3RhcnREcmFnKGxvY2F0aW9uKTsKLSAgICAgICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5k
bGVkKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZW1vdmVFdmVudCAmJiBtX2lzQmVpbmdEcmFnZ2VkKQotICAgICAgICAgICAgY29udGludWVE
cmFnKGxvY2F0aW9uKTsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZXVwRXZlbnQgJiYgbV9pc0JlaW5nRHJhZ2dlZCkgewotICAgICAgICAgICAgY29u
dGludWVEcmFnKGxvY2F0aW9uKTsKLSAgICAgICAgICAgIGVuZERyYWcoKTsKLSAgICAgICAgICAg
IGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
TWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzZXRDYW5CZURyYWdnZWQoYm9vbCBjYW5CZURyYWdn
ZWQpCi17Ci0gICAgaWYgKG1fY2FuQmVEcmFnZ2VkID09IGNhbkJlRHJhZ2dlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9jYW5CZURyYWdnZWQgPSBjYW5CZURyYWdnZWQ7Ci0KLSAgICBpZiAo
IWNhbkJlRHJhZ2dlZCkKLSAgICAgICAgZW5kRHJhZygpOwotfQotCi12b2lkIE1lZGlhQ29udHJv
bFBhbmVsRWxlbWVudDo6c2V0SXNEaXNwbGF5ZWQoYm9vbCBpc0Rpc3BsYXllZCkKLXsKLSAgICBt
X2lzRGlzcGxheWVkID0gaXNEaXNwbGF5ZWQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotTWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVFbGVtZW50OjpNZWRpYUNvbnRy
b2xQYW5lbEVuY2xvc3VyZUVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIC8vIE1hcHBp
bmcgb250byBzYW1lIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGFzIHBhbmVsIGVsZW1lbnQsIHNp
bmNlIGl0IGhhcyBzaW1pbGFyIHByb3BlcnRpZXMuCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVt
ZW50KGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzUGFuZWwpCi17Ci0gICAgc2V0UHNldWRvKEF0b21T
dHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtZW5jbG9zdXJlIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFBhbmVsRW5jbG9zdXJl
RWxlbWVudD4gTWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVFbGVtZW50OjpjcmVhdGUoRG9jdW1l
bnQmIGRvY3VtZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFBh
bmVsRW5jbG9zdXJlRWxlbWVudChkb2N1bWVudCkpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbE92ZXJsYXlFbmNsb3N1cmVFbGVtZW50OjpNZWRp
YUNvbnRyb2xPdmVybGF5RW5jbG9zdXJlRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAg
Ly8gTWFwcGluZyBvbnRvIHNhbWUgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgYXMgcGFuZWwgZWxl
bWVudCwgc2luY2UgaXQgaGFzIHNpbWlsYXIgcHJvcGVydGllcy4KLSAgICA6IE1lZGlhQ29udHJv
bERpdkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhQ29udHJvbHNQYW5lbCkKLXsKLSAgICBzZXRQc2V1
ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1vdmVybGF5LWVuY2xvc3VyZSIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRy
b2xPdmVybGF5RW5jbG9zdXJlRWxlbWVudD4gTWVkaWFDb250cm9sT3ZlcmxheUVuY2xvc3VyZUVs
ZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTWVkaWFDb250cm9sT3ZlcmxheUVuY2xvc3VyZUVsZW1lbnQoZG9jdW1lbnQpKTsKLX0K
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xUaW1lbGlu
ZUNvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudChE
b2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50
LCBNZWRpYVRpbWVsaW5lQ29udGFpbmVyKQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCIt
d2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLWNvbnRhaW5lciIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRh
aW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sVGltZWxpbmVDb250
YWluZXJFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xUaW1lbGlu
ZUNvbnRhaW5lckVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBlbGVtZW50LT5oaWRlKCk7Ci0gICAg
cmV0dXJuIGVsZW1lbnQ7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJF
bGVtZW50OjpzZXRUaW1lRGlzcGxheXNIaWRkZW4oYm9vbCBoaWRkZW4pCi17Ci0gICAgZm9yIChh
dXRvJiBlbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAg
IGlmIChlbGVtZW50LnNoYWRvd1BzZXVkb0lkKCkgIT0gZ2V0TWVkaWFDb250cm9sVGltZVJlbWFp
bmluZ0Rpc3BsYXlFbGVtZW50U2hhZG93UHNldWRvSWQoKQotICAgICAgICAgICAgJiYgZWxlbWVu
dC5zaGFkb3dQc2V1ZG9JZCgpICE9IGdldE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVs
ZW1lbnRTaGFkb3dQc2V1ZG9JZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50JiB0aW1lRGlzcGxheSA9IHN0YXRpY19jYXN0
PE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudCY+KGVsZW1lbnQpOwotICAgICAgICBpZiAo
aGlkZGVuKQotICAgICAgICAgICAgdGltZURpc3BsYXkuaGlkZSgpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB0aW1lRGlzcGxheS5zaG93KCk7Ci0gICAgfQotfQotCi1SZW5kZXJQdHI8UmVu
ZGVyRWxlbWVudD4gTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OjpjcmVhdGVF
bGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsZSwgY29uc3QgUmVuZGVyVHJlZVBvc2l0
aW9uJikKLXsKLSAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyTWVkaWFDb250cm9sVGlt
ZWxpbmVDb250YWluZXI+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7Ci19Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVy
RWxlbWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChEb2N1bWVu
dCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRp
YVZvbHVtZVNsaWRlckNvbnRhaW5lcikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdl
YmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlk
ZXJDb250YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRp
YUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgZWxl
bWVudC0+aGlkZSgpOwotICAgIHJldHVybiBlbGVtZW50OwotfQotCi1SZW5kZXJQdHI8UmVuZGVy
RWxlbWVudD4gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRl
RWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3Np
dGlvbiYpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlck1lZGlhVm9sdW1lU2xp
ZGVyQ29udGFpbmVyPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwotfQotCi12b2lkIE1lZGlhQ29u
dHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQmIGV2ZW50KQotewotICAgIC8vIFBvb3IgbWFuJ3MgbW91c2VsZWF2ZSBldmVudCBkZXRlY3Rp
b24uCi0KLSAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSB8fCBldmVudC50eXBlKCkgIT0g
ZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
aXM8Tm9kZT4oZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQpLnJlbGF0ZWRUYXJnZXQoKSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChjb250YWluc0luY2x1ZGluZ1NoYWRvd0RPTSgmZG93
bmNhc3Q8Tm9kZT4oKmRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KS5yZWxhdGVkVGFyZ2V0KCkp
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaGlkZSgpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpNZWRp
YUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBN
ZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYVN0YXR1c0Rpc3BsYXkpCi0gICAg
LCBtX3N0YXRlQmVpbmdEaXNwbGF5ZWQoTm90aGluZykKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0
cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1zdGF0dXMtZGlzcGxheSIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNw
bGF5RWxlbWVudD4gTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShEb2N1
bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVt
ZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxl
bWVudChkb2N1bWVudCkpOwotICAgIGVsZW1lbnQtPmhpZGUoKTsKLSAgICByZXR1cm4gZWxlbWVu
dDsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6dXBkYXRlKCkK
LXsKLSAgICAvLyBHZXQgdGhlIG5ldyBzdGF0ZSB0aGF0IHdlJ2xsIGhhdmUgdG8gZGlzcGxheS4K
LSAgICBTdGF0ZUJlaW5nRGlzcGxheWVkIG5ld1N0YXRlVG9EaXNwbGF5ID0gTm90aGluZzsKLQot
ICAgIGlmIChtZWRpYUNvbnRyb2xsZXIoKS0+cmVhZHlTdGF0ZSgpIDw9IE1lZGlhQ29udHJvbGxl
ckludGVyZmFjZTo6SEFWRV9NRVRBREFUQSAmJiBtZWRpYUNvbnRyb2xsZXIoKS0+aGFzQ3VycmVu
dFNyYygpKQotICAgICAgICBuZXdTdGF0ZVRvRGlzcGxheSA9IExvYWRpbmc7Ci0gICAgZWxzZSBp
ZiAobWVkaWFDb250cm9sbGVyKCktPmlzTGl2ZVN0cmVhbSgpKQotICAgICAgICBuZXdTdGF0ZVRv
RGlzcGxheSA9IExpdmVCcm9hZGNhc3Q7Ci0KLSAgICBpZiAobmV3U3RhdGVUb0Rpc3BsYXkgPT0g
bV9zdGF0ZUJlaW5nRGlzcGxheWVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zdGF0
ZUJlaW5nRGlzcGxheWVkID09IE5vdGhpbmcpCi0gICAgICAgIHNob3coKTsKLSAgICBlbHNlIGlm
IChuZXdTdGF0ZVRvRGlzcGxheSA9PSBOb3RoaW5nKQotICAgICAgICBoaWRlKCk7Ci0KLSAgICBt
X3N0YXRlQmVpbmdEaXNwbGF5ZWQgPSBuZXdTdGF0ZVRvRGlzcGxheTsKLQotICAgIHN3aXRjaCAo
bV9zdGF0ZUJlaW5nRGlzcGxheWVkKSB7Ci0gICAgY2FzZSBOb3RoaW5nOgotICAgICAgICBzZXRJ
bm5lclRleHQoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTG9hZGlu
ZzoKLSAgICAgICAgc2V0SW5uZXJUZXh0KG1lZGlhRWxlbWVudExvYWRpbmdTdGF0ZVRleHQoKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGl2ZUJyb2FkY2FzdDoKLSAgICAgICAgc2V0SW5u
ZXJUZXh0KG1lZGlhRWxlbWVudExpdmVCcm9hZGNhc3RTdGF0ZVRleHQoKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRp
YUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0
b25FbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi0g
ICAgOiBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChkb2N1bWVudCwgTWVkaWFNdXRlQnV0
dG9uKQotICAgICwgbV9jb250cm9scyhjb250cm9scykKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0
cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1tdXRlLWJ1dHRvbiIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0
b25FbGVtZW50PiBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpjcmVhdGUoRG9j
dW1lbnQmIGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzKiBjb250cm9scykKLXsKLSAgICBBU1NFUlQo
Y29udHJvbHMpOwotCi0gICAgUmVmPE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+
IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVu
dChkb2N1bWVudCwgY29udHJvbHMpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJBZ2VudFNoYWRv
d1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIHJldHVybiBidXR0
b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpCi0gICAgICAgIG1fY29udHJvbHMtPnNob3dWb2x1
bWVTbGlkZXIoKTsKLQotICAgIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1NZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudDo6TWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAg
IDogTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhTXV0ZUJ1dHRv
bikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy12
b2x1bWUtc2xpZGVyLW11dGUtYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50
PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3Vt
ZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1
dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sVm9sdW1lU2xp
ZGVyTXV0ZUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJB
Z2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIHJl
dHVybiBidXR0b247Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVk
aWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50
KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1
bWVudCwgTWVkaWFQbGF5QnV0dG9uKQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50PiBNZWRp
YUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsK
LSAgICBSZWY8TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVm
KCpuZXcgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0
b24tPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1
dHRvbiIpOwotICAgIHJldHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGxheUJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewotICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgaWYg
KG1lZGlhQ29udHJvbGxlcigpLT5jYW5QbGF5KCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xs
ZXIoKS0+cGxheSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xsZXIo
KS0+cGF1c2UoKTsKLSAgICAgICAgdXBkYXRlRGlzcGxheVR5cGUoKTsKLSAgICAgICAgZXZlbnQu
c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVs
ZW1lbnQ6OnVwZGF0ZURpc3BsYXlUeXBlKCkKLXsKLSAgICBzZXREaXNwbGF5VHlwZShtZWRpYUNv
bnRyb2xsZXIoKS0+Y2FuUGxheSgpID8gTWVkaWFQbGF5QnV0dG9uIDogTWVkaWFQYXVzZUJ1dHRv
bik7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9s
T3ZlcmxheVBsYXlCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVs
ZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50
KGRvY3VtZW50LCBNZWRpYU92ZXJsYXlQbGF5QnV0dG9uKQotewotICAgIHNldFBzZXVkbyhBdG9t
U3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLW92ZXJsYXktcGxheS1idXR0b24iLCBBdG9t
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sT3Zl
cmxheVBsYXlCdXR0b25FbGVtZW50PiBNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1l
bnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbE92
ZXJsYXlQbGF5QnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRy
b2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0b24tPmVuc3Vy
ZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwot
ICAgIHJldHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0
b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAo
ZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIG1lZGlhQ29udHJvbGxl
cigpLT5jYW5QbGF5KCkpIHsKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPnBsYXkoKTsKLSAg
ICAgICAgdXBkYXRlRGlzcGxheVR5cGUoKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRs
ZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihl
dmVudCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0b25FbGVtZW50Ojp1
cGRhdGVEaXNwbGF5VHlwZSgpCi17Ci0gICAgaWYgKG1lZGlhQ29udHJvbGxlcigpLT5jYW5QbGF5
KCkpIHsKLSAgICAgICAgc2hvdygpOwotICAgIH0gZWxzZQotICAgICAgICBoaWRlKCk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sU2Vla0Zvcndh
cmRCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQoRG9j
dW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQoZG9j
dW1lbnQsIE1lZGlhU2Vla0ZvcndhcmRCdXR0b24pCi17Ci0gICAgc2V0UHNldWRvKEF0b21TdHJp
bmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtc2Vlay1mb3J3YXJkLWJ1dHRvbiIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xTZWVrRm9y
d2FyZEJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudDo6
Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sU2Vla0Zv
cndhcmRCdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFNl
ZWtGb3J3YXJkQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNl
ckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAg
cmV0dXJuIGJ1dHRvbjsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1N
ZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFNlZWtCYWNrQnV0
dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xTZWVrQnV0
dG9uRWxlbWVudChkb2N1bWVudCwgTWVkaWFTZWVrQmFja0J1dHRvbikKLXsKLSAgICBzZXRQc2V1
ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWJhY2stYnV0dG9uIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJv
bFNlZWtCYWNrQnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50
OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xTZWVr
QmFja0J1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sU2Vl
a0JhY2tCdXR0b25FbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgYnV0dG9uLT5lbnN1cmVVc2VyQWdl
bnRTaGFkb3dSb290KCk7Ci0gICAgYnV0dG9uLT5zZXRUeXBlKCJidXR0b24iKTsKLSAgICByZXR1
cm4gYnV0dG9uOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlh
Q29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1l
bnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KGRv
Y3VtZW50LCBNZWRpYVJld2luZEJ1dHRvbikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygi
LXdlYmtpdC1tZWRpYS1jb250cm9scy1yZXdpbmQtYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1l
bnQ+IE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9j
dW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ+IGJ1dHRv
biA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudChkb2N1bWVu
dCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRv
bi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRp
YUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBl
dmVudCkKLXsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50
KSB7Ci0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5zZXRDdXJyZW50VGltZShzdGQ6Om1heDxk
b3VibGU+KDAsIG1lZGlhQ29udHJvbGxlcigpLT5jdXJyZW50VGltZSgpIC0gMzApKTsKLSAgICAg
ICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ6
Ok1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50KERvY3VtZW50JiBkb2N1
bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1bWVudCwgTWVkaWFSZXR1
cm5Ub1JlYWx0aW1lQnV0dG9uKQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0
LW1lZGlhLWNvbnRyb2xzLXJldHVybi10by1yZWFsdGltZS1idXR0b24iLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sUmV0dXJuVG9SZWFs
dGltZUJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xS
ZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRp
YUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1
dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgi
YnV0dG9uIik7Ci0gICAgYnV0dG9uLT5oaWRlKCk7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQot
dm9pZCBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuY2xpY2tFdmVudCkgewotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+cmV0dXJu
VG9SZWFsdGltZSgpOwotICAgICAgICBldmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0K
LSAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25z
QnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhQ29udHJvbHMqIGNvbnRyb2xz
KQotICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KGRvY3VtZW50LCBNZWRpYVNob3dDbG9z
ZWRDYXB0aW9uc0J1dHRvbikKLSNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oV0lOKSB8
fCBQTEFURk9STShHVEspCi0gICAgLCBtX2NvbnRyb2xzKGNvbnRyb2xzKQotI2VuZGlmCi17Ci0j
aWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oV0lOKSB8fCAhUExBVEZPUk0oR1RLKQot
ICAgIFVOVVNFRF9QQVJBTShjb250cm9scyk7Ci0jZW5kaWYKLSAgICBzZXRQc2V1ZG8oQXRvbVN0
cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy10b2dnbGUtY2xvc2VkLWNhcHRpb25zLWJ1dHRv
biIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNv
bnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFRvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwg
TWVkaWFDb250cm9scyogY29udHJvbHMpCi17Ci0gICAgQVNTRVJUKGNvbnRyb2xzKTsKLQotICAg
IFJlZjxNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IGJ1dHRv
biA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25F
bGVtZW50KGRvY3VtZW50LCBjb250cm9scykpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFnZW50
U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgYnV0dG9u
LT5oaWRlKCk7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUb2dn
bGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OnVwZGF0ZURpc3BsYXlUeXBlKCkKLXsKLSAg
ICBib29sIGNhcHRpb25zVmlzaWJsZSA9IG1lZGlhQ29udHJvbGxlcigpLT5jbG9zZWRDYXB0aW9u
c1Zpc2libGUoKTsKLSAgICBzZXREaXNwbGF5VHlwZShjYXB0aW9uc1Zpc2libGUgPyBNZWRpYUhp
ZGVDbG9zZWRDYXB0aW9uc0J1dHRvbiA6IE1lZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uKTsK
LSAgICBzZXRDaGVja2VkKGNhcHRpb25zVmlzaWJsZSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
VG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50JiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlj
a0V2ZW50KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBncmVhdCB0aGF0IHRoZSBzaGFy
ZWQgY29kZSBpcyBkaWN0YXRpbmcgYmVoYXZpb3Igb2YgcGxhdGZvcm0tc3BlY2lmaWMKLSAgICAg
ICAgLy8gVUkuIE5vdCBhbGwgcG9ydHMgbWF5IHdhbnQgdGhlIGNsb3NlZCBjYXB0aW9ucyBidXR0
b24gdG8gdG9nZ2xlIGEgbGlzdCBvZiB0cmFja3MsIHNvCi0gICAgICAgIC8vIHdlIGhhdmUgdG8g
dXNlICNpZi4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMTg3NwotI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKFdJTikgJiYgIVBM
QVRGT1JNKEdUSykKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPnNldENsb3NlZENhcHRpb25z
VmlzaWJsZSghbWVkaWFDb250cm9sbGVyKCktPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpKTsKLSAg
ICAgICAgc2V0Q2hlY2tlZChtZWRpYUNvbnRyb2xsZXIoKS0+Y2xvc2VkQ2FwdGlvbnNWaXNpYmxl
KCkpOwotICAgICAgICB1cGRhdGVEaXNwbGF5VHlwZSgpOwotI2Vsc2UKLSAgICAgICAgbV9jb250
cm9scy0+dG9nZ2xlQ2xvc2VkQ2FwdGlvblRyYWNrTGlzdCgpOwotI2VuZGlmCi0gICAgICAgIGV2
ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfQotCi0gICAgSFRNTElucHV0RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNDb250YWluZXJFbGVtZW50OjpN
ZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50KQotICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChkb2N1bWVudCwgTWVkaWFDbG9zZWRD
YXB0aW9uc0NvbnRhaW5lcikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1t
ZWRpYS1jb250cm9scy1jbG9zZWQtY2FwdGlvbnMtY29udGFpbmVyIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25z
Q29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNDb250YWluZXJFbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xD
bG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IE1l
ZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCkpOwotICAg
IGVsZW1lbnQtPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZGlyQXR0ciwgQXRv
bVN0cmluZygiYXV0byIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAg
ZWxlbWVudC0+aGlkZSgpOwotICAgIHJldHVybiBlbGVtZW50OwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0
RWxlbWVudDo6TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50KERvY3Vt
ZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi0gICAgOiBNZWRpYUNvbnRy
b2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYUNsb3NlZENhcHRpb25zVHJhY2tMaXN0KQotI2lm
IEVOQUJMRShWSURFT19UUkFDSykKLSAgICAsIG1fY29udHJvbHMoY29udHJvbHMpCi0jZW5kaWYK
LXsKLSNpZiAhRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIFVOVVNFRF9QQVJBTShjb250cm9scyk7
Ci0jZW5kaWYKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9s
cy1jbG9zZWQtY2FwdGlvbnMtdHJhY2stbGlzdCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVs
ZW1lbnQ+IE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudDo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi17Ci0gICAgQVNT
RVJUKGNvbnRyb2xzKTsKLSAgICBSZWY8TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xp
c3RFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0
aW9uc1RyYWNrTGlzdEVsZW1lbnQoZG9jdW1lbnQsIGNvbnRyb2xzKSk7Ci0gICAgcmV0dXJuIGVs
ZW1lbnQ7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCkgewotICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KGV2ZW50LnRhcmdldCgpKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAvLyBXaGVuIHdlIGNyZWF0ZWQgdGhlIGVsZW1lbnRzIGlu
IHRoZSB0cmFjayBsaXN0LCB3ZSBnYXZlIHRoZW0gYSBjdXN0b20KLSAgICAgICAgLy8gYXR0cmli
dXRlIHJlcHJlc2VudGluZyB0aGUgaW5kZXggaW4gdGhlIEhUTUxNZWRpYUVsZW1lbnQncyBsaXN0
IG9mIHRyYWNrcy4KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50IHRhcmdldCBoYXMgc3Vj
aCBhIGN1c3RvbSBlbGVtZW50IGFuZCwgaWYgc28sCi0gICAgICAgIC8vIHRlbGwgdGhlIEhUTUxN
ZWRpYUVsZW1lbnQgdG8gZW5hYmxlIHRoYXQgdHJhY2suCi0KLSAgICAgICAgYXV0byB0ZXh0VHJh
Y2sgPSBtYWtlUmVmUHRyKG1fbWVudVRvVHJhY2tNYXAuZ2V0KCZkb3duY2FzdDxFbGVtZW50Pigq
ZXZlbnQudGFyZ2V0KCkpKSk7Ci0gICAgICAgIG1fbWVudVRvVHJhY2tNYXAuY2xlYXIoKTsKLSAg
ICAgICAgbV9jb250cm9scy0+dG9nZ2xlQ2xvc2VkQ2FwdGlvblRyYWNrTGlzdCgpOwotICAgICAg
ICBpZiAoIXRleHRUcmFjaykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvIG1l
ZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKLSAgICAgICAgaWYgKCFtZWRp
YUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbWVkaWFFbGVtZW50LT5z
ZXRTZWxlY3RlZFRleHRUcmFjayh0ZXh0VHJhY2suZ2V0KCkpOwotCi0gICAgICAgIHVwZGF0ZURp
c3BsYXkoKTsKLSAgICB9Ci0KLSAgICBNZWRpYUNvbnRyb2xEaXZFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKGV2ZW50KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsKLSNlbmRp
ZgotfQotCi12b2lkIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudDo6
dXBkYXRlRGlzcGxheSgpCi17Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5nPiBzZWxlY3RlZENsYXNzVmFsdWUoInNlbGVjdGVkIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAgaWYgKCFtZWRpYUNvbnRy
b2xsZXIoKS0+aGFzQ2xvc2VkQ2FwdGlvbnMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXM6OkNhcHRpb25EaXNwbGF5TW9kZSBkaXNwbGF5TW9kZSA9IGRvY3VtZW50KCkucGFn
ZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLmNhcHRpb25EaXNwbGF5TW9kZSgpOwot
Ci0gICAgYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0gICAg
aWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbWVkaWFFbGVt
ZW50LT50ZXh0VHJhY2tzKCkgfHwgIW1lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpLT5sZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVidWlsZFRyYWNrTGlzdE1lbnUoKTsKLQotICAg
IFJlZlB0cjxFbGVtZW50PiBvZmZNZW51SXRlbTsKLSAgICBib29sIHRyYWNrTWVudUl0ZW1TZWxl
Y3RlZCA9IGZhbHNlOwotCi0gICAgZm9yIChhdXRvJiB0cmFja0l0ZW0gOiBtX21lbnVJdGVtcykg
ewotICAgICAgICBSZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2s7Ci0gICAgICAgIE1lbnVJdGVt
VG9UcmFja01hcDo6aXRlcmF0b3IgaXRlciA9IG1fbWVudVRvVHJhY2tNYXAuZmluZCh0cmFja0l0
ZW0uZ2V0KCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX21lbnVUb1RyYWNrTWFwLmVuZCgpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHRleHRUcmFjayA9IGl0ZXItPnZhbHVlOwot
ICAgICAgICBpZiAoIXRleHRUcmFjaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IGlmICh0ZXh0VHJhY2sgPT0gJlRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpIHsKLSAg
ICAgICAgICAgIG9mZk1lbnVJdGVtID0gdHJhY2tJdGVtOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGV4dFRyYWNrID09ICZUZXh0VHJhY2s6OmNhcHRp
b25NZW51QXV0b21hdGljSXRlbSgpKSB7Ci0gICAgICAgICAgICBpZiAoZGlzcGxheU1vZGUgPT0g
Q2FwdGlvblVzZXJQcmVmZXJlbmNlczo6QXV0b21hdGljKQotICAgICAgICAgICAgICAgIHRyYWNr
SXRlbS0+Y2xhc3NMaXN0KCkuYWRkKHNlbGVjdGVkQ2xhc3NWYWx1ZSk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgdHJhY2tJdGVtLT5jbGFzc0xpc3QoKS5yZW1vdmUoc2VsZWN0
ZWRDbGFzc1ZhbHVlKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGRpc3BsYXlNb2RlICE9IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYyAm
JiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKLSAgICAg
ICAgICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgICAgICB0cmFja0l0
ZW0tPmNsYXNzTGlzdCgpLmFkZChzZWxlY3RlZENsYXNzVmFsdWUpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIHRyYWNrSXRlbS0+Y2xhc3NMaXN0KCkucmVtb3ZlKHNlbGVjdGVkQ2xhc3NW
YWx1ZSk7Ci0gICAgfQotCi0gICAgaWYgKG9mZk1lbnVJdGVtKSB7Ci0gICAgICAgIGlmIChkaXNw
bGF5TW9kZSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpGb3JjZWRPbmx5ICYmICF0cmFja01l
bnVJdGVtU2VsZWN0ZWQpCi0gICAgICAgICAgICBvZmZNZW51SXRlbS0+Y2xhc3NMaXN0KCkuYWRk
KHNlbGVjdGVkQ2xhc3NWYWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9mZk1lbnVJ
dGVtLT5jbGFzc0xpc3QoKS5yZW1vdmUoc2VsZWN0ZWRDbGFzc1ZhbHVlKTsKLSAgICB9Ci0jZW5k
aWYKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQ6
OnJlYnVpbGRUcmFja0xpc3RNZW51KCkKLXsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAg
Ly8gUmVtb3ZlIGFueSBleGlzdGluZyBjb250ZW50LgotICAgIHJlbW92ZUNoaWxkcmVuKCk7Ci0g
ICAgbV9tZW51SXRlbXMuY2xlYXIoKTsKLSAgICBtX21lbnVUb1RyYWNrTWFwLmNsZWFyKCk7Ci0K
LSAgICBpZiAoIW1lZGlhQ29udHJvbGxlcigpLT5oYXNDbG9zZWRDYXB0aW9ucygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0
aGlzKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byogdHJhY2tMaXN0ID0gbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7Ci0gICAgaWYgKCF0cmFj
a0xpc3QgfHwgIXRyYWNrTGlzdC0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvJiBjYXB0aW9u
UHJlZmVyZW5jZXMgPSBkb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5j
ZXMoKTsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IHRyYWNrc0Zvck1lbnUgPSBjYXB0
aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudSh0cmFja0xpc3QpOwotCi0gICAg
YXV0byBjYXB0aW9uc0hlYWRlciA9IEhUTUxIZWFkaW5nRWxlbWVudDo6Y3JlYXRlKGgzVGFnLCBk
b2N1bWVudCgpKTsKLSAgICBjYXB0aW9uc0hlYWRlci0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS5j
cmVhdGVUZXh0Tm9kZSh0ZXh0VHJhY2tTdWJ0aXRsZXNUZXh0KCkpKTsKLSAgICBhcHBlbmRDaGls
ZChjYXB0aW9uc0hlYWRlcik7Ci0gICAgYXV0byBjYXB0aW9uc01lbnVMaXN0ID0gSFRNTFVMaXN0
RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotCi0gICAgZm9yIChhdXRvJiB0ZXh0VHJhY2sg
OiB0cmFja3NGb3JNZW51KSB7Ci0gICAgICAgIGF1dG8gbWVudUl0ZW0gPSBIVE1MTElFbGVtZW50
OjpjcmVhdGUoZG9jdW1lbnQoKSk7Ci0gICAgICAgIG1lbnVJdGVtLT5hcHBlbmRDaGlsZChkb2N1
bWVudCgpLmNyZWF0ZVRleHROb2RlKGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5TmFtZUZvclRy
YWNrKHRleHRUcmFjay5nZXQoKSkpKTsKLSAgICAgICAgY2FwdGlvbnNNZW51TGlzdC0+YXBwZW5k
Q2hpbGQobWVudUl0ZW0pOwotICAgICAgICBtX21lbnVJdGVtcy5hcHBlbmQobWVudUl0ZW0ucHRy
KCkpOwotICAgICAgICBtX21lbnVUb1RyYWNrTWFwLmFkZChtZW51SXRlbS5wdHIoKSwgdGV4dFRy
YWNrKTsKLSAgICB9Ci0KLSAgICBhcHBlbmRDaGlsZChjYXB0aW9uc01lbnVMaXN0KTsKLSNlbmRp
ZgotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFRp
bWVsaW5lRWxlbWVudDo6TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50KERvY3VtZW50JiBkb2N1
bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVs
ZW1lbnQoZG9jdW1lbnQsIE1lZGlhU2xpZGVyKQotICAgICwgbV9jb250cm9scyhjb250cm9scykK
LXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
bGluZSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRp
YUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3Jl
YXRlKERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi17Ci0gICAg
QVNTRVJUKGNvbnRyb2xzKTsKLQotICAgIFJlZjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+
IHRpbWVsaW5lID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQoZG9j
dW1lbnQsIGNvbnRyb2xzKSk7Ci0gICAgdGltZWxpbmUtPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jv
b3QoKTsKLSAgICB0aW1lbGluZS0+c2V0VHlwZSgicmFuZ2UiKTsKLSAgICB0aW1lbGluZS0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwcmVjaXNpb25BdHRyLCBBdG9tU3RyaW5n
KCJmbG9hdCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgcmV0dXJu
IHRpbWVsaW5lOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgLy8gTGVmdCBidXR0b24gaXMgMC4g
UmVqZWN0cyBtb3VzZSBldmVudHMgbm90IGZyb20gbGVmdCBidXR0b24uCi0gICAgaWYgKGlzPE1v
dXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkuYnV0dG9uKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQp
Ci0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5iZWdpblNjcnViYmluZygpOwotCi0gICAgaWYg
KGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KQotICAgICAgICBtZWRp
YUNvbnRyb2xsZXIoKS0+ZW5kU2NydWJiaW5nKCk7Ci0KLSAgICBNZWRpYUNvbnRyb2xJbnB1dEVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAgaWYgKGV2ZW50LnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZW91dEV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vtb3ZlRXZlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRvdWJsZSB0aW1lID0gdmFsdWUo
KS50b0RvdWJsZSgpOwotICAgIGlmICgoZXZlbnQuaXNJbnB1dEV2ZW50KCkgfHwgZXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5pbnB1dEV2ZW50KSAmJiB0aW1lICE9IG1lZGlhQ29udHJvbGxl
cigpLT5jdXJyZW50VGltZSgpKQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0Q3VycmVu
dFRpbWUodGltZSk7Ci0KLSAgICBSZW5kZXJTbGlkZXImIHNsaWRlciA9IGRvd25jYXN0PFJlbmRl
clNsaWRlcj4oKnJlbmRlcmVyKCkpOwotICAgIGlmIChzbGlkZXIuaW5EcmFnTW9kZSgpKQotICAg
ICAgICBtX2NvbnRyb2xzLT51cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKTsKLX0KLQotI2lmICFQ
TEFURk9STShJT1NfRkFNSUxZKQotYm9vbCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6Ondp
bGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmIC8vICFQ
TEFURk9STShJT1NfRkFNSUxZKQotCi12b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6
c2V0UG9zaXRpb24oZG91YmxlIGN1cnJlbnRUaW1lKQotewotICAgIHNldFZhbHVlKFN0cmluZzo6
bnVtYmVyKGN1cnJlbnRUaW1lKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGltZWxpbmVFbGVt
ZW50OjpzZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgc2V0QXR0cmlidXRlKG1h
eEF0dHIsIEF0b21TdHJpbmc6Om51bWJlcihkdXJhdGlvbikpOwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVu
dDo6TWVkaWFDb250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50KERvY3VtZW50JiBkb2N1bWVu
dCkKLSAgICA6IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQoZG9jdW1lbnQpCi17Ci0g
ICAgc2V0UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNs
aWRlciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRp
YUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQ+IE1lZGlhQ29udHJvbFBhbmVsVm9sdW1l
U2xpZGVyRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVk
aWFDb250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50PiBzbGlkZXIgPSBhZG9wdFJlZigqbmV3
IE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudChkb2N1bWVudCkpOwotICAgIHNs
aWRlci0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIHNsaWRlci0+c2V0VHlwZSgi
cmFuZ2UiKTsKLSAgICBzbGlkZXItPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
cHJlY2lzaW9uQXR0ciwgQXRvbVN0cmluZygiZmxvYXQiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCkpOwotICAgIHNsaWRlci0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihtYXhBdHRyLCBBdG9tU3RyaW5nKCIxIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpKTsKLSAgICByZXR1cm4gc2xpZGVyOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50OjpN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYgZG9jdW1l
bnQpCi0gICAgOiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KGRvY3VtZW50KQotewot
ICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3Jl
ZW4tdm9sdW1lLXNsaWRlciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19
Ci0KLVJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudD4gTWVkaWFD
b250cm9sRnVsbHNjcmVlblZvbHVtZVNsaWRlckVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9j
dW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVt
ZW50PiBzbGlkZXIgPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVT
bGlkZXJFbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgc2xpZGVyLT5lbnN1cmVVc2VyQWdlbnRTaGFk
b3dSb290KCk7Ci0gICAgc2xpZGVyLT5zZXRUeXBlKCJyYW5nZSIpOwotICAgIHNsaWRlci0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwcmVjaXNpb25BdHRyLCBBdG9tU3RyaW5n
KCJmbG9hdCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgc2xpZGVy
LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1heEF0dHIsIEF0b21TdHJpbmco
IjEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBzbGlk
ZXI7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9s
RnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVt
ZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChk
b2N1bWVudCwgTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b24pCi17Ci0gICAgc2V0UHNldWRvKEF0
b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1idXR0b24iLCBBdG9t
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sRnVs
bHNjcmVlbkJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50
OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xG
dWxsc2NyZWVuQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNl
ckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAg
YnV0dG9uLT5oaWRlKCk7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZl
bnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkg
ewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICAgICAgLy8gT25seSB1c2UgdGhlIG5l
dyBmdWxsIHNjcmVlbiBBUEkgaWYgdGhlIGZ1bGxTY3JlZW5FbmFibGVkIHNldHRpbmcgaGFzCi0g
ICAgICAgIC8vIGJlZW4gZXhwbGljaXRseSBlbmFibGVkLiBPdGhlcndpc2UsIHVzZSB0aGUgb2xk
IGZ1bGxzY3JlZW4gQVBJLiBUaGlzCi0gICAgICAgIC8vIGFsbG93cyBhcHBzIHdoaWNoIGVtYmVk
IGEgV2ViVmlldyB0byByZXRhaW4gdGhlIGV4aXN0aW5nIGZ1bGwgc2NyZWVuCi0gICAgICAgIC8v
IHZpZGVvIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgcmVxdWlyaW5nIHRoZW0gdG8gaW1wbGVtZW50
IHRoZWlyIG93biBmdWxsCi0gICAgICAgIC8vIHNjcmVlbiBiZWhhdmlvci4KLSAgICAgICAgaWYg
KGRvY3VtZW50KCkuc2V0dGluZ3MoKS5mdWxsU2NyZWVuRW5hYmxlZCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoZG9jdW1lbnQoKS5mdWxsc2NyZWVuTWFuYWdlcigpLmlzRnVsbHNjcmVlbigpICYmIGRv
Y3VtZW50KCkuZnVsbHNjcmVlbk1hbmFnZXIoKS5jdXJyZW50RnVsbHNjcmVlbkVsZW1lbnQoKSA9
PSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcykpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5m
dWxsc2NyZWVuTWFuYWdlcigpLmNhbmNlbEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLmZ1bGxzY3JlZW5NYW5hZ2VyKCkucmVxdWVzdEZ1
bGxzY3JlZW5Gb3JFbGVtZW50KHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKS5nZXQoKSwgRnVsbHNj
cmVlbk1hbmFnZXI6OkV4ZW1wdElGcmFtZUFsbG93RnVsbHNjcmVlblJlcXVpcmVtZW50KTsKLSAg
ICAgICAgfSBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5lbnRl
ckZ1bGxzY3JlZW4oKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9
Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OnNldElzRnVsbHNjcmVl
bihib29sIGlzRnVsbHNjcmVlbikKLXsKLSAgICBzZXREaXNwbGF5VHlwZShpc0Z1bGxzY3JlZW4g
PyBNZWRpYUV4aXRGdWxsc2NyZWVuQnV0dG9uIDogTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b24p
OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9s
dW1lTWluQnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRy
b2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhVW5NdXRlQnV0dG9uKQotewotICAgIHNldFBz
ZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tdm9sdW1l
LW1pbi1idXR0b24iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1S
ZWY8TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRv
Y3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9u
RWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9s
dW1lTWluQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFn
ZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgcmV0
dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0
dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYg
KGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewotICAgICAgICBtZWRp
YUNvbnRyb2xsZXIoKS0+c2V0Vm9sdW1lKDApOwotICAgICAgICBldmVudC5zZXREZWZhdWx0SGFu
ZGxlZCgpOwotICAgIH0KLSAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sRnVsbHNj
cmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotOiBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhTXV0ZUJ1dHRvbikKLXsKLSAgICBzZXRQ
c2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2NyZWVuLXZvbHVt
ZS1tYXgtYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQot
UmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVtZW50PiBNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBk
b2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRv
bkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sRnVsbHNjcmVlblZv
bHVtZU1heEJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJB
Z2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIHJl
dHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewotICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgbWVk
aWFDb250cm9sbGVyKCktPnNldFZvbHVtZSgxKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhh
bmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFD
b250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lUmVtYWlu
aW5nRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9s
VGltZURpc3BsYXlFbGVtZW50KGRvY3VtZW50LCBNZWRpYVRpbWVSZW1haW5pbmdEaXNwbGF5KQot
ewotICAgIHNldFBzZXVkbyhnZXRNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1l
bnRTaGFkb3dQc2V1ZG9JZCgpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdE
aXNwbGF5RWxlbWVudD4gTWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50Ojpj
cmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1l
ZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudChkb2N1bWVudCkpOwotfQotCi1z
dGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZ2V0TWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3Bs
YXlFbGVtZW50U2hhZG93UHNldWRvSWQoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9tU3RyaW5nPiBpZCgiLXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNw
bGF5IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBpZDsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xDdXJy
ZW50VGltZURpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVt
ZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxl
bWVudChkb2N1bWVudCwgTWVkaWFDdXJyZW50VGltZURpc3BsYXkpCi17Ci0gICAgc2V0UHNldWRv
KGdldE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnRTaGFkb3dQc2V1ZG9JZCgp
KTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ+IE1lZGlh
Q29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1l
bnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sQ3VycmVudFRpbWVE
aXNwbGF5RWxlbWVudChkb2N1bWVudCkpOwotfQotCi1zdGF0aWMgY29uc3QgQXRvbVN0cmluZyYg
Z2V0TWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudFNoYWRvd1BzZXVkb0lkKCkK
LXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZz4gaWQoIi13ZWJraXQtbWVk
aWEtY29udHJvbHMtY3VycmVudC10aW1lLWRpc3BsYXkiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIGlkOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0KLU1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChkb2N1
bWVudCwgTWVkaWFUZXh0VHJhY2tEaXNwbGF5Q29udGFpbmVyKQotewotICAgIHNldFBzZXVkbyhB
dG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLXRleHQtdHJhY2stY29udGFpbmVyIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6
OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgYXV0byBlbGVtZW50ID0gYWRvcHRS
ZWYoKm5ldyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KGRvY3VtZW50KSk7
Ci0gICAgZWxlbWVudC0+aGlkZSgpOwotICAgIHJldHVybiBlbGVtZW50OwotfQotCi1SZW5kZXJQ
dHI8UmVuZGVyRWxlbWVudD4gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6
Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRy
ZWVQb3NpdGlvbiYpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxv
dz4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKLX0KLQotc3RhdGljIGJvb2wgY29tcGFyZUN1ZUlu
dGVydmFsRm9yRGlzcGxheShjb25zdCBDdWVJbnRlcnZhbCYgb25lLCBjb25zdCBDdWVJbnRlcnZh
bCYgdHdvKQotewotICAgIHJldHVybiBvbmUuZGF0YSgpLT5pc1Bvc2l0aW9uZWRBYm92ZSh0d28u
ZGF0YSgpKTsKLX07Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6dXBkYXRlRGlzcGxheSgpCi17Ci0gICAgaWYgKCFtZWRpYUNvbnRyb2xsZXIoKS0+Y2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlKCkpCi0gICAgICAgIHJlbW92ZUNoaWxkcmVuKCk7Ci0KLSAgICBhdXRv
IG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKLSAgICAvLyAxLiBJZiB0
aGUgbWVkaWEgZWxlbWVudCBpcyBhbiBhdWRpbyBlbGVtZW50LCBvciBpcyBhbm90aGVyIHBsYXli
YWNrCi0gICAgLy8gbWVjaGFuaXNtIHdpdGggbm8gcmVuZGVyaW5nIGFyZWEsIGFib3J0IHRoZXNl
IHN0ZXBzLiBUaGVyZSBpcyBub3RoaW5nIHRvCi0gICAgLy8gcmVuZGVyLgotICAgIGlmICghbWVk
aWFFbGVtZW50IHx8ICFtZWRpYUVsZW1lbnQtPmlzVmlkZW8oKSB8fCBtX3ZpZGVvRGlzcGxheVNp
emUuc2l6ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gMi4gTGV0IHZp
ZGVvIGJlIHRoZSBtZWRpYSBlbGVtZW50IG9yIG90aGVyIHBsYXliYWNrIG1lY2hhbmlzbS4KLSAg
ICBIVE1MVmlkZW9FbGVtZW50JiB2aWRlbyA9IGRvd25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KCpt
ZWRpYUVsZW1lbnQpOwotCi0gICAgLy8gMy4gTGV0IG91dHB1dCBiZSBhbiBlbXB0eSBsaXN0IG9m
IGFic29sdXRlbHkgcG9zaXRpb25lZCBDU1MgYmxvY2sgYm94ZXMuCi0KLSAgICAvLyA0LiBJZiB0
aGUgdXNlciBhZ2VudCBpcyBleHBvc2luZyBhIHVzZXIgaW50ZXJmYWNlIGZvciB2aWRlbywgYWRk
IHRvCi0gICAgLy8gb3V0cHV0IG9uZSBvciBtb3JlIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQgcG9z
aXRpb25lZCBDU1MgYmxvY2sgYm94ZXMgdGhhdAotICAgIC8vIGNvdmVyIHRoZSBzYW1lIHJlZ2lv
biBhcyB0aGUgdXNlciBpbnRlcmZhY2UuCi0KLSAgICAvLyA1LiBJZiB0aGUgbGFzdCB0aW1lIHRo
ZXNlIHJ1bGVzIHdlcmUgcnVuLCB0aGUgdXNlciBhZ2VudCB3YXMgbm90IGV4cG9zaW5nCi0gICAg
Ly8gYSB1c2VyIGludGVyZmFjZSBmb3IgdmlkZW8sIGJ1dCBub3cgaXQgaXMsIGxldCByZXNldCBi
ZSB0cnVlLiBPdGhlcndpc2UsCi0gICAgLy8gbGV0IHJlc2V0IGJlIGZhbHNlLgotCi0gICAgLy8g
VGhlcmUgaXMgbm90aGluZyB0byBiZSBkb25lIGV4cGxpY2l0bHkgZm9yIDR0aCBhbmQgNXRoIHN0
ZXBzLCBhcwotICAgIC8vIGV2ZXJ5dGhpbmcgaXMgaGFuZGxlZCB0aHJvdWdoIENTUy4gVGhlIGNh
cHRpb24gYm94IGlzIG9uIHRvcCBvZiB0aGUKLSAgICAvLyBjb250cm9scyBib3gsIGluIGEgY29u
dGFpbmVyIHNldCB3aXRoIHRoZSAtd2Via2l0LWJveCBkaXNwbGF5IHByb3BlcnR5LgotCi0gICAg
Ly8gNi4gTGV0IHRyYWNrcyBiZSB0aGUgc3Vic2V0IG9mIHZpZGVvJ3MgbGlzdCBvZiB0ZXh0IHRy
YWNrcyB0aGF0IGhhdmUgYXMKLSAgICAvLyB0aGVpciBydWxlcyBmb3IgdXBkYXRpbmcgdGhlIHRl
eHQgdHJhY2sgcmVuZGVyaW5nIHRoZXNlIHJ1bGVzIGZvcgotICAgIC8vIHVwZGF0aW5nIHRoZSBk
aXNwbGF5IG9mIFdlYlZUVCB0ZXh0IHRyYWNrcywgYW5kIHdob3NlIHRleHQgdHJhY2sgbW9kZSBp
cwotICAgIC8vIHNob3dpbmcgb3Igc2hvd2luZyBieSBkZWZhdWx0LgotICAgIC8vIDcuIExldCBj
dWVzIGJlIGFuIGVtcHR5IGxpc3Qgb2YgdGV4dCB0cmFjayBjdWVzLgotICAgIC8vIDguIEZvciBl
YWNoIHRyYWNrIHRyYWNrIGluIHRyYWNrcywgYXBwZW5kIHRvIGN1ZXMgYWxsIHRoZSBjdWVzIGZy
b20KLSAgICAvLyB0cmFjaydzIGxpc3Qgb2YgY3VlcyB0aGF0IGhhdmUgdGhlaXIgdGV4dCB0cmFj
ayBjdWUgYWN0aXZlIGZsYWcgc2V0LgotICAgIEN1ZUxpc3QgYWN0aXZlQ3VlcyA9IHZpZGVvLmN1
cnJlbnRseUFjdGl2ZUN1ZXMoKTsKLQotICAgIC8vIDkuIElmIHJlc2V0IGlzIGZhbHNlLCB0aGVu
LCBmb3IgZWFjaCB0ZXh0IHRyYWNrIGN1ZSBjdWUgaW4gY3VlczogaWYgY3VlJ3MKLSAgICAvLyB0
ZXh0IHRyYWNrIGN1ZSBkaXNwbGF5IHN0YXRlIGhhcyBhIHNldCBvZiBDU1MgYm94ZXMsIHRoZW4g
YWRkIHRob3NlIGJveGVzCi0gICAgLy8gdG8gb3V0cHV0LCBhbmQgcmVtb3ZlIGN1ZSBmcm9tIGN1
ZXMuCi0KLSAgICAvLyBUaGVyZSBpcyBub3RoaW5nIGV4cGxpY2l0bHkgdG8gYmUgZG9uZSBoZXJl
LCBhcyBhbGwgdGhlIGNhY2hpbmcgb2NjdXJzCi0gICAgLy8gd2l0aGluIHRoZSBUZXh0VHJhY2tD
dWUgaW5zdGFuY2UgaXRzZWxmLiBJZiBwYXJhbWV0ZXJzIG9mIHRoZSBjdWUgY2hhbmdlLAotICAg
IC8vIHRoZSBkaXNwbGF5IHRyZWUgaXMgY2xlYXJlZC4KLQotICAgIC8vIElmIHRoZSBudW1iZXIg
b2YgQ1NTIGJveGVzIGluIHRoZSBvdXRwdXQgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgY3Vl
cwotICAgIC8vIHdlIHdpc2ggdG8gcmVuZGVyIChlLmcuLCB3ZSBhcmUgYWRkaW5nIGFub3RoZXIg
Y3VlIGluIGEgc2V0IG9mIHJvbGwtdXAKLSAgICAvLyBjdWVzKSwgcmVtb3ZlIGFsbCB0aGUgZXhp
c3RpbmcgQ1NTIGJveGVzIHJlcHJlc2VudGluZyB0aGUgY3VlcyBhbmQgcmUtYWRkCi0gICAgLy8g
dGhlbSBzbyB0aGF0IHRoZSBuZXcgY3VlIGlzIGF0IHRoZSBib3R0b20uCi0gICAgLy8gRklYTUU6
IENhbGxpbmcgY291bnRDaGlsZE5vZGVzKCkgaGVyZSBpcyBpbmVmZmljaWVudC4gV2UgZG9uJ3Qg
bmVlZCB0bwotICAgIC8vIHRyYXZlcnNlIGFsbCBjaGlsZHJlbiBqdXN0IHRvIGNoZWNrIGlmIHRo
ZXJlIGFyZSBsZXNzIGNoaWxkcmVuIHRoYW4gY3Vlcy4KLSAgICBpZiAoY291bnRDaGlsZE5vZGVz
KCkgPCBhY3RpdmVDdWVzLnNpemUoKSkKLSAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oKTsKLQotICAg
IGFjdGl2ZUN1ZXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10gKEN1ZUludGVydmFsJiBjdWVJbnRlcnZh
bCkgewotICAgICAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBjdWVJbnRlcnZhbC5kYXRh
KCk7Ci0gICAgICAgIHJldHVybiAhY3VlLT50cmFjaygpCi0gICAgICAgICAgICB8fCAhY3VlLT50
cmFjaygpLT5pc1JlbmRlcmVkKCkKLSAgICAgICAgICAgIHx8IGN1ZS0+dHJhY2soKS0+bW9kZSgp
ID09IFRleHRUcmFjazo6TW9kZTo6RGlzYWJsZWQKLSAgICAgICAgICAgIHx8ICFjdWUtPmlzQWN0
aXZlKCkKLSAgICAgICAgICAgIHx8ICFjdWUtPmlzUmVuZGVyYWJsZSgpOwotICAgIH0pOwotCi0g
ICAgLy8gU29ydCB0aGUgYWN0aXZlIGN1ZXMgZm9yIHRoZSBhcHByb3ByaWF0ZSBkaXNwbGF5IG9y
ZGVyLiBGb3IgZXhhbXBsZSwgZm9yIHJvbGwtdXAKLSAgICAvLyBvciBwYWludC1vbiBjYXB0aW9u
cywgd2UgbmVlZCB0byBhZGQgdGhlIGN1ZXMgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVy
LAotICAgIC8vIHNvIHRoYXQgdGhlIG5ld2VzdCBjYXB0aW9ucyBhcHBlYXIgYXQgdGhlIGJvdHRv
bS4KLSAgICBzdGQ6OnNvcnQoYWN0aXZlQ3Vlcy5iZWdpbigpLCBhY3RpdmVDdWVzLmVuZCgpLCAm
Y29tcGFyZUN1ZUludGVydmFsRm9yRGlzcGxheSk7Ci0KLSAgICBpZiAobWVkaWFDb250cm9sbGVy
KCktPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpKSB7Ci0gICAgICAgIC8vIDEwLiBGb3IgZWFjaCB0
ZXh0IHRyYWNrIGN1ZSBpbiBjdWVzIHRoYXQgaGFzIG5vdCB5ZXQgaGFkCi0gICAgICAgIC8vIGNv
cnJlc3BvbmRpbmcgQ1NTIGJveGVzIGFkZGVkIHRvIG91dHB1dCwgaW4gdGV4dCB0cmFjayBjdWUg
b3JkZXIsIHJ1biB0aGUKLSAgICAgICAgLy8gZm9sbG93aW5nIHN1YnN0ZXBzOgotICAgICAgICBm
b3IgKGF1dG8mIGludGVydmFsIDogYWN0aXZlQ3VlcykgewotICAgICAgICAgICAgYXV0byBjdWUg
PSBpbnRlcnZhbC5kYXRhKCk7Ci0gICAgICAgICAgICBjdWUtPnNldEZvbnRTaXplKG1fZm9udFNp
emUsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCksIG1fZm9udFNpemVJc0ltcG9ydGFudCk7Ci0g
ICAgICAgICAgICBpZiAoaXM8VlRUQ3VlPigqY3VlKSkKLSAgICAgICAgICAgICAgICBwcm9jZXNz
QWN0aXZlVlRUQ3VlKGRvd25jYXN0PFZUVEN1ZT4oKmN1ZSkpOwotICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBkaXNwbGF5Qm94ID0gY3VlLT5nZXREaXNwbGF5VHJlZSht
X3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplKTsKLSAgICAgICAgICAgICAgICBp
ZiAoZGlzcGxheUJveC0+aGFzQ2hpbGROb2RlcygpICYmICFjb250YWlucyhkaXNwbGF5Qm94Lmdl
dCgpKSkKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ2hpbGQoKmRpc3BsYXlCb3gpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gMTEuIFJldHVybiBvdXRwdXQu
Ci0gICAgaWYgKGhhc0NoaWxkTm9kZXMoKSkKLSAgICAgICAgc2hvdygpOwotICAgIGVsc2UKLSAg
ICAgICAgaGlkZSgpOwotCi0gICAgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRl
ZCgpOwotICAgIHVwZGF0ZVRleHRUcmFja1N0eWxlKCk7Ci0gICAgbV9uZWVkc0dlbmVyYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24gPSB0cnVlOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJ
Zk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX25lZWRzR2VuZXJhdGVUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZWVkc0dlbmVyYXRlVGV4dFRyYWNrUmVw
cmVzZW50YXRpb24gPSBmYWxzZTsKLQotICAgIC8vIFdlIHNob3VsZCBjYWxsIG1fdGV4dFRyYWNr
UmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpIHRvIHBhaW50IHRoZSBzdWJ0cmVlIG9mCi0gICAgLy8g
dGhlIFJlbmRlclRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQgYWZ0ZXIgdGhlIGxheW91dCBpcyBj
bGVhbi4KLSAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikKLSAgICAgICAgbV90ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbi0+dXBkYXRlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6cHJvY2Vzc0FjdGl2ZVZUVEN1ZShWVFRDdWUmIGN1ZSkK
LXsKLSAgICBERUJVR19MT0coTE9HSURFTlRJRklFUiwgImFkZGluZyBhbmQgcG9zaXRpb25pbmcg
Y3VlOiBcIiIsIGN1ZS50ZXh0KCksICJcIiwgc3RhcnQ9IiwgY3VlLnN0YXJ0VGltZSgpLCAiLCBl
bmQ9IiwgY3VlLmVuZFRpbWUoKSwgIiwgbGluZT0iLCBjdWUubGluZSgpKTsKLSAgICBSZWY8VGV4
dFRyYWNrQ3VlQm94PiBkaXNwbGF5Qm94ID0gKmN1ZS5nZXREaXNwbGF5VHJlZShtX3ZpZGVvRGlz
cGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplKTsKLQotICAgIGlmIChhdXRvIHJlZ2lvbiA9IGN1
ZS50cmFjaygpLT5yZWdpb25zKCktPmdldFJlZ2lvbkJ5SWQoY3VlLnJlZ2lvbklkKCkpKSB7Ci0g
ICAgICAgIC8vIExldCByZWdpb24gYmUgdGhlIFdlYlZUVCByZWdpb24gd2hvc2UgcmVnaW9uIGlk
ZW50aWZpZXIKLSAgICAgICAgLy8gbWF0Y2hlcyB0aGUgdGV4dCB0cmFjayBjdWUgcmVnaW9uIGlk
ZW50aWZpZXIgb2YgY3VlLgotICAgICAgICBSZWY8SFRNTERpdkVsZW1lbnQ+IHJlZ2lvbk5vZGUg
PSByZWdpb24tPmdldERpc3BsYXlUcmVlKCk7Ci0KLSAgICAgICAgaWYgKCFjb250YWlucyhyZWdp
b25Ob2RlLnB0cigpKSkKLSAgICAgICAgICAgIGFwcGVuZENoaWxkKHJlZ2lvbi0+Z2V0RGlzcGxh
eVRyZWUoKSk7Ci0KLSAgICAgICAgcmVnaW9uLT5hcHBlbmRUZXh0VHJhY2tDdWVCb3goV1RGTW92
ZShkaXNwbGF5Qm94KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgY3VlIGhhcyBhbiBl
bXB0eSB0ZXh0IHRyYWNrIGN1ZSByZWdpb24gaWRlbnRpZmllciBvciB0aGVyZSBpcyBubwotICAg
ICAgICAvLyBXZWJWVFQgcmVnaW9uIHdob3NlIHJlZ2lvbiBpZGVudGlmaWVyIGlzIGlkZW50aWNh
bCB0byBjdWUncyB0ZXh0Ci0gICAgICAgIC8vIHRyYWNrIGN1ZSByZWdpb24gaWRlbnRpZmllciwg
cnVuIHRoZSBmb2xsb3dpbmcgc3Vic3RlcHM6Ci0gICAgICAgIGlmIChkaXNwbGF5Qm94LT5oYXND
aGlsZE5vZGVzKCkgJiYgIWNvbnRhaW5zKGRpc3BsYXlCb3gucHRyKCkpKSB7Ci0gICAgICAgICAg
ICAvLyBOb3RlOiB0aGUgZGlzcGxheSB0cmVlIG9mIGEgY3VlIGlzIHJlbW92ZWQgd2hlbiB0aGUg
YWN0aXZlIGZsYWcgb2YgdGhlIGN1ZSBpcyB1bnNldC4KLSAgICAgICAgICAgIGFwcGVuZENoaWxk
KGRpc3BsYXlCb3gpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZUFjdGl2ZUN1ZXNGb250U2l6ZSgpCi17Ci0g
ICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBt
ZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0gICAgaWYgKCFtZWRpYUVs
ZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHNtYWxsZXN0RGltZW5zaW9uID0g
c3RkOjptaW4obV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWlnaHQoKSwgbV92aWRlb0Rpc3Bs
YXlTaXplLnNpemUoKS53aWR0aCgpKTsKLSAgICBmbG9hdCBmb250U2NhbGUgPSBkb2N1bWVudCgp
LnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5jYXB0aW9uRm9udFNpemVTY2Fs
ZUFuZEltcG9ydGFuY2UobV9mb250U2l6ZUlzSW1wb3J0YW50KTsKLSAgICBtX2ZvbnRTaXplID0g
bHJvdW5kZihzbWFsbGVzdERpbWVuc2lvbiAqIGZvbnRTY2FsZSk7Ci0KLSAgICBmb3IgKGF1dG8m
IGFjdGl2ZUN1ZSA6IG1lZGlhRWxlbWVudC0+Y3VycmVudGx5QWN0aXZlQ3VlcygpKSB7Ci0gICAg
ICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9IGFjdGl2ZUN1ZS5kYXRhKCk7Ci0gICAgICAg
IGlmIChjdWUtPmlzUmVuZGVyYWJsZSgpKQotICAgICAgICAgICAgY3VlLT5zZXRGb250U2l6ZSht
X2ZvbnRTaXplLCBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplSXNJbXBvcnRh
bnQpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50Ojp1cGRhdGVUZXh0U3Ryb2tlU3R5bGUoKQotewotICAgIGlmICghZG9jdW1lbnQoKS5wYWdl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVk
aWFFbGVtZW50KHRoaXMpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgU3RyaW5nIGxhbmd1YWdlOwotCi0gICAgLy8gRklYTUU6IFNpbmNlIGl0IGlz
IHBvc3NpYmxlIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSB0ZXh0IHRyYWNrIGVuYWJsZWQsIHRoZSBm
b2xsb3dpbmcgY29kZSBtYXkgbm90IGZpbmQgdGhlIGNvcnJlY3QgbGFuZ3VhZ2UuCi0gICAgLy8g
VGhlIGRlZmF1bHQgVUkgb25seSBhbGxvd3MgYSB1c2VyIHRvIGVuYWJsZSBvbmUgdHJhY2sgYXQg
YSB0aW1lLCBzbyBpdCBzaG91bGQgYmUgT0sgZm9yIG5vdywgYnV0IHdlIHNob3VsZCBjb25zaWRl
ciBkb2luZwotICAgIC8vIHRoaXMgZGlmZmVyZW50bHksIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTg3NT4uCi0gICAgaWYgKGF1dG8qIHRyYWNrcyA9IG1l
ZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0cmFja3MtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8gdHJhY2sgPSB0
cmFja3MtPml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAodHJhY2sgJiYgdHJhY2stPm1vZGUoKSA9
PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKLSAgICAgICAgICAgICAgICBsYW5ndWFnZSA9
IHRyYWNrLT52YWxpZEJDUDQ3TGFuZ3VhZ2UoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZsb2F0IHN0cm9rZVdpZHRoOwot
ICAgIGJvb2wgaW1wb3J0YW50OwotCi0gICAgLy8gRklYTUU6IGZpbmQgYSB3YXkgdG8gc2V0IHRo
aXMgcHJvcGVydHkgaW4gdGhlIHN0eWxlc2hlZXQgbGlrZSB0aGUgb3RoZXIgdXNlciBzdHlsZSBw
cmVmZXJlbmNlcywgc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY5ODc0Pi4KLSAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZl
cmVuY2VzKCkuY2FwdGlvblN0cm9rZVdpZHRoRm9yRm9udChtX2ZvbnRTaXplLCBsYW5ndWFnZSwg
c3Ryb2tlV2lkdGgsIGltcG9ydGFudCkpCi0gICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlTdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgsIENTU1VuaXRUeXBlOjpDU1NfUFgs
IGltcG9ydGFudCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxl
bWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpCi17Ci0gICAgYXV0
byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0gICAgaWYgKCFtZWRp
YUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVxdWlyZXNUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbiA9IG1lZGlhRWxlbWVudC0+cmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbigpOwotICAgIGlmICghaGFzQ2hpbGROb2RlcygpIHx8ICFyZXF1aXJlc1RleHRUcmFja1Jl
cHJlc2VudGF0aW9uKSB7Ci0gICAgICAgIGlmIChtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uKSB7
Ci0gICAgICAgICAgICBpZiAoIXJlcXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCi0gICAg
ICAgICAgICAgICAgY2xlYXJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNldEhpZGRl
bih0cnVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFt
X3RleHRUcmFja1JlcHJlc2VudGF0aW9uKSB7Ci0gICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJ
RklFUik7Ci0KLSAgICAgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IFRleHRUcmFja1Jl
cHJlc2VudGF0aW9uOjpjcmVhdGUoKnRoaXMpOwotICAgICAgICBpZiAoZG9jdW1lbnQoKS5wYWdl
KCkpCi0gICAgICAgICAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT5zZXRDb250ZW50U2Nh
bGUoZG9jdW1lbnQoKS5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICBtZWRp
YUVsZW1lbnQtPnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKG1fdGV4dFRyYWNrUmVwcmVzZW50
YXRpb24uZ2V0KCkpOwotICAgIH0KLQotICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNl
dEhpZGRlbihmYWxzZSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6Y2xlYXJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpCi17Ci0gICAgaWYgKCFtX3Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBTFdBWVNfTE9H
KExPR0lERU5USUZJRVIpOwotCi0gICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IG51bGxw
dHI7Ci0gICAgaWYgKGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHRoaXMp
KQotICAgICAgICBtZWRpYUVsZW1lbnQtPnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKG51bGxw
dHIpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVw
ZGF0ZVRleHRUcmFja1N0eWxlKCkKLXsKLSAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlv
bikgewotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24s
IENTU1ZhbHVlQWJzb2x1dGUpOwotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5V2lkdGgsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkud2lkdGgoKSwgQ1NTVW5pdFR5
cGU6OkNTU19QWCk7Ci0gICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlI
ZWlnaHQsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkuaGVpZ2h0KCksIENTU1VuaXRUeXBlOjpD
U1NfUFgpOwotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwg
MCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlUb3AsIDAsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0
aW9uKTsKLSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgpOwot
ICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQpOwotICAgIHJl
bW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0KTsKLSAgICByZW1vdmVJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjplbnRlcmVkRnVsbHNjcmVlbigpCi17Ci0gICAgdXBk
YXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOwotICAgIHVwZGF0ZVNpemVzKEZv
cmNlVXBkYXRlOjpZZXMpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OmV4aXRlZEZ1bGxzY3JlZW4oKQotewotICAgIGNsZWFyVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24oKTsKLSAgICB1cGRhdGVTaXplcyhGb3JjZVVwZGF0ZTo6WWVzKTsKLX0KLQotYm9v
bCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVWaWRlb0Rpc3Bs
YXlTaXplKCkKLXsKLSAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlz
KTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
SW50UmVjdCB2aWRlb0JveDsKLSAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgewot
ICAgICAgICB2aWRlb0JveCA9IG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPmJvdW5kcygpOwot
ICAgICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IGRvY3VtZW50KCkucGFnZSgpLT5kZXZp
Y2VTY2FsZUZhY3RvcigpOwotICAgICAgICB2aWRlb0JveC5zZXRXaWR0aCh2aWRlb0JveC53aWR0
aCgpICogZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgICAgICB2aWRlb0JveC5zZXRIZWlnaHQodmlk
ZW9Cb3guaGVpZ2h0KCkgKiBkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKCFpczxSZW5kZXJWaWRlbz4obWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmlkZW9Cb3ggPSBkb3duY2FzdDxSZW5kZXJW
aWRlbz4oKm1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSkudmlkZW9Cb3goKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV92aWRlb0Rpc3BsYXlTaXplID09IHZpZGVvQm94KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBtX3ZpZGVvRGlzcGxheVNpemUgPSB2aWRlb0JveDsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRh
dGVTaXplcyhGb3JjZVVwZGF0ZSBmb3JjZSkKLXsKLSAgICBpZiAoIXVwZGF0ZVZpZGVvRGlzcGxh
eVNpemUoKSAmJiBmb3JjZSAhPSBGb3JjZVVwZGF0ZTo6WWVzKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
IG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKLSAgICBpZiAoIW1lZGlh
RWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFFbGVtZW50LT5zeW5jVGV4dFRy
YWNrQm91bmRzKCk7Ci0KLSAgICB1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKTsKLSAgICB1cGRh
dGVUZXh0U3Ryb2tlU3R5bGUoKTsKLSAgICBmb3IgKGF1dG8mIGFjdGl2ZUN1ZSA6IG1lZGlhRWxl
bWVudC0+Y3VycmVudGx5QWN0aXZlQ3VlcygpKQotICAgICAgICBhY3RpdmVDdWUuZGF0YSgpLT5y
ZWNhbGN1bGF0ZVN0eWxlcygpOwotCi0gICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNd
ICgpIHsKLSAgICAgICAgdXBkYXRlRGlzcGxheSgpOwotICAgIH0pOwotfQotCi1SZWZQdHI8SW1h
Z2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFj
a1JlcHJlc2VudGF0aW9uSW1hZ2UoKQotewotICAgIGlmICghaGFzQ2hpbGROb2RlcygpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBkb2N1bWVu
dCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwotCi0gICAgYXV0byogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgaWYgKCFyZW5kZXJlci0+aGFzTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1v
ZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7Ci0KLSAgICBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvciA9IDE7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAg
ICAgZGV2aWNlU2NhbGVGYWN0b3IgPSBwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotCi0gICAg
SW50UmVjdCBwYWludGluZ1JlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5zaXplKCkp
OwotCi0gICAgLy8gRklYTUUgKDE0OTQyMik6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5j
b25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3RvcikpOwotICAgIGlmICgh
YnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcGFpbnRGbGFncyA9
IFJlbmRlckxheWVyOjpwYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ0FsbFBoYXNlc0ZsYWdz
KCk7Ci0gICAgcGFpbnRGbGFncy5hZGQoUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJUZW1wb3JhcnlD
bGlwUmVjdHMpOwotICAgIGxheWVyLT5wYWludChidWZmZXItPmNvbnRleHQoKSwgcGFpbnRpbmdS
ZWN0LCBMYXlvdXRTaXplKCksIHsgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5
ZXJzLCBQYWludEJlaGF2aW9yOjpTbmFwc2hvdHRpbmcgfSwgbnVsbHB0ciwgcGFpbnRGbGFncyk7
Ci0KLSAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShidWZmZXIp
KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp0ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQoY29uc3QgSW50UmVjdCYpCi17Ci0gICAg
dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOwotICAgIHVwZGF0ZVNpemVz
KCk7Ci19Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLWNvbnN0IExvZ2dlciYgTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nZ2VyKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fbG9nZ2VyKQotICAgICAgICBtX2xvZ2dlciA9ICZkb2N1bWVudCgpLmxvZ2dlcigpOwot
Ci0gICAgcmV0dXJuICptX2xvZ2dlcjsKLX0KLQotY29uc3Qgdm9pZCogTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nSWRlbnRpZmllcigpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2xvZ0lkZW50aWZpZXIpIHsKLSAgICAgICAgaWYgKGF1dG8gbWVkaWFFbGVtZW50ID0gcGFy
ZW50TWVkaWFFbGVtZW50KHRoaXMpKQotICAgICAgICAgICAgbV9sb2dJZGVudGlmaWVyID0gbWVk
aWFFbGVtZW50LT5sb2dJZGVudGlmaWVyKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fbG9nSWRl
bnRpZmllcjsKLX0KLQotV1RGTG9nQ2hhbm5lbCYgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudDo6bG9nQ2hhbm5lbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIExvZ01lZGlhOwot
fQotI2VuZGlmIC8vICFSRUxFQVNFX0xPR19ESVNBQkxFRAotCi0jZW5kaWYgLy8gRU5BQkxFKFZJ
REVPX1RSQUNLKQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3NmIxNGQ2ZjUyYmU2YTBlNzM4MTkxNzI5M2Q1Mzc3OWJjZjkxZDky
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw1MzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRl
ICJHZW5lcmljVGFza1F1ZXVlLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudFR5cGVz
LmgiCi0jaW5jbHVkZSAiVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uaCIKLSNpbmNsdWRlIDx3dGYv
TG9nZ2VySGVscGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQgZmluYWwg
OiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9D
QVRFRChNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
TWVkaWFDb250cm9sUGFuZWxFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQg
c2V0Q2FuQmVEcmFnZ2VkKGJvb2wpOwotICAgIHZvaWQgc2V0SXNEaXNwbGF5ZWQoYm9vbCk7Ci0K
LSAgICB2b2lkIHJlc2V0UG9zaXRpb24oKTsKLSAgICB2b2lkIG1ha2VPcGFxdWUoKTsKLSAgICB2
b2lkIG1ha2VUcmFuc3BhcmVudCgpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
Ym9vbCB3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNv
bnRyb2xQYW5lbEVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzdGFydERyYWcoY29uc3QgTGF5b3V0
UG9pbnQmIGV2ZW50TG9jYXRpb24pOwotICAgIHZvaWQgY29udGludWVEcmFnKGNvbnN0IExheW91
dFBvaW50JiBldmVudExvY2F0aW9uKTsKLSAgICB2b2lkIGVuZERyYWcoKTsKLQotICAgIHZvaWQg
c3RhcnRUaW1lcigpOwotICAgIHZvaWQgc3RvcFRpbWVyKCk7Ci0gICAgdm9pZCB0cmFuc2l0aW9u
VGltZXJGaXJlZCgpOwotCi0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBMYXlvdXRQb2ludCYp
OwotCi0gICAgYm9vbCBtX2NhbkJlRHJhZ2dlZDsKLSAgICBib29sIG1faXNCZWluZ0RyYWdnZWQ7
Ci0gICAgYm9vbCBtX2lzRGlzcGxheWVkOwotICAgIGJvb2wgbV9vcGFxdWU7Ci0gICAgTGF5b3V0
UG9pbnQgbV9sYXN0RHJhZ0V2ZW50TG9jYXRpb247Ci0gICAgTGF5b3V0UG9pbnQgbV9jdW11bGF0
aXZlRHJhZ09mZnNldDsKLQotICAgIFRpbWVyIG1fdHJhbnNpdGlvblRpbWVyOwotfTsKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xQYW5lbEVu
Y2xvc3VyZUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0g
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVsZW1l
bnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVF
bGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRp
YUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVsZW1lbnQoRG9jdW1lbnQmKTsKLX07Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sT3ZlcmxheUVuY2xv
c3VyZUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xPdmVybGF5RW5jbG9zdXJlRWxlbWVu
dCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xPdmVybGF5RW5jbG9zdXJl
RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVk
aWFDb250cm9sT3ZlcmxheUVuY2xvc3VyZUVsZW1lbnQoRG9jdW1lbnQmKTsKLX07Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sVGltZWxpbmVD
b250YWluZXJFbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgewot
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJF
bGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFRpbWVsaW5lQ29u
dGFpbmVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIHNldFRpbWVEaXNw
bGF5c0hpZGRlbihib29sKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIFJlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVu
ZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1l
bnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KTsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5l
ckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci0KLSAgICBSZW5kZXJQdHI8UmVuZGVy
RWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRl
clRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudCBmaW5hbCA6
IHB1YmxpYyBNZWRpYUNvbnRyb2xEaXZFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEKE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQm
KTsKLQotICAgIHZvaWQgdXBkYXRlKCk7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFD
b250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIGVudW0gU3RhdGVC
ZWluZ0Rpc3BsYXllZCB7IE5vdGhpbmcsIExvYWRpbmcsIExpdmVCcm9hZGNhc3QgfTsKLSAgICBT
dGF0ZUJlaW5nRGlzcGxheWVkIG1fc3RhdGVCZWluZ0Rpc3BsYXllZDsKLX07Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0
dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudCB7
Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25F
bGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1
dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYsIE1lZGlhQ29udHJvbHMqKTsKLQotI2lmICFQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50
cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmLCBNZWRp
YUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVy
cmlkZTsKLQotICAgIE1lZGlhQ29udHJvbHMqIG1fY29udHJvbHM7Ci19OwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11
dGVCdXR0b25FbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVt
ZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFZvbHVtZVNsaWRl
ck11dGVCdXR0b25FbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxl
bWVudChEb2N1bWVudCYpOwotfTsKLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLWNsYXNzIE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50IGZpbmFsIDogcHVibGljIE1l
ZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRp
YUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRp
YUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRz
KCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHVwZGF0ZURp
c3BsYXlUeXBlKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250
cm9sUGxheUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQgZmlu
YWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKE1lZGlhQ29udHJvbE92ZXJsYXlQbGF5QnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQ+IGNy
ZWF0ZShEb2N1bWVudCYpOwotCi0gICAgdm9pZCB1cGRhdGVEaXNwbGF5VHlwZSgpIG92ZXJyaWRl
OwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbE92ZXJsYXlQbGF5QnV0dG9u
RWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNs
YXNzIE1lZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBN
ZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChNZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8TWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50PiBjcmVhdGUoRG9j
dW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xTZWVrRm9yd2Fy
ZEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIGJvb2wgaXNGb3J3YXJkQnV0dG9uKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQg
ZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQgewotICAgIFdURl9N
QUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50KTsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9s
U2Vla0JhY2tCdXR0b25FbGVtZW50KERvY3VtZW50Jik7Ci0KLSAgICBib29sIGlzRm9yd2FyZEJ1
dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci19OwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQpOwotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudD4gY3Jl
YXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdp
bGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQot
I2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sUmV3aW5kQnV0dG9u
RWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNs
YXNzIE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50IGZpbmFsIDogcHVi
bGljIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29s
IHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sUmV0dXJuVG9S
ZWFsdGltZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9u
RWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYsIE1lZGlhQ29udHJvbHMq
KTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01v
dXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotICAg
IHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBleHBs
aWNpdCBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQoRG9jdW1l
bnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQmKSBvdmVycmlkZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShXSU4pIHx8
IFBMQVRGT1JNKEdUSykKLSAgICBNZWRpYUNvbnRyb2xzKiBtX2NvbnRyb2xzOwotI2VuZGlmCi19
OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJv
bENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRy
b2xEaXZFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbENs
b3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxN
ZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVu
dCYpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9uZFRv
TW91c2VDbGlja0V2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi1w
cml2YXRlOgotICAgIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudChE
b2N1bWVudCYpOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFz
cyBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQgZmluYWwgOiBwdWJs
aWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChN
ZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQpOwotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50PiBj
cmVhdGUoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHVwZGF0ZURpc3BsYXkoKTsKLQot
cHJpdmF0ZToKLSAgICBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQo
RG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIHJlYnVpbGRUcmFja0xpc3RN
ZW51KCk7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsK
LQotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4gVHJhY2tNZW51SXRlbXM7Ci0g
ICAgVHJhY2tNZW51SXRlbXMgbV9tZW51SXRlbXM7Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQot
ICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxUZXh0VHJhY2s+PiBN
ZW51SXRlbVRvVHJhY2tNYXA7Ci0gICAgTWVudUl0ZW1Ub1RyYWNrTWFwIG1fbWVudVRvVHJhY2tN
YXA7Ci0jZW5kaWYKLSAgICBNZWRpYUNvbnRyb2xzKiBtX2NvbnRyb2xzOwotfTsKLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xUaW1lbGluZUVs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudCk7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IGNyZWF0ZShEb2N1
bWVudCYsIE1lZGlhQ29udHJvbHMqKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZTsKLSNlbmRpZgot
Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihkb3VibGUpOwotICAgIHZvaWQgc2V0RHVyYXRpb24oZG91
YmxlKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1l
bnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIE1lZGlhQ29udHJvbHMqIG1fY29udHJvbHM7
Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbElu
cHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuQnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRz
KCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHNldElzRnVs
bHNjcmVlbihib29sKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuQnV0dG9uRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudCBmaW5h
bCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50IHsKLSAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudCk7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1l
bnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29u
dHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYpOwotfTsKLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVt
ZVNsaWRlckVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxl
bWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xGdWxsc2NyZWVu
Vm9sdW1lU2xpZGVyRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLXBy
aXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZVNsaWRlckVs
ZW1lbnQoRG9jdW1lbnQmKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotY2xhc3MgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1dHRvbkVsZW1lbnQgZmlu
YWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50KTsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5C
dXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9uRWxlbWVudChEb2N1bWVudCYpOwotICAgIHZv
aWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9s
dW1lTWF4QnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sRnVsbHNjcmVlblZv
bHVtZU1heEJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250
cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwot
Ci0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VD
bGlja0V2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi1wcml2YXRl
OgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVt
ZW50KERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBv
dmVycmlkZTsKLX07Ci0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFz
cyBNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQgZmluYWwgOiBwdWJsaWMg
TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEKE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudCk7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQ+IGNy
ZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbFRp
bWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudChEb2N1bWVudCYpOwotfTsKLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3Bs
YXlFbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudCB7
Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3Bs
YXlFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbEN1cnJlbnRU
aW1lRGlzcGxheUVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmKTsK
LX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIEVOQUJMRShWSURF
T19UUkFDSykKLQotY2xhc3MgVlRUQ3VlOwotCi1jbGFzcyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50IGZpbmFsCi0gICAgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVu
dAotICAgICwgcHVibGljIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50Ci0jaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECi0gICAgLCBwcml2YXRlIExvZ2dlckhlbHBlcgotI2VuZGlmCi17Ci0g
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi0gICAgZW51bSBjbGFzcyBGb3Jj
ZVVwZGF0ZSB7IFllcywgTm8gfTsKLSAgICB2b2lkIHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlIGZv
cmNlID0gRm9yY2VVcGRhdGU6Ok5vKTsKLSAgICB2b2lkIHVwZGF0ZURpc3BsYXkoKTsKLQotICAg
IHZvaWQgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKCk7Ci0KLSAg
ICB2b2lkIGVudGVyZWRGdWxsc2NyZWVuKCk7Ci0gICAgdm9pZCBleGl0ZWRGdWxsc2NyZWVuKCk7
Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgLy8gRWxlbWVudAotICAgIFJlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVu
ZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkNsaWVudAotICAgIFJlZlB0cjxJbWFnZT4gY3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25JbWFnZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgdGV4dFRyYWNrUmVwcmVzZW50YXRpb25Cb3Vu
ZHNDaGFuZ2VkKGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdXBkYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOwotICAgIHZvaWQgY2xlYXJUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbigpOwotCi0gICAgYm9vbCB1cGRhdGVWaWRlb0Rpc3BsYXlTaXplKCk7Ci0g
ICAgdm9pZCB1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKTsKLSAgICB2b2lkIHVwZGF0ZVRleHRT
dHJva2VTdHlsZSgpOwotICAgIHZvaWQgcHJvY2Vzc0FjdGl2ZVZUVEN1ZShWVFRDdWUmKTsKLSAg
ICB2b2lkIHVwZGF0ZVRleHRUcmFja1N0eWxlKCk7Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJM
RUQKLSAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsOwotICAgIGNvbnN0IHZv
aWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbDsKLSAgICBXVEZMb2dDaGFubmVsJiBsb2dD
aGFubmVsKCkgY29uc3QgZmluYWw7Ci0gICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIk1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQi
OyB9Ci0gICAgbXV0YWJsZSBSZWZQdHI8TG9nZ2VyPiBtX2xvZ2dlcjsKLSAgICBtdXRhYmxlIGNv
bnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsKLSNlbmRpZgotCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFRleHRUcmFja1JlcHJlc2VudGF0aW9uPiBtX3RleHRUcmFja1JlcHJlc2Vu
dGF0aW9uOwotCi0gICAgR2VuZXJpY1Rhc2tRdWV1ZTxUaW1lcj4gbV90YXNrUXVldWU7Ci0gICAg
SW50UmVjdCBtX3ZpZGVvRGlzcGxheVNpemU7Ci0gICAgaW50IG1fZm9udFNpemUgeyAwIH07Ci0g
ICAgYm9vbCBtX2ZvbnRTaXplSXNJbXBvcnRhbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9uZWVk
c0dlbmVyYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24geyBmYWxzZSB9OwotfTsKLQotI2VuZGlm
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmMxZGViY2Vl
MmY2M2RmNjdkMTQzNDYyNzIyNzUzMmQ2MDY1Y2I3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQuY3BwCkBAIC0wLDAgKzEsNDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oIgorCisjaWYgRU5BQkxFKFZJREVPKQor
CisjaW5jbHVkZSAiRE9NVG9rZW5MaXN0LmgiCisjaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGdWxsc2NyZWVuTWFuYWdlci5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUE9ESW50ZXJ2YWwuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNp
bmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJT
dHlsZVByb3BlcnRpZXMuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWVHZW5lcmljLmgiCisjaW5j
bHVkZSAiVGV4dFRyYWNrTGlzdC5oIgorI2luY2x1ZGUgIlZUVFJlZ2lvbkxpc3QuaCIKKyNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9MYW5ndWFnZS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KTsKKwordXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworUmVmPE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIEhUTUxNZWRpYUVsZW1lbnQmIG1lZGlh
RWxlbWVudCkKK3sKKyAgICBhdXRvIGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQoZG9jdW1lbnQsIG1lZGlhRWxlbWVudCkpOworICAg
IGVsZW1lbnQtPmhpZGUoKTsKKyAgICByZXR1cm4gZWxlbWVudDsKK30KKworTWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCisg
ICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIGRvY3VtZW50KQorICAgICwgbV9tZWRpYUVsZW1l
bnQobWFrZVdlYWtQdHIoJmVsZW1lbnQpKQoreworICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCIt
d2Via2l0LW1lZGlhLXRleHQtdHJhY2stY29udGFpbmVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpKTsKK30KKworUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJT
dHlsZSYmIHN0eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKQoreworICAgIHJldHVybiBj
cmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7Cit9
CisKK3N0YXRpYyBib29sIGNvbXBhcmVDdWVJbnRlcnZhbEZvckRpc3BsYXkoY29uc3QgQ3VlSW50
ZXJ2YWwmIG9uZSwgY29uc3QgQ3VlSW50ZXJ2YWwmIHR3bykKK3sKKyAgICByZXR1cm4gb25lLmRh
dGEoKS0+aXNQb3NpdGlvbmVkQWJvdmUodHdvLmRhdGEoKSk7Cit9OworCit2b2lkIE1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZURpc3BsYXkoKQoreworICAgIGlm
IChtX21lZGlhRWxlbWVudCAmJiAhbV9tZWRpYUVsZW1lbnQtPmNsb3NlZENhcHRpb25zVmlzaWJs
ZSgpKQorICAgICAgICByZW1vdmVDaGlsZHJlbigpOworCisgICAgLy8gMS4gSWYgdGhlIG1lZGlh
IGVsZW1lbnQgaXMgYW4gYXVkaW8gZWxlbWVudCwgb3IgaXMgYW5vdGhlciBwbGF5YmFjaworICAg
IC8vIG1lY2hhbmlzbSB3aXRoIG5vIHJlbmRlcmluZyBhcmVhLCBhYm9ydCB0aGVzZSBzdGVwcy4g
VGhlcmUgaXMgbm90aGluZyB0bworICAgIC8vIHJlbmRlci4KKyAgICBpZiAoIW1fbWVkaWFFbGVt
ZW50IHx8ICFtX21lZGlhRWxlbWVudC0+aXNWaWRlbygpIHx8IG1fdmlkZW9EaXNwbGF5U2l6ZS5z
aXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyAyLiBMZXQgdmlkZW8g
YmUgdGhlIG1lZGlhIGVsZW1lbnQgb3Igb3RoZXIgcGxheWJhY2sgbWVjaGFuaXNtLgorICAgIEhU
TUxWaWRlb0VsZW1lbnQmIHZpZGVvID0gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4oKm1fbWVk
aWFFbGVtZW50KTsKKworICAgIC8vIDMuIExldCBvdXRwdXQgYmUgYW4gZW1wdHkgbGlzdCBvZiBh
YnNvbHV0ZWx5IHBvc2l0aW9uZWQgQ1NTIGJsb2NrIGJveGVzLgorCisgICAgLy8gNC4gSWYgdGhl
IHVzZXIgYWdlbnQgaXMgZXhwb3NpbmcgYSB1c2VyIGludGVyZmFjZSBmb3IgdmlkZW8sIGFkZCB0
bworICAgIC8vIG91dHB1dCBvbmUgb3IgbW9yZSBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IHBvc2l0
aW9uZWQgQ1NTIGJsb2NrIGJveGVzIHRoYXQKKyAgICAvLyBjb3ZlciB0aGUgc2FtZSByZWdpb24g
YXMgdGhlIHVzZXIgaW50ZXJmYWNlLgorCisgICAgLy8gNS4gSWYgdGhlIGxhc3QgdGltZSB0aGVz
ZSBydWxlcyB3ZXJlIHJ1biwgdGhlIHVzZXIgYWdlbnQgd2FzIG5vdCBleHBvc2luZworICAgIC8v
IGEgdXNlciBpbnRlcmZhY2UgZm9yIHZpZGVvLCBidXQgbm93IGl0IGlzLCBsZXQgcmVzZXQgYmUg
dHJ1ZS4gT3RoZXJ3aXNlLAorICAgIC8vIGxldCByZXNldCBiZSBmYWxzZS4KKworICAgIC8vIFRo
ZXJlIGlzIG5vdGhpbmcgdG8gYmUgZG9uZSBleHBsaWNpdGx5IGZvciA0dGggYW5kIDV0aCBzdGVw
cywgYXMKKyAgICAvLyBldmVyeXRoaW5nIGlzIGhhbmRsZWQgdGhyb3VnaCBDU1MuIFRoZSBjYXB0
aW9uIGJveCBpcyBvbiB0b3Agb2YgdGhlCisgICAgLy8gY29udHJvbHMgYm94LCBpbiBhIGNvbnRh
aW5lciBzZXQgd2l0aCB0aGUgLXdlYmtpdC1ib3ggZGlzcGxheSBwcm9wZXJ0eS4KKworICAgIC8v
IDYuIExldCB0cmFja3MgYmUgdGhlIHN1YnNldCBvZiB2aWRlbydzIGxpc3Qgb2YgdGV4dCB0cmFj
a3MgdGhhdCBoYXZlIGFzCisgICAgLy8gdGhlaXIgcnVsZXMgZm9yIHVwZGF0aW5nIHRoZSB0ZXh0
IHRyYWNrIHJlbmRlcmluZyB0aGVzZSBydWxlcyBmb3IKKyAgICAvLyB1cGRhdGluZyB0aGUgZGlz
cGxheSBvZiBXZWJWVFQgdGV4dCB0cmFja3MsIGFuZCB3aG9zZSB0ZXh0IHRyYWNrIG1vZGUgaXMK
KyAgICAvLyBzaG93aW5nIG9yIHNob3dpbmcgYnkgZGVmYXVsdC4KKyAgICAvLyA3LiBMZXQgY3Vl
cyBiZSBhbiBlbXB0eSBsaXN0IG9mIHRleHQgdHJhY2sgY3Vlcy4KKyAgICAvLyA4LiBGb3IgZWFj
aCB0cmFjayB0cmFjayBpbiB0cmFja3MsIGFwcGVuZCB0byBjdWVzIGFsbCB0aGUgY3VlcyBmcm9t
CisgICAgLy8gdHJhY2sncyBsaXN0IG9mIGN1ZXMgdGhhdCBoYXZlIHRoZWlyIHRleHQgdHJhY2sg
Y3VlIGFjdGl2ZSBmbGFnIHNldC4KKyAgICBDdWVMaXN0IGFjdGl2ZUN1ZXMgPSB2aWRlby5jdXJy
ZW50bHlBY3RpdmVDdWVzKCk7CisKKyAgICAvLyA5LiBJZiByZXNldCBpcyBmYWxzZSwgdGhlbiwg
Zm9yIGVhY2ggdGV4dCB0cmFjayBjdWUgY3VlIGluIGN1ZXM6IGlmIGN1ZSdzCisgICAgLy8gdGV4
dCB0cmFjayBjdWUgZGlzcGxheSBzdGF0ZSBoYXMgYSBzZXQgb2YgQ1NTIGJveGVzLCB0aGVuIGFk
ZCB0aG9zZSBib3hlcworICAgIC8vIHRvIG91dHB1dCwgYW5kIHJlbW92ZSBjdWUgZnJvbSBjdWVz
LgorCisgICAgLy8gVGhlcmUgaXMgbm90aGluZyBleHBsaWNpdGx5IHRvIGJlIGRvbmUgaGVyZSwg
YXMgYWxsIHRoZSBjYWNoaW5nIG9jY3VycworICAgIC8vIHdpdGhpbiB0aGUgVGV4dFRyYWNrQ3Vl
IGluc3RhbmNlIGl0c2VsZi4gSWYgcGFyYW1ldGVycyBvZiB0aGUgY3VlIGNoYW5nZSwKKyAgICAv
LyB0aGUgZGlzcGxheSB0cmVlIGlzIGNsZWFyZWQuCisKKyAgICAvLyBJZiB0aGUgbnVtYmVyIG9m
IENTUyBib3hlcyBpbiB0aGUgb3V0cHV0IGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGN1ZXMK
KyAgICAvLyB3ZSB3aXNoIHRvIHJlbmRlciAoZS5nLiwgd2UgYXJlIGFkZGluZyBhbm90aGVyIGN1
ZSBpbiBhIHNldCBvZiByb2xsLXVwCisgICAgLy8gY3VlcyksIHJlbW92ZSBhbGwgdGhlIGV4aXN0
aW5nIENTUyBib3hlcyByZXByZXNlbnRpbmcgdGhlIGN1ZXMgYW5kIHJlLWFkZAorICAgIC8vIHRo
ZW0gc28gdGhhdCB0aGUgbmV3IGN1ZSBpcyBhdCB0aGUgYm90dG9tLgorICAgIC8vIEZJWE1FOiBD
YWxsaW5nIGNvdW50Q2hpbGROb2RlcygpIGhlcmUgaXMgaW5lZmZpY2llbnQuIFdlIGRvbid0IG5l
ZWQgdG8KKyAgICAvLyB0cmF2ZXJzZSBhbGwgY2hpbGRyZW4ganVzdCB0byBjaGVjayBpZiB0aGVy
ZSBhcmUgbGVzcyBjaGlsZHJlbiB0aGFuIGN1ZXMuCisgICAgaWYgKGNvdW50Q2hpbGROb2Rlcygp
IDwgYWN0aXZlQ3Vlcy5zaXplKCkpCisgICAgICAgIHJlbW92ZUNoaWxkcmVuKCk7CisKKyAgICBh
Y3RpdmVDdWVzLnJlbW92ZUFsbE1hdGNoaW5nKFtdIChDdWVJbnRlcnZhbCYgY3VlSW50ZXJ2YWwp
IHsKKyAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gY3VlSW50ZXJ2YWwuZGF0YSgp
OworICAgICAgICByZXR1cm4gIWN1ZS0+dHJhY2soKQorICAgICAgICAgICAgfHwgIWN1ZS0+dHJh
Y2soKS0+aXNSZW5kZXJlZCgpCisgICAgICAgICAgICB8fCBjdWUtPnRyYWNrKCktPm1vZGUoKSA9
PSBUZXh0VHJhY2s6Ok1vZGU6OkRpc2FibGVkCisgICAgICAgICAgICB8fCAhY3VlLT5pc0FjdGl2
ZSgpCisgICAgICAgICAgICB8fCAhY3VlLT5pc1JlbmRlcmFibGUoKTsKKyAgICB9KTsKKworICAg
IC8vIFNvcnQgdGhlIGFjdGl2ZSBjdWVzIGZvciB0aGUgYXBwcm9wcmlhdGUgZGlzcGxheSBvcmRl
ci4gRm9yIGV4YW1wbGUsIGZvciByb2xsLXVwCisgICAgLy8gb3IgcGFpbnQtb24gY2FwdGlvbnMs
IHdlIG5lZWQgdG8gYWRkIHRoZSBjdWVzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciwK
KyAgICAvLyBzbyB0aGF0IHRoZSBuZXdlc3QgY2FwdGlvbnMgYXBwZWFyIGF0IHRoZSBib3R0b20u
CisgICAgc3RkOjpzb3J0KGFjdGl2ZUN1ZXMuYmVnaW4oKSwgYWN0aXZlQ3Vlcy5lbmQoKSwgJmNv
bXBhcmVDdWVJbnRlcnZhbEZvckRpc3BsYXkpOworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50LT5j
bG9zZWRDYXB0aW9uc1Zpc2libGUoKSkgeworICAgICAgICAvLyAxMC4gRm9yIGVhY2ggdGV4dCB0
cmFjayBjdWUgaW4gY3VlcyB0aGF0IGhhcyBub3QgeWV0IGhhZAorICAgICAgICAvLyBjb3JyZXNw
b25kaW5nIENTUyBib3hlcyBhZGRlZCB0byBvdXRwdXQsIGluIHRleHQgdHJhY2sgY3VlIG9yZGVy
LCBydW4gdGhlCisgICAgICAgIC8vIGZvbGxvd2luZyBzdWJzdGVwczoKKyAgICAgICAgZm9yIChh
dXRvJiBpbnRlcnZhbCA6IGFjdGl2ZUN1ZXMpIHsKKyAgICAgICAgICAgIGF1dG8gY3VlID0gaW50
ZXJ2YWwuZGF0YSgpOworICAgICAgICAgICAgY3VlLT5zZXRGb250U2l6ZShtX2ZvbnRTaXplLCBt
X3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplSXNJbXBvcnRhbnQpOworICAgICAg
ICAgICAgaWYgKGlzPFZUVEN1ZT4oKmN1ZSkpCisgICAgICAgICAgICAgICAgcHJvY2Vzc0FjdGl2
ZVZUVEN1ZShkb3duY2FzdDxWVFRDdWU+KCpjdWUpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGF1dG8gZGlzcGxheUJveCA9IGN1ZS0+Z2V0RGlzcGxheVRyZWUobV92aWRl
b0Rpc3BsYXlTaXplLnNpemUoKSwgbV9mb250U2l6ZSk7CisgICAgICAgICAgICAgICAgaWYgKGRp
c3BsYXlCb3gtPmhhc0NoaWxkTm9kZXMoKSAmJiAhY29udGFpbnMoZGlzcGxheUJveC5nZXQoKSkp
CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkKCpkaXNwbGF5Qm94KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIDExLiBSZXR1cm4gb3V0cHV0LgorICAg
IGlmIChoYXNDaGlsZE5vZGVzKCkpCisgICAgICAgIHNob3coKTsKKyAgICBlbHNlCisgICAgICAg
IGhpZGUoKTsKKworICAgIHVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQoKTsK
KyAgICB1cGRhdGVUZXh0VHJhY2tTdHlsZSgpOworICAgIG1fbmVlZHNHZW5lcmF0ZVRleHRUcmFj
a1JlcHJlc2VudGF0aW9uID0gdHJ1ZTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVk
ZWQoKQoreworICAgIGlmICghbV9uZWVkc0dlbmVyYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIG1fbmVlZHNHZW5lcmF0ZVRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uID0gZmFsc2U7CisKKyAgICAvLyBXZSBzaG91bGQgY2FsbCBtX3RleHRUcmFja1JlcHJl
c2VudGF0aW9uLT51cGRhdGUoKSB0byBwYWludCB0aGUgc3VidHJlZSBvZgorICAgIC8vIHRoZSBS
ZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVtZW50IGFmdGVyIHRoZSBsYXlvdXQgaXMgY2xlYW4u
CisgICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCisgICAgICAgIG1fdGV4dFRyYWNr
UmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6OnByb2Nlc3NBY3RpdmVWVFRDdWUoVlRUQ3VlJiBjdWUpCit7Cisg
ICAgREVCVUdfTE9HKExPR0lERU5USUZJRVIsICJhZGRpbmcgYW5kIHBvc2l0aW9uaW5nIGN1ZTog
XCIiLCBjdWUudGV4dCgpLCAiXCIsIHN0YXJ0PSIsIGN1ZS5zdGFydFRpbWUoKSwgIiwgZW5kPSIs
IGN1ZS5lbmRUaW1lKCksICIsIGxpbmU9IiwgY3VlLmxpbmUoKSk7CisgICAgUmVmPFRleHRUcmFj
a0N1ZUJveD4gZGlzcGxheUJveCA9ICpjdWUuZ2V0RGlzcGxheVRyZWUobV92aWRlb0Rpc3BsYXlT
aXplLnNpemUoKSwgbV9mb250U2l6ZSk7CisKKyAgICBpZiAoYXV0byByZWdpb24gPSBjdWUudHJh
Y2soKS0+cmVnaW9ucygpLT5nZXRSZWdpb25CeUlkKGN1ZS5yZWdpb25JZCgpKSkgeworICAgICAg
ICAvLyBMZXQgcmVnaW9uIGJlIHRoZSBXZWJWVFQgcmVnaW9uIHdob3NlIHJlZ2lvbiBpZGVudGlm
aWVyCisgICAgICAgIC8vIG1hdGNoZXMgdGhlIHRleHQgdHJhY2sgY3VlIHJlZ2lvbiBpZGVudGlm
aWVyIG9mIGN1ZS4KKyAgICAgICAgUmVmPEhUTUxEaXZFbGVtZW50PiByZWdpb25Ob2RlID0gcmVn
aW9uLT5nZXREaXNwbGF5VHJlZSgpOworCisgICAgICAgIGlmICghY29udGFpbnMocmVnaW9uTm9k
ZS5wdHIoKSkpCisgICAgICAgICAgICBhcHBlbmRDaGlsZChyZWdpb24tPmdldERpc3BsYXlUcmVl
KCkpOworCisgICAgICAgIHJlZ2lvbi0+YXBwZW5kVGV4dFRyYWNrQ3VlQm94KFdURk1vdmUoZGlz
cGxheUJveCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIGN1ZSBoYXMgYW4gZW1wdHkg
dGV4dCB0cmFjayBjdWUgcmVnaW9uIGlkZW50aWZpZXIgb3IgdGhlcmUgaXMgbm8KKyAgICAgICAg
Ly8gV2ViVlRUIHJlZ2lvbiB3aG9zZSByZWdpb24gaWRlbnRpZmllciBpcyBpZGVudGljYWwgdG8g
Y3VlJ3MgdGV4dAorICAgICAgICAvLyB0cmFjayBjdWUgcmVnaW9uIGlkZW50aWZpZXIsIHJ1biB0
aGUgZm9sbG93aW5nIHN1YnN0ZXBzOgorICAgICAgICBpZiAoZGlzcGxheUJveC0+aGFzQ2hpbGRO
b2RlcygpICYmICFjb250YWlucyhkaXNwbGF5Qm94LnB0cigpKSkgeworICAgICAgICAgICAgLy8g
Tm90ZTogdGhlIGRpc3BsYXkgdHJlZSBvZiBhIGN1ZSBpcyByZW1vdmVkIHdoZW4gdGhlIGFjdGl2
ZSBmbGFnIG9mIHRoZSBjdWUgaXMgdW5zZXQuCisgICAgICAgICAgICBhcHBlbmRDaGlsZChkaXNw
bGF5Qm94KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKQoreworICAgIGlm
ICghZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9tZWRp
YUVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHNtYWxsZXN0RGltZW5zaW9u
ID0gc3RkOjptaW4obV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWlnaHQoKSwgbV92aWRlb0Rp
c3BsYXlTaXplLnNpemUoKS53aWR0aCgpKTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBkb2N1bWVu
dCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5jYXB0aW9uRm9udFNpemVT
Y2FsZUFuZEltcG9ydGFuY2UobV9mb250U2l6ZUlzSW1wb3J0YW50KTsKKyAgICBtX2ZvbnRTaXpl
ID0gbHJvdW5kZihzbWFsbGVzdERpbWVuc2lvbiAqIGZvbnRTY2FsZSk7CisKKyAgICBmb3IgKGF1
dG8mIGFjdGl2ZUN1ZSA6IG1fbWVkaWFFbGVtZW50LT5jdXJyZW50bHlBY3RpdmVDdWVzKCkpIHsK
KyAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gYWN0aXZlQ3VlLmRhdGEoKTsKKyAg
ICAgICAgaWYgKGN1ZS0+aXNSZW5kZXJhYmxlKCkpCisgICAgICAgICAgICBjdWUtPnNldEZvbnRT
aXplKG1fZm9udFNpemUsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCksIG1fZm9udFNpemVJc0lt
cG9ydGFudCk7CisgICAgfQorfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OnVwZGF0ZVRleHRTdHJva2VTdHlsZSgpCit7CisgICAgaWYgKCFkb2N1bWVudCgp
LnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIFN0cmluZyBsYW5ndWFnZTsKKworICAgIC8vIEZJWE1F
OiBTaW5jZSBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG1vcmUgdGhhbiBvbmUgdGV4dCB0cmFjayBl
bmFibGVkLCB0aGUgZm9sbG93aW5nIGNvZGUgbWF5IG5vdCBmaW5kIHRoZSBjb3JyZWN0IGxhbmd1
YWdlLgorICAgIC8vIFRoZSBkZWZhdWx0IFVJIG9ubHkgYWxsb3dzIGEgdXNlciB0byBlbmFibGUg
b25lIHRyYWNrIGF0IGEgdGltZSwgc28gaXQgc2hvdWxkIGJlIE9LIGZvciBub3csIGJ1dCB3ZSBz
aG91bGQgY29uc2lkZXIgZG9pbmcKKyAgICAvLyB0aGlzIGRpZmZlcmVudGx5LCBzZWUgPGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4NzU+LgorICAgIGlmIChhdXRv
KiB0cmFja3MgPSBtX21lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0cmFja3MtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAg
IGF1dG8gdHJhY2sgPSB0cmFja3MtPml0ZW0oaSk7CisgICAgICAgICAgICBpZiAodHJhY2sgJiYg
dHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKKyAgICAgICAgICAg
ICAgICBsYW5ndWFnZSA9IHRyYWNrLT52YWxpZEJDUDQ3TGFuZ3VhZ2UoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZsb2F0
IHN0cm9rZVdpZHRoOworICAgIGJvb2wgaW1wb3J0YW50OworCisgICAgLy8gRklYTUU6IGZpbmQg
YSB3YXkgdG8gc2V0IHRoaXMgcHJvcGVydHkgaW4gdGhlIHN0eWxlc2hlZXQgbGlrZSB0aGUgb3Ro
ZXIgdXNlciBzdHlsZSBwcmVmZXJlbmNlcywgc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY5ODc0Pi4KKyAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmdyb3Vw
KCkuY2FwdGlvblByZWZlcmVuY2VzKCkuY2FwdGlvblN0cm9rZVdpZHRoRm9yRm9udChtX2ZvbnRT
aXplLCBsYW5ndWFnZSwgc3Ryb2tlV2lkdGgsIGltcG9ydGFudCkpCisgICAgICAgIHNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlTdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgsIENTU1Vu
aXRUeXBlOjpDU1NfUFgsIGltcG9ydGFudCk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRl
ZCgpCit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byByZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uID0gbV9tZWRpYUVsZW1lbnQtPnJl
cXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKTsKKyAgICBpZiAoIWhhc0NoaWxkTm9kZXMo
KSB8fCAhcmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgeworICAgICAgICBpZiAobV90
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgeworICAgICAgICAgICAgaWYgKCFyZXF1aXJlc1RleHRU
cmFja1JlcHJlc2VudGF0aW9uKQorICAgICAgICAgICAgICAgIGNsZWFyVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24oKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3RleHRUcmFj
a1JlcHJlc2VudGF0aW9uLT5zZXRIaWRkZW4odHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgeworICAg
ICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOworCisgICAgICAgIG1fdGV4dFRyYWNrUmVw
cmVzZW50YXRpb24gPSBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbjo6Y3JlYXRlKCp0aGlzKTsKKyAg
ICAgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICAgICAgbV90ZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbi0+c2V0Q29udGVudFNjYWxlKGRvY3VtZW50KCkucGFnZSgpLT5kZXZpY2VTY2Fs
ZUZhY3RvcigpKTsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnNldFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24uZ2V0KCkpOworICAgIH0KKworICAgIG1f
dGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNldEhpZGRlbihmYWxzZSk7Cit9CisKK3ZvaWQgTWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y2xlYXJUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbigpCit7CisgICAgaWYgKCFtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOworCisgICAgbV90ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbiA9IG51bGxwdHI7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQor
ICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb24obnVsbHB0
cik7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBk
YXRlVGV4dFRyYWNrU3R5bGUoKQoreworICAgIGlmIChtX3RleHRUcmFja1JlcHJlc2VudGF0aW9u
KSB7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwg
Q1NTVmFsdWVBYnNvbHV0ZSk7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlXaWR0aCwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS53aWR0aCgpLCBDU1NVbml0VHlw
ZTo6Q1NTX1BYKTsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhl
aWdodCwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWlnaHQoKSwgQ1NTVW5pdFR5cGU6OkNT
U19QWCk7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCAw
LCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVRvcCwgMCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRp
b24pOworICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCk7Cisg
ICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCk7CisgICAgcmVt
b3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQpOworICAgIHJlbW92ZUlubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3ApOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmVudGVyZWRGdWxsc2NyZWVuKCkKK3sKKyAgICB1cGRh
dGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklmTmVlZGVkKCk7CisgICAgdXBkYXRlU2l6ZXMoRm9y
Y2VVcGRhdGU6Olllcyk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6ZXhpdGVkRnVsbHNjcmVlbigpCit7CisgICAgY2xlYXJUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbigpOworICAgIHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlOjpZZXMpOworfQorCitib29s
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVZpZGVvRGlzcGxh
eVNpemUoKQoreworICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEludFJlY3QgdmlkZW9Cb3g7CisgICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRp
b24pIHsKKyAgICAgICAgdmlkZW9Cb3ggPSBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT5ib3Vu
ZHMoKTsKKyAgICAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBkb2N1bWVudCgpLnBhZ2Uo
KS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgdmlkZW9Cb3guc2V0V2lkdGgodmlkZW9C
b3gud2lkdGgoKSAqIGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgdmlkZW9Cb3guc2V0SGVp
Z2h0KHZpZGVvQm94LmhlaWdodCgpICogZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmICghaXM8UmVuZGVyVmlkZW8+KG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigp
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdmlkZW9Cb3ggPSBkb3duY2Fz
dDxSZW5kZXJWaWRlbz4oKm1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKS52aWRlb0JveCgpOwor
ICAgIH0KKworICAgIGlmIChtX3ZpZGVvRGlzcGxheVNpemUgPT0gdmlkZW9Cb3gpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIG1fdmlkZW9EaXNwbGF5U2l6ZSA9IHZpZGVvQm94OworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OnVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlIGZvcmNlKQoreworICAgIGlmICghdXBkYXRl
VmlkZW9EaXNwbGF5U2l6ZSgpICYmIGZvcmNlICE9IEZvcmNlVXBkYXRlOjpZZXMpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkgfHwgIW1fbWVkaWFFbGVtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX21lZGlhRWxlbWVudC0+c3luY1RleHRUcmFja0Jv
dW5kcygpOworCisgICAgdXBkYXRlQWN0aXZlQ3Vlc0ZvbnRTaXplKCk7CisgICAgdXBkYXRlVGV4
dFN0cm9rZVN0eWxlKCk7CisgICAgZm9yIChhdXRvJiBhY3RpdmVDdWUgOiBtX21lZGlhRWxlbWVu
dC0+Y3VycmVudGx5QWN0aXZlQ3VlcygpKQorICAgICAgICBhY3RpdmVDdWUuZGF0YSgpLT5yZWNh
bGN1bGF0ZVN0eWxlcygpOworCisgICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNdICgp
IHsKKyAgICAgICAgdXBkYXRlRGlzcGxheSgpOworICAgIH0pOworfQorCitSZWZQdHI8SW1hZ2U+
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSW1hZ2UoKQoreworICAgIGlmICghaGFzQ2hpbGROb2RlcygpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBkb2N1bWVudCgp
LmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworCisgICAgYXV0byogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgaWYgKCFyZW5kZXJlci0+aGFzTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVs
T2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CisKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rv
ciA9IDE7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAg
ZGV2aWNlU2NhbGVGYWN0b3IgPSBwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOworCisgICAgSW50
UmVjdCBwYWludGluZ1JlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5zaXplKCkpOwor
CisgICAgLy8gRklYTUUgKDE0OTQyMik6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25k
aXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3RvcikpOworICAgIGlmICghYnVm
ZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcGFpbnRGbGFncyA9IFJl
bmRlckxheWVyOjpwYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ0FsbFBoYXNlc0ZsYWdzKCk7
CisgICAgcGFpbnRGbGFncy5hZGQoUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJUZW1wb3JhcnlDbGlw
UmVjdHMpOworICAgIGxheWVyLT5wYWludChidWZmZXItPmNvbnRleHQoKSwgcGFpbnRpbmdSZWN0
LCBMYXlvdXRTaXplKCksIHsgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJz
LCBQYWludEJlaGF2aW9yOjpTbmFwc2hvdHRpbmcgfSwgbnVsbHB0ciwgcGFpbnRGbGFncyk7CisK
KyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShidWZmZXIpKTsK
K30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp0ZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQoY29uc3QgSW50UmVjdCYpCit7CisgICAgdXBk
YXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOworICAgIHVwZGF0ZVNpemVzKCk7
Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6aGlkZSgp
Cit7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXksIENTU1Zh
bHVlTm9uZSk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6c2hvdygpCit7CisgICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURp
c3BsYXkpOworfQorCitib29sIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6
OmlzU2hvd2luZygpIGNvbnN0Cit7CisgICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBwcm9wZXJ0
eVNldCA9IGlubGluZVN0eWxlKCk7CisKKyAgICAvLyBGb2xsb3dpbmcgdGhlIGNvZGUgZnJvbSBz
aG93KCkgYW5kIGhpZGUoKSBhYm92ZSwgd2Ugb25seSBoYXZlCisgICAgLy8gdG8gY2hlY2sgZm9y
IHRoZSBwcmVzZW5zZSBvZiBpbmxpbmUgZGlzcGxheS4KKyAgICByZXR1cm4gKCFwcm9wZXJ0eVNl
dCB8fCAhcHJvcGVydHlTZXQtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXNwbGF5
KSk7Cit9CisKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorY29uc3QgTG9nZ2VyJiBNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojpsb2dnZXIoKSBjb25zdAoreworICAg
IGlmICghbV9sb2dnZXIpCisgICAgICAgIG1fbG9nZ2VyID0gJmRvY3VtZW50KCkubG9nZ2VyKCk7
CisKKyAgICByZXR1cm4gKm1fbG9nZ2VyOworfQorCitjb25zdCB2b2lkKiBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojpsb2dJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fbG9nSWRlbnRpZmllciAmJiBtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9sb2dJZGVu
dGlmaWVyID0gbV9tZWRpYUVsZW1lbnQtPmxvZ0lkZW50aWZpZXIoKTsKKworICAgIHJldHVybiBt
X2xvZ0lkZW50aWZpZXI7Cit9CisKK1dURkxvZ0NoYW5uZWwmIE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6OmxvZ0NoYW5uZWwoKSBjb25zdAoreworICAgIHJldHVybiBMb2dN
ZWRpYTsKK30KKyNlbmRpZiAvLyAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKworI2VuZGlmIC8vIEVO
QUJMRShWSURFT19UUkFDSykKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjNlOWVlNTc0M2ZiOTJmOGQ4
NTlmMzE3YzIwZjc4YzNlNmRlMjlkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaApAQCAt
MCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbmNsdWRlICJH
ZW5lcmljVGFza1F1ZXVlLmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KKyNpbmNsdWRlIDx3dGYv
V2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCisKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBWVFRDdWU7CisKK2NsYXNzIE1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQgZmluYWwKKyAgICA6IHB1YmxpYyBI
VE1MRGl2RWxlbWVudAorICAgICwgcHVibGljIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50
CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgLCBwcml2YXRlIExvZ2dlckhlbHBlcgor
I2VuZGlmCit7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYsIEhUTUxNZWRpYUVs
ZW1lbnQmKTsKKworICAgIGVudW0gY2xhc3MgRm9yY2VVcGRhdGUgeyBZZXMsIE5vIH07CisgICAg
dm9pZCB1cGRhdGVTaXplcyhGb3JjZVVwZGF0ZSBmb3JjZSA9IEZvcmNlVXBkYXRlOjpObyk7Cisg
ICAgdm9pZCB1cGRhdGVEaXNwbGF5KCk7CisKKyAgICB2b2lkIHVwZGF0ZVRleHRUcmFja1JlcHJl
c2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgpOworCisgICAgdm9pZCBlbnRlcmVkRnVsbHNjcmVlbigp
OworICAgIHZvaWQgZXhpdGVkRnVsbHNjcmVlbigpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmLCBIVE1MTWVk
aWFFbGVtZW50Jik7CisKKyAgICAvLyBFbGVtZW50CisgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1l
bnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJUcmVl
UG9zaXRpb24mKSBvdmVycmlkZTsKKworICAgIC8vIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xp
ZW50CisgICAgUmVmUHRyPEltYWdlPiBjcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdl
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCB0ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5n
ZWQoY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbklmTmVlZGVkKCk7CisgICAgdm9pZCBjbGVhclRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKCk7CisKKyAgICBib29sIHVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKTsKKyAgICB2b2lk
IHVwZGF0ZUFjdGl2ZUN1ZXNGb250U2l6ZSgpOworICAgIHZvaWQgdXBkYXRlVGV4dFN0cm9rZVN0
eWxlKCk7CisgICAgdm9pZCBwcm9jZXNzQWN0aXZlVlRUQ3VlKFZUVEN1ZSYpOworICAgIHZvaWQg
dXBkYXRlVGV4dFRyYWNrU3R5bGUoKTsKKworICAgIHZvaWQgaGlkZSgpOworICAgIHZvaWQgc2hv
dygpOworICAgIGJvb2wgaXNTaG93aW5nKCkgY29uc3Q7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0
IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbDsKKyAgICBXVEZMb2dDaGFubmVsJiBs
b2dDaGFubmVsKCkgY29uc3QgZmluYWw7CisgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gIk1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQiOyB9CisgICAgbXV0YWJsZSBSZWZQdHI8TG9nZ2VyPiBtX2xvZ2dlcjsKKyAgICBtdXRhYmxl
IGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsKKyNlbmRpZgorCisgICAg
c3RkOjp1bmlxdWVfcHRyPFRleHRUcmFja1JlcHJlc2VudGF0aW9uPiBtX3RleHRUcmFja1JlcHJl
c2VudGF0aW9uOworCisgICAgR2VuZXJpY1Rhc2tRdWV1ZTxUaW1lcj4gbV90YXNrUXVldWU7Cisg
ICAgV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21lZGlhRWxlbWVudDsKKyAgICBJbnRSZWN0
IG1fdmlkZW9EaXNwbGF5U2l6ZTsKKyAgICBpbnQgbV9mb250U2l6ZSB7IDAgfTsKKyAgICBib29s
IG1fZm9udFNpemVJc0ltcG9ydGFudCB7IGZhbHNlIH07CisgICAgYm9vbCBtX25lZWRzR2VuZXJh
dGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiB7IGZhbHNlIH07Cit9OworCisjZW5kaWYKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzk5MjdiOTdiZmU2ZDI5ZTllNGY4NDc0NzQ2N2QyYjQyNTRjMzYzZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzNyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCi0jaW5jbHVk
ZSAiTWVkaWFDb250cm9scy5oIgotCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUg
Ik1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xzKTsKLQotTWVkaWFDb250
cm9sczo6TWVkaWFDb250cm9scyhEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBIVE1MRGl2RWxl
bWVudChIVE1MTmFtZXM6OmRpdlRhZywgZG9jdW1lbnQpCi0gICAgLCBtX21lZGlhQ29udHJvbGxl
cigwKQotICAgICwgbV9wYW5lbCgwKQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICAsIG1f
dGV4dERpc3BsYXlDb250YWluZXIoMCkKLSNlbmRpZgotICAgICwgbV9wbGF5QnV0dG9uKDApCi0g
ICAgLCBtX2N1cnJlbnRUaW1lRGlzcGxheSgwKQotICAgICwgbV90aW1lbGluZSgwKQotICAgICwg
bV9wYW5lbE11dGVCdXR0b24oMCkKLSAgICAsIG1fdm9sdW1lU2xpZGVyKDApCi0gICAgLCBtX3Rv
Z2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKDApCi0gICAgLCBtX2Z1bGxTY3JlZW5CdXR0b24oMCkK
LSAgICAsIG1faGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCp0aGlzLCAmTWVkaWFDb250cm9s
czo6aGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyRmlyZWQpCi0gICAgLCBtX2lzRnVsbHNjcmVl
bihmYWxzZSkKLSAgICAsIG1faXNNb3VzZU92ZXJDb250cm9scyhmYWxzZSkKLXsKLSAgICBzZXRQ
c2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scyIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6c2V0TWVkaWFD
b250cm9sbGVyKE1lZGlhQ29udHJvbGxlckludGVyZmFjZSogY29udHJvbGxlcikKLXsKLSAgICBp
ZiAobV9tZWRpYUNvbnRyb2xsZXIgPT0gY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fbWVkaWFDb250cm9sbGVyID0gY29udHJvbGxlcjsKLQotICAgIGlmIChtX3BhbmVsKQotICAg
ICAgICBtX3BhbmVsLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0jaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQotICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQotICAgICAgICBt
X3RleHREaXNwbGF5Q29udGFpbmVyLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0j
ZW5kaWYKLSAgICBpZiAobV9wbGF5QnV0dG9uKQotICAgICAgICBtX3BsYXlCdXR0b24tPnNldE1l
ZGlhQ29udHJvbGxlcihjb250cm9sbGVyKTsKLSAgICBpZiAobV9jdXJyZW50VGltZURpc3BsYXkp
Ci0gICAgICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJv
bGxlcik7Ci0gICAgaWYgKG1fdGltZWxpbmUpCi0gICAgICAgIG1fdGltZWxpbmUtPnNldE1lZGlh
Q29udHJvbGxlcihjb250cm9sbGVyKTsKLSAgICBpZiAobV9wYW5lbE11dGVCdXR0b24pCi0gICAg
ICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0g
ICAgaWYgKG1fdm9sdW1lU2xpZGVyKQotICAgICAgICBtX3ZvbHVtZVNsaWRlci0+c2V0TWVkaWFD
b250cm9sbGVyKGNvbnRyb2xsZXIpOwotICAgIGlmIChtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0
dG9uKQotICAgICAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5zZXRNZWRpYUNvbnRy
b2xsZXIoY29udHJvbGxlcik7Ci0gICAgaWYgKG1fZnVsbFNjcmVlbkJ1dHRvbikKLSAgICAgICAg
bV9mdWxsU2NyZWVuQnV0dG9uLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sczo6cmVzZXQoKQotewotICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRl
RGlzcGxheVR5cGUoKTsKLQotICAgIHVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwotCi0gICAg
ZG91YmxlIGR1cmF0aW9uID0gbV9tZWRpYUNvbnRyb2xsZXItPmR1cmF0aW9uKCk7Ci0gICAgaWYg
KHN0ZDo6aXNmaW5pdGUoZHVyYXRpb24pIHx8IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5oYXNP
d25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoTWVkaWFTbGlkZXJQYXJ0KSkgewotICAgICAgICBt
X3RpbWVsaW5lLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gICAgICAgIG1fdGltZWxpbmUtPnNl
dFBvc2l0aW9uKG1fbWVkaWFDb250cm9sbGVyLT5jdXJyZW50VGltZSgpKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9tZWRpYUNvbnRyb2xsZXItPmhhc0F1ZGlvKCkgfHwgUmVuZGVyVGhlbWU6OnNpbmds
ZXRvbigpLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYU11dGVCdXR0b25QYXJ0
KSkKLSAgICAgICAgbV9wYW5lbE11dGVCdXR0b24tPnNob3coKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7Ci0KLSAgICBpZiAobV92b2x1bWVTbGlkZXIpIHsK
LSAgICAgICAgaWYgKCFtX21lZGlhQ29udHJvbGxlci0+aGFzQXVkaW8oKSkKLSAgICAgICAgICAg
IG1fdm9sdW1lU2xpZGVyLT5oaWRlKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV92
b2x1bWVTbGlkZXItPnNob3coKTsKLSAgICAgICAgICAgIHNldFNsaWRlclZvbHVtZSgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmVmcmVzaENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJpbGl0
eSgpOwotCi0gICAgaWYgKG1fZnVsbFNjcmVlbkJ1dHRvbikgewotICAgICAgICBpZiAobV9tZWRp
YUNvbnRyb2xsZXItPnN1cHBvcnRzRnVsbHNjcmVlbihIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgJiYgbV9tZWRpYUNvbnRyb2xsZXItPmhhc1ZpZGVv
KCkpCi0gICAgICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPnNob3coKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9mdWxsU2NyZWVuQnV0dG9uLT5oaWRlKCk7Ci0gICAgfQotCi0gICAg
bWFrZU9wYXF1ZSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnJlcG9ydGVkRXJyb3IoKQot
ewotICAgIGF1dG8mIHRoZW1lID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpOwotICAgIGlmICgh
dGhlbWUuaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKE1lZGlhTXV0ZUJ1dHRvblBhcnQp
KSB7Ci0gICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7Ci0gICAgICAgIG1fdm9sdW1l
U2xpZGVyLT5oaWRlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNC
dXR0b24gJiYgIXRoZW1lLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYVRvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uUGFydCkpCi0gICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlv
bnNCdXR0b24tPmhpZGUoKTsKLQotICAgIGlmIChtX2Z1bGxTY3JlZW5CdXR0b24gJiYgIXRoZW1l
Lmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYUVudGVyRnVsbHNjcmVlbkJ1dHRv
blBhcnQpKQotICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPmhpZGUoKTsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xzOjpsb2FkZWRNZXRhZGF0YSgpCi17Ci0gICAgcmVzZXQoKTsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xzOjpzaG93KCkKLXsKLSAgICBtYWtlT3BhcXVlKCk7Ci0gICAgbV9wYW5l
bC0+c2V0SXNEaXNwbGF5ZWQodHJ1ZSk7Ci0gICAgbV9wYW5lbC0+c2hvdygpOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbHM6OmhpZGUoKQotewotICAgIG1fcGFuZWwtPnNldElzRGlzcGxheWVkKGZh
bHNlKTsKLSAgICBtX3BhbmVsLT5oaWRlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6bWFr
ZU9wYXF1ZSgpCi17Ci0gICAgbV9wYW5lbC0+bWFrZU9wYXF1ZSgpOwotfQotCi12b2lkIE1lZGlh
Q29udHJvbHM6Om1ha2VUcmFuc3BhcmVudCgpCi17Ci0gICAgbV9wYW5lbC0+bWFrZVRyYW5zcGFy
ZW50KCk7Ci19Ci0KLWJvb2wgTWVkaWFDb250cm9sczo6c2hvdWxkSGlkZUNvbnRyb2xzKCkKLXsK
LSAgICByZXR1cm4gIW1fcGFuZWwtPmhvdmVyZWQoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xz
OjpidWZmZXJpbmdQcm9ncmVzc2VkKCkKLXsKLSAgICAvLyBXZSBvbmx5IG5lZWQgdG8gdXBkYXRl
IGJ1ZmZlcmluZyBwcm9ncmVzcyB3aGVuIHBhdXNlZCwgZHVyaW5nIG5vcm1hbAotICAgIC8vIHBs
YXliYWNrIHBsYXliYWNrUHJvZ3Jlc3NlZCgpIHdpbGwgdGFrZSBjYXJlIG9mIGl0LgotICAgIGlm
IChtX21lZGlhQ29udHJvbGxlci0+cGF1c2VkKCkpCi0gICAgICAgIG1fdGltZWxpbmUtPnNldFBv
c2l0aW9uKG1fbWVkaWFDb250cm9sbGVyLT5jdXJyZW50VGltZSgpKTsKLX0KLQotdm9pZCBNZWRp
YUNvbnRyb2xzOjpwbGF5YmFja1N0YXJ0ZWQoKQotewotICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRl
RGlzcGxheVR5cGUoKTsKLSAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlvbihtX21lZGlhQ29udHJv
bGxlci0+Y3VycmVudFRpbWUoKSk7Ci0gICAgdXBkYXRlQ3VycmVudFRpbWVEaXNwbGF5KCk7Ci0K
LSAgICBpZiAobV9pc0Z1bGxzY3JlZW4pCi0gICAgICAgIHN0YXJ0SGlkZUZ1bGxzY3JlZW5Db250
cm9sc1RpbWVyKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6cGxheWJhY2tQcm9ncmVzc2Vk
KCkKLXsKLSAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlvbihtX21lZGlhQ29udHJvbGxlci0+Y3Vy
cmVudFRpbWUoKSk7Ci0gICAgdXBkYXRlQ3VycmVudFRpbWVEaXNwbGF5KCk7Ci0KLSAgICBpZiAo
IW1faXNNb3VzZU92ZXJDb250cm9scyAmJiBtX21lZGlhQ29udHJvbGxlci0+aGFzVmlkZW8oKSkK
LSAgICAgICAgbWFrZVRyYW5zcGFyZW50KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6cGxh
eWJhY2tTdG9wcGVkKCkKLXsKLSAgICBtX3BsYXlCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7
Ci0gICAgbV90aW1lbGluZS0+c2V0UG9zaXRpb24obV9tZWRpYUNvbnRyb2xsZXItPmN1cnJlbnRU
aW1lKCkpOwotICAgIHVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwotICAgIG1ha2VPcGFxdWUo
KTsKLQotICAgIHN0b3BIaWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXIoKTsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xzOjp1cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKQotewotICAgIGRvdWJsZSBu
b3cgPSBtX21lZGlhQ29udHJvbGxlci0+Y3VycmVudFRpbWUoKTsKLSAgICBtX2N1cnJlbnRUaW1l
RGlzcGxheS0+c2V0SW5uZXJUZXh0KFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5mb3JtYXRNZWRp
YUNvbnRyb2xzVGltZShub3cpKTsKLSAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+c2V0Q3VycmVu
dFZhbHVlKG5vdyk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6c2hvd1ZvbHVtZVNsaWRlcigp
Ci17Ci0gICAgaWYgKCFtX21lZGlhQ29udHJvbGxlci0+aGFzQXVkaW8oKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV92b2x1bWVTbGlkZXItPnNob3coKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRy
b2xzOjpjaGFuZ2VkTXV0ZSgpCi17Ci0gICAgbV9wYW5lbE11dGVCdXR0b24tPmNoYW5nZWRNdXRl
KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdlZFZvbHVtZSgpCi17Ci0gICAgaWYg
KG1fdm9sdW1lU2xpZGVyKQotICAgICAgICBzZXRTbGlkZXJWb2x1bWUoKTsKLSAgICBpZiAobV9w
YW5lbE11dGVCdXR0b24gJiYgbV9wYW5lbE11dGVCdXR0b24tPnJlbmRlcmVyKCkpCi0gICAgICAg
IG1fcGFuZWxNdXRlQnV0dG9uLT5yZW5kZXJlcigpLT5yZXBhaW50KCk7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sczo6Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgpCi17Ci0gICAgaWYg
KG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pCi0gICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
czo6cmVmcmVzaENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJpbGl0eSgpCi17Ci0gICAgaWYgKCFt
X3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9tZWRpYUNvbnRyb2xsZXItPmhhc0Nsb3NlZENhcHRpb25zKCkpCi0gICAgICAgIG1fdG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b24tPnNob3coKTsKLSAgICBlbHNlCi0gICAgICAgIG1fdG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b24tPmhpZGUoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpj
bG9zZWRDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpCi17Ci0gICAgcmVmcmVzaENsb3NlZENhcHRpb25z
QnV0dG9uVmlzaWJpbGl0eSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmVudGVyZWRGdWxs
c2NyZWVuKCkKLXsKLSAgICBtX2lzRnVsbHNjcmVlbiA9IHRydWU7Ci0gICAgbV9mdWxsU2NyZWVu
QnV0dG9uLT5zZXRJc0Z1bGxzY3JlZW4odHJ1ZSk7Ci0KLSAgICBpZiAoUGFnZSogcGFnZSA9IGRv
Y3VtZW50KCkucGFnZSgpKQotICAgICAgICBwYWdlLT5jaHJvbWUoKS5zZXRDdXJzb3JIaWRkZW5V
bnRpbE1vdXNlTW92ZXModHJ1ZSk7Ci0KLSAgICBzdGFydEhpZGVGdWxsc2NyZWVuQ29udHJvbHNU
aW1lcigpOwotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBpZiAobV90ZXh0RGlzcGxheUNv
bnRhaW5lcikKLSAgICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+ZW50ZXJlZEZ1bGxzY3Jl
ZW4oKTsKLSNlbmRpZgotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmV4aXRlZEZ1bGxzY3JlZW4o
KQotewotICAgIG1faXNGdWxsc2NyZWVuID0gZmFsc2U7Ci0gICAgbV9mdWxsU2NyZWVuQnV0dG9u
LT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwotICAgIHN0b3BIaWRlRnVsbHNjcmVlbkNvbnRyb2xz
VGltZXIoKTsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgaWYgKG1fdGV4dERpc3BsYXlD
b250YWluZXIpCi0gICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPmV4aXRlZEZ1bGxzY3Jl
ZW4oKTsKLSNlbmRpZgotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQmIGV2ZW50KQotewotICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKGV2ZW50KTsKLQotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
b3ZlckV2ZW50KSB7Ci0gICAgICAgIGlmICghY29udGFpbnNSZWxhdGVkVGFyZ2V0KGV2ZW50KSkg
ewotICAgICAgICAgICAgbV9pc01vdXNlT3ZlckNvbnRyb2xzID0gdHJ1ZTsKLSAgICAgICAgICAg
IGlmICghbV9tZWRpYUNvbnRyb2xsZXItPmNhblBsYXkoKSkgewotICAgICAgICAgICAgICAgIG1h
a2VPcGFxdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoc2hvdWxkSGlkZUNvbnRyb2xzKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHN0YXJ0SGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpIHsKLSAgICAgICAg
aWYgKCFjb250YWluc1JlbGF0ZWRUYXJnZXQoZXZlbnQpKSB7Ci0gICAgICAgICAgICBtX2lzTW91
c2VPdmVyQ29udHJvbHMgPSBmYWxzZTsKLSAgICAgICAgICAgIHN0b3BIaWRlRnVsbHNjcmVlbkNv
bnRyb2xzVGltZXIoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpIHsKLSAgICAg
ICAgaWYgKG1faXNGdWxsc2NyZWVuKSB7Ci0gICAgICAgICAgICAvLyBXaGVuIHdlIGdldCBhIG1v
dXNlIG1vdmUgaW4gZnVsbHNjcmVlbiBtb2RlLCBzaG93IHRoZSBtZWRpYSBjb250cm9scywgYW5k
IHN0YXJ0IGEgdGltZXIKLSAgICAgICAgICAgIC8vIHRoYXQgd2lsbCBoaWRlIHRoZSBtZWRpYSBj
b250cm9scyBhZnRlciBhIDMgc2Vjb25kcyB3aXRob3V0IGEgbW91c2UgbW92ZS4KLSAgICAgICAg
ICAgIG1ha2VPcGFxdWUoKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRIaWRlQ29udHJvbHMoKSkK
LSAgICAgICAgICAgICAgICBzdGFydEhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcigpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6
aGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyRmlyZWQoKQotewotICAgIGlmIChtX21lZGlhQ29u
dHJvbGxlci0+cGF1c2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0Z1bGxz
Y3JlZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2hvdWxkSGlkZUNvbnRyb2xzKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS5wYWdl
KCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zl
cyh0cnVlKTsKLQotICAgIG1ha2VUcmFuc3BhcmVudCgpOwotfQotCi12b2lkIE1lZGlhQ29udHJv
bHM6OnN0YXJ0SGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCkKLXsKLSAgICBpZiAoIW1faXNG
dWxsc2NyZWVuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQo
KS5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2hpZGVG
dWxsc2NyZWVuQ29udHJvbHNUaW1lci5zdGFydE9uZVNob3QocGFnZS0+c2V0dGluZ3MoKS50aW1l
V2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVIaWRpbmdDb250cm9scygpKTsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xzOjpzdG9wSGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCkKLXsKLSAgICBt
X2hpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lci5zdG9wKCk7Ci19Ci0KLWJvb2wgTWVkaWFDb250
cm9sczo6Y29udGFpbnNSZWxhdGVkVGFyZ2V0KEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoIWlz
PE1vdXNlRXZlbnQ+KGV2ZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gcmVs
YXRlZFRhcmdldCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KS5yZWxhdGVkVGFyZ2V0KCk7
Ci0gICAgcmV0dXJuIGlzPE5vZGU+KHJlbGF0ZWRUYXJnZXQpICYmIGNvbnRhaW5zKCZkb3duY2Fz
dDxOb2RlPigqcmVsYXRlZFRhcmdldCkpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQot
Ci12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKQotewotICAgIGlm
IChtX3RleHREaXNwbGF5Q29udGFpbmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRl
eHREaXNwbGF5Q29udGFpbmVyID0gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgIG1fdGV4dERpc3BsYXlDb250YWluZXIgPSB0ZXh0
RGlzcGxheUNvbnRhaW5lci5wdHIoKTsKLQotICAgIGlmIChtX21lZGlhQ29udHJvbGxlcikKLSAg
ICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+c2V0TWVkaWFDb250cm9sbGVyKG1fbWVkaWFD
b250cm9sbGVyKTsKLQotICAgIC8vIEluc2VydCBpdCBiZWZvcmUgdGhlIGZpcnN0IGNvbnRyb2xs
ZXIgZWxlbWVudCBzbyBpdCBhbHdheXMgZGlzcGxheXMgYmVoaW5kIHRoZSBjb250cm9scy4KLSAg
ICBpbnNlcnRCZWZvcmUodGV4dERpc3BsYXlDb250YWluZXIsIG1fcGFuZWwpOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbHM6OnNob3dUZXh0VHJhY2tEaXNwbGF5KCkKLXsKLSAgICBpZiAoIW1fdGV4
dERpc3BsYXlDb250YWluZXIpCi0gICAgICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKLSAg
ICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5zaG93KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
czo6aGlkZVRleHRUcmFja0Rpc3BsYXkoKQotewotICAgIGlmICghbV90ZXh0RGlzcGxheUNvbnRh
aW5lcikKLSAgICAgICAgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIG1fdGV4dERpc3Bs
YXlDb250YWluZXItPmhpZGUoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGVUZXh0
VHJhY2tEaXNwbGF5KCkKLXsKLSAgICBpZiAoIW1fdGV4dERpc3BsYXlDb250YWluZXIpCi0gICAg
ICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKLQotICAgIG1fdGV4dERpc3BsYXlDb250YWlu
ZXItPnVwZGF0ZURpc3BsYXkoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjp0ZXh0VHJhY2tQ
cmVmZXJlbmNlc0NoYW5nZWQoKQotewotICAgIGNsb3NlZENhcHRpb25UcmFja3NDaGFuZ2VkKCk7
Ci0gICAgaWYgKG1fdGV4dERpc3BsYXlDb250YWluZXIpCi0gICAgICAgIG1fdGV4dERpc3BsYXlD
b250YWluZXItPnVwZGF0ZVNpemVzKE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQ6OkZvcmNlVXBkYXRlOjpZZXMpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmNsZWFyVGV4
dERpc3BsYXlDb250YWluZXIoKQotewotICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQot
ICAgICAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5yZW1vdmVDaGlsZHJlbigpOwotfQotCi12
b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5l
ZWRlZCgpCi17Ci0gICAgaWYgKG1fdGV4dERpc3BsYXlDb250YWluZXIpCi0gICAgICAgIG1fdGV4
dERpc3BsYXlDb250YWluZXItPnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5l
ZWRlZCgpOwotfQotCi0jZW5kaWYKLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpzZXRTbGlkZXJWb2x1
bWUoKQotewotICAgIG1fdm9sdW1lU2xpZGVyLT5zZXRWb2x1bWUobV9tZWRpYUNvbnRyb2xsZXIt
Pm11dGVkKCkgPyAwLjAgOiBtX21lZGlhQ29udHJvbGxlci0+dm9sdW1lKCkpOwotfQotCi19Ci0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9scy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmJjYjU3NGIyZjBhMjM5MjhlZThjMTc5ODY1Nzk5
NWNmN2JkOTU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaAorKysgL2Rldi9udWxs
CkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShWSURFTykKLQot
I2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBFdmVudDsKLWNsYXNz
IE1lZGlhUGxheWVyOwotY2xhc3MgUmVuZGVyQm94OwotY2xhc3MgUmVuZGVyTWVkaWE7Ci0KLS8v
IEFuIGFic3RyYWN0IGNsYXNzIHdpdGggdGhlIG1lZGlhIGNvbnRyb2wgZWxlbWVudHMgdGhhdCBh
bGwgcG9ydHMgc3VwcG9ydC4KLWNsYXNzIE1lZGlhQ29udHJvbHMgOiBwdWJsaWMgSFRNTERpdkVs
ZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9scyk7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCB+TWVkaWFDb250cm9scygpID0gZGVmYXVsdDsKLQotICAgIC8vIFRo
aXMgZnVuY3Rpb24gaXMgdG8gYmUgaW1wbGVtZW50ZWQgaW4geW91ciBwb3J0LXNwZWNpZmljIG1l
ZGlhCi0gICAgLy8gY29udHJvbHMgaW1wbGVtZW50YXRpb24gc2luY2UgaXQgd2lsbCByZXR1cm4g
YSBjaGlsZCBpbnN0YW5jZS4KLSAgICBzdGF0aWMgUmVmUHRyPE1lZGlhQ29udHJvbHM+IHRyeUNy
ZWF0ZShEb2N1bWVudCYpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldE1lZGlhQ29udHJvbGxlcihN
ZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqKTsKLQotICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwot
ICAgIHZpcnR1YWwgdm9pZCByZXBvcnRlZEVycm9yKCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRl
ZE1ldGFkYXRhKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwotICAgIHZpcnR1YWwgdm9p
ZCBoaWRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIG1ha2VPcGFxdWUoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgbWFrZVRyYW5zcGFyZW50KCk7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEhpZGVDb250cm9s
cygpOwotCi0gICAgdmlydHVhbCB2b2lkIGJ1ZmZlcmluZ1Byb2dyZXNzZWQoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcGxheWJhY2tTdGFydGVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHBsYXliYWNrUHJv
Z3Jlc3NlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBwbGF5YmFja1N0b3BwZWQoKTsKLQotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVTdGF0dXNEaXNwbGF5KCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1ZvbHVtZVNs
aWRlcigpOwotCi0gICAgdmlydHVhbCB2b2lkIGNoYW5nZWRNdXRlKCk7Ci0gICAgdmlydHVhbCB2
b2lkIGNoYW5nZWRWb2x1bWUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VkQ2xvc2VkQ2Fw
dGlvbnNWaXNpYmlsaXR5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlZnJlc2hDbG9zZWRDYXB0aW9u
c0J1dHRvblZpc2liaWxpdHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlQ2xvc2VkQ2FwdGlv
blRyYWNrTGlzdCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjbG9zZWRDYXB0aW9uVHJhY2tzQ2hh
bmdlZCgpOwotCi0gICAgdmlydHVhbCB2b2lkIGVudGVyZWRGdWxsc2NyZWVuKCk7Ci0gICAgdmly
dHVhbCB2b2lkIGV4aXRlZEZ1bGxzY3JlZW4oKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50cygpIG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIGhpZGVGdWxsc2NyZWVuQ29u
dHJvbHNUaW1lckZpcmVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0SGlkZUZ1bGxzY3JlZW5D
b250cm9sc1RpbWVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BIaWRlRnVsbHNjcmVlbkNvbnRy
b2xzVGltZXIoKTsKLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBzaG93VGV4dFRyYWNr
RGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHRleHRUcmFja1ByZWZlcmVuY2VzQ2hhbmdlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclRl
eHREaXNwbGF5Q29udGFpbmVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgpOwotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICBl
eHBsaWNpdCBNZWRpYUNvbnRyb2xzKERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBjb250YWluc1Jl
bGF0ZWRUYXJnZXQoRXZlbnQmKTsKLQotICAgIHZvaWQgc2V0U2xpZGVyVm9sdW1lKCk7Ci0KLSAg
ICBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqIG1fbWVkaWFDb250cm9sbGVyOwotCi0gICAgLy8g
Q29udGFpbmVyIGZvciB0aGUgbWVkaWEgY29udHJvbCBlbGVtZW50cy4KLSAgICBNZWRpYUNvbnRy
b2xQYW5lbEVsZW1lbnQqIG1fcGFuZWw7Ci0KLSAgICAvLyBDb250YWluZXIgZm9yIHRoZSB0ZXh0
IHRyYWNrIGN1ZXMuCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQqIG1fdGV4dERpc3BsYXlDb250YWluZXI7Ci0jZW5kaWYK
LQotICAgIC8vIE1lZGlhIGNvbnRyb2wgZWxlbWVudHMuCi0gICAgTWVkaWFDb250cm9sUGxheUJ1
dHRvbkVsZW1lbnQqIG1fcGxheUJ1dHRvbjsKLSAgICBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURp
c3BsYXlFbGVtZW50KiBtX2N1cnJlbnRUaW1lRGlzcGxheTsKLSAgICBNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQqIG1fdGltZWxpbmU7Ci0gICAgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9u
RWxlbWVudCogbV9wYW5lbE11dGVCdXR0b247Ci0gICAgTWVkaWFDb250cm9sUGFuZWxWb2x1bWVT
bGlkZXJFbGVtZW50KiBtX3ZvbHVtZVNsaWRlcjsKLSAgICBNZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQqIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b247Ci0g
ICAgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQqIG1fZnVsbFNjcmVlbkJ1dHRv
bjsKLQotICAgIFRpbWVyIG1faGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyOwotICAgIGJvb2wg
bV9pc0Z1bGxzY3JlZW47Ci0gICAgYm9vbCBtX2lzTW91c2VPdmVyQ29udHJvbHM7Ci0KLXByaXZh
dGU6Ci0gICAgYm9vbCBpc01lZGlhQ29udHJvbHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVl
OyB9Ci19OwotCi1pbmxpbmUgTWVkaWFDb250cm9scyogdG9NZWRpYUNvbnRyb2xzKE5vZGUqIG5v
ZGUpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwgbm9k
ZS0+aXNNZWRpYUNvbnRyb2xzKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRy
b2xzKj4obm9kZSk7Ci19Ci0KLS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5u
ZWNjZXNzYXJ5IGNhc3QuCi12b2lkIHRvTWVkaWFDb250cm9scyhjb25zdCBNZWRpYUNvbnRyb2xz
Kik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVk
aWFBRi5jcHAKaW5kZXggM2Q4Y2Y0ZmI4Zjc3ZmU4MGIzZmI0NGNkN2VlOWQ3OWE4NTI0NWMxMi4u
MmI1MjQyN2Q3ODAyOGQ0ZGNjNjU4NGFjNzk5ZDc3YzE5OWYyNjgwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKQEAg
LTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAi
TG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNZWRp
YUNvbnRyb2xFbGVtZW50cy5oIgogI2luY2x1ZGUgIlRleHRUcmFja0xpc3QuaCIKICNpbmNsdWRl
ICJVc2VyU3R5bGVTaGVldFR5cGVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKaW5kZXggZmNkZWViODQyNTlkZGM3YTQ4NTU1ODJhYjg5YmM3OGZhNTI2YWY2Ni4uMzc1
NDYxYzMxOTljZGRhZTI4ZDUyNjhmMjE4OWExMzM0ZTJjYWY2ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
CkBAIC0xMDc3LDE1ICsxMDc3LDExIEBAIHZvaWQgUGFnZTo6c2V0UGFnZVNjYWxlRmFjdG9yKGZs
b2F0IHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBib29sIGluU3RhYmxlCiAjZW5kaWYK
ICAgICB9CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChpblN0
YWJsZVN0YXRlKSB7CiAgICAgICAgIGZvckVhY2hNZWRpYUVsZW1lbnQoW10gKEhUTUxNZWRpYUVs
ZW1lbnQmIGVsZW1lbnQpIHsKICAgICAgICAgICAgIGVsZW1lbnQucGFnZVNjYWxlRmFjdG9yQ2hh
bmdlZCgpOwogICAgICAgICB9KTsKICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShpblN0
YWJsZVN0YXRlKTsKLSNlbmRpZgogfQogCiB2b2lkIFBhZ2U6OnNldERlbGVnYXRlc1NjYWxpbmco
Ym9vbCBkZWxlZ2F0ZXNTY2FsaW5nKQpAQCAtMTEzMiwxMSArMTEyOCw5IEBAIHZvaWQgUGFnZTo6
c2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbihVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uIHVzZXJJbnRlCiAKICAgICBtX3VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gPSB1c2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOwogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKICAgICBmb3JFYWNoTWVkaWFFbGVtZW50KFtdIChIVE1MTWVkaWFFbGVtZW50JiBlbGVt
ZW50KSB7CiAgICAgICAgIGVsZW1lbnQudXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkNoYW5n
ZWQoKTsKICAgICB9KTsKLSNlbmRpZgogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4Njk2NjM2MGRiOWE5ZThmMTk3YjIxZjYwOTMxYzg2NWFkYjY4
MDlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAs
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyTWVkaWFDb250cm9scy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVk
ZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5o
IgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFp
bmVyKTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChSZW5kZXJNZWRpYUNvbnRyb2xUaW1l
bGluZUNvbnRhaW5lcik7Ci0KLVJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyOjpSZW5k
ZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHls
ZSYmIHN0eWxlKQotICAgIDogUmVuZGVyQmxvY2tGbG93KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUp
KQotewotfQotCi12b2lkIFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQo
KQotewotICAgIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0KCk7Ci0KLSAgICBpZiAoc3R5bGUoKS5k
aXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6Ok5vbmUgfHwgIWlzPFJlbmRlckJveD4obmV4dFNpYmxp
bmcoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckJveCYgYnV0dG9uQm94ID0gZG93
bmNhc3Q8UmVuZGVyQm94PigqbmV4dFNpYmxpbmcoKSk7Ci0gICAgaW50IGFic29sdXRlT2Zmc2V0
VG9wID0gYnV0dG9uQm94LmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KDAsIC1zaXplKCkuaGVp
Z2h0KCkpKS55KCk7Ci0KLSAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJs
ZXIodmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKSk7Ci0KLSAgICAvLyBJZiB0aGUg
c2xpZGVyIHdvdWxkIGJlIHJlbmRlcmVkIG91dHNpZGUgdGhlIHBhZ2UsIGl0IHNob3VsZCBiZSBt
b3ZlZCBiZWxvdyB0aGUgY29udHJvbHMuCi0gICAgaWYgKFVOTElLRUxZKGFic29sdXRlT2Zmc2V0
VG9wIDwgMCkpCi0gICAgICAgIHNldFkoYnV0dG9uQm94Lm9mZnNldFRvcCgpICsgdGhlbWUoKS52
b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihidXR0b25Cb3gsIHNpemUoKSkueSgpKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZW5kZXJNZWRpYUNvbnRy
b2xUaW1lbGluZUNvbnRhaW5lcjo6UmVuZGVyTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXIo
RWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKLSAgICA6IFJlbmRlckZsZXhp
YmxlQm94KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQotewotfQotCi0vLyBXZSB3YW50IHRoZSB0
aW1lbGluZSBzbGlkZXIgdG8gYmUgYXQgbGVhc3QgMTAwIHBpeGVscyB3aWRlLgotLy8gRklYTUU6
IEVsaW1pbmF0ZSBoYXJkLWNvZGVkIHdpZHRocyBhbHRvZ2V0aGVyLgotc3RhdGljIGNvbnN0IGlu
dCBtaW5XaWR0aFRvRGlzcGxheVRpbWVEaXNwbGF5cyA9IDQ1ICsgMTAwICsgNDU7Ci0KLXZvaWQg
UmVuZGVyTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXI6OmxheW91dCgpCi17Ci0gICAgUmVu
ZGVyRmxleGlibGVCb3g6OmxheW91dCgpOwotCi0gICAgTGF5b3V0U3RhdGVEaXNhYmxlciBsYXlv
dXRTdGF0ZURpc2FibGVyKHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkpOwotICAg
IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudCogY29udGFpbmVyID0gc3RhdGlj
X2Nhc3Q8TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50Kj4oZWxlbWVudCgpKTsK
LSAgICBjb250YWluZXItPnNldFRpbWVEaXNwbGF5c0hpZGRlbih3aWR0aCgpLnRvSW50KCkgPCBt
aW5XaWR0aFRvRGlzcGxheVRpbWVEaXNwbGF5cyk7Ci19Ci0KLSNpZiBQTEFURk9STShXSU4pICYm
IFVTRShDRykKLQotdm9pZCBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShXSU4pICYmIFVTRShDRykKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOWY2MTEzNjAxN2QwOTIxN2FkODRjNTI0YTZjMmNiMGVhNmMxYzlmZS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5j
bHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJNZWRpYVZvbHVtZVNsaWRlckNv
bnRhaW5lciBmaW5hbCA6IHB1YmxpYyBSZW5kZXJCbG9ja0Zsb3cgewotICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIpOwotcHVibGljOgot
ICAgIFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKEVsZW1lbnQmLCBSZW5kZXJTdHls
ZSYmKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGxheW91dCgpIG92ZXJyaWRlOwotfTsKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBSZW5kZXJNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lciBmaW5hbCA6IHB1YmxpYyBSZW5kZXJGbGV4aWJsZUJveCB7Ci0gICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChSZW5kZXJNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5l
cik7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXIoRWxl
bWVudCYsIFJlbmRlclN0eWxlJiYpOwotCi1wcml2YXRlOgotICAgIHZvaWQgbGF5b3V0KCkgb3Zl
cnJpZGU7Ci0gICAgYm9vbCBpc0ZsZXhpYmxlQm94SW1wbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KLX07Ci0KLSNpZiBQTEFURk9STShXSU4pICYmIFVTRShDRykKLQotY2xhc3Mg
UmVuZGVyTWVkaWFDb250cm9scyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYWRqdXN0TWVk
aWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmKTsKLX07Ci0KLSNlbmRpZiAvLyBQTEFURk9S
TShXSU4pICYmIFVTRShDRykKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNsaWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcApp
bmRleCAzN2VjOGY1NDk3MDRhOWIyY2VlZjQzZjJhOThmZGE4MDYzY2ZhZDBkLi4xNjgxZjlkMWZj
MGI5OTIyNzAxYWZiMzM5ZDFiM2I2ZjE3MGM2OTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2xpZGVyLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2Vy
SWRpb21zLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNsdWRlICJN
b3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCA3ODA5MjVjMjlj
ZWYwNjQ0ZTAzY2EyYjVjMmU1YjcxZmUxZWMyYTY3Li5lOWRkMTQ5NDU4NjRiYTliZDhlODVhNDUw
ODQ3ZTJlNjI1MmQxNjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5j
cHAKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1
ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVBZHdhaXRhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUFkd2FpdGEuY3BwCmluZGV4IGIxOGM0ZDA1ZDUxZTgw
ZDRmMmVhNjEwZjY2YTcyYzI3NTY4N2Q2NzYuLjBiNWYyYzljOTRkYTQzZTc1OWNjM2VkZWNkZWIz
OWYyMTlmMjA4MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUFkd2FpdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUFkd2FpdGEuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgorI2luY2x1ZGUgIk1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWludElu
Zm8uaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5oCmluZGV4IDNiMmI1
MGRkZDU5NTJkYzFlZjVkOGIwMzA0MWQ5MzNjOGIzNzllOWEuLjE5YmMzOTJlZTMxZjY5NTM0OTUy
MmQyMTVkZjk5NWZkNWZhODEyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ29jb2EuaApAQCAtMjgsOSArMjgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgi
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xT
X1NDUklQVCkKIE9CSkNfQ0xBU1MgTlNEYXRlQ29tcG9uZW50c0Zvcm1hdHRlcjsKLSNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDEyICs0Miw4IEBAIHByaXZhdGU6CiAjZW5k
aWYKIAogcHJvdGVjdGVkOgotI2lmIEVOQUJMRShWSURFTykKICAgICBTdHJpbmcgbWVkaWFDb250
cm9sc0Zvcm1hdHRlZFN0cmluZ0ZvckR1cmF0aW9uKGRvdWJsZSkgb3ZlcnJpZGU7Ci0jZW5kaWYK
LSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIFJldGFpblB0cjxOU0RhdGVD
b21wb25lbnRzRm9ybWF0dGVyPiBtX2R1cmF0aW9uRm9ybWF0dGVyOwotI2VuZGlmCiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLm1tCmluZGV4IDhi
NmM1ZWRiMzg0MjFjYzdiZWVkYzFjOTZlZmE0MjNkYjdhMjFjNTMuLjYzYTA1ZjY2NTI5MTBmMGFj
MmM4ODg2OTVmMmI3ODAwZmZhN2Q3OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNvY29hLm1tCkBAIC0xMjcsMTEgKzEyNyw4IEBAIGJvb2wgUmVuZGVyVGhlbWVD
b2NvYTo6cGFpbnRBcHBsZVBheUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBj
b25zdCBQCiAKICNlbmRpZiAvLyBFTkFCTEUoQVBQTEVfUEFZKQogCi0jaWYgRU5BQkxFKFZJREVP
KQotCiBTdHJpbmcgUmVuZGVyVGhlbWVDb2NvYTo6bWVkaWFDb250cm9sc0Zvcm1hdHRlZFN0cmlu
Z0ZvckR1cmF0aW9uKGNvbnN0IGRvdWJsZSBkdXJhdGlvbkluU2Vjb25kcykKIHsKLSNpZiBFTkFC
TEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmICghc3RkOjppc2Zpbml0ZShkdXJhdGlv
bkluU2Vjb25kcykpCiAgICAgICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJpbmRlZmluaXRlIHRp
bWUiLCAiYWNjZXNzaWJpbGl0eSBoZWxwIHRleHQgZm9yIGFuIGluZGVmaW5pdGUgbWVkaWEgY29u
dHJvbGxlciB0aW1lIHZhbHVlIik7CiAKQEAgLTE0NSwxMSArMTQyLDYgQEAgU3RyaW5nIFJlbmRl
clRoZW1lQ29jb2E6Om1lZGlhQ29udHJvbHNGb3JtYXR0ZWRTdHJpbmdGb3JEdXJhdGlvbihjb25z
dCBkb3VibGUgZHUKICAgICB9CiAgICAgcmV0dXJuIFttX2R1cmF0aW9uRm9ybWF0dGVyLmdldCgp
IHN0cmluZ0Zyb21UaW1lSW50ZXJ2YWw6ZHVyYXRpb25JblNlY29uZHNdOwogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Ci0jZWxzZQotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotI2Vu
ZGlmCiB9CiAKLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQppbmRleCAwOWExMmRjNWRhYzFhMWIyNDllMDAxN2Ni
NGM2MGYyZGU5YmRmZDVhLi4xMmZkN2ZmZjJmZDkyN2EyZjBlMjdhOGMwZTdiM2RjNGY5MGJjNzBm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCkBAIC0xMzU4
LDMwICsxMzU4LDIxIEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnVwZGF0ZUNhY2hlZFN5c3RlbUZv
bnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHZhbHVlSUQsIEZvbnRDCiAgICAgZm9udERlc2NyaXB0
aW9uLnNldEl0YWxpYyhub3JtYWxJdGFsaWNWYWx1ZSgpKTsKIH0KIAotI2lmIEVOQUJMRShWSURF
TykKIFN0cmluZyBSZW5kZXJUaGVtZUlPUzo6bWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQogewot
I2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKG1fbGVnYWN5TWVkaWFD
b250cm9sc1N0eWxlU2hlZXQuaXNFbXB0eSgpKQogICAgICAgICBtX2xlZ2FjeU1lZGlhQ29udHJv
bHNTdHlsZVNoZWV0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTpbW05TQnVu
ZGxlIGJ1bmRsZUZvckNsYXNzOltXZWJDb3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xhc3NdXSBwYXRo
Rm9yUmVzb3VyY2U6QCJtZWRpYUNvbnRyb2xzaU9TIiBvZlR5cGU6QCJjc3MiXSBlbmNvZGluZzpO
U1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdOwogICAgIHJldHVybiBtX2xlZ2FjeU1lZGlh
Q29udHJvbHNTdHlsZVNoZWV0OwotI2Vsc2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNl
bmRpZgogfQogCiBTdHJpbmcgUmVuZGVyVGhlbWVJT1M6Om1vZGVybk1lZGlhQ29udHJvbHNTdHls
ZVNoZWV0KCkKIHsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLm1vZGVybk1lZGlhQ29udHJv
bHNFbmFibGVkKCkpIHsKICAgICAgICAgaWYgKG1fbWVkaWFDb250cm9sc1N0eWxlU2hlZXQuaXNF
bXB0eSgpKQogICAgICAgICAgICAgbV9tZWRpYUNvbnRyb2xzU3R5bGVTaGVldCA9IFtOU1N0cmlu
ZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6W1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2Vi
Q29yZVJlbmRlclRoZW1lQnVuZGxlIGNsYXNzXV0gcGF0aEZvclJlc291cmNlOkAibW9kZXJuLW1l
ZGlhLWNvbnRyb2xzIiBvZlR5cGU6QCJjc3MiIGluRGlyZWN0b3J5OkAibW9kZXJuLW1lZGlhLWNv
bnRyb2xzIl0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKICAgICAg
ICAgcmV0dXJuIG1fbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7CiAgICAgfQogICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwotI2Vsc2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgog
fQogCiB2b2lkIFJlbmRlclRoZW1lSU9TOjpwdXJnZUNhY2hlcygpCkBAIC0xMzk0LDcgKzEzODUs
NiBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwdXJnZUNhY2hlcygpCiAKIFN0cmluZyBSZW5kZXJU
aGVtZUlPUzo6bWVkaWFDb250cm9sc1NjcmlwdCgpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRS
T0xTX1NDUklQVCkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS5tb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChtX21lZGlh
Q29udHJvbHNTY3JpcHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBOU0J1bmRsZSAqYnVuZGxl
ID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltXZWJDb3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xh
c3NdXTsKQEAgLTE0MTksMjcgKzE0MDksMTggQEAgU3RyaW5nIFJlbmRlclRoZW1lSU9TOjptZWRp
YUNvbnRyb2xzU2NyaXB0KCkKICAgICAgICAgbV9sZWdhY3lNZWRpYUNvbnRyb2xzU2NyaXB0ID0g
c2NyaXB0QnVpbGRlci50b1N0cmluZygpOwogICAgIH0KICAgICByZXR1cm4gbV9sZWdhY3lNZWRp
YUNvbnRyb2xzU2NyaXB0OwotI2Vsc2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRp
ZgogfQogCiBTdHJpbmcgUmVuZGVyVGhlbWVJT1M6Om1lZGlhQ29udHJvbHNCYXNlNjRTdHJpbmdG
b3JJY29uTmFtZUFuZFR5cGUoY29uc3QgU3RyaW5nJiBpY29uTmFtZSwgY29uc3QgU3RyaW5nJiBp
Y29uVHlwZSkKIHsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmICgh
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5tb2Rlcm5NZWRpYUNvbnRy
b2xzRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIFN0cmlu
ZyBkaXJlY3RvcnkgPSAibW9kZXJuLW1lZGlhLWNvbnRyb2xzL2ltYWdlcyI7CiAgICAgTlNCdW5k
bGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViQ29yZVJlbmRlclRoZW1l
QnVuZGxlIGNsYXNzXV07CiAgICAgcmV0dXJuIFtbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZkZp
bGU6W2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6aWNvbk5hbWUgb2ZUeXBlOmljb25UeXBlIGluRGly
ZWN0b3J5OmRpcmVjdG9yeV1dIGJhc2U2NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9uczowXTsKLSNl
bHNlCi0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAotI2VuZGlmIC8vIEVO
QUJMRShWSURFTykKLQogc3RydWN0IENTU1ZhbHVlSURBbmRTZWxlY3RvciB7CiAgICAgQ1NTVmFs
dWVJRCBjc3NWYWx1ZUlEOwogICAgIFNFTCBzZWxlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAzMThlYjgyZDlhZDU3ZDdkNDM1YTVjMTc5Nzk2
OGQzZWU3NmI5ZmRjLi4wZTM3MTg4NjIyOGMxYjE2YjI2MmU4ZDZhMDYyOTQyY2I4MmM1OWM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC00OCwxNCAr
NDgsMTIgQEAKICNpbXBvcnQgIkxvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIgogI2ltcG9y
dCAiTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oIgogI2ltcG9ydCAiTG9jYWxpemVkU3Ry
aW5ncy5oIgotI2ltcG9ydCAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbXBvcnQgIlBhZ2Uu
aCIKICNpbXBvcnQgIlBhaW50SW5mby5oIgogI2ltcG9ydCAiUGF0aFV0aWxpdGllcy5oIgogI2lt
cG9ydCAiUmVuZGVyQXR0YWNobWVudC5oIgogI2ltcG9ydCAiUmVuZGVyTGF5ZXIuaCIKICNpbXBv
cnQgIlJlbmRlck1lZGlhLmgiCi0jaW1wb3J0ICJSZW5kZXJNZWRpYUNvbnRyb2xzLmgiCiAjaW1w
b3J0ICJSZW5kZXJQcm9ncmVzcy5oIgogI2ltcG9ydCAiUmVuZGVyU2xpZGVyLmgiCiAjaW1wb3J0
ICJSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5oIgpAQCAtMjk2LDMxICsyOTQsMjEgQEAgTlNWaWV3
ICpSZW5kZXJUaGVtZU1hYzo6ZG9jdW1lbnRWaWV3Rm9yKGNvbnN0IFJlbmRlck9iamVjdCYgbykg
Y29uc3QKICAgICByZXR1cm4gVGhlbWVNYWM6OmVuc3VyZWRWaWV3KCZvLnZpZXcoKS5mcmFtZVZp
ZXcoKSwgc3RhdGVzKTsKIH0KIAotI2lmIEVOQUJMRShWSURFTykKLQogU3RyaW5nIFJlbmRlclRo
ZW1lTWFjOjptZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NP
TlRST0xTX1NDUklQVCkKICAgICBpZiAobV9sZWdhY3lNZWRpYUNvbnRyb2xzU3R5bGVTaGVldC5p
c0VtcHR5KCkpCiAgICAgICAgIG1fbGVnYWN5TWVkaWFDb250cm9sc1N0eWxlU2hlZXQgPSBbTlNT
dHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlOltbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6
W1dlYkNvcmVSZW5kZXJUaGVtZUJ1bmRsZSBjbGFzc11dIHBhdGhGb3JSZXNvdXJjZTpAIm1lZGlh
Q29udHJvbHNBcHBsZSIgb2ZUeXBlOkAiY3NzIl0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmcgZXJyb3I6bmlsXTsKICAgICByZXR1cm4gbV9sZWdhY3lNZWRpYUNvbnRyb2xzU3R5bGVTaGVl
dDsKLSNlbHNlCi0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAogU3RyaW5n
IFJlbmRlclRoZW1lTWFjOjptb2Rlcm5NZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCiB7Ci0jaWYg
RU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5tb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCgpKSB7CiAg
ICAgICAgIGlmIChtX21lZGlhQ29udHJvbHNTdHlsZVNoZWV0LmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIG1fbWVkaWFDb250cm9sc1N0eWxlU2hlZXQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRl
bnRzT2ZGaWxlOltbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dlYkNvcmVSZW5kZXJUaGVtZUJ1
bmRsZSBjbGFzc11dIHBhdGhGb3JSZXNvdXJjZTpAIm1vZGVybi1tZWRpYS1jb250cm9scyIgb2ZU
eXBlOkAiY3NzIiBpbkRpcmVjdG9yeTpAIm1vZGVybi1tZWRpYS1jb250cm9scyJdIGVuY29kaW5n
Ok5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07CiAgICAgICAgIHJldHVybiBtX21lZGlh
Q29udHJvbHNTdHlsZVNoZWV0OwogICAgIH0KICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNl
bHNlCi0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJU
aGVtZU1hYzo6cHVyZ2VDYWNoZXMoKQpAQCAtMzM1LDcgKzMyMyw2IEBAIHZvaWQgUmVuZGVyVGhl
bWVNYWM6OnB1cmdlQ2FjaGVzKCkKIAogU3RyaW5nIFJlbmRlclRoZW1lTWFjOjptZWRpYUNvbnRy
b2xzU2NyaXB0KCkKIHsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLm1vZGVybk1lZGlhQ29u
dHJvbHNFbmFibGVkKCkpIHsKICAgICAgICAgaWYgKG1fbWVkaWFDb250cm9sc1NjcmlwdC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxl
Rm9yQ2xhc3M6W1dlYkNvcmVSZW5kZXJUaGVtZUJ1bmRsZSBjbGFzc11dOwpAQCAtMzUzLDI3ICsz
NDAsMTggQEAgU3RyaW5nIFJlbmRlclRoZW1lTWFjOjptZWRpYUNvbnRyb2xzU2NyaXB0KCkKICAg
ICAgICAgbV9sZWdhY3lNZWRpYUNvbnRyb2xzU2NyaXB0ID0gbWFrZVN0cmluZyhTdHJpbmcgeyBs
b2NhbGl6ZWRTdHJpbmdzIH0sIFN0cmluZyB7IHNjcmlwdCB9KTsKICAgICB9CiAgICAgcmV0dXJu
IG1fbGVnYWN5TWVkaWFDb250cm9sc1NjcmlwdDsKLSNlbHNlCi0gICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7Ci0jZW5kaWYKIH0KIAogU3RyaW5nIFJlbmRlclRoZW1lTWFjOjptZWRpYUNvbnRyb2xz
QmFzZTY0U3RyaW5nRm9ySWNvbk5hbWVBbmRUeXBlKGNvbnN0IFN0cmluZyYgaWNvbk5hbWUsIGNv
bnN0IFN0cmluZyYgaWNvblR5cGUpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQ
VCkKICAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubW9k
ZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
CiAKICAgICBOU1N0cmluZyAqZGlyZWN0b3J5ID0gQCJtb2Rlcm4tbWVkaWEtY29udHJvbHMvaW1h
Z2VzIjsKICAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltX
ZWJDb3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xhc3NdXTsKICAgICByZXR1cm4gW1tOU0RhdGEgZGF0
YVdpdGhDb250ZW50c09mRmlsZTpbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTppY29uTmFtZSBvZlR5
cGU6aWNvblR5cGUgaW5EaXJlY3Rvcnk6ZGlyZWN0b3J5XV0gYmFzZTY0RW5jb2RlZFN0cmluZ1dp
dGhPcHRpb25zOjBdOwotI2Vsc2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgog
fQogCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQotCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJP
TFMpCiAKIFN0cmluZyBSZW5kZXJUaGVtZU1hYzo6aW1hZ2VDb250cm9sc1N0eWxlU2hlZXQoKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDk0NWRkZmQ1NzZkMjZm
ZTNiODI3OGNkMjY5MGVjMGZhNGU4ZjVlZjYuLjdhMjVlYWIzNTFjYTM5MTNhOTcwZDQwODJhZjRi
MTdiNDUyZTMwMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTQ1MzEs
MTIgKzQ1MzEsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6cGF0aFN0cmluZ1dp
dGhTaHJpbmtXcmFwcGVkUmVjdHMoY29uc3QgVmVjdG9yPGRvdQogCiBTdHJpbmcgSW50ZXJuYWxz
OjpnZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1c0ZvckVsZW1lbnQoSFRNTE1lZGlhRWxlbWVu
dCYgbWVkaWFFbGVtZW50KQogewotI2lmICFFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQot
ICAgIFVOVVNFRF9QQVJBTShtZWRpYUVsZW1lbnQpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLSNl
bHNlCiAgICAgcmV0dXJuIG1lZGlhRWxlbWVudC5nZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1
cygpOwotI2VuZGlmCiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395203</attachid>
            <date>2020-04-01 14:42:28 -0700</date>
            <delta_ts>2020-04-01 15:31:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209875-20200401144227.patch</filename>
            <type>text/plain</type>
            <size>214585</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5MzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmRjMzc2NGI5NjMwYzlk
Nzc0ZjczM2FmNGEyNGU4YWRhNzA4ODZhMi4uNTc5NjQ2NDkxYTA0NjQ1YjEzYmNiYmNhMGYwMDlh
Mzc2YTM4ZTE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAyMC0wNC0wMSAgRXJp
YyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdW51
c2VkIG1lZGlhIGNvbnRyb2xzIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwOTg3NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjExNzI3Mzg+
CisKKyAgICAgICAgUmVtb3ZlIGNvZGUgZm9yIHRoZSwgbm93IHVudXNlZCwgQysrIGJhc2VkIG1l
ZGlhIGNvbnRyb2xzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuCisKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OnRleHRUcmFja0NvbnRhaW5lcik6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0Lmg6CisgICAgICAgICogTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRnJvbVJlbmRlcmVyKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmg6IFJlbW92ZWQuCisgICAgICAgICogZG9t
L05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzTWVkaWFDb250cm9sRWxlbWVudCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc01lZGlhQ29udHJvbHMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6On5IVE1MTWVkaWFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVy
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGF1c2VBZnRl
ckRldGFjaGVkVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRh
dGVSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RN
ZWRpYVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
TG9hZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRO
ZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y2hhbmdl
TmV0d29ya1N0YXRlRnJvbUxvYWRpbmdUb0lkbGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50Ojpwcm9ncmVzc0V2ZW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpwbGF5YmFja1Byb2dyZXNzVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjphZGRUZXh0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6cmVtb3ZlVGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OmRpZEFkZFRleHRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjplbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVDYXB0aW9uQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmxheW91dFNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja3MpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJDaGFyYWN0ZXJpc3RpY0NoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlVm9sdW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZGlkQmVjb21lRnVsbHNjcmVlbkVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6d2lsbFN0b3BCZWluZ0Z1bGxzY3Jl
ZW5FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFj
a1JlYWR5U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OmNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0Q2xvc2VkQ2FwdGlvbnNW
aXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZU1l
ZGlhQ29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y2FwdGlv
blByZWZlcmVuY2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
OjpzZXRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Omdl
dEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OmNsb3NlQ2FwdGlvblRyYWNrc0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFDb250cm9scyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpoYXNNZWRpYUNvbnRyb2xzIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0
ZU1lZGlhQ29udHJvbHMpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFDb250cm9sc0hv
c3QpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVz
Lmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
Lmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbXBhcmVDdWVJbnRlcnZhbEZvckRpc3BsYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50
Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6cHJvY2Vzc0Fj
dGl2ZVZUVEN1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50Ojp1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFN0cm9r
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y2xlYXJU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjplbnRlcmVk
RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50OjpleGl0ZWRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVZpZGVvRGlzcGxheVNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6dXBkYXRlU2l6ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp0
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6aGlkZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpzaG93KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6Omlz
U2hvd2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50Ojpsb2dnZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nSWRlbnRpZmllciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojps
b2dDaGFubmVsIGNvbnN0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01l
ZGlhQ29udHJvbHMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29u
dHJvbHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
ZWRpYUFGLmNwcDoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZTo6c2V0UGFnZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJN
ZWRpYUNvbnRyb2xzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVk
aWFDb250cm9scy5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ29jb2EuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ29jb2E6Om1lZGlhQ29udHJvbHNGb3JtYXR0
ZWRTdHJpbmdGb3JEdXJhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6Om1lZGlhQ29udHJvbHNTdHls
ZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjptb2Rlcm5NZWRpYUNv
bnRyb2xzU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6bWVk
aWFDb250cm9sc1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6bWVk
aWFDb250cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5kVHlwZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6Om1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjptb2Rlcm5NZWRpYUNvbnRyb2xzU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6bWVkaWFDb250cm9sc1NjcmlwdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6bWVkaWFDb250cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5k
VHlwZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpnZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1c0ZvckVsZW1lbnQpOgor
CiAyMDIwLTAzLTMxICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFtpUGFkXSBVc2UgQVZBdWRpb1Nlc3Npb24gdG8gZGV0ZWN0IEFpclBsYXkgcm91dGUg
Y2hhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xz
L01lZGlhQ29udHJvbHNIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250
cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKaW5kZXggNTA4YjlhMThlZWYyMzgzYWI2MWI5OWNm
NjVmNTY1MmJjYjk1NzY3Ny4uMjc1MjYxZTk5OGQzMWYxNjg5MjlhNDkyMzg3NjdhODFhZjM0ODI0
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlh
Q29udHJvbHNIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJv
bHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCkBAIC0yNSwxNCArMjUsMTIgQEAKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLQogI2luY2x1
ZGUgIk1lZGlhQ29udHJvbHNIb3N0LmgiCiAKICNpbmNsdWRlICJDYXB0aW9uVXNlclByZWZlcmVu
Y2VzLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgorI2luY2x1ZGUgIk1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTE1OSwxMSAr
MTU3LDEwIEBAIHZvaWQgTWVkaWFDb250cm9sc0hvc3Q6OnNldFNlbGVjdGVkVGV4dFRyYWNrKFRl
eHRUcmFjayogdHJhY2spCiAKIEVsZW1lbnQqIE1lZGlhQ29udHJvbHNIb3N0Ojp0ZXh0VHJhY2tD
b250YWluZXIoKQogewotICAgIGlmICghbV90ZXh0VHJhY2tDb250YWluZXIgJiYgbV9tZWRpYUVs
ZW1lbnQpIHsKLSAgICAgICAgbV90ZXh0VHJhY2tDb250YWluZXIgPSBNZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkp
OwotICAgICAgICBtX3RleHRUcmFja0NvbnRhaW5lci0+c2V0TWVkaWFDb250cm9sbGVyKG1fbWVk
aWFFbGVtZW50LmdldCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fdGV4dFRyYWNrQ29udGFpbmVy
LmdldCgpOworICAgIGlmICghbV90ZXh0VHJhY2tDb250YWluZXIgJiYgbV9tZWRpYUVsZW1lbnQp
CisgICAgICAgIG1fdGV4dFRyYWNrQ29udGFpbmVyID0gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29u
dGFpbmVyRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLCAqbV9tZWRp
YUVsZW1lbnQpOworCisgICAgICAgIHJldHVybiBtX3RleHRUcmFja0NvbnRhaW5lci5nZXQoKTsK
IH0KIAogdm9pZCBNZWRpYUNvbnRyb2xzSG9zdDo6dXBkYXRlVGV4dFRyYWNrQ29udGFpbmVyKCkK
QEAgLTMyMSw1ICszMTgsMyBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0Ojpjb21wYWN0TW9kZSgp
IGNvbnN0CiB9CiAKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCmluZGV4IGU0MGY1MWYzM2Nm
MThkZmJlNTI2OGZlYTExYzc1MDkyZDU3MWFiOGIuLjQxNGNiMGNiNTZhMmYyODVhZDI0YzljNTIx
OWY0ODlmZjRlZTBhZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFj
b250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCkBAIC0yNSw4ICsyNSw2IEBACiAKICNw
cmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLQogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WYXJpYW50Lmg+CkBAIC0xMDQsNCArMTAyLDMgQEAgcHJpdmF0ZToKIAogfQogCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQppbmRleCA1Y2VhNWUxYzVlYmIwMDU1Yzg0MzMzZmJm
NGViMWM4NmQyZWM2YjY4Li41MzdlZWU3ZGFjYzdkYzQ0NmQ5ODk5NmQ4NGRiNWQxZGEzNGYxZWE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1
Z2luUmVwbGFjZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCkBAIC0yNSw4ICsyNSw2IEBACiAKICNpbXBvcnQg
ImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLQogI2ltcG9y
dCAiUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKIAogI2ltcG9ydCAiQ29tbW9uVk0uaCIK
QEAgLTQzNyw0ICs0MzUsMyBAQCBKU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNl
bWVudDo6ZXJyb3JMb2coSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUpCiAKIH0KIAotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDNkZTI1YzQwYTZlOTVkM2RiZDU3Mzg3NmJiNGZhMTYyZWZmZTcy
ZDUuLjNiYTI0ZDcxYzUyZjk0OGNkY2ZhYjhhZjkwYzNjY2E4M2E5ODBmZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC00NDcsNyArNDQ3LDYgQEAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5j
cHAKIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwCiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5TWF0aE1MRWxlbWVudC5jcHAKLWFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29u
dHJvbHMuY3BwCiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAKIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNwcAogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAKQEAgLTEzNjgsOSArMTM2Nyw3IEBAIGh0bWwv
cGFyc2VyL1hTU0F1ZGl0b3JEZWxlZ2F0ZS5jcHAKIGh0bWwvc2hhZG93L0F1dG9GaWxsQnV0dG9u
RWxlbWVudC5jcHAKIGh0bWwvc2hhZG93L0RhdGFMaXN0QnV0dG9uRWxlbWVudC5jcHAKIGh0bWwv
c2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcAotaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
RWxlbWVudFR5cGVzLmNwcAotaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCi1o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAoraHRtbC9zaGFkb3cvTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudC5jcHAKIGh0bWwvc2hhZG93L1Byb2dyZXNzU2hhZG93RWxl
bWVudC5jcHAKIGh0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKIGh0bWwvc2hhZG93
L1NwaW5CdXR0b25FbGVtZW50LmNwcApAQCAtMjE5MCw3ICsyMTg3LDYgQEAgcmVuZGVyaW5nL1Jl
bmRlckxpc3RJdGVtLmNwcAogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCiByZW5kZXJp
bmcvUmVuZGVyTWFycXVlZS5jcHAKIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAKLXJlbmRlcmlu
Zy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAog
cmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxv
dy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA5ZWNlYTYwYmVkY2Y4YzMzOGI0ZDg3NDc1ZDNhZGYxNTk4YWRiZTljLi5mYWY0
MzY3YWRiMGU1YWRmZGU3MGEyMGNlZjJhYjllNTdkNTQ4N2E1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MzgsNyArNjM4LDYg
QEAKIAkJMUQ5RjBGQzEyMTIyMDI5QjAwNUQ4RkQ0IC8qIFNoYXJlRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMURDNTU0MDAyMTFCQThDODAwNEI3
ODBFIC8qIFNoYXJlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTFEQkMxQjU2MjM0N0IzRDIwMEI5MDFBRiAvKiBQaWN0dXJlSW5QaWN0dXJl
T2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFEQkMxQjU1MjM0N0IzRDIwMEI5MDFBRiAvKiBQaWN0dXJlSW5QaWN0dXJlT2JzZXJ2ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxRjM2RUE5
QzFFMjFCQTE3MDA2MjFFMjUgLyogV2ViQmFja2dyb3VuZFRhc2tDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjM2RUE5QTFFMjFCQTE3
MDA2MjFFMjUgLyogV2ViQmFja2dyb3VuZFRhc2tDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUYzQzNCRUIxMzVDQUYzQzAwQjhD
MUFDIC8qIE1lZGlhQ29udHJvbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFGM0MzQkU5MTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmgg
Ki87IH07CiAJCTFGNzJCRjBCMTg3RkQ0NUMwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1lbW9y
eUhhbmRsZXJJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFGNzJCRjA5MTg3RkQ0MjcwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1lbW9yeUhhbmRs
ZXJJT1MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxRjg3NTZCMjFFMjJDMzM1MDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjg3
NTZCMTFFMjJCRUVGMDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUZBRkJG
MTkxNUE1RkE3NDAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUZBRkJGMTYxNUE1RkE1MjAwMDgzQTIwIC8qIFVU
SVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xMDg2LDcgKzEwODUsNyBAQAogCQk0MTZFNkZFOTFCQkQxMkU1MDAwQTYwNDMgLyog
UmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEQ4IC8qIFJlYWRhYmxlU3RyZWFt
QnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0MTZFNkZFOTFCQkQxMkU1MDAwQTYwNTMgLyogV3JpdGFibGVTdHJlYW1CdWlsdGlucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYx
QkIzMTEwRDAwQjc2NEU4IC8qIFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTZGRDI1RjI0MEZBNEU1MDA2
NjYxRDggLyogTm93UGxheWluZ0luZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxNkZEMjVEMjQwRUUxQUUwMDY2NjFEOCAvKiBOb3dQbGF5aW5nSW5m
by5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTQx
NzI1M0FCMTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE3MjUzQTkxMzU0QkJCQzAw
MzYwRjJBIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmggKi87IH07CisJCTQxNzI1M0FCMTM1NEJC
QkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTcyNTNBOTEzNTRC
QkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oICov
OyB9OwogCQk0MTc2MTJBRjFFM0E5OTQwMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2lu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTc2
MTJBQjFFM0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2ludC5jcHAgKi87IH07
CiAJCTQxNzYxMkIwMUUzQTk5NDAwMEMzRDgxRCAvKiBMaWJXZWJSVENNZWRpYUVuZHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTc2MTJBQzFF
M0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2ludC5oICovOyB9OwogCQk0MTc2
MTJCMTFFM0E5OTQwMDBDM0Q4MUQgLyogTGliV2ViUlRDUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNzYxMkFE
MUUzQTk5M0IwMEMzRDgxRCAvKiBMaWJXZWJSVENQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwICov
OyB9OwpAQCAtNDU2Niw3ICs0NTY1LDYgQEAKIAkJREU1Rjg2NTkxRkEyQUYyNDAwNkRCNjNCIC8q
IFVuaWZpZWRTb3VyY2U2MS1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IERFNUY4NjNBMUZBMkFGMDcwMDZEQjYzQiAvKiBVbmlmaWVkU291cmNlNjEt
bW0ubW0gKi87IH07CiAJCURFNzcxMDg2MUZBMkYwRDYwMDQ2MDAxNiAvKiBXZWJBcmNoaXZlRHVt
cFN1cHBvcnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMTc2M0YzQzFFMjA1MjM0MDAxRDU4REUgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0Lm1tICov
OyB9OwogCQlERUJDQ0REMjE2NjQ2RTgyMDBBNDUyRTEgLyogUmVuZGVyTWVkaWFDb250cm9scy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU0OUIzMDgx
NjVGMkZFMTAwMTAzMzhEIC8qIFJlbmRlck1lZGlhQ29udHJvbHMuaCAqLzsgfTsKLQkJREVCQ0NE
RDQxNjY0NkVBRjAwQTQ1MkUxIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU0OUIzMDAxNjVGMkZDNjAw
MTAzMzhEIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oICovOyB9OwogCQlERUNBN0Q5MzFG
OUU2N0I1MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTEzMS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERUNBN0Q2RDFGOUU2MUNGMDBFM0I2NjEgLyog
VW5pZmllZFNvdXJjZTEzMS5jcHAgKi87IH07CiAJCURFQ0E3RDk0MUY5RTY3QjUwMEUzQjY2MSAv
KiBVbmlmaWVkU291cmNlMTMyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IERFQ0E3RDdFMUY5RTYxRTMwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMTMy
LmNwcCAqLzsgfTsKIAkJREVDQTdEOTUxRjlFNjdCNTAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2Ux
MzMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREVD
QTdEODAxRjlFNjFFNTAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxMzMuY3BwICovOyB9OwpAQCAt
NjYzNCw4ICs2NjMyLDYgQEAKIAkJMURFRjA2REUyMzNEMkUxQzAwRUUyMjhEIC8qIERvY3VtZW50
UGljdHVyZUluUGljdHVyZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRG9jdW1lbnRQaWN0
dXJlSW5QaWN0dXJlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUYzNkVBOUEx
RTIxQkExNzAwNjIxRTI1IC8qIFdlYkJhY2tncm91bmRUYXNrQ29udHJvbGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJCYWNrZ3JvdW5kVGFza0NvbnRyb2xsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUYzNkVBOUIxRTIxQkExNzAwNjIxRTI1IC8q
IFdlYkJhY2tncm91bmRUYXNrQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdlYkJhY2tncm91bmRUYXNrQ29udHJvbGxlci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUYzQzNCRTgxMzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29u
dHJvbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFDb250
cm9scy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFGM0MzQkU5MTM1Q0FGM0Mw
MEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1lZGlhQ29udHJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUY3MkJG
MDgxODdGRDQyNzAwMDlCQ0IzIC8qIFRpbGVDb250cm9sbGVyTWVtb3J5SGFuZGxlcklPUy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaWxlQ29udHJvbGxlck1lbW9y
eUhhbmRsZXJJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRjcyQkYwOTE4
N0ZENDI3MDAwOUJDQjMgLyogVGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5kbGVySU9TLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbGVDb250cm9sbGVyTWVtb3J5SGFuZGxlcklP
Uy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRjg3NTZCMDFFMjJCRUVGMDA0MkM0
MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzQ0OCw4ICs3NDQ0LDggQEAKIAkJNDE2
RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtlclJlcG9ydGluZ1Byb3h5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlclJlcG9ydGluZ1Byb3h5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNkZEMjVEMjQwRUUxQUUwMDY2NjFEOCAvKiBOb3dQbGF5
aW5nSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb3dQbGF5aW5nSW5m
by5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTcwQTJFOTFEOEMwQ0MwMDAzMTg0
NTIgLyogSlNET01XcmFwcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTRE9NV3JhcHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxNzI1
M0E4MTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxNzI1M0E5MTM1NEJCQkMwMDM2MEYyQSAvKiBN
ZWRpYUNvbnRyb2xFbGVtZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
ZWRpYUNvbnRyb2xFbGVtZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTcy
NTNBODEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDE3MjUzQTkxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MTc2MTJBQjFFM0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2lu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMaWJXZWJSVENNZWRp
YUVuZHBvaW50LmNwcDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBvaW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE3NjEyQUMxRTNBOTkzQjAwQzNEODFE
IC8qIExpYldlYlJUQ01lZGlhRW5kcG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gTGliV2ViUlRDTWVkaWFFbmRwb2ludC5oOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJU
Q01lZGlhRW5kcG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE3NjEyQUQx
RTNBOTkzQjAwQzNEODFEIC8qIExpYldlYlJUQ1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMaWJXZWJSVENQZWVyQ29ubmVjdGlv
bkJhY2tlbmQuY3BwOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJUQ1BlZXJDb25uZWN0aW9uQmFj
a2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDU3Miw4ICsxNDU2OCw2
IEBACiAJCURCRkNCMEVCRkY1Q0Q3N0VCRUIzNTk1RiAvKiBSZW5kZXJNYXRoTUxQYWRkZWQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWF0aE1MUGFkZGVk
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREQwNUZFMEIwQjhCQTNDNjAwOUFD
REZFIC8qIFdlYkNvcmVPYmpDRXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJDb3JlT2JqQ0V4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
RDc2M0JCMTA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5keWxpYiAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIi
OyBuYW1lID0gbGlieG1sMi5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYnhtbDIuZHlsaWI7IHNv
dXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07Ci0JCURFNDlCMkZGMTY1RjJGQzYwMDEwMzM4RCAv
KiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJREU0OUIzMDAxNjVGMkZDNjAwMTAzMzhEIC8qIE1lZGlhQ29udHJvbEVs
ZW1lbnRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUNvbnRy
b2xFbGVtZW50VHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREU0OUIzMDcx
NjVGMkZFMTAwMTAzMzhEIC8qIFJlbmRlck1lZGlhQ29udHJvbHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWVkaWFDb250cm9scy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFNDlCMzA4MTY1RjJGRTEwMDEwMzM4RCAvKiBSZW5kZXJN
ZWRpYUNvbnRyb2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1l
ZGlhQ29udHJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREU1RjgzQjIxRkEx
ODY3NjAwNkRCNjNBIC8qIFVuaWZpZWRTb3VyY2UzMDEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gVW5pZmllZFNvdXJjZTMwMS5jcHA7IHBhdGggPSAiRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTMwMS5jcHAiOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTgyNTAsMTIgKzE4MjQ0LDggQEAK
IAkJCQlBN0M5QUJGNzEzNTdBM0JGMDBGNTUwM0YgLyogRGV0YWlsc01hcmtlckNvbnRyb2wuaCAq
LywKIAkJCQk1MTAxOTJEMzE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVt
ZW50LmNwcCAqLywKIAkJCQk1MTAxOTJENDE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9s
c1Jvb3RFbGVtZW50LmggKi8sCi0JCQkJNDE3MjUzQTgxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlh
Q29udHJvbEVsZW1lbnRzLmNwcCAqLywKLQkJCQk0MTcyNTNBOTEzNTRCQkJDMDAzNjBGMkEgLyog
TWVkaWFDb250cm9sRWxlbWVudHMuaCAqLywKLQkJCQlERTQ5QjJGRjE2NUYyRkM2MDAxMDMzOEQg
LyogTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcCAqLywKLQkJCQlERTQ5QjMwMDE2NUYyRkM2
MDAxMDMzOEQgLyogTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmggKi8sCi0JCQkJMUYzQzNCRTgx
MzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMuY3BwICovLAotCQkJCTFGM0MzQkU5MTM1
Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggKi8sCisJCQkJNDE3MjUzQTgxMzU0QkJC
QzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuY3BwICov
LAorCQkJCTQxNzI1M0E5MTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50LmggKi8sCiAJCQkJRTRFMjQzODIxREFCOTUzRTAwQzI2RTRCIC8qIG1l
dGVyRWxlbWVudFNoYWRvdy5jc3MgKi8sCiAJCQkJQTcxNUU2NTAxMzRCQkJFQzAwRDhFNzEzIC8q
IFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHAgKi8sCiAJCQkJQTcxNUU2NTExMzRCQkJFQzAwRDhF
NzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5oICovLApAQCAtMzE4MTgsMTIgKzMxODA4LDEw
IEBACiAJCQkJQ0RDQzlCQ0YyMjM4N0U5QTAwRkZCNTFDIC8qIE1lZGlhQ2FwYWJpbGl0aWVzRGVj
b2RpbmdJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRENDOUJEMTIyMzg3RUFBMDBGRkI1MUMg
LyogTWVkaWFDYXBhYmlsaXRpZXNFbmNvZGluZ0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTA3
OEUwOTNBMTdEMTZFMUMwMDQyMEFBMSAvKiBNZWRpYUNvbnN0cmFpbnRzLmggaW4gSGVhZGVycyAq
LywKLQkJCQk0MTcyNTNBQjEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sRWxlbWVudHMu
aCBpbiBIZWFkZXJzICovLAotCQkJCURFQkNDREQ0MTY2NDZFQUYwMEE0NTJFMSAvKiBNZWRpYUNv
bnRyb2xFbGVtZW50VHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjY1Q0M4MTQ1QjFFNzUw
MEM0QzdBQSAvKiBNZWRpYUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjY1Q0NB
MTQ1QjQ0ODgwMEM0QzdBQSAvKiBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTFGM0MzQkVCMTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDREFCNkQyOTE3QzdERTZDMDBDNjBCMzQgLyogTWVkaWFDb250cm9s
c0hvc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNzI1M0FCMTM1NEJCQkMwMDM2MEYyQSAvKiBN
ZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDREYyQjAwNDE4MUYwNTlDMDBGMkI0MjQgLyogTWVkaWFEZXNjcmlwdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTUxNDVCOTAxQjNBMUNFMDAwNjYyQkY3IC8qIE1lZGlhRGV2aWNlSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUVBNzI1RDMxQUNBQkQ0NzAwRUFEMTdCIC8qIE1lZGlhRGV2
aWNlcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcAppbmRleCBkN2Y1YzRjOGYzOTc5MGMxMDZlOGJmZDY1YzRlODU1NzE4
ZDg5MzZkLi4zYTE5ODI3OTBhZWJhZTg5MjIyZDY5ODY3MWMyMGM0MGEwZTc5OGZmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTQ0LDcg
KzQ0LDYgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJveC5oIgogI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1hdGhN
TEVsZW1lbnQuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oIgogI2lu
Y2x1ZGUgIkFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdC5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxp
dHlNZW51TGlzdC5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5oIgpA
QCAtNzUsNiArNzQsNyBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTExhYmVsRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWV0ZXJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgpA
QCAtMTEyLDEwICsxMTIsNiBAQAogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8
d3RmL1NldEZvclNjb3BlLmg+CiAKLSNpZiBFTkFCTEUoVklERU8pCi0jaW5jbHVkZSAiTWVkaWFD
b250cm9sRWxlbWVudHMuaCIKLSNlbmRpZgotCiAjaWYgQ09NUElMRVIoTVNWQykKIC8vIFNlZSBo
dHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzF3ZWE1endlLmFzcHgKICNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQpAQCAtNTI5LDEyICs1MjUsNiBAQCBzdGF0aWMg
UmVmPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNyZWF0ZUZyb21SZW5kZXJlcihSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0OjpjcmVh
dGUocmVuZGVyZXIpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgLy8gbWVkaWEg
Y29udHJvbHMKLSAgICBpZiAobm9kZSAmJiBub2RlLT5pc01lZGlhQ29udHJvbEVsZW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OmNyZWF0ZShyZW5kZXJl
cik7Ci0jZW5kaWYKLQogICAgIGlmIChpczxSZW5kZXJTVkdSb290PigqcmVuZGVyZXIpKQogICAg
ICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVNWR1Jvb3Q6OmNyZWF0ZShyZW5kZXJlcik7CiAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlN
ZWRpYUNvbnRyb2xzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU1lZGlhQ29udHJvbHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTJk
ODQwM2IzNGJiZjdlMThmNDAxYzM4OTMzOWY2YTYxNGRhZGZhLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzM2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShWSURFTykKLQotI2luY2x1ZGUg
IkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmgiCi0KLSNpbmNsdWRlICJBWE9iamVjdENhY2hl
LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJp
bmdzLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwotCi0KLUFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OkFjY2Vzc2liaWxpdHlN
ZWRpYUNvbnRyb2woUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLSAgICA6IEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QocmVuZGVyZXIpCi17Ci19Ci0KLVJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBB
Y2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
LXsKLSAgICBBU1NFUlQocmVuZGVyZXItPm5vZGUoKSk7Ci0KLSAgICBzd2l0Y2ggKG1lZGlhQ29u
dHJvbEVsZW1lbnRUeXBlKHJlbmRlcmVyLT5ub2RlKCkpKSB7Ci0gICAgY2FzZSBNZWRpYVNsaWRl
cjoKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lOjpjcmVhdGUocmVu
ZGVyZXIpOwotCi0gICAgY2FzZSBNZWRpYUN1cnJlbnRUaW1lRGlzcGxheToKLSAgICBjYXNlIE1l
ZGlhVGltZVJlbWFpbmluZ0Rpc3BsYXk6Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5TWVk
aWFUaW1lRGlzcGxheTo6Y3JlYXRlKHJlbmRlcmVyKTsKLQotICAgIGNhc2UgTWVkaWFDb250cm9s
c1BhbmVsOgotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWlu
ZXI6OmNyZWF0ZShyZW5kZXJlcik7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sKHJlbmRlcmVyKSk7Ci0gICAgfQot
fQotCi1NZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpj
b250cm9sVHlwZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcigp
LT5ub2RlKCkpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWVsaW5lQ29udGFpbmVyOyAvLyBUaW1l
bGluZSBjb250YWluZXIgaXMgbm90IGFjY2Vzc2libGUuCi0KLSAgICByZXR1cm4gbWVkaWFDb250
cm9sRWxlbWVudFR5cGUocmVuZGVyZXIoKS0+bm9kZSgpKTsKLX0KLQotY29uc3QgU3RyaW5nJiBB
Y2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpjb250cm9sVHlwZU5hbWUoKSBjb25zdAotewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhRW50ZXJGdWxsc2NyZWVu
QnV0dG9uTmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiRW50ZXJGdWxsc2NyZWVuQnV0dG9u
IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhRXhpdEZ1
bGxzY3JlZW5CdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJFeGl0RnVsbHNjcmVl
bkJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRp
YU11dGVCdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJNdXRlQnV0dG9uIikpOwot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhUGxheUJ1dHRvbk5h
bWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlBsYXlCdXR0b24iKSk7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFTZWVrQmFja0J1dHRvbk5hbWUoTUFLRV9T
VEFUSUNfU1RSSU5HX0lNUEwoIlNlZWtCYWNrQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhU2Vla0ZvcndhcmRCdXR0b25OYW1lKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCJTZWVrRm9yd2FyZEJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVJld2luZEJ1dHRvbk5hbWUoTUFLRV9TVEFUSUNf
U1RSSU5HX0lNUEwoIlJld2luZEJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgU3RyaW5nPiBtZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b25OYW1lKE1BS0VfU1RBVElD
X1NUUklOR19JTVBMKCJSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhVW5NdXRlQnV0dG9uTmFtZShNQUtFX1NUQVRJ
Q19TVFJJTkdfSU1QTCgiVW5NdXRlQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBTdHJpbmc+IG1lZGlhUGF1c2VCdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19J
TVBMKCJQYXVzZUJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3Ry
aW5nPiBtZWRpYVN0YXR1c0Rpc3BsYXlOYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJTdGF0
dXNEaXNwbGF5IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1l
ZGlhQ3VycmVudFRpbWVEaXNwbGF5KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJDdXJyZW50VGlt
ZURpc3BsYXkiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVk
aWFUaW1lUmVtYWluaW5nRGlzcGxheShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVGltZVJlbWFp
bmluZ0Rpc3BsYXkiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4g
bWVkaWFTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBM
KCJTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b24iKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IFN0cmluZz4gbWVkaWFIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b25OYW1lKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCJIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24iKSk7Ci0KLSAgICBzd2l0
Y2ggKGNvbnRyb2xUeXBlKCkpIHsKLSAgICBjYXNlIE1lZGlhRW50ZXJGdWxsc2NyZWVuQnV0dG9u
OgotICAgICAgICByZXR1cm4gbWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b25OYW1lOwotICAgIGNh
c2UgTWVkaWFFeGl0RnVsbHNjcmVlbkJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhRXhpdEZ1
bGxzY3JlZW5CdXR0b25OYW1lOwotICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uOgotICAgICAgICBy
ZXR1cm4gbWVkaWFNdXRlQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhUGxheUJ1dHRvbjoKLSAg
ICAgICAgcmV0dXJuIG1lZGlhUGxheUJ1dHRvbk5hbWU7Ci0gICAgY2FzZSBNZWRpYVNlZWtCYWNr
QnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFTZWVrQmFja0J1dHRvbk5hbWU7Ci0gICAgY2Fz
ZSBNZWRpYVNlZWtGb3J3YXJkQnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFTZWVrRm9yd2Fy
ZEJ1dHRvbk5hbWU7Ci0gICAgY2FzZSBNZWRpYVJld2luZEJ1dHRvbjoKLSAgICAgICAgcmV0dXJu
IG1lZGlhUmV3aW5kQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1
dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvbk5hbWU7Ci0g
ICAgY2FzZSBNZWRpYVVuTXV0ZUJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhVW5NdXRlQnV0
dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhUGF1c2VCdXR0b246Ci0gICAgICAgIHJldHVybiBtZWRp
YVBhdXNlQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhU3RhdHVzRGlzcGxheToKLSAgICAgICAg
cmV0dXJuIG1lZGlhU3RhdHVzRGlzcGxheU5hbWU7Ci0gICAgY2FzZSBNZWRpYUN1cnJlbnRUaW1l
RGlzcGxheToKLSAgICAgICAgcmV0dXJuIG1lZGlhQ3VycmVudFRpbWVEaXNwbGF5OwotICAgIGNh
c2UgTWVkaWFUaW1lUmVtYWluaW5nRGlzcGxheToKLSAgICAgICAgcmV0dXJuIG1lZGlhVGltZVJl
bWFpbmluZ0Rpc3BsYXk7Ci0gICAgY2FzZSBNZWRpYVNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbjoK
LSAgICAgICAgcmV0dXJuIG1lZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uTmFtZTsKLSAgICBj
YXNlIE1lZGlhSGlkZUNsb3NlZENhcHRpb25zQnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFI
aWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b25OYW1lOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eU1lZGlhQ29udHJvbDo6YWNjZXNzaWJpbGl0eVRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlU
ZXh0PiYgdGV4dE9yZGVyKSBjb25zdAotewotICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGFjY2Vz
c2liaWxpdHlEZXNjcmlwdGlvbigpOwotICAgIGlmICghZGVzY3JpcHRpb24uaXNFbXB0eSgpKQot
ICAgICAgICB0ZXh0T3JkZXIuYXBwZW5kKEFjY2Vzc2liaWxpdHlUZXh0KGRlc2NyaXB0aW9uLCBB
Y2Nlc3NpYmlsaXR5VGV4dFNvdXJjZTo6QWx0ZXJuYXRpdmUpKTsKLQotICAgIFN0cmluZyB0aXRs
ZSA9IHRoaXMtPnRpdGxlKCk7Ci0gICAgaWYgKCF0aXRsZS5pc0VtcHR5KCkpCi0gICAgICAgIHRl
eHRPcmRlci5hcHBlbmQoQWNjZXNzaWJpbGl0eVRleHQodGl0bGUsIEFjY2Vzc2liaWxpdHlUZXh0
U291cmNlOjpBbHRlcm5hdGl2ZSkpOwotCi0gICAgU3RyaW5nIGhlbHB0ZXh0ID0gaGVscFRleHQo
KTsKLSAgICBpZiAoIWhlbHB0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgdGV4dE9yZGVyLmFwcGVu
ZChBY2Nlc3NpYmlsaXR5VGV4dChoZWxwdGV4dCwgQWNjZXNzaWJpbGl0eVRleHRTb3VyY2U6Okhl
bHApKTsKLX0KLSAgICAKLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OnRpdGxl
KCkgY29uc3QKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBjb250
cm9sc1BhbmVsKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJDb250cm9sc1BhbmVsIikpOwotCi0g
ICAgaWYgKGNvbnRyb2xUeXBlKCkgPT0gTWVkaWFDb250cm9sc1BhbmVsKQotICAgICAgICByZXR1
cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmluZyhjb250cm9sc1BhbmVsKTsKLQot
ICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0aXRsZSgpOwotfQotCi1TdHJp
bmcgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmluZyhj
b250cm9sVHlwZU5hbWUoKSk7Ci19Ci0KLVN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9s
OjpoZWxwVGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVs
ZW1lbnRIZWxwVGV4dChjb250cm9sVHlwZU5hbWUoKSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0
eU1lZGlhQ29udHJvbDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAotewot
ICAgIGlmICghbV9yZW5kZXJlciB8fCBtX3JlbmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAh
PSBWaXNpYmlsaXR5OjpWaXNpYmxlIHx8IGNvbnRyb2xUeXBlKCkgPT0gTWVkaWFUaW1lbGluZUNv
bnRhaW5lcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gYWNjZXNzaWJpbGl0
eUlzSWdub3JlZEJ5RGVmYXVsdCgpOwotfQotCi1BY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmls
aXR5TWVkaWFDb250cm9sOjpyb2xlVmFsdWUoKSBjb25zdAotewotICAgIHN3aXRjaCAoY29udHJv
bFR5cGUoKSkgewotICAgIGNhc2UgTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b246Ci0gICAgY2Fz
ZSBNZWRpYUV4aXRGdWxsc2NyZWVuQnV0dG9uOgotICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uOgot
ICAgIGNhc2UgTWVkaWFQbGF5QnV0dG9uOgotICAgIGNhc2UgTWVkaWFTZWVrQmFja0J1dHRvbjoK
LSAgICBjYXNlIE1lZGlhU2Vla0ZvcndhcmRCdXR0b246Ci0gICAgY2FzZSBNZWRpYVJld2luZEJ1
dHRvbjoKLSAgICBjYXNlIE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvbjoKLSAgICBjYXNlIE1l
ZGlhVW5NdXRlQnV0dG9uOgotICAgIGNhc2UgTWVkaWFQYXVzZUJ1dHRvbjoKLSAgICBjYXNlIE1l
ZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uOgotICAgIGNhc2UgTWVkaWFIaWRlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b246Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Um9sZTo6QnV0dG9uOwot
Ci0gICAgY2FzZSBNZWRpYVN0YXR1c0Rpc3BsYXk6Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5Um9sZTo6U3RhdGljVGV4dDsKLQotICAgIGNhc2UgTWVkaWFUaW1lbGluZUNvbnRhaW5lcjoK
LSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSb2xlOjpHcm91cDsKLQotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Um9sZTo6
VW5rbm93bjsKLX0KLQotCi0vLwotLy8gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWlu
ZXIKLQotQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXI6OkFjY2Vzc2liaWxpdHlN
ZWRpYUNvbnRyb2xzQ29udGFpbmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi0gICAgOiBBY2Nl
c3NpYmlsaXR5TWVkaWFDb250cm9sKHJlbmRlcmVyKQotewotfQotCi1SZWY8QWNjZXNzaWJpbGl0
eU9iamVjdD4gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXI6OmNyZWF0ZShSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFjY2Vzc2li
aWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyKHJlbmRlcmVyKSk7Ci19Ci0KLVN0cmluZyBBY2Nl
c3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmlu
ZyhlbGVtZW50VHlwZU5hbWUoKSk7Ci19Ci0KLVN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250
cm9sc0NvbnRhaW5lcjo6aGVscFRleHQoKSBjb25zdAotewotICAgIHJldHVybiBsb2NhbGl6ZWRN
ZWRpYUNvbnRyb2xFbGVtZW50SGVscFRleHQoZWxlbWVudFR5cGVOYW1lKCkpOwotfQotCi1ib29s
IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpjb250cm9sbGluZ1ZpZGVvRWxl
bWVudCgpIGNvbnN0Ci17Ci0gICAgYXV0byBlbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KCpt
X3JlbmRlcmVyKTsKLSAgICByZXR1cm4gIWVsZW1lbnQgfHwgZWxlbWVudC0+aXNWaWRlbygpOwot
fQotCi1jb25zdCBTdHJpbmcmIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpl
bGVtZW50VHlwZU5hbWUoKSBjb25zdAotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25z
dCBTdHJpbmc+IHZpZGVvRWxlbWVudChNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVmlkZW9FbGVt
ZW50IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGF1ZGlvRWxl
bWVudChNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQXVkaW9FbGVtZW50IikpOwotCi0gICAgaWYg
KGNvbnRyb2xsaW5nVmlkZW9FbGVtZW50KCkpCi0gICAgICAgIHJldHVybiB2aWRlb0VsZW1lbnQ7
Ci0gICAgcmV0dXJuIGF1ZGlvRWxlbWVudDsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5TWVkaWFD
b250cm9sc0NvbnRhaW5lcjo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAot
ewotICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZhdWx0KCk7Ci19Ci0KLS8v
Ci0vLyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZQotCi1BY2Nlc3NpYmlsaXR5TWVkaWFUaW1l
bGluZTo6QWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
LSAgICA6IEFjY2Vzc2liaWxpdHlTbGlkZXIocmVuZGVyZXIpCi17Ci19Ci0KLVJlZjxBY2Nlc3Np
YmlsaXR5T2JqZWN0PiBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6Y3JlYXRlKFJlbmRlck9i
amVjdCogcmVuZGVyZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQWNjZXNzaWJpbGl0
eU1lZGlhVGltZWxpbmUocmVuZGVyZXIpKTsKLX0KLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRp
YVRpbWVsaW5lOjp2YWx1ZURlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBOb2RlKiBub2RlID0g
bV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUp
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBmbG9hdCB0aW1lID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLnZhbHVlKCkudG9GbG9hdCgpOwotICAgIHJldHVybiBs
b2NhbGl6ZWRNZWRpYVRpbWVEZXNjcmlwdGlvbih0aW1lKTsKLX0KLQotU3RyaW5nIEFjY2Vzc2li
aWxpdHlNZWRpYVRpbWVsaW5lOjpoZWxwVGV4dCgpIGNvbnN0Ci17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IFN0cmluZz4gc2xpZGVyKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJT
bGlkZXIiKSk7Ci0gICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRIZWxwVGV4
dChzbGlkZXIpOwotfQotCi0KLS8vCi0vLyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheQot
Ci1BY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6QWNjZXNzaWJpbGl0eU1lZGlhVGltZURp
c3BsYXkoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLSAgICA6IEFjY2Vzc2liaWxpdHlNZWRpYUNv
bnRyb2wocmVuZGVyZXIpCi17Ci19Ci0KLVJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBBY2Nlc3Np
YmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3BsYXko
cmVuZGVyZXIpKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6Y29t
cHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAotewotICAgIGlmICghbV9yZW5kZXJl
ciB8fCBtX3JlbmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNp
YmxlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghbV9yZW5kZXJlci0+c3R5bGUo
KS53aWR0aCgpLnZhbHVlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIHJldHVy
biBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZhdWx0KCk7Ci19Ci0KLVN0cmluZyBBY2Nlc3Np
YmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3QK
LXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBjdXJyZW50VGltZURp
c3BsYXkoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkN1cnJlbnRUaW1lRGlzcGxheSIpKTsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0aW1lUmVtYWluaW5nRGlzcGxh
eShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVGltZVJlbWFpbmluZ0Rpc3BsYXkiKSk7Ci0KLSAg
ICBpZiAoY29udHJvbFR5cGUoKSA9PSBNZWRpYUN1cnJlbnRUaW1lRGlzcGxheSkKLSAgICAgICAg
cmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRTdHJpbmcoY3VycmVudFRpbWVEaXNw
bGF5KTsKLQotICAgIHJldHVybiBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50U3RyaW5nKHRp
bWVSZW1haW5pbmdEaXNwbGF5KTsKLX0KLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVE
aXNwbGF5OjpzdHJpbmdWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFt
X3JlbmRlcmVyLT5ub2RlKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGZsb2F0
IHRpbWUgPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQqPihtX3Jl
bmRlcmVyLT5ub2RlKCkpLT5jdXJyZW50VmFsdWUoKTsKLSAgICByZXR1cm4gbG9jYWxpemVkTWVk
aWFUaW1lRGVzY3JpcHRpb24oc3RkOjphYnModGltZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYWQ2ZDk2ZTM2Zjg1YjM3OWU1Y2Y5NWNlNGI0NWNi
M2Q2ZjdjZDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoVklERU8p
Ci0KLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5U2xpZGVyLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250
cm9sRWxlbWVudHMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBY2Nlc3NpYmls
aXR5TWVkaWFDb250cm9sIDogcHVibGljIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QgewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlKFJlbmRlck9i
amVjdCopOwotICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2woKSA9IGRlZmF1
bHQ7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlVmFsdWUoKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIFN0cmluZyB0aXRsZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBhY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgaGVscFRleHQo
KSBjb25zdCBvdmVycmlkZTsKLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IEFjY2Vzc2liaWxp
dHlNZWRpYUNvbnRyb2woUmVuZGVyT2JqZWN0Kik7Ci0gICAgTWVkaWFDb250cm9sRWxlbWVudFR5
cGUgY29udHJvbFR5cGUoKSBjb25zdDsKLSAgICBjb25zdCBTdHJpbmcmIGNvbnRyb2xUeXBlTmFt
ZSgpIGNvbnN0OwotICAgIGJvb2wgY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25z
dCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGFjY2Vzc2liaWxpdHlUZXh0KFZlY3Rv
cjxBY2Nlc3NpYmlsaXR5VGV4dD4mKSBjb25zdCBvdmVycmlkZTsKLX07Ci0KLQotY2xhc3MgQWNj
ZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUgZmluYWwgOiBwdWJsaWMgQWNjZXNzaWJpbGl0eVNsaWRl
ciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjcmVhdGUo
UmVuZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVhbCB+QWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUo
KSA9IGRlZmF1bHQ7Ci0KLSAgICBTdHJpbmcgaGVscFRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBTdHJpbmcgdmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgot
ICAgIGV4cGxpY2l0IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lKFJlbmRlck9iamVjdCopOwot
Ci0gICAgYm9vbCBpc01lZGlhVGltZWxpbmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9Ci19OwotCi0KLWNsYXNzIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyIGZp
bmFsIDogcHVibGljIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wgewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlKFJlbmRlck9iamVjdCopOwotICAg
IHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyKCkgPSBkZWZhdWx0
OwotCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gQWNjZXNzaWJpbGl0eVJvbGU6OlRvb2xiYXI7IH0KLQotICAgIFN0cmluZyBoZWxwVGV4
dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24o
KSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBBY2Nlc3NpYmlsaXR5
TWVkaWFDb250cm9sc0NvbnRhaW5lcihSZW5kZXJPYmplY3QqKTsKLSAgICBib29sIGNvbnRyb2xs
aW5nVmlkZW9FbGVtZW50KCkgY29uc3Q7Ci0gICAgY29uc3QgU3RyaW5nJiBlbGVtZW50VHlwZU5h
bWUoKSBjb25zdDsKLSAgICBib29sIGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29u
c3Qgb3ZlcnJpZGU7Ci19OwotCi0KLWNsYXNzIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5
IGZpbmFsIDogcHVibGljIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wgewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlKFJlbmRlck9iamVjdCopOwot
ICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5KCkgPSBkZWZhdWx0Owot
Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uVGltZXI7IH0KLQotICAgIFN0cmluZyBz
dHJpbmdWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVz
Y3JpcHRpb24oKSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBBY2Nl
c3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheShSZW5kZXJPYmplY3QqKTsKLSAgICBib29sIGlzTWVk
aWFDb250cm9sTGFiZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgYm9v
bCBjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IG92ZXJyaWRlOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgKaW5kZXggNmQ5NzZlOWRmYmRkZDg4YjU3Yzc5YjFlMzE4YjIwYWY5YmYwZjNmMi4uZDIwOGM3
MTc5NjkxNzJhYzQxMTM3ODAyMmQ0OGNhODdlYWMwZWYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC0xOTgs
OCArMTk4LDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNBZnRlclBzZXVkb0VsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBwc2V1ZG9JZCgpID09IFBzZXVkb0lkOjpBZnRlcjsgfQogICAgIFBzZXVkb0lk
IHBzZXVkb0lkKCkgY29uc3QgeyByZXR1cm4gKGlzRWxlbWVudE5vZGUoKSAmJiBoYXNDdXN0b21T
dHlsZVJlc29sdmVDYWxsYmFja3MoKSkgPyBjdXN0b21Qc2V1ZG9JZCgpIDogUHNldWRvSWQ6Ok5v
bmU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhQ29udHJvbHMoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICB2aXJ0dWFs
IGJvb2wgaXNXZWJWVFRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggNzE1MTdhNzc5YWQ2
ZjVkNzU5MTcwOWU4YmYwODQ2MmE2Yjc3NDRlMi4uMDI5YjhhNzE1MzI5OWFmMmViMGQ0NzU3Yjhl
MzdmNDQ4NWNkMjdmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2hy
b21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ29tbW9uVk0uaCIK
ICNpbmNsdWRlICJDb250ZW50UnVsZUxpc3RSZXN1bHRzLmgiCkBAIC02MCwxMCArNjEsMTEgQEAK
ICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVy
cmVkLmgiCiAjaW5jbHVkZSAiSlNIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNNZWRp
YUNvbnRyb2xzSG9zdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiTWVk
aWFDb250cm9scy5oIgorI2luY2x1ZGUgIk1lZGlhQ29udHJvbHNIb3N0LmgiCiAjaW5jbHVkZSAi
TWVkaWFEb2N1bWVudC5oIgogI2luY2x1ZGUgIk1lZGlhRXJyb3IuaCIKICNpbmNsdWRlICJNZWRp
YUZyYWdtZW50VVJJUGFyc2VyLmgiCkBAIC05Nyw2ICs5OSw3IEBACiAjaW5jbHVkZSAiVXNlckNv
bnRlbnRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKICNp
bmNsdWRlICJWaWRlb1BsYXliYWNrUXVhbGl0eS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1NjcmlwdE9iamVjdC5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4QXJyYXkuaD4K
ICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgpAQCAtMTU5LDEy
ICsxNjIsNiBAQAogI2luY2x1ZGUgIk1lZGlhS2V5cy5oIgogI2VuZGlmCiAKLSNpZiBFTkFCTEUo
TUVESUFfQ09OVFJPTFNfU0NSSVBUKQotI2luY2x1ZGUgIkpTTWVkaWFDb250cm9sc0hvc3QuaCIK
LSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzSG9zdC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1NjcmlwdE9iamVjdC5oPgotI2VuZGlmCi0KICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjZW5kaWYKQEAgLTQ0NywxMCArNDQ0LDggQEAg
SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCYgZG9jdW0KICAgICAsIG1faGFzRXZlck5vdGlmaWVkQWJvdXRQbGF5
aW5nKGZhbHNlKQogICAgICwgbV9oYXNFdmVySGFkQXVkaW8oZmFsc2UpCiAgICAgLCBtX2hhc0V2
ZXJIYWRWaWRlbyhmYWxzZSkKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAg
ICwgbV9tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IoZmFsc2UpCiAgICAgLCBt
X2hhdmVTZXRVcENhcHRpb25Db250YWluZXIoZmFsc2UpCi0jZW5kaWYKICAgICAsIG1faXNTY3J1
YmJpbmdSZW1vdGVseShmYWxzZSkKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgLCBtX3Ry
YWNrc0FyZVJlYWR5KHRydWUpCkBAIC02MDAsMTAgKzU5NSw4IEBAIEhUTUxNZWRpYUVsZW1lbnQ6
On5IVE1MTWVkaWFFbGVtZW50KCkKICAgICB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJQV9D
T05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKG1faXNvbGF0ZWRXb3JsZCkKICAgICAgICAgbV9pc29s
YXRlZFdvcmxkLT5jbGVhcldyYXBwZXJzKCk7Ci0jZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9T
RVNTSU9OKQogICAgIGlmIChtX3Nlc3Npb24pIHsKQEAgLTgyMiwxOSArODE1LDcgQEAgUmVuZGVy
UHRyPFJlbmRlckVsZW1lbnQ+IEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJl
cihSZW5kZXJTdHlsZSYmIHMKIAogYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpjaGlsZFNob3VsZENy
ZWF0ZVJlbmRlcmVyKGNvbnN0IE5vZGUmIGNoaWxkKSBjb25zdAogewotI2lmIEVOQUJMRShNRURJ
QV9DT05UUk9MU19TQ1JJUFQpCiAgICAgcmV0dXJuIGhhc1NoYWRvd1Jvb3RQYXJlbnQoY2hpbGQp
ICYmIEhUTUxFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNoaWxkKTsKLSNlbHNl
Ci0gICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAvLyA8bWVkaWE+IGRvZXNuJ3QgYWxsb3cgaXRzIGNvbnRlbnQsIGluY2x1ZGluZyBzaGFkb3cg
c3VidHJlZSwgdG8KLSAgICAvLyBiZSByZW5kZXJlZC4gU28gdGhpcyBzaG91bGQgcmV0dXJuIGZh
bHNlIGZvciBtb3N0IG9mIHRoZSBjaGlsZHJlbi4KLSAgICAvLyBPbmUgZXhjZXB0aW9uIGlzIGEg
c2hhZG93IHRyZWUgYnVpbHQgZm9yIHJlbmRlcmluZyBjb250cm9scyB3aGljaCBzaG91bGQgYmUg
dmlzaWJsZS4KLSAgICAvLyBTbyB3ZSBsZXQgdGhlbSBnbyBoZXJlIGJ5IGNvbXBhcmluZyBpdHMg
c3VidHJlZSByb290IHdpdGggb25lIG9mIHRoZSBjb250cm9scy4KLSAgICByZXR1cm4gJm1lZGlh
Q29udHJvbHMoKS0+dHJlZVNjb3BlKCkgPT0gJmNoaWxkLnRyZWVTY29wZSgpCi0gICAgICAgICYm
IGhhc1NoYWRvd1Jvb3RQYXJlbnQoY2hpbGQpCi0gICAgICAgICYmIEhUTUxFbGVtZW50OjpjaGls
ZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNoaWxkKTsKLSNlbmRpZgogfQogCiBOb2RlOjpJbnNlcnRl
ZEludG9BbmNlc3RvclJlc3VsdCBIVE1MTWVkaWFFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3Rv
cihJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5z
ZXJ0ZWRUcmVlKQpAQCAtODcyLDggKzg1Myw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGF1
c2VBZnRlckRldGFjaGVkVGFzaygpCiAgICAgaWYgKG1faW5BY3RpdmVEb2N1bWVudCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFD
b250cm9scygpLT5oaWRlKCk7CiAgICAgaWYgKG1fbmV0d29ya1N0YXRlID4gTkVUV09SS19FTVBU
WSkKICAgICAgICAgcGF1c2UoKTsKICAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlICE9IFZp
ZGVvRnVsbHNjcmVlbk1vZGVOb25lKQpAQCAtOTIxLDEwICs5MDAsOCBAQCBpbmxpbmUgdm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVSZW5kZXJlcigpCiAgICAgaWYgKGF1dG8qIHJlbmRlcmVy
ID0gdGhpcy0+cmVuZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUZyb21FbGVtZW50
KCk7CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChtX21lZGlh
Q29udHJvbHNIb3N0KQogICAgICAgICBtX21lZGlhQ29udHJvbHNIb3N0LT51cGRhdGVDYXB0aW9u
RGlzcGxheVNpemVzKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRB
dHRhY2hSZW5kZXJlcnMoKQpAQCAtMTMwNCw5ICsxMjgxLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpzZWxlY3RNZWRpYVJlc291cmNlKCkKIAogICAgICAgICAvLyA1LiBJZiB0aGUgbWVkaWEg
ZWxlbWVudOKAmXMgYmxvY2tlZC1vbi1wYXJzZXIgZmxhZyBpcyBmYWxzZSwgdGhlbiBwb3B1bGF0
ZSB0aGUgbGlzdCBvZiBwZW5kaW5nIHRleHQgdHJhY2tzLgogI2lmIEVOQUJMRShWSURFT19UUkFD
SykKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29u
dHJvbHMoKS0+Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgpOwotCiAgICAgICAgIC8v
IEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja3NBcmVSZWFkeSB3aWxsIG5lZWQgIi4uLiB0aGUg
dGV4dCB0cmFja3Mgd2hvc2UgbW9kZSB3YXMgbm90IGluIHRoZQogICAgICAgICAvLyBkaXNhYmxl
ZCBzdGF0ZSB3aGVuIHRoZSBlbGVtZW50J3MgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29yaXRobSBs
YXN0IHN0YXJ0ZWQiLgogICAgICAgICAvLyBGSVhNRTogVXBkYXRlIHRoaXMgdG8gbWF0Y2ggInBv
cHVsYXRlIHRoZSBsaXN0IG9mIHBlbmRpbmcgdGV4dCB0cmFja3MiIHN0ZXAuCkBAIC0yMjM1LDEw
ICsyMjA5LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUxvYWRpbmdGYWlsZWQoTWVk
aWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKICAgICAgICAgbm9uZVN1cHBvcnRlZCgpOwog
CiAgICAgdXBkYXRlRGlzcGxheVN0YXRlKCk7Ci0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkg
ewotICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnJlc2V0KCk7Ci0gICAgICAgIG1lZGlhQ29udHJv
bHMoKS0+cmVwb3J0ZWRFcnJvcigpOwotICAgIH0KIAogICAgIEVSUk9SX0xPRyhMT0dJREVOVElG
SUVSLCAiZXJyb3IgPSAiLCBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSk7CiAKQEAgLTIyODMsMTYg
KzIyNTMsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXROZXR3b3JrU3RhdGUoTWVkaWFQ
bGF5ZXI6Ok5ldHdvcmtTdGF0ZSBzdGF0ZSkKICAgICAgICAgICAgIGNoYW5nZU5ldHdvcmtTdGF0
ZUZyb21Mb2FkaW5nVG9JZGxlKCk7CiAgICAgICAgIG1fY29tcGxldGVseUxvYWRlZCA9IHRydWU7
CiAgICAgfQotCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250
cm9scygpLT51cGRhdGVTdGF0dXNEaXNwbGF5KCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6Y2hhbmdlTmV0d29ya1N0YXRlRnJvbUxvYWRpbmdUb0lkbGUoKQogewogICAgIG1fcHJvZ3Jl
c3NFdmVudFRpbWVyLnN0b3AoKTsKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpICYmIG1fcGxh
eWVyLT5kaWRMb2FkaW5nUHJvZ3Jlc3MoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5idWZm
ZXJpbmdQcm9ncmVzc2VkKCk7CiAKICAgICAvLyBTY2hlZHVsZSBvbmUgbGFzdCBwcm9ncmVzcyBl
dmVudCBzbyB3ZSBndWFyYW50ZWUgdGhhdCBhdCBsZWFzdCBvbmUgaXMgZmlyZWQKICAgICAvLyBm
b3IgZmlsZXMgdGhhdCBsb2FkIHZlcnkgcXVpY2tseS4KQEAgLTI0MzcsOCArMjQwMiw2IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSBzdGF0ZSkKICNlbmRpZgogICAgICAgICBtX2luaXRpYWxseU11dGVkID0gbV92b2x1bWUgPCAw
LjA1IHx8IG11dGVkKCk7CiAKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAg
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+bG9hZGVkTWV0YWRhdGEoKTsKICAgICAgICAgdXBkYXRl
UmVuZGVyZXIoKTsKIAogICAgICAgICBpZiAoaXM8TWVkaWFEb2N1bWVudD4oZG9jdW1lbnQoKSkp
CkBAIC0yNTA1LDEzICsyNDY4LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRSZWFkeVN0
YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0YXRlKQogICAgICAgICBzZXRBdXRvcGxheUV2
ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZTo6UHJldmVudGVkQXV0
b3BsYXkpOwogICAgIH0KIAotICAgIGlmIChzaG91bGRVcGRhdGVEaXNwbGF5U3RhdGUpIHsKKyAg
ICBpZiAoc2hvdWxkVXBkYXRlRGlzcGxheVN0YXRlKQogICAgICAgICB1cGRhdGVEaXNwbGF5U3Rh
dGUoKTsKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkgewotICAgICAgICAgICAgbWVk
aWFDb250cm9scygpLT5yZWZyZXNoQ2xvc2VkQ2FwdGlvbnNCdXR0b25WaXNpYmlsaXR5KCk7Ci0g
ICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnVwZGF0ZVN0YXR1c0Rpc3BsYXkoKTsKLSAgICAg
ICAgfQotICAgIH0KIAogICAgIHVwZGF0ZVBsYXlTdGF0ZSgpOwogICAgIHVwZGF0ZU1lZGlhQ29u
dHJvbGxlcigpOwpAQCAtMjg1NSw4ICsyODEzLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpw
cm9ncmVzc0V2ZW50VGltZXJGaXJlZCgpCiAgICAgICAgIG1fcHJldmlvdXNQcm9ncmVzc1RpbWUg
PSB0aW1lOwogICAgICAgICBtX3NlbnRTdGFsbGVkRXZlbnQgPSBmYWxzZTsKICAgICAgICAgdXBk
YXRlUmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAg
ICAgIG1lZGlhQ29udHJvbHMoKS0+YnVmZmVyaW5nUHJvZ3Jlc3NlZCgpOwogICAgIH0gZWxzZSBp
ZiAodGltZWRlbHRhID4gM19zICYmICFtX3NlbnRTdGFsbGVkRXZlbnQpIHsKICAgICAgICAgc2No
ZWR1bGVFdmVudChldmVudE5hbWVzKCkuc3RhbGxlZEV2ZW50KTsKICAgICAgICAgbV9zZW50U3Rh
bGxlZEV2ZW50ID0gdHJ1ZTsKQEAgLTM3NDAsOCArMzY5Niw2IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKICAgICAgICAgaWYgKCFwcm9jZXNzaW5nTWVkaWFQ
bGF5ZXJDYWxsYmFjaygpKSB7CiAgICAgICAgICAgICBpZiAobV9wbGF5ZXIpIHsKICAgICAgICAg
ICAgICAgICBtX3BsYXllci0+c2V0TXV0ZWQoZWZmZWN0aXZlTXV0ZWQoKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgICAgICAgICAgbWVkaWFD
b250cm9scygpLT5jaGFuZ2VkTXV0ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAg
LTM5MDgsOSArMzg2Miw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxheWJhY2tQcm9ncmVz
c1RpbWVyRmlyZWQoKQogICAgIGlmICghcmVxdWVzdGVkUGxheWJhY2tSYXRlKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghbV9wYXVzZWQgJiYgaGFzTWVkaWFDb250cm9scygpKQotICAg
ICAgICBtZWRpYUNvbnRyb2xzKCktPnBsYXliYWNrUHJvZ3Jlc3NlZCgpOwotCiAjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQogICAgIHVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoY3VycmVudE1lZGlh
VGltZSgpKTsKICNlbmRpZgpAQCAtNDAzNiwxMiArMzk4Nyw2IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6bWVkaWFQbGF5ZXJEaWRSZW1vdmVWaWRlb1RyYWNrKFZpZGVvVHJhY2tQcml2YXRlJiB0
cmFjaykKICAgICB0cmFjay53aWxsQmVSZW1vdmVkKCk7CiB9CiAKLXZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6Y2xvc2VDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpCi17Ci0gICAgaWYgKGhhc01lZGlhQ29u
dHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5jbG9zZWRDYXB0aW9uVHJhY2tzQ2hh
bmdlZCgpOwotfQotCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZEF1ZGlvVHJhY2soUmVmPEF1
ZGlvVHJhY2s+JiYgdHJhY2spCiB7CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECkBAIC00MDY1
LDggKzQwMTAsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhSZWY8VGV4
dFRyYWNrPiYmIHRyYWNrKQogICAgIH0KIAogICAgIGVuc3VyZVRleHRUcmFja3MoKS5hcHBlbmQo
V1RGTW92ZSh0cmFjaykpOwotCi0gICAgY2xvc2VDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpOwogfQog
CiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFZpZGVvVHJhY2soUmVmPFZpZGVvVHJhY2s+JiYg
dHJhY2spCkBAIC00MDkxLDggKzQwMzQsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92
ZVRleHRUcmFjayhSZWY8VGV4dFRyYWNrPiYmIHRyYWNrLCBib29sIHNjaGVkdWxlRXZlbgogICAg
IHRyYWNrLT5jbGVhckNsaWVudCgpOwogICAgIGlmIChtX3RleHRUcmFja3MpCiAgICAgICAgIG1f
dGV4dFRyYWNrcy0+cmVtb3ZlKHRyYWNrLCBzY2hlZHVsZUV2ZW50KTsKLQotICAgIGNsb3NlQ2Fw
dGlvblRyYWNrc0NoYW5nZWQoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZW1vdmVW
aWRlb1RyYWNrKFJlZjxWaWRlb1RyYWNrPiYmIHRyYWNrKQpAQCAtNDE5Myw5ICs0MTM0LDYgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRUZXh0VHJhY2soSFRNTFRyYWNrRWxlbWVudCYg
dHJhY2tFbGVtZW50KQogICAgIC8vIGluIHRoZSBtYXJrdXAgaGF2ZSBiZWVuIGFkZGVkLgogICAg
IGlmICghbV9wYXJzaW5nSW5Qcm9ncmVzcykKICAgICAgICAgc2NoZWR1bGVDb25maWd1cmVUZXh0
VHJhY2tzKCk7Ci0KLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICBtZWRpYUNv
bnRyb2xzKCktPmNsb3NlZENhcHRpb25UcmFja3NDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6ZGlkUmVtb3ZlVGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQmIHRyYWNrRWxl
bWVudCkKQEAgLTQzNTksNyArNDI5Nyw5IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udHJvbGxl
ckpTVmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwKIAogdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpCiB7Ci0g
ICAgQVNTRVJUKCFtX2NyZWF0aW5nQ29udHJvbHMpOworICAgIGlmIChtX2NyZWF0aW5nQ29udHJv
bHMpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fY3JlYXRpbmdDb250cm9scyA9IHRydWU7CiAg
ICAgZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwogICAgIG1fY3JlYXRpbmdDb250cm9scyA9
IGZhbHNlOwpAQCAtNDM4Nyw3ICs0MzI3LDYgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpzZXR1
cEFuZENhbGxKUyhjb25zdCBKU1NldHVwRnVuY3Rpb24mIHRhc2spCiAKIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6dXBkYXRlQ2FwdGlvbkNvbnRhaW5lcigpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NP
TlRST0xTX1NDUklQVCkKICAgICBpZiAobV9oYXZlU2V0VXBDYXB0aW9uQ29udGFpbmVyKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTQ0MzIsMTMgKzQzNzEsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojp1cGRhdGVDYXB0aW9uQ29udGFpbmVyKCkKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9KTsKLQotI2VuZGlmCiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bGF5b3V0U2l6ZUNo
YW5nZWQoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKGF1
dG8gZnJhbWVWaWV3ID0gbWFrZVJlZlB0cihkb2N1bWVudCgpLnZpZXcoKSkpIHsKICAgICAgICAg
YXV0byB0YXNrID0gW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewogICAg
ICAgICAgICAgaWYgKGF1dG8gcm9vdCA9IHVzZXJBZ2VudFNoYWRvd1Jvb3QoKSkKQEAgLTQ0NDYs
NyArNDM4Miw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bGF5b3V0U2l6ZUNoYW5nZWQoKQog
ICAgICAgICB9OwogICAgICAgICBmcmFtZVZpZXctPnF1ZXVlUG9zdExheW91dENhbGxiYWNrKFdU
Rk1vdmUodGFzaykpOwogICAgIH0KLSNlbmRpZgogCiAgICAgaWYgKCFtX3JlY2VpdmVkTGF5b3V0
U2l6ZUNoYW5nZWQpIHsKICAgICAgICAgbV9yZWNlaXZlZExheW91dFNpemVDaGFuZ2VkID0gdHJ1
ZTsKQEAgLTQ1ODYsOCArNDUyMSw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJl
VGV4dFRyYWNrcygpCiAKICAgICB1cGRhdGVDYXB0aW9uQ29udGFpbmVyKCk7CiAgICAgY29uZmln
dXJlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAg
ICAgIG1lZGlhQ29udHJvbHMoKS0+Y2xvc2VkQ2FwdGlvblRyYWNrc0NoYW5nZWQoKTsKIH0KICNl
bmRpZgogCkBAIC01MTU0LDggKzUwODcsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
UGxheWVyQ2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCkKICAgICAgICAgbWVkaWFQbGF5ZXJSZW5kZXJp
bmdNb2RlQ2hhbmdlZCgpOwogICAgIH0KIAotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0g
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVzZXQoKTsKICAgICB1cGRhdGVSZW5kZXJlcigpOwog
CiAgICAgaWYgKCFwYXVzZWQoKSAmJiAhbV9tZWRpYVNlc3Npb24tPnBsYXliYWNrUGVybWl0dGVk
KCkpIHsKQEAgLTUzNTAsOSArNTI4MSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRl
Vm9sdW1lKCkKICAgICBkb2N1bWVudCgpLnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7CiAjZW5kaWYK
IAotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+
Y2hhbmdlZFZvbHVtZSgpOwotI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkK
IH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzY2hlZHVsZVVwZGF0ZVBsYXlTdGF0ZSgpCkBA
IC01MzgwLDggKzUzMDksNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0
ZSgpCiAgICAgICAgICAgICBtX3BsYXllci0+cGF1c2UoKTsKICAgICAgICAgcmVmcmVzaENhY2hl
ZFRpbWUoKTsKICAgICAgICAgbV9wbGF5YmFja1Byb2dyZXNzVGltZXIuc3RvcCgpOwotICAgICAg
ICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5w
bGF5YmFja1N0b3BwZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTQyNSw5ICs1
MzUyLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUoKQogICAgICAg
ICAgICAgbV9wbGF5ZXItPnBsYXkoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChoYXNNZWRp
YUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnBsYXliYWNrU3RhcnRl
ZCgpOwotCiAgICAgICAgIHN0YXJ0UGxheWJhY2tQcm9ncmVzc1RpbWVyKCk7CiAgICAgICAgIHNl
dFBsYXlpbmcodHJ1ZSk7CiAgICAgfSBlbHNlIHsKQEAgLTU0NDUsOSArNTM2OSw2IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUGxheVN0YXRlKCkKIAogICAgICAgICBpZiAoY291bGRQ
bGF5SWZFbm91Z2hEYXRhKCkpCiAgICAgICAgICAgICBwcmVwYXJlVG9QbGF5KCk7Ci0KLSAgICAg
ICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+
cGxheWJhY2tTdG9wcGVkKCk7CiAgICAgfQogCiAgICAgdXBkYXRlTWVkaWFDb250cm9sbGVyKCk7
CkBAIC02MDczLDggKzU5OTQsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNj
cmVlbihWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCiAKICAgICAgICAgZnVsbHNjcmVlbk1vZGVD
aGFuZ2VkKG1vZGUpOwogICAgICAgICBjb25maWd1cmVNZWRpYUNvbnRyb2xzKCk7Ci0gICAgICAg
IGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmVu
dGVyZWRGdWxsc2NyZWVuKCk7CiAgICAgICAgIGlmIChpczxIVE1MVmlkZW9FbGVtZW50PigqdGhp
cykpIHsKICAgICAgICAgICAgIEhUTUxWaWRlb0VsZW1lbnQmIGFzVmlkZW8gPSBkb3duY2FzdDxI
VE1MVmlkZW9FbGVtZW50PigqdGhpcyk7CiAgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS5wYWdl
KCktPmNocm9tZSgpLmNsaWVudCgpLnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKG1fdmlkZW9GdWxs
c2NyZWVuTW9kZSkpIHsKQEAgLTYxMTAsMTIgKzYwMjksOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OmV4aXRGdWxsc2NyZWVuKCkKICAgICBBU1NFUlQobV92aWRlb0Z1bGxzY3JlZW5Nb2RlICE9
IFZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKICAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlIG9sZFZp
ZGVvRnVsbHNjcmVlbk1vZGUgPSBtX3ZpZGVvRnVsbHNjcmVlbk1vZGU7CiAgICAgZnVsbHNjcmVl
bk1vZGVDaGFuZ2VkKFZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSNpZiBFTkFCTEUoTUVESUFf
Q09OVFJPTFNfU0NSSVBUKQogICAgIFJlZjxIVE1MTWVkaWFFbGVtZW50PiBwcm90ZWN0ZWRUaGlz
KCp0aGlzKTsgLy8gdXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJlc2VudGF0aW9uTW9kZUNoYW5n
ZSBjYWxscyBtZXRob2RzIHRoYXQgY2FuIHRyaWdnZXIgYXJiaXRyYXJ5IERPTSBtdXRhdGlvbnMu
CiAgICAgdXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJlc2VudGF0aW9uTW9kZUNoYW5nZSgpOwot
I2VuZGlmCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9s
cygpLT5leGl0ZWRGdWxsc2NyZWVuKCk7CiAKICAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpIHx8
ICFpczxIVE1MVmlkZW9FbGVtZW50PigqdGhpcykpCiAgICAgICAgIHJldHVybjsKQEAgLTYxOTgs
MTYgKzYxMTMsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRCZWNvbWVGdWxsc2NyZWVu
RWxlbWVudCgpCiB7CiAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIiwgZnVsbHNjcmVlbiBt
b2RlID0gIiwgZnVsbHNjcmVlbk1vZGUoKSk7CiAgICAgbV93YWl0aW5nVG9FbnRlckZ1bGxzY3Jl
ZW4gPSBmYWxzZTsKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICBtZWRpYUNv
bnRyb2xzKCktPmVudGVyZWRGdWxsc2NyZWVuKCk7CiAgICAgc2NoZWR1bGVVcGRhdGVQbGF5U3Rh
dGUoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp3aWxsU3RvcEJlaW5nRnVsbHNjcmVl
bkVsZW1lbnQoKQogewotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlh
Q29udHJvbHMoKS0+ZXhpdGVkRnVsbHNjcmVlbigpOwotCiAgICAgaWYgKGZ1bGxzY3JlZW5Nb2Rl
KCkgPT0gVmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKQogICAgICAgICBmdWxsc2NyZWVuTW9k
ZUNoYW5nZWQoVmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwogfQpAQCAtNjM0OCwxOSArNjI1OCwx
MSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKFRl
eHRUcmFjayogdHJhY2spCiAgICAgICAgIC8vIFRoZSBkaXNwbGF5IHRyZWVzIGV4aXN0IGFzIGxv
bmcgYXMgdGhlIHRyYWNrIGlzIGFjdGl2ZSwgaW4gdGhpcyBjYXNlLAogICAgICAgICAvLyBhbmQg
aWYgdGhlIHNhbWUgdHJhY2sgaXMgbG9hZGVkIGFnYWluIChmb3IgZXhhbXBsZSBpZiB0aGUgc3Jj
IGF0dHJpYnV0ZSB3YXMgY2hhbmdlZCksCiAgICAgICAgIC8vIGN1ZXMgY2FuIGJlIGFjY3VtdWxh
dGVkIHdpdGggdGhlIG9sZCBvbmVzLCB0aGF0J3Mgd2h5IHRoZXkgbmVlZHMgdG8gYmUgZmx1c2hl
ZAotICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICAgICAgbWVkaWFDb250
cm9scygpLT5jbGVhclRleHREaXNwbGF5Q29udGFpbmVyKCk7CiAgICAgICAgIHVwZGF0ZVRleHRU
cmFja0Rpc3BsYXkoKTsKICAgICB9CiAgICAgaWYgKG1fcGxheWVyICYmIG1fdGV4dFRyYWNrc1do
ZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuLmNvbnRhaW5zKHRyYWNrKSkgewogICAgICAgICBpZiAo
dHJhY2stPnJlYWRpbmVzc1N0YXRlKCkgIT0gVGV4dFRyYWNrOjpMb2FkaW5nKQogICAgICAgICAg
ICAgc2V0UmVhZHlTdGF0ZShtX3BsYXllci0+cmVhZHlTdGF0ZSgpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBUaGUgdHJhY2sgcmVhZGluZXNzIHN0YXRlIG1pZ2h0IGhhdmUgY2hhbmdlZCBh
cyBhIHJlc3VsdCBvZiB0aGUgdXNlcgotICAgICAgICAvLyBjbGlja2luZyB0aGUgY2FwdGlvbnMg
YnV0dG9uLiBJbiB0aGlzIGNhc2UsIGEgY2hlY2sgd2hldGhlciBhbGwgdGhlCi0gICAgICAgIC8v
IHJlc291cmNlcyBoYXZlIGZhaWxlZCBsb2FkaW5nIHNob3VsZCBiZSBkb25lIGluIG9yZGVyIHRv
IGhpZGUgdGhlIENDIGJ1dHRvbi4KLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSAmJiB0
cmFjay0+cmVhZGluZXNzU3RhdGUoKSA9PSBUZXh0VHJhY2s6OkZhaWxlZFRvTG9hZCkKLSAgICAg
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVmcmVzaENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJp
bGl0eSgpOwogICAgIH0KIH0KIApAQCAtNjM5MSw1MSArNjI5MywyNyBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkoVGV4dFRyYWNrVmlzaWJpbGl0eUNo
ZWNrVHlwZSBjaAogICAgIG1faGF2ZVZpc2libGVUZXh0VHJhY2sgPSBoYXZlVmlzaWJsZVRleHRU
cmFjazsKICAgICBtX2Nsb3NlZENhcHRpb25zVmlzaWJsZSA9IG1faGF2ZVZpc2libGVUZXh0VHJh
Y2s7CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmICghbV9oYXZl
VmlzaWJsZVRleHRUcmFjaykKICAgICAgICAgcmV0dXJuOwogCiAgICAgZW5zdXJlTWVkaWFDb250
cm9sc1NoYWRvd1Jvb3QoKTsKICAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0jZWxzZQot
ICAgIGlmICghbV9oYXZlVmlzaWJsZVRleHRUcmFjayAmJiAhaGFzTWVkaWFDb250cm9scygpICYm
ICFjcmVhdGVNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1lZGlhQ29u
dHJvbHMoKS0+Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgpOwotCi0gICAgdXBkYXRl
VGV4dFRyYWNrRGlzcGxheSgpOwotICAgIHVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoY3VycmVu
dE1lZGlhVGltZSgpKTsKLSNlbmRpZgogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0
ZVRleHRUcmFja0Rpc3BsYXkoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQp
CiAgICAgZW5zdXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QoKTsKICAgICBpZiAoIW1fbWVkaWFD
b250cm9sc0hvc3QpCiAgICAgICAgIG1fbWVkaWFDb250cm9sc0hvc3QgPSBNZWRpYUNvbnRyb2xz
SG9zdDo6Y3JlYXRlKCp0aGlzKTsKICAgICBtX21lZGlhQ29udHJvbHNIb3N0LT51cGRhdGVUZXh0
VHJhY2tDb250YWluZXIoKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYg
IWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFDb250
cm9scygpLT51cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQo
KQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgZW5zdXJlTWVkaWFD
b250cm9sc1NoYWRvd1Jvb3QoKTsKICAgICBpZiAoIW1fbWVkaWFDb250cm9sc0hvc3QpCiAgICAg
ICAgIG1fbWVkaWFDb250cm9sc0hvc3QgPSBNZWRpYUNvbnRyb2xzSG9zdDo6Y3JlYXRlKCp0aGlz
KTsKICAgICBtX21lZGlhQ29udHJvbHNIb3N0LT51cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkltYWdlSWZOZWVkZWQoKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYg
IWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFDb250
cm9scygpLT51cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQoKTsKLSNl
bmRpZgogfQogCiAjZW5kaWYKQEAgLTY0NTYsOCArNjMzNCw2IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgY2xvc2VkQ2FwdGlvblZpc2libGUp
CiAgICAgbWFya0NhcHRpb25BbmRTdWJ0aXRsZVRyYWNrc0FzVW5jb25maWd1cmVkKEltbWVkaWF0
ZWx5KTsKICAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CiAjZWxzZQotICAgIGlmIChoYXNN
ZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+Y2hhbmdlZENsb3NlZENh
cHRpb25zVmlzaWJpbGl0eSgpOwogI2VuZGlmCiB9CiAKQEAgLTY1NzYsNjIgKzY0NTIsNiBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKICNlbmRpZgogfQogCi1NZWRpYUNvbnRyb2xzKiBIVE1MTWVk
aWFFbGVtZW50OjptZWRpYUNvbnRyb2xzKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoTUVESUFfQ09O
VFJPTFNfU0NSSVBUKQotICAgIHJldHVybiBudWxscHRyOwotI2Vsc2UKLSAgICBhdXRvIHJvb3Qg
PSB1c2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBjaGlsZHJlbk9mVHlwZTxNZWRpYUNvbnRyb2xzPigqcm9v
dCkuZmlyc3QoKTsKLSNlbmRpZgotfQotCi1ib29sIEhUTUxNZWRpYUVsZW1lbnQ6Omhhc01lZGlh
Q29udHJvbHMoKSBjb25zdAotewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0g
ICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKLQotICAgIGlmIChhdXRvIHVzZXJBZ2VudCA9IHVzZXJB
Z2VudFNoYWRvd1Jvb3QoKSkgewotICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNoaWxkcmVu
T2ZUeXBlPE1lZGlhQ29udHJvbHM+KCpyb290KS5maXJzdCgpOwotICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8fCBub2RlLT5pc01lZGlhQ29udHJvbHMoKSk7
Ci0gICAgICAgIHJldHVybiBub2RlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRp
ZgotfQotCi1ib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlhQ29udHJvbHMoKQotewot
I2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0gICAgZW5zdXJlTWVkaWFDb250cm9s
c1NoYWRvd1Jvb3QoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIGlmIChoYXNNZWRp
YUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byBtZWRpYUNvbnRy
b2xzID0gTWVkaWFDb250cm9sczo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgIGlmICghbWVkaWFD
b250cm9scykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbWVkaWFDb250cm9scy0+c2V0
TWVkaWFDb250cm9sbGVyKG1fbWVkaWFDb250cm9sbGVyID8gbV9tZWRpYUNvbnRyb2xsZXIuZ2V0
KCkgOiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqPih0aGlzKSk7Ci0gICAg
bWVkaWFDb250cm9scy0+cmVzZXQoKTsKLSAgICBpZiAoaXNGdWxsc2NyZWVuKCkpCi0gICAgICAg
IG1lZGlhQ29udHJvbHMtPmVudGVyZWRGdWxsc2NyZWVuKCk7Ci0KLSAgICBlbnN1cmVVc2VyQWdl
bnRTaGFkb3dSb290KCkuYXBwZW5kQ2hpbGQobWVkaWFDb250cm9scyk7Ci0KLSAgICBpZiAoIWNv
bnRyb2xzKCkgfHwgIWlzQ29ubmVjdGVkKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMtPmhpZGUo
KTsKLQotICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi19Ci0KIGJvb2wgSFRNTE1lZGlhRWxlbWVu
dDo6c2hvdWxkRm9yY2VDb250cm9sc0Rpc3BsYXkoKSBjb25zdAogewogICAgIC8vIEFsd2F5cyBj
cmVhdGUgY29udHJvbHMgZm9yIGF1dG9wbGF5IHZpZGVvIHRoYXQgcmVxdWlyZXMgdXNlciBnZXN0
dXJlIGR1ZSB0byBiZWluZyBpbiBsb3cgcG93ZXIgbW9kZS4KQEAgLTY2NTgsMjMgKzY0NzgsMTAg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVNZWRpYUNvbnRyb2xzKCkKICAgICAg
ICAgcmVxdWlyZUNvbnRyb2xzID0gdHJ1ZTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE1FRElBX0NP
TlRST0xTX1NDUklQVCkKICAgICBpZiAoIXJlcXVpcmVDb250cm9scyB8fCAhaXNDb25uZWN0ZWQo
KSB8fCAhaW5BY3RpdmVEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBlbnN1cmVN
ZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpOwotI2Vsc2UKLSAgICBpZiAoIXJlcXVpcmVDb250cm9s
cyB8fCAhaXNDb25uZWN0ZWQoKSB8fCAhaW5BY3RpdmVEb2N1bWVudCgpKSB7Ci0gICAgICAgIGlm
IChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmhpZGUo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaGFzTWVkaWFDb250cm9scygp
ICYmICFjcmVhdGVNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1lZGlh
Q29udHJvbHMoKS0+c2hvdygpOwotI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CkBAIC02Njg0LDEzICs2NDkxLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjYXB0aW9uUHJl
ZmVyZW5jZXNDaGFuZ2VkKCkKICAgICBpZiAoIWlzVmlkZW8oKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT50
ZXh0VHJhY2tQcmVmZXJlbmNlc0NoYW5nZWQoKTsKLQotI2lmIEVOQUJMRShNRURJQV9DT05UUk9M
U19TQ1JJUFQpCiAgICAgaWYgKG1fbWVkaWFDb250cm9sc0hvc3QpCiAgICAgICAgIG1fbWVkaWFD
b250cm9sc0hvc3QtPnVwZGF0ZUNhcHRpb25EaXNwbGF5U2l6ZXMoTWVkaWFDb250cm9sc0hvc3Q6
OkZvcmNlVXBkYXRlOjpZZXMpOwotI2VuZGlmCiAKICAgICBpZiAobV9wbGF5ZXIpCiAgICAgICAg
IG1fcGxheWVyLT50cmFja3NDaGFuZ2VkKCk7CkBAIC02ODY4LDkgKzY2NzAsNiBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnNldENvbnRyb2xsZXIoUmVmUHRyPE1lZGlhQ29udHJvbGxlcj4mJiBj
b250cm9sbGVyKQogCiAgICAgaWYgKG1fbWVkaWFDb250cm9sbGVyKQogICAgICAgICBtX21lZGlh
Q29udHJvbGxlci0+YWRkTWVkaWFFbGVtZW50KCp0aGlzKTsKLQotICAgIGlmIChoYXNNZWRpYUNv
bnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+c2V0TWVkaWFDb250cm9sbGVyKG1f
bWVkaWFDb250cm9sbGVyID8gbV9tZWRpYUNvbnRyb2xsZXIuZ2V0KCkgOiBzdGF0aWNfY2FzdDxN
ZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqPih0aGlzKSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0Q29udHJvbGxlckZvckJpbmRpbmdzKE1lZGlhQ29udHJvbGxlciogY29udHJvbGxl
cikKQEAgLTczMTAsNyArNzEwOSw2IEBAIFJlZlB0cjxWaWRlb1BsYXliYWNrUXVhbGl0eT4gSFRN
TE1lZGlhRWxlbWVudDo6Z2V0VmlkZW9QbGF5YmFja1F1YWxpdHkoKQogICAgIHJldHVybiBWaWRl
b1BsYXliYWNrUXVhbGl0eTo6Y3JlYXRlKHRpbWVzdGFtcCwgbWV0cmljcy52YWx1ZSgpKTsKIH0K
IAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiBET01XcmFwcGVyV29ybGQmIEhU
TUxNZWRpYUVsZW1lbnQ6OmVuc3VyZUlzb2xhdGVkV29ybGQoKQogewogICAgIGlmICghbV9pc29s
YXRlZFdvcmxkKQpAQCAtNzU2OSw3ICs3MzY3LDYgQEAgU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6
OmdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKCkKIAogICAgIHJldHVybiBzdGF0dXM7CiB9
Ci0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKIAogdW5zaWduZWQgbG9u
ZyBsb25nIEhUTUxNZWRpYUVsZW1lbnQ6OmZpbGVTaXplKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggZmNkOGVkZmFiYzI4NTg2MjQzOTIwMjI3OTM4
M2EwODMyZGQ4ZDJjYi4uMWE3MjlmNDA5MWFjZGZjZjc2NWMwYmY1NjkxNjYyNWMyNWEyM2ZkZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTQ0Nyw4ICs0NDcsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBjbG9zZWRDYXB0aW9uc1Zpc2libGUoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2b2lkIHNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sKSBvdmVycmlkZTsKIAot
ICAgIE1lZGlhQ29udHJvbHMqIG1lZGlhQ29udHJvbHMoKSBjb25zdDsKLQogICAgIHZvaWQgc291
cmNlV2FzUmVtb3ZlZChIVE1MU291cmNlRWxlbWVudCYpOwogICAgIHZvaWQgc291cmNlV2FzQWRk
ZWQoSFRNTFNvdXJjZUVsZW1lbnQmKTsKIApAQCAtNTA4LDEzICs1MDYsMTAgQEAgcHVibGljOgog
ICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIHByZWxvYWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJlbG9hZDsgfQogICAgIE1lZGlhRWxlbWVudFNlc3Npb24mIG1lZGlhU2Vzc2lvbigpIGNvbnN0
IHsgcmV0dXJuICptX21lZGlhU2Vzc2lvbjsgfQogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xT
X1NDUklQVCkKICAgICB2b2lkIHBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKICAgICB2b2lkIHVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIGdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKCk7Ci0KICAgICBNZWRpYUNvbnRy
b2xzSG9zdCogbWVkaWFDb250cm9sc0hvc3QoKSB7IHJldHVybiBtX21lZGlhQ29udHJvbHNIb3N0
LmdldCgpOyB9Ci0jZW5kaWYKIAogICAgIGJvb2wgaXNEaXNhYmxpbmdTbGVlcCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2xlZXBEaXNhYmxlci5nZXQoKTsgfQogCkBAIC02MTMsMTEgKzYwOCw5IEBAIHBy
b3RlY3RlZDoKIAogICAgIFNlY3VyaXR5T3JpZ2luRGF0YSBkb2N1bWVudFNlY3VyaXR5T3JpZ2lu
KCkgY29uc3QgZmluYWw7CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAg
IGJvb2wgbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3I7IH0KICAgICB2b2lkIHNl
dE1lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3Rvcihib29sKTsKICAgICB2b2lkIHVw
ZGF0ZU1lZGlhQ29udHJvbHNBZnRlclByZXNlbnRhdGlvbk1vZGVDaGFuZ2UoKTsKLSNlbmRpZgog
CiAgICAgdm9pZCBzY2hlZHVsZUV2ZW50KGNvbnN0IEF0b21TdHJpbmcmKTsKIApAQCAtODUyLDgg
Kzg0NSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGVkVGltZSgpIGNvbnN0
OwogICAgIHZvaWQgcmVmcmVzaENhY2hlZFRpbWUoKSBjb25zdDsKIAotICAgIGJvb2wgaGFzTWVk
aWFDb250cm9scygpIGNvbnN0OwotICAgIGJvb2wgY3JlYXRlTWVkaWFDb250cm9scygpOwogICAg
IHZvaWQgY29uZmlndXJlTWVkaWFDb250cm9scygpOwogCiAgICAgdm9pZCBwcmVwYXJlTWVkaWFG
cmFnbWVudFVSSSgpOwpAQCAtODczLDExICs4NjQsOSBAQCBwcml2YXRlOgogICAgIGVudW0gY2xh
c3MgU2xlZXBUeXBlIHsgTm9uZSwgRGlzcGxheSwgU3lzdGVtIH07CiAgICAgU2xlZXBUeXBlIHNo
b3VsZERpc2FibGVTbGVlcCgpIGNvbnN0OwogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKICAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIG92
ZXJyaWRlOwogICAgIERPTVdyYXBwZXJXb3JsZCYgZW5zdXJlSXNvbGF0ZWRXb3JsZCgpOwogICAg
IGJvb2wgZW5zdXJlTWVkaWFDb250cm9sc0luamVjdGVkU2NyaXB0KCk7Ci0jZW5kaWYKIAogICAg
IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUgbWVkaWFUeXBlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1lZGlhVHlwZSBwcmVzZW50YXRpb25UeXBl
KCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMTE1LDEwICsxMTA0LDggQEAgcHJpdmF0ZToKICAgICBi
b29sIG1faGFzRXZlckhhZEF1ZGlvIDogMTsKICAgICBib29sIG1faGFzRXZlckhhZFZpZGVvIDog
MTsKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgYm9vbCBtX21lZGlh
Q29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvciA6IDE7CiAgICAgYm9vbCBtX2hhdmVTZXRV
cENhcHRpb25Db250YWluZXIgOiAxOwotI2VuZGlmCiAKICAgICBib29sIG1faXNTY3J1YmJpbmdS
ZW1vdGVseSA6IDE7CiAgICAgYm9vbCBtX3dhaXRpbmdUb0VudGVyRnVsbHNjcmVlbiA6IDE7CkBA
IC0xMTkyLDExICsxMTc5LDkgQEAgcHJpdmF0ZToKICAgICBjb25zdCB2b2lkKiBtX2xvZ0lkZW50
aWZpZXI7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAg
ZnJpZW5kIGNsYXNzIE1lZGlhQ29udHJvbHNIb3N0OwogICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xz
SG9zdD4gbV9tZWRpYUNvbnRyb2xzSG9zdDsKICAgICBSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBt
X2lzb2xhdGVkV29ybGQ7Ci0jZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAg
UmVmUHRyPE1lZGlhU3RyZWFtPiBtX21lZGlhU3RyZWFtU3JjT2JqZWN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhYjgyYTE4MDAxMzIwNjk3YjAyY2FkOTYy
ZThlYjE4NjUyNGJhZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVz
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKQotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1l
bnRUeXBlcy5oIgotCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCi0jaW5jbHVkZSAiUmVuZGVyTWVkaWEuaCIKLSNpbmNsdWRlICJSZW5kZXJNZWRpYUNvbnRy
b2xzLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1XVEZfTUFLRV9JU09fQUxM
T0NBVEVEX0lNUEwoTWVkaWFDb250cm9sRGl2RWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NB
VEVEX0lNUEwoTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lT
T19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudCk7Ci0K
LXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLWNsYXNzIEV2ZW50OwotCi1SZWZQdHI8SFRN
TE1lZGlhRWxlbWVudD4gcGFyZW50TWVkaWFFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCi17Ci0g
ICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8Tm9kZT4g
bWVkaWFOb2RlID0gbm9kZS0+c2hhZG93SG9zdCgpOwotICAgIGlmICghbWVkaWFOb2RlKQotICAg
ICAgICBtZWRpYU5vZGUgPSBjb25zdF9jYXN0PE5vZGUqPihub2RlKTsKLSAgICBpZiAoIWlzPEhU
TUxNZWRpYUVsZW1lbnQ+KCptZWRpYU5vZGUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gZG93bmNhc3Q8SFRNTE1lZGlhRWxlbWVudD4obWVkaWFOb2RlLmdldCgpKTsKLX0K
LQotTWVkaWFDb250cm9sRWxlbWVudFR5cGUgbWVkaWFDb250cm9sRWxlbWVudFR5cGUoTm9kZSog
bm9kZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihub2RlLT5pc01l
ZGlhQ29udHJvbEVsZW1lbnQoKSk7Ci0gICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2Rl
KSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbElucHV0RWxlbWVudCo+
KG5vZGUpLT5kaXNwbGF5VHlwZSgpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRy
b2xEaXZFbGVtZW50Kj4obm9kZSktPmRpc3BsYXlUeXBlKCk7Ci19Ci0KLU1lZGlhQ29udHJvbEVs
ZW1lbnQ6Ok1lZGlhQ29udHJvbEVsZW1lbnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxh
eVR5cGUsIEhUTUxFbGVtZW50KiBlbGVtZW50KQotICAgIDogbV9tZWRpYUNvbnRyb2xsZXIoMCkK
LSAgICAsIG1fZGlzcGxheVR5cGUoZGlzcGxheVR5cGUpCi0gICAgLCBtX2VsZW1lbnQoZWxlbWVu
dCkKLXsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50OjpoaWRlKCkKLXsKLSAgICBtX2Vs
ZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5LCBDU1NWYWx1
ZU5vbmUpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnNob3coKQotewotICAgIG1f
ZWxlbWVudC0+cmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXkpOwot
fQotCi1ib29sIE1lZGlhQ29udHJvbEVsZW1lbnQ6OmlzU2hvd2luZygpIGNvbnN0Ci17Ci0gICAg
Y29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBwcm9wZXJ0eVNldCA9IG1fZWxlbWVudC0+aW5saW5lU3R5
bGUoKTsKLSAgICAvLyBGb2xsb3dpbmcgdGhlIGNvZGUgZnJvbSBzaG93KCkgYW5kIGhpZGUoKSBh
Ym92ZSwgd2Ugb25seSBoYXZlCi0gICAgLy8gdG8gY2hlY2sgZm9yIHRoZSBwcmVzZW5zZSBvZiBp
bmxpbmUgZGlzcGxheS4KLSAgICByZXR1cm4gKCFwcm9wZXJ0eVNldCB8fCAhcHJvcGVydHlTZXQt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXNwbGF5KSk7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sRWxlbWVudDo6c2V0RGlzcGxheVR5cGUoTWVkaWFDb250cm9sRWxlbWVudFR5cGUg
ZGlzcGxheVR5cGUpCi17Ci0gICAgaWYgKGRpc3BsYXlUeXBlID09IG1fZGlzcGxheVR5cGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fZGlzcGxheVR5cGUgPSBkaXNwbGF5VHlwZTsKLSAgICBp
ZiAoYXV0byBvYmplY3QgPSBtX2VsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgIG9iamVjdC0+
cmVwYWludCgpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlh
Q29udHJvbERpdkVsZW1lbnQ6Ok1lZGlhQ29udHJvbERpdkVsZW1lbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSkKLSAgICA6IEhUTUxEaXZF
bGVtZW50KGRpdlRhZywgZG9jdW1lbnQpCi0gICAgLCBNZWRpYUNvbnRyb2xFbGVtZW50KGRpc3Bs
YXlUeXBlLCB0aGlzKQotewotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LU1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6TWVkaWFDb250cm9sSW5wdXRFbGVtZW50KERvY3Vt
ZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUpCi0gICAg
OiBIVE1MSW5wdXRFbGVtZW50KGlucHV0VGFnLCBkb2N1bWVudCwgMCwgZmFsc2UpCi0gICAgLCBN
ZWRpYUNvbnRyb2xFbGVtZW50KGRpc3BsYXlUeXBlLCB0aGlzKQotewotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudDo6
TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFD
b250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVt
ZW50KGRvY3VtZW50LCBkaXNwbGF5VHlwZSkKLSAgICAsIG1fY3VycmVudFZhbHVlKDApCi17Ci19
Ci0KLXZvaWQgTWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50OjpzZXRDdXJyZW50VmFsdWUo
ZG91YmxlIHRpbWUpCi17Ci0gICAgbV9jdXJyZW50VmFsdWUgPSB0aW1lOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50
OjpNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlh
Q29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKQotICAgIDogTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50KGRvY3VtZW50LCBkaXNwbGF5VHlwZSkKLXsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xN
dXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0g
ICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewotICAgICAg
ICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0TXV0ZWQoIW1lZGlhQ29udHJvbGxlcigpLT5tdXRlZCgp
KTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0KLSAgICBIVE1M
SW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotdm9pZCBNZWRp
YUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6Y2hhbmdlZE11dGUoKQotewotICAgIHVwZGF0ZURp
c3BsYXlUeXBlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6OnVw
ZGF0ZURpc3BsYXlUeXBlKCkKLXsKLSAgICBzZXREaXNwbGF5VHlwZShtZWRpYUNvbnRyb2xsZXIo
KS0+bXV0ZWQoKSA/IE1lZGlhVW5NdXRlQnV0dG9uIDogTWVkaWFNdXRlQnV0dG9uKTsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xTZWVrQnV0dG9u
RWxlbWVudDo6TWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50
LCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSkKLSAgICA6IE1lZGlhQ29udHJv
bElucHV0RWxlbWVudChkb2N1bWVudCwgZGlzcGxheVR5cGUpCi17Ci19Ci0KLXZvaWQgTWVkaWFD
b250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50
KQotewotICAgIC8vIFNldCB0aGUgbW91c2Vkb3duIGFuZCBtb3VzZXVwIGV2ZW50cyBhcyBkZWZh
dWx0SGFuZGxlZCBzbyB0aGV5Ci0gICAgLy8gZG8gbm90IHRyaWdnZXIgZHJhZyBzdGFydCBvciBl
bmQgYWN0aW9ucyBpbiBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQuCi0gICAgaWYgKGV2ZW50LnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpCi0gICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVk
KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6OnNldEFjdGl2ZShi
b29sIGZsYWcsIGJvb2wgcGF1c2UpCi17Ci0gICAgaWYgKGZsYWcgPT0gYWN0aXZlKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChmbGFnKQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+
YmVnaW5TY2FubmluZyhpc0ZvcndhcmRCdXR0b24oKSA/IE1lZGlhQ29udHJvbGxlckludGVyZmFj
ZTo6Rm9yd2FyZCA6IE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQpOwotICAgIGVs
c2UKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPmVuZFNjYW5uaW5nKCk7Ci0KLSAgICBNZWRp
YUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnNldEFjdGl2ZShmbGFnLCBwYXVzZSk7Ci19Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxl
bWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQp
Ci0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhVm9sdW1lU2xp
ZGVyKQotICAgICwgbV9jbGVhck11dGVkT25Vc2VySW50ZXJhY3Rpb24oZmFsc2UpCi17Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCYgZXZlbnQpCi17Ci0gICAgLy8gTGVmdCBidXR0b24gaXMgMC4gUmVqZWN0cyBtb3Vz
ZSBldmVudHMgbm90IGZyb20gbGVmdCBidXR0b24uCi0gICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2
ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkuYnV0dG9uKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAg
IGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50IHx8IGV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCBldmVudC50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3Vi
bGUgdm9sdW1lID0gdmFsdWUoKS50b0RvdWJsZSgpOwotICAgIGlmICh2b2x1bWUgIT0gbWVkaWFD
b250cm9sbGVyKCktPnZvbHVtZSgpKQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0Vm9s
dW1lKHZvbHVtZSk7Ci0gICAgaWYgKG1fY2xlYXJNdXRlZE9uVXNlckludGVyYWN0aW9uKQotICAg
ICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0TXV0ZWQoZmFsc2UpOwotICAgIGV2ZW50LnNldERl
ZmF1bHRIYW5kbGVkKCk7Ci19Ci0KLWJvb2wgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVu
dDo6d2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50cygpCi17Ci0gICAgaWYgKCFyZW5kZXJlcigp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCk7Ci19Ci0KLWJvb2wgTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMo
KQotewotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tF
dmVudHMoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpzZXRW
b2x1bWUoZG91YmxlIHZvbHVtZSkKLXsKLSAgICBpZiAodmFsdWUoKS50b0RvdWJsZSgpICE9IHZv
bHVtZSkKLSAgICAgICAgc2V0VmFsdWUoU3RyaW5nOjpudW1iZXIodm9sdW1lKSk7Ci19Ci0KLXZv
aWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6c2V0Q2xlYXJNdXRlZE9uVXNlcklu
dGVyYWN0aW9uKGJvb2wgY2xlYXJNdXRlKQotewotICAgIG1fY2xlYXJNdXRlZE9uVXNlckludGVy
YWN0aW9uID0gY2xlYXJNdXRlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5MzFmYzBlMzk1ODNjYTI3ZDgxYjc1NzdjZWQ4Mzk2OTE0OTExN2VhLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShWSURFTykKLQotI2luY2x1
ZGUgIkhUTUxEaXZFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xsZXJJbnRl
cmZhY2UuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1lbnVtIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIHsKLSAgICBNZWRpYUVudGVyRnVsbHNj
cmVlbkJ1dHRvbiA9IDAsCi0gICAgTWVkaWFNdXRlQnV0dG9uLAotICAgIE1lZGlhUGxheUJ1dHRv
biwKLSAgICBNZWRpYVNlZWtCYWNrQnV0dG9uLAotICAgIE1lZGlhU2Vla0ZvcndhcmRCdXR0b24s
Ci0gICAgTWVkaWFTbGlkZXIsCi0gICAgTWVkaWFTbGlkZXJUaHVtYiwKLSAgICBNZWRpYVJld2lu
ZEJ1dHRvbiwKLSAgICBNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24sCi0gICAgTWVkaWFTaG93
Q2xvc2VkQ2FwdGlvbnNCdXR0b24sCi0gICAgTWVkaWFIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24s
Ci0gICAgTWVkaWFVbk11dGVCdXR0b24sCi0gICAgTWVkaWFQYXVzZUJ1dHRvbiwKLSAgICBNZWRp
YVRpbWVsaW5lQ29udGFpbmVyLAotICAgIE1lZGlhQ3VycmVudFRpbWVEaXNwbGF5LAotICAgIE1l
ZGlhVGltZVJlbWFpbmluZ0Rpc3BsYXksCi0gICAgTWVkaWFTdGF0dXNEaXNwbGF5LAotICAgIE1l
ZGlhQ29udHJvbHNQYW5lbCwKLSAgICBNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lciwKLSAgICBN
ZWRpYVZvbHVtZVNsaWRlciwKLSAgICBNZWRpYVZvbHVtZVNsaWRlclRodW1iLAotICAgIE1lZGlh
RnVsbFNjcmVlblZvbHVtZVNsaWRlciwKLSAgICBNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJU
aHVtYiwKLSAgICBNZWRpYVZvbHVtZVNsaWRlck11dGVCdXR0b24sCi0gICAgTWVkaWFUZXh0VHJh
Y2tEaXNwbGF5Q29udGFpbmVyLAotICAgIE1lZGlhVGV4dFRyYWNrRGlzcGxheSwKLSAgICBNZWRp
YUV4aXRGdWxsc2NyZWVuQnV0dG9uLAotICAgIE1lZGlhT3ZlcmxheVBsYXlCdXR0b24sCi0gICAg
TWVkaWFDbG9zZWRDYXB0aW9uc0NvbnRhaW5lciwKLSAgICBNZWRpYUNsb3NlZENhcHRpb25zVHJh
Y2tMaXN0LAotfTsKLQotUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IHBhcmVudE1lZGlhRWxlbWVu
dChjb25zdCBOb2RlKik7Ci1pbmxpbmUgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IHBhcmVudE1l
ZGlhRWxlbWVudChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSB7IHJldHVybiBwYXJlbnRN
ZWRpYUVsZW1lbnQocmVuZGVyZXIubm9kZSgpKTsgfQotCi1NZWRpYUNvbnRyb2xFbGVtZW50VHlw
ZSBtZWRpYUNvbnRyb2xFbGVtZW50VHlwZShOb2RlKik7Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sRWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB2b2lkIGhpZGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwotICAgIHZpcnR1
YWwgYm9vbCBpc1Nob3dpbmcoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxl
bWVudFR5cGUgZGlzcGxheVR5cGUoKSB7IHJldHVybiBtX2Rpc3BsYXlUeXBlOyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TWVkaWFDb250cm9sbGVyKE1lZGlhQ29udHJvbGxlckludGVyZmFjZSog
Y29udHJvbGxlcikgeyBtX21lZGlhQ29udHJvbGxlciA9IGNvbnRyb2xsZXI7IH0KLSAgICB2aXJ0
dWFsIE1lZGlhQ29udHJvbGxlckludGVyZmFjZSogbWVkaWFDb250cm9sbGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9tZWRpYUNvbnRyb2xsZXI7IH0KLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IE1l
ZGlhQ29udHJvbEVsZW1lbnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUsIEhUTUxFbGVtZW50Kik7
Ci0gICAgfk1lZGlhQ29udHJvbEVsZW1lbnQoKSA9IGRlZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0RGlzcGxheVR5cGUoTWVkaWFDb250cm9sRWxlbWVudFR5cGUpOwotICAgIHZpcnR1YWwg
Ym9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgTWVkaWFDb250cm9sbGVySW50ZXJmYWNlKiBtX21lZGlhQ29udHJvbGxlcjsK
LSAgICBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBtX2Rpc3BsYXlUeXBlOwotICAgIEhUTUxFbGVt
ZW50KiBtX2VsZW1lbnQ7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LWNsYXNzIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQsIHB1
YmxpYyBNZWRpYUNvbnRyb2xFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1l
ZGlhQ29udHJvbERpdkVsZW1lbnQpOwotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IE1lZGlhQ29u
dHJvbERpdkVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSk7Ci0KLXBy
aXZhdGU6Ci0gICAgYm9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBNZWRpYUNvbnRyb2xFbGVtZW50Ojppc01lZGlhQ29udHJvbEVsZW1lbnQoKTsgfQotfTsK
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xJ
bnB1dEVsZW1lbnQgOiBwdWJsaWMgSFRNTElucHV0RWxlbWVudCwgcHVibGljIE1lZGlhQ29udHJv
bEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50KTsKLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSk7Ci0KLXByaXZhdGU6Ci0gICAg
Ym9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBNZWRpYUNv
bnRyb2xFbGVtZW50Ojppc01lZGlhQ29udHJvbEVsZW1lbnQoKTsgfQotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVEaXNwbGF5VHlwZSgpIHsgfQotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQgOiBwdWJsaWMg
TWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRp
YUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQpOwotcHVibGljOgotICAgIHZvaWQgc2V0Q3VycmVu
dFZhbHVlKGRvdWJsZSk7Ci0gICAgZG91YmxlIGN1cnJlbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY3VycmVudFZhbHVlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRy
b2xUaW1lRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSk7
Ci0KLXByaXZhdGU6Ci0gICAgZG91YmxlIG1fY3VycmVudFZhbHVlOwotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxl
bWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAg
IHZvaWQgY2hhbmdlZE11dGUoKTsKLQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tF
dmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBleHBs
aWNpdCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChEb2N1bWVudCYsIE1lZGlhQ29udHJv
bEVsZW1lbnRUeXBlKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIG92
ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKSBvdmVycmlk
ZTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFD
b250cm9sU2Vla0J1dHRvbkVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50
IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVt
ZW50KTsKLXB1YmxpYzoKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgTWVk
aWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50
VHlwZSk7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNGb3J3YXJkQnV0dG9uKCkgY29uc3QgPSAwOwotCi1wcml2YXRl
OgotICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wgLypmbGFnKi8gPSB0cnVlLCBib29sIC8qcGF1c2Uq
LyA9IGZhbHNlKSBmaW5hbDsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotY2xhc3MgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgYm9vbCB3aWxsUmVzcG9uZFRv
TW91c2VNb3ZlRXZlbnRzKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VD
bGlja0V2ZW50cygpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Vm9sdW1lKGRvdWJsZSk7Ci0gICAg
dm9pZCBzZXRDbGVhck11dGVkT25Vc2VySW50ZXJhY3Rpb24oYm9vbCk7Ci0KLXByb3RlY3RlZDoK
LSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KERvY3VtZW50Jik7
Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotcHJp
dmF0ZToKLSAgICBib29sIG1fY2xlYXJNdXRlZE9uVXNlckludGVyYWN0aW9uOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmI0YjRjYjY0YWViZTIxNGI5MjgxNWEwNmQ3ZGFi
OTM4ODA1MDY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE1MDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKQot
Ci0jaW5jbHVkZSAiRE9NVG9rZW5MaXN0LmgiCi0jaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0
b3IuaCIKLSNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGdWxsc2NyZWVuTWFuYWdlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxIZWFkaW5nRWxlbWVudC5o
IgotI2luY2x1ZGUgIkhUTUxMSUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVUxpc3RFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCi0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
LSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzLmgiCi0jaW5jbHVkZSAiTW91c2VFdmVudC5oIgotI2lu
Y2x1ZGUgIlBPREludGVydmFsLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VH
cm91cC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyTWVkaWFD
b250cm9scy5oIgotI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgotI2luY2x1ZGUgIlJlbmRlclRo
ZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
Ci0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaGFkb3dSb290LmgiCi0jaW5jbHVk
ZSAiVGV4dFRyYWNrQ3VlR2VuZXJpYy5oIgotI2luY2x1ZGUgIlRleHRUcmFja0xpc3QuaCIKLSNp
bmNsdWRlICJWVFRSZWdpb25MaXN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMu
aD4KLSNpbmNsdWRlIDx3dGYvTGFuZ3VhZ2UuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1X
VEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sUGFuZWxFbGVtZW50KTsKLVdU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVsZW1l
bnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbE92ZXJsYXlFbmNs
b3N1cmVFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1l
ZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KTsKLVdURl9NQUtF
X0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50KTsK
LVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRl
QnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9s
UGxheUJ1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29u
dHJvbE92ZXJsYXlQbGF5QnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoTWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQpOwotV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQpOwot
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVC
dXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xU
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudCk7Ci1XVEZf
TUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xp
c3RFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5CdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRp
YUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50KTsKLVdURl9N
QUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0
dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sRnVs
bHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TVBMKE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudCk7Ci1XVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudCk7
Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudCk7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLXN0YXRpYyBjb25z
dCBBdG9tU3RyaW5nJiBnZXRNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50U2hh
ZG93UHNldWRvSWQoKTsKLXN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBnZXRNZWRpYUNvbnRyb2xU
aW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnRTaGFkb3dQc2V1ZG9JZCgpOwotCi1NZWRpYUNvbnRy
b2xQYW5lbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudChEb2N1bWVudCYgZG9jdW1l
bnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYUNvbnRyb2xz
UGFuZWwpCi0gICAgLCBtX2NhbkJlRHJhZ2dlZChmYWxzZSkKLSAgICAsIG1faXNCZWluZ0RyYWdn
ZWQoZmFsc2UpCi0gICAgLCBtX2lzRGlzcGxheWVkKGZhbHNlKQotICAgICwgbV9vcGFxdWUodHJ1
ZSkKLSAgICAsIG1fdHJhbnNpdGlvblRpbWVyKCp0aGlzLCAmTWVkaWFDb250cm9sUGFuZWxFbGVt
ZW50Ojp0cmFuc2l0aW9uVGltZXJGaXJlZCkKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygi
LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ+IE1lZGlhQ29udHJv
bFBhbmVsRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQoZG9jdW1lbnQpKTsKLX0KLQot
dm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnN0YXJ0RHJhZyhjb25zdCBMYXlvdXRQb2lu
dCYgZXZlbnRMb2NhdGlvbikKLXsKLSAgICBpZiAoIW1fY2FuQmVEcmFnZ2VkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pc0JlaW5nRHJhZ2dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8
fCAhcmVuZGVyZXItPmlzQm94KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxGcmFt
ZT4gZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9sYXN0RHJhZ0V2ZW50TG9jYXRpb24gPSBldmVudExvY2F0aW9uOwot
Ci0gICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLnNldENhcHR1cmluZ01vdXNlRXZlbnRzRWxlbWVu
dCh0aGlzKTsKLQotICAgIG1faXNCZWluZ0RyYWdnZWQgPSB0cnVlOwotfQotCi12b2lkIE1lZGlh
Q29udHJvbFBhbmVsRWxlbWVudDo6Y29udGludWVEcmFnKGNvbnN0IExheW91dFBvaW50JiBldmVu
dExvY2F0aW9uKQotewotICAgIGlmICghbV9pc0JlaW5nRHJhZ2dlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgTGF5b3V0U2l6ZSBkaXN0YW5jZURyYWdnZWQgPSBldmVudExvY2F0aW9uIC0gbV9s
YXN0RHJhZ0V2ZW50TG9jYXRpb247Ci0gICAgbV9jdW11bGF0aXZlRHJhZ09mZnNldC5tb3ZlKGRp
c3RhbmNlRHJhZ2dlZCk7Ci0gICAgbV9sYXN0RHJhZ0V2ZW50TG9jYXRpb24gPSBldmVudExvY2F0
aW9uOwotICAgIHNldFBvc2l0aW9uKG1fY3VtdWxhdGl2ZURyYWdPZmZzZXQpOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZW5kRHJhZygpCi17Ci0gICAgaWYgKCFtX2lzQmVp
bmdEcmFnZ2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzQmVpbmdEcmFnZ2VkID0gZmFs
c2U7Ci0KLSAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZyYW1lLT5ldmVudEhhbmRsZXIo
KS5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQobnVsbHB0cik7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sUGFuZWxFbGVtZW50OjpzdGFydFRpbWVyKCkKLXsKLSAgICBzdG9wVGltZXIoKTsK
LQotICAgIC8vIFRoZSB0aW1lciBpcyByZXF1aXJlZCB0byBzZXQgdGhlIHByb3BlcnR5IGRpc3Bs
YXk6J25vbmUnIG9uIHRoZSBwYW5lbCwKLSAgICAvLyBzdWNoIHRoYXQgY2FwdGlvbnMgYXJlIGNv
cnJlY3RseSBkaXNwbGF5ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdmlkZW8KLSAgICAvLyBhdCB0
aGUgZW5kIG9mIHRoZSBmYWRlb3V0IHRyYW5zaXRpb24uCi0gICAgU2Vjb25kcyBkdXJhdGlvbiA9
IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5tZWRpYUNvbnRyb2xzRmFkZU91dER1cmF0aW9uKCk7
Ci0gICAgbV90cmFuc2l0aW9uVGltZXIuc3RhcnRPbmVTaG90KGR1cmF0aW9uKTsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnN0b3BUaW1lcigpCi17Ci0gICAgaWYgKG1fdHJh
bnNpdGlvblRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdHJhbnNpdGlvblRpbWVyLnN0b3Ao
KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnRyYW5zaXRpb25UaW1lckZp
cmVkKCkKLXsKLSAgICBpZiAoIW1fb3BhcXVlKQotICAgICAgICBoaWRlKCk7Ci0KLSAgICBzdG9w
VGltZXIoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnNldFBvc2l0aW9u
KGNvbnN0IExheW91dFBvaW50JiBwb3NpdGlvbikKLXsKLSAgICBkb3VibGUgbGVmdCA9IHBvc2l0
aW9uLngoKTsKLSAgICBkb3VibGUgdG9wID0gcG9zaXRpb24ueSgpOwotCi0gICAgLy8gU2V0IHRo
ZSBsZWZ0IGFuZCB0b3AgdG8gY29udHJvbCB0aGUgcGFuZWwncyBwb3NpdGlvbjsgdGhpcyBkZXBl
bmRzIG9uIGl0IGJlaW5nIGFic29sdXRlIHBvc2l0aW9uZWQuCi0gICAgLy8gU2V0IHRoZSBtYXJn
aW4gdG8gemVybyBzaW5jZSB0aGUgcG9zaXRpb24gcGFzc2VkIGluIHdpbGwgYWxyZWFkeSBpbmNs
dWRlIHRoZSBlZmZlY3Qgb2YgdGhlIG1hcmdpbi4KLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5TGVmdCwgbGVmdCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgc2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgdG9wLCBDU1NVbml0VHlwZTo6Q1NTX1BY
KTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgMC4w
LCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5TWFyZ2luVG9wLCAwLjAsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotCi0gICAgY2xhc3NM
aXN0KCkuYWRkKCJkcmFnZ2VkIik7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50
OjpyZXNldFBvc2l0aW9uKCkKLXsKLSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5TGVmdCk7Ci0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRv
cCk7Ci0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQp
OwotICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3ApOwot
Ci0gICAgY2xhc3NMaXN0KCkucmVtb3ZlKCJkcmFnZ2VkIik7Ci0KLSAgICBtX2N1bXVsYXRpdmVE
cmFnT2Zmc2V0LnNldFgoMCk7Ci0gICAgbV9jdW11bGF0aXZlRHJhZ09mZnNldC5zZXRZKDApOwot
fQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6bWFrZU9wYXF1ZSgpCi17Ci0gICAg
aWYgKG1fb3BhcXVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3VibGUgZHVyYXRpb24gPSBS
ZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkubWVkaWFDb250cm9sc0ZhZGVJbkR1cmF0aW9uKCk7Ci0K
LSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNpdGlvblByb3BlcnR5
LCBDU1NQcm9wZXJ0eU9wYWNpdHkpOwotICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlUcmFuc2l0aW9uRHVyYXRpb24sIGR1cmF0aW9uLCBDU1NVbml0VHlwZTo6Q1NTX1MpOwot
ICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlPcGFjaXR5LCAxLjAsIENTU1Vu
aXRUeXBlOjpDU1NfTlVNQkVSKTsKLQotICAgIG1fb3BhcXVlID0gdHJ1ZTsKLQotICAgIGlmICht
X2lzRGlzcGxheWVkKQotICAgICAgICBzaG93KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFu
ZWxFbGVtZW50OjptYWtlVHJhbnNwYXJlbnQoKQotewotICAgIGlmICghbV9vcGFxdWUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFNlY29uZHMgZHVyYXRpb24gPSBSZW5kZXJUaGVtZTo6c2luZ2xl
dG9uKCkubWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpOwotCi0gICAgc2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlPcGFj
aXR5KTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNpdGlvbkR1
cmF0aW9uLCBkdXJhdGlvbi52YWx1ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX1MpOwotICAgIHNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlPcGFjaXR5LCAwLjAsIENTU1VuaXRUeXBlOjpD
U1NfTlVNQkVSKTsKLQotICAgIG1fb3BhcXVlID0gZmFsc2U7Ci0gICAgc3RhcnRUaW1lcigpOwot
fQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCYgZXZlbnQpCi17Ci0gICAgTWVkaWFDb250cm9sRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihldmVudCk7Ci0KLSAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpKSB7Ci0gICAg
ICAgIExheW91dFBvaW50IGxvY2F0aW9uID0gZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQpLmFi
c29sdXRlTG9jYXRpb24oKTsKLSAgICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQudGFyZ2V0KCkgPT0gdGhpcykgewotICAgICAgICAg
ICAgc3RhcnREcmFnKGxvY2F0aW9uKTsKLSAgICAgICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5k
bGVkKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZW1vdmVFdmVudCAmJiBtX2lzQmVpbmdEcmFnZ2VkKQotICAgICAgICAgICAgY29udGludWVE
cmFnKGxvY2F0aW9uKTsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZXVwRXZlbnQgJiYgbV9pc0JlaW5nRHJhZ2dlZCkgewotICAgICAgICAgICAgY29u
dGludWVEcmFnKGxvY2F0aW9uKTsKLSAgICAgICAgICAgIGVuZERyYWcoKTsKLSAgICAgICAgICAg
IGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
TWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzZXRDYW5CZURyYWdnZWQoYm9vbCBjYW5CZURyYWdn
ZWQpCi17Ci0gICAgaWYgKG1fY2FuQmVEcmFnZ2VkID09IGNhbkJlRHJhZ2dlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9jYW5CZURyYWdnZWQgPSBjYW5CZURyYWdnZWQ7Ci0KLSAgICBpZiAo
IWNhbkJlRHJhZ2dlZCkKLSAgICAgICAgZW5kRHJhZygpOwotfQotCi12b2lkIE1lZGlhQ29udHJv
bFBhbmVsRWxlbWVudDo6c2V0SXNEaXNwbGF5ZWQoYm9vbCBpc0Rpc3BsYXllZCkKLXsKLSAgICBt
X2lzRGlzcGxheWVkID0gaXNEaXNwbGF5ZWQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotTWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVFbGVtZW50OjpNZWRpYUNvbnRy
b2xQYW5lbEVuY2xvc3VyZUVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIC8vIE1hcHBp
bmcgb250byBzYW1lIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGFzIHBhbmVsIGVsZW1lbnQsIHNp
bmNlIGl0IGhhcyBzaW1pbGFyIHByb3BlcnRpZXMuCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVt
ZW50KGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzUGFuZWwpCi17Ci0gICAgc2V0UHNldWRvKEF0b21T
dHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtZW5jbG9zdXJlIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFBhbmVsRW5jbG9zdXJl
RWxlbWVudD4gTWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVFbGVtZW50OjpjcmVhdGUoRG9jdW1l
bnQmIGRvY3VtZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFBh
bmVsRW5jbG9zdXJlRWxlbWVudChkb2N1bWVudCkpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbE92ZXJsYXlFbmNsb3N1cmVFbGVtZW50OjpNZWRp
YUNvbnRyb2xPdmVybGF5RW5jbG9zdXJlRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAg
Ly8gTWFwcGluZyBvbnRvIHNhbWUgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgYXMgcGFuZWwgZWxl
bWVudCwgc2luY2UgaXQgaGFzIHNpbWlsYXIgcHJvcGVydGllcy4KLSAgICA6IE1lZGlhQ29udHJv
bERpdkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhQ29udHJvbHNQYW5lbCkKLXsKLSAgICBzZXRQc2V1
ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1vdmVybGF5LWVuY2xvc3VyZSIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRy
b2xPdmVybGF5RW5jbG9zdXJlRWxlbWVudD4gTWVkaWFDb250cm9sT3ZlcmxheUVuY2xvc3VyZUVs
ZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTWVkaWFDb250cm9sT3ZlcmxheUVuY2xvc3VyZUVsZW1lbnQoZG9jdW1lbnQpKTsKLX0K
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xUaW1lbGlu
ZUNvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudChE
b2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50
LCBNZWRpYVRpbWVsaW5lQ29udGFpbmVyKQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCIt
d2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLWNvbnRhaW5lciIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRh
aW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sVGltZWxpbmVDb250
YWluZXJFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xUaW1lbGlu
ZUNvbnRhaW5lckVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBlbGVtZW50LT5oaWRlKCk7Ci0gICAg
cmV0dXJuIGVsZW1lbnQ7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJF
bGVtZW50OjpzZXRUaW1lRGlzcGxheXNIaWRkZW4oYm9vbCBoaWRkZW4pCi17Ci0gICAgZm9yIChh
dXRvJiBlbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAg
IGlmIChlbGVtZW50LnNoYWRvd1BzZXVkb0lkKCkgIT0gZ2V0TWVkaWFDb250cm9sVGltZVJlbWFp
bmluZ0Rpc3BsYXlFbGVtZW50U2hhZG93UHNldWRvSWQoKQotICAgICAgICAgICAgJiYgZWxlbWVu
dC5zaGFkb3dQc2V1ZG9JZCgpICE9IGdldE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVs
ZW1lbnRTaGFkb3dQc2V1ZG9JZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50JiB0aW1lRGlzcGxheSA9IHN0YXRpY19jYXN0
PE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudCY+KGVsZW1lbnQpOwotICAgICAgICBpZiAo
aGlkZGVuKQotICAgICAgICAgICAgdGltZURpc3BsYXkuaGlkZSgpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB0aW1lRGlzcGxheS5zaG93KCk7Ci0gICAgfQotfQotCi1SZW5kZXJQdHI8UmVu
ZGVyRWxlbWVudD4gTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OjpjcmVhdGVF
bGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsZSwgY29uc3QgUmVuZGVyVHJlZVBvc2l0
aW9uJikKLXsKLSAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyTWVkaWFDb250cm9sVGlt
ZWxpbmVDb250YWluZXI+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7Ci19Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVy
RWxlbWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChEb2N1bWVu
dCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRp
YVZvbHVtZVNsaWRlckNvbnRhaW5lcikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdl
YmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlk
ZXJDb250YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRp
YUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgZWxl
bWVudC0+aGlkZSgpOwotICAgIHJldHVybiBlbGVtZW50OwotfQotCi1SZW5kZXJQdHI8UmVuZGVy
RWxlbWVudD4gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRl
RWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3Np
dGlvbiYpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlck1lZGlhVm9sdW1lU2xp
ZGVyQ29udGFpbmVyPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwotfQotCi12b2lkIE1lZGlhQ29u
dHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQmIGV2ZW50KQotewotICAgIC8vIFBvb3IgbWFuJ3MgbW91c2VsZWF2ZSBldmVudCBkZXRlY3Rp
b24uCi0KLSAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSB8fCBldmVudC50eXBlKCkgIT0g
ZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
aXM8Tm9kZT4oZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQpLnJlbGF0ZWRUYXJnZXQoKSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChjb250YWluc0luY2x1ZGluZ1NoYWRvd0RPTSgmZG93
bmNhc3Q8Tm9kZT4oKmRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KS5yZWxhdGVkVGFyZ2V0KCkp
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaGlkZSgpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpNZWRp
YUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBN
ZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYVN0YXR1c0Rpc3BsYXkpCi0gICAg
LCBtX3N0YXRlQmVpbmdEaXNwbGF5ZWQoTm90aGluZykKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0
cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1zdGF0dXMtZGlzcGxheSIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNw
bGF5RWxlbWVudD4gTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShEb2N1
bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVt
ZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxl
bWVudChkb2N1bWVudCkpOwotICAgIGVsZW1lbnQtPmhpZGUoKTsKLSAgICByZXR1cm4gZWxlbWVu
dDsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6dXBkYXRlKCkK
LXsKLSAgICAvLyBHZXQgdGhlIG5ldyBzdGF0ZSB0aGF0IHdlJ2xsIGhhdmUgdG8gZGlzcGxheS4K
LSAgICBTdGF0ZUJlaW5nRGlzcGxheWVkIG5ld1N0YXRlVG9EaXNwbGF5ID0gTm90aGluZzsKLQot
ICAgIGlmIChtZWRpYUNvbnRyb2xsZXIoKS0+cmVhZHlTdGF0ZSgpIDw9IE1lZGlhQ29udHJvbGxl
ckludGVyZmFjZTo6SEFWRV9NRVRBREFUQSAmJiBtZWRpYUNvbnRyb2xsZXIoKS0+aGFzQ3VycmVu
dFNyYygpKQotICAgICAgICBuZXdTdGF0ZVRvRGlzcGxheSA9IExvYWRpbmc7Ci0gICAgZWxzZSBp
ZiAobWVkaWFDb250cm9sbGVyKCktPmlzTGl2ZVN0cmVhbSgpKQotICAgICAgICBuZXdTdGF0ZVRv
RGlzcGxheSA9IExpdmVCcm9hZGNhc3Q7Ci0KLSAgICBpZiAobmV3U3RhdGVUb0Rpc3BsYXkgPT0g
bV9zdGF0ZUJlaW5nRGlzcGxheWVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zdGF0
ZUJlaW5nRGlzcGxheWVkID09IE5vdGhpbmcpCi0gICAgICAgIHNob3coKTsKLSAgICBlbHNlIGlm
IChuZXdTdGF0ZVRvRGlzcGxheSA9PSBOb3RoaW5nKQotICAgICAgICBoaWRlKCk7Ci0KLSAgICBt
X3N0YXRlQmVpbmdEaXNwbGF5ZWQgPSBuZXdTdGF0ZVRvRGlzcGxheTsKLQotICAgIHN3aXRjaCAo
bV9zdGF0ZUJlaW5nRGlzcGxheWVkKSB7Ci0gICAgY2FzZSBOb3RoaW5nOgotICAgICAgICBzZXRJ
bm5lclRleHQoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTG9hZGlu
ZzoKLSAgICAgICAgc2V0SW5uZXJUZXh0KG1lZGlhRWxlbWVudExvYWRpbmdTdGF0ZVRleHQoKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGl2ZUJyb2FkY2FzdDoKLSAgICAgICAgc2V0SW5u
ZXJUZXh0KG1lZGlhRWxlbWVudExpdmVCcm9hZGNhc3RTdGF0ZVRleHQoKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRp
YUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0
b25FbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi0g
ICAgOiBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChkb2N1bWVudCwgTWVkaWFNdXRlQnV0
dG9uKQotICAgICwgbV9jb250cm9scyhjb250cm9scykKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0
cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1tdXRlLWJ1dHRvbiIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0
b25FbGVtZW50PiBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpjcmVhdGUoRG9j
dW1lbnQmIGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzKiBjb250cm9scykKLXsKLSAgICBBU1NFUlQo
Y29udHJvbHMpOwotCi0gICAgUmVmPE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+
IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVu
dChkb2N1bWVudCwgY29udHJvbHMpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJBZ2VudFNoYWRv
d1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIHJldHVybiBidXR0
b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpCi0gICAgICAgIG1fY29udHJvbHMtPnNob3dWb2x1
bWVTbGlkZXIoKTsKLQotICAgIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1NZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudDo6TWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAg
IDogTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhTXV0ZUJ1dHRv
bikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy12
b2x1bWUtc2xpZGVyLW11dGUtYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50
PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3Vt
ZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1
dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sVm9sdW1lU2xp
ZGVyTXV0ZUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJB
Z2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIHJl
dHVybiBidXR0b247Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVk
aWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50
KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1
bWVudCwgTWVkaWFQbGF5QnV0dG9uKQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50PiBNZWRp
YUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsK
LSAgICBSZWY8TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVm
KCpuZXcgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0
b24tPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1
dHRvbiIpOwotICAgIHJldHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGxheUJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewotICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgaWYg
KG1lZGlhQ29udHJvbGxlcigpLT5jYW5QbGF5KCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xs
ZXIoKS0+cGxheSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xsZXIo
KS0+cGF1c2UoKTsKLSAgICAgICAgdXBkYXRlRGlzcGxheVR5cGUoKTsKLSAgICAgICAgZXZlbnQu
c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVs
ZW1lbnQ6OnVwZGF0ZURpc3BsYXlUeXBlKCkKLXsKLSAgICBzZXREaXNwbGF5VHlwZShtZWRpYUNv
bnRyb2xsZXIoKS0+Y2FuUGxheSgpID8gTWVkaWFQbGF5QnV0dG9uIDogTWVkaWFQYXVzZUJ1dHRv
bik7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9s
T3ZlcmxheVBsYXlCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVs
ZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50
KGRvY3VtZW50LCBNZWRpYU92ZXJsYXlQbGF5QnV0dG9uKQotewotICAgIHNldFBzZXVkbyhBdG9t
U3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLW92ZXJsYXktcGxheS1idXR0b24iLCBBdG9t
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sT3Zl
cmxheVBsYXlCdXR0b25FbGVtZW50PiBNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1l
bnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbE92
ZXJsYXlQbGF5QnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRy
b2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0b24tPmVuc3Vy
ZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwot
ICAgIHJldHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0
b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAo
ZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIG1lZGlhQ29udHJvbGxl
cigpLT5jYW5QbGF5KCkpIHsKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPnBsYXkoKTsKLSAg
ICAgICAgdXBkYXRlRGlzcGxheVR5cGUoKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRs
ZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihl
dmVudCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0b25FbGVtZW50Ojp1
cGRhdGVEaXNwbGF5VHlwZSgpCi17Ci0gICAgaWYgKG1lZGlhQ29udHJvbGxlcigpLT5jYW5QbGF5
KCkpIHsKLSAgICAgICAgc2hvdygpOwotICAgIH0gZWxzZQotICAgICAgICBoaWRlKCk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sU2Vla0Zvcndh
cmRCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQoRG9j
dW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQoZG9j
dW1lbnQsIE1lZGlhU2Vla0ZvcndhcmRCdXR0b24pCi17Ci0gICAgc2V0UHNldWRvKEF0b21TdHJp
bmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtc2Vlay1mb3J3YXJkLWJ1dHRvbiIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xTZWVrRm9y
d2FyZEJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudDo6
Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sU2Vla0Zv
cndhcmRCdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFNl
ZWtGb3J3YXJkQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNl
ckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAg
cmV0dXJuIGJ1dHRvbjsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1N
ZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFNlZWtCYWNrQnV0
dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xTZWVrQnV0
dG9uRWxlbWVudChkb2N1bWVudCwgTWVkaWFTZWVrQmFja0J1dHRvbikKLXsKLSAgICBzZXRQc2V1
ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWJhY2stYnV0dG9uIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJv
bFNlZWtCYWNrQnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50
OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xTZWVr
QmFja0J1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sU2Vl
a0JhY2tCdXR0b25FbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgYnV0dG9uLT5lbnN1cmVVc2VyQWdl
bnRTaGFkb3dSb290KCk7Ci0gICAgYnV0dG9uLT5zZXRUeXBlKCJidXR0b24iKTsKLSAgICByZXR1
cm4gYnV0dG9uOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlh
Q29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1l
bnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KGRv
Y3VtZW50LCBNZWRpYVJld2luZEJ1dHRvbikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygi
LXdlYmtpdC1tZWRpYS1jb250cm9scy1yZXdpbmQtYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1l
bnQ+IE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9j
dW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ+IGJ1dHRv
biA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudChkb2N1bWVu
dCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRv
bi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRp
YUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBl
dmVudCkKLXsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50
KSB7Ci0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5zZXRDdXJyZW50VGltZShzdGQ6Om1heDxk
b3VibGU+KDAsIG1lZGlhQ29udHJvbGxlcigpLT5jdXJyZW50VGltZSgpIC0gMzApKTsKLSAgICAg
ICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ6
Ok1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50KERvY3VtZW50JiBkb2N1
bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1bWVudCwgTWVkaWFSZXR1
cm5Ub1JlYWx0aW1lQnV0dG9uKQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0
LW1lZGlhLWNvbnRyb2xzLXJldHVybi10by1yZWFsdGltZS1idXR0b24iLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sUmV0dXJuVG9SZWFs
dGltZUJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xS
ZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRp
YUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1
dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgi
YnV0dG9uIik7Ci0gICAgYnV0dG9uLT5oaWRlKCk7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQot
dm9pZCBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuY2xpY2tFdmVudCkgewotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+cmV0dXJu
VG9SZWFsdGltZSgpOwotICAgICAgICBldmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0K
LSAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25z
QnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhQ29udHJvbHMqIGNvbnRyb2xz
KQotICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KGRvY3VtZW50LCBNZWRpYVNob3dDbG9z
ZWRDYXB0aW9uc0J1dHRvbikKLSNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oV0lOKSB8
fCBQTEFURk9STShHVEspCi0gICAgLCBtX2NvbnRyb2xzKGNvbnRyb2xzKQotI2VuZGlmCi17Ci0j
aWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oV0lOKSB8fCAhUExBVEZPUk0oR1RLKQot
ICAgIFVOVVNFRF9QQVJBTShjb250cm9scyk7Ci0jZW5kaWYKLSAgICBzZXRQc2V1ZG8oQXRvbVN0
cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy10b2dnbGUtY2xvc2VkLWNhcHRpb25zLWJ1dHRv
biIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNv
bnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFRvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwg
TWVkaWFDb250cm9scyogY29udHJvbHMpCi17Ci0gICAgQVNTRVJUKGNvbnRyb2xzKTsKLQotICAg
IFJlZjxNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IGJ1dHRv
biA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25F
bGVtZW50KGRvY3VtZW50LCBjb250cm9scykpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFnZW50
U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgYnV0dG9u
LT5oaWRlKCk7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUb2dn
bGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OnVwZGF0ZURpc3BsYXlUeXBlKCkKLXsKLSAg
ICBib29sIGNhcHRpb25zVmlzaWJsZSA9IG1lZGlhQ29udHJvbGxlcigpLT5jbG9zZWRDYXB0aW9u
c1Zpc2libGUoKTsKLSAgICBzZXREaXNwbGF5VHlwZShjYXB0aW9uc1Zpc2libGUgPyBNZWRpYUhp
ZGVDbG9zZWRDYXB0aW9uc0J1dHRvbiA6IE1lZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uKTsK
LSAgICBzZXRDaGVja2VkKGNhcHRpb25zVmlzaWJsZSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
VG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50JiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlj
a0V2ZW50KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBncmVhdCB0aGF0IHRoZSBzaGFy
ZWQgY29kZSBpcyBkaWN0YXRpbmcgYmVoYXZpb3Igb2YgcGxhdGZvcm0tc3BlY2lmaWMKLSAgICAg
ICAgLy8gVUkuIE5vdCBhbGwgcG9ydHMgbWF5IHdhbnQgdGhlIGNsb3NlZCBjYXB0aW9ucyBidXR0
b24gdG8gdG9nZ2xlIGEgbGlzdCBvZiB0cmFja3MsIHNvCi0gICAgICAgIC8vIHdlIGhhdmUgdG8g
dXNlICNpZi4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMTg3NwotI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKFdJTikgJiYgIVBM
QVRGT1JNKEdUSykKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPnNldENsb3NlZENhcHRpb25z
VmlzaWJsZSghbWVkaWFDb250cm9sbGVyKCktPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpKTsKLSAg
ICAgICAgc2V0Q2hlY2tlZChtZWRpYUNvbnRyb2xsZXIoKS0+Y2xvc2VkQ2FwdGlvbnNWaXNpYmxl
KCkpOwotICAgICAgICB1cGRhdGVEaXNwbGF5VHlwZSgpOwotI2Vsc2UKLSAgICAgICAgbV9jb250
cm9scy0+dG9nZ2xlQ2xvc2VkQ2FwdGlvblRyYWNrTGlzdCgpOwotI2VuZGlmCi0gICAgICAgIGV2
ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfQotCi0gICAgSFRNTElucHV0RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNDb250YWluZXJFbGVtZW50OjpN
ZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50KQotICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChkb2N1bWVudCwgTWVkaWFDbG9zZWRD
YXB0aW9uc0NvbnRhaW5lcikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1t
ZWRpYS1jb250cm9scy1jbG9zZWQtY2FwdGlvbnMtY29udGFpbmVyIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25z
Q29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNDb250YWluZXJFbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xD
bG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IE1l
ZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCkpOwotICAg
IGVsZW1lbnQtPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZGlyQXR0ciwgQXRv
bVN0cmluZygiYXV0byIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAg
ZWxlbWVudC0+aGlkZSgpOwotICAgIHJldHVybiBlbGVtZW50OwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0
RWxlbWVudDo6TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50KERvY3Vt
ZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi0gICAgOiBNZWRpYUNvbnRy
b2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYUNsb3NlZENhcHRpb25zVHJhY2tMaXN0KQotI2lm
IEVOQUJMRShWSURFT19UUkFDSykKLSAgICAsIG1fY29udHJvbHMoY29udHJvbHMpCi0jZW5kaWYK
LXsKLSNpZiAhRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIFVOVVNFRF9QQVJBTShjb250cm9scyk7
Ci0jZW5kaWYKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9s
cy1jbG9zZWQtY2FwdGlvbnMtdHJhY2stbGlzdCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVs
ZW1lbnQ+IE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudDo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi17Ci0gICAgQVNT
RVJUKGNvbnRyb2xzKTsKLSAgICBSZWY8TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xp
c3RFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0
aW9uc1RyYWNrTGlzdEVsZW1lbnQoZG9jdW1lbnQsIGNvbnRyb2xzKSk7Ci0gICAgcmV0dXJuIGVs
ZW1lbnQ7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCkgewotICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KGV2ZW50LnRhcmdldCgpKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAvLyBXaGVuIHdlIGNyZWF0ZWQgdGhlIGVsZW1lbnRzIGlu
IHRoZSB0cmFjayBsaXN0LCB3ZSBnYXZlIHRoZW0gYSBjdXN0b20KLSAgICAgICAgLy8gYXR0cmli
dXRlIHJlcHJlc2VudGluZyB0aGUgaW5kZXggaW4gdGhlIEhUTUxNZWRpYUVsZW1lbnQncyBsaXN0
IG9mIHRyYWNrcy4KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50IHRhcmdldCBoYXMgc3Vj
aCBhIGN1c3RvbSBlbGVtZW50IGFuZCwgaWYgc28sCi0gICAgICAgIC8vIHRlbGwgdGhlIEhUTUxN
ZWRpYUVsZW1lbnQgdG8gZW5hYmxlIHRoYXQgdHJhY2suCi0KLSAgICAgICAgYXV0byB0ZXh0VHJh
Y2sgPSBtYWtlUmVmUHRyKG1fbWVudVRvVHJhY2tNYXAuZ2V0KCZkb3duY2FzdDxFbGVtZW50Pigq
ZXZlbnQudGFyZ2V0KCkpKSk7Ci0gICAgICAgIG1fbWVudVRvVHJhY2tNYXAuY2xlYXIoKTsKLSAg
ICAgICAgbV9jb250cm9scy0+dG9nZ2xlQ2xvc2VkQ2FwdGlvblRyYWNrTGlzdCgpOwotICAgICAg
ICBpZiAoIXRleHRUcmFjaykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvIG1l
ZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKLSAgICAgICAgaWYgKCFtZWRp
YUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbWVkaWFFbGVtZW50LT5z
ZXRTZWxlY3RlZFRleHRUcmFjayh0ZXh0VHJhY2suZ2V0KCkpOwotCi0gICAgICAgIHVwZGF0ZURp
c3BsYXkoKTsKLSAgICB9Ci0KLSAgICBNZWRpYUNvbnRyb2xEaXZFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKGV2ZW50KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsKLSNlbmRp
ZgotfQotCi12b2lkIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudDo6
dXBkYXRlRGlzcGxheSgpCi17Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5nPiBzZWxlY3RlZENsYXNzVmFsdWUoInNlbGVjdGVkIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAgaWYgKCFtZWRpYUNvbnRy
b2xsZXIoKS0+aGFzQ2xvc2VkQ2FwdGlvbnMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXM6OkNhcHRpb25EaXNwbGF5TW9kZSBkaXNwbGF5TW9kZSA9IGRvY3VtZW50KCkucGFn
ZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLmNhcHRpb25EaXNwbGF5TW9kZSgpOwot
Ci0gICAgYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0gICAg
aWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbWVkaWFFbGVt
ZW50LT50ZXh0VHJhY2tzKCkgfHwgIW1lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpLT5sZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVidWlsZFRyYWNrTGlzdE1lbnUoKTsKLQotICAg
IFJlZlB0cjxFbGVtZW50PiBvZmZNZW51SXRlbTsKLSAgICBib29sIHRyYWNrTWVudUl0ZW1TZWxl
Y3RlZCA9IGZhbHNlOwotCi0gICAgZm9yIChhdXRvJiB0cmFja0l0ZW0gOiBtX21lbnVJdGVtcykg
ewotICAgICAgICBSZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2s7Ci0gICAgICAgIE1lbnVJdGVt
VG9UcmFja01hcDo6aXRlcmF0b3IgaXRlciA9IG1fbWVudVRvVHJhY2tNYXAuZmluZCh0cmFja0l0
ZW0uZ2V0KCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX21lbnVUb1RyYWNrTWFwLmVuZCgpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHRleHRUcmFjayA9IGl0ZXItPnZhbHVlOwot
ICAgICAgICBpZiAoIXRleHRUcmFjaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IGlmICh0ZXh0VHJhY2sgPT0gJlRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpIHsKLSAg
ICAgICAgICAgIG9mZk1lbnVJdGVtID0gdHJhY2tJdGVtOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGV4dFRyYWNrID09ICZUZXh0VHJhY2s6OmNhcHRp
b25NZW51QXV0b21hdGljSXRlbSgpKSB7Ci0gICAgICAgICAgICBpZiAoZGlzcGxheU1vZGUgPT0g
Q2FwdGlvblVzZXJQcmVmZXJlbmNlczo6QXV0b21hdGljKQotICAgICAgICAgICAgICAgIHRyYWNr
SXRlbS0+Y2xhc3NMaXN0KCkuYWRkKHNlbGVjdGVkQ2xhc3NWYWx1ZSk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgdHJhY2tJdGVtLT5jbGFzc0xpc3QoKS5yZW1vdmUoc2VsZWN0
ZWRDbGFzc1ZhbHVlKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGRpc3BsYXlNb2RlICE9IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYyAm
JiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKLSAgICAg
ICAgICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgICAgICB0cmFja0l0
ZW0tPmNsYXNzTGlzdCgpLmFkZChzZWxlY3RlZENsYXNzVmFsdWUpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIHRyYWNrSXRlbS0+Y2xhc3NMaXN0KCkucmVtb3ZlKHNlbGVjdGVkQ2xhc3NW
YWx1ZSk7Ci0gICAgfQotCi0gICAgaWYgKG9mZk1lbnVJdGVtKSB7Ci0gICAgICAgIGlmIChkaXNw
bGF5TW9kZSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpGb3JjZWRPbmx5ICYmICF0cmFja01l
bnVJdGVtU2VsZWN0ZWQpCi0gICAgICAgICAgICBvZmZNZW51SXRlbS0+Y2xhc3NMaXN0KCkuYWRk
KHNlbGVjdGVkQ2xhc3NWYWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9mZk1lbnVJ
dGVtLT5jbGFzc0xpc3QoKS5yZW1vdmUoc2VsZWN0ZWRDbGFzc1ZhbHVlKTsKLSAgICB9Ci0jZW5k
aWYKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQ6
OnJlYnVpbGRUcmFja0xpc3RNZW51KCkKLXsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAg
Ly8gUmVtb3ZlIGFueSBleGlzdGluZyBjb250ZW50LgotICAgIHJlbW92ZUNoaWxkcmVuKCk7Ci0g
ICAgbV9tZW51SXRlbXMuY2xlYXIoKTsKLSAgICBtX21lbnVUb1RyYWNrTWFwLmNsZWFyKCk7Ci0K
LSAgICBpZiAoIW1lZGlhQ29udHJvbGxlcigpLT5oYXNDbG9zZWRDYXB0aW9ucygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0
aGlzKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byogdHJhY2tMaXN0ID0gbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7Ci0gICAgaWYgKCF0cmFj
a0xpc3QgfHwgIXRyYWNrTGlzdC0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvJiBjYXB0aW9u
UHJlZmVyZW5jZXMgPSBkb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5j
ZXMoKTsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IHRyYWNrc0Zvck1lbnUgPSBjYXB0
aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudSh0cmFja0xpc3QpOwotCi0gICAg
YXV0byBjYXB0aW9uc0hlYWRlciA9IEhUTUxIZWFkaW5nRWxlbWVudDo6Y3JlYXRlKGgzVGFnLCBk
b2N1bWVudCgpKTsKLSAgICBjYXB0aW9uc0hlYWRlci0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS5j
cmVhdGVUZXh0Tm9kZSh0ZXh0VHJhY2tTdWJ0aXRsZXNUZXh0KCkpKTsKLSAgICBhcHBlbmRDaGls
ZChjYXB0aW9uc0hlYWRlcik7Ci0gICAgYXV0byBjYXB0aW9uc01lbnVMaXN0ID0gSFRNTFVMaXN0
RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotCi0gICAgZm9yIChhdXRvJiB0ZXh0VHJhY2sg
OiB0cmFja3NGb3JNZW51KSB7Ci0gICAgICAgIGF1dG8gbWVudUl0ZW0gPSBIVE1MTElFbGVtZW50
OjpjcmVhdGUoZG9jdW1lbnQoKSk7Ci0gICAgICAgIG1lbnVJdGVtLT5hcHBlbmRDaGlsZChkb2N1
bWVudCgpLmNyZWF0ZVRleHROb2RlKGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5TmFtZUZvclRy
YWNrKHRleHRUcmFjay5nZXQoKSkpKTsKLSAgICAgICAgY2FwdGlvbnNNZW51TGlzdC0+YXBwZW5k
Q2hpbGQobWVudUl0ZW0pOwotICAgICAgICBtX21lbnVJdGVtcy5hcHBlbmQobWVudUl0ZW0ucHRy
KCkpOwotICAgICAgICBtX21lbnVUb1RyYWNrTWFwLmFkZChtZW51SXRlbS5wdHIoKSwgdGV4dFRy
YWNrKTsKLSAgICB9Ci0KLSAgICBhcHBlbmRDaGlsZChjYXB0aW9uc01lbnVMaXN0KTsKLSNlbmRp
ZgotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFRp
bWVsaW5lRWxlbWVudDo6TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50KERvY3VtZW50JiBkb2N1
bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVs
ZW1lbnQoZG9jdW1lbnQsIE1lZGlhU2xpZGVyKQotICAgICwgbV9jb250cm9scyhjb250cm9scykK
LXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
bGluZSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRp
YUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3Jl
YXRlKERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi17Ci0gICAg
QVNTRVJUKGNvbnRyb2xzKTsKLQotICAgIFJlZjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+
IHRpbWVsaW5lID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQoZG9j
dW1lbnQsIGNvbnRyb2xzKSk7Ci0gICAgdGltZWxpbmUtPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jv
b3QoKTsKLSAgICB0aW1lbGluZS0+c2V0VHlwZSgicmFuZ2UiKTsKLSAgICB0aW1lbGluZS0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwcmVjaXNpb25BdHRyLCBBdG9tU3RyaW5n
KCJmbG9hdCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgcmV0dXJu
IHRpbWVsaW5lOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgLy8gTGVmdCBidXR0b24gaXMgMC4g
UmVqZWN0cyBtb3VzZSBldmVudHMgbm90IGZyb20gbGVmdCBidXR0b24uCi0gICAgaWYgKGlzPE1v
dXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkuYnV0dG9uKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQp
Ci0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5iZWdpblNjcnViYmluZygpOwotCi0gICAgaWYg
KGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KQotICAgICAgICBtZWRp
YUNvbnRyb2xsZXIoKS0+ZW5kU2NydWJiaW5nKCk7Ci0KLSAgICBNZWRpYUNvbnRyb2xJbnB1dEVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAgaWYgKGV2ZW50LnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZW91dEV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vtb3ZlRXZlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRvdWJsZSB0aW1lID0gdmFsdWUo
KS50b0RvdWJsZSgpOwotICAgIGlmICgoZXZlbnQuaXNJbnB1dEV2ZW50KCkgfHwgZXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5pbnB1dEV2ZW50KSAmJiB0aW1lICE9IG1lZGlhQ29udHJvbGxl
cigpLT5jdXJyZW50VGltZSgpKQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0Q3VycmVu
dFRpbWUodGltZSk7Ci0KLSAgICBSZW5kZXJTbGlkZXImIHNsaWRlciA9IGRvd25jYXN0PFJlbmRl
clNsaWRlcj4oKnJlbmRlcmVyKCkpOwotICAgIGlmIChzbGlkZXIuaW5EcmFnTW9kZSgpKQotICAg
ICAgICBtX2NvbnRyb2xzLT51cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKTsKLX0KLQotI2lmICFQ
TEFURk9STShJT1NfRkFNSUxZKQotYm9vbCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6Ondp
bGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmIC8vICFQ
TEFURk9STShJT1NfRkFNSUxZKQotCi12b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6
c2V0UG9zaXRpb24oZG91YmxlIGN1cnJlbnRUaW1lKQotewotICAgIHNldFZhbHVlKFN0cmluZzo6
bnVtYmVyKGN1cnJlbnRUaW1lKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGltZWxpbmVFbGVt
ZW50OjpzZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgc2V0QXR0cmlidXRlKG1h
eEF0dHIsIEF0b21TdHJpbmc6Om51bWJlcihkdXJhdGlvbikpOwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVu
dDo6TWVkaWFDb250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50KERvY3VtZW50JiBkb2N1bWVu
dCkKLSAgICA6IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQoZG9jdW1lbnQpCi17Ci0g
ICAgc2V0UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNs
aWRlciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRp
YUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQ+IE1lZGlhQ29udHJvbFBhbmVsVm9sdW1l
U2xpZGVyRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVk
aWFDb250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50PiBzbGlkZXIgPSBhZG9wdFJlZigqbmV3
IE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudChkb2N1bWVudCkpOwotICAgIHNs
aWRlci0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIHNsaWRlci0+c2V0VHlwZSgi
cmFuZ2UiKTsKLSAgICBzbGlkZXItPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
cHJlY2lzaW9uQXR0ciwgQXRvbVN0cmluZygiZmxvYXQiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCkpOwotICAgIHNsaWRlci0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihtYXhBdHRyLCBBdG9tU3RyaW5nKCIxIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpKTsKLSAgICByZXR1cm4gc2xpZGVyOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50OjpN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYgZG9jdW1l
bnQpCi0gICAgOiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KGRvY3VtZW50KQotewot
ICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3Jl
ZW4tdm9sdW1lLXNsaWRlciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19
Ci0KLVJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudD4gTWVkaWFD
b250cm9sRnVsbHNjcmVlblZvbHVtZVNsaWRlckVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9j
dW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVt
ZW50PiBzbGlkZXIgPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVT
bGlkZXJFbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgc2xpZGVyLT5lbnN1cmVVc2VyQWdlbnRTaGFk
b3dSb290KCk7Ci0gICAgc2xpZGVyLT5zZXRUeXBlKCJyYW5nZSIpOwotICAgIHNsaWRlci0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwcmVjaXNpb25BdHRyLCBBdG9tU3RyaW5n
KCJmbG9hdCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgc2xpZGVy
LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1heEF0dHIsIEF0b21TdHJpbmco
IjEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBzbGlk
ZXI7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9s
RnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVt
ZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChk
b2N1bWVudCwgTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b24pCi17Ci0gICAgc2V0UHNldWRvKEF0
b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1idXR0b24iLCBBdG9t
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sRnVs
bHNjcmVlbkJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50
OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xG
dWxsc2NyZWVuQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNl
ckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAg
YnV0dG9uLT5oaWRlKCk7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZl
bnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkg
ewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICAgICAgLy8gT25seSB1c2UgdGhlIG5l
dyBmdWxsIHNjcmVlbiBBUEkgaWYgdGhlIGZ1bGxTY3JlZW5FbmFibGVkIHNldHRpbmcgaGFzCi0g
ICAgICAgIC8vIGJlZW4gZXhwbGljaXRseSBlbmFibGVkLiBPdGhlcndpc2UsIHVzZSB0aGUgb2xk
IGZ1bGxzY3JlZW4gQVBJLiBUaGlzCi0gICAgICAgIC8vIGFsbG93cyBhcHBzIHdoaWNoIGVtYmVk
IGEgV2ViVmlldyB0byByZXRhaW4gdGhlIGV4aXN0aW5nIGZ1bGwgc2NyZWVuCi0gICAgICAgIC8v
IHZpZGVvIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgcmVxdWlyaW5nIHRoZW0gdG8gaW1wbGVtZW50
IHRoZWlyIG93biBmdWxsCi0gICAgICAgIC8vIHNjcmVlbiBiZWhhdmlvci4KLSAgICAgICAgaWYg
KGRvY3VtZW50KCkuc2V0dGluZ3MoKS5mdWxsU2NyZWVuRW5hYmxlZCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoZG9jdW1lbnQoKS5mdWxsc2NyZWVuTWFuYWdlcigpLmlzRnVsbHNjcmVlbigpICYmIGRv
Y3VtZW50KCkuZnVsbHNjcmVlbk1hbmFnZXIoKS5jdXJyZW50RnVsbHNjcmVlbkVsZW1lbnQoKSA9
PSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcykpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5m
dWxsc2NyZWVuTWFuYWdlcigpLmNhbmNlbEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLmZ1bGxzY3JlZW5NYW5hZ2VyKCkucmVxdWVzdEZ1
bGxzY3JlZW5Gb3JFbGVtZW50KHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKS5nZXQoKSwgRnVsbHNj
cmVlbk1hbmFnZXI6OkV4ZW1wdElGcmFtZUFsbG93RnVsbHNjcmVlblJlcXVpcmVtZW50KTsKLSAg
ICAgICAgfSBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5lbnRl
ckZ1bGxzY3JlZW4oKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9
Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OnNldElzRnVsbHNjcmVl
bihib29sIGlzRnVsbHNjcmVlbikKLXsKLSAgICBzZXREaXNwbGF5VHlwZShpc0Z1bGxzY3JlZW4g
PyBNZWRpYUV4aXRGdWxsc2NyZWVuQnV0dG9uIDogTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b24p
OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9s
dW1lTWluQnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRy
b2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhVW5NdXRlQnV0dG9uKQotewotICAgIHNldFBz
ZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tdm9sdW1l
LW1pbi1idXR0b24iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1S
ZWY8TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRv
Y3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9u
RWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9s
dW1lTWluQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFn
ZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgcmV0
dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0
dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYg
KGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewotICAgICAgICBtZWRp
YUNvbnRyb2xsZXIoKS0+c2V0Vm9sdW1lKDApOwotICAgICAgICBldmVudC5zZXREZWZhdWx0SGFu
ZGxlZCgpOwotICAgIH0KLSAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sRnVsbHNj
cmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotOiBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhTXV0ZUJ1dHRvbikKLXsKLSAgICBzZXRQ
c2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2NyZWVuLXZvbHVt
ZS1tYXgtYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQot
UmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVtZW50PiBNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBk
b2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRv
bkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sRnVsbHNjcmVlblZv
bHVtZU1heEJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJB
Z2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIHJl
dHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewotICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgbWVk
aWFDb250cm9sbGVyKCktPnNldFZvbHVtZSgxKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhh
bmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFD
b250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lUmVtYWlu
aW5nRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9s
VGltZURpc3BsYXlFbGVtZW50KGRvY3VtZW50LCBNZWRpYVRpbWVSZW1haW5pbmdEaXNwbGF5KQot
ewotICAgIHNldFBzZXVkbyhnZXRNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1l
bnRTaGFkb3dQc2V1ZG9JZCgpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdE
aXNwbGF5RWxlbWVudD4gTWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50Ojpj
cmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1l
ZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudChkb2N1bWVudCkpOwotfQotCi1z
dGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZ2V0TWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3Bs
YXlFbGVtZW50U2hhZG93UHNldWRvSWQoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9tU3RyaW5nPiBpZCgiLXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNw
bGF5IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBpZDsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xDdXJy
ZW50VGltZURpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVt
ZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxl
bWVudChkb2N1bWVudCwgTWVkaWFDdXJyZW50VGltZURpc3BsYXkpCi17Ci0gICAgc2V0UHNldWRv
KGdldE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnRTaGFkb3dQc2V1ZG9JZCgp
KTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ+IE1lZGlh
Q29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1l
bnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sQ3VycmVudFRpbWVE
aXNwbGF5RWxlbWVudChkb2N1bWVudCkpOwotfQotCi1zdGF0aWMgY29uc3QgQXRvbVN0cmluZyYg
Z2V0TWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudFNoYWRvd1BzZXVkb0lkKCkK
LXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZz4gaWQoIi13ZWJraXQtbWVk
aWEtY29udHJvbHMtY3VycmVudC10aW1lLWRpc3BsYXkiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIGlkOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0KLU1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChkb2N1
bWVudCwgTWVkaWFUZXh0VHJhY2tEaXNwbGF5Q29udGFpbmVyKQotewotICAgIHNldFBzZXVkbyhB
dG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLXRleHQtdHJhY2stY29udGFpbmVyIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6
OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgYXV0byBlbGVtZW50ID0gYWRvcHRS
ZWYoKm5ldyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KGRvY3VtZW50KSk7
Ci0gICAgZWxlbWVudC0+aGlkZSgpOwotICAgIHJldHVybiBlbGVtZW50OwotfQotCi1SZW5kZXJQ
dHI8UmVuZGVyRWxlbWVudD4gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6
Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRy
ZWVQb3NpdGlvbiYpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxv
dz4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKLX0KLQotc3RhdGljIGJvb2wgY29tcGFyZUN1ZUlu
dGVydmFsRm9yRGlzcGxheShjb25zdCBDdWVJbnRlcnZhbCYgb25lLCBjb25zdCBDdWVJbnRlcnZh
bCYgdHdvKQotewotICAgIHJldHVybiBvbmUuZGF0YSgpLT5pc1Bvc2l0aW9uZWRBYm92ZSh0d28u
ZGF0YSgpKTsKLX07Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6dXBkYXRlRGlzcGxheSgpCi17Ci0gICAgaWYgKCFtZWRpYUNvbnRyb2xsZXIoKS0+Y2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlKCkpCi0gICAgICAgIHJlbW92ZUNoaWxkcmVuKCk7Ci0KLSAgICBhdXRv
IG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKLSAgICAvLyAxLiBJZiB0
aGUgbWVkaWEgZWxlbWVudCBpcyBhbiBhdWRpbyBlbGVtZW50LCBvciBpcyBhbm90aGVyIHBsYXli
YWNrCi0gICAgLy8gbWVjaGFuaXNtIHdpdGggbm8gcmVuZGVyaW5nIGFyZWEsIGFib3J0IHRoZXNl
IHN0ZXBzLiBUaGVyZSBpcyBub3RoaW5nIHRvCi0gICAgLy8gcmVuZGVyLgotICAgIGlmICghbWVk
aWFFbGVtZW50IHx8ICFtZWRpYUVsZW1lbnQtPmlzVmlkZW8oKSB8fCBtX3ZpZGVvRGlzcGxheVNp
emUuc2l6ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gMi4gTGV0IHZp
ZGVvIGJlIHRoZSBtZWRpYSBlbGVtZW50IG9yIG90aGVyIHBsYXliYWNrIG1lY2hhbmlzbS4KLSAg
ICBIVE1MVmlkZW9FbGVtZW50JiB2aWRlbyA9IGRvd25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KCpt
ZWRpYUVsZW1lbnQpOwotCi0gICAgLy8gMy4gTGV0IG91dHB1dCBiZSBhbiBlbXB0eSBsaXN0IG9m
IGFic29sdXRlbHkgcG9zaXRpb25lZCBDU1MgYmxvY2sgYm94ZXMuCi0KLSAgICAvLyA0LiBJZiB0
aGUgdXNlciBhZ2VudCBpcyBleHBvc2luZyBhIHVzZXIgaW50ZXJmYWNlIGZvciB2aWRlbywgYWRk
IHRvCi0gICAgLy8gb3V0cHV0IG9uZSBvciBtb3JlIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQgcG9z
aXRpb25lZCBDU1MgYmxvY2sgYm94ZXMgdGhhdAotICAgIC8vIGNvdmVyIHRoZSBzYW1lIHJlZ2lv
biBhcyB0aGUgdXNlciBpbnRlcmZhY2UuCi0KLSAgICAvLyA1LiBJZiB0aGUgbGFzdCB0aW1lIHRo
ZXNlIHJ1bGVzIHdlcmUgcnVuLCB0aGUgdXNlciBhZ2VudCB3YXMgbm90IGV4cG9zaW5nCi0gICAg
Ly8gYSB1c2VyIGludGVyZmFjZSBmb3IgdmlkZW8sIGJ1dCBub3cgaXQgaXMsIGxldCByZXNldCBi
ZSB0cnVlLiBPdGhlcndpc2UsCi0gICAgLy8gbGV0IHJlc2V0IGJlIGZhbHNlLgotCi0gICAgLy8g
VGhlcmUgaXMgbm90aGluZyB0byBiZSBkb25lIGV4cGxpY2l0bHkgZm9yIDR0aCBhbmQgNXRoIHN0
ZXBzLCBhcwotICAgIC8vIGV2ZXJ5dGhpbmcgaXMgaGFuZGxlZCB0aHJvdWdoIENTUy4gVGhlIGNh
cHRpb24gYm94IGlzIG9uIHRvcCBvZiB0aGUKLSAgICAvLyBjb250cm9scyBib3gsIGluIGEgY29u
dGFpbmVyIHNldCB3aXRoIHRoZSAtd2Via2l0LWJveCBkaXNwbGF5IHByb3BlcnR5LgotCi0gICAg
Ly8gNi4gTGV0IHRyYWNrcyBiZSB0aGUgc3Vic2V0IG9mIHZpZGVvJ3MgbGlzdCBvZiB0ZXh0IHRy
YWNrcyB0aGF0IGhhdmUgYXMKLSAgICAvLyB0aGVpciBydWxlcyBmb3IgdXBkYXRpbmcgdGhlIHRl
eHQgdHJhY2sgcmVuZGVyaW5nIHRoZXNlIHJ1bGVzIGZvcgotICAgIC8vIHVwZGF0aW5nIHRoZSBk
aXNwbGF5IG9mIFdlYlZUVCB0ZXh0IHRyYWNrcywgYW5kIHdob3NlIHRleHQgdHJhY2sgbW9kZSBp
cwotICAgIC8vIHNob3dpbmcgb3Igc2hvd2luZyBieSBkZWZhdWx0LgotICAgIC8vIDcuIExldCBj
dWVzIGJlIGFuIGVtcHR5IGxpc3Qgb2YgdGV4dCB0cmFjayBjdWVzLgotICAgIC8vIDguIEZvciBl
YWNoIHRyYWNrIHRyYWNrIGluIHRyYWNrcywgYXBwZW5kIHRvIGN1ZXMgYWxsIHRoZSBjdWVzIGZy
b20KLSAgICAvLyB0cmFjaydzIGxpc3Qgb2YgY3VlcyB0aGF0IGhhdmUgdGhlaXIgdGV4dCB0cmFj
ayBjdWUgYWN0aXZlIGZsYWcgc2V0LgotICAgIEN1ZUxpc3QgYWN0aXZlQ3VlcyA9IHZpZGVvLmN1
cnJlbnRseUFjdGl2ZUN1ZXMoKTsKLQotICAgIC8vIDkuIElmIHJlc2V0IGlzIGZhbHNlLCB0aGVu
LCBmb3IgZWFjaCB0ZXh0IHRyYWNrIGN1ZSBjdWUgaW4gY3VlczogaWYgY3VlJ3MKLSAgICAvLyB0
ZXh0IHRyYWNrIGN1ZSBkaXNwbGF5IHN0YXRlIGhhcyBhIHNldCBvZiBDU1MgYm94ZXMsIHRoZW4g
YWRkIHRob3NlIGJveGVzCi0gICAgLy8gdG8gb3V0cHV0LCBhbmQgcmVtb3ZlIGN1ZSBmcm9tIGN1
ZXMuCi0KLSAgICAvLyBUaGVyZSBpcyBub3RoaW5nIGV4cGxpY2l0bHkgdG8gYmUgZG9uZSBoZXJl
LCBhcyBhbGwgdGhlIGNhY2hpbmcgb2NjdXJzCi0gICAgLy8gd2l0aGluIHRoZSBUZXh0VHJhY2tD
dWUgaW5zdGFuY2UgaXRzZWxmLiBJZiBwYXJhbWV0ZXJzIG9mIHRoZSBjdWUgY2hhbmdlLAotICAg
IC8vIHRoZSBkaXNwbGF5IHRyZWUgaXMgY2xlYXJlZC4KLQotICAgIC8vIElmIHRoZSBudW1iZXIg
b2YgQ1NTIGJveGVzIGluIHRoZSBvdXRwdXQgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgY3Vl
cwotICAgIC8vIHdlIHdpc2ggdG8gcmVuZGVyIChlLmcuLCB3ZSBhcmUgYWRkaW5nIGFub3RoZXIg
Y3VlIGluIGEgc2V0IG9mIHJvbGwtdXAKLSAgICAvLyBjdWVzKSwgcmVtb3ZlIGFsbCB0aGUgZXhp
c3RpbmcgQ1NTIGJveGVzIHJlcHJlc2VudGluZyB0aGUgY3VlcyBhbmQgcmUtYWRkCi0gICAgLy8g
dGhlbSBzbyB0aGF0IHRoZSBuZXcgY3VlIGlzIGF0IHRoZSBib3R0b20uCi0gICAgLy8gRklYTUU6
IENhbGxpbmcgY291bnRDaGlsZE5vZGVzKCkgaGVyZSBpcyBpbmVmZmljaWVudC4gV2UgZG9uJ3Qg
bmVlZCB0bwotICAgIC8vIHRyYXZlcnNlIGFsbCBjaGlsZHJlbiBqdXN0IHRvIGNoZWNrIGlmIHRo
ZXJlIGFyZSBsZXNzIGNoaWxkcmVuIHRoYW4gY3Vlcy4KLSAgICBpZiAoY291bnRDaGlsZE5vZGVz
KCkgPCBhY3RpdmVDdWVzLnNpemUoKSkKLSAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oKTsKLQotICAg
IGFjdGl2ZUN1ZXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10gKEN1ZUludGVydmFsJiBjdWVJbnRlcnZh
bCkgewotICAgICAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBjdWVJbnRlcnZhbC5kYXRh
KCk7Ci0gICAgICAgIHJldHVybiAhY3VlLT50cmFjaygpCi0gICAgICAgICAgICB8fCAhY3VlLT50
cmFjaygpLT5pc1JlbmRlcmVkKCkKLSAgICAgICAgICAgIHx8IGN1ZS0+dHJhY2soKS0+bW9kZSgp
ID09IFRleHRUcmFjazo6TW9kZTo6RGlzYWJsZWQKLSAgICAgICAgICAgIHx8ICFjdWUtPmlzQWN0
aXZlKCkKLSAgICAgICAgICAgIHx8ICFjdWUtPmlzUmVuZGVyYWJsZSgpOwotICAgIH0pOwotCi0g
ICAgLy8gU29ydCB0aGUgYWN0aXZlIGN1ZXMgZm9yIHRoZSBhcHByb3ByaWF0ZSBkaXNwbGF5IG9y
ZGVyLiBGb3IgZXhhbXBsZSwgZm9yIHJvbGwtdXAKLSAgICAvLyBvciBwYWludC1vbiBjYXB0aW9u
cywgd2UgbmVlZCB0byBhZGQgdGhlIGN1ZXMgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVy
LAotICAgIC8vIHNvIHRoYXQgdGhlIG5ld2VzdCBjYXB0aW9ucyBhcHBlYXIgYXQgdGhlIGJvdHRv
bS4KLSAgICBzdGQ6OnNvcnQoYWN0aXZlQ3Vlcy5iZWdpbigpLCBhY3RpdmVDdWVzLmVuZCgpLCAm
Y29tcGFyZUN1ZUludGVydmFsRm9yRGlzcGxheSk7Ci0KLSAgICBpZiAobWVkaWFDb250cm9sbGVy
KCktPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpKSB7Ci0gICAgICAgIC8vIDEwLiBGb3IgZWFjaCB0
ZXh0IHRyYWNrIGN1ZSBpbiBjdWVzIHRoYXQgaGFzIG5vdCB5ZXQgaGFkCi0gICAgICAgIC8vIGNv
cnJlc3BvbmRpbmcgQ1NTIGJveGVzIGFkZGVkIHRvIG91dHB1dCwgaW4gdGV4dCB0cmFjayBjdWUg
b3JkZXIsIHJ1biB0aGUKLSAgICAgICAgLy8gZm9sbG93aW5nIHN1YnN0ZXBzOgotICAgICAgICBm
b3IgKGF1dG8mIGludGVydmFsIDogYWN0aXZlQ3VlcykgewotICAgICAgICAgICAgYXV0byBjdWUg
PSBpbnRlcnZhbC5kYXRhKCk7Ci0gICAgICAgICAgICBjdWUtPnNldEZvbnRTaXplKG1fZm9udFNp
emUsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCksIG1fZm9udFNpemVJc0ltcG9ydGFudCk7Ci0g
ICAgICAgICAgICBpZiAoaXM8VlRUQ3VlPigqY3VlKSkKLSAgICAgICAgICAgICAgICBwcm9jZXNz
QWN0aXZlVlRUQ3VlKGRvd25jYXN0PFZUVEN1ZT4oKmN1ZSkpOwotICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBkaXNwbGF5Qm94ID0gY3VlLT5nZXREaXNwbGF5VHJlZSht
X3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplKTsKLSAgICAgICAgICAgICAgICBp
ZiAoZGlzcGxheUJveC0+aGFzQ2hpbGROb2RlcygpICYmICFjb250YWlucyhkaXNwbGF5Qm94Lmdl
dCgpKSkKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ2hpbGQoKmRpc3BsYXlCb3gpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gMTEuIFJldHVybiBvdXRwdXQu
Ci0gICAgaWYgKGhhc0NoaWxkTm9kZXMoKSkKLSAgICAgICAgc2hvdygpOwotICAgIGVsc2UKLSAg
ICAgICAgaGlkZSgpOwotCi0gICAgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRl
ZCgpOwotICAgIHVwZGF0ZVRleHRUcmFja1N0eWxlKCk7Ci0gICAgbV9uZWVkc0dlbmVyYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24gPSB0cnVlOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJ
Zk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX25lZWRzR2VuZXJhdGVUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZWVkc0dlbmVyYXRlVGV4dFRyYWNrUmVw
cmVzZW50YXRpb24gPSBmYWxzZTsKLQotICAgIC8vIFdlIHNob3VsZCBjYWxsIG1fdGV4dFRyYWNr
UmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpIHRvIHBhaW50IHRoZSBzdWJ0cmVlIG9mCi0gICAgLy8g
dGhlIFJlbmRlclRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQgYWZ0ZXIgdGhlIGxheW91dCBpcyBj
bGVhbi4KLSAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikKLSAgICAgICAgbV90ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbi0+dXBkYXRlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6cHJvY2Vzc0FjdGl2ZVZUVEN1ZShWVFRDdWUmIGN1ZSkK
LXsKLSAgICBERUJVR19MT0coTE9HSURFTlRJRklFUiwgImFkZGluZyBhbmQgcG9zaXRpb25pbmcg
Y3VlOiBcIiIsIGN1ZS50ZXh0KCksICJcIiwgc3RhcnQ9IiwgY3VlLnN0YXJ0VGltZSgpLCAiLCBl
bmQ9IiwgY3VlLmVuZFRpbWUoKSwgIiwgbGluZT0iLCBjdWUubGluZSgpKTsKLSAgICBSZWY8VGV4
dFRyYWNrQ3VlQm94PiBkaXNwbGF5Qm94ID0gKmN1ZS5nZXREaXNwbGF5VHJlZShtX3ZpZGVvRGlz
cGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplKTsKLQotICAgIGlmIChhdXRvIHJlZ2lvbiA9IGN1
ZS50cmFjaygpLT5yZWdpb25zKCktPmdldFJlZ2lvbkJ5SWQoY3VlLnJlZ2lvbklkKCkpKSB7Ci0g
ICAgICAgIC8vIExldCByZWdpb24gYmUgdGhlIFdlYlZUVCByZWdpb24gd2hvc2UgcmVnaW9uIGlk
ZW50aWZpZXIKLSAgICAgICAgLy8gbWF0Y2hlcyB0aGUgdGV4dCB0cmFjayBjdWUgcmVnaW9uIGlk
ZW50aWZpZXIgb2YgY3VlLgotICAgICAgICBSZWY8SFRNTERpdkVsZW1lbnQ+IHJlZ2lvbk5vZGUg
PSByZWdpb24tPmdldERpc3BsYXlUcmVlKCk7Ci0KLSAgICAgICAgaWYgKCFjb250YWlucyhyZWdp
b25Ob2RlLnB0cigpKSkKLSAgICAgICAgICAgIGFwcGVuZENoaWxkKHJlZ2lvbi0+Z2V0RGlzcGxh
eVRyZWUoKSk7Ci0KLSAgICAgICAgcmVnaW9uLT5hcHBlbmRUZXh0VHJhY2tDdWVCb3goV1RGTW92
ZShkaXNwbGF5Qm94KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgY3VlIGhhcyBhbiBl
bXB0eSB0ZXh0IHRyYWNrIGN1ZSByZWdpb24gaWRlbnRpZmllciBvciB0aGVyZSBpcyBubwotICAg
ICAgICAvLyBXZWJWVFQgcmVnaW9uIHdob3NlIHJlZ2lvbiBpZGVudGlmaWVyIGlzIGlkZW50aWNh
bCB0byBjdWUncyB0ZXh0Ci0gICAgICAgIC8vIHRyYWNrIGN1ZSByZWdpb24gaWRlbnRpZmllciwg
cnVuIHRoZSBmb2xsb3dpbmcgc3Vic3RlcHM6Ci0gICAgICAgIGlmIChkaXNwbGF5Qm94LT5oYXND
aGlsZE5vZGVzKCkgJiYgIWNvbnRhaW5zKGRpc3BsYXlCb3gucHRyKCkpKSB7Ci0gICAgICAgICAg
ICAvLyBOb3RlOiB0aGUgZGlzcGxheSB0cmVlIG9mIGEgY3VlIGlzIHJlbW92ZWQgd2hlbiB0aGUg
YWN0aXZlIGZsYWcgb2YgdGhlIGN1ZSBpcyB1bnNldC4KLSAgICAgICAgICAgIGFwcGVuZENoaWxk
KGRpc3BsYXlCb3gpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZUFjdGl2ZUN1ZXNGb250U2l6ZSgpCi17Ci0g
ICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBt
ZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0gICAgaWYgKCFtZWRpYUVs
ZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHNtYWxsZXN0RGltZW5zaW9uID0g
c3RkOjptaW4obV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWlnaHQoKSwgbV92aWRlb0Rpc3Bs
YXlTaXplLnNpemUoKS53aWR0aCgpKTsKLSAgICBmbG9hdCBmb250U2NhbGUgPSBkb2N1bWVudCgp
LnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5jYXB0aW9uRm9udFNpemVTY2Fs
ZUFuZEltcG9ydGFuY2UobV9mb250U2l6ZUlzSW1wb3J0YW50KTsKLSAgICBtX2ZvbnRTaXplID0g
bHJvdW5kZihzbWFsbGVzdERpbWVuc2lvbiAqIGZvbnRTY2FsZSk7Ci0KLSAgICBmb3IgKGF1dG8m
IGFjdGl2ZUN1ZSA6IG1lZGlhRWxlbWVudC0+Y3VycmVudGx5QWN0aXZlQ3VlcygpKSB7Ci0gICAg
ICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9IGFjdGl2ZUN1ZS5kYXRhKCk7Ci0gICAgICAg
IGlmIChjdWUtPmlzUmVuZGVyYWJsZSgpKQotICAgICAgICAgICAgY3VlLT5zZXRGb250U2l6ZSht
X2ZvbnRTaXplLCBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplSXNJbXBvcnRh
bnQpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50Ojp1cGRhdGVUZXh0U3Ryb2tlU3R5bGUoKQotewotICAgIGlmICghZG9jdW1lbnQoKS5wYWdl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVk
aWFFbGVtZW50KHRoaXMpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgU3RyaW5nIGxhbmd1YWdlOwotCi0gICAgLy8gRklYTUU6IFNpbmNlIGl0IGlz
IHBvc3NpYmxlIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSB0ZXh0IHRyYWNrIGVuYWJsZWQsIHRoZSBm
b2xsb3dpbmcgY29kZSBtYXkgbm90IGZpbmQgdGhlIGNvcnJlY3QgbGFuZ3VhZ2UuCi0gICAgLy8g
VGhlIGRlZmF1bHQgVUkgb25seSBhbGxvd3MgYSB1c2VyIHRvIGVuYWJsZSBvbmUgdHJhY2sgYXQg
YSB0aW1lLCBzbyBpdCBzaG91bGQgYmUgT0sgZm9yIG5vdywgYnV0IHdlIHNob3VsZCBjb25zaWRl
ciBkb2luZwotICAgIC8vIHRoaXMgZGlmZmVyZW50bHksIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTg3NT4uCi0gICAgaWYgKGF1dG8qIHRyYWNrcyA9IG1l
ZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0cmFja3MtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8gdHJhY2sgPSB0
cmFja3MtPml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAodHJhY2sgJiYgdHJhY2stPm1vZGUoKSA9
PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKLSAgICAgICAgICAgICAgICBsYW5ndWFnZSA9
IHRyYWNrLT52YWxpZEJDUDQ3TGFuZ3VhZ2UoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZsb2F0IHN0cm9rZVdpZHRoOwot
ICAgIGJvb2wgaW1wb3J0YW50OwotCi0gICAgLy8gRklYTUU6IGZpbmQgYSB3YXkgdG8gc2V0IHRo
aXMgcHJvcGVydHkgaW4gdGhlIHN0eWxlc2hlZXQgbGlrZSB0aGUgb3RoZXIgdXNlciBzdHlsZSBw
cmVmZXJlbmNlcywgc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY5ODc0Pi4KLSAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZl
cmVuY2VzKCkuY2FwdGlvblN0cm9rZVdpZHRoRm9yRm9udChtX2ZvbnRTaXplLCBsYW5ndWFnZSwg
c3Ryb2tlV2lkdGgsIGltcG9ydGFudCkpCi0gICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlTdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgsIENTU1VuaXRUeXBlOjpDU1NfUFgs
IGltcG9ydGFudCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxl
bWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpCi17Ci0gICAgYXV0
byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0gICAgaWYgKCFtZWRp
YUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVxdWlyZXNUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbiA9IG1lZGlhRWxlbWVudC0+cmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbigpOwotICAgIGlmICghaGFzQ2hpbGROb2RlcygpIHx8ICFyZXF1aXJlc1RleHRUcmFja1Jl
cHJlc2VudGF0aW9uKSB7Ci0gICAgICAgIGlmIChtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uKSB7
Ci0gICAgICAgICAgICBpZiAoIXJlcXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCi0gICAg
ICAgICAgICAgICAgY2xlYXJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNldEhpZGRl
bih0cnVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFt
X3RleHRUcmFja1JlcHJlc2VudGF0aW9uKSB7Ci0gICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJ
RklFUik7Ci0KLSAgICAgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IFRleHRUcmFja1Jl
cHJlc2VudGF0aW9uOjpjcmVhdGUoKnRoaXMpOwotICAgICAgICBpZiAoZG9jdW1lbnQoKS5wYWdl
KCkpCi0gICAgICAgICAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT5zZXRDb250ZW50U2Nh
bGUoZG9jdW1lbnQoKS5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICBtZWRp
YUVsZW1lbnQtPnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKG1fdGV4dFRyYWNrUmVwcmVzZW50
YXRpb24uZ2V0KCkpOwotICAgIH0KLQotICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNl
dEhpZGRlbihmYWxzZSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6Y2xlYXJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpCi17Ci0gICAgaWYgKCFtX3Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBTFdBWVNfTE9H
KExPR0lERU5USUZJRVIpOwotCi0gICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IG51bGxw
dHI7Ci0gICAgaWYgKGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHRoaXMp
KQotICAgICAgICBtZWRpYUVsZW1lbnQtPnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKG51bGxw
dHIpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVw
ZGF0ZVRleHRUcmFja1N0eWxlKCkKLXsKLSAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlv
bikgewotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24s
IENTU1ZhbHVlQWJzb2x1dGUpOwotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5V2lkdGgsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkud2lkdGgoKSwgQ1NTVW5pdFR5
cGU6OkNTU19QWCk7Ci0gICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlI
ZWlnaHQsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkuaGVpZ2h0KCksIENTU1VuaXRUeXBlOjpD
U1NfUFgpOwotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwg
MCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlUb3AsIDAsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0
aW9uKTsKLSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgpOwot
ICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQpOwotICAgIHJl
bW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0KTsKLSAgICByZW1vdmVJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjplbnRlcmVkRnVsbHNjcmVlbigpCi17Ci0gICAgdXBk
YXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOwotICAgIHVwZGF0ZVNpemVzKEZv
cmNlVXBkYXRlOjpZZXMpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OmV4aXRlZEZ1bGxzY3JlZW4oKQotewotICAgIGNsZWFyVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24oKTsKLSAgICB1cGRhdGVTaXplcyhGb3JjZVVwZGF0ZTo6WWVzKTsKLX0KLQotYm9v
bCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVWaWRlb0Rpc3Bs
YXlTaXplKCkKLXsKLSAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlz
KTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
SW50UmVjdCB2aWRlb0JveDsKLSAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgewot
ICAgICAgICB2aWRlb0JveCA9IG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPmJvdW5kcygpOwot
ICAgICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IGRvY3VtZW50KCkucGFnZSgpLT5kZXZp
Y2VTY2FsZUZhY3RvcigpOwotICAgICAgICB2aWRlb0JveC5zZXRXaWR0aCh2aWRlb0JveC53aWR0
aCgpICogZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgICAgICB2aWRlb0JveC5zZXRIZWlnaHQodmlk
ZW9Cb3guaGVpZ2h0KCkgKiBkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKCFpczxSZW5kZXJWaWRlbz4obWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmlkZW9Cb3ggPSBkb3duY2FzdDxSZW5kZXJW
aWRlbz4oKm1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSkudmlkZW9Cb3goKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV92aWRlb0Rpc3BsYXlTaXplID09IHZpZGVvQm94KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBtX3ZpZGVvRGlzcGxheVNpemUgPSB2aWRlb0JveDsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRh
dGVTaXplcyhGb3JjZVVwZGF0ZSBmb3JjZSkKLXsKLSAgICBpZiAoIXVwZGF0ZVZpZGVvRGlzcGxh
eVNpemUoKSAmJiBmb3JjZSAhPSBGb3JjZVVwZGF0ZTo6WWVzKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
IG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKLSAgICBpZiAoIW1lZGlh
RWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFFbGVtZW50LT5zeW5jVGV4dFRy
YWNrQm91bmRzKCk7Ci0KLSAgICB1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKTsKLSAgICB1cGRh
dGVUZXh0U3Ryb2tlU3R5bGUoKTsKLSAgICBmb3IgKGF1dG8mIGFjdGl2ZUN1ZSA6IG1lZGlhRWxl
bWVudC0+Y3VycmVudGx5QWN0aXZlQ3VlcygpKQotICAgICAgICBhY3RpdmVDdWUuZGF0YSgpLT5y
ZWNhbGN1bGF0ZVN0eWxlcygpOwotCi0gICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNd
ICgpIHsKLSAgICAgICAgdXBkYXRlRGlzcGxheSgpOwotICAgIH0pOwotfQotCi1SZWZQdHI8SW1h
Z2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFj
a1JlcHJlc2VudGF0aW9uSW1hZ2UoKQotewotICAgIGlmICghaGFzQ2hpbGROb2RlcygpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBkb2N1bWVu
dCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwotCi0gICAgYXV0byogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgaWYgKCFyZW5kZXJlci0+aGFzTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1v
ZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7Ci0KLSAgICBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvciA9IDE7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAg
ICAgZGV2aWNlU2NhbGVGYWN0b3IgPSBwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotCi0gICAg
SW50UmVjdCBwYWludGluZ1JlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5zaXplKCkp
OwotCi0gICAgLy8gRklYTUUgKDE0OTQyMik6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5j
b25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3RvcikpOwotICAgIGlmICgh
YnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcGFpbnRGbGFncyA9
IFJlbmRlckxheWVyOjpwYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ0FsbFBoYXNlc0ZsYWdz
KCk7Ci0gICAgcGFpbnRGbGFncy5hZGQoUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJUZW1wb3JhcnlD
bGlwUmVjdHMpOwotICAgIGxheWVyLT5wYWludChidWZmZXItPmNvbnRleHQoKSwgcGFpbnRpbmdS
ZWN0LCBMYXlvdXRTaXplKCksIHsgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5
ZXJzLCBQYWludEJlaGF2aW9yOjpTbmFwc2hvdHRpbmcgfSwgbnVsbHB0ciwgcGFpbnRGbGFncyk7
Ci0KLSAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShidWZmZXIp
KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp0ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQoY29uc3QgSW50UmVjdCYpCi17Ci0gICAg
dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOwotICAgIHVwZGF0ZVNpemVz
KCk7Ci19Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLWNvbnN0IExvZ2dlciYgTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nZ2VyKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fbG9nZ2VyKQotICAgICAgICBtX2xvZ2dlciA9ICZkb2N1bWVudCgpLmxvZ2dlcigpOwot
Ci0gICAgcmV0dXJuICptX2xvZ2dlcjsKLX0KLQotY29uc3Qgdm9pZCogTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nSWRlbnRpZmllcigpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2xvZ0lkZW50aWZpZXIpIHsKLSAgICAgICAgaWYgKGF1dG8gbWVkaWFFbGVtZW50ID0gcGFy
ZW50TWVkaWFFbGVtZW50KHRoaXMpKQotICAgICAgICAgICAgbV9sb2dJZGVudGlmaWVyID0gbWVk
aWFFbGVtZW50LT5sb2dJZGVudGlmaWVyKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fbG9nSWRl
bnRpZmllcjsKLX0KLQotV1RGTG9nQ2hhbm5lbCYgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudDo6bG9nQ2hhbm5lbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIExvZ01lZGlhOwot
fQotI2VuZGlmIC8vICFSRUxFQVNFX0xPR19ESVNBQkxFRAotCi0jZW5kaWYgLy8gRU5BQkxFKFZJ
REVPX1RSQUNLKQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3NmIxNGQ2ZjUyYmU2YTBlNzM4MTkxNzI5M2Q1Mzc3OWJjZjkxZDky
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw1MzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRl
ICJHZW5lcmljVGFza1F1ZXVlLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudFR5cGVz
LmgiCi0jaW5jbHVkZSAiVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uaCIKLSNpbmNsdWRlIDx3dGYv
TG9nZ2VySGVscGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQgZmluYWwg
OiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9D
QVRFRChNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
TWVkaWFDb250cm9sUGFuZWxFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQg
c2V0Q2FuQmVEcmFnZ2VkKGJvb2wpOwotICAgIHZvaWQgc2V0SXNEaXNwbGF5ZWQoYm9vbCk7Ci0K
LSAgICB2b2lkIHJlc2V0UG9zaXRpb24oKTsKLSAgICB2b2lkIG1ha2VPcGFxdWUoKTsKLSAgICB2
b2lkIG1ha2VUcmFuc3BhcmVudCgpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
Ym9vbCB3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNv
bnRyb2xQYW5lbEVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzdGFydERyYWcoY29uc3QgTGF5b3V0
UG9pbnQmIGV2ZW50TG9jYXRpb24pOwotICAgIHZvaWQgY29udGludWVEcmFnKGNvbnN0IExheW91
dFBvaW50JiBldmVudExvY2F0aW9uKTsKLSAgICB2b2lkIGVuZERyYWcoKTsKLQotICAgIHZvaWQg
c3RhcnRUaW1lcigpOwotICAgIHZvaWQgc3RvcFRpbWVyKCk7Ci0gICAgdm9pZCB0cmFuc2l0aW9u
VGltZXJGaXJlZCgpOwotCi0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBMYXlvdXRQb2ludCYp
OwotCi0gICAgYm9vbCBtX2NhbkJlRHJhZ2dlZDsKLSAgICBib29sIG1faXNCZWluZ0RyYWdnZWQ7
Ci0gICAgYm9vbCBtX2lzRGlzcGxheWVkOwotICAgIGJvb2wgbV9vcGFxdWU7Ci0gICAgTGF5b3V0
UG9pbnQgbV9sYXN0RHJhZ0V2ZW50TG9jYXRpb247Ci0gICAgTGF5b3V0UG9pbnQgbV9jdW11bGF0
aXZlRHJhZ09mZnNldDsKLQotICAgIFRpbWVyIG1fdHJhbnNpdGlvblRpbWVyOwotfTsKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xQYW5lbEVu
Y2xvc3VyZUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0g
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVsZW1l
bnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVF
bGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRp
YUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVsZW1lbnQoRG9jdW1lbnQmKTsKLX07Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sT3ZlcmxheUVuY2xv
c3VyZUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xPdmVybGF5RW5jbG9zdXJlRWxlbWVu
dCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xPdmVybGF5RW5jbG9zdXJl
RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVk
aWFDb250cm9sT3ZlcmxheUVuY2xvc3VyZUVsZW1lbnQoRG9jdW1lbnQmKTsKLX07Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sVGltZWxpbmVD
b250YWluZXJFbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgewot
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJF
bGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFRpbWVsaW5lQ29u
dGFpbmVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIHNldFRpbWVEaXNw
bGF5c0hpZGRlbihib29sKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIFJlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVu
ZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1l
bnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KTsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5l
ckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci0KLSAgICBSZW5kZXJQdHI8UmVuZGVy
RWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRl
clRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudCBmaW5hbCA6
IHB1YmxpYyBNZWRpYUNvbnRyb2xEaXZFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEKE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQm
KTsKLQotICAgIHZvaWQgdXBkYXRlKCk7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFD
b250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIGVudW0gU3RhdGVC
ZWluZ0Rpc3BsYXllZCB7IE5vdGhpbmcsIExvYWRpbmcsIExpdmVCcm9hZGNhc3QgfTsKLSAgICBT
dGF0ZUJlaW5nRGlzcGxheWVkIG1fc3RhdGVCZWluZ0Rpc3BsYXllZDsKLX07Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0
dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudCB7
Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25F
bGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1
dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYsIE1lZGlhQ29udHJvbHMqKTsKLQotI2lmICFQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50
cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmLCBNZWRp
YUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVy
cmlkZTsKLQotICAgIE1lZGlhQ29udHJvbHMqIG1fY29udHJvbHM7Ci19OwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11
dGVCdXR0b25FbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVt
ZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFZvbHVtZVNsaWRl
ck11dGVCdXR0b25FbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxl
bWVudChEb2N1bWVudCYpOwotfTsKLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLWNsYXNzIE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50IGZpbmFsIDogcHVibGljIE1l
ZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRp
YUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRp
YUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRz
KCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHVwZGF0ZURp
c3BsYXlUeXBlKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250
cm9sUGxheUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQgZmlu
YWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKE1lZGlhQ29udHJvbE92ZXJsYXlQbGF5QnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQ+IGNy
ZWF0ZShEb2N1bWVudCYpOwotCi0gICAgdm9pZCB1cGRhdGVEaXNwbGF5VHlwZSgpIG92ZXJyaWRl
OwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbE92ZXJsYXlQbGF5QnV0dG9u
RWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNs
YXNzIE1lZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBN
ZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChNZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8TWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50PiBjcmVhdGUoRG9j
dW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xTZWVrRm9yd2Fy
ZEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIGJvb2wgaXNGb3J3YXJkQnV0dG9uKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQg
ZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQgewotICAgIFdURl9N
QUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50KTsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9s
U2Vla0JhY2tCdXR0b25FbGVtZW50KERvY3VtZW50Jik7Ci0KLSAgICBib29sIGlzRm9yd2FyZEJ1
dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci19OwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQpOwotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudD4gY3Jl
YXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdp
bGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQot
I2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sUmV3aW5kQnV0dG9u
RWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNs
YXNzIE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50IGZpbmFsIDogcHVi
bGljIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29s
IHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sUmV0dXJuVG9S
ZWFsdGltZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9u
RWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYsIE1lZGlhQ29udHJvbHMq
KTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01v
dXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotICAg
IHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBleHBs
aWNpdCBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQoRG9jdW1l
bnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQmKSBvdmVycmlkZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShXSU4pIHx8
IFBMQVRGT1JNKEdUSykKLSAgICBNZWRpYUNvbnRyb2xzKiBtX2NvbnRyb2xzOwotI2VuZGlmCi19
OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJv
bENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRy
b2xEaXZFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbENs
b3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxN
ZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVu
dCYpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9uZFRv
TW91c2VDbGlja0V2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi1w
cml2YXRlOgotICAgIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudChE
b2N1bWVudCYpOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFz
cyBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQgZmluYWwgOiBwdWJs
aWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChN
ZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQpOwotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50PiBj
cmVhdGUoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHVwZGF0ZURpc3BsYXkoKTsKLQot
cHJpdmF0ZToKLSAgICBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQo
RG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIHJlYnVpbGRUcmFja0xpc3RN
ZW51KCk7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsK
LQotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4gVHJhY2tNZW51SXRlbXM7Ci0g
ICAgVHJhY2tNZW51SXRlbXMgbV9tZW51SXRlbXM7Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQot
ICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxUZXh0VHJhY2s+PiBN
ZW51SXRlbVRvVHJhY2tNYXA7Ci0gICAgTWVudUl0ZW1Ub1RyYWNrTWFwIG1fbWVudVRvVHJhY2tN
YXA7Ci0jZW5kaWYKLSAgICBNZWRpYUNvbnRyb2xzKiBtX2NvbnRyb2xzOwotfTsKLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xUaW1lbGluZUVs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudCk7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IGNyZWF0ZShEb2N1
bWVudCYsIE1lZGlhQ29udHJvbHMqKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZTsKLSNlbmRpZgot
Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihkb3VibGUpOwotICAgIHZvaWQgc2V0RHVyYXRpb24oZG91
YmxlKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1l
bnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIE1lZGlhQ29udHJvbHMqIG1fY29udHJvbHM7
Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbElu
cHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuQnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRz
KCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHNldElzRnVs
bHNjcmVlbihib29sKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuQnV0dG9uRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudCBmaW5h
bCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50IHsKLSAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudCk7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1l
bnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29u
dHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYpOwotfTsKLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVt
ZVNsaWRlckVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxl
bWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xGdWxsc2NyZWVu
Vm9sdW1lU2xpZGVyRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLXBy
aXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZVNsaWRlckVs
ZW1lbnQoRG9jdW1lbnQmKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotY2xhc3MgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1dHRvbkVsZW1lbnQgZmlu
YWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50KTsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5C
dXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9uRWxlbWVudChEb2N1bWVudCYpOwotICAgIHZv
aWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9s
dW1lTWF4QnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sRnVsbHNjcmVlblZv
bHVtZU1heEJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250
cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwot
Ci0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VD
bGlja0V2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi1wcml2YXRl
OgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVt
ZW50KERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBv
dmVycmlkZTsKLX07Ci0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFz
cyBNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQgZmluYWwgOiBwdWJsaWMg
TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEKE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudCk7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQ+IGNy
ZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbFRp
bWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudChEb2N1bWVudCYpOwotfTsKLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3Bs
YXlFbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudCB7
Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3Bs
YXlFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbEN1cnJlbnRU
aW1lRGlzcGxheUVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmKTsK
LX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIEVOQUJMRShWSURF
T19UUkFDSykKLQotY2xhc3MgVlRUQ3VlOwotCi1jbGFzcyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50IGZpbmFsCi0gICAgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVu
dAotICAgICwgcHVibGljIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50Ci0jaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECi0gICAgLCBwcml2YXRlIExvZ2dlckhlbHBlcgotI2VuZGlmCi17Ci0g
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi0gICAgZW51bSBjbGFzcyBGb3Jj
ZVVwZGF0ZSB7IFllcywgTm8gfTsKLSAgICB2b2lkIHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlIGZv
cmNlID0gRm9yY2VVcGRhdGU6Ok5vKTsKLSAgICB2b2lkIHVwZGF0ZURpc3BsYXkoKTsKLQotICAg
IHZvaWQgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKCk7Ci0KLSAg
ICB2b2lkIGVudGVyZWRGdWxsc2NyZWVuKCk7Ci0gICAgdm9pZCBleGl0ZWRGdWxsc2NyZWVuKCk7
Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgLy8gRWxlbWVudAotICAgIFJlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVu
ZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkNsaWVudAotICAgIFJlZlB0cjxJbWFnZT4gY3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25JbWFnZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgdGV4dFRyYWNrUmVwcmVzZW50YXRpb25Cb3Vu
ZHNDaGFuZ2VkKGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdXBkYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOwotICAgIHZvaWQgY2xlYXJUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbigpOwotCi0gICAgYm9vbCB1cGRhdGVWaWRlb0Rpc3BsYXlTaXplKCk7Ci0g
ICAgdm9pZCB1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKTsKLSAgICB2b2lkIHVwZGF0ZVRleHRT
dHJva2VTdHlsZSgpOwotICAgIHZvaWQgcHJvY2Vzc0FjdGl2ZVZUVEN1ZShWVFRDdWUmKTsKLSAg
ICB2b2lkIHVwZGF0ZVRleHRUcmFja1N0eWxlKCk7Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJM
RUQKLSAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsOwotICAgIGNvbnN0IHZv
aWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbDsKLSAgICBXVEZMb2dDaGFubmVsJiBsb2dD
aGFubmVsKCkgY29uc3QgZmluYWw7Ci0gICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIk1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQi
OyB9Ci0gICAgbXV0YWJsZSBSZWZQdHI8TG9nZ2VyPiBtX2xvZ2dlcjsKLSAgICBtdXRhYmxlIGNv
bnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsKLSNlbmRpZgotCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFRleHRUcmFja1JlcHJlc2VudGF0aW9uPiBtX3RleHRUcmFja1JlcHJlc2Vu
dGF0aW9uOwotCi0gICAgR2VuZXJpY1Rhc2tRdWV1ZTxUaW1lcj4gbV90YXNrUXVldWU7Ci0gICAg
SW50UmVjdCBtX3ZpZGVvRGlzcGxheVNpemU7Ci0gICAgaW50IG1fZm9udFNpemUgeyAwIH07Ci0g
ICAgYm9vbCBtX2ZvbnRTaXplSXNJbXBvcnRhbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9uZWVk
c0dlbmVyYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24geyBmYWxzZSB9OwotfTsKLQotI2VuZGlm
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmMxZGViY2Vl
MmY2M2RmNjdkMTQzNDYyNzIyNzUzMmQ2MDY1Y2I3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQuY3BwCkBAIC0wLDAgKzEsNDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oIgorCisjaWYgRU5BQkxFKFZJREVPKQor
CisjaW5jbHVkZSAiRE9NVG9rZW5MaXN0LmgiCisjaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGdWxsc2NyZWVuTWFuYWdlci5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUE9ESW50ZXJ2YWwuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNp
bmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJT
dHlsZVByb3BlcnRpZXMuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWVHZW5lcmljLmgiCisjaW5j
bHVkZSAiVGV4dFRyYWNrTGlzdC5oIgorI2luY2x1ZGUgIlZUVFJlZ2lvbkxpc3QuaCIKKyNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9MYW5ndWFnZS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KTsKKwordXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworUmVmPE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIEhUTUxNZWRpYUVsZW1lbnQmIG1lZGlh
RWxlbWVudCkKK3sKKyAgICBhdXRvIGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQoZG9jdW1lbnQsIG1lZGlhRWxlbWVudCkpOworICAg
IGVsZW1lbnQtPmhpZGUoKTsKKyAgICByZXR1cm4gZWxlbWVudDsKK30KKworTWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCisg
ICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIGRvY3VtZW50KQorICAgICwgbV9tZWRpYUVsZW1l
bnQobWFrZVdlYWtQdHIoJmVsZW1lbnQpKQoreworICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCIt
d2Via2l0LW1lZGlhLXRleHQtdHJhY2stY29udGFpbmVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpKTsKK30KKworUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJT
dHlsZSYmIHN0eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKQoreworICAgIHJldHVybiBj
cmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7Cit9
CisKK3N0YXRpYyBib29sIGNvbXBhcmVDdWVJbnRlcnZhbEZvckRpc3BsYXkoY29uc3QgQ3VlSW50
ZXJ2YWwmIG9uZSwgY29uc3QgQ3VlSW50ZXJ2YWwmIHR3bykKK3sKKyAgICByZXR1cm4gb25lLmRh
dGEoKS0+aXNQb3NpdGlvbmVkQWJvdmUodHdvLmRhdGEoKSk7Cit9OworCit2b2lkIE1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZURpc3BsYXkoKQoreworICAgIGlm
IChtX21lZGlhRWxlbWVudCAmJiAhbV9tZWRpYUVsZW1lbnQtPmNsb3NlZENhcHRpb25zVmlzaWJs
ZSgpKQorICAgICAgICByZW1vdmVDaGlsZHJlbigpOworCisgICAgLy8gMS4gSWYgdGhlIG1lZGlh
IGVsZW1lbnQgaXMgYW4gYXVkaW8gZWxlbWVudCwgb3IgaXMgYW5vdGhlciBwbGF5YmFjaworICAg
IC8vIG1lY2hhbmlzbSB3aXRoIG5vIHJlbmRlcmluZyBhcmVhLCBhYm9ydCB0aGVzZSBzdGVwcy4g
VGhlcmUgaXMgbm90aGluZyB0bworICAgIC8vIHJlbmRlci4KKyAgICBpZiAoIW1fbWVkaWFFbGVt
ZW50IHx8ICFtX21lZGlhRWxlbWVudC0+aXNWaWRlbygpIHx8IG1fdmlkZW9EaXNwbGF5U2l6ZS5z
aXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyAyLiBMZXQgdmlkZW8g
YmUgdGhlIG1lZGlhIGVsZW1lbnQgb3Igb3RoZXIgcGxheWJhY2sgbWVjaGFuaXNtLgorICAgIEhU
TUxWaWRlb0VsZW1lbnQmIHZpZGVvID0gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4oKm1fbWVk
aWFFbGVtZW50KTsKKworICAgIC8vIDMuIExldCBvdXRwdXQgYmUgYW4gZW1wdHkgbGlzdCBvZiBh
YnNvbHV0ZWx5IHBvc2l0aW9uZWQgQ1NTIGJsb2NrIGJveGVzLgorCisgICAgLy8gNC4gSWYgdGhl
IHVzZXIgYWdlbnQgaXMgZXhwb3NpbmcgYSB1c2VyIGludGVyZmFjZSBmb3IgdmlkZW8sIGFkZCB0
bworICAgIC8vIG91dHB1dCBvbmUgb3IgbW9yZSBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IHBvc2l0
aW9uZWQgQ1NTIGJsb2NrIGJveGVzIHRoYXQKKyAgICAvLyBjb3ZlciB0aGUgc2FtZSByZWdpb24g
YXMgdGhlIHVzZXIgaW50ZXJmYWNlLgorCisgICAgLy8gNS4gSWYgdGhlIGxhc3QgdGltZSB0aGVz
ZSBydWxlcyB3ZXJlIHJ1biwgdGhlIHVzZXIgYWdlbnQgd2FzIG5vdCBleHBvc2luZworICAgIC8v
IGEgdXNlciBpbnRlcmZhY2UgZm9yIHZpZGVvLCBidXQgbm93IGl0IGlzLCBsZXQgcmVzZXQgYmUg
dHJ1ZS4gT3RoZXJ3aXNlLAorICAgIC8vIGxldCByZXNldCBiZSBmYWxzZS4KKworICAgIC8vIFRo
ZXJlIGlzIG5vdGhpbmcgdG8gYmUgZG9uZSBleHBsaWNpdGx5IGZvciA0dGggYW5kIDV0aCBzdGVw
cywgYXMKKyAgICAvLyBldmVyeXRoaW5nIGlzIGhhbmRsZWQgdGhyb3VnaCBDU1MuIFRoZSBjYXB0
aW9uIGJveCBpcyBvbiB0b3Agb2YgdGhlCisgICAgLy8gY29udHJvbHMgYm94LCBpbiBhIGNvbnRh
aW5lciBzZXQgd2l0aCB0aGUgLXdlYmtpdC1ib3ggZGlzcGxheSBwcm9wZXJ0eS4KKworICAgIC8v
IDYuIExldCB0cmFja3MgYmUgdGhlIHN1YnNldCBvZiB2aWRlbydzIGxpc3Qgb2YgdGV4dCB0cmFj
a3MgdGhhdCBoYXZlIGFzCisgICAgLy8gdGhlaXIgcnVsZXMgZm9yIHVwZGF0aW5nIHRoZSB0ZXh0
IHRyYWNrIHJlbmRlcmluZyB0aGVzZSBydWxlcyBmb3IKKyAgICAvLyB1cGRhdGluZyB0aGUgZGlz
cGxheSBvZiBXZWJWVFQgdGV4dCB0cmFja3MsIGFuZCB3aG9zZSB0ZXh0IHRyYWNrIG1vZGUgaXMK
KyAgICAvLyBzaG93aW5nIG9yIHNob3dpbmcgYnkgZGVmYXVsdC4KKyAgICAvLyA3LiBMZXQgY3Vl
cyBiZSBhbiBlbXB0eSBsaXN0IG9mIHRleHQgdHJhY2sgY3Vlcy4KKyAgICAvLyA4LiBGb3IgZWFj
aCB0cmFjayB0cmFjayBpbiB0cmFja3MsIGFwcGVuZCB0byBjdWVzIGFsbCB0aGUgY3VlcyBmcm9t
CisgICAgLy8gdHJhY2sncyBsaXN0IG9mIGN1ZXMgdGhhdCBoYXZlIHRoZWlyIHRleHQgdHJhY2sg
Y3VlIGFjdGl2ZSBmbGFnIHNldC4KKyAgICBDdWVMaXN0IGFjdGl2ZUN1ZXMgPSB2aWRlby5jdXJy
ZW50bHlBY3RpdmVDdWVzKCk7CisKKyAgICAvLyA5LiBJZiByZXNldCBpcyBmYWxzZSwgdGhlbiwg
Zm9yIGVhY2ggdGV4dCB0cmFjayBjdWUgY3VlIGluIGN1ZXM6IGlmIGN1ZSdzCisgICAgLy8gdGV4
dCB0cmFjayBjdWUgZGlzcGxheSBzdGF0ZSBoYXMgYSBzZXQgb2YgQ1NTIGJveGVzLCB0aGVuIGFk
ZCB0aG9zZSBib3hlcworICAgIC8vIHRvIG91dHB1dCwgYW5kIHJlbW92ZSBjdWUgZnJvbSBjdWVz
LgorCisgICAgLy8gVGhlcmUgaXMgbm90aGluZyBleHBsaWNpdGx5IHRvIGJlIGRvbmUgaGVyZSwg
YXMgYWxsIHRoZSBjYWNoaW5nIG9jY3VycworICAgIC8vIHdpdGhpbiB0aGUgVGV4dFRyYWNrQ3Vl
IGluc3RhbmNlIGl0c2VsZi4gSWYgcGFyYW1ldGVycyBvZiB0aGUgY3VlIGNoYW5nZSwKKyAgICAv
LyB0aGUgZGlzcGxheSB0cmVlIGlzIGNsZWFyZWQuCisKKyAgICAvLyBJZiB0aGUgbnVtYmVyIG9m
IENTUyBib3hlcyBpbiB0aGUgb3V0cHV0IGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGN1ZXMK
KyAgICAvLyB3ZSB3aXNoIHRvIHJlbmRlciAoZS5nLiwgd2UgYXJlIGFkZGluZyBhbm90aGVyIGN1
ZSBpbiBhIHNldCBvZiByb2xsLXVwCisgICAgLy8gY3VlcyksIHJlbW92ZSBhbGwgdGhlIGV4aXN0
aW5nIENTUyBib3hlcyByZXByZXNlbnRpbmcgdGhlIGN1ZXMgYW5kIHJlLWFkZAorICAgIC8vIHRo
ZW0gc28gdGhhdCB0aGUgbmV3IGN1ZSBpcyBhdCB0aGUgYm90dG9tLgorICAgIC8vIEZJWE1FOiBD
YWxsaW5nIGNvdW50Q2hpbGROb2RlcygpIGhlcmUgaXMgaW5lZmZpY2llbnQuIFdlIGRvbid0IG5l
ZWQgdG8KKyAgICAvLyB0cmF2ZXJzZSBhbGwgY2hpbGRyZW4ganVzdCB0byBjaGVjayBpZiB0aGVy
ZSBhcmUgbGVzcyBjaGlsZHJlbiB0aGFuIGN1ZXMuCisgICAgaWYgKGNvdW50Q2hpbGROb2Rlcygp
IDwgYWN0aXZlQ3Vlcy5zaXplKCkpCisgICAgICAgIHJlbW92ZUNoaWxkcmVuKCk7CisKKyAgICBh
Y3RpdmVDdWVzLnJlbW92ZUFsbE1hdGNoaW5nKFtdIChDdWVJbnRlcnZhbCYgY3VlSW50ZXJ2YWwp
IHsKKyAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gY3VlSW50ZXJ2YWwuZGF0YSgp
OworICAgICAgICByZXR1cm4gIWN1ZS0+dHJhY2soKQorICAgICAgICAgICAgfHwgIWN1ZS0+dHJh
Y2soKS0+aXNSZW5kZXJlZCgpCisgICAgICAgICAgICB8fCBjdWUtPnRyYWNrKCktPm1vZGUoKSA9
PSBUZXh0VHJhY2s6Ok1vZGU6OkRpc2FibGVkCisgICAgICAgICAgICB8fCAhY3VlLT5pc0FjdGl2
ZSgpCisgICAgICAgICAgICB8fCAhY3VlLT5pc1JlbmRlcmFibGUoKTsKKyAgICB9KTsKKworICAg
IC8vIFNvcnQgdGhlIGFjdGl2ZSBjdWVzIGZvciB0aGUgYXBwcm9wcmlhdGUgZGlzcGxheSBvcmRl
ci4gRm9yIGV4YW1wbGUsIGZvciByb2xsLXVwCisgICAgLy8gb3IgcGFpbnQtb24gY2FwdGlvbnMs
IHdlIG5lZWQgdG8gYWRkIHRoZSBjdWVzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciwK
KyAgICAvLyBzbyB0aGF0IHRoZSBuZXdlc3QgY2FwdGlvbnMgYXBwZWFyIGF0IHRoZSBib3R0b20u
CisgICAgc3RkOjpzb3J0KGFjdGl2ZUN1ZXMuYmVnaW4oKSwgYWN0aXZlQ3Vlcy5lbmQoKSwgJmNv
bXBhcmVDdWVJbnRlcnZhbEZvckRpc3BsYXkpOworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50LT5j
bG9zZWRDYXB0aW9uc1Zpc2libGUoKSkgeworICAgICAgICAvLyAxMC4gRm9yIGVhY2ggdGV4dCB0
cmFjayBjdWUgaW4gY3VlcyB0aGF0IGhhcyBub3QgeWV0IGhhZAorICAgICAgICAvLyBjb3JyZXNw
b25kaW5nIENTUyBib3hlcyBhZGRlZCB0byBvdXRwdXQsIGluIHRleHQgdHJhY2sgY3VlIG9yZGVy
LCBydW4gdGhlCisgICAgICAgIC8vIGZvbGxvd2luZyBzdWJzdGVwczoKKyAgICAgICAgZm9yIChh
dXRvJiBpbnRlcnZhbCA6IGFjdGl2ZUN1ZXMpIHsKKyAgICAgICAgICAgIGF1dG8gY3VlID0gaW50
ZXJ2YWwuZGF0YSgpOworICAgICAgICAgICAgY3VlLT5zZXRGb250U2l6ZShtX2ZvbnRTaXplLCBt
X3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplSXNJbXBvcnRhbnQpOworICAgICAg
ICAgICAgaWYgKGlzPFZUVEN1ZT4oKmN1ZSkpCisgICAgICAgICAgICAgICAgcHJvY2Vzc0FjdGl2
ZVZUVEN1ZShkb3duY2FzdDxWVFRDdWU+KCpjdWUpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGF1dG8gZGlzcGxheUJveCA9IGN1ZS0+Z2V0RGlzcGxheVRyZWUobV92aWRl
b0Rpc3BsYXlTaXplLnNpemUoKSwgbV9mb250U2l6ZSk7CisgICAgICAgICAgICAgICAgaWYgKGRp
c3BsYXlCb3gtPmhhc0NoaWxkTm9kZXMoKSAmJiAhY29udGFpbnMoZGlzcGxheUJveC5nZXQoKSkp
CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkKCpkaXNwbGF5Qm94KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIDExLiBSZXR1cm4gb3V0cHV0LgorICAg
IGlmIChoYXNDaGlsZE5vZGVzKCkpCisgICAgICAgIHNob3coKTsKKyAgICBlbHNlCisgICAgICAg
IGhpZGUoKTsKKworICAgIHVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQoKTsK
KyAgICB1cGRhdGVUZXh0VHJhY2tTdHlsZSgpOworICAgIG1fbmVlZHNHZW5lcmF0ZVRleHRUcmFj
a1JlcHJlc2VudGF0aW9uID0gdHJ1ZTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVk
ZWQoKQoreworICAgIGlmICghbV9uZWVkc0dlbmVyYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIG1fbmVlZHNHZW5lcmF0ZVRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uID0gZmFsc2U7CisKKyAgICAvLyBXZSBzaG91bGQgY2FsbCBtX3RleHRUcmFja1JlcHJl
c2VudGF0aW9uLT51cGRhdGUoKSB0byBwYWludCB0aGUgc3VidHJlZSBvZgorICAgIC8vIHRoZSBS
ZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVtZW50IGFmdGVyIHRoZSBsYXlvdXQgaXMgY2xlYW4u
CisgICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCisgICAgICAgIG1fdGV4dFRyYWNr
UmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6OnByb2Nlc3NBY3RpdmVWVFRDdWUoVlRUQ3VlJiBjdWUpCit7Cisg
ICAgREVCVUdfTE9HKExPR0lERU5USUZJRVIsICJhZGRpbmcgYW5kIHBvc2l0aW9uaW5nIGN1ZTog
XCIiLCBjdWUudGV4dCgpLCAiXCIsIHN0YXJ0PSIsIGN1ZS5zdGFydFRpbWUoKSwgIiwgZW5kPSIs
IGN1ZS5lbmRUaW1lKCksICIsIGxpbmU9IiwgY3VlLmxpbmUoKSk7CisgICAgUmVmPFRleHRUcmFj
a0N1ZUJveD4gZGlzcGxheUJveCA9ICpjdWUuZ2V0RGlzcGxheVRyZWUobV92aWRlb0Rpc3BsYXlT
aXplLnNpemUoKSwgbV9mb250U2l6ZSk7CisKKyAgICBpZiAoYXV0byByZWdpb24gPSBjdWUudHJh
Y2soKS0+cmVnaW9ucygpLT5nZXRSZWdpb25CeUlkKGN1ZS5yZWdpb25JZCgpKSkgeworICAgICAg
ICAvLyBMZXQgcmVnaW9uIGJlIHRoZSBXZWJWVFQgcmVnaW9uIHdob3NlIHJlZ2lvbiBpZGVudGlm
aWVyCisgICAgICAgIC8vIG1hdGNoZXMgdGhlIHRleHQgdHJhY2sgY3VlIHJlZ2lvbiBpZGVudGlm
aWVyIG9mIGN1ZS4KKyAgICAgICAgUmVmPEhUTUxEaXZFbGVtZW50PiByZWdpb25Ob2RlID0gcmVn
aW9uLT5nZXREaXNwbGF5VHJlZSgpOworCisgICAgICAgIGlmICghY29udGFpbnMocmVnaW9uTm9k
ZS5wdHIoKSkpCisgICAgICAgICAgICBhcHBlbmRDaGlsZChyZWdpb24tPmdldERpc3BsYXlUcmVl
KCkpOworCisgICAgICAgIHJlZ2lvbi0+YXBwZW5kVGV4dFRyYWNrQ3VlQm94KFdURk1vdmUoZGlz
cGxheUJveCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIGN1ZSBoYXMgYW4gZW1wdHkg
dGV4dCB0cmFjayBjdWUgcmVnaW9uIGlkZW50aWZpZXIgb3IgdGhlcmUgaXMgbm8KKyAgICAgICAg
Ly8gV2ViVlRUIHJlZ2lvbiB3aG9zZSByZWdpb24gaWRlbnRpZmllciBpcyBpZGVudGljYWwgdG8g
Y3VlJ3MgdGV4dAorICAgICAgICAvLyB0cmFjayBjdWUgcmVnaW9uIGlkZW50aWZpZXIsIHJ1biB0
aGUgZm9sbG93aW5nIHN1YnN0ZXBzOgorICAgICAgICBpZiAoZGlzcGxheUJveC0+aGFzQ2hpbGRO
b2RlcygpICYmICFjb250YWlucyhkaXNwbGF5Qm94LnB0cigpKSkgeworICAgICAgICAgICAgLy8g
Tm90ZTogdGhlIGRpc3BsYXkgdHJlZSBvZiBhIGN1ZSBpcyByZW1vdmVkIHdoZW4gdGhlIGFjdGl2
ZSBmbGFnIG9mIHRoZSBjdWUgaXMgdW5zZXQuCisgICAgICAgICAgICBhcHBlbmRDaGlsZChkaXNw
bGF5Qm94KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKQoreworICAgIGlm
ICghZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9tZWRp
YUVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHNtYWxsZXN0RGltZW5zaW9u
ID0gc3RkOjptaW4obV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWlnaHQoKSwgbV92aWRlb0Rp
c3BsYXlTaXplLnNpemUoKS53aWR0aCgpKTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBkb2N1bWVu
dCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5jYXB0aW9uRm9udFNpemVT
Y2FsZUFuZEltcG9ydGFuY2UobV9mb250U2l6ZUlzSW1wb3J0YW50KTsKKyAgICBtX2ZvbnRTaXpl
ID0gbHJvdW5kZihzbWFsbGVzdERpbWVuc2lvbiAqIGZvbnRTY2FsZSk7CisKKyAgICBmb3IgKGF1
dG8mIGFjdGl2ZUN1ZSA6IG1fbWVkaWFFbGVtZW50LT5jdXJyZW50bHlBY3RpdmVDdWVzKCkpIHsK
KyAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gYWN0aXZlQ3VlLmRhdGEoKTsKKyAg
ICAgICAgaWYgKGN1ZS0+aXNSZW5kZXJhYmxlKCkpCisgICAgICAgICAgICBjdWUtPnNldEZvbnRT
aXplKG1fZm9udFNpemUsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCksIG1fZm9udFNpemVJc0lt
cG9ydGFudCk7CisgICAgfQorfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OnVwZGF0ZVRleHRTdHJva2VTdHlsZSgpCit7CisgICAgaWYgKCFkb2N1bWVudCgp
LnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIFN0cmluZyBsYW5ndWFnZTsKKworICAgIC8vIEZJWE1F
OiBTaW5jZSBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG1vcmUgdGhhbiBvbmUgdGV4dCB0cmFjayBl
bmFibGVkLCB0aGUgZm9sbG93aW5nIGNvZGUgbWF5IG5vdCBmaW5kIHRoZSBjb3JyZWN0IGxhbmd1
YWdlLgorICAgIC8vIFRoZSBkZWZhdWx0IFVJIG9ubHkgYWxsb3dzIGEgdXNlciB0byBlbmFibGUg
b25lIHRyYWNrIGF0IGEgdGltZSwgc28gaXQgc2hvdWxkIGJlIE9LIGZvciBub3csIGJ1dCB3ZSBz
aG91bGQgY29uc2lkZXIgZG9pbmcKKyAgICAvLyB0aGlzIGRpZmZlcmVudGx5LCBzZWUgPGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4NzU+LgorICAgIGlmIChhdXRv
KiB0cmFja3MgPSBtX21lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0cmFja3MtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAg
IGF1dG8gdHJhY2sgPSB0cmFja3MtPml0ZW0oaSk7CisgICAgICAgICAgICBpZiAodHJhY2sgJiYg
dHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKKyAgICAgICAgICAg
ICAgICBsYW5ndWFnZSA9IHRyYWNrLT52YWxpZEJDUDQ3TGFuZ3VhZ2UoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZsb2F0
IHN0cm9rZVdpZHRoOworICAgIGJvb2wgaW1wb3J0YW50OworCisgICAgLy8gRklYTUU6IGZpbmQg
YSB3YXkgdG8gc2V0IHRoaXMgcHJvcGVydHkgaW4gdGhlIHN0eWxlc2hlZXQgbGlrZSB0aGUgb3Ro
ZXIgdXNlciBzdHlsZSBwcmVmZXJlbmNlcywgc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY5ODc0Pi4KKyAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmdyb3Vw
KCkuY2FwdGlvblByZWZlcmVuY2VzKCkuY2FwdGlvblN0cm9rZVdpZHRoRm9yRm9udChtX2ZvbnRT
aXplLCBsYW5ndWFnZSwgc3Ryb2tlV2lkdGgsIGltcG9ydGFudCkpCisgICAgICAgIHNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlTdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgsIENTU1Vu
aXRUeXBlOjpDU1NfUFgsIGltcG9ydGFudCk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRl
ZCgpCit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byByZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uID0gbV9tZWRpYUVsZW1lbnQtPnJl
cXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKTsKKyAgICBpZiAoIWhhc0NoaWxkTm9kZXMo
KSB8fCAhcmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgeworICAgICAgICBpZiAobV90
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgeworICAgICAgICAgICAgaWYgKCFyZXF1aXJlc1RleHRU
cmFja1JlcHJlc2VudGF0aW9uKQorICAgICAgICAgICAgICAgIGNsZWFyVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24oKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3RleHRUcmFj
a1JlcHJlc2VudGF0aW9uLT5zZXRIaWRkZW4odHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgeworICAg
ICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOworCisgICAgICAgIG1fdGV4dFRyYWNrUmVw
cmVzZW50YXRpb24gPSBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbjo6Y3JlYXRlKCp0aGlzKTsKKyAg
ICAgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICAgICAgbV90ZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbi0+c2V0Q29udGVudFNjYWxlKGRvY3VtZW50KCkucGFnZSgpLT5kZXZpY2VTY2Fs
ZUZhY3RvcigpKTsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnNldFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24uZ2V0KCkpOworICAgIH0KKworICAgIG1f
dGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNldEhpZGRlbihmYWxzZSk7Cit9CisKK3ZvaWQgTWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y2xlYXJUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbigpCit7CisgICAgaWYgKCFtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOworCisgICAgbV90ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbiA9IG51bGxwdHI7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQor
ICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb24obnVsbHB0
cik7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBk
YXRlVGV4dFRyYWNrU3R5bGUoKQoreworICAgIGlmIChtX3RleHRUcmFja1JlcHJlc2VudGF0aW9u
KSB7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwg
Q1NTVmFsdWVBYnNvbHV0ZSk7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlXaWR0aCwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS53aWR0aCgpLCBDU1NVbml0VHlw
ZTo6Q1NTX1BYKTsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhl
aWdodCwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWlnaHQoKSwgQ1NTVW5pdFR5cGU6OkNT
U19QWCk7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCAw
LCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVRvcCwgMCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRp
b24pOworICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCk7Cisg
ICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCk7CisgICAgcmVt
b3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQpOworICAgIHJlbW92ZUlubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3ApOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmVudGVyZWRGdWxsc2NyZWVuKCkKK3sKKyAgICB1cGRh
dGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklmTmVlZGVkKCk7CisgICAgdXBkYXRlU2l6ZXMoRm9y
Y2VVcGRhdGU6Olllcyk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6ZXhpdGVkRnVsbHNjcmVlbigpCit7CisgICAgY2xlYXJUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbigpOworICAgIHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlOjpZZXMpOworfQorCitib29s
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVZpZGVvRGlzcGxh
eVNpemUoKQoreworICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEludFJlY3QgdmlkZW9Cb3g7CisgICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRp
b24pIHsKKyAgICAgICAgdmlkZW9Cb3ggPSBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT5ib3Vu
ZHMoKTsKKyAgICAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBkb2N1bWVudCgpLnBhZ2Uo
KS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgdmlkZW9Cb3guc2V0V2lkdGgodmlkZW9C
b3gud2lkdGgoKSAqIGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgdmlkZW9Cb3guc2V0SGVp
Z2h0KHZpZGVvQm94LmhlaWdodCgpICogZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmICghaXM8UmVuZGVyVmlkZW8+KG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigp
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdmlkZW9Cb3ggPSBkb3duY2Fz
dDxSZW5kZXJWaWRlbz4oKm1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKS52aWRlb0JveCgpOwor
ICAgIH0KKworICAgIGlmIChtX3ZpZGVvRGlzcGxheVNpemUgPT0gdmlkZW9Cb3gpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIG1fdmlkZW9EaXNwbGF5U2l6ZSA9IHZpZGVvQm94OworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OnVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlIGZvcmNlKQoreworICAgIGlmICghdXBkYXRl
VmlkZW9EaXNwbGF5U2l6ZSgpICYmIGZvcmNlICE9IEZvcmNlVXBkYXRlOjpZZXMpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkgfHwgIW1fbWVkaWFFbGVtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX21lZGlhRWxlbWVudC0+c3luY1RleHRUcmFja0Jv
dW5kcygpOworCisgICAgdXBkYXRlQWN0aXZlQ3Vlc0ZvbnRTaXplKCk7CisgICAgdXBkYXRlVGV4
dFN0cm9rZVN0eWxlKCk7CisgICAgZm9yIChhdXRvJiBhY3RpdmVDdWUgOiBtX21lZGlhRWxlbWVu
dC0+Y3VycmVudGx5QWN0aXZlQ3VlcygpKQorICAgICAgICBhY3RpdmVDdWUuZGF0YSgpLT5yZWNh
bGN1bGF0ZVN0eWxlcygpOworCisgICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNdICgp
IHsKKyAgICAgICAgdXBkYXRlRGlzcGxheSgpOworICAgIH0pOworfQorCitSZWZQdHI8SW1hZ2U+
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSW1hZ2UoKQoreworICAgIGlmICghaGFzQ2hpbGROb2RlcygpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBkb2N1bWVudCgp
LmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworCisgICAgYXV0byogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgaWYgKCFyZW5kZXJlci0+aGFzTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVs
T2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CisKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rv
ciA9IDE7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAg
ZGV2aWNlU2NhbGVGYWN0b3IgPSBwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOworCisgICAgSW50
UmVjdCBwYWludGluZ1JlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5zaXplKCkpOwor
CisgICAgLy8gRklYTUUgKDE0OTQyMik6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25k
aXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3RvcikpOworICAgIGlmICghYnVm
ZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcGFpbnRGbGFncyA9IFJl
bmRlckxheWVyOjpwYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ0FsbFBoYXNlc0ZsYWdzKCk7
CisgICAgcGFpbnRGbGFncy5hZGQoUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJUZW1wb3JhcnlDbGlw
UmVjdHMpOworICAgIGxheWVyLT5wYWludChidWZmZXItPmNvbnRleHQoKSwgcGFpbnRpbmdSZWN0
LCBMYXlvdXRTaXplKCksIHsgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJz
LCBQYWludEJlaGF2aW9yOjpTbmFwc2hvdHRpbmcgfSwgbnVsbHB0ciwgcGFpbnRGbGFncyk7CisK
KyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShidWZmZXIpKTsK
K30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp0ZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQoY29uc3QgSW50UmVjdCYpCit7CisgICAgdXBk
YXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOworICAgIHVwZGF0ZVNpemVzKCk7
Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6aGlkZSgp
Cit7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXksIENTU1Zh
bHVlTm9uZSk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6c2hvdygpCit7CisgICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURp
c3BsYXkpOworfQorCitib29sIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6
OmlzU2hvd2luZygpIGNvbnN0Cit7CisgICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBwcm9wZXJ0
eVNldCA9IGlubGluZVN0eWxlKCk7CisKKyAgICAvLyBGb2xsb3dpbmcgdGhlIGNvZGUgZnJvbSBz
aG93KCkgYW5kIGhpZGUoKSBhYm92ZSwgd2Ugb25seSBoYXZlCisgICAgLy8gdG8gY2hlY2sgZm9y
IHRoZSBwcmVzZW5zZSBvZiBpbmxpbmUgZGlzcGxheS4KKyAgICByZXR1cm4gKCFwcm9wZXJ0eVNl
dCB8fCAhcHJvcGVydHlTZXQtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXNwbGF5
KSk7Cit9CisKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorY29uc3QgTG9nZ2VyJiBNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojpsb2dnZXIoKSBjb25zdAoreworICAg
IGlmICghbV9sb2dnZXIpCisgICAgICAgIG1fbG9nZ2VyID0gJmRvY3VtZW50KCkubG9nZ2VyKCk7
CisKKyAgICByZXR1cm4gKm1fbG9nZ2VyOworfQorCitjb25zdCB2b2lkKiBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojpsb2dJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fbG9nSWRlbnRpZmllciAmJiBtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9sb2dJZGVu
dGlmaWVyID0gbV9tZWRpYUVsZW1lbnQtPmxvZ0lkZW50aWZpZXIoKTsKKworICAgIHJldHVybiBt
X2xvZ0lkZW50aWZpZXI7Cit9CisKK1dURkxvZ0NoYW5uZWwmIE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6OmxvZ0NoYW5uZWwoKSBjb25zdAoreworICAgIHJldHVybiBMb2dN
ZWRpYTsKK30KKyNlbmRpZiAvLyAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKworI2VuZGlmIC8vIEVO
QUJMRShWSURFT19UUkFDSykKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjNlOWVlNTc0M2ZiOTJmOGQ4
NTlmMzE3YzIwZjc4YzNlNmRlMjlkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaApAQCAt
MCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbmNsdWRlICJH
ZW5lcmljVGFza1F1ZXVlLmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KKyNpbmNsdWRlIDx3dGYv
V2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCisKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBWVFRDdWU7CisKK2NsYXNzIE1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQgZmluYWwKKyAgICA6IHB1YmxpYyBI
VE1MRGl2RWxlbWVudAorICAgICwgcHVibGljIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50
CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgLCBwcml2YXRlIExvZ2dlckhlbHBlcgor
I2VuZGlmCit7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYsIEhUTUxNZWRpYUVs
ZW1lbnQmKTsKKworICAgIGVudW0gY2xhc3MgRm9yY2VVcGRhdGUgeyBZZXMsIE5vIH07CisgICAg
dm9pZCB1cGRhdGVTaXplcyhGb3JjZVVwZGF0ZSBmb3JjZSA9IEZvcmNlVXBkYXRlOjpObyk7Cisg
ICAgdm9pZCB1cGRhdGVEaXNwbGF5KCk7CisKKyAgICB2b2lkIHVwZGF0ZVRleHRUcmFja1JlcHJl
c2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgpOworCisgICAgdm9pZCBlbnRlcmVkRnVsbHNjcmVlbigp
OworICAgIHZvaWQgZXhpdGVkRnVsbHNjcmVlbigpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmLCBIVE1MTWVk
aWFFbGVtZW50Jik7CisKKyAgICAvLyBFbGVtZW50CisgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1l
bnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJUcmVl
UG9zaXRpb24mKSBvdmVycmlkZTsKKworICAgIC8vIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xp
ZW50CisgICAgUmVmUHRyPEltYWdlPiBjcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdl
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCB0ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5n
ZWQoY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbklmTmVlZGVkKCk7CisgICAgdm9pZCBjbGVhclRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKCk7CisKKyAgICBib29sIHVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKTsKKyAgICB2b2lk
IHVwZGF0ZUFjdGl2ZUN1ZXNGb250U2l6ZSgpOworICAgIHZvaWQgdXBkYXRlVGV4dFN0cm9rZVN0
eWxlKCk7CisgICAgdm9pZCBwcm9jZXNzQWN0aXZlVlRUQ3VlKFZUVEN1ZSYpOworICAgIHZvaWQg
dXBkYXRlVGV4dFRyYWNrU3R5bGUoKTsKKworICAgIHZvaWQgaGlkZSgpOworICAgIHZvaWQgc2hv
dygpOworICAgIGJvb2wgaXNTaG93aW5nKCkgY29uc3Q7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0
IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbDsKKyAgICBXVEZMb2dDaGFubmVsJiBs
b2dDaGFubmVsKCkgY29uc3QgZmluYWw7CisgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gIk1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQiOyB9CisgICAgbXV0YWJsZSBSZWZQdHI8TG9nZ2VyPiBtX2xvZ2dlcjsKKyAgICBtdXRhYmxl
IGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsKKyNlbmRpZgorCisgICAg
c3RkOjp1bmlxdWVfcHRyPFRleHRUcmFja1JlcHJlc2VudGF0aW9uPiBtX3RleHRUcmFja1JlcHJl
c2VudGF0aW9uOworCisgICAgR2VuZXJpY1Rhc2tRdWV1ZTxUaW1lcj4gbV90YXNrUXVldWU7Cisg
ICAgV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21lZGlhRWxlbWVudDsKKyAgICBJbnRSZWN0
IG1fdmlkZW9EaXNwbGF5U2l6ZTsKKyAgICBpbnQgbV9mb250U2l6ZSB7IDAgfTsKKyAgICBib29s
IG1fZm9udFNpemVJc0ltcG9ydGFudCB7IGZhbHNlIH07CisgICAgYm9vbCBtX25lZWRzR2VuZXJh
dGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiB7IGZhbHNlIH07Cit9OworCisjZW5kaWYKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzk5MjdiOTdiZmU2ZDI5ZTllNGY4NDc0NzQ2N2QyYjQyNTRjMzYzZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzNyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCi0jaW5jbHVk
ZSAiTWVkaWFDb250cm9scy5oIgotCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUg
Ik1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xzKTsKLQotTWVkaWFDb250
cm9sczo6TWVkaWFDb250cm9scyhEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBIVE1MRGl2RWxl
bWVudChIVE1MTmFtZXM6OmRpdlRhZywgZG9jdW1lbnQpCi0gICAgLCBtX21lZGlhQ29udHJvbGxl
cigwKQotICAgICwgbV9wYW5lbCgwKQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICAsIG1f
dGV4dERpc3BsYXlDb250YWluZXIoMCkKLSNlbmRpZgotICAgICwgbV9wbGF5QnV0dG9uKDApCi0g
ICAgLCBtX2N1cnJlbnRUaW1lRGlzcGxheSgwKQotICAgICwgbV90aW1lbGluZSgwKQotICAgICwg
bV9wYW5lbE11dGVCdXR0b24oMCkKLSAgICAsIG1fdm9sdW1lU2xpZGVyKDApCi0gICAgLCBtX3Rv
Z2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKDApCi0gICAgLCBtX2Z1bGxTY3JlZW5CdXR0b24oMCkK
LSAgICAsIG1faGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCp0aGlzLCAmTWVkaWFDb250cm9s
czo6aGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyRmlyZWQpCi0gICAgLCBtX2lzRnVsbHNjcmVl
bihmYWxzZSkKLSAgICAsIG1faXNNb3VzZU92ZXJDb250cm9scyhmYWxzZSkKLXsKLSAgICBzZXRQ
c2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scyIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6c2V0TWVkaWFD
b250cm9sbGVyKE1lZGlhQ29udHJvbGxlckludGVyZmFjZSogY29udHJvbGxlcikKLXsKLSAgICBp
ZiAobV9tZWRpYUNvbnRyb2xsZXIgPT0gY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fbWVkaWFDb250cm9sbGVyID0gY29udHJvbGxlcjsKLQotICAgIGlmIChtX3BhbmVsKQotICAg
ICAgICBtX3BhbmVsLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0jaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQotICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQotICAgICAgICBt
X3RleHREaXNwbGF5Q29udGFpbmVyLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0j
ZW5kaWYKLSAgICBpZiAobV9wbGF5QnV0dG9uKQotICAgICAgICBtX3BsYXlCdXR0b24tPnNldE1l
ZGlhQ29udHJvbGxlcihjb250cm9sbGVyKTsKLSAgICBpZiAobV9jdXJyZW50VGltZURpc3BsYXkp
Ci0gICAgICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJv
bGxlcik7Ci0gICAgaWYgKG1fdGltZWxpbmUpCi0gICAgICAgIG1fdGltZWxpbmUtPnNldE1lZGlh
Q29udHJvbGxlcihjb250cm9sbGVyKTsKLSAgICBpZiAobV9wYW5lbE11dGVCdXR0b24pCi0gICAg
ICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0g
ICAgaWYgKG1fdm9sdW1lU2xpZGVyKQotICAgICAgICBtX3ZvbHVtZVNsaWRlci0+c2V0TWVkaWFD
b250cm9sbGVyKGNvbnRyb2xsZXIpOwotICAgIGlmIChtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0
dG9uKQotICAgICAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5zZXRNZWRpYUNvbnRy
b2xsZXIoY29udHJvbGxlcik7Ci0gICAgaWYgKG1fZnVsbFNjcmVlbkJ1dHRvbikKLSAgICAgICAg
bV9mdWxsU2NyZWVuQnV0dG9uLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sczo6cmVzZXQoKQotewotICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRl
RGlzcGxheVR5cGUoKTsKLQotICAgIHVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwotCi0gICAg
ZG91YmxlIGR1cmF0aW9uID0gbV9tZWRpYUNvbnRyb2xsZXItPmR1cmF0aW9uKCk7Ci0gICAgaWYg
KHN0ZDo6aXNmaW5pdGUoZHVyYXRpb24pIHx8IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5oYXNP
d25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoTWVkaWFTbGlkZXJQYXJ0KSkgewotICAgICAgICBt
X3RpbWVsaW5lLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gICAgICAgIG1fdGltZWxpbmUtPnNl
dFBvc2l0aW9uKG1fbWVkaWFDb250cm9sbGVyLT5jdXJyZW50VGltZSgpKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9tZWRpYUNvbnRyb2xsZXItPmhhc0F1ZGlvKCkgfHwgUmVuZGVyVGhlbWU6OnNpbmds
ZXRvbigpLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYU11dGVCdXR0b25QYXJ0
KSkKLSAgICAgICAgbV9wYW5lbE11dGVCdXR0b24tPnNob3coKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7Ci0KLSAgICBpZiAobV92b2x1bWVTbGlkZXIpIHsK
LSAgICAgICAgaWYgKCFtX21lZGlhQ29udHJvbGxlci0+aGFzQXVkaW8oKSkKLSAgICAgICAgICAg
IG1fdm9sdW1lU2xpZGVyLT5oaWRlKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV92
b2x1bWVTbGlkZXItPnNob3coKTsKLSAgICAgICAgICAgIHNldFNsaWRlclZvbHVtZSgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmVmcmVzaENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJpbGl0
eSgpOwotCi0gICAgaWYgKG1fZnVsbFNjcmVlbkJ1dHRvbikgewotICAgICAgICBpZiAobV9tZWRp
YUNvbnRyb2xsZXItPnN1cHBvcnRzRnVsbHNjcmVlbihIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgJiYgbV9tZWRpYUNvbnRyb2xsZXItPmhhc1ZpZGVv
KCkpCi0gICAgICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPnNob3coKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9mdWxsU2NyZWVuQnV0dG9uLT5oaWRlKCk7Ci0gICAgfQotCi0gICAg
bWFrZU9wYXF1ZSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnJlcG9ydGVkRXJyb3IoKQot
ewotICAgIGF1dG8mIHRoZW1lID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpOwotICAgIGlmICgh
dGhlbWUuaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKE1lZGlhTXV0ZUJ1dHRvblBhcnQp
KSB7Ci0gICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7Ci0gICAgICAgIG1fdm9sdW1l
U2xpZGVyLT5oaWRlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNC
dXR0b24gJiYgIXRoZW1lLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYVRvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uUGFydCkpCi0gICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlv
bnNCdXR0b24tPmhpZGUoKTsKLQotICAgIGlmIChtX2Z1bGxTY3JlZW5CdXR0b24gJiYgIXRoZW1l
Lmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYUVudGVyRnVsbHNjcmVlbkJ1dHRv
blBhcnQpKQotICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPmhpZGUoKTsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xzOjpsb2FkZWRNZXRhZGF0YSgpCi17Ci0gICAgcmVzZXQoKTsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xzOjpzaG93KCkKLXsKLSAgICBtYWtlT3BhcXVlKCk7Ci0gICAgbV9wYW5l
bC0+c2V0SXNEaXNwbGF5ZWQodHJ1ZSk7Ci0gICAgbV9wYW5lbC0+c2hvdygpOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbHM6OmhpZGUoKQotewotICAgIG1fcGFuZWwtPnNldElzRGlzcGxheWVkKGZh
bHNlKTsKLSAgICBtX3BhbmVsLT5oaWRlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6bWFr
ZU9wYXF1ZSgpCi17Ci0gICAgbV9wYW5lbC0+bWFrZU9wYXF1ZSgpOwotfQotCi12b2lkIE1lZGlh
Q29udHJvbHM6Om1ha2VUcmFuc3BhcmVudCgpCi17Ci0gICAgbV9wYW5lbC0+bWFrZVRyYW5zcGFy
ZW50KCk7Ci19Ci0KLWJvb2wgTWVkaWFDb250cm9sczo6c2hvdWxkSGlkZUNvbnRyb2xzKCkKLXsK
LSAgICByZXR1cm4gIW1fcGFuZWwtPmhvdmVyZWQoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xz
OjpidWZmZXJpbmdQcm9ncmVzc2VkKCkKLXsKLSAgICAvLyBXZSBvbmx5IG5lZWQgdG8gdXBkYXRl
IGJ1ZmZlcmluZyBwcm9ncmVzcyB3aGVuIHBhdXNlZCwgZHVyaW5nIG5vcm1hbAotICAgIC8vIHBs
YXliYWNrIHBsYXliYWNrUHJvZ3Jlc3NlZCgpIHdpbGwgdGFrZSBjYXJlIG9mIGl0LgotICAgIGlm
IChtX21lZGlhQ29udHJvbGxlci0+cGF1c2VkKCkpCi0gICAgICAgIG1fdGltZWxpbmUtPnNldFBv
c2l0aW9uKG1fbWVkaWFDb250cm9sbGVyLT5jdXJyZW50VGltZSgpKTsKLX0KLQotdm9pZCBNZWRp
YUNvbnRyb2xzOjpwbGF5YmFja1N0YXJ0ZWQoKQotewotICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRl
RGlzcGxheVR5cGUoKTsKLSAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlvbihtX21lZGlhQ29udHJv
bGxlci0+Y3VycmVudFRpbWUoKSk7Ci0gICAgdXBkYXRlQ3VycmVudFRpbWVEaXNwbGF5KCk7Ci0K
LSAgICBpZiAobV9pc0Z1bGxzY3JlZW4pCi0gICAgICAgIHN0YXJ0SGlkZUZ1bGxzY3JlZW5Db250
cm9sc1RpbWVyKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6cGxheWJhY2tQcm9ncmVzc2Vk
KCkKLXsKLSAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlvbihtX21lZGlhQ29udHJvbGxlci0+Y3Vy
cmVudFRpbWUoKSk7Ci0gICAgdXBkYXRlQ3VycmVudFRpbWVEaXNwbGF5KCk7Ci0KLSAgICBpZiAo
IW1faXNNb3VzZU92ZXJDb250cm9scyAmJiBtX21lZGlhQ29udHJvbGxlci0+aGFzVmlkZW8oKSkK
LSAgICAgICAgbWFrZVRyYW5zcGFyZW50KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6cGxh
eWJhY2tTdG9wcGVkKCkKLXsKLSAgICBtX3BsYXlCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7
Ci0gICAgbV90aW1lbGluZS0+c2V0UG9zaXRpb24obV9tZWRpYUNvbnRyb2xsZXItPmN1cnJlbnRU
aW1lKCkpOwotICAgIHVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwotICAgIG1ha2VPcGFxdWUo
KTsKLQotICAgIHN0b3BIaWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXIoKTsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xzOjp1cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKQotewotICAgIGRvdWJsZSBu
b3cgPSBtX21lZGlhQ29udHJvbGxlci0+Y3VycmVudFRpbWUoKTsKLSAgICBtX2N1cnJlbnRUaW1l
RGlzcGxheS0+c2V0SW5uZXJUZXh0KFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5mb3JtYXRNZWRp
YUNvbnRyb2xzVGltZShub3cpKTsKLSAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+c2V0Q3VycmVu
dFZhbHVlKG5vdyk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6c2hvd1ZvbHVtZVNsaWRlcigp
Ci17Ci0gICAgaWYgKCFtX21lZGlhQ29udHJvbGxlci0+aGFzQXVkaW8oKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV92b2x1bWVTbGlkZXItPnNob3coKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRy
b2xzOjpjaGFuZ2VkTXV0ZSgpCi17Ci0gICAgbV9wYW5lbE11dGVCdXR0b24tPmNoYW5nZWRNdXRl
KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdlZFZvbHVtZSgpCi17Ci0gICAgaWYg
KG1fdm9sdW1lU2xpZGVyKQotICAgICAgICBzZXRTbGlkZXJWb2x1bWUoKTsKLSAgICBpZiAobV9w
YW5lbE11dGVCdXR0b24gJiYgbV9wYW5lbE11dGVCdXR0b24tPnJlbmRlcmVyKCkpCi0gICAgICAg
IG1fcGFuZWxNdXRlQnV0dG9uLT5yZW5kZXJlcigpLT5yZXBhaW50KCk7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sczo6Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgpCi17Ci0gICAgaWYg
KG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pCi0gICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
czo6cmVmcmVzaENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJpbGl0eSgpCi17Ci0gICAgaWYgKCFt
X3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9tZWRpYUNvbnRyb2xsZXItPmhhc0Nsb3NlZENhcHRpb25zKCkpCi0gICAgICAgIG1fdG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b24tPnNob3coKTsKLSAgICBlbHNlCi0gICAgICAgIG1fdG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b24tPmhpZGUoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpj
bG9zZWRDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpCi17Ci0gICAgcmVmcmVzaENsb3NlZENhcHRpb25z
QnV0dG9uVmlzaWJpbGl0eSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmVudGVyZWRGdWxs
c2NyZWVuKCkKLXsKLSAgICBtX2lzRnVsbHNjcmVlbiA9IHRydWU7Ci0gICAgbV9mdWxsU2NyZWVu
QnV0dG9uLT5zZXRJc0Z1bGxzY3JlZW4odHJ1ZSk7Ci0KLSAgICBpZiAoUGFnZSogcGFnZSA9IGRv
Y3VtZW50KCkucGFnZSgpKQotICAgICAgICBwYWdlLT5jaHJvbWUoKS5zZXRDdXJzb3JIaWRkZW5V
bnRpbE1vdXNlTW92ZXModHJ1ZSk7Ci0KLSAgICBzdGFydEhpZGVGdWxsc2NyZWVuQ29udHJvbHNU
aW1lcigpOwotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBpZiAobV90ZXh0RGlzcGxheUNv
bnRhaW5lcikKLSAgICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+ZW50ZXJlZEZ1bGxzY3Jl
ZW4oKTsKLSNlbmRpZgotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmV4aXRlZEZ1bGxzY3JlZW4o
KQotewotICAgIG1faXNGdWxsc2NyZWVuID0gZmFsc2U7Ci0gICAgbV9mdWxsU2NyZWVuQnV0dG9u
LT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwotICAgIHN0b3BIaWRlRnVsbHNjcmVlbkNvbnRyb2xz
VGltZXIoKTsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgaWYgKG1fdGV4dERpc3BsYXlD
b250YWluZXIpCi0gICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPmV4aXRlZEZ1bGxzY3Jl
ZW4oKTsKLSNlbmRpZgotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQmIGV2ZW50KQotewotICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKGV2ZW50KTsKLQotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
b3ZlckV2ZW50KSB7Ci0gICAgICAgIGlmICghY29udGFpbnNSZWxhdGVkVGFyZ2V0KGV2ZW50KSkg
ewotICAgICAgICAgICAgbV9pc01vdXNlT3ZlckNvbnRyb2xzID0gdHJ1ZTsKLSAgICAgICAgICAg
IGlmICghbV9tZWRpYUNvbnRyb2xsZXItPmNhblBsYXkoKSkgewotICAgICAgICAgICAgICAgIG1h
a2VPcGFxdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoc2hvdWxkSGlkZUNvbnRyb2xzKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHN0YXJ0SGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpIHsKLSAgICAgICAg
aWYgKCFjb250YWluc1JlbGF0ZWRUYXJnZXQoZXZlbnQpKSB7Ci0gICAgICAgICAgICBtX2lzTW91
c2VPdmVyQ29udHJvbHMgPSBmYWxzZTsKLSAgICAgICAgICAgIHN0b3BIaWRlRnVsbHNjcmVlbkNv
bnRyb2xzVGltZXIoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpIHsKLSAgICAg
ICAgaWYgKG1faXNGdWxsc2NyZWVuKSB7Ci0gICAgICAgICAgICAvLyBXaGVuIHdlIGdldCBhIG1v
dXNlIG1vdmUgaW4gZnVsbHNjcmVlbiBtb2RlLCBzaG93IHRoZSBtZWRpYSBjb250cm9scywgYW5k
IHN0YXJ0IGEgdGltZXIKLSAgICAgICAgICAgIC8vIHRoYXQgd2lsbCBoaWRlIHRoZSBtZWRpYSBj
b250cm9scyBhZnRlciBhIDMgc2Vjb25kcyB3aXRob3V0IGEgbW91c2UgbW92ZS4KLSAgICAgICAg
ICAgIG1ha2VPcGFxdWUoKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRIaWRlQ29udHJvbHMoKSkK
LSAgICAgICAgICAgICAgICBzdGFydEhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcigpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6
aGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyRmlyZWQoKQotewotICAgIGlmIChtX21lZGlhQ29u
dHJvbGxlci0+cGF1c2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0Z1bGxz
Y3JlZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2hvdWxkSGlkZUNvbnRyb2xzKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS5wYWdl
KCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zl
cyh0cnVlKTsKLQotICAgIG1ha2VUcmFuc3BhcmVudCgpOwotfQotCi12b2lkIE1lZGlhQ29udHJv
bHM6OnN0YXJ0SGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCkKLXsKLSAgICBpZiAoIW1faXNG
dWxsc2NyZWVuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQo
KS5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2hpZGVG
dWxsc2NyZWVuQ29udHJvbHNUaW1lci5zdGFydE9uZVNob3QocGFnZS0+c2V0dGluZ3MoKS50aW1l
V2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVIaWRpbmdDb250cm9scygpKTsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xzOjpzdG9wSGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCkKLXsKLSAgICBt
X2hpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lci5zdG9wKCk7Ci19Ci0KLWJvb2wgTWVkaWFDb250
cm9sczo6Y29udGFpbnNSZWxhdGVkVGFyZ2V0KEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoIWlz
PE1vdXNlRXZlbnQ+KGV2ZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gcmVs
YXRlZFRhcmdldCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KS5yZWxhdGVkVGFyZ2V0KCk7
Ci0gICAgcmV0dXJuIGlzPE5vZGU+KHJlbGF0ZWRUYXJnZXQpICYmIGNvbnRhaW5zKCZkb3duY2Fz
dDxOb2RlPigqcmVsYXRlZFRhcmdldCkpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQot
Ci12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKQotewotICAgIGlm
IChtX3RleHREaXNwbGF5Q29udGFpbmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRl
eHREaXNwbGF5Q29udGFpbmVyID0gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgIG1fdGV4dERpc3BsYXlDb250YWluZXIgPSB0ZXh0
RGlzcGxheUNvbnRhaW5lci5wdHIoKTsKLQotICAgIGlmIChtX21lZGlhQ29udHJvbGxlcikKLSAg
ICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+c2V0TWVkaWFDb250cm9sbGVyKG1fbWVkaWFD
b250cm9sbGVyKTsKLQotICAgIC8vIEluc2VydCBpdCBiZWZvcmUgdGhlIGZpcnN0IGNvbnRyb2xs
ZXIgZWxlbWVudCBzbyBpdCBhbHdheXMgZGlzcGxheXMgYmVoaW5kIHRoZSBjb250cm9scy4KLSAg
ICBpbnNlcnRCZWZvcmUodGV4dERpc3BsYXlDb250YWluZXIsIG1fcGFuZWwpOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbHM6OnNob3dUZXh0VHJhY2tEaXNwbGF5KCkKLXsKLSAgICBpZiAoIW1fdGV4
dERpc3BsYXlDb250YWluZXIpCi0gICAgICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKLSAg
ICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5zaG93KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
czo6aGlkZVRleHRUcmFja0Rpc3BsYXkoKQotewotICAgIGlmICghbV90ZXh0RGlzcGxheUNvbnRh
aW5lcikKLSAgICAgICAgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIG1fdGV4dERpc3Bs
YXlDb250YWluZXItPmhpZGUoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGVUZXh0
VHJhY2tEaXNwbGF5KCkKLXsKLSAgICBpZiAoIW1fdGV4dERpc3BsYXlDb250YWluZXIpCi0gICAg
ICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKLQotICAgIG1fdGV4dERpc3BsYXlDb250YWlu
ZXItPnVwZGF0ZURpc3BsYXkoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjp0ZXh0VHJhY2tQ
cmVmZXJlbmNlc0NoYW5nZWQoKQotewotICAgIGNsb3NlZENhcHRpb25UcmFja3NDaGFuZ2VkKCk7
Ci0gICAgaWYgKG1fdGV4dERpc3BsYXlDb250YWluZXIpCi0gICAgICAgIG1fdGV4dERpc3BsYXlD
b250YWluZXItPnVwZGF0ZVNpemVzKE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQ6OkZvcmNlVXBkYXRlOjpZZXMpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmNsZWFyVGV4
dERpc3BsYXlDb250YWluZXIoKQotewotICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQot
ICAgICAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5yZW1vdmVDaGlsZHJlbigpOwotfQotCi12
b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5l
ZWRlZCgpCi17Ci0gICAgaWYgKG1fdGV4dERpc3BsYXlDb250YWluZXIpCi0gICAgICAgIG1fdGV4
dERpc3BsYXlDb250YWluZXItPnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5l
ZWRlZCgpOwotfQotCi0jZW5kaWYKLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpzZXRTbGlkZXJWb2x1
bWUoKQotewotICAgIG1fdm9sdW1lU2xpZGVyLT5zZXRWb2x1bWUobV9tZWRpYUNvbnRyb2xsZXIt
Pm11dGVkKCkgPyAwLjAgOiBtX21lZGlhQ29udHJvbGxlci0+dm9sdW1lKCkpOwotfQotCi19Ci0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9scy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmJjYjU3NGIyZjBhMjM5MjhlZThjMTc5ODY1Nzk5
NWNmN2JkOTU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaAorKysgL2Rldi9udWxs
CkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShWSURFTykKLQot
I2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBFdmVudDsKLWNsYXNz
IE1lZGlhUGxheWVyOwotY2xhc3MgUmVuZGVyQm94OwotY2xhc3MgUmVuZGVyTWVkaWE7Ci0KLS8v
IEFuIGFic3RyYWN0IGNsYXNzIHdpdGggdGhlIG1lZGlhIGNvbnRyb2wgZWxlbWVudHMgdGhhdCBh
bGwgcG9ydHMgc3VwcG9ydC4KLWNsYXNzIE1lZGlhQ29udHJvbHMgOiBwdWJsaWMgSFRNTERpdkVs
ZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9scyk7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCB+TWVkaWFDb250cm9scygpID0gZGVmYXVsdDsKLQotICAgIC8vIFRo
aXMgZnVuY3Rpb24gaXMgdG8gYmUgaW1wbGVtZW50ZWQgaW4geW91ciBwb3J0LXNwZWNpZmljIG1l
ZGlhCi0gICAgLy8gY29udHJvbHMgaW1wbGVtZW50YXRpb24gc2luY2UgaXQgd2lsbCByZXR1cm4g
YSBjaGlsZCBpbnN0YW5jZS4KLSAgICBzdGF0aWMgUmVmUHRyPE1lZGlhQ29udHJvbHM+IHRyeUNy
ZWF0ZShEb2N1bWVudCYpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldE1lZGlhQ29udHJvbGxlcihN
ZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqKTsKLQotICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwot
ICAgIHZpcnR1YWwgdm9pZCByZXBvcnRlZEVycm9yKCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRl
ZE1ldGFkYXRhKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwotICAgIHZpcnR1YWwgdm9p
ZCBoaWRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIG1ha2VPcGFxdWUoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgbWFrZVRyYW5zcGFyZW50KCk7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEhpZGVDb250cm9s
cygpOwotCi0gICAgdmlydHVhbCB2b2lkIGJ1ZmZlcmluZ1Byb2dyZXNzZWQoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcGxheWJhY2tTdGFydGVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHBsYXliYWNrUHJv
Z3Jlc3NlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBwbGF5YmFja1N0b3BwZWQoKTsKLQotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVTdGF0dXNEaXNwbGF5KCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1ZvbHVtZVNs
aWRlcigpOwotCi0gICAgdmlydHVhbCB2b2lkIGNoYW5nZWRNdXRlKCk7Ci0gICAgdmlydHVhbCB2
b2lkIGNoYW5nZWRWb2x1bWUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VkQ2xvc2VkQ2Fw
dGlvbnNWaXNpYmlsaXR5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlZnJlc2hDbG9zZWRDYXB0aW9u
c0J1dHRvblZpc2liaWxpdHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlQ2xvc2VkQ2FwdGlv
blRyYWNrTGlzdCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjbG9zZWRDYXB0aW9uVHJhY2tzQ2hh
bmdlZCgpOwotCi0gICAgdmlydHVhbCB2b2lkIGVudGVyZWRGdWxsc2NyZWVuKCk7Ci0gICAgdmly
dHVhbCB2b2lkIGV4aXRlZEZ1bGxzY3JlZW4oKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50cygpIG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIGhpZGVGdWxsc2NyZWVuQ29u
dHJvbHNUaW1lckZpcmVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0SGlkZUZ1bGxzY3JlZW5D
b250cm9sc1RpbWVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BIaWRlRnVsbHNjcmVlbkNvbnRy
b2xzVGltZXIoKTsKLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBzaG93VGV4dFRyYWNr
RGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHRleHRUcmFja1ByZWZlcmVuY2VzQ2hhbmdlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclRl
eHREaXNwbGF5Q29udGFpbmVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgpOwotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICBl
eHBsaWNpdCBNZWRpYUNvbnRyb2xzKERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBjb250YWluc1Jl
bGF0ZWRUYXJnZXQoRXZlbnQmKTsKLQotICAgIHZvaWQgc2V0U2xpZGVyVm9sdW1lKCk7Ci0KLSAg
ICBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqIG1fbWVkaWFDb250cm9sbGVyOwotCi0gICAgLy8g
Q29udGFpbmVyIGZvciB0aGUgbWVkaWEgY29udHJvbCBlbGVtZW50cy4KLSAgICBNZWRpYUNvbnRy
b2xQYW5lbEVsZW1lbnQqIG1fcGFuZWw7Ci0KLSAgICAvLyBDb250YWluZXIgZm9yIHRoZSB0ZXh0
IHRyYWNrIGN1ZXMuCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQqIG1fdGV4dERpc3BsYXlDb250YWluZXI7Ci0jZW5kaWYK
LQotICAgIC8vIE1lZGlhIGNvbnRyb2wgZWxlbWVudHMuCi0gICAgTWVkaWFDb250cm9sUGxheUJ1
dHRvbkVsZW1lbnQqIG1fcGxheUJ1dHRvbjsKLSAgICBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURp
c3BsYXlFbGVtZW50KiBtX2N1cnJlbnRUaW1lRGlzcGxheTsKLSAgICBNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQqIG1fdGltZWxpbmU7Ci0gICAgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9u
RWxlbWVudCogbV9wYW5lbE11dGVCdXR0b247Ci0gICAgTWVkaWFDb250cm9sUGFuZWxWb2x1bWVT
bGlkZXJFbGVtZW50KiBtX3ZvbHVtZVNsaWRlcjsKLSAgICBNZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQqIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b247Ci0g
ICAgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQqIG1fZnVsbFNjcmVlbkJ1dHRv
bjsKLQotICAgIFRpbWVyIG1faGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyOwotICAgIGJvb2wg
bV9pc0Z1bGxzY3JlZW47Ci0gICAgYm9vbCBtX2lzTW91c2VPdmVyQ29udHJvbHM7Ci0KLXByaXZh
dGU6Ci0gICAgYm9vbCBpc01lZGlhQ29udHJvbHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVl
OyB9Ci19OwotCi1pbmxpbmUgTWVkaWFDb250cm9scyogdG9NZWRpYUNvbnRyb2xzKE5vZGUqIG5v
ZGUpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwgbm9k
ZS0+aXNNZWRpYUNvbnRyb2xzKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRy
b2xzKj4obm9kZSk7Ci19Ci0KLS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5u
ZWNjZXNzYXJ5IGNhc3QuCi12b2lkIHRvTWVkaWFDb250cm9scyhjb25zdCBNZWRpYUNvbnRyb2xz
Kik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVk
aWFBRi5jcHAKaW5kZXggM2Q4Y2Y0ZmI4Zjc3ZmU4MGIzZmI0NGNkN2VlOWQ3OWE4NTI0NWMxMi4u
MmI1MjQyN2Q3ODAyOGQ0ZGNjNjU4NGFjNzk5ZDc3YzE5OWYyNjgwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKQEAg
LTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAi
TG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNZWRp
YUNvbnRyb2xFbGVtZW50cy5oIgogI2luY2x1ZGUgIlRleHRUcmFja0xpc3QuaCIKICNpbmNsdWRl
ICJVc2VyU3R5bGVTaGVldFR5cGVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKaW5kZXggZmNkZWViODQyNTlkZGM3YTQ4NTU1ODJhYjg5YmM3OGZhNTI2YWY2Ni4uMzc1
NDYxYzMxOTljZGRhZTI4ZDUyNjhmMjE4OWExMzM0ZTJjYWY2ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
CkBAIC0xMDc3LDE1ICsxMDc3LDExIEBAIHZvaWQgUGFnZTo6c2V0UGFnZVNjYWxlRmFjdG9yKGZs
b2F0IHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBib29sIGluU3RhYmxlCiAjZW5kaWYK
ICAgICB9CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChpblN0
YWJsZVN0YXRlKSB7CiAgICAgICAgIGZvckVhY2hNZWRpYUVsZW1lbnQoW10gKEhUTUxNZWRpYUVs
ZW1lbnQmIGVsZW1lbnQpIHsKICAgICAgICAgICAgIGVsZW1lbnQucGFnZVNjYWxlRmFjdG9yQ2hh
bmdlZCgpOwogICAgICAgICB9KTsKICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShpblN0
YWJsZVN0YXRlKTsKLSNlbmRpZgogfQogCiB2b2lkIFBhZ2U6OnNldERlbGVnYXRlc1NjYWxpbmco
Ym9vbCBkZWxlZ2F0ZXNTY2FsaW5nKQpAQCAtMTEzMiwxMSArMTEyOCw5IEBAIHZvaWQgUGFnZTo6
c2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbihVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uIHVzZXJJbnRlCiAKICAgICBtX3VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gPSB1c2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOwogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKICAgICBmb3JFYWNoTWVkaWFFbGVtZW50KFtdIChIVE1MTWVkaWFFbGVtZW50JiBlbGVt
ZW50KSB7CiAgICAgICAgIGVsZW1lbnQudXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkNoYW5n
ZWQoKTsKICAgICB9KTsKLSNlbmRpZgogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4Njk2NjM2MGRiOWE5ZThmMTk3YjIxZjYwOTMxYzg2NWFkYjY4
MDlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAs
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyTWVkaWFDb250cm9scy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVk
ZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5o
IgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFp
bmVyKTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChSZW5kZXJNZWRpYUNvbnRyb2xUaW1l
bGluZUNvbnRhaW5lcik7Ci0KLVJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyOjpSZW5k
ZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHls
ZSYmIHN0eWxlKQotICAgIDogUmVuZGVyQmxvY2tGbG93KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUp
KQotewotfQotCi12b2lkIFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQo
KQotewotICAgIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0KCk7Ci0KLSAgICBpZiAoc3R5bGUoKS5k
aXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6Ok5vbmUgfHwgIWlzPFJlbmRlckJveD4obmV4dFNpYmxp
bmcoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckJveCYgYnV0dG9uQm94ID0gZG93
bmNhc3Q8UmVuZGVyQm94PigqbmV4dFNpYmxpbmcoKSk7Ci0gICAgaW50IGFic29sdXRlT2Zmc2V0
VG9wID0gYnV0dG9uQm94LmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KDAsIC1zaXplKCkuaGVp
Z2h0KCkpKS55KCk7Ci0KLSAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJs
ZXIodmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKSk7Ci0KLSAgICAvLyBJZiB0aGUg
c2xpZGVyIHdvdWxkIGJlIHJlbmRlcmVkIG91dHNpZGUgdGhlIHBhZ2UsIGl0IHNob3VsZCBiZSBt
b3ZlZCBiZWxvdyB0aGUgY29udHJvbHMuCi0gICAgaWYgKFVOTElLRUxZKGFic29sdXRlT2Zmc2V0
VG9wIDwgMCkpCi0gICAgICAgIHNldFkoYnV0dG9uQm94Lm9mZnNldFRvcCgpICsgdGhlbWUoKS52
b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihidXR0b25Cb3gsIHNpemUoKSkueSgpKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZW5kZXJNZWRpYUNvbnRy
b2xUaW1lbGluZUNvbnRhaW5lcjo6UmVuZGVyTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXIo
RWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKLSAgICA6IFJlbmRlckZsZXhp
YmxlQm94KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQotewotfQotCi0vLyBXZSB3YW50IHRoZSB0
aW1lbGluZSBzbGlkZXIgdG8gYmUgYXQgbGVhc3QgMTAwIHBpeGVscyB3aWRlLgotLy8gRklYTUU6
IEVsaW1pbmF0ZSBoYXJkLWNvZGVkIHdpZHRocyBhbHRvZ2V0aGVyLgotc3RhdGljIGNvbnN0IGlu
dCBtaW5XaWR0aFRvRGlzcGxheVRpbWVEaXNwbGF5cyA9IDQ1ICsgMTAwICsgNDU7Ci0KLXZvaWQg
UmVuZGVyTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXI6OmxheW91dCgpCi17Ci0gICAgUmVu
ZGVyRmxleGlibGVCb3g6OmxheW91dCgpOwotCi0gICAgTGF5b3V0U3RhdGVEaXNhYmxlciBsYXlv
dXRTdGF0ZURpc2FibGVyKHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkpOwotICAg
IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudCogY29udGFpbmVyID0gc3RhdGlj
X2Nhc3Q8TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50Kj4oZWxlbWVudCgpKTsK
LSAgICBjb250YWluZXItPnNldFRpbWVEaXNwbGF5c0hpZGRlbih3aWR0aCgpLnRvSW50KCkgPCBt
aW5XaWR0aFRvRGlzcGxheVRpbWVEaXNwbGF5cyk7Ci19Ci0KLSNpZiBQTEFURk9STShXSU4pICYm
IFVTRShDRykKLQotdm9pZCBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShXSU4pICYmIFVTRShDRykKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOWY2MTEzNjAxN2QwOTIxN2FkODRjNTI0YTZjMmNiMGVhNmMxYzlmZS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5j
bHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJNZWRpYVZvbHVtZVNsaWRlckNv
bnRhaW5lciBmaW5hbCA6IHB1YmxpYyBSZW5kZXJCbG9ja0Zsb3cgewotICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIpOwotcHVibGljOgot
ICAgIFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKEVsZW1lbnQmLCBSZW5kZXJTdHls
ZSYmKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGxheW91dCgpIG92ZXJyaWRlOwotfTsKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBSZW5kZXJNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lciBmaW5hbCA6IHB1YmxpYyBSZW5kZXJGbGV4aWJsZUJveCB7Ci0gICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChSZW5kZXJNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5l
cik7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXIoRWxl
bWVudCYsIFJlbmRlclN0eWxlJiYpOwotCi1wcml2YXRlOgotICAgIHZvaWQgbGF5b3V0KCkgb3Zl
cnJpZGU7Ci0gICAgYm9vbCBpc0ZsZXhpYmxlQm94SW1wbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KLX07Ci0KLSNpZiBQTEFURk9STShXSU4pICYmIFVTRShDRykKLQotY2xhc3Mg
UmVuZGVyTWVkaWFDb250cm9scyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYWRqdXN0TWVk
aWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmKTsKLX07Ci0KLSNlbmRpZiAvLyBQTEFURk9S
TShXSU4pICYmIFVTRShDRykKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNsaWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcApp
bmRleCAzN2VjOGY1NDk3MDRhOWIyY2VlZjQzZjJhOThmZGE4MDYzY2ZhZDBkLi4xNjgxZjlkMWZj
MGI5OTIyNzAxYWZiMzM5ZDFiM2I2ZjE3MGM2OTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2xpZGVyLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2Vy
SWRpb21zLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNsdWRlICJN
b3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCA3ODA5MjVjMjlj
ZWYwNjQ0ZTAzY2EyYjVjMmU1YjcxZmUxZWMyYTY3Li5lOWRkMTQ5NDU4NjRiYTliZDhlODVhNDUw
ODQ3ZTJlNjI1MmQxNjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5j
cHAKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1
ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVBZHdhaXRhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUFkd2FpdGEuY3BwCmluZGV4IGIxOGM0ZDA1ZDUxZTgw
ZDRmMmVhNjEwZjY2YTcyYzI3NTY4N2Q2NzYuLjQ3OGNlOWY2NWVkOGJmNjBhZjA2Y2MyYTRmMjc0
YmYxMWQ5ZDA1NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUFkd2FpdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUFkd2FpdGEuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgorI2luY2x1ZGUgIk1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWludElu
Zm8uaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
QEAgLTQ5Miw2ICs0OTIsMTggQEAgYm9vbCBSZW5kZXJUaGVtZUFkd2FpdGE6OnBhaW50U2xpZGVy
VGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnMKIH0KIAogI2lmIEVO
QUJMRShWSURFTykKK3N0YXRpYyBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gcGFyZW50TWVkaWFF
bGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8Tm9kZT4gbWVkaWFOb2RlID0gbm9kZS0+c2hhZG93SG9z
dCgpOworICAgIGlmICghbWVkaWFOb2RlKQorICAgICAgICBtZWRpYU5vZGUgPSBjb25zdF9jYXN0
PE5vZGUqPihub2RlKTsKKyAgICBpZiAoIWlzPEhUTUxNZWRpYUVsZW1lbnQ+KCptZWRpYU5vZGUp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE1lZGlh
RWxlbWVudD4obWVkaWFOb2RlLmdldCgpKTsKK30KKwogYm9vbCBSZW5kZXJUaGVtZUFkd2FpdGE6
OnBhaW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAg
YXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQocmVuZGVyT2JqZWN0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5oCmluZGV4IDNiMmI1MGRk
ZDU5NTJkYzFlZjVkOGIwMzA0MWQ5MzNjOGIzNzllOWEuLjE5YmMzOTJlZTMxZjY5NTM0OTUyMmQy
MTVkZjk5NWZkNWZhODEyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ29jb2EuaApAQCAtMjgsOSArMjgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKIE9CSkNfQ0xBU1MgTlNEYXRlQ29tcG9uZW50c0Zvcm1hdHRlcjsKLSNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDEyICs0Miw4IEBAIHByaXZhdGU6CiAjZW5kaWYK
IAogcHJvdGVjdGVkOgotI2lmIEVOQUJMRShWSURFTykKICAgICBTdHJpbmcgbWVkaWFDb250cm9s
c0Zvcm1hdHRlZFN0cmluZ0ZvckR1cmF0aW9uKGRvdWJsZSkgb3ZlcnJpZGU7Ci0jZW5kaWYKLSNp
ZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIFJldGFpblB0cjxOU0RhdGVDb21w
b25lbnRzRm9ybWF0dGVyPiBtX2R1cmF0aW9uRm9ybWF0dGVyOwotI2VuZGlmCiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLm1tCmluZGV4IDhiNmM1
ZWRiMzg0MjFjYzdiZWVkYzFjOTZlZmE0MjNkYjdhMjFjNTMuLjYzYTA1ZjY2NTI5MTBmMGFjMmM4
ODg2OTVmMmI3ODAwZmZhN2Q3OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNvY29hLm1tCkBAIC0xMjcsMTEgKzEyNyw4IEBAIGJvb2wgUmVuZGVyVGhlbWVDb2Nv
YTo6cGFpbnRBcHBsZVBheUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25z
dCBQCiAKICNlbmRpZiAvLyBFTkFCTEUoQVBQTEVfUEFZKQogCi0jaWYgRU5BQkxFKFZJREVPKQot
CiBTdHJpbmcgUmVuZGVyVGhlbWVDb2NvYTo6bWVkaWFDb250cm9sc0Zvcm1hdHRlZFN0cmluZ0Zv
ckR1cmF0aW9uKGNvbnN0IGRvdWJsZSBkdXJhdGlvbkluU2Vjb25kcykKIHsKLSNpZiBFTkFCTEUo
TUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmICghc3RkOjppc2Zpbml0ZShkdXJhdGlvbklu
U2Vjb25kcykpCiAgICAgICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJpbmRlZmluaXRlIHRpbWUi
LCAiYWNjZXNzaWJpbGl0eSBoZWxwIHRleHQgZm9yIGFuIGluZGVmaW5pdGUgbWVkaWEgY29udHJv
bGxlciB0aW1lIHZhbHVlIik7CiAKQEAgLTE0NSwxMSArMTQyLDYgQEAgU3RyaW5nIFJlbmRlclRo
ZW1lQ29jb2E6Om1lZGlhQ29udHJvbHNGb3JtYXR0ZWRTdHJpbmdGb3JEdXJhdGlvbihjb25zdCBk
b3VibGUgZHUKICAgICB9CiAgICAgcmV0dXJuIFttX2R1cmF0aW9uRm9ybWF0dGVyLmdldCgpIHN0
cmluZ0Zyb21UaW1lSW50ZXJ2YWw6ZHVyYXRpb25JblNlY29uZHNdOwogICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7Ci0jZWxzZQotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotI2VuZGlm
CiB9CiAKLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUlPUy5tbQppbmRleCAwOWExMmRjNWRhYzFhMWIyNDllMDAxN2NiNGM2
MGYyZGU5YmRmZDVhLi4xMmZkN2ZmZjJmZDkyN2EyZjBlMjdhOGMwZTdiM2RjNGY5MGJjNzBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCkBAIC0xMzU4LDMw
ICsxMzU4LDIxIEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnVwZGF0ZUNhY2hlZFN5c3RlbUZvbnRE
ZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHZhbHVlSUQsIEZvbnRDCiAgICAgZm9udERlc2NyaXB0aW9u
LnNldEl0YWxpYyhub3JtYWxJdGFsaWNWYWx1ZSgpKTsKIH0KIAotI2lmIEVOQUJMRShWSURFTykK
IFN0cmluZyBSZW5kZXJUaGVtZUlPUzo6bWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQogewotI2lm
IEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKG1fbGVnYWN5TWVkaWFDb250
cm9sc1N0eWxlU2hlZXQuaXNFbXB0eSgpKQogICAgICAgICBtX2xlZ2FjeU1lZGlhQ29udHJvbHNT
dHlsZVNoZWV0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTpbW05TQnVuZGxl
IGJ1bmRsZUZvckNsYXNzOltXZWJDb3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xhc3NdXSBwYXRoRm9y
UmVzb3VyY2U6QCJtZWRpYUNvbnRyb2xzaU9TIiBvZlR5cGU6QCJjc3MiXSBlbmNvZGluZzpOU1VU
RjhTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdOwogICAgIHJldHVybiBtX2xlZ2FjeU1lZGlhQ29u
dHJvbHNTdHlsZVNoZWV0OwotI2Vsc2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRp
ZgogfQogCiBTdHJpbmcgUmVuZGVyVGhlbWVJT1M6Om1vZGVybk1lZGlhQ29udHJvbHNTdHlsZVNo
ZWV0KCkKIHsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLm1vZGVybk1lZGlhQ29udHJvbHNF
bmFibGVkKCkpIHsKICAgICAgICAgaWYgKG1fbWVkaWFDb250cm9sc1N0eWxlU2hlZXQuaXNFbXB0
eSgpKQogICAgICAgICAgICAgbV9tZWRpYUNvbnRyb2xzU3R5bGVTaGVldCA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoQ29udGVudHNPZkZpbGU6W1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViQ29y
ZVJlbmRlclRoZW1lQnVuZGxlIGNsYXNzXV0gcGF0aEZvclJlc291cmNlOkAibW9kZXJuLW1lZGlh
LWNvbnRyb2xzIiBvZlR5cGU6QCJjc3MiIGluRGlyZWN0b3J5OkAibW9kZXJuLW1lZGlhLWNvbnRy
b2xzIl0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKICAgICAgICAg
cmV0dXJuIG1fbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7CiAgICAgfQogICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwotI2Vsc2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgogfQog
CiB2b2lkIFJlbmRlclRoZW1lSU9TOjpwdXJnZUNhY2hlcygpCkBAIC0xMzk0LDcgKzEzODUsNiBA
QCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwdXJnZUNhY2hlcygpCiAKIFN0cmluZyBSZW5kZXJUaGVt
ZUlPUzo6bWVkaWFDb250cm9sc1NjcmlwdCgpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xT
X1NDUklQVCkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5tb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChtX21lZGlhQ29u
dHJvbHNTY3JpcHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBOU0J1bmRsZSAqYnVuZGxlID0g
W05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltXZWJDb3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xhc3Nd
XTsKQEAgLTE0MTksMjcgKzE0MDksMTggQEAgU3RyaW5nIFJlbmRlclRoZW1lSU9TOjptZWRpYUNv
bnRyb2xzU2NyaXB0KCkKICAgICAgICAgbV9sZWdhY3lNZWRpYUNvbnRyb2xzU2NyaXB0ID0gc2Ny
aXB0QnVpbGRlci50b1N0cmluZygpOwogICAgIH0KICAgICByZXR1cm4gbV9sZWdhY3lNZWRpYUNv
bnRyb2xzU2NyaXB0OwotI2Vsc2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgog
fQogCiBTdHJpbmcgUmVuZGVyVGhlbWVJT1M6Om1lZGlhQ29udHJvbHNCYXNlNjRTdHJpbmdGb3JJ
Y29uTmFtZUFuZFR5cGUoY29uc3QgU3RyaW5nJiBpY29uTmFtZSwgY29uc3QgU3RyaW5nJiBpY29u
VHlwZSkKIHsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmICghUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5tb2Rlcm5NZWRpYUNvbnRyb2xz
RW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIFN0cmluZyBk
aXJlY3RvcnkgPSAibW9kZXJuLW1lZGlhLWNvbnRyb2xzL2ltYWdlcyI7CiAgICAgTlNCdW5kbGUg
KmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViQ29yZVJlbmRlclRoZW1lQnVu
ZGxlIGNsYXNzXV07CiAgICAgcmV0dXJuIFtbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZkZpbGU6
W2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6aWNvbk5hbWUgb2ZUeXBlOmljb25UeXBlIGluRGlyZWN0
b3J5OmRpcmVjdG9yeV1dIGJhc2U2NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9uczowXTsKLSNlbHNl
Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAotI2VuZGlmIC8vIEVOQUJM
RShWSURFTykKLQogc3RydWN0IENTU1ZhbHVlSURBbmRTZWxlY3RvciB7CiAgICAgQ1NTVmFsdWVJ
RCBjc3NWYWx1ZUlEOwogICAgIFNFTCBzZWxlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAzMThlYjgyZDlhZDU3ZDdkNDM1YTVjMTc5Nzk2OGQz
ZWU3NmI5ZmRjLi4wZTM3MTg4NjIyOGMxYjE2YjI2MmU4ZDZhMDYyOTQyY2I4MmM1OWM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC00OCwxNCArNDgs
MTIgQEAKICNpbXBvcnQgIkxvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAi
TG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oIgogI2ltcG9ydCAiTG9jYWxpemVkU3RyaW5n
cy5oIgotI2ltcG9ydCAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbXBvcnQgIlBhZ2UuaCIK
ICNpbXBvcnQgIlBhaW50SW5mby5oIgogI2ltcG9ydCAiUGF0aFV0aWxpdGllcy5oIgogI2ltcG9y
dCAiUmVuZGVyQXR0YWNobWVudC5oIgogI2ltcG9ydCAiUmVuZGVyTGF5ZXIuaCIKICNpbXBvcnQg
IlJlbmRlck1lZGlhLmgiCi0jaW1wb3J0ICJSZW5kZXJNZWRpYUNvbnRyb2xzLmgiCiAjaW1wb3J0
ICJSZW5kZXJQcm9ncmVzcy5oIgogI2ltcG9ydCAiUmVuZGVyU2xpZGVyLmgiCiAjaW1wb3J0ICJS
ZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5oIgpAQCAtMjk2LDMxICsyOTQsMjEgQEAgTlNWaWV3ICpS
ZW5kZXJUaGVtZU1hYzo6ZG9jdW1lbnRWaWV3Rm9yKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29u
c3QKICAgICByZXR1cm4gVGhlbWVNYWM6OmVuc3VyZWRWaWV3KCZvLnZpZXcoKS5mcmFtZVZpZXco
KSwgc3RhdGVzKTsKIH0KIAotI2lmIEVOQUJMRShWSURFTykKLQogU3RyaW5nIFJlbmRlclRoZW1l
TWFjOjptZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRS
T0xTX1NDUklQVCkKICAgICBpZiAobV9sZWdhY3lNZWRpYUNvbnRyb2xzU3R5bGVTaGVldC5pc0Vt
cHR5KCkpCiAgICAgICAgIG1fbGVnYWN5TWVkaWFDb250cm9sc1N0eWxlU2hlZXQgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlOltbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dl
YkNvcmVSZW5kZXJUaGVtZUJ1bmRsZSBjbGFzc11dIHBhdGhGb3JSZXNvdXJjZTpAIm1lZGlhQ29u
dHJvbHNBcHBsZSIgb2ZUeXBlOkAiY3NzIl0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rpbmcg
ZXJyb3I6bmlsXTsKICAgICByZXR1cm4gbV9sZWdhY3lNZWRpYUNvbnRyb2xzU3R5bGVTaGVldDsK
LSNlbHNlCi0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAogU3RyaW5nIFJl
bmRlclRoZW1lTWFjOjptb2Rlcm5NZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCiB7Ci0jaWYgRU5B
QkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5tb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCgpKSB7CiAgICAg
ICAgIGlmIChtX21lZGlhQ29udHJvbHNTdHlsZVNoZWV0LmlzRW1wdHkoKSkKICAgICAgICAgICAg
IG1fbWVkaWFDb250cm9sc1N0eWxlU2hlZXQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRz
T2ZGaWxlOltbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dlYkNvcmVSZW5kZXJUaGVtZUJ1bmRs
ZSBjbGFzc11dIHBhdGhGb3JSZXNvdXJjZTpAIm1vZGVybi1tZWRpYS1jb250cm9scyIgb2ZUeXBl
OkAiY3NzIiBpbkRpcmVjdG9yeTpAIm1vZGVybi1tZWRpYS1jb250cm9scyJdIGVuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07CiAgICAgICAgIHJldHVybiBtX21lZGlhQ29u
dHJvbHNTdHlsZVNoZWV0OwogICAgIH0KICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbHNl
Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6cHVyZ2VDYWNoZXMoKQpAQCAtMzM1LDcgKzMyMyw2IEBAIHZvaWQgUmVuZGVyVGhlbWVN
YWM6OnB1cmdlQ2FjaGVzKCkKIAogU3RyaW5nIFJlbmRlclRoZW1lTWFjOjptZWRpYUNvbnRyb2xz
U2NyaXB0KCkKIHsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLm1vZGVybk1lZGlhQ29udHJv
bHNFbmFibGVkKCkpIHsKICAgICAgICAgaWYgKG1fbWVkaWFDb250cm9sc1NjcmlwdC5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9y
Q2xhc3M6W1dlYkNvcmVSZW5kZXJUaGVtZUJ1bmRsZSBjbGFzc11dOwpAQCAtMzUzLDI3ICszNDAs
MTggQEAgU3RyaW5nIFJlbmRlclRoZW1lTWFjOjptZWRpYUNvbnRyb2xzU2NyaXB0KCkKICAgICAg
ICAgbV9sZWdhY3lNZWRpYUNvbnRyb2xzU2NyaXB0ID0gbWFrZVN0cmluZyhTdHJpbmcgeyBsb2Nh
bGl6ZWRTdHJpbmdzIH0sIFN0cmluZyB7IHNjcmlwdCB9KTsKICAgICB9CiAgICAgcmV0dXJuIG1f
bGVnYWN5TWVkaWFDb250cm9sc1NjcmlwdDsKLSNlbHNlCi0gICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7Ci0jZW5kaWYKIH0KIAogU3RyaW5nIFJlbmRlclRoZW1lTWFjOjptZWRpYUNvbnRyb2xzQmFz
ZTY0U3RyaW5nRm9ySWNvbk5hbWVBbmRUeXBlKGNvbnN0IFN0cmluZyYgaWNvbk5hbWUsIGNvbnN0
IFN0cmluZyYgaWNvblR5cGUpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkK
ICAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubW9kZXJu
TWVkaWFDb250cm9sc0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAK
ICAgICBOU1N0cmluZyAqZGlyZWN0b3J5ID0gQCJtb2Rlcm4tbWVkaWEtY29udHJvbHMvaW1hZ2Vz
IjsKICAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltXZWJD
b3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xhc3NdXTsKICAgICByZXR1cm4gW1tOU0RhdGEgZGF0YVdp
dGhDb250ZW50c09mRmlsZTpbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTppY29uTmFtZSBvZlR5cGU6
aWNvblR5cGUgaW5EaXJlY3Rvcnk6ZGlyZWN0b3J5XV0gYmFzZTY0RW5jb2RlZFN0cmluZ1dpdGhP
cHRpb25zOjBdOwotI2Vsc2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgogfQog
Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQotCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMp
CiAKIFN0cmluZyBSZW5kZXJUaGVtZU1hYzo6aW1hZ2VDb250cm9sc1N0eWxlU2hlZXQoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDk0NWRkZmQ1NzZkMjZmZTNi
ODI3OGNkMjY5MGVjMGZhNGU4ZjVlZjYuLjdhMjVlYWIzNTFjYTM5MTNhOTcwZDQwODJhZjRiMTdi
NDUyZTMwMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTQ1MzEsMTIg
KzQ1MzEsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6cGF0aFN0cmluZ1dpdGhT
aHJpbmtXcmFwcGVkUmVjdHMoY29uc3QgVmVjdG9yPGRvdQogCiBTdHJpbmcgSW50ZXJuYWxzOjpn
ZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1c0ZvckVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCYg
bWVkaWFFbGVtZW50KQogewotI2lmICFFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAg
IFVOVVNFRF9QQVJBTShtZWRpYUVsZW1lbnQpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLSNlbHNl
CiAgICAgcmV0dXJuIG1lZGlhRWxlbWVudC5nZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1cygp
OwotI2VuZGlmCiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395212</attachid>
            <date>2020-04-01 15:31:48 -0700</date>
            <delta_ts>2020-04-01 15:51:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209875-20200401153147.patch</filename>
            <type>text/plain</type>
            <size>215064</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5MzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmRjMzc2NGI5NjMwYzlk
Nzc0ZjczM2FmNGEyNGU4YWRhNzA4ODZhMi4uNTc5NjQ2NDkxYTA0NjQ1YjEzYmNiYmNhMGYwMDlh
Mzc2YTM4ZTE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAyMC0wNC0wMSAgRXJp
YyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdW51
c2VkIG1lZGlhIGNvbnRyb2xzIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwOTg3NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjExNzI3Mzg+
CisKKyAgICAgICAgUmVtb3ZlIGNvZGUgZm9yIHRoZSwgbm93IHVudXNlZCwgQysrIGJhc2VkIG1l
ZGlhIGNvbnRyb2xzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuCisKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OnRleHRUcmFja0NvbnRhaW5lcik6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0Lmg6CisgICAgICAgICogTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRnJvbVJlbmRlcmVyKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmg6IFJlbW92ZWQuCisgICAgICAgICogZG9t
L05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzTWVkaWFDb250cm9sRWxlbWVudCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc01lZGlhQ29udHJvbHMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6On5IVE1MTWVkaWFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVy
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGF1c2VBZnRl
ckRldGFjaGVkVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRh
dGVSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RN
ZWRpYVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
TG9hZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRO
ZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y2hhbmdl
TmV0d29ya1N0YXRlRnJvbUxvYWRpbmdUb0lkbGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50Ojpwcm9ncmVzc0V2ZW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpwbGF5YmFja1Byb2dyZXNzVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjphZGRUZXh0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6cmVtb3ZlVGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OmRpZEFkZFRleHRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjplbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVDYXB0aW9uQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmxheW91dFNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja3MpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJDaGFyYWN0ZXJpc3RpY0NoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlVm9sdW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZGlkQmVjb21lRnVsbHNjcmVlbkVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6d2lsbFN0b3BCZWluZ0Z1bGxzY3Jl
ZW5FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFj
a1JlYWR5U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OmNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0Q2xvc2VkQ2FwdGlvbnNW
aXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZU1l
ZGlhQ29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y2FwdGlv
blByZWZlcmVuY2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
OjpzZXRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Omdl
dEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OmNsb3NlQ2FwdGlvblRyYWNrc0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFDb250cm9scyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpoYXNNZWRpYUNvbnRyb2xzIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0
ZU1lZGlhQ29udHJvbHMpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFDb250cm9sc0hv
c3QpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVz
Lmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
Lmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbXBhcmVDdWVJbnRlcnZhbEZvckRpc3BsYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50
Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6cHJvY2Vzc0Fj
dGl2ZVZUVEN1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50Ojp1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFN0cm9r
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y2xlYXJU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjplbnRlcmVk
RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50OjpleGl0ZWRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVZpZGVvRGlzcGxheVNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6dXBkYXRlU2l6ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp0
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6aGlkZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpzaG93KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6Omlz
U2hvd2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50Ojpsb2dnZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nSWRlbnRpZmllciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojps
b2dDaGFubmVsIGNvbnN0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01l
ZGlhQ29udHJvbHMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29u
dHJvbHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
ZWRpYUFGLmNwcDoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZTo6c2V0UGFnZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJN
ZWRpYUNvbnRyb2xzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVk
aWFDb250cm9scy5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ29jb2EuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ29jb2E6Om1lZGlhQ29udHJvbHNGb3JtYXR0
ZWRTdHJpbmdGb3JEdXJhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6Om1lZGlhQ29udHJvbHNTdHls
ZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjptb2Rlcm5NZWRpYUNv
bnRyb2xzU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6bWVk
aWFDb250cm9sc1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6bWVk
aWFDb250cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5kVHlwZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6Om1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjptb2Rlcm5NZWRpYUNvbnRyb2xzU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6bWVkaWFDb250cm9sc1NjcmlwdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6bWVkaWFDb250cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5k
VHlwZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpnZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1c0ZvckVsZW1lbnQpOgor
CiAyMDIwLTAzLTMxICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFtpUGFkXSBVc2UgQVZBdWRpb1Nlc3Npb24gdG8gZGV0ZWN0IEFpclBsYXkgcm91dGUg
Y2hhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xz
L01lZGlhQ29udHJvbHNIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250
cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKaW5kZXggNTA4YjlhMThlZWYyMzgzYWI2MWI5OWNm
NjVmNTY1MmJjYjk1NzY3Ny4uMjc1MjYxZTk5OGQzMWYxNjg5MjlhNDkyMzg3NjdhODFhZjM0ODI0
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlh
Q29udHJvbHNIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJv
bHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCkBAIC0yNSwxNCArMjUsMTIgQEAKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLQogI2luY2x1
ZGUgIk1lZGlhQ29udHJvbHNIb3N0LmgiCiAKICNpbmNsdWRlICJDYXB0aW9uVXNlclByZWZlcmVu
Y2VzLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgorI2luY2x1ZGUgIk1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTE1OSwxMSAr
MTU3LDEwIEBAIHZvaWQgTWVkaWFDb250cm9sc0hvc3Q6OnNldFNlbGVjdGVkVGV4dFRyYWNrKFRl
eHRUcmFjayogdHJhY2spCiAKIEVsZW1lbnQqIE1lZGlhQ29udHJvbHNIb3N0Ojp0ZXh0VHJhY2tD
b250YWluZXIoKQogewotICAgIGlmICghbV90ZXh0VHJhY2tDb250YWluZXIgJiYgbV9tZWRpYUVs
ZW1lbnQpIHsKLSAgICAgICAgbV90ZXh0VHJhY2tDb250YWluZXIgPSBNZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkp
OwotICAgICAgICBtX3RleHRUcmFja0NvbnRhaW5lci0+c2V0TWVkaWFDb250cm9sbGVyKG1fbWVk
aWFFbGVtZW50LmdldCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fdGV4dFRyYWNrQ29udGFpbmVy
LmdldCgpOworICAgIGlmICghbV90ZXh0VHJhY2tDb250YWluZXIgJiYgbV9tZWRpYUVsZW1lbnQp
CisgICAgICAgIG1fdGV4dFRyYWNrQ29udGFpbmVyID0gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29u
dGFpbmVyRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLCAqbV9tZWRp
YUVsZW1lbnQpOworCisgICAgICAgIHJldHVybiBtX3RleHRUcmFja0NvbnRhaW5lci5nZXQoKTsK
IH0KIAogdm9pZCBNZWRpYUNvbnRyb2xzSG9zdDo6dXBkYXRlVGV4dFRyYWNrQ29udGFpbmVyKCkK
QEAgLTMyMSw1ICszMTgsMyBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0Ojpjb21wYWN0TW9kZSgp
IGNvbnN0CiB9CiAKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCmluZGV4IGU0MGY1MWYzM2Nm
MThkZmJlNTI2OGZlYTExYzc1MDkyZDU3MWFiOGIuLjQxNGNiMGNiNTZhMmYyODVhZDI0YzljNTIx
OWY0ODlmZjRlZTBhZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFj
b250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCkBAIC0yNSw4ICsyNSw2IEBACiAKICNw
cmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLQogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WYXJpYW50Lmg+CkBAIC0xMDQsNCArMTAyLDMgQEAgcHJpdmF0ZToKIAogfQogCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQppbmRleCA1Y2VhNWUxYzVlYmIwMDU1Yzg0MzMzZmJm
NGViMWM4NmQyZWM2YjY4Li41MzdlZWU3ZGFjYzdkYzQ0NmQ5ODk5NmQ4NGRiNWQxZGEzNGYxZWE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1
Z2luUmVwbGFjZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCkBAIC0yNSw4ICsyNSw2IEBACiAKICNpbXBvcnQg
ImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLQogI2ltcG9y
dCAiUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKIAogI2ltcG9ydCAiQ29tbW9uVk0uaCIK
QEAgLTQzNyw0ICs0MzUsMyBAQCBKU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNl
bWVudDo6ZXJyb3JMb2coSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUpCiAKIH0KIAotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDNkZTI1YzQwYTZlOTVkM2RiZDU3Mzg3NmJiNGZhMTYyZWZmZTcy
ZDUuLjNiYTI0ZDcxYzUyZjk0OGNkY2ZhYjhhZjkwYzNjY2E4M2E5ODBmZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC00NDcsNyArNDQ3LDYgQEAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5j
cHAKIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwCiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5TWF0aE1MRWxlbWVudC5jcHAKLWFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29u
dHJvbHMuY3BwCiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAKIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNwcAogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAKQEAgLTEzNjgsOSArMTM2Nyw3IEBAIGh0bWwv
cGFyc2VyL1hTU0F1ZGl0b3JEZWxlZ2F0ZS5jcHAKIGh0bWwvc2hhZG93L0F1dG9GaWxsQnV0dG9u
RWxlbWVudC5jcHAKIGh0bWwvc2hhZG93L0RhdGFMaXN0QnV0dG9uRWxlbWVudC5jcHAKIGh0bWwv
c2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcAotaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
RWxlbWVudFR5cGVzLmNwcAotaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCi1o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAoraHRtbC9zaGFkb3cvTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudC5jcHAKIGh0bWwvc2hhZG93L1Byb2dyZXNzU2hhZG93RWxl
bWVudC5jcHAKIGh0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKIGh0bWwvc2hhZG93
L1NwaW5CdXR0b25FbGVtZW50LmNwcApAQCAtMjE5MCw3ICsyMTg3LDYgQEAgcmVuZGVyaW5nL1Jl
bmRlckxpc3RJdGVtLmNwcAogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCiByZW5kZXJp
bmcvUmVuZGVyTWFycXVlZS5jcHAKIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAKLXJlbmRlcmlu
Zy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAog
cmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxv
dy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA5ZWNlYTYwYmVkY2Y4YzMzOGI0ZDg3NDc1ZDNhZGYxNTk4YWRiZTljLi5mYWY0
MzY3YWRiMGU1YWRmZGU3MGEyMGNlZjJhYjllNTdkNTQ4N2E1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MzgsNyArNjM4LDYg
QEAKIAkJMUQ5RjBGQzEyMTIyMDI5QjAwNUQ4RkQ0IC8qIFNoYXJlRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMURDNTU0MDAyMTFCQThDODAwNEI3
ODBFIC8qIFNoYXJlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTFEQkMxQjU2MjM0N0IzRDIwMEI5MDFBRiAvKiBQaWN0dXJlSW5QaWN0dXJl
T2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFEQkMxQjU1MjM0N0IzRDIwMEI5MDFBRiAvKiBQaWN0dXJlSW5QaWN0dXJlT2JzZXJ2ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxRjM2RUE5
QzFFMjFCQTE3MDA2MjFFMjUgLyogV2ViQmFja2dyb3VuZFRhc2tDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjM2RUE5QTFFMjFCQTE3
MDA2MjFFMjUgLyogV2ViQmFja2dyb3VuZFRhc2tDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUYzQzNCRUIxMzVDQUYzQzAwQjhD
MUFDIC8qIE1lZGlhQ29udHJvbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFGM0MzQkU5MTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmgg
Ki87IH07CiAJCTFGNzJCRjBCMTg3RkQ0NUMwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1lbW9y
eUhhbmRsZXJJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFGNzJCRjA5MTg3RkQ0MjcwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1lbW9yeUhhbmRs
ZXJJT1MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxRjg3NTZCMjFFMjJDMzM1MDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjg3
NTZCMTFFMjJCRUVGMDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUZBRkJG
MTkxNUE1RkE3NDAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUZBRkJGMTYxNUE1RkE1MjAwMDgzQTIwIC8qIFVU
SVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xMDg2LDcgKzEwODUsNyBAQAogCQk0MTZFNkZFOTFCQkQxMkU1MDAwQTYwNDMgLyog
UmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEQ4IC8qIFJlYWRhYmxlU3RyZWFt
QnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0MTZFNkZFOTFCQkQxMkU1MDAwQTYwNTMgLyogV3JpdGFibGVTdHJlYW1CdWlsdGlucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYx
QkIzMTEwRDAwQjc2NEU4IC8qIFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTZGRDI1RjI0MEZBNEU1MDA2
NjYxRDggLyogTm93UGxheWluZ0luZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxNkZEMjVEMjQwRUUxQUUwMDY2NjFEOCAvKiBOb3dQbGF5aW5nSW5m
by5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTQx
NzI1M0FCMTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE3MjUzQTkxMzU0QkJCQzAw
MzYwRjJBIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmggKi87IH07CisJCTQxNzI1M0FCMTM1NEJC
QkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTcyNTNBOTEzNTRC
QkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oICov
OyB9OwogCQk0MTc2MTJBRjFFM0E5OTQwMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2lu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTc2
MTJBQjFFM0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2ludC5jcHAgKi87IH07
CiAJCTQxNzYxMkIwMUUzQTk5NDAwMEMzRDgxRCAvKiBMaWJXZWJSVENNZWRpYUVuZHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTc2MTJBQzFF
M0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2ludC5oICovOyB9OwogCQk0MTc2
MTJCMTFFM0E5OTQwMDBDM0Q4MUQgLyogTGliV2ViUlRDUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNzYxMkFE
MUUzQTk5M0IwMEMzRDgxRCAvKiBMaWJXZWJSVENQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwICov
OyB9OwpAQCAtNDU2Niw3ICs0NTY1LDYgQEAKIAkJREU1Rjg2NTkxRkEyQUYyNDAwNkRCNjNCIC8q
IFVuaWZpZWRTb3VyY2U2MS1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IERFNUY4NjNBMUZBMkFGMDcwMDZEQjYzQiAvKiBVbmlmaWVkU291cmNlNjEt
bW0ubW0gKi87IH07CiAJCURFNzcxMDg2MUZBMkYwRDYwMDQ2MDAxNiAvKiBXZWJBcmNoaXZlRHVt
cFN1cHBvcnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMTc2M0YzQzFFMjA1MjM0MDAxRDU4REUgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0Lm1tICov
OyB9OwogCQlERUJDQ0REMjE2NjQ2RTgyMDBBNDUyRTEgLyogUmVuZGVyTWVkaWFDb250cm9scy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU0OUIzMDgx
NjVGMkZFMTAwMTAzMzhEIC8qIFJlbmRlck1lZGlhQ29udHJvbHMuaCAqLzsgfTsKLQkJREVCQ0NE
RDQxNjY0NkVBRjAwQTQ1MkUxIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU0OUIzMDAxNjVGMkZDNjAw
MTAzMzhEIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oICovOyB9OwogCQlERUNBN0Q5MzFG
OUU2N0I1MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTEzMS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERUNBN0Q2RDFGOUU2MUNGMDBFM0I2NjEgLyog
VW5pZmllZFNvdXJjZTEzMS5jcHAgKi87IH07CiAJCURFQ0E3RDk0MUY5RTY3QjUwMEUzQjY2MSAv
KiBVbmlmaWVkU291cmNlMTMyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IERFQ0E3RDdFMUY5RTYxRTMwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMTMy
LmNwcCAqLzsgfTsKIAkJREVDQTdEOTUxRjlFNjdCNTAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2Ux
MzMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREVD
QTdEODAxRjlFNjFFNTAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxMzMuY3BwICovOyB9OwpAQCAt
NjYzNCw4ICs2NjMyLDYgQEAKIAkJMURFRjA2REUyMzNEMkUxQzAwRUUyMjhEIC8qIERvY3VtZW50
UGljdHVyZUluUGljdHVyZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRG9jdW1lbnRQaWN0
dXJlSW5QaWN0dXJlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUYzNkVBOUEx
RTIxQkExNzAwNjIxRTI1IC8qIFdlYkJhY2tncm91bmRUYXNrQ29udHJvbGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJCYWNrZ3JvdW5kVGFza0NvbnRyb2xsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUYzNkVBOUIxRTIxQkExNzAwNjIxRTI1IC8q
IFdlYkJhY2tncm91bmRUYXNrQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdlYkJhY2tncm91bmRUYXNrQ29udHJvbGxlci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUYzQzNCRTgxMzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29u
dHJvbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFDb250
cm9scy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFGM0MzQkU5MTM1Q0FGM0Mw
MEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1lZGlhQ29udHJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUY3MkJG
MDgxODdGRDQyNzAwMDlCQ0IzIC8qIFRpbGVDb250cm9sbGVyTWVtb3J5SGFuZGxlcklPUy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaWxlQ29udHJvbGxlck1lbW9y
eUhhbmRsZXJJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRjcyQkYwOTE4
N0ZENDI3MDAwOUJDQjMgLyogVGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5kbGVySU9TLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbGVDb250cm9sbGVyTWVtb3J5SGFuZGxlcklP
Uy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRjg3NTZCMDFFMjJCRUVGMDA0MkM0
MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzQ0OCw4ICs3NDQ0LDggQEAKIAkJNDE2
RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtlclJlcG9ydGluZ1Byb3h5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlclJlcG9ydGluZ1Byb3h5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNkZEMjVEMjQwRUUxQUUwMDY2NjFEOCAvKiBOb3dQbGF5
aW5nSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb3dQbGF5aW5nSW5m
by5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTcwQTJFOTFEOEMwQ0MwMDAzMTg0
NTIgLyogSlNET01XcmFwcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTRE9NV3JhcHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxNzI1
M0E4MTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxNzI1M0E5MTM1NEJCQkMwMDM2MEYyQSAvKiBN
ZWRpYUNvbnRyb2xFbGVtZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
ZWRpYUNvbnRyb2xFbGVtZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTcy
NTNBODEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDE3MjUzQTkxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MTc2MTJBQjFFM0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2lu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMaWJXZWJSVENNZWRp
YUVuZHBvaW50LmNwcDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBvaW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE3NjEyQUMxRTNBOTkzQjAwQzNEODFE
IC8qIExpYldlYlJUQ01lZGlhRW5kcG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gTGliV2ViUlRDTWVkaWFFbmRwb2ludC5oOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJU
Q01lZGlhRW5kcG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE3NjEyQUQx
RTNBOTkzQjAwQzNEODFEIC8qIExpYldlYlJUQ1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMaWJXZWJSVENQZWVyQ29ubmVjdGlv
bkJhY2tlbmQuY3BwOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJUQ1BlZXJDb25uZWN0aW9uQmFj
a2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDU3Miw4ICsxNDU2OCw2
IEBACiAJCURCRkNCMEVCRkY1Q0Q3N0VCRUIzNTk1RiAvKiBSZW5kZXJNYXRoTUxQYWRkZWQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWF0aE1MUGFkZGVk
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREQwNUZFMEIwQjhCQTNDNjAwOUFD
REZFIC8qIFdlYkNvcmVPYmpDRXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJDb3JlT2JqQ0V4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
RDc2M0JCMTA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5keWxpYiAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIi
OyBuYW1lID0gbGlieG1sMi5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYnhtbDIuZHlsaWI7IHNv
dXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07Ci0JCURFNDlCMkZGMTY1RjJGQzYwMDEwMzM4RCAv
KiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJREU0OUIzMDAxNjVGMkZDNjAwMTAzMzhEIC8qIE1lZGlhQ29udHJvbEVs
ZW1lbnRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUNvbnRy
b2xFbGVtZW50VHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREU0OUIzMDcx
NjVGMkZFMTAwMTAzMzhEIC8qIFJlbmRlck1lZGlhQ29udHJvbHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWVkaWFDb250cm9scy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFNDlCMzA4MTY1RjJGRTEwMDEwMzM4RCAvKiBSZW5kZXJN
ZWRpYUNvbnRyb2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1l
ZGlhQ29udHJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREU1RjgzQjIxRkEx
ODY3NjAwNkRCNjNBIC8qIFVuaWZpZWRTb3VyY2UzMDEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gVW5pZmllZFNvdXJjZTMwMS5jcHA7IHBhdGggPSAiRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTMwMS5jcHAiOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTgyNTAsMTIgKzE4MjQ0LDggQEAK
IAkJCQlBN0M5QUJGNzEzNTdBM0JGMDBGNTUwM0YgLyogRGV0YWlsc01hcmtlckNvbnRyb2wuaCAq
LywKIAkJCQk1MTAxOTJEMzE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVt
ZW50LmNwcCAqLywKIAkJCQk1MTAxOTJENDE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9s
c1Jvb3RFbGVtZW50LmggKi8sCi0JCQkJNDE3MjUzQTgxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlh
Q29udHJvbEVsZW1lbnRzLmNwcCAqLywKLQkJCQk0MTcyNTNBOTEzNTRCQkJDMDAzNjBGMkEgLyog
TWVkaWFDb250cm9sRWxlbWVudHMuaCAqLywKLQkJCQlERTQ5QjJGRjE2NUYyRkM2MDAxMDMzOEQg
LyogTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcCAqLywKLQkJCQlERTQ5QjMwMDE2NUYyRkM2
MDAxMDMzOEQgLyogTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmggKi8sCi0JCQkJMUYzQzNCRTgx
MzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMuY3BwICovLAotCQkJCTFGM0MzQkU5MTM1
Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggKi8sCisJCQkJNDE3MjUzQTgxMzU0QkJC
QzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuY3BwICov
LAorCQkJCTQxNzI1M0E5MTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50LmggKi8sCiAJCQkJRTRFMjQzODIxREFCOTUzRTAwQzI2RTRCIC8qIG1l
dGVyRWxlbWVudFNoYWRvdy5jc3MgKi8sCiAJCQkJQTcxNUU2NTAxMzRCQkJFQzAwRDhFNzEzIC8q
IFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHAgKi8sCiAJCQkJQTcxNUU2NTExMzRCQkJFQzAwRDhF
NzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5oICovLApAQCAtMzE4MTgsMTIgKzMxODA4LDEw
IEBACiAJCQkJQ0RDQzlCQ0YyMjM4N0U5QTAwRkZCNTFDIC8qIE1lZGlhQ2FwYWJpbGl0aWVzRGVj
b2RpbmdJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRENDOUJEMTIyMzg3RUFBMDBGRkI1MUMg
LyogTWVkaWFDYXBhYmlsaXRpZXNFbmNvZGluZ0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTA3
OEUwOTNBMTdEMTZFMUMwMDQyMEFBMSAvKiBNZWRpYUNvbnN0cmFpbnRzLmggaW4gSGVhZGVycyAq
LywKLQkJCQk0MTcyNTNBQjEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sRWxlbWVudHMu
aCBpbiBIZWFkZXJzICovLAotCQkJCURFQkNDREQ0MTY2NDZFQUYwMEE0NTJFMSAvKiBNZWRpYUNv
bnRyb2xFbGVtZW50VHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjY1Q0M4MTQ1QjFFNzUw
MEM0QzdBQSAvKiBNZWRpYUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjY1Q0NB
MTQ1QjQ0ODgwMEM0QzdBQSAvKiBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTFGM0MzQkVCMTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDREFCNkQyOTE3QzdERTZDMDBDNjBCMzQgLyogTWVkaWFDb250cm9s
c0hvc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNzI1M0FCMTM1NEJCQkMwMDM2MEYyQSAvKiBN
ZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDREYyQjAwNDE4MUYwNTlDMDBGMkI0MjQgLyogTWVkaWFEZXNjcmlwdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTUxNDVCOTAxQjNBMUNFMDAwNjYyQkY3IC8qIE1lZGlhRGV2aWNlSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUVBNzI1RDMxQUNBQkQ0NzAwRUFEMTdCIC8qIE1lZGlhRGV2
aWNlcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcAppbmRleCBkN2Y1YzRjOGYzOTc5MGMxMDZlOGJmZDY1YzRlODU1NzE4
ZDg5MzZkLi4zYTE5ODI3OTBhZWJhZTg5MjIyZDY5ODY3MWMyMGM0MGEwZTc5OGZmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTQ0LDcg
KzQ0LDYgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJveC5oIgogI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1hdGhN
TEVsZW1lbnQuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oIgogI2lu
Y2x1ZGUgIkFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdC5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxp
dHlNZW51TGlzdC5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5oIgpA
QCAtNzUsNiArNzQsNyBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTExhYmVsRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWV0ZXJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgpA
QCAtMTEyLDEwICsxMTIsNiBAQAogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8
d3RmL1NldEZvclNjb3BlLmg+CiAKLSNpZiBFTkFCTEUoVklERU8pCi0jaW5jbHVkZSAiTWVkaWFD
b250cm9sRWxlbWVudHMuaCIKLSNlbmRpZgotCiAjaWYgQ09NUElMRVIoTVNWQykKIC8vIFNlZSBo
dHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzF3ZWE1endlLmFzcHgKICNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQpAQCAtNTI5LDEyICs1MjUsNiBAQCBzdGF0aWMg
UmVmPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNyZWF0ZUZyb21SZW5kZXJlcihSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0OjpjcmVh
dGUocmVuZGVyZXIpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgLy8gbWVkaWEg
Y29udHJvbHMKLSAgICBpZiAobm9kZSAmJiBub2RlLT5pc01lZGlhQ29udHJvbEVsZW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OmNyZWF0ZShyZW5kZXJl
cik7Ci0jZW5kaWYKLQogICAgIGlmIChpczxSZW5kZXJTVkdSb290PigqcmVuZGVyZXIpKQogICAg
ICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVNWR1Jvb3Q6OmNyZWF0ZShyZW5kZXJlcik7CiAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlN
ZWRpYUNvbnRyb2xzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU1lZGlhQ29udHJvbHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTJk
ODQwM2IzNGJiZjdlMThmNDAxYzM4OTMzOWY2YTYxNGRhZGZhLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzM2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShWSURFTykKLQotI2luY2x1ZGUg
IkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmgiCi0KLSNpbmNsdWRlICJBWE9iamVjdENhY2hl
LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJp
bmdzLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwotCi0KLUFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OkFjY2Vzc2liaWxpdHlN
ZWRpYUNvbnRyb2woUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLSAgICA6IEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QocmVuZGVyZXIpCi17Ci19Ci0KLVJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBB
Y2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
LXsKLSAgICBBU1NFUlQocmVuZGVyZXItPm5vZGUoKSk7Ci0KLSAgICBzd2l0Y2ggKG1lZGlhQ29u
dHJvbEVsZW1lbnRUeXBlKHJlbmRlcmVyLT5ub2RlKCkpKSB7Ci0gICAgY2FzZSBNZWRpYVNsaWRl
cjoKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lOjpjcmVhdGUocmVu
ZGVyZXIpOwotCi0gICAgY2FzZSBNZWRpYUN1cnJlbnRUaW1lRGlzcGxheToKLSAgICBjYXNlIE1l
ZGlhVGltZVJlbWFpbmluZ0Rpc3BsYXk6Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5TWVk
aWFUaW1lRGlzcGxheTo6Y3JlYXRlKHJlbmRlcmVyKTsKLQotICAgIGNhc2UgTWVkaWFDb250cm9s
c1BhbmVsOgotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWlu
ZXI6OmNyZWF0ZShyZW5kZXJlcik7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sKHJlbmRlcmVyKSk7Ci0gICAgfQot
fQotCi1NZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpj
b250cm9sVHlwZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcigp
LT5ub2RlKCkpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWVsaW5lQ29udGFpbmVyOyAvLyBUaW1l
bGluZSBjb250YWluZXIgaXMgbm90IGFjY2Vzc2libGUuCi0KLSAgICByZXR1cm4gbWVkaWFDb250
cm9sRWxlbWVudFR5cGUocmVuZGVyZXIoKS0+bm9kZSgpKTsKLX0KLQotY29uc3QgU3RyaW5nJiBB
Y2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpjb250cm9sVHlwZU5hbWUoKSBjb25zdAotewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhRW50ZXJGdWxsc2NyZWVu
QnV0dG9uTmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiRW50ZXJGdWxsc2NyZWVuQnV0dG9u
IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhRXhpdEZ1
bGxzY3JlZW5CdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJFeGl0RnVsbHNjcmVl
bkJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRp
YU11dGVCdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJNdXRlQnV0dG9uIikpOwot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhUGxheUJ1dHRvbk5h
bWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlBsYXlCdXR0b24iKSk7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFTZWVrQmFja0J1dHRvbk5hbWUoTUFLRV9T
VEFUSUNfU1RSSU5HX0lNUEwoIlNlZWtCYWNrQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhU2Vla0ZvcndhcmRCdXR0b25OYW1lKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCJTZWVrRm9yd2FyZEJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVJld2luZEJ1dHRvbk5hbWUoTUFLRV9TVEFUSUNf
U1RSSU5HX0lNUEwoIlJld2luZEJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgU3RyaW5nPiBtZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b25OYW1lKE1BS0VfU1RBVElD
X1NUUklOR19JTVBMKCJSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhVW5NdXRlQnV0dG9uTmFtZShNQUtFX1NUQVRJ
Q19TVFJJTkdfSU1QTCgiVW5NdXRlQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBTdHJpbmc+IG1lZGlhUGF1c2VCdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19J
TVBMKCJQYXVzZUJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3Ry
aW5nPiBtZWRpYVN0YXR1c0Rpc3BsYXlOYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJTdGF0
dXNEaXNwbGF5IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1l
ZGlhQ3VycmVudFRpbWVEaXNwbGF5KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJDdXJyZW50VGlt
ZURpc3BsYXkiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVk
aWFUaW1lUmVtYWluaW5nRGlzcGxheShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVGltZVJlbWFp
bmluZ0Rpc3BsYXkiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4g
bWVkaWFTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBM
KCJTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b24iKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IFN0cmluZz4gbWVkaWFIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b25OYW1lKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCJIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24iKSk7Ci0KLSAgICBzd2l0
Y2ggKGNvbnRyb2xUeXBlKCkpIHsKLSAgICBjYXNlIE1lZGlhRW50ZXJGdWxsc2NyZWVuQnV0dG9u
OgotICAgICAgICByZXR1cm4gbWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b25OYW1lOwotICAgIGNh
c2UgTWVkaWFFeGl0RnVsbHNjcmVlbkJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhRXhpdEZ1
bGxzY3JlZW5CdXR0b25OYW1lOwotICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uOgotICAgICAgICBy
ZXR1cm4gbWVkaWFNdXRlQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhUGxheUJ1dHRvbjoKLSAg
ICAgICAgcmV0dXJuIG1lZGlhUGxheUJ1dHRvbk5hbWU7Ci0gICAgY2FzZSBNZWRpYVNlZWtCYWNr
QnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFTZWVrQmFja0J1dHRvbk5hbWU7Ci0gICAgY2Fz
ZSBNZWRpYVNlZWtGb3J3YXJkQnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFTZWVrRm9yd2Fy
ZEJ1dHRvbk5hbWU7Ci0gICAgY2FzZSBNZWRpYVJld2luZEJ1dHRvbjoKLSAgICAgICAgcmV0dXJu
IG1lZGlhUmV3aW5kQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1
dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvbk5hbWU7Ci0g
ICAgY2FzZSBNZWRpYVVuTXV0ZUJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhVW5NdXRlQnV0
dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhUGF1c2VCdXR0b246Ci0gICAgICAgIHJldHVybiBtZWRp
YVBhdXNlQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhU3RhdHVzRGlzcGxheToKLSAgICAgICAg
cmV0dXJuIG1lZGlhU3RhdHVzRGlzcGxheU5hbWU7Ci0gICAgY2FzZSBNZWRpYUN1cnJlbnRUaW1l
RGlzcGxheToKLSAgICAgICAgcmV0dXJuIG1lZGlhQ3VycmVudFRpbWVEaXNwbGF5OwotICAgIGNh
c2UgTWVkaWFUaW1lUmVtYWluaW5nRGlzcGxheToKLSAgICAgICAgcmV0dXJuIG1lZGlhVGltZVJl
bWFpbmluZ0Rpc3BsYXk7Ci0gICAgY2FzZSBNZWRpYVNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbjoK
LSAgICAgICAgcmV0dXJuIG1lZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uTmFtZTsKLSAgICBj
YXNlIE1lZGlhSGlkZUNsb3NlZENhcHRpb25zQnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFI
aWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b25OYW1lOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eU1lZGlhQ29udHJvbDo6YWNjZXNzaWJpbGl0eVRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlU
ZXh0PiYgdGV4dE9yZGVyKSBjb25zdAotewotICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGFjY2Vz
c2liaWxpdHlEZXNjcmlwdGlvbigpOwotICAgIGlmICghZGVzY3JpcHRpb24uaXNFbXB0eSgpKQot
ICAgICAgICB0ZXh0T3JkZXIuYXBwZW5kKEFjY2Vzc2liaWxpdHlUZXh0KGRlc2NyaXB0aW9uLCBB
Y2Nlc3NpYmlsaXR5VGV4dFNvdXJjZTo6QWx0ZXJuYXRpdmUpKTsKLQotICAgIFN0cmluZyB0aXRs
ZSA9IHRoaXMtPnRpdGxlKCk7Ci0gICAgaWYgKCF0aXRsZS5pc0VtcHR5KCkpCi0gICAgICAgIHRl
eHRPcmRlci5hcHBlbmQoQWNjZXNzaWJpbGl0eVRleHQodGl0bGUsIEFjY2Vzc2liaWxpdHlUZXh0
U291cmNlOjpBbHRlcm5hdGl2ZSkpOwotCi0gICAgU3RyaW5nIGhlbHB0ZXh0ID0gaGVscFRleHQo
KTsKLSAgICBpZiAoIWhlbHB0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgdGV4dE9yZGVyLmFwcGVu
ZChBY2Nlc3NpYmlsaXR5VGV4dChoZWxwdGV4dCwgQWNjZXNzaWJpbGl0eVRleHRTb3VyY2U6Okhl
bHApKTsKLX0KLSAgICAKLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OnRpdGxl
KCkgY29uc3QKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBjb250
cm9sc1BhbmVsKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJDb250cm9sc1BhbmVsIikpOwotCi0g
ICAgaWYgKGNvbnRyb2xUeXBlKCkgPT0gTWVkaWFDb250cm9sc1BhbmVsKQotICAgICAgICByZXR1
cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmluZyhjb250cm9sc1BhbmVsKTsKLQot
ICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0aXRsZSgpOwotfQotCi1TdHJp
bmcgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmluZyhj
b250cm9sVHlwZU5hbWUoKSk7Ci19Ci0KLVN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9s
OjpoZWxwVGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVs
ZW1lbnRIZWxwVGV4dChjb250cm9sVHlwZU5hbWUoKSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0
eU1lZGlhQ29udHJvbDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAotewot
ICAgIGlmICghbV9yZW5kZXJlciB8fCBtX3JlbmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAh
PSBWaXNpYmlsaXR5OjpWaXNpYmxlIHx8IGNvbnRyb2xUeXBlKCkgPT0gTWVkaWFUaW1lbGluZUNv
bnRhaW5lcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gYWNjZXNzaWJpbGl0
eUlzSWdub3JlZEJ5RGVmYXVsdCgpOwotfQotCi1BY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmls
aXR5TWVkaWFDb250cm9sOjpyb2xlVmFsdWUoKSBjb25zdAotewotICAgIHN3aXRjaCAoY29udHJv
bFR5cGUoKSkgewotICAgIGNhc2UgTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b246Ci0gICAgY2Fz
ZSBNZWRpYUV4aXRGdWxsc2NyZWVuQnV0dG9uOgotICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uOgot
ICAgIGNhc2UgTWVkaWFQbGF5QnV0dG9uOgotICAgIGNhc2UgTWVkaWFTZWVrQmFja0J1dHRvbjoK
LSAgICBjYXNlIE1lZGlhU2Vla0ZvcndhcmRCdXR0b246Ci0gICAgY2FzZSBNZWRpYVJld2luZEJ1
dHRvbjoKLSAgICBjYXNlIE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvbjoKLSAgICBjYXNlIE1l
ZGlhVW5NdXRlQnV0dG9uOgotICAgIGNhc2UgTWVkaWFQYXVzZUJ1dHRvbjoKLSAgICBjYXNlIE1l
ZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uOgotICAgIGNhc2UgTWVkaWFIaWRlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b246Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Um9sZTo6QnV0dG9uOwot
Ci0gICAgY2FzZSBNZWRpYVN0YXR1c0Rpc3BsYXk6Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5Um9sZTo6U3RhdGljVGV4dDsKLQotICAgIGNhc2UgTWVkaWFUaW1lbGluZUNvbnRhaW5lcjoK
LSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSb2xlOjpHcm91cDsKLQotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Um9sZTo6
VW5rbm93bjsKLX0KLQotCi0vLwotLy8gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWlu
ZXIKLQotQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXI6OkFjY2Vzc2liaWxpdHlN
ZWRpYUNvbnRyb2xzQ29udGFpbmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi0gICAgOiBBY2Nl
c3NpYmlsaXR5TWVkaWFDb250cm9sKHJlbmRlcmVyKQotewotfQotCi1SZWY8QWNjZXNzaWJpbGl0
eU9iamVjdD4gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXI6OmNyZWF0ZShSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFjY2Vzc2li
aWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyKHJlbmRlcmVyKSk7Ci19Ci0KLVN0cmluZyBBY2Nl
c3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmlu
ZyhlbGVtZW50VHlwZU5hbWUoKSk7Ci19Ci0KLVN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250
cm9sc0NvbnRhaW5lcjo6aGVscFRleHQoKSBjb25zdAotewotICAgIHJldHVybiBsb2NhbGl6ZWRN
ZWRpYUNvbnRyb2xFbGVtZW50SGVscFRleHQoZWxlbWVudFR5cGVOYW1lKCkpOwotfQotCi1ib29s
IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpjb250cm9sbGluZ1ZpZGVvRWxl
bWVudCgpIGNvbnN0Ci17Ci0gICAgYXV0byBlbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KCpt
X3JlbmRlcmVyKTsKLSAgICByZXR1cm4gIWVsZW1lbnQgfHwgZWxlbWVudC0+aXNWaWRlbygpOwot
fQotCi1jb25zdCBTdHJpbmcmIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpl
bGVtZW50VHlwZU5hbWUoKSBjb25zdAotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25z
dCBTdHJpbmc+IHZpZGVvRWxlbWVudChNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVmlkZW9FbGVt
ZW50IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGF1ZGlvRWxl
bWVudChNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQXVkaW9FbGVtZW50IikpOwotCi0gICAgaWYg
KGNvbnRyb2xsaW5nVmlkZW9FbGVtZW50KCkpCi0gICAgICAgIHJldHVybiB2aWRlb0VsZW1lbnQ7
Ci0gICAgcmV0dXJuIGF1ZGlvRWxlbWVudDsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5TWVkaWFD
b250cm9sc0NvbnRhaW5lcjo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAot
ewotICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZhdWx0KCk7Ci19Ci0KLS8v
Ci0vLyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZQotCi1BY2Nlc3NpYmlsaXR5TWVkaWFUaW1l
bGluZTo6QWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
LSAgICA6IEFjY2Vzc2liaWxpdHlTbGlkZXIocmVuZGVyZXIpCi17Ci19Ci0KLVJlZjxBY2Nlc3Np
YmlsaXR5T2JqZWN0PiBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6Y3JlYXRlKFJlbmRlck9i
amVjdCogcmVuZGVyZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQWNjZXNzaWJpbGl0
eU1lZGlhVGltZWxpbmUocmVuZGVyZXIpKTsKLX0KLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRp
YVRpbWVsaW5lOjp2YWx1ZURlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBOb2RlKiBub2RlID0g
bV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUp
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBmbG9hdCB0aW1lID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLnZhbHVlKCkudG9GbG9hdCgpOwotICAgIHJldHVybiBs
b2NhbGl6ZWRNZWRpYVRpbWVEZXNjcmlwdGlvbih0aW1lKTsKLX0KLQotU3RyaW5nIEFjY2Vzc2li
aWxpdHlNZWRpYVRpbWVsaW5lOjpoZWxwVGV4dCgpIGNvbnN0Ci17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IFN0cmluZz4gc2xpZGVyKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJT
bGlkZXIiKSk7Ci0gICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRIZWxwVGV4
dChzbGlkZXIpOwotfQotCi0KLS8vCi0vLyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheQot
Ci1BY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6QWNjZXNzaWJpbGl0eU1lZGlhVGltZURp
c3BsYXkoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLSAgICA6IEFjY2Vzc2liaWxpdHlNZWRpYUNv
bnRyb2wocmVuZGVyZXIpCi17Ci19Ci0KLVJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBBY2Nlc3Np
YmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3BsYXko
cmVuZGVyZXIpKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6Y29t
cHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAotewotICAgIGlmICghbV9yZW5kZXJl
ciB8fCBtX3JlbmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNp
YmxlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghbV9yZW5kZXJlci0+c3R5bGUo
KS53aWR0aCgpLnZhbHVlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIHJldHVy
biBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZhdWx0KCk7Ci19Ci0KLVN0cmluZyBBY2Nlc3Np
YmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3QK
LXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBjdXJyZW50VGltZURp
c3BsYXkoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkN1cnJlbnRUaW1lRGlzcGxheSIpKTsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0aW1lUmVtYWluaW5nRGlzcGxh
eShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVGltZVJlbWFpbmluZ0Rpc3BsYXkiKSk7Ci0KLSAg
ICBpZiAoY29udHJvbFR5cGUoKSA9PSBNZWRpYUN1cnJlbnRUaW1lRGlzcGxheSkKLSAgICAgICAg
cmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRTdHJpbmcoY3VycmVudFRpbWVEaXNw
bGF5KTsKLQotICAgIHJldHVybiBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50U3RyaW5nKHRp
bWVSZW1haW5pbmdEaXNwbGF5KTsKLX0KLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVE
aXNwbGF5OjpzdHJpbmdWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFt
X3JlbmRlcmVyLT5ub2RlKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGZsb2F0
IHRpbWUgPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQqPihtX3Jl
bmRlcmVyLT5ub2RlKCkpLT5jdXJyZW50VmFsdWUoKTsKLSAgICByZXR1cm4gbG9jYWxpemVkTWVk
aWFUaW1lRGVzY3JpcHRpb24oc3RkOjphYnModGltZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYWQ2ZDk2ZTM2Zjg1YjM3OWU1Y2Y5NWNlNGI0NWNi
M2Q2ZjdjZDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoVklERU8p
Ci0KLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5U2xpZGVyLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250
cm9sRWxlbWVudHMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBY2Nlc3NpYmls
aXR5TWVkaWFDb250cm9sIDogcHVibGljIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QgewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlKFJlbmRlck9i
amVjdCopOwotICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2woKSA9IGRlZmF1
bHQ7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlVmFsdWUoKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIFN0cmluZyB0aXRsZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBhY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgaGVscFRleHQo
KSBjb25zdCBvdmVycmlkZTsKLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IEFjY2Vzc2liaWxp
dHlNZWRpYUNvbnRyb2woUmVuZGVyT2JqZWN0Kik7Ci0gICAgTWVkaWFDb250cm9sRWxlbWVudFR5
cGUgY29udHJvbFR5cGUoKSBjb25zdDsKLSAgICBjb25zdCBTdHJpbmcmIGNvbnRyb2xUeXBlTmFt
ZSgpIGNvbnN0OwotICAgIGJvb2wgY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25z
dCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGFjY2Vzc2liaWxpdHlUZXh0KFZlY3Rv
cjxBY2Nlc3NpYmlsaXR5VGV4dD4mKSBjb25zdCBvdmVycmlkZTsKLX07Ci0KLQotY2xhc3MgQWNj
ZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUgZmluYWwgOiBwdWJsaWMgQWNjZXNzaWJpbGl0eVNsaWRl
ciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjcmVhdGUo
UmVuZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVhbCB+QWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUo
KSA9IGRlZmF1bHQ7Ci0KLSAgICBTdHJpbmcgaGVscFRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBTdHJpbmcgdmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgot
ICAgIGV4cGxpY2l0IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lKFJlbmRlck9iamVjdCopOwot
Ci0gICAgYm9vbCBpc01lZGlhVGltZWxpbmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9Ci19OwotCi0KLWNsYXNzIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyIGZp
bmFsIDogcHVibGljIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wgewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlKFJlbmRlck9iamVjdCopOwotICAg
IHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyKCkgPSBkZWZhdWx0
OwotCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gQWNjZXNzaWJpbGl0eVJvbGU6OlRvb2xiYXI7IH0KLQotICAgIFN0cmluZyBoZWxwVGV4
dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24o
KSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBBY2Nlc3NpYmlsaXR5
TWVkaWFDb250cm9sc0NvbnRhaW5lcihSZW5kZXJPYmplY3QqKTsKLSAgICBib29sIGNvbnRyb2xs
aW5nVmlkZW9FbGVtZW50KCkgY29uc3Q7Ci0gICAgY29uc3QgU3RyaW5nJiBlbGVtZW50VHlwZU5h
bWUoKSBjb25zdDsKLSAgICBib29sIGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29u
c3Qgb3ZlcnJpZGU7Ci19OwotCi0KLWNsYXNzIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5
IGZpbmFsIDogcHVibGljIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wgewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlKFJlbmRlck9iamVjdCopOwot
ICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5KCkgPSBkZWZhdWx0Owot
Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uVGltZXI7IH0KLQotICAgIFN0cmluZyBz
dHJpbmdWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVz
Y3JpcHRpb24oKSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBBY2Nl
c3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheShSZW5kZXJPYmplY3QqKTsKLSAgICBib29sIGlzTWVk
aWFDb250cm9sTGFiZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgYm9v
bCBjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IG92ZXJyaWRlOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgKaW5kZXggNmQ5NzZlOWRmYmRkZDg4YjU3Yzc5YjFlMzE4YjIwYWY5YmYwZjNmMi4uZDIwOGM3
MTc5NjkxNzJhYzQxMTM3ODAyMmQ0OGNhODdlYWMwZWYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC0xOTgs
OCArMTk4LDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNBZnRlclBzZXVkb0VsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBwc2V1ZG9JZCgpID09IFBzZXVkb0lkOjpBZnRlcjsgfQogICAgIFBzZXVkb0lk
IHBzZXVkb0lkKCkgY29uc3QgeyByZXR1cm4gKGlzRWxlbWVudE5vZGUoKSAmJiBoYXNDdXN0b21T
dHlsZVJlc29sdmVDYWxsYmFja3MoKSkgPyBjdXN0b21Qc2V1ZG9JZCgpIDogUHNldWRvSWQ6Ok5v
bmU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhQ29udHJvbHMoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICB2aXJ0dWFs
IGJvb2wgaXNXZWJWVFRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggNzE1MTdhNzc5YWQ2
ZjVkNzU5MTcwOWU4YmYwODQ2MmE2Yjc3NDRlMi4uMDI5YjhhNzE1MzI5OWFmMmViMGQ0NzU3Yjhl
MzdmNDQ4NWNkMjdmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2hy
b21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ29tbW9uVk0uaCIK
ICNpbmNsdWRlICJDb250ZW50UnVsZUxpc3RSZXN1bHRzLmgiCkBAIC02MCwxMCArNjEsMTEgQEAK
ICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVy
cmVkLmgiCiAjaW5jbHVkZSAiSlNIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNNZWRp
YUNvbnRyb2xzSG9zdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiTWVk
aWFDb250cm9scy5oIgorI2luY2x1ZGUgIk1lZGlhQ29udHJvbHNIb3N0LmgiCiAjaW5jbHVkZSAi
TWVkaWFEb2N1bWVudC5oIgogI2luY2x1ZGUgIk1lZGlhRXJyb3IuaCIKICNpbmNsdWRlICJNZWRp
YUZyYWdtZW50VVJJUGFyc2VyLmgiCkBAIC05Nyw2ICs5OSw3IEBACiAjaW5jbHVkZSAiVXNlckNv
bnRlbnRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKICNp
bmNsdWRlICJWaWRlb1BsYXliYWNrUXVhbGl0eS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1NjcmlwdE9iamVjdC5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4QXJyYXkuaD4K
ICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgpAQCAtMTU5LDEy
ICsxNjIsNiBAQAogI2luY2x1ZGUgIk1lZGlhS2V5cy5oIgogI2VuZGlmCiAKLSNpZiBFTkFCTEUo
TUVESUFfQ09OVFJPTFNfU0NSSVBUKQotI2luY2x1ZGUgIkpTTWVkaWFDb250cm9sc0hvc3QuaCIK
LSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzSG9zdC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1NjcmlwdE9iamVjdC5oPgotI2VuZGlmCi0KICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjZW5kaWYKQEAgLTQ0NywxMCArNDQ0LDggQEAg
SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCYgZG9jdW0KICAgICAsIG1faGFzRXZlck5vdGlmaWVkQWJvdXRQbGF5
aW5nKGZhbHNlKQogICAgICwgbV9oYXNFdmVySGFkQXVkaW8oZmFsc2UpCiAgICAgLCBtX2hhc0V2
ZXJIYWRWaWRlbyhmYWxzZSkKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAg
ICwgbV9tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IoZmFsc2UpCiAgICAgLCBt
X2hhdmVTZXRVcENhcHRpb25Db250YWluZXIoZmFsc2UpCi0jZW5kaWYKICAgICAsIG1faXNTY3J1
YmJpbmdSZW1vdGVseShmYWxzZSkKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgLCBtX3Ry
YWNrc0FyZVJlYWR5KHRydWUpCkBAIC02MDAsMTAgKzU5NSw4IEBAIEhUTUxNZWRpYUVsZW1lbnQ6
On5IVE1MTWVkaWFFbGVtZW50KCkKICAgICB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJQV9D
T05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKG1faXNvbGF0ZWRXb3JsZCkKICAgICAgICAgbV9pc29s
YXRlZFdvcmxkLT5jbGVhcldyYXBwZXJzKCk7Ci0jZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9T
RVNTSU9OKQogICAgIGlmIChtX3Nlc3Npb24pIHsKQEAgLTgyMiwxOSArODE1LDcgQEAgUmVuZGVy
UHRyPFJlbmRlckVsZW1lbnQ+IEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJl
cihSZW5kZXJTdHlsZSYmIHMKIAogYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpjaGlsZFNob3VsZENy
ZWF0ZVJlbmRlcmVyKGNvbnN0IE5vZGUmIGNoaWxkKSBjb25zdAogewotI2lmIEVOQUJMRShNRURJ
QV9DT05UUk9MU19TQ1JJUFQpCiAgICAgcmV0dXJuIGhhc1NoYWRvd1Jvb3RQYXJlbnQoY2hpbGQp
ICYmIEhUTUxFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNoaWxkKTsKLSNlbHNl
Ci0gICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAvLyA8bWVkaWE+IGRvZXNuJ3QgYWxsb3cgaXRzIGNvbnRlbnQsIGluY2x1ZGluZyBzaGFkb3cg
c3VidHJlZSwgdG8KLSAgICAvLyBiZSByZW5kZXJlZC4gU28gdGhpcyBzaG91bGQgcmV0dXJuIGZh
bHNlIGZvciBtb3N0IG9mIHRoZSBjaGlsZHJlbi4KLSAgICAvLyBPbmUgZXhjZXB0aW9uIGlzIGEg
c2hhZG93IHRyZWUgYnVpbHQgZm9yIHJlbmRlcmluZyBjb250cm9scyB3aGljaCBzaG91bGQgYmUg
dmlzaWJsZS4KLSAgICAvLyBTbyB3ZSBsZXQgdGhlbSBnbyBoZXJlIGJ5IGNvbXBhcmluZyBpdHMg
c3VidHJlZSByb290IHdpdGggb25lIG9mIHRoZSBjb250cm9scy4KLSAgICByZXR1cm4gJm1lZGlh
Q29udHJvbHMoKS0+dHJlZVNjb3BlKCkgPT0gJmNoaWxkLnRyZWVTY29wZSgpCi0gICAgICAgICYm
IGhhc1NoYWRvd1Jvb3RQYXJlbnQoY2hpbGQpCi0gICAgICAgICYmIEhUTUxFbGVtZW50OjpjaGls
ZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNoaWxkKTsKLSNlbmRpZgogfQogCiBOb2RlOjpJbnNlcnRl
ZEludG9BbmNlc3RvclJlc3VsdCBIVE1MTWVkaWFFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3Rv
cihJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5z
ZXJ0ZWRUcmVlKQpAQCAtODcyLDggKzg1Myw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGF1
c2VBZnRlckRldGFjaGVkVGFzaygpCiAgICAgaWYgKG1faW5BY3RpdmVEb2N1bWVudCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFD
b250cm9scygpLT5oaWRlKCk7CiAgICAgaWYgKG1fbmV0d29ya1N0YXRlID4gTkVUV09SS19FTVBU
WSkKICAgICAgICAgcGF1c2UoKTsKICAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlICE9IFZp
ZGVvRnVsbHNjcmVlbk1vZGVOb25lKQpAQCAtOTIxLDEwICs5MDAsOCBAQCBpbmxpbmUgdm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVSZW5kZXJlcigpCiAgICAgaWYgKGF1dG8qIHJlbmRlcmVy
ID0gdGhpcy0+cmVuZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUZyb21FbGVtZW50
KCk7CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChtX21lZGlh
Q29udHJvbHNIb3N0KQogICAgICAgICBtX21lZGlhQ29udHJvbHNIb3N0LT51cGRhdGVDYXB0aW9u
RGlzcGxheVNpemVzKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRB
dHRhY2hSZW5kZXJlcnMoKQpAQCAtMTMwNCw5ICsxMjgxLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpzZWxlY3RNZWRpYVJlc291cmNlKCkKIAogICAgICAgICAvLyA1LiBJZiB0aGUgbWVkaWEg
ZWxlbWVudOKAmXMgYmxvY2tlZC1vbi1wYXJzZXIgZmxhZyBpcyBmYWxzZSwgdGhlbiBwb3B1bGF0
ZSB0aGUgbGlzdCBvZiBwZW5kaW5nIHRleHQgdHJhY2tzLgogI2lmIEVOQUJMRShWSURFT19UUkFD
SykKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29u
dHJvbHMoKS0+Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgpOwotCiAgICAgICAgIC8v
IEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja3NBcmVSZWFkeSB3aWxsIG5lZWQgIi4uLiB0aGUg
dGV4dCB0cmFja3Mgd2hvc2UgbW9kZSB3YXMgbm90IGluIHRoZQogICAgICAgICAvLyBkaXNhYmxl
ZCBzdGF0ZSB3aGVuIHRoZSBlbGVtZW50J3MgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29yaXRobSBs
YXN0IHN0YXJ0ZWQiLgogICAgICAgICAvLyBGSVhNRTogVXBkYXRlIHRoaXMgdG8gbWF0Y2ggInBv
cHVsYXRlIHRoZSBsaXN0IG9mIHBlbmRpbmcgdGV4dCB0cmFja3MiIHN0ZXAuCkBAIC0yMjM1LDEw
ICsyMjA5LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUxvYWRpbmdGYWlsZWQoTWVk
aWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKICAgICAgICAgbm9uZVN1cHBvcnRlZCgpOwog
CiAgICAgdXBkYXRlRGlzcGxheVN0YXRlKCk7Ci0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkg
ewotICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnJlc2V0KCk7Ci0gICAgICAgIG1lZGlhQ29udHJv
bHMoKS0+cmVwb3J0ZWRFcnJvcigpOwotICAgIH0KIAogICAgIEVSUk9SX0xPRyhMT0dJREVOVElG
SUVSLCAiZXJyb3IgPSAiLCBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSk7CiAKQEAgLTIyODMsMTYg
KzIyNTMsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXROZXR3b3JrU3RhdGUoTWVkaWFQ
bGF5ZXI6Ok5ldHdvcmtTdGF0ZSBzdGF0ZSkKICAgICAgICAgICAgIGNoYW5nZU5ldHdvcmtTdGF0
ZUZyb21Mb2FkaW5nVG9JZGxlKCk7CiAgICAgICAgIG1fY29tcGxldGVseUxvYWRlZCA9IHRydWU7
CiAgICAgfQotCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250
cm9scygpLT51cGRhdGVTdGF0dXNEaXNwbGF5KCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6Y2hhbmdlTmV0d29ya1N0YXRlRnJvbUxvYWRpbmdUb0lkbGUoKQogewogICAgIG1fcHJvZ3Jl
c3NFdmVudFRpbWVyLnN0b3AoKTsKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpICYmIG1fcGxh
eWVyLT5kaWRMb2FkaW5nUHJvZ3Jlc3MoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5idWZm
ZXJpbmdQcm9ncmVzc2VkKCk7CiAKICAgICAvLyBTY2hlZHVsZSBvbmUgbGFzdCBwcm9ncmVzcyBl
dmVudCBzbyB3ZSBndWFyYW50ZWUgdGhhdCBhdCBsZWFzdCBvbmUgaXMgZmlyZWQKICAgICAvLyBm
b3IgZmlsZXMgdGhhdCBsb2FkIHZlcnkgcXVpY2tseS4KQEAgLTI0MzcsOCArMjQwMiw2IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSBzdGF0ZSkKICNlbmRpZgogICAgICAgICBtX2luaXRpYWxseU11dGVkID0gbV92b2x1bWUgPCAw
LjA1IHx8IG11dGVkKCk7CiAKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAg
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+bG9hZGVkTWV0YWRhdGEoKTsKICAgICAgICAgdXBkYXRl
UmVuZGVyZXIoKTsKIAogICAgICAgICBpZiAoaXM8TWVkaWFEb2N1bWVudD4oZG9jdW1lbnQoKSkp
CkBAIC0yNTA1LDEzICsyNDY4LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRSZWFkeVN0
YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0YXRlKQogICAgICAgICBzZXRBdXRvcGxheUV2
ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZTo6UHJldmVudGVkQXV0
b3BsYXkpOwogICAgIH0KIAotICAgIGlmIChzaG91bGRVcGRhdGVEaXNwbGF5U3RhdGUpIHsKKyAg
ICBpZiAoc2hvdWxkVXBkYXRlRGlzcGxheVN0YXRlKQogICAgICAgICB1cGRhdGVEaXNwbGF5U3Rh
dGUoKTsKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkgewotICAgICAgICAgICAgbWVk
aWFDb250cm9scygpLT5yZWZyZXNoQ2xvc2VkQ2FwdGlvbnNCdXR0b25WaXNpYmlsaXR5KCk7Ci0g
ICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnVwZGF0ZVN0YXR1c0Rpc3BsYXkoKTsKLSAgICAg
ICAgfQotICAgIH0KIAogICAgIHVwZGF0ZVBsYXlTdGF0ZSgpOwogICAgIHVwZGF0ZU1lZGlhQ29u
dHJvbGxlcigpOwpAQCAtMjg1NSw4ICsyODEzLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpw
cm9ncmVzc0V2ZW50VGltZXJGaXJlZCgpCiAgICAgICAgIG1fcHJldmlvdXNQcm9ncmVzc1RpbWUg
PSB0aW1lOwogICAgICAgICBtX3NlbnRTdGFsbGVkRXZlbnQgPSBmYWxzZTsKICAgICAgICAgdXBk
YXRlUmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAg
ICAgIG1lZGlhQ29udHJvbHMoKS0+YnVmZmVyaW5nUHJvZ3Jlc3NlZCgpOwogICAgIH0gZWxzZSBp
ZiAodGltZWRlbHRhID4gM19zICYmICFtX3NlbnRTdGFsbGVkRXZlbnQpIHsKICAgICAgICAgc2No
ZWR1bGVFdmVudChldmVudE5hbWVzKCkuc3RhbGxlZEV2ZW50KTsKICAgICAgICAgbV9zZW50U3Rh
bGxlZEV2ZW50ID0gdHJ1ZTsKQEAgLTM3NDAsOCArMzY5Niw2IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKICAgICAgICAgaWYgKCFwcm9jZXNzaW5nTWVkaWFQ
bGF5ZXJDYWxsYmFjaygpKSB7CiAgICAgICAgICAgICBpZiAobV9wbGF5ZXIpIHsKICAgICAgICAg
ICAgICAgICBtX3BsYXllci0+c2V0TXV0ZWQoZWZmZWN0aXZlTXV0ZWQoKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgICAgICAgICAgbWVkaWFD
b250cm9scygpLT5jaGFuZ2VkTXV0ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAg
LTM5MDgsOSArMzg2Miw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxheWJhY2tQcm9ncmVz
c1RpbWVyRmlyZWQoKQogICAgIGlmICghcmVxdWVzdGVkUGxheWJhY2tSYXRlKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghbV9wYXVzZWQgJiYgaGFzTWVkaWFDb250cm9scygpKQotICAg
ICAgICBtZWRpYUNvbnRyb2xzKCktPnBsYXliYWNrUHJvZ3Jlc3NlZCgpOwotCiAjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQogICAgIHVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoY3VycmVudE1lZGlh
VGltZSgpKTsKICNlbmRpZgpAQCAtNDAzNiwxMiArMzk4Nyw2IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6bWVkaWFQbGF5ZXJEaWRSZW1vdmVWaWRlb1RyYWNrKFZpZGVvVHJhY2tQcml2YXRlJiB0
cmFjaykKICAgICB0cmFjay53aWxsQmVSZW1vdmVkKCk7CiB9CiAKLXZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6Y2xvc2VDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpCi17Ci0gICAgaWYgKGhhc01lZGlhQ29u
dHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5jbG9zZWRDYXB0aW9uVHJhY2tzQ2hh
bmdlZCgpOwotfQotCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZEF1ZGlvVHJhY2soUmVmPEF1
ZGlvVHJhY2s+JiYgdHJhY2spCiB7CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECkBAIC00MDY1
LDggKzQwMTAsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhSZWY8VGV4
dFRyYWNrPiYmIHRyYWNrKQogICAgIH0KIAogICAgIGVuc3VyZVRleHRUcmFja3MoKS5hcHBlbmQo
V1RGTW92ZSh0cmFjaykpOwotCi0gICAgY2xvc2VDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpOwogfQog
CiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFZpZGVvVHJhY2soUmVmPFZpZGVvVHJhY2s+JiYg
dHJhY2spCkBAIC00MDkxLDggKzQwMzQsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92
ZVRleHRUcmFjayhSZWY8VGV4dFRyYWNrPiYmIHRyYWNrLCBib29sIHNjaGVkdWxlRXZlbgogICAg
IHRyYWNrLT5jbGVhckNsaWVudCgpOwogICAgIGlmIChtX3RleHRUcmFja3MpCiAgICAgICAgIG1f
dGV4dFRyYWNrcy0+cmVtb3ZlKHRyYWNrLCBzY2hlZHVsZUV2ZW50KTsKLQotICAgIGNsb3NlQ2Fw
dGlvblRyYWNrc0NoYW5nZWQoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZW1vdmVW
aWRlb1RyYWNrKFJlZjxWaWRlb1RyYWNrPiYmIHRyYWNrKQpAQCAtNDE5Myw5ICs0MTM0LDYgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRUZXh0VHJhY2soSFRNTFRyYWNrRWxlbWVudCYg
dHJhY2tFbGVtZW50KQogICAgIC8vIGluIHRoZSBtYXJrdXAgaGF2ZSBiZWVuIGFkZGVkLgogICAg
IGlmICghbV9wYXJzaW5nSW5Qcm9ncmVzcykKICAgICAgICAgc2NoZWR1bGVDb25maWd1cmVUZXh0
VHJhY2tzKCk7Ci0KLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICBtZWRpYUNv
bnRyb2xzKCktPmNsb3NlZENhcHRpb25UcmFja3NDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6ZGlkUmVtb3ZlVGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQmIHRyYWNrRWxl
bWVudCkKQEAgLTQzNTksNyArNDI5Nyw5IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udHJvbGxl
ckpTVmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwKIAogdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpCiB7Ci0g
ICAgQVNTRVJUKCFtX2NyZWF0aW5nQ29udHJvbHMpOworICAgIGlmIChtX2NyZWF0aW5nQ29udHJv
bHMpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fY3JlYXRpbmdDb250cm9scyA9IHRydWU7CiAg
ICAgZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwogICAgIG1fY3JlYXRpbmdDb250cm9scyA9
IGZhbHNlOwpAQCAtNDM4Nyw3ICs0MzI3LDYgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpzZXR1
cEFuZENhbGxKUyhjb25zdCBKU1NldHVwRnVuY3Rpb24mIHRhc2spCiAKIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6dXBkYXRlQ2FwdGlvbkNvbnRhaW5lcigpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NP
TlRST0xTX1NDUklQVCkKICAgICBpZiAobV9oYXZlU2V0VXBDYXB0aW9uQ29udGFpbmVyKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTQ0MzIsMTMgKzQzNzEsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojp1cGRhdGVDYXB0aW9uQ29udGFpbmVyKCkKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9KTsKLQotI2VuZGlmCiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bGF5b3V0U2l6ZUNo
YW5nZWQoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKGF1
dG8gZnJhbWVWaWV3ID0gbWFrZVJlZlB0cihkb2N1bWVudCgpLnZpZXcoKSkpIHsKICAgICAgICAg
YXV0byB0YXNrID0gW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewogICAg
ICAgICAgICAgaWYgKGF1dG8gcm9vdCA9IHVzZXJBZ2VudFNoYWRvd1Jvb3QoKSkKQEAgLTQ0NDYs
NyArNDM4Miw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bGF5b3V0U2l6ZUNoYW5nZWQoKQog
ICAgICAgICB9OwogICAgICAgICBmcmFtZVZpZXctPnF1ZXVlUG9zdExheW91dENhbGxiYWNrKFdU
Rk1vdmUodGFzaykpOwogICAgIH0KLSNlbmRpZgogCiAgICAgaWYgKCFtX3JlY2VpdmVkTGF5b3V0
U2l6ZUNoYW5nZWQpIHsKICAgICAgICAgbV9yZWNlaXZlZExheW91dFNpemVDaGFuZ2VkID0gdHJ1
ZTsKQEAgLTQ1ODYsOCArNDUyMSw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJl
VGV4dFRyYWNrcygpCiAKICAgICB1cGRhdGVDYXB0aW9uQ29udGFpbmVyKCk7CiAgICAgY29uZmln
dXJlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAg
ICAgIG1lZGlhQ29udHJvbHMoKS0+Y2xvc2VkQ2FwdGlvblRyYWNrc0NoYW5nZWQoKTsKIH0KICNl
bmRpZgogCkBAIC01MTU0LDggKzUwODcsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
UGxheWVyQ2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCkKICAgICAgICAgbWVkaWFQbGF5ZXJSZW5kZXJp
bmdNb2RlQ2hhbmdlZCgpOwogICAgIH0KIAotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0g
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVzZXQoKTsKICAgICB1cGRhdGVSZW5kZXJlcigpOwog
CiAgICAgaWYgKCFwYXVzZWQoKSAmJiAhbV9tZWRpYVNlc3Npb24tPnBsYXliYWNrUGVybWl0dGVk
KCkpIHsKQEAgLTUzNTAsOSArNTI4MSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRl
Vm9sdW1lKCkKICAgICBkb2N1bWVudCgpLnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7CiAjZW5kaWYK
IAotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+
Y2hhbmdlZFZvbHVtZSgpOwotI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkK
IH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzY2hlZHVsZVVwZGF0ZVBsYXlTdGF0ZSgpCkBA
IC01MzgwLDggKzUzMDksNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0
ZSgpCiAgICAgICAgICAgICBtX3BsYXllci0+cGF1c2UoKTsKICAgICAgICAgcmVmcmVzaENhY2hl
ZFRpbWUoKTsKICAgICAgICAgbV9wbGF5YmFja1Byb2dyZXNzVGltZXIuc3RvcCgpOwotICAgICAg
ICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5w
bGF5YmFja1N0b3BwZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTQyNSw5ICs1
MzUyLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUoKQogICAgICAg
ICAgICAgbV9wbGF5ZXItPnBsYXkoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChoYXNNZWRp
YUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnBsYXliYWNrU3RhcnRl
ZCgpOwotCiAgICAgICAgIHN0YXJ0UGxheWJhY2tQcm9ncmVzc1RpbWVyKCk7CiAgICAgICAgIHNl
dFBsYXlpbmcodHJ1ZSk7CiAgICAgfSBlbHNlIHsKQEAgLTU0NDUsOSArNTM2OSw2IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUGxheVN0YXRlKCkKIAogICAgICAgICBpZiAoY291bGRQ
bGF5SWZFbm91Z2hEYXRhKCkpCiAgICAgICAgICAgICBwcmVwYXJlVG9QbGF5KCk7Ci0KLSAgICAg
ICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+
cGxheWJhY2tTdG9wcGVkKCk7CiAgICAgfQogCiAgICAgdXBkYXRlTWVkaWFDb250cm9sbGVyKCk7
CkBAIC02MDczLDggKzU5OTQsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNj
cmVlbihWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCiAKICAgICAgICAgZnVsbHNjcmVlbk1vZGVD
aGFuZ2VkKG1vZGUpOwogICAgICAgICBjb25maWd1cmVNZWRpYUNvbnRyb2xzKCk7Ci0gICAgICAg
IGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmVu
dGVyZWRGdWxsc2NyZWVuKCk7CiAgICAgICAgIGlmIChpczxIVE1MVmlkZW9FbGVtZW50PigqdGhp
cykpIHsKICAgICAgICAgICAgIEhUTUxWaWRlb0VsZW1lbnQmIGFzVmlkZW8gPSBkb3duY2FzdDxI
VE1MVmlkZW9FbGVtZW50PigqdGhpcyk7CiAgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS5wYWdl
KCktPmNocm9tZSgpLmNsaWVudCgpLnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKG1fdmlkZW9GdWxs
c2NyZWVuTW9kZSkpIHsKQEAgLTYxMTAsMTIgKzYwMjksOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OmV4aXRGdWxsc2NyZWVuKCkKICAgICBBU1NFUlQobV92aWRlb0Z1bGxzY3JlZW5Nb2RlICE9
IFZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKICAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlIG9sZFZp
ZGVvRnVsbHNjcmVlbk1vZGUgPSBtX3ZpZGVvRnVsbHNjcmVlbk1vZGU7CiAgICAgZnVsbHNjcmVl
bk1vZGVDaGFuZ2VkKFZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSNpZiBFTkFCTEUoTUVESUFf
Q09OVFJPTFNfU0NSSVBUKQogICAgIFJlZjxIVE1MTWVkaWFFbGVtZW50PiBwcm90ZWN0ZWRUaGlz
KCp0aGlzKTsgLy8gdXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJlc2VudGF0aW9uTW9kZUNoYW5n
ZSBjYWxscyBtZXRob2RzIHRoYXQgY2FuIHRyaWdnZXIgYXJiaXRyYXJ5IERPTSBtdXRhdGlvbnMu
CiAgICAgdXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJlc2VudGF0aW9uTW9kZUNoYW5nZSgpOwot
I2VuZGlmCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9s
cygpLT5leGl0ZWRGdWxsc2NyZWVuKCk7CiAKICAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpIHx8
ICFpczxIVE1MVmlkZW9FbGVtZW50PigqdGhpcykpCiAgICAgICAgIHJldHVybjsKQEAgLTYxOTgs
MTYgKzYxMTMsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRCZWNvbWVGdWxsc2NyZWVu
RWxlbWVudCgpCiB7CiAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIiwgZnVsbHNjcmVlbiBt
b2RlID0gIiwgZnVsbHNjcmVlbk1vZGUoKSk7CiAgICAgbV93YWl0aW5nVG9FbnRlckZ1bGxzY3Jl
ZW4gPSBmYWxzZTsKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICBtZWRpYUNv
bnRyb2xzKCktPmVudGVyZWRGdWxsc2NyZWVuKCk7CiAgICAgc2NoZWR1bGVVcGRhdGVQbGF5U3Rh
dGUoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp3aWxsU3RvcEJlaW5nRnVsbHNjcmVl
bkVsZW1lbnQoKQogewotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlh
Q29udHJvbHMoKS0+ZXhpdGVkRnVsbHNjcmVlbigpOwotCiAgICAgaWYgKGZ1bGxzY3JlZW5Nb2Rl
KCkgPT0gVmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKQogICAgICAgICBmdWxsc2NyZWVuTW9k
ZUNoYW5nZWQoVmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwogfQpAQCAtNjM0OCwxOSArNjI1OCwx
MSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKFRl
eHRUcmFjayogdHJhY2spCiAgICAgICAgIC8vIFRoZSBkaXNwbGF5IHRyZWVzIGV4aXN0IGFzIGxv
bmcgYXMgdGhlIHRyYWNrIGlzIGFjdGl2ZSwgaW4gdGhpcyBjYXNlLAogICAgICAgICAvLyBhbmQg
aWYgdGhlIHNhbWUgdHJhY2sgaXMgbG9hZGVkIGFnYWluIChmb3IgZXhhbXBsZSBpZiB0aGUgc3Jj
IGF0dHJpYnV0ZSB3YXMgY2hhbmdlZCksCiAgICAgICAgIC8vIGN1ZXMgY2FuIGJlIGFjY3VtdWxh
dGVkIHdpdGggdGhlIG9sZCBvbmVzLCB0aGF0J3Mgd2h5IHRoZXkgbmVlZHMgdG8gYmUgZmx1c2hl
ZAotICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICAgICAgbWVkaWFDb250
cm9scygpLT5jbGVhclRleHREaXNwbGF5Q29udGFpbmVyKCk7CiAgICAgICAgIHVwZGF0ZVRleHRU
cmFja0Rpc3BsYXkoKTsKICAgICB9CiAgICAgaWYgKG1fcGxheWVyICYmIG1fdGV4dFRyYWNrc1do
ZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuLmNvbnRhaW5zKHRyYWNrKSkgewogICAgICAgICBpZiAo
dHJhY2stPnJlYWRpbmVzc1N0YXRlKCkgIT0gVGV4dFRyYWNrOjpMb2FkaW5nKQogICAgICAgICAg
ICAgc2V0UmVhZHlTdGF0ZShtX3BsYXllci0+cmVhZHlTdGF0ZSgpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBUaGUgdHJhY2sgcmVhZGluZXNzIHN0YXRlIG1pZ2h0IGhhdmUgY2hhbmdlZCBh
cyBhIHJlc3VsdCBvZiB0aGUgdXNlcgotICAgICAgICAvLyBjbGlja2luZyB0aGUgY2FwdGlvbnMg
YnV0dG9uLiBJbiB0aGlzIGNhc2UsIGEgY2hlY2sgd2hldGhlciBhbGwgdGhlCi0gICAgICAgIC8v
IHJlc291cmNlcyBoYXZlIGZhaWxlZCBsb2FkaW5nIHNob3VsZCBiZSBkb25lIGluIG9yZGVyIHRv
IGhpZGUgdGhlIENDIGJ1dHRvbi4KLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSAmJiB0
cmFjay0+cmVhZGluZXNzU3RhdGUoKSA9PSBUZXh0VHJhY2s6OkZhaWxlZFRvTG9hZCkKLSAgICAg
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVmcmVzaENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJp
bGl0eSgpOwogICAgIH0KIH0KIApAQCAtNjM5MSw1MSArNjI5MywyNyBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkoVGV4dFRyYWNrVmlzaWJpbGl0eUNo
ZWNrVHlwZSBjaAogICAgIG1faGF2ZVZpc2libGVUZXh0VHJhY2sgPSBoYXZlVmlzaWJsZVRleHRU
cmFjazsKICAgICBtX2Nsb3NlZENhcHRpb25zVmlzaWJsZSA9IG1faGF2ZVZpc2libGVUZXh0VHJh
Y2s7CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmICghbV9oYXZl
VmlzaWJsZVRleHRUcmFjaykKICAgICAgICAgcmV0dXJuOwogCiAgICAgZW5zdXJlTWVkaWFDb250
cm9sc1NoYWRvd1Jvb3QoKTsKICAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0jZWxzZQot
ICAgIGlmICghbV9oYXZlVmlzaWJsZVRleHRUcmFjayAmJiAhaGFzTWVkaWFDb250cm9scygpICYm
ICFjcmVhdGVNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1lZGlhQ29u
dHJvbHMoKS0+Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgpOwotCi0gICAgdXBkYXRl
VGV4dFRyYWNrRGlzcGxheSgpOwotICAgIHVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoY3VycmVu
dE1lZGlhVGltZSgpKTsKLSNlbmRpZgogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0
ZVRleHRUcmFja0Rpc3BsYXkoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQp
CiAgICAgZW5zdXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QoKTsKICAgICBpZiAoIW1fbWVkaWFD
b250cm9sc0hvc3QpCiAgICAgICAgIG1fbWVkaWFDb250cm9sc0hvc3QgPSBNZWRpYUNvbnRyb2xz
SG9zdDo6Y3JlYXRlKCp0aGlzKTsKICAgICBtX21lZGlhQ29udHJvbHNIb3N0LT51cGRhdGVUZXh0
VHJhY2tDb250YWluZXIoKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYg
IWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFDb250
cm9scygpLT51cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQo
KQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgZW5zdXJlTWVkaWFD
b250cm9sc1NoYWRvd1Jvb3QoKTsKICAgICBpZiAoIW1fbWVkaWFDb250cm9sc0hvc3QpCiAgICAg
ICAgIG1fbWVkaWFDb250cm9sc0hvc3QgPSBNZWRpYUNvbnRyb2xzSG9zdDo6Y3JlYXRlKCp0aGlz
KTsKICAgICBtX21lZGlhQ29udHJvbHNIb3N0LT51cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkltYWdlSWZOZWVkZWQoKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYg
IWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFDb250
cm9scygpLT51cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQoKTsKLSNl
bmRpZgogfQogCiAjZW5kaWYKQEAgLTY0NTYsOCArNjMzNCw2IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgY2xvc2VkQ2FwdGlvblZpc2libGUp
CiAgICAgbWFya0NhcHRpb25BbmRTdWJ0aXRsZVRyYWNrc0FzVW5jb25maWd1cmVkKEltbWVkaWF0
ZWx5KTsKICAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CiAjZWxzZQotICAgIGlmIChoYXNN
ZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+Y2hhbmdlZENsb3NlZENh
cHRpb25zVmlzaWJpbGl0eSgpOwogI2VuZGlmCiB9CiAKQEAgLTY1NzYsNjIgKzY0NTIsNiBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKICNlbmRpZgogfQogCi1NZWRpYUNvbnRyb2xzKiBIVE1MTWVk
aWFFbGVtZW50OjptZWRpYUNvbnRyb2xzKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoTUVESUFfQ09O
VFJPTFNfU0NSSVBUKQotICAgIHJldHVybiBudWxscHRyOwotI2Vsc2UKLSAgICBhdXRvIHJvb3Qg
PSB1c2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBjaGlsZHJlbk9mVHlwZTxNZWRpYUNvbnRyb2xzPigqcm9v
dCkuZmlyc3QoKTsKLSNlbmRpZgotfQotCi1ib29sIEhUTUxNZWRpYUVsZW1lbnQ6Omhhc01lZGlh
Q29udHJvbHMoKSBjb25zdAotewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0g
ICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKLQotICAgIGlmIChhdXRvIHVzZXJBZ2VudCA9IHVzZXJB
Z2VudFNoYWRvd1Jvb3QoKSkgewotICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNoaWxkcmVu
T2ZUeXBlPE1lZGlhQ29udHJvbHM+KCpyb290KS5maXJzdCgpOwotICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8fCBub2RlLT5pc01lZGlhQ29udHJvbHMoKSk7
Ci0gICAgICAgIHJldHVybiBub2RlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRp
ZgotfQotCi1ib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlhQ29udHJvbHMoKQotewot
I2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0gICAgZW5zdXJlTWVkaWFDb250cm9s
c1NoYWRvd1Jvb3QoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIGlmIChoYXNNZWRp
YUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byBtZWRpYUNvbnRy
b2xzID0gTWVkaWFDb250cm9sczo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgIGlmICghbWVkaWFD
b250cm9scykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbWVkaWFDb250cm9scy0+c2V0
TWVkaWFDb250cm9sbGVyKG1fbWVkaWFDb250cm9sbGVyID8gbV9tZWRpYUNvbnRyb2xsZXIuZ2V0
KCkgOiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqPih0aGlzKSk7Ci0gICAg
bWVkaWFDb250cm9scy0+cmVzZXQoKTsKLSAgICBpZiAoaXNGdWxsc2NyZWVuKCkpCi0gICAgICAg
IG1lZGlhQ29udHJvbHMtPmVudGVyZWRGdWxsc2NyZWVuKCk7Ci0KLSAgICBlbnN1cmVVc2VyQWdl
bnRTaGFkb3dSb290KCkuYXBwZW5kQ2hpbGQobWVkaWFDb250cm9scyk7Ci0KLSAgICBpZiAoIWNv
bnRyb2xzKCkgfHwgIWlzQ29ubmVjdGVkKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMtPmhpZGUo
KTsKLQotICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi19Ci0KIGJvb2wgSFRNTE1lZGlhRWxlbWVu
dDo6c2hvdWxkRm9yY2VDb250cm9sc0Rpc3BsYXkoKSBjb25zdAogewogICAgIC8vIEFsd2F5cyBj
cmVhdGUgY29udHJvbHMgZm9yIGF1dG9wbGF5IHZpZGVvIHRoYXQgcmVxdWlyZXMgdXNlciBnZXN0
dXJlIGR1ZSB0byBiZWluZyBpbiBsb3cgcG93ZXIgbW9kZS4KQEAgLTY2NTgsMjMgKzY0NzgsMTAg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVNZWRpYUNvbnRyb2xzKCkKICAgICAg
ICAgcmVxdWlyZUNvbnRyb2xzID0gdHJ1ZTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE1FRElBX0NP
TlRST0xTX1NDUklQVCkKICAgICBpZiAoIXJlcXVpcmVDb250cm9scyB8fCAhaXNDb25uZWN0ZWQo
KSB8fCAhaW5BY3RpdmVEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBlbnN1cmVN
ZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpOwotI2Vsc2UKLSAgICBpZiAoIXJlcXVpcmVDb250cm9s
cyB8fCAhaXNDb25uZWN0ZWQoKSB8fCAhaW5BY3RpdmVEb2N1bWVudCgpKSB7Ci0gICAgICAgIGlm
IChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmhpZGUo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaGFzTWVkaWFDb250cm9scygp
ICYmICFjcmVhdGVNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1lZGlh
Q29udHJvbHMoKS0+c2hvdygpOwotI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CkBAIC02Njg0LDEzICs2NDkxLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjYXB0aW9uUHJl
ZmVyZW5jZXNDaGFuZ2VkKCkKICAgICBpZiAoIWlzVmlkZW8oKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT50
ZXh0VHJhY2tQcmVmZXJlbmNlc0NoYW5nZWQoKTsKLQotI2lmIEVOQUJMRShNRURJQV9DT05UUk9M
U19TQ1JJUFQpCiAgICAgaWYgKG1fbWVkaWFDb250cm9sc0hvc3QpCiAgICAgICAgIG1fbWVkaWFD
b250cm9sc0hvc3QtPnVwZGF0ZUNhcHRpb25EaXNwbGF5U2l6ZXMoTWVkaWFDb250cm9sc0hvc3Q6
OkZvcmNlVXBkYXRlOjpZZXMpOwotI2VuZGlmCiAKICAgICBpZiAobV9wbGF5ZXIpCiAgICAgICAg
IG1fcGxheWVyLT50cmFja3NDaGFuZ2VkKCk7CkBAIC02ODY4LDkgKzY2NzAsNiBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnNldENvbnRyb2xsZXIoUmVmUHRyPE1lZGlhQ29udHJvbGxlcj4mJiBj
b250cm9sbGVyKQogCiAgICAgaWYgKG1fbWVkaWFDb250cm9sbGVyKQogICAgICAgICBtX21lZGlh
Q29udHJvbGxlci0+YWRkTWVkaWFFbGVtZW50KCp0aGlzKTsKLQotICAgIGlmIChoYXNNZWRpYUNv
bnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+c2V0TWVkaWFDb250cm9sbGVyKG1f
bWVkaWFDb250cm9sbGVyID8gbV9tZWRpYUNvbnRyb2xsZXIuZ2V0KCkgOiBzdGF0aWNfY2FzdDxN
ZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqPih0aGlzKSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0Q29udHJvbGxlckZvckJpbmRpbmdzKE1lZGlhQ29udHJvbGxlciogY29udHJvbGxl
cikKQEAgLTczMTAsNyArNzEwOSw2IEBAIFJlZlB0cjxWaWRlb1BsYXliYWNrUXVhbGl0eT4gSFRN
TE1lZGlhRWxlbWVudDo6Z2V0VmlkZW9QbGF5YmFja1F1YWxpdHkoKQogICAgIHJldHVybiBWaWRl
b1BsYXliYWNrUXVhbGl0eTo6Y3JlYXRlKHRpbWVzdGFtcCwgbWV0cmljcy52YWx1ZSgpKTsKIH0K
IAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiBET01XcmFwcGVyV29ybGQmIEhU
TUxNZWRpYUVsZW1lbnQ6OmVuc3VyZUlzb2xhdGVkV29ybGQoKQogewogICAgIGlmICghbV9pc29s
YXRlZFdvcmxkKQpAQCAtNzU2OSw3ICs3MzY3LDYgQEAgU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6
OmdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKCkKIAogICAgIHJldHVybiBzdGF0dXM7CiB9
Ci0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKIAogdW5zaWduZWQgbG9u
ZyBsb25nIEhUTUxNZWRpYUVsZW1lbnQ6OmZpbGVTaXplKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggZmNkOGVkZmFiYzI4NTg2MjQzOTIwMjI3OTM4
M2EwODMyZGQ4ZDJjYi4uMWE3MjlmNDA5MWFjZGZjZjc2NWMwYmY1NjkxNjYyNWMyNWEyM2ZkZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTQ0Nyw4ICs0NDcsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBjbG9zZWRDYXB0aW9uc1Zpc2libGUoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2b2lkIHNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sKSBvdmVycmlkZTsKIAot
ICAgIE1lZGlhQ29udHJvbHMqIG1lZGlhQ29udHJvbHMoKSBjb25zdDsKLQogICAgIHZvaWQgc291
cmNlV2FzUmVtb3ZlZChIVE1MU291cmNlRWxlbWVudCYpOwogICAgIHZvaWQgc291cmNlV2FzQWRk
ZWQoSFRNTFNvdXJjZUVsZW1lbnQmKTsKIApAQCAtNTA4LDEzICs1MDYsMTAgQEAgcHVibGljOgog
ICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIHByZWxvYWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJlbG9hZDsgfQogICAgIE1lZGlhRWxlbWVudFNlc3Npb24mIG1lZGlhU2Vzc2lvbigpIGNvbnN0
IHsgcmV0dXJuICptX21lZGlhU2Vzc2lvbjsgfQogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xT
X1NDUklQVCkKICAgICB2b2lkIHBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKICAgICB2b2lkIHVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIGdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKCk7Ci0KICAgICBNZWRpYUNvbnRy
b2xzSG9zdCogbWVkaWFDb250cm9sc0hvc3QoKSB7IHJldHVybiBtX21lZGlhQ29udHJvbHNIb3N0
LmdldCgpOyB9Ci0jZW5kaWYKIAogICAgIGJvb2wgaXNEaXNhYmxpbmdTbGVlcCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2xlZXBEaXNhYmxlci5nZXQoKTsgfQogCkBAIC02MTMsMTEgKzYwOCw5IEBAIHBy
b3RlY3RlZDoKIAogICAgIFNlY3VyaXR5T3JpZ2luRGF0YSBkb2N1bWVudFNlY3VyaXR5T3JpZ2lu
KCkgY29uc3QgZmluYWw7CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAg
IGJvb2wgbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3I7IH0KICAgICB2b2lkIHNl
dE1lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3Rvcihib29sKTsKICAgICB2b2lkIHVw
ZGF0ZU1lZGlhQ29udHJvbHNBZnRlclByZXNlbnRhdGlvbk1vZGVDaGFuZ2UoKTsKLSNlbmRpZgog
CiAgICAgdm9pZCBzY2hlZHVsZUV2ZW50KGNvbnN0IEF0b21TdHJpbmcmKTsKIApAQCAtODUyLDgg
Kzg0NSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGVkVGltZSgpIGNvbnN0
OwogICAgIHZvaWQgcmVmcmVzaENhY2hlZFRpbWUoKSBjb25zdDsKIAotICAgIGJvb2wgaGFzTWVk
aWFDb250cm9scygpIGNvbnN0OwotICAgIGJvb2wgY3JlYXRlTWVkaWFDb250cm9scygpOwogICAg
IHZvaWQgY29uZmlndXJlTWVkaWFDb250cm9scygpOwogCiAgICAgdm9pZCBwcmVwYXJlTWVkaWFG
cmFnbWVudFVSSSgpOwpAQCAtODczLDExICs4NjQsOSBAQCBwcml2YXRlOgogICAgIGVudW0gY2xh
c3MgU2xlZXBUeXBlIHsgTm9uZSwgRGlzcGxheSwgU3lzdGVtIH07CiAgICAgU2xlZXBUeXBlIHNo
b3VsZERpc2FibGVTbGVlcCgpIGNvbnN0OwogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKICAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIG92
ZXJyaWRlOwogICAgIERPTVdyYXBwZXJXb3JsZCYgZW5zdXJlSXNvbGF0ZWRXb3JsZCgpOwogICAg
IGJvb2wgZW5zdXJlTWVkaWFDb250cm9sc0luamVjdGVkU2NyaXB0KCk7Ci0jZW5kaWYKIAogICAg
IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUgbWVkaWFUeXBlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1lZGlhVHlwZSBwcmVzZW50YXRpb25UeXBl
KCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMTE1LDEwICsxMTA0LDggQEAgcHJpdmF0ZToKICAgICBi
b29sIG1faGFzRXZlckhhZEF1ZGlvIDogMTsKICAgICBib29sIG1faGFzRXZlckhhZFZpZGVvIDog
MTsKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgYm9vbCBtX21lZGlh
Q29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvciA6IDE7CiAgICAgYm9vbCBtX2hhdmVTZXRV
cENhcHRpb25Db250YWluZXIgOiAxOwotI2VuZGlmCiAKICAgICBib29sIG1faXNTY3J1YmJpbmdS
ZW1vdGVseSA6IDE7CiAgICAgYm9vbCBtX3dhaXRpbmdUb0VudGVyRnVsbHNjcmVlbiA6IDE7CkBA
IC0xMTkyLDExICsxMTc5LDkgQEAgcHJpdmF0ZToKICAgICBjb25zdCB2b2lkKiBtX2xvZ0lkZW50
aWZpZXI7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAg
ZnJpZW5kIGNsYXNzIE1lZGlhQ29udHJvbHNIb3N0OwogICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xz
SG9zdD4gbV9tZWRpYUNvbnRyb2xzSG9zdDsKICAgICBSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBt
X2lzb2xhdGVkV29ybGQ7Ci0jZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAg
UmVmUHRyPE1lZGlhU3RyZWFtPiBtX21lZGlhU3RyZWFtU3JjT2JqZWN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhYjgyYTE4MDAxMzIwNjk3YjAyY2FkOTYy
ZThlYjE4NjUyNGJhZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVz
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKQotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1l
bnRUeXBlcy5oIgotCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCi0jaW5jbHVkZSAiUmVuZGVyTWVkaWEuaCIKLSNpbmNsdWRlICJSZW5kZXJNZWRpYUNvbnRy
b2xzLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1XVEZfTUFLRV9JU09fQUxM
T0NBVEVEX0lNUEwoTWVkaWFDb250cm9sRGl2RWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NB
VEVEX0lNUEwoTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lT
T19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudCk7Ci0K
LXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLWNsYXNzIEV2ZW50OwotCi1SZWZQdHI8SFRN
TE1lZGlhRWxlbWVudD4gcGFyZW50TWVkaWFFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCi17Ci0g
ICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8Tm9kZT4g
bWVkaWFOb2RlID0gbm9kZS0+c2hhZG93SG9zdCgpOwotICAgIGlmICghbWVkaWFOb2RlKQotICAg
ICAgICBtZWRpYU5vZGUgPSBjb25zdF9jYXN0PE5vZGUqPihub2RlKTsKLSAgICBpZiAoIWlzPEhU
TUxNZWRpYUVsZW1lbnQ+KCptZWRpYU5vZGUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gZG93bmNhc3Q8SFRNTE1lZGlhRWxlbWVudD4obWVkaWFOb2RlLmdldCgpKTsKLX0K
LQotTWVkaWFDb250cm9sRWxlbWVudFR5cGUgbWVkaWFDb250cm9sRWxlbWVudFR5cGUoTm9kZSog
bm9kZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihub2RlLT5pc01l
ZGlhQ29udHJvbEVsZW1lbnQoKSk7Ci0gICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2Rl
KSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbElucHV0RWxlbWVudCo+
KG5vZGUpLT5kaXNwbGF5VHlwZSgpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRy
b2xEaXZFbGVtZW50Kj4obm9kZSktPmRpc3BsYXlUeXBlKCk7Ci19Ci0KLU1lZGlhQ29udHJvbEVs
ZW1lbnQ6Ok1lZGlhQ29udHJvbEVsZW1lbnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxh
eVR5cGUsIEhUTUxFbGVtZW50KiBlbGVtZW50KQotICAgIDogbV9tZWRpYUNvbnRyb2xsZXIoMCkK
LSAgICAsIG1fZGlzcGxheVR5cGUoZGlzcGxheVR5cGUpCi0gICAgLCBtX2VsZW1lbnQoZWxlbWVu
dCkKLXsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50OjpoaWRlKCkKLXsKLSAgICBtX2Vs
ZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5LCBDU1NWYWx1
ZU5vbmUpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnNob3coKQotewotICAgIG1f
ZWxlbWVudC0+cmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXkpOwot
fQotCi1ib29sIE1lZGlhQ29udHJvbEVsZW1lbnQ6OmlzU2hvd2luZygpIGNvbnN0Ci17Ci0gICAg
Y29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBwcm9wZXJ0eVNldCA9IG1fZWxlbWVudC0+aW5saW5lU3R5
bGUoKTsKLSAgICAvLyBGb2xsb3dpbmcgdGhlIGNvZGUgZnJvbSBzaG93KCkgYW5kIGhpZGUoKSBh
Ym92ZSwgd2Ugb25seSBoYXZlCi0gICAgLy8gdG8gY2hlY2sgZm9yIHRoZSBwcmVzZW5zZSBvZiBp
bmxpbmUgZGlzcGxheS4KLSAgICByZXR1cm4gKCFwcm9wZXJ0eVNldCB8fCAhcHJvcGVydHlTZXQt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXNwbGF5KSk7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sRWxlbWVudDo6c2V0RGlzcGxheVR5cGUoTWVkaWFDb250cm9sRWxlbWVudFR5cGUg
ZGlzcGxheVR5cGUpCi17Ci0gICAgaWYgKGRpc3BsYXlUeXBlID09IG1fZGlzcGxheVR5cGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fZGlzcGxheVR5cGUgPSBkaXNwbGF5VHlwZTsKLSAgICBp
ZiAoYXV0byBvYmplY3QgPSBtX2VsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgIG9iamVjdC0+
cmVwYWludCgpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlh
Q29udHJvbERpdkVsZW1lbnQ6Ok1lZGlhQ29udHJvbERpdkVsZW1lbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSkKLSAgICA6IEhUTUxEaXZF
bGVtZW50KGRpdlRhZywgZG9jdW1lbnQpCi0gICAgLCBNZWRpYUNvbnRyb2xFbGVtZW50KGRpc3Bs
YXlUeXBlLCB0aGlzKQotewotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LU1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6TWVkaWFDb250cm9sSW5wdXRFbGVtZW50KERvY3Vt
ZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUpCi0gICAg
OiBIVE1MSW5wdXRFbGVtZW50KGlucHV0VGFnLCBkb2N1bWVudCwgMCwgZmFsc2UpCi0gICAgLCBN
ZWRpYUNvbnRyb2xFbGVtZW50KGRpc3BsYXlUeXBlLCB0aGlzKQotewotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudDo6
TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFD
b250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVt
ZW50KGRvY3VtZW50LCBkaXNwbGF5VHlwZSkKLSAgICAsIG1fY3VycmVudFZhbHVlKDApCi17Ci19
Ci0KLXZvaWQgTWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50OjpzZXRDdXJyZW50VmFsdWUo
ZG91YmxlIHRpbWUpCi17Ci0gICAgbV9jdXJyZW50VmFsdWUgPSB0aW1lOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50
OjpNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlh
Q29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKQotICAgIDogTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50KGRvY3VtZW50LCBkaXNwbGF5VHlwZSkKLXsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xN
dXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0g
ICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewotICAgICAg
ICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0TXV0ZWQoIW1lZGlhQ29udHJvbGxlcigpLT5tdXRlZCgp
KTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0KLSAgICBIVE1M
SW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotdm9pZCBNZWRp
YUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6Y2hhbmdlZE11dGUoKQotewotICAgIHVwZGF0ZURp
c3BsYXlUeXBlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6OnVw
ZGF0ZURpc3BsYXlUeXBlKCkKLXsKLSAgICBzZXREaXNwbGF5VHlwZShtZWRpYUNvbnRyb2xsZXIo
KS0+bXV0ZWQoKSA/IE1lZGlhVW5NdXRlQnV0dG9uIDogTWVkaWFNdXRlQnV0dG9uKTsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xTZWVrQnV0dG9u
RWxlbWVudDo6TWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50
LCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSkKLSAgICA6IE1lZGlhQ29udHJv
bElucHV0RWxlbWVudChkb2N1bWVudCwgZGlzcGxheVR5cGUpCi17Ci19Ci0KLXZvaWQgTWVkaWFD
b250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50
KQotewotICAgIC8vIFNldCB0aGUgbW91c2Vkb3duIGFuZCBtb3VzZXVwIGV2ZW50cyBhcyBkZWZh
dWx0SGFuZGxlZCBzbyB0aGV5Ci0gICAgLy8gZG8gbm90IHRyaWdnZXIgZHJhZyBzdGFydCBvciBl
bmQgYWN0aW9ucyBpbiBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQuCi0gICAgaWYgKGV2ZW50LnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpCi0gICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVk
KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6OnNldEFjdGl2ZShi
b29sIGZsYWcsIGJvb2wgcGF1c2UpCi17Ci0gICAgaWYgKGZsYWcgPT0gYWN0aXZlKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChmbGFnKQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+
YmVnaW5TY2FubmluZyhpc0ZvcndhcmRCdXR0b24oKSA/IE1lZGlhQ29udHJvbGxlckludGVyZmFj
ZTo6Rm9yd2FyZCA6IE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQpOwotICAgIGVs
c2UKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPmVuZFNjYW5uaW5nKCk7Ci0KLSAgICBNZWRp
YUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnNldEFjdGl2ZShmbGFnLCBwYXVzZSk7Ci19Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxl
bWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQp
Ci0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhVm9sdW1lU2xp
ZGVyKQotICAgICwgbV9jbGVhck11dGVkT25Vc2VySW50ZXJhY3Rpb24oZmFsc2UpCi17Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCYgZXZlbnQpCi17Ci0gICAgLy8gTGVmdCBidXR0b24gaXMgMC4gUmVqZWN0cyBtb3Vz
ZSBldmVudHMgbm90IGZyb20gbGVmdCBidXR0b24uCi0gICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2
ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkuYnV0dG9uKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAg
IGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50IHx8IGV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCBldmVudC50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3Vi
bGUgdm9sdW1lID0gdmFsdWUoKS50b0RvdWJsZSgpOwotICAgIGlmICh2b2x1bWUgIT0gbWVkaWFD
b250cm9sbGVyKCktPnZvbHVtZSgpKQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0Vm9s
dW1lKHZvbHVtZSk7Ci0gICAgaWYgKG1fY2xlYXJNdXRlZE9uVXNlckludGVyYWN0aW9uKQotICAg
ICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0TXV0ZWQoZmFsc2UpOwotICAgIGV2ZW50LnNldERl
ZmF1bHRIYW5kbGVkKCk7Ci19Ci0KLWJvb2wgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVu
dDo6d2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50cygpCi17Ci0gICAgaWYgKCFyZW5kZXJlcigp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCk7Ci19Ci0KLWJvb2wgTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMo
KQotewotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tF
dmVudHMoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpzZXRW
b2x1bWUoZG91YmxlIHZvbHVtZSkKLXsKLSAgICBpZiAodmFsdWUoKS50b0RvdWJsZSgpICE9IHZv
bHVtZSkKLSAgICAgICAgc2V0VmFsdWUoU3RyaW5nOjpudW1iZXIodm9sdW1lKSk7Ci19Ci0KLXZv
aWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6c2V0Q2xlYXJNdXRlZE9uVXNlcklu
dGVyYWN0aW9uKGJvb2wgY2xlYXJNdXRlKQotewotICAgIG1fY2xlYXJNdXRlZE9uVXNlckludGVy
YWN0aW9uID0gY2xlYXJNdXRlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5MzFmYzBlMzk1ODNjYTI3ZDgxYjc1NzdjZWQ4Mzk2OTE0OTExN2VhLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShWSURFTykKLQotI2luY2x1
ZGUgIkhUTUxEaXZFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xsZXJJbnRl
cmZhY2UuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1lbnVtIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIHsKLSAgICBNZWRpYUVudGVyRnVsbHNj
cmVlbkJ1dHRvbiA9IDAsCi0gICAgTWVkaWFNdXRlQnV0dG9uLAotICAgIE1lZGlhUGxheUJ1dHRv
biwKLSAgICBNZWRpYVNlZWtCYWNrQnV0dG9uLAotICAgIE1lZGlhU2Vla0ZvcndhcmRCdXR0b24s
Ci0gICAgTWVkaWFTbGlkZXIsCi0gICAgTWVkaWFTbGlkZXJUaHVtYiwKLSAgICBNZWRpYVJld2lu
ZEJ1dHRvbiwKLSAgICBNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24sCi0gICAgTWVkaWFTaG93
Q2xvc2VkQ2FwdGlvbnNCdXR0b24sCi0gICAgTWVkaWFIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24s
Ci0gICAgTWVkaWFVbk11dGVCdXR0b24sCi0gICAgTWVkaWFQYXVzZUJ1dHRvbiwKLSAgICBNZWRp
YVRpbWVsaW5lQ29udGFpbmVyLAotICAgIE1lZGlhQ3VycmVudFRpbWVEaXNwbGF5LAotICAgIE1l
ZGlhVGltZVJlbWFpbmluZ0Rpc3BsYXksCi0gICAgTWVkaWFTdGF0dXNEaXNwbGF5LAotICAgIE1l
ZGlhQ29udHJvbHNQYW5lbCwKLSAgICBNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lciwKLSAgICBN
ZWRpYVZvbHVtZVNsaWRlciwKLSAgICBNZWRpYVZvbHVtZVNsaWRlclRodW1iLAotICAgIE1lZGlh
RnVsbFNjcmVlblZvbHVtZVNsaWRlciwKLSAgICBNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJU
aHVtYiwKLSAgICBNZWRpYVZvbHVtZVNsaWRlck11dGVCdXR0b24sCi0gICAgTWVkaWFUZXh0VHJh
Y2tEaXNwbGF5Q29udGFpbmVyLAotICAgIE1lZGlhVGV4dFRyYWNrRGlzcGxheSwKLSAgICBNZWRp
YUV4aXRGdWxsc2NyZWVuQnV0dG9uLAotICAgIE1lZGlhT3ZlcmxheVBsYXlCdXR0b24sCi0gICAg
TWVkaWFDbG9zZWRDYXB0aW9uc0NvbnRhaW5lciwKLSAgICBNZWRpYUNsb3NlZENhcHRpb25zVHJh
Y2tMaXN0LAotfTsKLQotUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IHBhcmVudE1lZGlhRWxlbWVu
dChjb25zdCBOb2RlKik7Ci1pbmxpbmUgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IHBhcmVudE1l
ZGlhRWxlbWVudChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSB7IHJldHVybiBwYXJlbnRN
ZWRpYUVsZW1lbnQocmVuZGVyZXIubm9kZSgpKTsgfQotCi1NZWRpYUNvbnRyb2xFbGVtZW50VHlw
ZSBtZWRpYUNvbnRyb2xFbGVtZW50VHlwZShOb2RlKik7Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sRWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB2b2lkIGhpZGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwotICAgIHZpcnR1
YWwgYm9vbCBpc1Nob3dpbmcoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxl
bWVudFR5cGUgZGlzcGxheVR5cGUoKSB7IHJldHVybiBtX2Rpc3BsYXlUeXBlOyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TWVkaWFDb250cm9sbGVyKE1lZGlhQ29udHJvbGxlckludGVyZmFjZSog
Y29udHJvbGxlcikgeyBtX21lZGlhQ29udHJvbGxlciA9IGNvbnRyb2xsZXI7IH0KLSAgICB2aXJ0
dWFsIE1lZGlhQ29udHJvbGxlckludGVyZmFjZSogbWVkaWFDb250cm9sbGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9tZWRpYUNvbnRyb2xsZXI7IH0KLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IE1l
ZGlhQ29udHJvbEVsZW1lbnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUsIEhUTUxFbGVtZW50Kik7
Ci0gICAgfk1lZGlhQ29udHJvbEVsZW1lbnQoKSA9IGRlZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0RGlzcGxheVR5cGUoTWVkaWFDb250cm9sRWxlbWVudFR5cGUpOwotICAgIHZpcnR1YWwg
Ym9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgTWVkaWFDb250cm9sbGVySW50ZXJmYWNlKiBtX21lZGlhQ29udHJvbGxlcjsK
LSAgICBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBtX2Rpc3BsYXlUeXBlOwotICAgIEhUTUxFbGVt
ZW50KiBtX2VsZW1lbnQ7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LWNsYXNzIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQsIHB1
YmxpYyBNZWRpYUNvbnRyb2xFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1l
ZGlhQ29udHJvbERpdkVsZW1lbnQpOwotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IE1lZGlhQ29u
dHJvbERpdkVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSk7Ci0KLXBy
aXZhdGU6Ci0gICAgYm9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBNZWRpYUNvbnRyb2xFbGVtZW50Ojppc01lZGlhQ29udHJvbEVsZW1lbnQoKTsgfQotfTsK
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xJ
bnB1dEVsZW1lbnQgOiBwdWJsaWMgSFRNTElucHV0RWxlbWVudCwgcHVibGljIE1lZGlhQ29udHJv
bEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50KTsKLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSk7Ci0KLXByaXZhdGU6Ci0gICAg
Ym9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBNZWRpYUNv
bnRyb2xFbGVtZW50Ojppc01lZGlhQ29udHJvbEVsZW1lbnQoKTsgfQotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVEaXNwbGF5VHlwZSgpIHsgfQotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQgOiBwdWJsaWMg
TWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRp
YUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQpOwotcHVibGljOgotICAgIHZvaWQgc2V0Q3VycmVu
dFZhbHVlKGRvdWJsZSk7Ci0gICAgZG91YmxlIGN1cnJlbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY3VycmVudFZhbHVlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRy
b2xUaW1lRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSk7
Ci0KLXByaXZhdGU6Ci0gICAgZG91YmxlIG1fY3VycmVudFZhbHVlOwotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxl
bWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAg
IHZvaWQgY2hhbmdlZE11dGUoKTsKLQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tF
dmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBleHBs
aWNpdCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChEb2N1bWVudCYsIE1lZGlhQ29udHJv
bEVsZW1lbnRUeXBlKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIG92
ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKSBvdmVycmlk
ZTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFD
b250cm9sU2Vla0J1dHRvbkVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50
IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVt
ZW50KTsKLXB1YmxpYzoKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgTWVk
aWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50
VHlwZSk7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNGb3J3YXJkQnV0dG9uKCkgY29uc3QgPSAwOwotCi1wcml2YXRl
OgotICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wgLypmbGFnKi8gPSB0cnVlLCBib29sIC8qcGF1c2Uq
LyA9IGZhbHNlKSBmaW5hbDsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotY2xhc3MgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgYm9vbCB3aWxsUmVzcG9uZFRv
TW91c2VNb3ZlRXZlbnRzKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VD
bGlja0V2ZW50cygpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Vm9sdW1lKGRvdWJsZSk7Ci0gICAg
dm9pZCBzZXRDbGVhck11dGVkT25Vc2VySW50ZXJhY3Rpb24oYm9vbCk7Ci0KLXByb3RlY3RlZDoK
LSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KERvY3VtZW50Jik7
Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotcHJp
dmF0ZToKLSAgICBib29sIG1fY2xlYXJNdXRlZE9uVXNlckludGVyYWN0aW9uOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmI0YjRjYjY0YWViZTIxNGI5MjgxNWEwNmQ3ZGFi
OTM4ODA1MDY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE1MDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKQot
Ci0jaW5jbHVkZSAiRE9NVG9rZW5MaXN0LmgiCi0jaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0
b3IuaCIKLSNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGdWxsc2NyZWVuTWFuYWdlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxIZWFkaW5nRWxlbWVudC5o
IgotI2luY2x1ZGUgIkhUTUxMSUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVUxpc3RFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCi0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
LSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzLmgiCi0jaW5jbHVkZSAiTW91c2VFdmVudC5oIgotI2lu
Y2x1ZGUgIlBPREludGVydmFsLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VH
cm91cC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyTWVkaWFD
b250cm9scy5oIgotI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgotI2luY2x1ZGUgIlJlbmRlclRo
ZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
Ci0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaGFkb3dSb290LmgiCi0jaW5jbHVk
ZSAiVGV4dFRyYWNrQ3VlR2VuZXJpYy5oIgotI2luY2x1ZGUgIlRleHRUcmFja0xpc3QuaCIKLSNp
bmNsdWRlICJWVFRSZWdpb25MaXN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMu
aD4KLSNpbmNsdWRlIDx3dGYvTGFuZ3VhZ2UuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1X
VEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sUGFuZWxFbGVtZW50KTsKLVdU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVsZW1l
bnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbE92ZXJsYXlFbmNs
b3N1cmVFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1l
ZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KTsKLVdURl9NQUtF
X0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50KTsK
LVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRl
QnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9s
UGxheUJ1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29u
dHJvbE92ZXJsYXlQbGF5QnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoTWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQpOwotV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQpOwot
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVC
dXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xU
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudCk7Ci1XVEZf
TUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xp
c3RFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5CdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRp
YUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50KTsKLVdURl9N
QUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0
dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sRnVs
bHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TVBMKE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudCk7Ci1XVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudCk7
Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudCk7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLXN0YXRpYyBjb25z
dCBBdG9tU3RyaW5nJiBnZXRNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50U2hh
ZG93UHNldWRvSWQoKTsKLXN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBnZXRNZWRpYUNvbnRyb2xU
aW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnRTaGFkb3dQc2V1ZG9JZCgpOwotCi1NZWRpYUNvbnRy
b2xQYW5lbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudChEb2N1bWVudCYgZG9jdW1l
bnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYUNvbnRyb2xz
UGFuZWwpCi0gICAgLCBtX2NhbkJlRHJhZ2dlZChmYWxzZSkKLSAgICAsIG1faXNCZWluZ0RyYWdn
ZWQoZmFsc2UpCi0gICAgLCBtX2lzRGlzcGxheWVkKGZhbHNlKQotICAgICwgbV9vcGFxdWUodHJ1
ZSkKLSAgICAsIG1fdHJhbnNpdGlvblRpbWVyKCp0aGlzLCAmTWVkaWFDb250cm9sUGFuZWxFbGVt
ZW50Ojp0cmFuc2l0aW9uVGltZXJGaXJlZCkKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygi
LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ+IE1lZGlhQ29udHJv
bFBhbmVsRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQoZG9jdW1lbnQpKTsKLX0KLQot
dm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnN0YXJ0RHJhZyhjb25zdCBMYXlvdXRQb2lu
dCYgZXZlbnRMb2NhdGlvbikKLXsKLSAgICBpZiAoIW1fY2FuQmVEcmFnZ2VkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pc0JlaW5nRHJhZ2dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8
fCAhcmVuZGVyZXItPmlzQm94KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxGcmFt
ZT4gZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9sYXN0RHJhZ0V2ZW50TG9jYXRpb24gPSBldmVudExvY2F0aW9uOwot
Ci0gICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLnNldENhcHR1cmluZ01vdXNlRXZlbnRzRWxlbWVu
dCh0aGlzKTsKLQotICAgIG1faXNCZWluZ0RyYWdnZWQgPSB0cnVlOwotfQotCi12b2lkIE1lZGlh
Q29udHJvbFBhbmVsRWxlbWVudDo6Y29udGludWVEcmFnKGNvbnN0IExheW91dFBvaW50JiBldmVu
dExvY2F0aW9uKQotewotICAgIGlmICghbV9pc0JlaW5nRHJhZ2dlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgTGF5b3V0U2l6ZSBkaXN0YW5jZURyYWdnZWQgPSBldmVudExvY2F0aW9uIC0gbV9s
YXN0RHJhZ0V2ZW50TG9jYXRpb247Ci0gICAgbV9jdW11bGF0aXZlRHJhZ09mZnNldC5tb3ZlKGRp
c3RhbmNlRHJhZ2dlZCk7Ci0gICAgbV9sYXN0RHJhZ0V2ZW50TG9jYXRpb24gPSBldmVudExvY2F0
aW9uOwotICAgIHNldFBvc2l0aW9uKG1fY3VtdWxhdGl2ZURyYWdPZmZzZXQpOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZW5kRHJhZygpCi17Ci0gICAgaWYgKCFtX2lzQmVp
bmdEcmFnZ2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzQmVpbmdEcmFnZ2VkID0gZmFs
c2U7Ci0KLSAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZyYW1lLT5ldmVudEhhbmRsZXIo
KS5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQobnVsbHB0cik7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sUGFuZWxFbGVtZW50OjpzdGFydFRpbWVyKCkKLXsKLSAgICBzdG9wVGltZXIoKTsK
LQotICAgIC8vIFRoZSB0aW1lciBpcyByZXF1aXJlZCB0byBzZXQgdGhlIHByb3BlcnR5IGRpc3Bs
YXk6J25vbmUnIG9uIHRoZSBwYW5lbCwKLSAgICAvLyBzdWNoIHRoYXQgY2FwdGlvbnMgYXJlIGNv
cnJlY3RseSBkaXNwbGF5ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdmlkZW8KLSAgICAvLyBhdCB0
aGUgZW5kIG9mIHRoZSBmYWRlb3V0IHRyYW5zaXRpb24uCi0gICAgU2Vjb25kcyBkdXJhdGlvbiA9
IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5tZWRpYUNvbnRyb2xzRmFkZU91dER1cmF0aW9uKCk7
Ci0gICAgbV90cmFuc2l0aW9uVGltZXIuc3RhcnRPbmVTaG90KGR1cmF0aW9uKTsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnN0b3BUaW1lcigpCi17Ci0gICAgaWYgKG1fdHJh
bnNpdGlvblRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdHJhbnNpdGlvblRpbWVyLnN0b3Ao
KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnRyYW5zaXRpb25UaW1lckZp
cmVkKCkKLXsKLSAgICBpZiAoIW1fb3BhcXVlKQotICAgICAgICBoaWRlKCk7Ci0KLSAgICBzdG9w
VGltZXIoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnNldFBvc2l0aW9u
KGNvbnN0IExheW91dFBvaW50JiBwb3NpdGlvbikKLXsKLSAgICBkb3VibGUgbGVmdCA9IHBvc2l0
aW9uLngoKTsKLSAgICBkb3VibGUgdG9wID0gcG9zaXRpb24ueSgpOwotCi0gICAgLy8gU2V0IHRo
ZSBsZWZ0IGFuZCB0b3AgdG8gY29udHJvbCB0aGUgcGFuZWwncyBwb3NpdGlvbjsgdGhpcyBkZXBl
bmRzIG9uIGl0IGJlaW5nIGFic29sdXRlIHBvc2l0aW9uZWQuCi0gICAgLy8gU2V0IHRoZSBtYXJn
aW4gdG8gemVybyBzaW5jZSB0aGUgcG9zaXRpb24gcGFzc2VkIGluIHdpbGwgYWxyZWFkeSBpbmNs
dWRlIHRoZSBlZmZlY3Qgb2YgdGhlIG1hcmdpbi4KLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5TGVmdCwgbGVmdCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgc2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgdG9wLCBDU1NVbml0VHlwZTo6Q1NTX1BY
KTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgMC4w
LCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5TWFyZ2luVG9wLCAwLjAsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotCi0gICAgY2xhc3NM
aXN0KCkuYWRkKCJkcmFnZ2VkIik7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50
OjpyZXNldFBvc2l0aW9uKCkKLXsKLSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5TGVmdCk7Ci0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRv
cCk7Ci0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQp
OwotICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3ApOwot
Ci0gICAgY2xhc3NMaXN0KCkucmVtb3ZlKCJkcmFnZ2VkIik7Ci0KLSAgICBtX2N1bXVsYXRpdmVE
cmFnT2Zmc2V0LnNldFgoMCk7Ci0gICAgbV9jdW11bGF0aXZlRHJhZ09mZnNldC5zZXRZKDApOwot
fQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6bWFrZU9wYXF1ZSgpCi17Ci0gICAg
aWYgKG1fb3BhcXVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3VibGUgZHVyYXRpb24gPSBS
ZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkubWVkaWFDb250cm9sc0ZhZGVJbkR1cmF0aW9uKCk7Ci0K
LSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNpdGlvblByb3BlcnR5
LCBDU1NQcm9wZXJ0eU9wYWNpdHkpOwotICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlUcmFuc2l0aW9uRHVyYXRpb24sIGR1cmF0aW9uLCBDU1NVbml0VHlwZTo6Q1NTX1MpOwot
ICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlPcGFjaXR5LCAxLjAsIENTU1Vu
aXRUeXBlOjpDU1NfTlVNQkVSKTsKLQotICAgIG1fb3BhcXVlID0gdHJ1ZTsKLQotICAgIGlmICht
X2lzRGlzcGxheWVkKQotICAgICAgICBzaG93KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFu
ZWxFbGVtZW50OjptYWtlVHJhbnNwYXJlbnQoKQotewotICAgIGlmICghbV9vcGFxdWUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFNlY29uZHMgZHVyYXRpb24gPSBSZW5kZXJUaGVtZTo6c2luZ2xl
dG9uKCkubWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpOwotCi0gICAgc2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlPcGFj
aXR5KTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNpdGlvbkR1
cmF0aW9uLCBkdXJhdGlvbi52YWx1ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX1MpOwotICAgIHNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlPcGFjaXR5LCAwLjAsIENTU1VuaXRUeXBlOjpD
U1NfTlVNQkVSKTsKLQotICAgIG1fb3BhcXVlID0gZmFsc2U7Ci0gICAgc3RhcnRUaW1lcigpOwot
fQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCYgZXZlbnQpCi17Ci0gICAgTWVkaWFDb250cm9sRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihldmVudCk7Ci0KLSAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpKSB7Ci0gICAg
ICAgIExheW91dFBvaW50IGxvY2F0aW9uID0gZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQpLmFi
c29sdXRlTG9jYXRpb24oKTsKLSAgICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQudGFyZ2V0KCkgPT0gdGhpcykgewotICAgICAgICAg
ICAgc3RhcnREcmFnKGxvY2F0aW9uKTsKLSAgICAgICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5k
bGVkKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZW1vdmVFdmVudCAmJiBtX2lzQmVpbmdEcmFnZ2VkKQotICAgICAgICAgICAgY29udGludWVE
cmFnKGxvY2F0aW9uKTsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZXVwRXZlbnQgJiYgbV9pc0JlaW5nRHJhZ2dlZCkgewotICAgICAgICAgICAgY29u
dGludWVEcmFnKGxvY2F0aW9uKTsKLSAgICAgICAgICAgIGVuZERyYWcoKTsKLSAgICAgICAgICAg
IGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
TWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzZXRDYW5CZURyYWdnZWQoYm9vbCBjYW5CZURyYWdn
ZWQpCi17Ci0gICAgaWYgKG1fY2FuQmVEcmFnZ2VkID09IGNhbkJlRHJhZ2dlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9jYW5CZURyYWdnZWQgPSBjYW5CZURyYWdnZWQ7Ci0KLSAgICBpZiAo
IWNhbkJlRHJhZ2dlZCkKLSAgICAgICAgZW5kRHJhZygpOwotfQotCi12b2lkIE1lZGlhQ29udHJv
bFBhbmVsRWxlbWVudDo6c2V0SXNEaXNwbGF5ZWQoYm9vbCBpc0Rpc3BsYXllZCkKLXsKLSAgICBt
X2lzRGlzcGxheWVkID0gaXNEaXNwbGF5ZWQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotTWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVFbGVtZW50OjpNZWRpYUNvbnRy
b2xQYW5lbEVuY2xvc3VyZUVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIC8vIE1hcHBp
bmcgb250byBzYW1lIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGFzIHBhbmVsIGVsZW1lbnQsIHNp
bmNlIGl0IGhhcyBzaW1pbGFyIHByb3BlcnRpZXMuCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVt
ZW50KGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzUGFuZWwpCi17Ci0gICAgc2V0UHNldWRvKEF0b21T
dHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtZW5jbG9zdXJlIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFBhbmVsRW5jbG9zdXJl
RWxlbWVudD4gTWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVFbGVtZW50OjpjcmVhdGUoRG9jdW1l
bnQmIGRvY3VtZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFBh
bmVsRW5jbG9zdXJlRWxlbWVudChkb2N1bWVudCkpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbE92ZXJsYXlFbmNsb3N1cmVFbGVtZW50OjpNZWRp
YUNvbnRyb2xPdmVybGF5RW5jbG9zdXJlRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAg
Ly8gTWFwcGluZyBvbnRvIHNhbWUgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgYXMgcGFuZWwgZWxl
bWVudCwgc2luY2UgaXQgaGFzIHNpbWlsYXIgcHJvcGVydGllcy4KLSAgICA6IE1lZGlhQ29udHJv
bERpdkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhQ29udHJvbHNQYW5lbCkKLXsKLSAgICBzZXRQc2V1
ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1vdmVybGF5LWVuY2xvc3VyZSIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRy
b2xPdmVybGF5RW5jbG9zdXJlRWxlbWVudD4gTWVkaWFDb250cm9sT3ZlcmxheUVuY2xvc3VyZUVs
ZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTWVkaWFDb250cm9sT3ZlcmxheUVuY2xvc3VyZUVsZW1lbnQoZG9jdW1lbnQpKTsKLX0K
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xUaW1lbGlu
ZUNvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudChE
b2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50
LCBNZWRpYVRpbWVsaW5lQ29udGFpbmVyKQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCIt
d2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLWNvbnRhaW5lciIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRh
aW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sVGltZWxpbmVDb250
YWluZXJFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xUaW1lbGlu
ZUNvbnRhaW5lckVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBlbGVtZW50LT5oaWRlKCk7Ci0gICAg
cmV0dXJuIGVsZW1lbnQ7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJF
bGVtZW50OjpzZXRUaW1lRGlzcGxheXNIaWRkZW4oYm9vbCBoaWRkZW4pCi17Ci0gICAgZm9yIChh
dXRvJiBlbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAg
IGlmIChlbGVtZW50LnNoYWRvd1BzZXVkb0lkKCkgIT0gZ2V0TWVkaWFDb250cm9sVGltZVJlbWFp
bmluZ0Rpc3BsYXlFbGVtZW50U2hhZG93UHNldWRvSWQoKQotICAgICAgICAgICAgJiYgZWxlbWVu
dC5zaGFkb3dQc2V1ZG9JZCgpICE9IGdldE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVs
ZW1lbnRTaGFkb3dQc2V1ZG9JZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50JiB0aW1lRGlzcGxheSA9IHN0YXRpY19jYXN0
PE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudCY+KGVsZW1lbnQpOwotICAgICAgICBpZiAo
aGlkZGVuKQotICAgICAgICAgICAgdGltZURpc3BsYXkuaGlkZSgpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB0aW1lRGlzcGxheS5zaG93KCk7Ci0gICAgfQotfQotCi1SZW5kZXJQdHI8UmVu
ZGVyRWxlbWVudD4gTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OjpjcmVhdGVF
bGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsZSwgY29uc3QgUmVuZGVyVHJlZVBvc2l0
aW9uJikKLXsKLSAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyTWVkaWFDb250cm9sVGlt
ZWxpbmVDb250YWluZXI+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7Ci19Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVy
RWxlbWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChEb2N1bWVu
dCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRp
YVZvbHVtZVNsaWRlckNvbnRhaW5lcikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdl
YmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlk
ZXJDb250YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRp
YUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgZWxl
bWVudC0+aGlkZSgpOwotICAgIHJldHVybiBlbGVtZW50OwotfQotCi1SZW5kZXJQdHI8UmVuZGVy
RWxlbWVudD4gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRl
RWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3Np
dGlvbiYpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlck1lZGlhVm9sdW1lU2xp
ZGVyQ29udGFpbmVyPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwotfQotCi12b2lkIE1lZGlhQ29u
dHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQmIGV2ZW50KQotewotICAgIC8vIFBvb3IgbWFuJ3MgbW91c2VsZWF2ZSBldmVudCBkZXRlY3Rp
b24uCi0KLSAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSB8fCBldmVudC50eXBlKCkgIT0g
ZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
aXM8Tm9kZT4oZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQpLnJlbGF0ZWRUYXJnZXQoKSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChjb250YWluc0luY2x1ZGluZ1NoYWRvd0RPTSgmZG93
bmNhc3Q8Tm9kZT4oKmRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KS5yZWxhdGVkVGFyZ2V0KCkp
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaGlkZSgpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpNZWRp
YUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBN
ZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYVN0YXR1c0Rpc3BsYXkpCi0gICAg
LCBtX3N0YXRlQmVpbmdEaXNwbGF5ZWQoTm90aGluZykKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0
cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1zdGF0dXMtZGlzcGxheSIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNw
bGF5RWxlbWVudD4gTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShEb2N1
bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVt
ZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxl
bWVudChkb2N1bWVudCkpOwotICAgIGVsZW1lbnQtPmhpZGUoKTsKLSAgICByZXR1cm4gZWxlbWVu
dDsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6dXBkYXRlKCkK
LXsKLSAgICAvLyBHZXQgdGhlIG5ldyBzdGF0ZSB0aGF0IHdlJ2xsIGhhdmUgdG8gZGlzcGxheS4K
LSAgICBTdGF0ZUJlaW5nRGlzcGxheWVkIG5ld1N0YXRlVG9EaXNwbGF5ID0gTm90aGluZzsKLQot
ICAgIGlmIChtZWRpYUNvbnRyb2xsZXIoKS0+cmVhZHlTdGF0ZSgpIDw9IE1lZGlhQ29udHJvbGxl
ckludGVyZmFjZTo6SEFWRV9NRVRBREFUQSAmJiBtZWRpYUNvbnRyb2xsZXIoKS0+aGFzQ3VycmVu
dFNyYygpKQotICAgICAgICBuZXdTdGF0ZVRvRGlzcGxheSA9IExvYWRpbmc7Ci0gICAgZWxzZSBp
ZiAobWVkaWFDb250cm9sbGVyKCktPmlzTGl2ZVN0cmVhbSgpKQotICAgICAgICBuZXdTdGF0ZVRv
RGlzcGxheSA9IExpdmVCcm9hZGNhc3Q7Ci0KLSAgICBpZiAobmV3U3RhdGVUb0Rpc3BsYXkgPT0g
bV9zdGF0ZUJlaW5nRGlzcGxheWVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zdGF0
ZUJlaW5nRGlzcGxheWVkID09IE5vdGhpbmcpCi0gICAgICAgIHNob3coKTsKLSAgICBlbHNlIGlm
IChuZXdTdGF0ZVRvRGlzcGxheSA9PSBOb3RoaW5nKQotICAgICAgICBoaWRlKCk7Ci0KLSAgICBt
X3N0YXRlQmVpbmdEaXNwbGF5ZWQgPSBuZXdTdGF0ZVRvRGlzcGxheTsKLQotICAgIHN3aXRjaCAo
bV9zdGF0ZUJlaW5nRGlzcGxheWVkKSB7Ci0gICAgY2FzZSBOb3RoaW5nOgotICAgICAgICBzZXRJ
bm5lclRleHQoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTG9hZGlu
ZzoKLSAgICAgICAgc2V0SW5uZXJUZXh0KG1lZGlhRWxlbWVudExvYWRpbmdTdGF0ZVRleHQoKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGl2ZUJyb2FkY2FzdDoKLSAgICAgICAgc2V0SW5u
ZXJUZXh0KG1lZGlhRWxlbWVudExpdmVCcm9hZGNhc3RTdGF0ZVRleHQoKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRp
YUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0
b25FbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi0g
ICAgOiBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChkb2N1bWVudCwgTWVkaWFNdXRlQnV0
dG9uKQotICAgICwgbV9jb250cm9scyhjb250cm9scykKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0
cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1tdXRlLWJ1dHRvbiIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0
b25FbGVtZW50PiBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpjcmVhdGUoRG9j
dW1lbnQmIGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzKiBjb250cm9scykKLXsKLSAgICBBU1NFUlQo
Y29udHJvbHMpOwotCi0gICAgUmVmPE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+
IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVu
dChkb2N1bWVudCwgY29udHJvbHMpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJBZ2VudFNoYWRv
d1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIHJldHVybiBidXR0
b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpCi0gICAgICAgIG1fY29udHJvbHMtPnNob3dWb2x1
bWVTbGlkZXIoKTsKLQotICAgIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1NZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudDo6TWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAg
IDogTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhTXV0ZUJ1dHRv
bikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy12
b2x1bWUtc2xpZGVyLW11dGUtYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50
PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3Vt
ZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1
dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sVm9sdW1lU2xp
ZGVyTXV0ZUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJB
Z2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIHJl
dHVybiBidXR0b247Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVk
aWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50
KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1
bWVudCwgTWVkaWFQbGF5QnV0dG9uKQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50PiBNZWRp
YUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsK
LSAgICBSZWY8TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVm
KCpuZXcgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0
b24tPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1
dHRvbiIpOwotICAgIHJldHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGxheUJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewotICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgaWYg
KG1lZGlhQ29udHJvbGxlcigpLT5jYW5QbGF5KCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xs
ZXIoKS0+cGxheSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xsZXIo
KS0+cGF1c2UoKTsKLSAgICAgICAgdXBkYXRlRGlzcGxheVR5cGUoKTsKLSAgICAgICAgZXZlbnQu
c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVs
ZW1lbnQ6OnVwZGF0ZURpc3BsYXlUeXBlKCkKLXsKLSAgICBzZXREaXNwbGF5VHlwZShtZWRpYUNv
bnRyb2xsZXIoKS0+Y2FuUGxheSgpID8gTWVkaWFQbGF5QnV0dG9uIDogTWVkaWFQYXVzZUJ1dHRv
bik7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9s
T3ZlcmxheVBsYXlCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVs
ZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50
KGRvY3VtZW50LCBNZWRpYU92ZXJsYXlQbGF5QnV0dG9uKQotewotICAgIHNldFBzZXVkbyhBdG9t
U3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLW92ZXJsYXktcGxheS1idXR0b24iLCBBdG9t
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sT3Zl
cmxheVBsYXlCdXR0b25FbGVtZW50PiBNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1l
bnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbE92
ZXJsYXlQbGF5QnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRy
b2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0b24tPmVuc3Vy
ZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwot
ICAgIHJldHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0
b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAo
ZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIG1lZGlhQ29udHJvbGxl
cigpLT5jYW5QbGF5KCkpIHsKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPnBsYXkoKTsKLSAg
ICAgICAgdXBkYXRlRGlzcGxheVR5cGUoKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRs
ZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihl
dmVudCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0b25FbGVtZW50Ojp1
cGRhdGVEaXNwbGF5VHlwZSgpCi17Ci0gICAgaWYgKG1lZGlhQ29udHJvbGxlcigpLT5jYW5QbGF5
KCkpIHsKLSAgICAgICAgc2hvdygpOwotICAgIH0gZWxzZQotICAgICAgICBoaWRlKCk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sU2Vla0Zvcndh
cmRCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQoRG9j
dW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQoZG9j
dW1lbnQsIE1lZGlhU2Vla0ZvcndhcmRCdXR0b24pCi17Ci0gICAgc2V0UHNldWRvKEF0b21TdHJp
bmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtc2Vlay1mb3J3YXJkLWJ1dHRvbiIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xTZWVrRm9y
d2FyZEJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudDo6
Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sU2Vla0Zv
cndhcmRCdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFNl
ZWtGb3J3YXJkQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNl
ckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAg
cmV0dXJuIGJ1dHRvbjsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1N
ZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFNlZWtCYWNrQnV0
dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xTZWVrQnV0
dG9uRWxlbWVudChkb2N1bWVudCwgTWVkaWFTZWVrQmFja0J1dHRvbikKLXsKLSAgICBzZXRQc2V1
ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWJhY2stYnV0dG9uIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJv
bFNlZWtCYWNrQnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50
OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xTZWVr
QmFja0J1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sU2Vl
a0JhY2tCdXR0b25FbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgYnV0dG9uLT5lbnN1cmVVc2VyQWdl
bnRTaGFkb3dSb290KCk7Ci0gICAgYnV0dG9uLT5zZXRUeXBlKCJidXR0b24iKTsKLSAgICByZXR1
cm4gYnV0dG9uOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlh
Q29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1l
bnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KGRv
Y3VtZW50LCBNZWRpYVJld2luZEJ1dHRvbikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygi
LXdlYmtpdC1tZWRpYS1jb250cm9scy1yZXdpbmQtYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1l
bnQ+IE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9j
dW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ+IGJ1dHRv
biA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudChkb2N1bWVu
dCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRv
bi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRp
YUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBl
dmVudCkKLXsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50
KSB7Ci0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5zZXRDdXJyZW50VGltZShzdGQ6Om1heDxk
b3VibGU+KDAsIG1lZGlhQ29udHJvbGxlcigpLT5jdXJyZW50VGltZSgpIC0gMzApKTsKLSAgICAg
ICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ6
Ok1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50KERvY3VtZW50JiBkb2N1
bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1bWVudCwgTWVkaWFSZXR1
cm5Ub1JlYWx0aW1lQnV0dG9uKQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0
LW1lZGlhLWNvbnRyb2xzLXJldHVybi10by1yZWFsdGltZS1idXR0b24iLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sUmV0dXJuVG9SZWFs
dGltZUJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xS
ZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRp
YUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1
dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgi
YnV0dG9uIik7Ci0gICAgYnV0dG9uLT5oaWRlKCk7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQot
dm9pZCBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuY2xpY2tFdmVudCkgewotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+cmV0dXJu
VG9SZWFsdGltZSgpOwotICAgICAgICBldmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0K
LSAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25z
QnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhQ29udHJvbHMqIGNvbnRyb2xz
KQotICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KGRvY3VtZW50LCBNZWRpYVNob3dDbG9z
ZWRDYXB0aW9uc0J1dHRvbikKLSNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oV0lOKSB8
fCBQTEFURk9STShHVEspCi0gICAgLCBtX2NvbnRyb2xzKGNvbnRyb2xzKQotI2VuZGlmCi17Ci0j
aWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oV0lOKSB8fCAhUExBVEZPUk0oR1RLKQot
ICAgIFVOVVNFRF9QQVJBTShjb250cm9scyk7Ci0jZW5kaWYKLSAgICBzZXRQc2V1ZG8oQXRvbVN0
cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy10b2dnbGUtY2xvc2VkLWNhcHRpb25zLWJ1dHRv
biIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNv
bnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFRvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwg
TWVkaWFDb250cm9scyogY29udHJvbHMpCi17Ci0gICAgQVNTRVJUKGNvbnRyb2xzKTsKLQotICAg
IFJlZjxNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IGJ1dHRv
biA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25F
bGVtZW50KGRvY3VtZW50LCBjb250cm9scykpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFnZW50
U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgYnV0dG9u
LT5oaWRlKCk7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUb2dn
bGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OnVwZGF0ZURpc3BsYXlUeXBlKCkKLXsKLSAg
ICBib29sIGNhcHRpb25zVmlzaWJsZSA9IG1lZGlhQ29udHJvbGxlcigpLT5jbG9zZWRDYXB0aW9u
c1Zpc2libGUoKTsKLSAgICBzZXREaXNwbGF5VHlwZShjYXB0aW9uc1Zpc2libGUgPyBNZWRpYUhp
ZGVDbG9zZWRDYXB0aW9uc0J1dHRvbiA6IE1lZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uKTsK
LSAgICBzZXRDaGVja2VkKGNhcHRpb25zVmlzaWJsZSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
VG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50JiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlj
a0V2ZW50KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBncmVhdCB0aGF0IHRoZSBzaGFy
ZWQgY29kZSBpcyBkaWN0YXRpbmcgYmVoYXZpb3Igb2YgcGxhdGZvcm0tc3BlY2lmaWMKLSAgICAg
ICAgLy8gVUkuIE5vdCBhbGwgcG9ydHMgbWF5IHdhbnQgdGhlIGNsb3NlZCBjYXB0aW9ucyBidXR0
b24gdG8gdG9nZ2xlIGEgbGlzdCBvZiB0cmFja3MsIHNvCi0gICAgICAgIC8vIHdlIGhhdmUgdG8g
dXNlICNpZi4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMTg3NwotI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKFdJTikgJiYgIVBM
QVRGT1JNKEdUSykKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPnNldENsb3NlZENhcHRpb25z
VmlzaWJsZSghbWVkaWFDb250cm9sbGVyKCktPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpKTsKLSAg
ICAgICAgc2V0Q2hlY2tlZChtZWRpYUNvbnRyb2xsZXIoKS0+Y2xvc2VkQ2FwdGlvbnNWaXNpYmxl
KCkpOwotICAgICAgICB1cGRhdGVEaXNwbGF5VHlwZSgpOwotI2Vsc2UKLSAgICAgICAgbV9jb250
cm9scy0+dG9nZ2xlQ2xvc2VkQ2FwdGlvblRyYWNrTGlzdCgpOwotI2VuZGlmCi0gICAgICAgIGV2
ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfQotCi0gICAgSFRNTElucHV0RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNDb250YWluZXJFbGVtZW50OjpN
ZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50KQotICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChkb2N1bWVudCwgTWVkaWFDbG9zZWRD
YXB0aW9uc0NvbnRhaW5lcikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1t
ZWRpYS1jb250cm9scy1jbG9zZWQtY2FwdGlvbnMtY29udGFpbmVyIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25z
Q29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNDb250YWluZXJFbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xD
bG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IE1l
ZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCkpOwotICAg
IGVsZW1lbnQtPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZGlyQXR0ciwgQXRv
bVN0cmluZygiYXV0byIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAg
ZWxlbWVudC0+aGlkZSgpOwotICAgIHJldHVybiBlbGVtZW50OwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0
RWxlbWVudDo6TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50KERvY3Vt
ZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi0gICAgOiBNZWRpYUNvbnRy
b2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYUNsb3NlZENhcHRpb25zVHJhY2tMaXN0KQotI2lm
IEVOQUJMRShWSURFT19UUkFDSykKLSAgICAsIG1fY29udHJvbHMoY29udHJvbHMpCi0jZW5kaWYK
LXsKLSNpZiAhRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIFVOVVNFRF9QQVJBTShjb250cm9scyk7
Ci0jZW5kaWYKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9s
cy1jbG9zZWQtY2FwdGlvbnMtdHJhY2stbGlzdCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVs
ZW1lbnQ+IE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudDo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi17Ci0gICAgQVNT
RVJUKGNvbnRyb2xzKTsKLSAgICBSZWY8TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xp
c3RFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0
aW9uc1RyYWNrTGlzdEVsZW1lbnQoZG9jdW1lbnQsIGNvbnRyb2xzKSk7Ci0gICAgcmV0dXJuIGVs
ZW1lbnQ7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCkgewotICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KGV2ZW50LnRhcmdldCgpKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAvLyBXaGVuIHdlIGNyZWF0ZWQgdGhlIGVsZW1lbnRzIGlu
IHRoZSB0cmFjayBsaXN0LCB3ZSBnYXZlIHRoZW0gYSBjdXN0b20KLSAgICAgICAgLy8gYXR0cmli
dXRlIHJlcHJlc2VudGluZyB0aGUgaW5kZXggaW4gdGhlIEhUTUxNZWRpYUVsZW1lbnQncyBsaXN0
IG9mIHRyYWNrcy4KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50IHRhcmdldCBoYXMgc3Vj
aCBhIGN1c3RvbSBlbGVtZW50IGFuZCwgaWYgc28sCi0gICAgICAgIC8vIHRlbGwgdGhlIEhUTUxN
ZWRpYUVsZW1lbnQgdG8gZW5hYmxlIHRoYXQgdHJhY2suCi0KLSAgICAgICAgYXV0byB0ZXh0VHJh
Y2sgPSBtYWtlUmVmUHRyKG1fbWVudVRvVHJhY2tNYXAuZ2V0KCZkb3duY2FzdDxFbGVtZW50Pigq
ZXZlbnQudGFyZ2V0KCkpKSk7Ci0gICAgICAgIG1fbWVudVRvVHJhY2tNYXAuY2xlYXIoKTsKLSAg
ICAgICAgbV9jb250cm9scy0+dG9nZ2xlQ2xvc2VkQ2FwdGlvblRyYWNrTGlzdCgpOwotICAgICAg
ICBpZiAoIXRleHRUcmFjaykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvIG1l
ZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKLSAgICAgICAgaWYgKCFtZWRp
YUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbWVkaWFFbGVtZW50LT5z
ZXRTZWxlY3RlZFRleHRUcmFjayh0ZXh0VHJhY2suZ2V0KCkpOwotCi0gICAgICAgIHVwZGF0ZURp
c3BsYXkoKTsKLSAgICB9Ci0KLSAgICBNZWRpYUNvbnRyb2xEaXZFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKGV2ZW50KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsKLSNlbmRp
ZgotfQotCi12b2lkIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudDo6
dXBkYXRlRGlzcGxheSgpCi17Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5nPiBzZWxlY3RlZENsYXNzVmFsdWUoInNlbGVjdGVkIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAgaWYgKCFtZWRpYUNvbnRy
b2xsZXIoKS0+aGFzQ2xvc2VkQ2FwdGlvbnMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXM6OkNhcHRpb25EaXNwbGF5TW9kZSBkaXNwbGF5TW9kZSA9IGRvY3VtZW50KCkucGFn
ZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLmNhcHRpb25EaXNwbGF5TW9kZSgpOwot
Ci0gICAgYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0gICAg
aWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbWVkaWFFbGVt
ZW50LT50ZXh0VHJhY2tzKCkgfHwgIW1lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpLT5sZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVidWlsZFRyYWNrTGlzdE1lbnUoKTsKLQotICAg
IFJlZlB0cjxFbGVtZW50PiBvZmZNZW51SXRlbTsKLSAgICBib29sIHRyYWNrTWVudUl0ZW1TZWxl
Y3RlZCA9IGZhbHNlOwotCi0gICAgZm9yIChhdXRvJiB0cmFja0l0ZW0gOiBtX21lbnVJdGVtcykg
ewotICAgICAgICBSZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2s7Ci0gICAgICAgIE1lbnVJdGVt
VG9UcmFja01hcDo6aXRlcmF0b3IgaXRlciA9IG1fbWVudVRvVHJhY2tNYXAuZmluZCh0cmFja0l0
ZW0uZ2V0KCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX21lbnVUb1RyYWNrTWFwLmVuZCgpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHRleHRUcmFjayA9IGl0ZXItPnZhbHVlOwot
ICAgICAgICBpZiAoIXRleHRUcmFjaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IGlmICh0ZXh0VHJhY2sgPT0gJlRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpIHsKLSAg
ICAgICAgICAgIG9mZk1lbnVJdGVtID0gdHJhY2tJdGVtOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGV4dFRyYWNrID09ICZUZXh0VHJhY2s6OmNhcHRp
b25NZW51QXV0b21hdGljSXRlbSgpKSB7Ci0gICAgICAgICAgICBpZiAoZGlzcGxheU1vZGUgPT0g
Q2FwdGlvblVzZXJQcmVmZXJlbmNlczo6QXV0b21hdGljKQotICAgICAgICAgICAgICAgIHRyYWNr
SXRlbS0+Y2xhc3NMaXN0KCkuYWRkKHNlbGVjdGVkQ2xhc3NWYWx1ZSk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgdHJhY2tJdGVtLT5jbGFzc0xpc3QoKS5yZW1vdmUoc2VsZWN0
ZWRDbGFzc1ZhbHVlKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGRpc3BsYXlNb2RlICE9IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYyAm
JiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKLSAgICAg
ICAgICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgICAgICB0cmFja0l0
ZW0tPmNsYXNzTGlzdCgpLmFkZChzZWxlY3RlZENsYXNzVmFsdWUpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIHRyYWNrSXRlbS0+Y2xhc3NMaXN0KCkucmVtb3ZlKHNlbGVjdGVkQ2xhc3NW
YWx1ZSk7Ci0gICAgfQotCi0gICAgaWYgKG9mZk1lbnVJdGVtKSB7Ci0gICAgICAgIGlmIChkaXNw
bGF5TW9kZSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpGb3JjZWRPbmx5ICYmICF0cmFja01l
bnVJdGVtU2VsZWN0ZWQpCi0gICAgICAgICAgICBvZmZNZW51SXRlbS0+Y2xhc3NMaXN0KCkuYWRk
KHNlbGVjdGVkQ2xhc3NWYWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9mZk1lbnVJ
dGVtLT5jbGFzc0xpc3QoKS5yZW1vdmUoc2VsZWN0ZWRDbGFzc1ZhbHVlKTsKLSAgICB9Ci0jZW5k
aWYKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQ6
OnJlYnVpbGRUcmFja0xpc3RNZW51KCkKLXsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAg
Ly8gUmVtb3ZlIGFueSBleGlzdGluZyBjb250ZW50LgotICAgIHJlbW92ZUNoaWxkcmVuKCk7Ci0g
ICAgbV9tZW51SXRlbXMuY2xlYXIoKTsKLSAgICBtX21lbnVUb1RyYWNrTWFwLmNsZWFyKCk7Ci0K
LSAgICBpZiAoIW1lZGlhQ29udHJvbGxlcigpLT5oYXNDbG9zZWRDYXB0aW9ucygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0
aGlzKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byogdHJhY2tMaXN0ID0gbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7Ci0gICAgaWYgKCF0cmFj
a0xpc3QgfHwgIXRyYWNrTGlzdC0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvJiBjYXB0aW9u
UHJlZmVyZW5jZXMgPSBkb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5j
ZXMoKTsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IHRyYWNrc0Zvck1lbnUgPSBjYXB0
aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudSh0cmFja0xpc3QpOwotCi0gICAg
YXV0byBjYXB0aW9uc0hlYWRlciA9IEhUTUxIZWFkaW5nRWxlbWVudDo6Y3JlYXRlKGgzVGFnLCBk
b2N1bWVudCgpKTsKLSAgICBjYXB0aW9uc0hlYWRlci0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS5j
cmVhdGVUZXh0Tm9kZSh0ZXh0VHJhY2tTdWJ0aXRsZXNUZXh0KCkpKTsKLSAgICBhcHBlbmRDaGls
ZChjYXB0aW9uc0hlYWRlcik7Ci0gICAgYXV0byBjYXB0aW9uc01lbnVMaXN0ID0gSFRNTFVMaXN0
RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotCi0gICAgZm9yIChhdXRvJiB0ZXh0VHJhY2sg
OiB0cmFja3NGb3JNZW51KSB7Ci0gICAgICAgIGF1dG8gbWVudUl0ZW0gPSBIVE1MTElFbGVtZW50
OjpjcmVhdGUoZG9jdW1lbnQoKSk7Ci0gICAgICAgIG1lbnVJdGVtLT5hcHBlbmRDaGlsZChkb2N1
bWVudCgpLmNyZWF0ZVRleHROb2RlKGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5TmFtZUZvclRy
YWNrKHRleHRUcmFjay5nZXQoKSkpKTsKLSAgICAgICAgY2FwdGlvbnNNZW51TGlzdC0+YXBwZW5k
Q2hpbGQobWVudUl0ZW0pOwotICAgICAgICBtX21lbnVJdGVtcy5hcHBlbmQobWVudUl0ZW0ucHRy
KCkpOwotICAgICAgICBtX21lbnVUb1RyYWNrTWFwLmFkZChtZW51SXRlbS5wdHIoKSwgdGV4dFRy
YWNrKTsKLSAgICB9Ci0KLSAgICBhcHBlbmRDaGlsZChjYXB0aW9uc01lbnVMaXN0KTsKLSNlbmRp
ZgotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFRp
bWVsaW5lRWxlbWVudDo6TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50KERvY3VtZW50JiBkb2N1
bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVs
ZW1lbnQoZG9jdW1lbnQsIE1lZGlhU2xpZGVyKQotICAgICwgbV9jb250cm9scyhjb250cm9scykK
LXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
bGluZSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRp
YUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3Jl
YXRlKERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi17Ci0gICAg
QVNTRVJUKGNvbnRyb2xzKTsKLQotICAgIFJlZjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+
IHRpbWVsaW5lID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQoZG9j
dW1lbnQsIGNvbnRyb2xzKSk7Ci0gICAgdGltZWxpbmUtPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jv
b3QoKTsKLSAgICB0aW1lbGluZS0+c2V0VHlwZSgicmFuZ2UiKTsKLSAgICB0aW1lbGluZS0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwcmVjaXNpb25BdHRyLCBBdG9tU3RyaW5n
KCJmbG9hdCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgcmV0dXJu
IHRpbWVsaW5lOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgLy8gTGVmdCBidXR0b24gaXMgMC4g
UmVqZWN0cyBtb3VzZSBldmVudHMgbm90IGZyb20gbGVmdCBidXR0b24uCi0gICAgaWYgKGlzPE1v
dXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkuYnV0dG9uKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQp
Ci0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5iZWdpblNjcnViYmluZygpOwotCi0gICAgaWYg
KGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KQotICAgICAgICBtZWRp
YUNvbnRyb2xsZXIoKS0+ZW5kU2NydWJiaW5nKCk7Ci0KLSAgICBNZWRpYUNvbnRyb2xJbnB1dEVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAgaWYgKGV2ZW50LnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZW91dEV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vtb3ZlRXZlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRvdWJsZSB0aW1lID0gdmFsdWUo
KS50b0RvdWJsZSgpOwotICAgIGlmICgoZXZlbnQuaXNJbnB1dEV2ZW50KCkgfHwgZXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5pbnB1dEV2ZW50KSAmJiB0aW1lICE9IG1lZGlhQ29udHJvbGxl
cigpLT5jdXJyZW50VGltZSgpKQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0Q3VycmVu
dFRpbWUodGltZSk7Ci0KLSAgICBSZW5kZXJTbGlkZXImIHNsaWRlciA9IGRvd25jYXN0PFJlbmRl
clNsaWRlcj4oKnJlbmRlcmVyKCkpOwotICAgIGlmIChzbGlkZXIuaW5EcmFnTW9kZSgpKQotICAg
ICAgICBtX2NvbnRyb2xzLT51cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKTsKLX0KLQotI2lmICFQ
TEFURk9STShJT1NfRkFNSUxZKQotYm9vbCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6Ondp
bGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmIC8vICFQ
TEFURk9STShJT1NfRkFNSUxZKQotCi12b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6
c2V0UG9zaXRpb24oZG91YmxlIGN1cnJlbnRUaW1lKQotewotICAgIHNldFZhbHVlKFN0cmluZzo6
bnVtYmVyKGN1cnJlbnRUaW1lKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGltZWxpbmVFbGVt
ZW50OjpzZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgc2V0QXR0cmlidXRlKG1h
eEF0dHIsIEF0b21TdHJpbmc6Om51bWJlcihkdXJhdGlvbikpOwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVu
dDo6TWVkaWFDb250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50KERvY3VtZW50JiBkb2N1bWVu
dCkKLSAgICA6IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQoZG9jdW1lbnQpCi17Ci0g
ICAgc2V0UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNs
aWRlciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRp
YUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQ+IE1lZGlhQ29udHJvbFBhbmVsVm9sdW1l
U2xpZGVyRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVk
aWFDb250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50PiBzbGlkZXIgPSBhZG9wdFJlZigqbmV3
IE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudChkb2N1bWVudCkpOwotICAgIHNs
aWRlci0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIHNsaWRlci0+c2V0VHlwZSgi
cmFuZ2UiKTsKLSAgICBzbGlkZXItPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
cHJlY2lzaW9uQXR0ciwgQXRvbVN0cmluZygiZmxvYXQiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCkpOwotICAgIHNsaWRlci0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihtYXhBdHRyLCBBdG9tU3RyaW5nKCIxIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpKTsKLSAgICByZXR1cm4gc2xpZGVyOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50OjpN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYgZG9jdW1l
bnQpCi0gICAgOiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KGRvY3VtZW50KQotewot
ICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3Jl
ZW4tdm9sdW1lLXNsaWRlciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19
Ci0KLVJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudD4gTWVkaWFD
b250cm9sRnVsbHNjcmVlblZvbHVtZVNsaWRlckVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9j
dW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVt
ZW50PiBzbGlkZXIgPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVT
bGlkZXJFbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgc2xpZGVyLT5lbnN1cmVVc2VyQWdlbnRTaGFk
b3dSb290KCk7Ci0gICAgc2xpZGVyLT5zZXRUeXBlKCJyYW5nZSIpOwotICAgIHNsaWRlci0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwcmVjaXNpb25BdHRyLCBBdG9tU3RyaW5n
KCJmbG9hdCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgc2xpZGVy
LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1heEF0dHIsIEF0b21TdHJpbmco
IjEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBzbGlk
ZXI7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9s
RnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVt
ZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChk
b2N1bWVudCwgTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b24pCi17Ci0gICAgc2V0UHNldWRvKEF0
b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1idXR0b24iLCBBdG9t
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sRnVs
bHNjcmVlbkJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50
OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xG
dWxsc2NyZWVuQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNl
ckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAg
YnV0dG9uLT5oaWRlKCk7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZl
bnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkg
ewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICAgICAgLy8gT25seSB1c2UgdGhlIG5l
dyBmdWxsIHNjcmVlbiBBUEkgaWYgdGhlIGZ1bGxTY3JlZW5FbmFibGVkIHNldHRpbmcgaGFzCi0g
ICAgICAgIC8vIGJlZW4gZXhwbGljaXRseSBlbmFibGVkLiBPdGhlcndpc2UsIHVzZSB0aGUgb2xk
IGZ1bGxzY3JlZW4gQVBJLiBUaGlzCi0gICAgICAgIC8vIGFsbG93cyBhcHBzIHdoaWNoIGVtYmVk
IGEgV2ViVmlldyB0byByZXRhaW4gdGhlIGV4aXN0aW5nIGZ1bGwgc2NyZWVuCi0gICAgICAgIC8v
IHZpZGVvIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgcmVxdWlyaW5nIHRoZW0gdG8gaW1wbGVtZW50
IHRoZWlyIG93biBmdWxsCi0gICAgICAgIC8vIHNjcmVlbiBiZWhhdmlvci4KLSAgICAgICAgaWYg
KGRvY3VtZW50KCkuc2V0dGluZ3MoKS5mdWxsU2NyZWVuRW5hYmxlZCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoZG9jdW1lbnQoKS5mdWxsc2NyZWVuTWFuYWdlcigpLmlzRnVsbHNjcmVlbigpICYmIGRv
Y3VtZW50KCkuZnVsbHNjcmVlbk1hbmFnZXIoKS5jdXJyZW50RnVsbHNjcmVlbkVsZW1lbnQoKSA9
PSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcykpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5m
dWxsc2NyZWVuTWFuYWdlcigpLmNhbmNlbEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLmZ1bGxzY3JlZW5NYW5hZ2VyKCkucmVxdWVzdEZ1
bGxzY3JlZW5Gb3JFbGVtZW50KHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKS5nZXQoKSwgRnVsbHNj
cmVlbk1hbmFnZXI6OkV4ZW1wdElGcmFtZUFsbG93RnVsbHNjcmVlblJlcXVpcmVtZW50KTsKLSAg
ICAgICAgfSBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5lbnRl
ckZ1bGxzY3JlZW4oKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9
Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OnNldElzRnVsbHNjcmVl
bihib29sIGlzRnVsbHNjcmVlbikKLXsKLSAgICBzZXREaXNwbGF5VHlwZShpc0Z1bGxzY3JlZW4g
PyBNZWRpYUV4aXRGdWxsc2NyZWVuQnV0dG9uIDogTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b24p
OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9s
dW1lTWluQnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRy
b2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhVW5NdXRlQnV0dG9uKQotewotICAgIHNldFBz
ZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tdm9sdW1l
LW1pbi1idXR0b24iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1S
ZWY8TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRv
Y3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9u
RWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9s
dW1lTWluQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFn
ZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgcmV0
dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0
dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYg
KGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewotICAgICAgICBtZWRp
YUNvbnRyb2xsZXIoKS0+c2V0Vm9sdW1lKDApOwotICAgICAgICBldmVudC5zZXREZWZhdWx0SGFu
ZGxlZCgpOwotICAgIH0KLSAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sRnVsbHNj
cmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotOiBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhTXV0ZUJ1dHRvbikKLXsKLSAgICBzZXRQ
c2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2NyZWVuLXZvbHVt
ZS1tYXgtYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQot
UmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVtZW50PiBNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBk
b2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRv
bkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sRnVsbHNjcmVlblZv
bHVtZU1heEJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJB
Z2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIHJl
dHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewotICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgbWVk
aWFDb250cm9sbGVyKCktPnNldFZvbHVtZSgxKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhh
bmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFD
b250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lUmVtYWlu
aW5nRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9s
VGltZURpc3BsYXlFbGVtZW50KGRvY3VtZW50LCBNZWRpYVRpbWVSZW1haW5pbmdEaXNwbGF5KQot
ewotICAgIHNldFBzZXVkbyhnZXRNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1l
bnRTaGFkb3dQc2V1ZG9JZCgpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdE
aXNwbGF5RWxlbWVudD4gTWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50Ojpj
cmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1l
ZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudChkb2N1bWVudCkpOwotfQotCi1z
dGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZ2V0TWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3Bs
YXlFbGVtZW50U2hhZG93UHNldWRvSWQoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9tU3RyaW5nPiBpZCgiLXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNw
bGF5IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBpZDsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xDdXJy
ZW50VGltZURpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVt
ZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxl
bWVudChkb2N1bWVudCwgTWVkaWFDdXJyZW50VGltZURpc3BsYXkpCi17Ci0gICAgc2V0UHNldWRv
KGdldE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnRTaGFkb3dQc2V1ZG9JZCgp
KTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ+IE1lZGlh
Q29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1l
bnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sQ3VycmVudFRpbWVE
aXNwbGF5RWxlbWVudChkb2N1bWVudCkpOwotfQotCi1zdGF0aWMgY29uc3QgQXRvbVN0cmluZyYg
Z2V0TWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudFNoYWRvd1BzZXVkb0lkKCkK
LXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZz4gaWQoIi13ZWJraXQtbWVk
aWEtY29udHJvbHMtY3VycmVudC10aW1lLWRpc3BsYXkiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIGlkOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0KLU1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChkb2N1
bWVudCwgTWVkaWFUZXh0VHJhY2tEaXNwbGF5Q29udGFpbmVyKQotewotICAgIHNldFBzZXVkbyhB
dG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLXRleHQtdHJhY2stY29udGFpbmVyIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6
OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgYXV0byBlbGVtZW50ID0gYWRvcHRS
ZWYoKm5ldyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KGRvY3VtZW50KSk7
Ci0gICAgZWxlbWVudC0+aGlkZSgpOwotICAgIHJldHVybiBlbGVtZW50OwotfQotCi1SZW5kZXJQ
dHI8UmVuZGVyRWxlbWVudD4gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6
Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRy
ZWVQb3NpdGlvbiYpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxv
dz4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKLX0KLQotc3RhdGljIGJvb2wgY29tcGFyZUN1ZUlu
dGVydmFsRm9yRGlzcGxheShjb25zdCBDdWVJbnRlcnZhbCYgb25lLCBjb25zdCBDdWVJbnRlcnZh
bCYgdHdvKQotewotICAgIHJldHVybiBvbmUuZGF0YSgpLT5pc1Bvc2l0aW9uZWRBYm92ZSh0d28u
ZGF0YSgpKTsKLX07Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6dXBkYXRlRGlzcGxheSgpCi17Ci0gICAgaWYgKCFtZWRpYUNvbnRyb2xsZXIoKS0+Y2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlKCkpCi0gICAgICAgIHJlbW92ZUNoaWxkcmVuKCk7Ci0KLSAgICBhdXRv
IG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKLSAgICAvLyAxLiBJZiB0
aGUgbWVkaWEgZWxlbWVudCBpcyBhbiBhdWRpbyBlbGVtZW50LCBvciBpcyBhbm90aGVyIHBsYXli
YWNrCi0gICAgLy8gbWVjaGFuaXNtIHdpdGggbm8gcmVuZGVyaW5nIGFyZWEsIGFib3J0IHRoZXNl
IHN0ZXBzLiBUaGVyZSBpcyBub3RoaW5nIHRvCi0gICAgLy8gcmVuZGVyLgotICAgIGlmICghbWVk
aWFFbGVtZW50IHx8ICFtZWRpYUVsZW1lbnQtPmlzVmlkZW8oKSB8fCBtX3ZpZGVvRGlzcGxheVNp
emUuc2l6ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gMi4gTGV0IHZp
ZGVvIGJlIHRoZSBtZWRpYSBlbGVtZW50IG9yIG90aGVyIHBsYXliYWNrIG1lY2hhbmlzbS4KLSAg
ICBIVE1MVmlkZW9FbGVtZW50JiB2aWRlbyA9IGRvd25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KCpt
ZWRpYUVsZW1lbnQpOwotCi0gICAgLy8gMy4gTGV0IG91dHB1dCBiZSBhbiBlbXB0eSBsaXN0IG9m
IGFic29sdXRlbHkgcG9zaXRpb25lZCBDU1MgYmxvY2sgYm94ZXMuCi0KLSAgICAvLyA0LiBJZiB0
aGUgdXNlciBhZ2VudCBpcyBleHBvc2luZyBhIHVzZXIgaW50ZXJmYWNlIGZvciB2aWRlbywgYWRk
IHRvCi0gICAgLy8gb3V0cHV0IG9uZSBvciBtb3JlIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQgcG9z
aXRpb25lZCBDU1MgYmxvY2sgYm94ZXMgdGhhdAotICAgIC8vIGNvdmVyIHRoZSBzYW1lIHJlZ2lv
biBhcyB0aGUgdXNlciBpbnRlcmZhY2UuCi0KLSAgICAvLyA1LiBJZiB0aGUgbGFzdCB0aW1lIHRo
ZXNlIHJ1bGVzIHdlcmUgcnVuLCB0aGUgdXNlciBhZ2VudCB3YXMgbm90IGV4cG9zaW5nCi0gICAg
Ly8gYSB1c2VyIGludGVyZmFjZSBmb3IgdmlkZW8sIGJ1dCBub3cgaXQgaXMsIGxldCByZXNldCBi
ZSB0cnVlLiBPdGhlcndpc2UsCi0gICAgLy8gbGV0IHJlc2V0IGJlIGZhbHNlLgotCi0gICAgLy8g
VGhlcmUgaXMgbm90aGluZyB0byBiZSBkb25lIGV4cGxpY2l0bHkgZm9yIDR0aCBhbmQgNXRoIHN0
ZXBzLCBhcwotICAgIC8vIGV2ZXJ5dGhpbmcgaXMgaGFuZGxlZCB0aHJvdWdoIENTUy4gVGhlIGNh
cHRpb24gYm94IGlzIG9uIHRvcCBvZiB0aGUKLSAgICAvLyBjb250cm9scyBib3gsIGluIGEgY29u
dGFpbmVyIHNldCB3aXRoIHRoZSAtd2Via2l0LWJveCBkaXNwbGF5IHByb3BlcnR5LgotCi0gICAg
Ly8gNi4gTGV0IHRyYWNrcyBiZSB0aGUgc3Vic2V0IG9mIHZpZGVvJ3MgbGlzdCBvZiB0ZXh0IHRy
YWNrcyB0aGF0IGhhdmUgYXMKLSAgICAvLyB0aGVpciBydWxlcyBmb3IgdXBkYXRpbmcgdGhlIHRl
eHQgdHJhY2sgcmVuZGVyaW5nIHRoZXNlIHJ1bGVzIGZvcgotICAgIC8vIHVwZGF0aW5nIHRoZSBk
aXNwbGF5IG9mIFdlYlZUVCB0ZXh0IHRyYWNrcywgYW5kIHdob3NlIHRleHQgdHJhY2sgbW9kZSBp
cwotICAgIC8vIHNob3dpbmcgb3Igc2hvd2luZyBieSBkZWZhdWx0LgotICAgIC8vIDcuIExldCBj
dWVzIGJlIGFuIGVtcHR5IGxpc3Qgb2YgdGV4dCB0cmFjayBjdWVzLgotICAgIC8vIDguIEZvciBl
YWNoIHRyYWNrIHRyYWNrIGluIHRyYWNrcywgYXBwZW5kIHRvIGN1ZXMgYWxsIHRoZSBjdWVzIGZy
b20KLSAgICAvLyB0cmFjaydzIGxpc3Qgb2YgY3VlcyB0aGF0IGhhdmUgdGhlaXIgdGV4dCB0cmFj
ayBjdWUgYWN0aXZlIGZsYWcgc2V0LgotICAgIEN1ZUxpc3QgYWN0aXZlQ3VlcyA9IHZpZGVvLmN1
cnJlbnRseUFjdGl2ZUN1ZXMoKTsKLQotICAgIC8vIDkuIElmIHJlc2V0IGlzIGZhbHNlLCB0aGVu
LCBmb3IgZWFjaCB0ZXh0IHRyYWNrIGN1ZSBjdWUgaW4gY3VlczogaWYgY3VlJ3MKLSAgICAvLyB0
ZXh0IHRyYWNrIGN1ZSBkaXNwbGF5IHN0YXRlIGhhcyBhIHNldCBvZiBDU1MgYm94ZXMsIHRoZW4g
YWRkIHRob3NlIGJveGVzCi0gICAgLy8gdG8gb3V0cHV0LCBhbmQgcmVtb3ZlIGN1ZSBmcm9tIGN1
ZXMuCi0KLSAgICAvLyBUaGVyZSBpcyBub3RoaW5nIGV4cGxpY2l0bHkgdG8gYmUgZG9uZSBoZXJl
LCBhcyBhbGwgdGhlIGNhY2hpbmcgb2NjdXJzCi0gICAgLy8gd2l0aGluIHRoZSBUZXh0VHJhY2tD
dWUgaW5zdGFuY2UgaXRzZWxmLiBJZiBwYXJhbWV0ZXJzIG9mIHRoZSBjdWUgY2hhbmdlLAotICAg
IC8vIHRoZSBkaXNwbGF5IHRyZWUgaXMgY2xlYXJlZC4KLQotICAgIC8vIElmIHRoZSBudW1iZXIg
b2YgQ1NTIGJveGVzIGluIHRoZSBvdXRwdXQgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgY3Vl
cwotICAgIC8vIHdlIHdpc2ggdG8gcmVuZGVyIChlLmcuLCB3ZSBhcmUgYWRkaW5nIGFub3RoZXIg
Y3VlIGluIGEgc2V0IG9mIHJvbGwtdXAKLSAgICAvLyBjdWVzKSwgcmVtb3ZlIGFsbCB0aGUgZXhp
c3RpbmcgQ1NTIGJveGVzIHJlcHJlc2VudGluZyB0aGUgY3VlcyBhbmQgcmUtYWRkCi0gICAgLy8g
dGhlbSBzbyB0aGF0IHRoZSBuZXcgY3VlIGlzIGF0IHRoZSBib3R0b20uCi0gICAgLy8gRklYTUU6
IENhbGxpbmcgY291bnRDaGlsZE5vZGVzKCkgaGVyZSBpcyBpbmVmZmljaWVudC4gV2UgZG9uJ3Qg
bmVlZCB0bwotICAgIC8vIHRyYXZlcnNlIGFsbCBjaGlsZHJlbiBqdXN0IHRvIGNoZWNrIGlmIHRo
ZXJlIGFyZSBsZXNzIGNoaWxkcmVuIHRoYW4gY3Vlcy4KLSAgICBpZiAoY291bnRDaGlsZE5vZGVz
KCkgPCBhY3RpdmVDdWVzLnNpemUoKSkKLSAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oKTsKLQotICAg
IGFjdGl2ZUN1ZXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10gKEN1ZUludGVydmFsJiBjdWVJbnRlcnZh
bCkgewotICAgICAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBjdWVJbnRlcnZhbC5kYXRh
KCk7Ci0gICAgICAgIHJldHVybiAhY3VlLT50cmFjaygpCi0gICAgICAgICAgICB8fCAhY3VlLT50
cmFjaygpLT5pc1JlbmRlcmVkKCkKLSAgICAgICAgICAgIHx8IGN1ZS0+dHJhY2soKS0+bW9kZSgp
ID09IFRleHRUcmFjazo6TW9kZTo6RGlzYWJsZWQKLSAgICAgICAgICAgIHx8ICFjdWUtPmlzQWN0
aXZlKCkKLSAgICAgICAgICAgIHx8ICFjdWUtPmlzUmVuZGVyYWJsZSgpOwotICAgIH0pOwotCi0g
ICAgLy8gU29ydCB0aGUgYWN0aXZlIGN1ZXMgZm9yIHRoZSBhcHByb3ByaWF0ZSBkaXNwbGF5IG9y
ZGVyLiBGb3IgZXhhbXBsZSwgZm9yIHJvbGwtdXAKLSAgICAvLyBvciBwYWludC1vbiBjYXB0aW9u
cywgd2UgbmVlZCB0byBhZGQgdGhlIGN1ZXMgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVy
LAotICAgIC8vIHNvIHRoYXQgdGhlIG5ld2VzdCBjYXB0aW9ucyBhcHBlYXIgYXQgdGhlIGJvdHRv
bS4KLSAgICBzdGQ6OnNvcnQoYWN0aXZlQ3Vlcy5iZWdpbigpLCBhY3RpdmVDdWVzLmVuZCgpLCAm
Y29tcGFyZUN1ZUludGVydmFsRm9yRGlzcGxheSk7Ci0KLSAgICBpZiAobWVkaWFDb250cm9sbGVy
KCktPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpKSB7Ci0gICAgICAgIC8vIDEwLiBGb3IgZWFjaCB0
ZXh0IHRyYWNrIGN1ZSBpbiBjdWVzIHRoYXQgaGFzIG5vdCB5ZXQgaGFkCi0gICAgICAgIC8vIGNv
cnJlc3BvbmRpbmcgQ1NTIGJveGVzIGFkZGVkIHRvIG91dHB1dCwgaW4gdGV4dCB0cmFjayBjdWUg
b3JkZXIsIHJ1biB0aGUKLSAgICAgICAgLy8gZm9sbG93aW5nIHN1YnN0ZXBzOgotICAgICAgICBm
b3IgKGF1dG8mIGludGVydmFsIDogYWN0aXZlQ3VlcykgewotICAgICAgICAgICAgYXV0byBjdWUg
PSBpbnRlcnZhbC5kYXRhKCk7Ci0gICAgICAgICAgICBjdWUtPnNldEZvbnRTaXplKG1fZm9udFNp
emUsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCksIG1fZm9udFNpemVJc0ltcG9ydGFudCk7Ci0g
ICAgICAgICAgICBpZiAoaXM8VlRUQ3VlPigqY3VlKSkKLSAgICAgICAgICAgICAgICBwcm9jZXNz
QWN0aXZlVlRUQ3VlKGRvd25jYXN0PFZUVEN1ZT4oKmN1ZSkpOwotICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBkaXNwbGF5Qm94ID0gY3VlLT5nZXREaXNwbGF5VHJlZSht
X3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplKTsKLSAgICAgICAgICAgICAgICBp
ZiAoZGlzcGxheUJveC0+aGFzQ2hpbGROb2RlcygpICYmICFjb250YWlucyhkaXNwbGF5Qm94Lmdl
dCgpKSkKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ2hpbGQoKmRpc3BsYXlCb3gpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gMTEuIFJldHVybiBvdXRwdXQu
Ci0gICAgaWYgKGhhc0NoaWxkTm9kZXMoKSkKLSAgICAgICAgc2hvdygpOwotICAgIGVsc2UKLSAg
ICAgICAgaGlkZSgpOwotCi0gICAgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRl
ZCgpOwotICAgIHVwZGF0ZVRleHRUcmFja1N0eWxlKCk7Ci0gICAgbV9uZWVkc0dlbmVyYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24gPSB0cnVlOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJ
Zk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX25lZWRzR2VuZXJhdGVUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZWVkc0dlbmVyYXRlVGV4dFRyYWNrUmVw
cmVzZW50YXRpb24gPSBmYWxzZTsKLQotICAgIC8vIFdlIHNob3VsZCBjYWxsIG1fdGV4dFRyYWNr
UmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpIHRvIHBhaW50IHRoZSBzdWJ0cmVlIG9mCi0gICAgLy8g
dGhlIFJlbmRlclRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQgYWZ0ZXIgdGhlIGxheW91dCBpcyBj
bGVhbi4KLSAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikKLSAgICAgICAgbV90ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbi0+dXBkYXRlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6cHJvY2Vzc0FjdGl2ZVZUVEN1ZShWVFRDdWUmIGN1ZSkK
LXsKLSAgICBERUJVR19MT0coTE9HSURFTlRJRklFUiwgImFkZGluZyBhbmQgcG9zaXRpb25pbmcg
Y3VlOiBcIiIsIGN1ZS50ZXh0KCksICJcIiwgc3RhcnQ9IiwgY3VlLnN0YXJ0VGltZSgpLCAiLCBl
bmQ9IiwgY3VlLmVuZFRpbWUoKSwgIiwgbGluZT0iLCBjdWUubGluZSgpKTsKLSAgICBSZWY8VGV4
dFRyYWNrQ3VlQm94PiBkaXNwbGF5Qm94ID0gKmN1ZS5nZXREaXNwbGF5VHJlZShtX3ZpZGVvRGlz
cGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplKTsKLQotICAgIGlmIChhdXRvIHJlZ2lvbiA9IGN1
ZS50cmFjaygpLT5yZWdpb25zKCktPmdldFJlZ2lvbkJ5SWQoY3VlLnJlZ2lvbklkKCkpKSB7Ci0g
ICAgICAgIC8vIExldCByZWdpb24gYmUgdGhlIFdlYlZUVCByZWdpb24gd2hvc2UgcmVnaW9uIGlk
ZW50aWZpZXIKLSAgICAgICAgLy8gbWF0Y2hlcyB0aGUgdGV4dCB0cmFjayBjdWUgcmVnaW9uIGlk
ZW50aWZpZXIgb2YgY3VlLgotICAgICAgICBSZWY8SFRNTERpdkVsZW1lbnQ+IHJlZ2lvbk5vZGUg
PSByZWdpb24tPmdldERpc3BsYXlUcmVlKCk7Ci0KLSAgICAgICAgaWYgKCFjb250YWlucyhyZWdp
b25Ob2RlLnB0cigpKSkKLSAgICAgICAgICAgIGFwcGVuZENoaWxkKHJlZ2lvbi0+Z2V0RGlzcGxh
eVRyZWUoKSk7Ci0KLSAgICAgICAgcmVnaW9uLT5hcHBlbmRUZXh0VHJhY2tDdWVCb3goV1RGTW92
ZShkaXNwbGF5Qm94KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgY3VlIGhhcyBhbiBl
bXB0eSB0ZXh0IHRyYWNrIGN1ZSByZWdpb24gaWRlbnRpZmllciBvciB0aGVyZSBpcyBubwotICAg
ICAgICAvLyBXZWJWVFQgcmVnaW9uIHdob3NlIHJlZ2lvbiBpZGVudGlmaWVyIGlzIGlkZW50aWNh
bCB0byBjdWUncyB0ZXh0Ci0gICAgICAgIC8vIHRyYWNrIGN1ZSByZWdpb24gaWRlbnRpZmllciwg
cnVuIHRoZSBmb2xsb3dpbmcgc3Vic3RlcHM6Ci0gICAgICAgIGlmIChkaXNwbGF5Qm94LT5oYXND
aGlsZE5vZGVzKCkgJiYgIWNvbnRhaW5zKGRpc3BsYXlCb3gucHRyKCkpKSB7Ci0gICAgICAgICAg
ICAvLyBOb3RlOiB0aGUgZGlzcGxheSB0cmVlIG9mIGEgY3VlIGlzIHJlbW92ZWQgd2hlbiB0aGUg
YWN0aXZlIGZsYWcgb2YgdGhlIGN1ZSBpcyB1bnNldC4KLSAgICAgICAgICAgIGFwcGVuZENoaWxk
KGRpc3BsYXlCb3gpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZUFjdGl2ZUN1ZXNGb250U2l6ZSgpCi17Ci0g
ICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBt
ZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0gICAgaWYgKCFtZWRpYUVs
ZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHNtYWxsZXN0RGltZW5zaW9uID0g
c3RkOjptaW4obV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWlnaHQoKSwgbV92aWRlb0Rpc3Bs
YXlTaXplLnNpemUoKS53aWR0aCgpKTsKLSAgICBmbG9hdCBmb250U2NhbGUgPSBkb2N1bWVudCgp
LnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5jYXB0aW9uRm9udFNpemVTY2Fs
ZUFuZEltcG9ydGFuY2UobV9mb250U2l6ZUlzSW1wb3J0YW50KTsKLSAgICBtX2ZvbnRTaXplID0g
bHJvdW5kZihzbWFsbGVzdERpbWVuc2lvbiAqIGZvbnRTY2FsZSk7Ci0KLSAgICBmb3IgKGF1dG8m
IGFjdGl2ZUN1ZSA6IG1lZGlhRWxlbWVudC0+Y3VycmVudGx5QWN0aXZlQ3VlcygpKSB7Ci0gICAg
ICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9IGFjdGl2ZUN1ZS5kYXRhKCk7Ci0gICAgICAg
IGlmIChjdWUtPmlzUmVuZGVyYWJsZSgpKQotICAgICAgICAgICAgY3VlLT5zZXRGb250U2l6ZSht
X2ZvbnRTaXplLCBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplSXNJbXBvcnRh
bnQpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50Ojp1cGRhdGVUZXh0U3Ryb2tlU3R5bGUoKQotewotICAgIGlmICghZG9jdW1lbnQoKS5wYWdl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVk
aWFFbGVtZW50KHRoaXMpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgU3RyaW5nIGxhbmd1YWdlOwotCi0gICAgLy8gRklYTUU6IFNpbmNlIGl0IGlz
IHBvc3NpYmxlIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSB0ZXh0IHRyYWNrIGVuYWJsZWQsIHRoZSBm
b2xsb3dpbmcgY29kZSBtYXkgbm90IGZpbmQgdGhlIGNvcnJlY3QgbGFuZ3VhZ2UuCi0gICAgLy8g
VGhlIGRlZmF1bHQgVUkgb25seSBhbGxvd3MgYSB1c2VyIHRvIGVuYWJsZSBvbmUgdHJhY2sgYXQg
YSB0aW1lLCBzbyBpdCBzaG91bGQgYmUgT0sgZm9yIG5vdywgYnV0IHdlIHNob3VsZCBjb25zaWRl
ciBkb2luZwotICAgIC8vIHRoaXMgZGlmZmVyZW50bHksIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTg3NT4uCi0gICAgaWYgKGF1dG8qIHRyYWNrcyA9IG1l
ZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0cmFja3MtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8gdHJhY2sgPSB0
cmFja3MtPml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAodHJhY2sgJiYgdHJhY2stPm1vZGUoKSA9
PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKLSAgICAgICAgICAgICAgICBsYW5ndWFnZSA9
IHRyYWNrLT52YWxpZEJDUDQ3TGFuZ3VhZ2UoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZsb2F0IHN0cm9rZVdpZHRoOwot
ICAgIGJvb2wgaW1wb3J0YW50OwotCi0gICAgLy8gRklYTUU6IGZpbmQgYSB3YXkgdG8gc2V0IHRo
aXMgcHJvcGVydHkgaW4gdGhlIHN0eWxlc2hlZXQgbGlrZSB0aGUgb3RoZXIgdXNlciBzdHlsZSBw
cmVmZXJlbmNlcywgc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY5ODc0Pi4KLSAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZl
cmVuY2VzKCkuY2FwdGlvblN0cm9rZVdpZHRoRm9yRm9udChtX2ZvbnRTaXplLCBsYW5ndWFnZSwg
c3Ryb2tlV2lkdGgsIGltcG9ydGFudCkpCi0gICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlTdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgsIENTU1VuaXRUeXBlOjpDU1NfUFgs
IGltcG9ydGFudCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxl
bWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpCi17Ci0gICAgYXV0
byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0gICAgaWYgKCFtZWRp
YUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVxdWlyZXNUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbiA9IG1lZGlhRWxlbWVudC0+cmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbigpOwotICAgIGlmICghaGFzQ2hpbGROb2RlcygpIHx8ICFyZXF1aXJlc1RleHRUcmFja1Jl
cHJlc2VudGF0aW9uKSB7Ci0gICAgICAgIGlmIChtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uKSB7
Ci0gICAgICAgICAgICBpZiAoIXJlcXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCi0gICAg
ICAgICAgICAgICAgY2xlYXJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNldEhpZGRl
bih0cnVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFt
X3RleHRUcmFja1JlcHJlc2VudGF0aW9uKSB7Ci0gICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJ
RklFUik7Ci0KLSAgICAgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IFRleHRUcmFja1Jl
cHJlc2VudGF0aW9uOjpjcmVhdGUoKnRoaXMpOwotICAgICAgICBpZiAoZG9jdW1lbnQoKS5wYWdl
KCkpCi0gICAgICAgICAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT5zZXRDb250ZW50U2Nh
bGUoZG9jdW1lbnQoKS5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICBtZWRp
YUVsZW1lbnQtPnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKG1fdGV4dFRyYWNrUmVwcmVzZW50
YXRpb24uZ2V0KCkpOwotICAgIH0KLQotICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNl
dEhpZGRlbihmYWxzZSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6Y2xlYXJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpCi17Ci0gICAgaWYgKCFtX3Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBTFdBWVNfTE9H
KExPR0lERU5USUZJRVIpOwotCi0gICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IG51bGxw
dHI7Ci0gICAgaWYgKGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHRoaXMp
KQotICAgICAgICBtZWRpYUVsZW1lbnQtPnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKG51bGxw
dHIpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVw
ZGF0ZVRleHRUcmFja1N0eWxlKCkKLXsKLSAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlv
bikgewotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24s
IENTU1ZhbHVlQWJzb2x1dGUpOwotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5V2lkdGgsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkud2lkdGgoKSwgQ1NTVW5pdFR5
cGU6OkNTU19QWCk7Ci0gICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlI
ZWlnaHQsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkuaGVpZ2h0KCksIENTU1VuaXRUeXBlOjpD
U1NfUFgpOwotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwg
MCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlUb3AsIDAsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0
aW9uKTsKLSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgpOwot
ICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQpOwotICAgIHJl
bW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0KTsKLSAgICByZW1vdmVJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjplbnRlcmVkRnVsbHNjcmVlbigpCi17Ci0gICAgdXBk
YXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOwotICAgIHVwZGF0ZVNpemVzKEZv
cmNlVXBkYXRlOjpZZXMpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OmV4aXRlZEZ1bGxzY3JlZW4oKQotewotICAgIGNsZWFyVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24oKTsKLSAgICB1cGRhdGVTaXplcyhGb3JjZVVwZGF0ZTo6WWVzKTsKLX0KLQotYm9v
bCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVWaWRlb0Rpc3Bs
YXlTaXplKCkKLXsKLSAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlz
KTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
SW50UmVjdCB2aWRlb0JveDsKLSAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgewot
ICAgICAgICB2aWRlb0JveCA9IG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPmJvdW5kcygpOwot
ICAgICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IGRvY3VtZW50KCkucGFnZSgpLT5kZXZp
Y2VTY2FsZUZhY3RvcigpOwotICAgICAgICB2aWRlb0JveC5zZXRXaWR0aCh2aWRlb0JveC53aWR0
aCgpICogZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgICAgICB2aWRlb0JveC5zZXRIZWlnaHQodmlk
ZW9Cb3guaGVpZ2h0KCkgKiBkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKCFpczxSZW5kZXJWaWRlbz4obWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmlkZW9Cb3ggPSBkb3duY2FzdDxSZW5kZXJW
aWRlbz4oKm1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSkudmlkZW9Cb3goKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV92aWRlb0Rpc3BsYXlTaXplID09IHZpZGVvQm94KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBtX3ZpZGVvRGlzcGxheVNpemUgPSB2aWRlb0JveDsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRh
dGVTaXplcyhGb3JjZVVwZGF0ZSBmb3JjZSkKLXsKLSAgICBpZiAoIXVwZGF0ZVZpZGVvRGlzcGxh
eVNpemUoKSAmJiBmb3JjZSAhPSBGb3JjZVVwZGF0ZTo6WWVzKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
IG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKLSAgICBpZiAoIW1lZGlh
RWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFFbGVtZW50LT5zeW5jVGV4dFRy
YWNrQm91bmRzKCk7Ci0KLSAgICB1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKTsKLSAgICB1cGRh
dGVUZXh0U3Ryb2tlU3R5bGUoKTsKLSAgICBmb3IgKGF1dG8mIGFjdGl2ZUN1ZSA6IG1lZGlhRWxl
bWVudC0+Y3VycmVudGx5QWN0aXZlQ3VlcygpKQotICAgICAgICBhY3RpdmVDdWUuZGF0YSgpLT5y
ZWNhbGN1bGF0ZVN0eWxlcygpOwotCi0gICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNd
ICgpIHsKLSAgICAgICAgdXBkYXRlRGlzcGxheSgpOwotICAgIH0pOwotfQotCi1SZWZQdHI8SW1h
Z2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFj
a1JlcHJlc2VudGF0aW9uSW1hZ2UoKQotewotICAgIGlmICghaGFzQ2hpbGROb2RlcygpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBkb2N1bWVu
dCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwotCi0gICAgYXV0byogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgaWYgKCFyZW5kZXJlci0+aGFzTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1v
ZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7Ci0KLSAgICBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvciA9IDE7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAg
ICAgZGV2aWNlU2NhbGVGYWN0b3IgPSBwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotCi0gICAg
SW50UmVjdCBwYWludGluZ1JlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5zaXplKCkp
OwotCi0gICAgLy8gRklYTUUgKDE0OTQyMik6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5j
b25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3RvcikpOwotICAgIGlmICgh
YnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcGFpbnRGbGFncyA9
IFJlbmRlckxheWVyOjpwYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ0FsbFBoYXNlc0ZsYWdz
KCk7Ci0gICAgcGFpbnRGbGFncy5hZGQoUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJUZW1wb3JhcnlD
bGlwUmVjdHMpOwotICAgIGxheWVyLT5wYWludChidWZmZXItPmNvbnRleHQoKSwgcGFpbnRpbmdS
ZWN0LCBMYXlvdXRTaXplKCksIHsgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5
ZXJzLCBQYWludEJlaGF2aW9yOjpTbmFwc2hvdHRpbmcgfSwgbnVsbHB0ciwgcGFpbnRGbGFncyk7
Ci0KLSAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShidWZmZXIp
KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp0ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQoY29uc3QgSW50UmVjdCYpCi17Ci0gICAg
dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOwotICAgIHVwZGF0ZVNpemVz
KCk7Ci19Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLWNvbnN0IExvZ2dlciYgTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nZ2VyKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fbG9nZ2VyKQotICAgICAgICBtX2xvZ2dlciA9ICZkb2N1bWVudCgpLmxvZ2dlcigpOwot
Ci0gICAgcmV0dXJuICptX2xvZ2dlcjsKLX0KLQotY29uc3Qgdm9pZCogTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nSWRlbnRpZmllcigpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2xvZ0lkZW50aWZpZXIpIHsKLSAgICAgICAgaWYgKGF1dG8gbWVkaWFFbGVtZW50ID0gcGFy
ZW50TWVkaWFFbGVtZW50KHRoaXMpKQotICAgICAgICAgICAgbV9sb2dJZGVudGlmaWVyID0gbWVk
aWFFbGVtZW50LT5sb2dJZGVudGlmaWVyKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fbG9nSWRl
bnRpZmllcjsKLX0KLQotV1RGTG9nQ2hhbm5lbCYgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudDo6bG9nQ2hhbm5lbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIExvZ01lZGlhOwot
fQotI2VuZGlmIC8vICFSRUxFQVNFX0xPR19ESVNBQkxFRAotCi0jZW5kaWYgLy8gRU5BQkxFKFZJ
REVPX1RSQUNLKQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3NmIxNGQ2ZjUyYmU2YTBlNzM4MTkxNzI5M2Q1Mzc3OWJjZjkxZDky
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw1MzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRl
ICJHZW5lcmljVGFza1F1ZXVlLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudFR5cGVz
LmgiCi0jaW5jbHVkZSAiVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uaCIKLSNpbmNsdWRlIDx3dGYv
TG9nZ2VySGVscGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQgZmluYWwg
OiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9D
QVRFRChNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
TWVkaWFDb250cm9sUGFuZWxFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQg
c2V0Q2FuQmVEcmFnZ2VkKGJvb2wpOwotICAgIHZvaWQgc2V0SXNEaXNwbGF5ZWQoYm9vbCk7Ci0K
LSAgICB2b2lkIHJlc2V0UG9zaXRpb24oKTsKLSAgICB2b2lkIG1ha2VPcGFxdWUoKTsKLSAgICB2
b2lkIG1ha2VUcmFuc3BhcmVudCgpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
Ym9vbCB3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNv
bnRyb2xQYW5lbEVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzdGFydERyYWcoY29uc3QgTGF5b3V0
UG9pbnQmIGV2ZW50TG9jYXRpb24pOwotICAgIHZvaWQgY29udGludWVEcmFnKGNvbnN0IExheW91
dFBvaW50JiBldmVudExvY2F0aW9uKTsKLSAgICB2b2lkIGVuZERyYWcoKTsKLQotICAgIHZvaWQg
c3RhcnRUaW1lcigpOwotICAgIHZvaWQgc3RvcFRpbWVyKCk7Ci0gICAgdm9pZCB0cmFuc2l0aW9u
VGltZXJGaXJlZCgpOwotCi0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBMYXlvdXRQb2ludCYp
OwotCi0gICAgYm9vbCBtX2NhbkJlRHJhZ2dlZDsKLSAgICBib29sIG1faXNCZWluZ0RyYWdnZWQ7
Ci0gICAgYm9vbCBtX2lzRGlzcGxheWVkOwotICAgIGJvb2wgbV9vcGFxdWU7Ci0gICAgTGF5b3V0
UG9pbnQgbV9sYXN0RHJhZ0V2ZW50TG9jYXRpb247Ci0gICAgTGF5b3V0UG9pbnQgbV9jdW11bGF0
aXZlRHJhZ09mZnNldDsKLQotICAgIFRpbWVyIG1fdHJhbnNpdGlvblRpbWVyOwotfTsKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xQYW5lbEVu
Y2xvc3VyZUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0g
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVsZW1l
bnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVF
bGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRp
YUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVsZW1lbnQoRG9jdW1lbnQmKTsKLX07Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sT3ZlcmxheUVuY2xv
c3VyZUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xPdmVybGF5RW5jbG9zdXJlRWxlbWVu
dCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xPdmVybGF5RW5jbG9zdXJl
RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVk
aWFDb250cm9sT3ZlcmxheUVuY2xvc3VyZUVsZW1lbnQoRG9jdW1lbnQmKTsKLX07Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sVGltZWxpbmVD
b250YWluZXJFbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgewot
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJF
bGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFRpbWVsaW5lQ29u
dGFpbmVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIHNldFRpbWVEaXNw
bGF5c0hpZGRlbihib29sKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIFJlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVu
ZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1l
bnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KTsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5l
ckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci0KLSAgICBSZW5kZXJQdHI8UmVuZGVy
RWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRl
clRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudCBmaW5hbCA6
IHB1YmxpYyBNZWRpYUNvbnRyb2xEaXZFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEKE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQm
KTsKLQotICAgIHZvaWQgdXBkYXRlKCk7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFD
b250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIGVudW0gU3RhdGVC
ZWluZ0Rpc3BsYXllZCB7IE5vdGhpbmcsIExvYWRpbmcsIExpdmVCcm9hZGNhc3QgfTsKLSAgICBT
dGF0ZUJlaW5nRGlzcGxheWVkIG1fc3RhdGVCZWluZ0Rpc3BsYXllZDsKLX07Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0
dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudCB7
Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25F
bGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1
dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYsIE1lZGlhQ29udHJvbHMqKTsKLQotI2lmICFQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50
cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmLCBNZWRp
YUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVy
cmlkZTsKLQotICAgIE1lZGlhQ29udHJvbHMqIG1fY29udHJvbHM7Ci19OwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11
dGVCdXR0b25FbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVt
ZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFZvbHVtZVNsaWRl
ck11dGVCdXR0b25FbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxl
bWVudChEb2N1bWVudCYpOwotfTsKLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLWNsYXNzIE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50IGZpbmFsIDogcHVibGljIE1l
ZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRp
YUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRp
YUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRz
KCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHVwZGF0ZURp
c3BsYXlUeXBlKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250
cm9sUGxheUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQgZmlu
YWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKE1lZGlhQ29udHJvbE92ZXJsYXlQbGF5QnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQ+IGNy
ZWF0ZShEb2N1bWVudCYpOwotCi0gICAgdm9pZCB1cGRhdGVEaXNwbGF5VHlwZSgpIG92ZXJyaWRl
OwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbE92ZXJsYXlQbGF5QnV0dG9u
RWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNs
YXNzIE1lZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBN
ZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChNZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8TWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50PiBjcmVhdGUoRG9j
dW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xTZWVrRm9yd2Fy
ZEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIGJvb2wgaXNGb3J3YXJkQnV0dG9uKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQg
ZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQgewotICAgIFdURl9N
QUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50KTsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9s
U2Vla0JhY2tCdXR0b25FbGVtZW50KERvY3VtZW50Jik7Ci0KLSAgICBib29sIGlzRm9yd2FyZEJ1
dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci19OwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQpOwotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudD4gY3Jl
YXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdp
bGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQot
I2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sUmV3aW5kQnV0dG9u
RWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNs
YXNzIE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50IGZpbmFsIDogcHVi
bGljIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29s
IHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sUmV0dXJuVG9S
ZWFsdGltZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9u
RWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYsIE1lZGlhQ29udHJvbHMq
KTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01v
dXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotICAg
IHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBleHBs
aWNpdCBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQoRG9jdW1l
bnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQmKSBvdmVycmlkZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShXSU4pIHx8
IFBMQVRGT1JNKEdUSykKLSAgICBNZWRpYUNvbnRyb2xzKiBtX2NvbnRyb2xzOwotI2VuZGlmCi19
OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJv
bENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRy
b2xEaXZFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbENs
b3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxN
ZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVu
dCYpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9uZFRv
TW91c2VDbGlja0V2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi1w
cml2YXRlOgotICAgIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudChE
b2N1bWVudCYpOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFz
cyBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQgZmluYWwgOiBwdWJs
aWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChN
ZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQpOwotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50PiBj
cmVhdGUoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHVwZGF0ZURpc3BsYXkoKTsKLQot
cHJpdmF0ZToKLSAgICBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQo
RG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIHJlYnVpbGRUcmFja0xpc3RN
ZW51KCk7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsK
LQotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4gVHJhY2tNZW51SXRlbXM7Ci0g
ICAgVHJhY2tNZW51SXRlbXMgbV9tZW51SXRlbXM7Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQot
ICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxUZXh0VHJhY2s+PiBN
ZW51SXRlbVRvVHJhY2tNYXA7Ci0gICAgTWVudUl0ZW1Ub1RyYWNrTWFwIG1fbWVudVRvVHJhY2tN
YXA7Ci0jZW5kaWYKLSAgICBNZWRpYUNvbnRyb2xzKiBtX2NvbnRyb2xzOwotfTsKLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xUaW1lbGluZUVs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudCk7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IGNyZWF0ZShEb2N1
bWVudCYsIE1lZGlhQ29udHJvbHMqKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZTsKLSNlbmRpZgot
Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihkb3VibGUpOwotICAgIHZvaWQgc2V0RHVyYXRpb24oZG91
YmxlKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1l
bnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIE1lZGlhQ29udHJvbHMqIG1fY29udHJvbHM7
Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbElu
cHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuQnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRz
KCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHNldElzRnVs
bHNjcmVlbihib29sKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuQnV0dG9uRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudCBmaW5h
bCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50IHsKLSAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudCk7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1l
bnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29u
dHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYpOwotfTsKLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVt
ZVNsaWRlckVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxl
bWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xGdWxsc2NyZWVu
Vm9sdW1lU2xpZGVyRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLXBy
aXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZVNsaWRlckVs
ZW1lbnQoRG9jdW1lbnQmKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotY2xhc3MgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1dHRvbkVsZW1lbnQgZmlu
YWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50KTsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5C
dXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9uRWxlbWVudChEb2N1bWVudCYpOwotICAgIHZv
aWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9s
dW1lTWF4QnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sRnVsbHNjcmVlblZv
bHVtZU1heEJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250
cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwot
Ci0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VD
bGlja0V2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi1wcml2YXRl
OgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVt
ZW50KERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBv
dmVycmlkZTsKLX07Ci0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFz
cyBNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQgZmluYWwgOiBwdWJsaWMg
TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEKE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudCk7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQ+IGNy
ZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbFRp
bWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudChEb2N1bWVudCYpOwotfTsKLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3Bs
YXlFbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudCB7
Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3Bs
YXlFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbEN1cnJlbnRU
aW1lRGlzcGxheUVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmKTsK
LX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIEVOQUJMRShWSURF
T19UUkFDSykKLQotY2xhc3MgVlRUQ3VlOwotCi1jbGFzcyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50IGZpbmFsCi0gICAgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVu
dAotICAgICwgcHVibGljIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50Ci0jaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECi0gICAgLCBwcml2YXRlIExvZ2dlckhlbHBlcgotI2VuZGlmCi17Ci0g
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi0gICAgZW51bSBjbGFzcyBGb3Jj
ZVVwZGF0ZSB7IFllcywgTm8gfTsKLSAgICB2b2lkIHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlIGZv
cmNlID0gRm9yY2VVcGRhdGU6Ok5vKTsKLSAgICB2b2lkIHVwZGF0ZURpc3BsYXkoKTsKLQotICAg
IHZvaWQgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKCk7Ci0KLSAg
ICB2b2lkIGVudGVyZWRGdWxsc2NyZWVuKCk7Ci0gICAgdm9pZCBleGl0ZWRGdWxsc2NyZWVuKCk7
Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgLy8gRWxlbWVudAotICAgIFJlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVu
ZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkNsaWVudAotICAgIFJlZlB0cjxJbWFnZT4gY3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25JbWFnZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgdGV4dFRyYWNrUmVwcmVzZW50YXRpb25Cb3Vu
ZHNDaGFuZ2VkKGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdXBkYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOwotICAgIHZvaWQgY2xlYXJUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbigpOwotCi0gICAgYm9vbCB1cGRhdGVWaWRlb0Rpc3BsYXlTaXplKCk7Ci0g
ICAgdm9pZCB1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKTsKLSAgICB2b2lkIHVwZGF0ZVRleHRT
dHJva2VTdHlsZSgpOwotICAgIHZvaWQgcHJvY2Vzc0FjdGl2ZVZUVEN1ZShWVFRDdWUmKTsKLSAg
ICB2b2lkIHVwZGF0ZVRleHRUcmFja1N0eWxlKCk7Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJM
RUQKLSAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsOwotICAgIGNvbnN0IHZv
aWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbDsKLSAgICBXVEZMb2dDaGFubmVsJiBsb2dD
aGFubmVsKCkgY29uc3QgZmluYWw7Ci0gICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIk1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQi
OyB9Ci0gICAgbXV0YWJsZSBSZWZQdHI8TG9nZ2VyPiBtX2xvZ2dlcjsKLSAgICBtdXRhYmxlIGNv
bnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsKLSNlbmRpZgotCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFRleHRUcmFja1JlcHJlc2VudGF0aW9uPiBtX3RleHRUcmFja1JlcHJlc2Vu
dGF0aW9uOwotCi0gICAgR2VuZXJpY1Rhc2tRdWV1ZTxUaW1lcj4gbV90YXNrUXVldWU7Ci0gICAg
SW50UmVjdCBtX3ZpZGVvRGlzcGxheVNpemU7Ci0gICAgaW50IG1fZm9udFNpemUgeyAwIH07Ci0g
ICAgYm9vbCBtX2ZvbnRTaXplSXNJbXBvcnRhbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9uZWVk
c0dlbmVyYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24geyBmYWxzZSB9OwotfTsKLQotI2VuZGlm
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmMxZGViY2Vl
MmY2M2RmNjdkMTQzNDYyNzIyNzUzMmQ2MDY1Y2I3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQuY3BwCkBAIC0wLDAgKzEsNDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oIgorCisjaWYgRU5BQkxFKFZJREVPKQor
CisjaW5jbHVkZSAiRE9NVG9rZW5MaXN0LmgiCisjaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGdWxsc2NyZWVuTWFuYWdlci5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUE9ESW50ZXJ2YWwuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNp
bmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJT
dHlsZVByb3BlcnRpZXMuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWVHZW5lcmljLmgiCisjaW5j
bHVkZSAiVGV4dFRyYWNrTGlzdC5oIgorI2luY2x1ZGUgIlZUVFJlZ2lvbkxpc3QuaCIKKyNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9MYW5ndWFnZS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KTsKKwordXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworUmVmPE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIEhUTUxNZWRpYUVsZW1lbnQmIG1lZGlh
RWxlbWVudCkKK3sKKyAgICBhdXRvIGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQoZG9jdW1lbnQsIG1lZGlhRWxlbWVudCkpOworICAg
IGVsZW1lbnQtPmhpZGUoKTsKKyAgICByZXR1cm4gZWxlbWVudDsKK30KKworTWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCisg
ICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIGRvY3VtZW50KQorICAgICwgbV9tZWRpYUVsZW1l
bnQobWFrZVdlYWtQdHIoJmVsZW1lbnQpKQoreworICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCIt
d2Via2l0LW1lZGlhLXRleHQtdHJhY2stY29udGFpbmVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpKTsKK30KKworUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJT
dHlsZSYmIHN0eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKQoreworICAgIHJldHVybiBj
cmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7Cit9
CisKK3N0YXRpYyBib29sIGNvbXBhcmVDdWVJbnRlcnZhbEZvckRpc3BsYXkoY29uc3QgQ3VlSW50
ZXJ2YWwmIG9uZSwgY29uc3QgQ3VlSW50ZXJ2YWwmIHR3bykKK3sKKyAgICByZXR1cm4gb25lLmRh
dGEoKS0+aXNQb3NpdGlvbmVkQWJvdmUodHdvLmRhdGEoKSk7Cit9OworCit2b2lkIE1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZURpc3BsYXkoKQoreworICAgIGlm
IChtX21lZGlhRWxlbWVudCAmJiAhbV9tZWRpYUVsZW1lbnQtPmNsb3NlZENhcHRpb25zVmlzaWJs
ZSgpKQorICAgICAgICByZW1vdmVDaGlsZHJlbigpOworCisgICAgLy8gMS4gSWYgdGhlIG1lZGlh
IGVsZW1lbnQgaXMgYW4gYXVkaW8gZWxlbWVudCwgb3IgaXMgYW5vdGhlciBwbGF5YmFjaworICAg
IC8vIG1lY2hhbmlzbSB3aXRoIG5vIHJlbmRlcmluZyBhcmVhLCBhYm9ydCB0aGVzZSBzdGVwcy4g
VGhlcmUgaXMgbm90aGluZyB0bworICAgIC8vIHJlbmRlci4KKyAgICBpZiAoIW1fbWVkaWFFbGVt
ZW50IHx8ICFtX21lZGlhRWxlbWVudC0+aXNWaWRlbygpIHx8IG1fdmlkZW9EaXNwbGF5U2l6ZS5z
aXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyAyLiBMZXQgdmlkZW8g
YmUgdGhlIG1lZGlhIGVsZW1lbnQgb3Igb3RoZXIgcGxheWJhY2sgbWVjaGFuaXNtLgorICAgIEhU
TUxWaWRlb0VsZW1lbnQmIHZpZGVvID0gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4oKm1fbWVk
aWFFbGVtZW50KTsKKworICAgIC8vIDMuIExldCBvdXRwdXQgYmUgYW4gZW1wdHkgbGlzdCBvZiBh
YnNvbHV0ZWx5IHBvc2l0aW9uZWQgQ1NTIGJsb2NrIGJveGVzLgorCisgICAgLy8gNC4gSWYgdGhl
IHVzZXIgYWdlbnQgaXMgZXhwb3NpbmcgYSB1c2VyIGludGVyZmFjZSBmb3IgdmlkZW8sIGFkZCB0
bworICAgIC8vIG91dHB1dCBvbmUgb3IgbW9yZSBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IHBvc2l0
aW9uZWQgQ1NTIGJsb2NrIGJveGVzIHRoYXQKKyAgICAvLyBjb3ZlciB0aGUgc2FtZSByZWdpb24g
YXMgdGhlIHVzZXIgaW50ZXJmYWNlLgorCisgICAgLy8gNS4gSWYgdGhlIGxhc3QgdGltZSB0aGVz
ZSBydWxlcyB3ZXJlIHJ1biwgdGhlIHVzZXIgYWdlbnQgd2FzIG5vdCBleHBvc2luZworICAgIC8v
IGEgdXNlciBpbnRlcmZhY2UgZm9yIHZpZGVvLCBidXQgbm93IGl0IGlzLCBsZXQgcmVzZXQgYmUg
dHJ1ZS4gT3RoZXJ3aXNlLAorICAgIC8vIGxldCByZXNldCBiZSBmYWxzZS4KKworICAgIC8vIFRo
ZXJlIGlzIG5vdGhpbmcgdG8gYmUgZG9uZSBleHBsaWNpdGx5IGZvciA0dGggYW5kIDV0aCBzdGVw
cywgYXMKKyAgICAvLyBldmVyeXRoaW5nIGlzIGhhbmRsZWQgdGhyb3VnaCBDU1MuIFRoZSBjYXB0
aW9uIGJveCBpcyBvbiB0b3Agb2YgdGhlCisgICAgLy8gY29udHJvbHMgYm94LCBpbiBhIGNvbnRh
aW5lciBzZXQgd2l0aCB0aGUgLXdlYmtpdC1ib3ggZGlzcGxheSBwcm9wZXJ0eS4KKworICAgIC8v
IDYuIExldCB0cmFja3MgYmUgdGhlIHN1YnNldCBvZiB2aWRlbydzIGxpc3Qgb2YgdGV4dCB0cmFj
a3MgdGhhdCBoYXZlIGFzCisgICAgLy8gdGhlaXIgcnVsZXMgZm9yIHVwZGF0aW5nIHRoZSB0ZXh0
IHRyYWNrIHJlbmRlcmluZyB0aGVzZSBydWxlcyBmb3IKKyAgICAvLyB1cGRhdGluZyB0aGUgZGlz
cGxheSBvZiBXZWJWVFQgdGV4dCB0cmFja3MsIGFuZCB3aG9zZSB0ZXh0IHRyYWNrIG1vZGUgaXMK
KyAgICAvLyBzaG93aW5nIG9yIHNob3dpbmcgYnkgZGVmYXVsdC4KKyAgICAvLyA3LiBMZXQgY3Vl
cyBiZSBhbiBlbXB0eSBsaXN0IG9mIHRleHQgdHJhY2sgY3Vlcy4KKyAgICAvLyA4LiBGb3IgZWFj
aCB0cmFjayB0cmFjayBpbiB0cmFja3MsIGFwcGVuZCB0byBjdWVzIGFsbCB0aGUgY3VlcyBmcm9t
CisgICAgLy8gdHJhY2sncyBsaXN0IG9mIGN1ZXMgdGhhdCBoYXZlIHRoZWlyIHRleHQgdHJhY2sg
Y3VlIGFjdGl2ZSBmbGFnIHNldC4KKyAgICBDdWVMaXN0IGFjdGl2ZUN1ZXMgPSB2aWRlby5jdXJy
ZW50bHlBY3RpdmVDdWVzKCk7CisKKyAgICAvLyA5LiBJZiByZXNldCBpcyBmYWxzZSwgdGhlbiwg
Zm9yIGVhY2ggdGV4dCB0cmFjayBjdWUgY3VlIGluIGN1ZXM6IGlmIGN1ZSdzCisgICAgLy8gdGV4
dCB0cmFjayBjdWUgZGlzcGxheSBzdGF0ZSBoYXMgYSBzZXQgb2YgQ1NTIGJveGVzLCB0aGVuIGFk
ZCB0aG9zZSBib3hlcworICAgIC8vIHRvIG91dHB1dCwgYW5kIHJlbW92ZSBjdWUgZnJvbSBjdWVz
LgorCisgICAgLy8gVGhlcmUgaXMgbm90aGluZyBleHBsaWNpdGx5IHRvIGJlIGRvbmUgaGVyZSwg
YXMgYWxsIHRoZSBjYWNoaW5nIG9jY3VycworICAgIC8vIHdpdGhpbiB0aGUgVGV4dFRyYWNrQ3Vl
IGluc3RhbmNlIGl0c2VsZi4gSWYgcGFyYW1ldGVycyBvZiB0aGUgY3VlIGNoYW5nZSwKKyAgICAv
LyB0aGUgZGlzcGxheSB0cmVlIGlzIGNsZWFyZWQuCisKKyAgICAvLyBJZiB0aGUgbnVtYmVyIG9m
IENTUyBib3hlcyBpbiB0aGUgb3V0cHV0IGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGN1ZXMK
KyAgICAvLyB3ZSB3aXNoIHRvIHJlbmRlciAoZS5nLiwgd2UgYXJlIGFkZGluZyBhbm90aGVyIGN1
ZSBpbiBhIHNldCBvZiByb2xsLXVwCisgICAgLy8gY3VlcyksIHJlbW92ZSBhbGwgdGhlIGV4aXN0
aW5nIENTUyBib3hlcyByZXByZXNlbnRpbmcgdGhlIGN1ZXMgYW5kIHJlLWFkZAorICAgIC8vIHRo
ZW0gc28gdGhhdCB0aGUgbmV3IGN1ZSBpcyBhdCB0aGUgYm90dG9tLgorICAgIC8vIEZJWE1FOiBD
YWxsaW5nIGNvdW50Q2hpbGROb2RlcygpIGhlcmUgaXMgaW5lZmZpY2llbnQuIFdlIGRvbid0IG5l
ZWQgdG8KKyAgICAvLyB0cmF2ZXJzZSBhbGwgY2hpbGRyZW4ganVzdCB0byBjaGVjayBpZiB0aGVy
ZSBhcmUgbGVzcyBjaGlsZHJlbiB0aGFuIGN1ZXMuCisgICAgaWYgKGNvdW50Q2hpbGROb2Rlcygp
IDwgYWN0aXZlQ3Vlcy5zaXplKCkpCisgICAgICAgIHJlbW92ZUNoaWxkcmVuKCk7CisKKyAgICBh
Y3RpdmVDdWVzLnJlbW92ZUFsbE1hdGNoaW5nKFtdIChDdWVJbnRlcnZhbCYgY3VlSW50ZXJ2YWwp
IHsKKyAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gY3VlSW50ZXJ2YWwuZGF0YSgp
OworICAgICAgICByZXR1cm4gIWN1ZS0+dHJhY2soKQorICAgICAgICAgICAgfHwgIWN1ZS0+dHJh
Y2soKS0+aXNSZW5kZXJlZCgpCisgICAgICAgICAgICB8fCBjdWUtPnRyYWNrKCktPm1vZGUoKSA9
PSBUZXh0VHJhY2s6Ok1vZGU6OkRpc2FibGVkCisgICAgICAgICAgICB8fCAhY3VlLT5pc0FjdGl2
ZSgpCisgICAgICAgICAgICB8fCAhY3VlLT5pc1JlbmRlcmFibGUoKTsKKyAgICB9KTsKKworICAg
IC8vIFNvcnQgdGhlIGFjdGl2ZSBjdWVzIGZvciB0aGUgYXBwcm9wcmlhdGUgZGlzcGxheSBvcmRl
ci4gRm9yIGV4YW1wbGUsIGZvciByb2xsLXVwCisgICAgLy8gb3IgcGFpbnQtb24gY2FwdGlvbnMs
IHdlIG5lZWQgdG8gYWRkIHRoZSBjdWVzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciwK
KyAgICAvLyBzbyB0aGF0IHRoZSBuZXdlc3QgY2FwdGlvbnMgYXBwZWFyIGF0IHRoZSBib3R0b20u
CisgICAgc3RkOjpzb3J0KGFjdGl2ZUN1ZXMuYmVnaW4oKSwgYWN0aXZlQ3Vlcy5lbmQoKSwgJmNv
bXBhcmVDdWVJbnRlcnZhbEZvckRpc3BsYXkpOworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50LT5j
bG9zZWRDYXB0aW9uc1Zpc2libGUoKSkgeworICAgICAgICAvLyAxMC4gRm9yIGVhY2ggdGV4dCB0
cmFjayBjdWUgaW4gY3VlcyB0aGF0IGhhcyBub3QgeWV0IGhhZAorICAgICAgICAvLyBjb3JyZXNw
b25kaW5nIENTUyBib3hlcyBhZGRlZCB0byBvdXRwdXQsIGluIHRleHQgdHJhY2sgY3VlIG9yZGVy
LCBydW4gdGhlCisgICAgICAgIC8vIGZvbGxvd2luZyBzdWJzdGVwczoKKyAgICAgICAgZm9yIChh
dXRvJiBpbnRlcnZhbCA6IGFjdGl2ZUN1ZXMpIHsKKyAgICAgICAgICAgIGF1dG8gY3VlID0gaW50
ZXJ2YWwuZGF0YSgpOworICAgICAgICAgICAgY3VlLT5zZXRGb250U2l6ZShtX2ZvbnRTaXplLCBt
X3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplSXNJbXBvcnRhbnQpOworICAgICAg
ICAgICAgaWYgKGlzPFZUVEN1ZT4oKmN1ZSkpCisgICAgICAgICAgICAgICAgcHJvY2Vzc0FjdGl2
ZVZUVEN1ZShkb3duY2FzdDxWVFRDdWU+KCpjdWUpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGF1dG8gZGlzcGxheUJveCA9IGN1ZS0+Z2V0RGlzcGxheVRyZWUobV92aWRl
b0Rpc3BsYXlTaXplLnNpemUoKSwgbV9mb250U2l6ZSk7CisgICAgICAgICAgICAgICAgaWYgKGRp
c3BsYXlCb3gtPmhhc0NoaWxkTm9kZXMoKSAmJiAhY29udGFpbnMoZGlzcGxheUJveC5nZXQoKSkp
CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkKCpkaXNwbGF5Qm94KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIDExLiBSZXR1cm4gb3V0cHV0LgorICAg
IGlmIChoYXNDaGlsZE5vZGVzKCkpCisgICAgICAgIHNob3coKTsKKyAgICBlbHNlCisgICAgICAg
IGhpZGUoKTsKKworICAgIHVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQoKTsK
KyAgICB1cGRhdGVUZXh0VHJhY2tTdHlsZSgpOworICAgIG1fbmVlZHNHZW5lcmF0ZVRleHRUcmFj
a1JlcHJlc2VudGF0aW9uID0gdHJ1ZTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVk
ZWQoKQoreworICAgIGlmICghbV9uZWVkc0dlbmVyYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIG1fbmVlZHNHZW5lcmF0ZVRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uID0gZmFsc2U7CisKKyAgICAvLyBXZSBzaG91bGQgY2FsbCBtX3RleHRUcmFja1JlcHJl
c2VudGF0aW9uLT51cGRhdGUoKSB0byBwYWludCB0aGUgc3VidHJlZSBvZgorICAgIC8vIHRoZSBS
ZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVtZW50IGFmdGVyIHRoZSBsYXlvdXQgaXMgY2xlYW4u
CisgICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCisgICAgICAgIG1fdGV4dFRyYWNr
UmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6OnByb2Nlc3NBY3RpdmVWVFRDdWUoVlRUQ3VlJiBjdWUpCit7Cisg
ICAgREVCVUdfTE9HKExPR0lERU5USUZJRVIsICJhZGRpbmcgYW5kIHBvc2l0aW9uaW5nIGN1ZTog
XCIiLCBjdWUudGV4dCgpLCAiXCIsIHN0YXJ0PSIsIGN1ZS5zdGFydFRpbWUoKSwgIiwgZW5kPSIs
IGN1ZS5lbmRUaW1lKCksICIsIGxpbmU9IiwgY3VlLmxpbmUoKSk7CisgICAgUmVmPFRleHRUcmFj
a0N1ZUJveD4gZGlzcGxheUJveCA9ICpjdWUuZ2V0RGlzcGxheVRyZWUobV92aWRlb0Rpc3BsYXlT
aXplLnNpemUoKSwgbV9mb250U2l6ZSk7CisKKyAgICBpZiAoYXV0byByZWdpb24gPSBjdWUudHJh
Y2soKS0+cmVnaW9ucygpLT5nZXRSZWdpb25CeUlkKGN1ZS5yZWdpb25JZCgpKSkgeworICAgICAg
ICAvLyBMZXQgcmVnaW9uIGJlIHRoZSBXZWJWVFQgcmVnaW9uIHdob3NlIHJlZ2lvbiBpZGVudGlm
aWVyCisgICAgICAgIC8vIG1hdGNoZXMgdGhlIHRleHQgdHJhY2sgY3VlIHJlZ2lvbiBpZGVudGlm
aWVyIG9mIGN1ZS4KKyAgICAgICAgUmVmPEhUTUxEaXZFbGVtZW50PiByZWdpb25Ob2RlID0gcmVn
aW9uLT5nZXREaXNwbGF5VHJlZSgpOworCisgICAgICAgIGlmICghY29udGFpbnMocmVnaW9uTm9k
ZS5wdHIoKSkpCisgICAgICAgICAgICBhcHBlbmRDaGlsZChyZWdpb24tPmdldERpc3BsYXlUcmVl
KCkpOworCisgICAgICAgIHJlZ2lvbi0+YXBwZW5kVGV4dFRyYWNrQ3VlQm94KFdURk1vdmUoZGlz
cGxheUJveCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIGN1ZSBoYXMgYW4gZW1wdHkg
dGV4dCB0cmFjayBjdWUgcmVnaW9uIGlkZW50aWZpZXIgb3IgdGhlcmUgaXMgbm8KKyAgICAgICAg
Ly8gV2ViVlRUIHJlZ2lvbiB3aG9zZSByZWdpb24gaWRlbnRpZmllciBpcyBpZGVudGljYWwgdG8g
Y3VlJ3MgdGV4dAorICAgICAgICAvLyB0cmFjayBjdWUgcmVnaW9uIGlkZW50aWZpZXIsIHJ1biB0
aGUgZm9sbG93aW5nIHN1YnN0ZXBzOgorICAgICAgICBpZiAoZGlzcGxheUJveC0+aGFzQ2hpbGRO
b2RlcygpICYmICFjb250YWlucyhkaXNwbGF5Qm94LnB0cigpKSkgeworICAgICAgICAgICAgLy8g
Tm90ZTogdGhlIGRpc3BsYXkgdHJlZSBvZiBhIGN1ZSBpcyByZW1vdmVkIHdoZW4gdGhlIGFjdGl2
ZSBmbGFnIG9mIHRoZSBjdWUgaXMgdW5zZXQuCisgICAgICAgICAgICBhcHBlbmRDaGlsZChkaXNw
bGF5Qm94KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKQoreworICAgIGlm
ICghZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9tZWRp
YUVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHNtYWxsZXN0RGltZW5zaW9u
ID0gc3RkOjptaW4obV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWlnaHQoKSwgbV92aWRlb0Rp
c3BsYXlTaXplLnNpemUoKS53aWR0aCgpKTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBkb2N1bWVu
dCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5jYXB0aW9uRm9udFNpemVT
Y2FsZUFuZEltcG9ydGFuY2UobV9mb250U2l6ZUlzSW1wb3J0YW50KTsKKyAgICBtX2ZvbnRTaXpl
ID0gbHJvdW5kZihzbWFsbGVzdERpbWVuc2lvbiAqIGZvbnRTY2FsZSk7CisKKyAgICBmb3IgKGF1
dG8mIGFjdGl2ZUN1ZSA6IG1fbWVkaWFFbGVtZW50LT5jdXJyZW50bHlBY3RpdmVDdWVzKCkpIHsK
KyAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gYWN0aXZlQ3VlLmRhdGEoKTsKKyAg
ICAgICAgaWYgKGN1ZS0+aXNSZW5kZXJhYmxlKCkpCisgICAgICAgICAgICBjdWUtPnNldEZvbnRT
aXplKG1fZm9udFNpemUsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCksIG1fZm9udFNpemVJc0lt
cG9ydGFudCk7CisgICAgfQorfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OnVwZGF0ZVRleHRTdHJva2VTdHlsZSgpCit7CisgICAgaWYgKCFkb2N1bWVudCgp
LnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIFN0cmluZyBsYW5ndWFnZTsKKworICAgIC8vIEZJWE1F
OiBTaW5jZSBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG1vcmUgdGhhbiBvbmUgdGV4dCB0cmFjayBl
bmFibGVkLCB0aGUgZm9sbG93aW5nIGNvZGUgbWF5IG5vdCBmaW5kIHRoZSBjb3JyZWN0IGxhbmd1
YWdlLgorICAgIC8vIFRoZSBkZWZhdWx0IFVJIG9ubHkgYWxsb3dzIGEgdXNlciB0byBlbmFibGUg
b25lIHRyYWNrIGF0IGEgdGltZSwgc28gaXQgc2hvdWxkIGJlIE9LIGZvciBub3csIGJ1dCB3ZSBz
aG91bGQgY29uc2lkZXIgZG9pbmcKKyAgICAvLyB0aGlzIGRpZmZlcmVudGx5LCBzZWUgPGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4NzU+LgorICAgIGlmIChhdXRv
KiB0cmFja3MgPSBtX21lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0cmFja3MtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAg
IGF1dG8gdHJhY2sgPSB0cmFja3MtPml0ZW0oaSk7CisgICAgICAgICAgICBpZiAodHJhY2sgJiYg
dHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKKyAgICAgICAgICAg
ICAgICBsYW5ndWFnZSA9IHRyYWNrLT52YWxpZEJDUDQ3TGFuZ3VhZ2UoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZsb2F0
IHN0cm9rZVdpZHRoOworICAgIGJvb2wgaW1wb3J0YW50OworCisgICAgLy8gRklYTUU6IGZpbmQg
YSB3YXkgdG8gc2V0IHRoaXMgcHJvcGVydHkgaW4gdGhlIHN0eWxlc2hlZXQgbGlrZSB0aGUgb3Ro
ZXIgdXNlciBzdHlsZSBwcmVmZXJlbmNlcywgc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY5ODc0Pi4KKyAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmdyb3Vw
KCkuY2FwdGlvblByZWZlcmVuY2VzKCkuY2FwdGlvblN0cm9rZVdpZHRoRm9yRm9udChtX2ZvbnRT
aXplLCBsYW5ndWFnZSwgc3Ryb2tlV2lkdGgsIGltcG9ydGFudCkpCisgICAgICAgIHNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlTdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgsIENTU1Vu
aXRUeXBlOjpDU1NfUFgsIGltcG9ydGFudCk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRl
ZCgpCit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byByZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uID0gbV9tZWRpYUVsZW1lbnQtPnJl
cXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKTsKKyAgICBpZiAoIWhhc0NoaWxkTm9kZXMo
KSB8fCAhcmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgeworICAgICAgICBpZiAobV90
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgeworICAgICAgICAgICAgaWYgKCFyZXF1aXJlc1RleHRU
cmFja1JlcHJlc2VudGF0aW9uKQorICAgICAgICAgICAgICAgIGNsZWFyVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24oKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3RleHRUcmFj
a1JlcHJlc2VudGF0aW9uLT5zZXRIaWRkZW4odHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgeworICAg
ICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOworCisgICAgICAgIG1fdGV4dFRyYWNrUmVw
cmVzZW50YXRpb24gPSBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbjo6Y3JlYXRlKCp0aGlzKTsKKyAg
ICAgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICAgICAgbV90ZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbi0+c2V0Q29udGVudFNjYWxlKGRvY3VtZW50KCkucGFnZSgpLT5kZXZpY2VTY2Fs
ZUZhY3RvcigpKTsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnNldFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24uZ2V0KCkpOworICAgIH0KKworICAgIG1f
dGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNldEhpZGRlbihmYWxzZSk7Cit9CisKK3ZvaWQgTWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y2xlYXJUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbigpCit7CisgICAgaWYgKCFtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOworCisgICAgbV90ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbiA9IG51bGxwdHI7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQor
ICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb24obnVsbHB0
cik7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBk
YXRlVGV4dFRyYWNrU3R5bGUoKQoreworICAgIGlmIChtX3RleHRUcmFja1JlcHJlc2VudGF0aW9u
KSB7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwg
Q1NTVmFsdWVBYnNvbHV0ZSk7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlXaWR0aCwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS53aWR0aCgpLCBDU1NVbml0VHlw
ZTo6Q1NTX1BYKTsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhl
aWdodCwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWlnaHQoKSwgQ1NTVW5pdFR5cGU6OkNT
U19QWCk7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCAw
LCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVRvcCwgMCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRp
b24pOworICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCk7Cisg
ICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCk7CisgICAgcmVt
b3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQpOworICAgIHJlbW92ZUlubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3ApOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmVudGVyZWRGdWxsc2NyZWVuKCkKK3sKKyAgICB1cGRh
dGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklmTmVlZGVkKCk7CisgICAgdXBkYXRlU2l6ZXMoRm9y
Y2VVcGRhdGU6Olllcyk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6ZXhpdGVkRnVsbHNjcmVlbigpCit7CisgICAgY2xlYXJUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbigpOworICAgIHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlOjpZZXMpOworfQorCitib29s
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVZpZGVvRGlzcGxh
eVNpemUoKQoreworICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEludFJlY3QgdmlkZW9Cb3g7CisgICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRp
b24pIHsKKyAgICAgICAgdmlkZW9Cb3ggPSBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT5ib3Vu
ZHMoKTsKKyAgICAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBkb2N1bWVudCgpLnBhZ2Uo
KS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgdmlkZW9Cb3guc2V0V2lkdGgodmlkZW9C
b3gud2lkdGgoKSAqIGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgdmlkZW9Cb3guc2V0SGVp
Z2h0KHZpZGVvQm94LmhlaWdodCgpICogZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmICghaXM8UmVuZGVyVmlkZW8+KG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigp
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdmlkZW9Cb3ggPSBkb3duY2Fz
dDxSZW5kZXJWaWRlbz4oKm1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKS52aWRlb0JveCgpOwor
ICAgIH0KKworICAgIGlmIChtX3ZpZGVvRGlzcGxheVNpemUgPT0gdmlkZW9Cb3gpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIG1fdmlkZW9EaXNwbGF5U2l6ZSA9IHZpZGVvQm94OworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OnVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlIGZvcmNlKQoreworICAgIGlmICghdXBkYXRl
VmlkZW9EaXNwbGF5U2l6ZSgpICYmIGZvcmNlICE9IEZvcmNlVXBkYXRlOjpZZXMpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkgfHwgIW1fbWVkaWFFbGVtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX21lZGlhRWxlbWVudC0+c3luY1RleHRUcmFja0Jv
dW5kcygpOworCisgICAgdXBkYXRlQWN0aXZlQ3Vlc0ZvbnRTaXplKCk7CisgICAgdXBkYXRlVGV4
dFN0cm9rZVN0eWxlKCk7CisgICAgZm9yIChhdXRvJiBhY3RpdmVDdWUgOiBtX21lZGlhRWxlbWVu
dC0+Y3VycmVudGx5QWN0aXZlQ3VlcygpKQorICAgICAgICBhY3RpdmVDdWUuZGF0YSgpLT5yZWNh
bGN1bGF0ZVN0eWxlcygpOworCisgICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNdICgp
IHsKKyAgICAgICAgdXBkYXRlRGlzcGxheSgpOworICAgIH0pOworfQorCitSZWZQdHI8SW1hZ2U+
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSW1hZ2UoKQoreworICAgIGlmICghaGFzQ2hpbGROb2RlcygpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBkb2N1bWVudCgp
LmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworCisgICAgYXV0byogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgaWYgKCFyZW5kZXJlci0+aGFzTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVs
T2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CisKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rv
ciA9IDE7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAg
ZGV2aWNlU2NhbGVGYWN0b3IgPSBwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOworCisgICAgSW50
UmVjdCBwYWludGluZ1JlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5zaXplKCkpOwor
CisgICAgLy8gRklYTUUgKDE0OTQyMik6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25k
aXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3RvcikpOworICAgIGlmICghYnVm
ZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcGFpbnRGbGFncyA9IFJl
bmRlckxheWVyOjpwYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ0FsbFBoYXNlc0ZsYWdzKCk7
CisgICAgcGFpbnRGbGFncy5hZGQoUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJUZW1wb3JhcnlDbGlw
UmVjdHMpOworICAgIGxheWVyLT5wYWludChidWZmZXItPmNvbnRleHQoKSwgcGFpbnRpbmdSZWN0
LCBMYXlvdXRTaXplKCksIHsgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJz
LCBQYWludEJlaGF2aW9yOjpTbmFwc2hvdHRpbmcgfSwgbnVsbHB0ciwgcGFpbnRGbGFncyk7CisK
KyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShidWZmZXIpKTsK
K30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp0ZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQoY29uc3QgSW50UmVjdCYpCit7CisgICAgdXBk
YXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOworICAgIHVwZGF0ZVNpemVzKCk7
Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6aGlkZSgp
Cit7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXksIENTU1Zh
bHVlTm9uZSk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6c2hvdygpCit7CisgICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURp
c3BsYXkpOworfQorCitib29sIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6
OmlzU2hvd2luZygpIGNvbnN0Cit7CisgICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBwcm9wZXJ0
eVNldCA9IGlubGluZVN0eWxlKCk7CisKKyAgICAvLyBGb2xsb3dpbmcgdGhlIGNvZGUgZnJvbSBz
aG93KCkgYW5kIGhpZGUoKSBhYm92ZSwgd2Ugb25seSBoYXZlCisgICAgLy8gdG8gY2hlY2sgZm9y
IHRoZSBwcmVzZW5zZSBvZiBpbmxpbmUgZGlzcGxheS4KKyAgICByZXR1cm4gKCFwcm9wZXJ0eVNl
dCB8fCAhcHJvcGVydHlTZXQtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXNwbGF5
KSk7Cit9CisKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorY29uc3QgTG9nZ2VyJiBNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojpsb2dnZXIoKSBjb25zdAoreworICAg
IGlmICghbV9sb2dnZXIpCisgICAgICAgIG1fbG9nZ2VyID0gJmRvY3VtZW50KCkubG9nZ2VyKCk7
CisKKyAgICByZXR1cm4gKm1fbG9nZ2VyOworfQorCitjb25zdCB2b2lkKiBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojpsb2dJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fbG9nSWRlbnRpZmllciAmJiBtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9sb2dJZGVu
dGlmaWVyID0gbV9tZWRpYUVsZW1lbnQtPmxvZ0lkZW50aWZpZXIoKTsKKworICAgIHJldHVybiBt
X2xvZ0lkZW50aWZpZXI7Cit9CisKK1dURkxvZ0NoYW5uZWwmIE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6OmxvZ0NoYW5uZWwoKSBjb25zdAoreworICAgIHJldHVybiBMb2dN
ZWRpYTsKK30KKyNlbmRpZiAvLyAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKworI2VuZGlmIC8vIEVO
QUJMRShWSURFT19UUkFDSykKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjNlOWVlNTc0M2ZiOTJmOGQ4
NTlmMzE3YzIwZjc4YzNlNmRlMjlkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaApAQCAt
MCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbmNsdWRlICJH
ZW5lcmljVGFza1F1ZXVlLmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KKyNpbmNsdWRlIDx3dGYv
V2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCisKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBWVFRDdWU7CisKK2NsYXNzIE1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQgZmluYWwKKyAgICA6IHB1YmxpYyBI
VE1MRGl2RWxlbWVudAorICAgICwgcHVibGljIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50
CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgLCBwcml2YXRlIExvZ2dlckhlbHBlcgor
I2VuZGlmCit7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYsIEhUTUxNZWRpYUVs
ZW1lbnQmKTsKKworICAgIGVudW0gY2xhc3MgRm9yY2VVcGRhdGUgeyBZZXMsIE5vIH07CisgICAg
dm9pZCB1cGRhdGVTaXplcyhGb3JjZVVwZGF0ZSBmb3JjZSA9IEZvcmNlVXBkYXRlOjpObyk7Cisg
ICAgdm9pZCB1cGRhdGVEaXNwbGF5KCk7CisKKyAgICB2b2lkIHVwZGF0ZVRleHRUcmFja1JlcHJl
c2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgpOworCisgICAgdm9pZCBlbnRlcmVkRnVsbHNjcmVlbigp
OworICAgIHZvaWQgZXhpdGVkRnVsbHNjcmVlbigpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmLCBIVE1MTWVk
aWFFbGVtZW50Jik7CisKKyAgICAvLyBFbGVtZW50CisgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1l
bnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJUcmVl
UG9zaXRpb24mKSBvdmVycmlkZTsKKworICAgIC8vIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xp
ZW50CisgICAgUmVmUHRyPEltYWdlPiBjcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdl
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCB0ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5n
ZWQoY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbklmTmVlZGVkKCk7CisgICAgdm9pZCBjbGVhclRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKCk7CisKKyAgICBib29sIHVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKTsKKyAgICB2b2lk
IHVwZGF0ZUFjdGl2ZUN1ZXNGb250U2l6ZSgpOworICAgIHZvaWQgdXBkYXRlVGV4dFN0cm9rZVN0
eWxlKCk7CisgICAgdm9pZCBwcm9jZXNzQWN0aXZlVlRUQ3VlKFZUVEN1ZSYpOworICAgIHZvaWQg
dXBkYXRlVGV4dFRyYWNrU3R5bGUoKTsKKworICAgIHZvaWQgaGlkZSgpOworICAgIHZvaWQgc2hv
dygpOworICAgIGJvb2wgaXNTaG93aW5nKCkgY29uc3Q7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0
IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbDsKKyAgICBXVEZMb2dDaGFubmVsJiBs
b2dDaGFubmVsKCkgY29uc3QgZmluYWw7CisgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gIk1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQiOyB9CisgICAgbXV0YWJsZSBSZWZQdHI8TG9nZ2VyPiBtX2xvZ2dlcjsKKyAgICBtdXRhYmxl
IGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsKKyNlbmRpZgorCisgICAg
c3RkOjp1bmlxdWVfcHRyPFRleHRUcmFja1JlcHJlc2VudGF0aW9uPiBtX3RleHRUcmFja1JlcHJl
c2VudGF0aW9uOworCisgICAgR2VuZXJpY1Rhc2tRdWV1ZTxUaW1lcj4gbV90YXNrUXVldWU7Cisg
ICAgV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21lZGlhRWxlbWVudDsKKyAgICBJbnRSZWN0
IG1fdmlkZW9EaXNwbGF5U2l6ZTsKKyAgICBpbnQgbV9mb250U2l6ZSB7IDAgfTsKKyAgICBib29s
IG1fZm9udFNpemVJc0ltcG9ydGFudCB7IGZhbHNlIH07CisgICAgYm9vbCBtX25lZWRzR2VuZXJh
dGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiB7IGZhbHNlIH07Cit9OworCisjZW5kaWYKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzk5MjdiOTdiZmU2ZDI5ZTllNGY4NDc0NzQ2N2QyYjQyNTRjMzYzZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzNyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCi0jaW5jbHVk
ZSAiTWVkaWFDb250cm9scy5oIgotCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUg
Ik1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xzKTsKLQotTWVkaWFDb250
cm9sczo6TWVkaWFDb250cm9scyhEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBIVE1MRGl2RWxl
bWVudChIVE1MTmFtZXM6OmRpdlRhZywgZG9jdW1lbnQpCi0gICAgLCBtX21lZGlhQ29udHJvbGxl
cigwKQotICAgICwgbV9wYW5lbCgwKQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICAsIG1f
dGV4dERpc3BsYXlDb250YWluZXIoMCkKLSNlbmRpZgotICAgICwgbV9wbGF5QnV0dG9uKDApCi0g
ICAgLCBtX2N1cnJlbnRUaW1lRGlzcGxheSgwKQotICAgICwgbV90aW1lbGluZSgwKQotICAgICwg
bV9wYW5lbE11dGVCdXR0b24oMCkKLSAgICAsIG1fdm9sdW1lU2xpZGVyKDApCi0gICAgLCBtX3Rv
Z2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKDApCi0gICAgLCBtX2Z1bGxTY3JlZW5CdXR0b24oMCkK
LSAgICAsIG1faGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCp0aGlzLCAmTWVkaWFDb250cm9s
czo6aGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyRmlyZWQpCi0gICAgLCBtX2lzRnVsbHNjcmVl
bihmYWxzZSkKLSAgICAsIG1faXNNb3VzZU92ZXJDb250cm9scyhmYWxzZSkKLXsKLSAgICBzZXRQ
c2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scyIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6c2V0TWVkaWFD
b250cm9sbGVyKE1lZGlhQ29udHJvbGxlckludGVyZmFjZSogY29udHJvbGxlcikKLXsKLSAgICBp
ZiAobV9tZWRpYUNvbnRyb2xsZXIgPT0gY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fbWVkaWFDb250cm9sbGVyID0gY29udHJvbGxlcjsKLQotICAgIGlmIChtX3BhbmVsKQotICAg
ICAgICBtX3BhbmVsLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0jaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQotICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQotICAgICAgICBt
X3RleHREaXNwbGF5Q29udGFpbmVyLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0j
ZW5kaWYKLSAgICBpZiAobV9wbGF5QnV0dG9uKQotICAgICAgICBtX3BsYXlCdXR0b24tPnNldE1l
ZGlhQ29udHJvbGxlcihjb250cm9sbGVyKTsKLSAgICBpZiAobV9jdXJyZW50VGltZURpc3BsYXkp
Ci0gICAgICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJv
bGxlcik7Ci0gICAgaWYgKG1fdGltZWxpbmUpCi0gICAgICAgIG1fdGltZWxpbmUtPnNldE1lZGlh
Q29udHJvbGxlcihjb250cm9sbGVyKTsKLSAgICBpZiAobV9wYW5lbE11dGVCdXR0b24pCi0gICAg
ICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0g
ICAgaWYgKG1fdm9sdW1lU2xpZGVyKQotICAgICAgICBtX3ZvbHVtZVNsaWRlci0+c2V0TWVkaWFD
b250cm9sbGVyKGNvbnRyb2xsZXIpOwotICAgIGlmIChtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0
dG9uKQotICAgICAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5zZXRNZWRpYUNvbnRy
b2xsZXIoY29udHJvbGxlcik7Ci0gICAgaWYgKG1fZnVsbFNjcmVlbkJ1dHRvbikKLSAgICAgICAg
bV9mdWxsU2NyZWVuQnV0dG9uLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sczo6cmVzZXQoKQotewotICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRl
RGlzcGxheVR5cGUoKTsKLQotICAgIHVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwotCi0gICAg
ZG91YmxlIGR1cmF0aW9uID0gbV9tZWRpYUNvbnRyb2xsZXItPmR1cmF0aW9uKCk7Ci0gICAgaWYg
KHN0ZDo6aXNmaW5pdGUoZHVyYXRpb24pIHx8IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5oYXNP
d25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoTWVkaWFTbGlkZXJQYXJ0KSkgewotICAgICAgICBt
X3RpbWVsaW5lLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gICAgICAgIG1fdGltZWxpbmUtPnNl
dFBvc2l0aW9uKG1fbWVkaWFDb250cm9sbGVyLT5jdXJyZW50VGltZSgpKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9tZWRpYUNvbnRyb2xsZXItPmhhc0F1ZGlvKCkgfHwgUmVuZGVyVGhlbWU6OnNpbmds
ZXRvbigpLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYU11dGVCdXR0b25QYXJ0
KSkKLSAgICAgICAgbV9wYW5lbE11dGVCdXR0b24tPnNob3coKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7Ci0KLSAgICBpZiAobV92b2x1bWVTbGlkZXIpIHsK
LSAgICAgICAgaWYgKCFtX21lZGlhQ29udHJvbGxlci0+aGFzQXVkaW8oKSkKLSAgICAgICAgICAg
IG1fdm9sdW1lU2xpZGVyLT5oaWRlKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV92
b2x1bWVTbGlkZXItPnNob3coKTsKLSAgICAgICAgICAgIHNldFNsaWRlclZvbHVtZSgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmVmcmVzaENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJpbGl0
eSgpOwotCi0gICAgaWYgKG1fZnVsbFNjcmVlbkJ1dHRvbikgewotICAgICAgICBpZiAobV9tZWRp
YUNvbnRyb2xsZXItPnN1cHBvcnRzRnVsbHNjcmVlbihIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgJiYgbV9tZWRpYUNvbnRyb2xsZXItPmhhc1ZpZGVv
KCkpCi0gICAgICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPnNob3coKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9mdWxsU2NyZWVuQnV0dG9uLT5oaWRlKCk7Ci0gICAgfQotCi0gICAg
bWFrZU9wYXF1ZSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnJlcG9ydGVkRXJyb3IoKQot
ewotICAgIGF1dG8mIHRoZW1lID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpOwotICAgIGlmICgh
dGhlbWUuaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKE1lZGlhTXV0ZUJ1dHRvblBhcnQp
KSB7Ci0gICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7Ci0gICAgICAgIG1fdm9sdW1l
U2xpZGVyLT5oaWRlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNC
dXR0b24gJiYgIXRoZW1lLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYVRvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uUGFydCkpCi0gICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlv
bnNCdXR0b24tPmhpZGUoKTsKLQotICAgIGlmIChtX2Z1bGxTY3JlZW5CdXR0b24gJiYgIXRoZW1l
Lmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYUVudGVyRnVsbHNjcmVlbkJ1dHRv
blBhcnQpKQotICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPmhpZGUoKTsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xzOjpsb2FkZWRNZXRhZGF0YSgpCi17Ci0gICAgcmVzZXQoKTsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xzOjpzaG93KCkKLXsKLSAgICBtYWtlT3BhcXVlKCk7Ci0gICAgbV9wYW5l
bC0+c2V0SXNEaXNwbGF5ZWQodHJ1ZSk7Ci0gICAgbV9wYW5lbC0+c2hvdygpOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbHM6OmhpZGUoKQotewotICAgIG1fcGFuZWwtPnNldElzRGlzcGxheWVkKGZh
bHNlKTsKLSAgICBtX3BhbmVsLT5oaWRlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6bWFr
ZU9wYXF1ZSgpCi17Ci0gICAgbV9wYW5lbC0+bWFrZU9wYXF1ZSgpOwotfQotCi12b2lkIE1lZGlh
Q29udHJvbHM6Om1ha2VUcmFuc3BhcmVudCgpCi17Ci0gICAgbV9wYW5lbC0+bWFrZVRyYW5zcGFy
ZW50KCk7Ci19Ci0KLWJvb2wgTWVkaWFDb250cm9sczo6c2hvdWxkSGlkZUNvbnRyb2xzKCkKLXsK
LSAgICByZXR1cm4gIW1fcGFuZWwtPmhvdmVyZWQoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xz
OjpidWZmZXJpbmdQcm9ncmVzc2VkKCkKLXsKLSAgICAvLyBXZSBvbmx5IG5lZWQgdG8gdXBkYXRl
IGJ1ZmZlcmluZyBwcm9ncmVzcyB3aGVuIHBhdXNlZCwgZHVyaW5nIG5vcm1hbAotICAgIC8vIHBs
YXliYWNrIHBsYXliYWNrUHJvZ3Jlc3NlZCgpIHdpbGwgdGFrZSBjYXJlIG9mIGl0LgotICAgIGlm
IChtX21lZGlhQ29udHJvbGxlci0+cGF1c2VkKCkpCi0gICAgICAgIG1fdGltZWxpbmUtPnNldFBv
c2l0aW9uKG1fbWVkaWFDb250cm9sbGVyLT5jdXJyZW50VGltZSgpKTsKLX0KLQotdm9pZCBNZWRp
YUNvbnRyb2xzOjpwbGF5YmFja1N0YXJ0ZWQoKQotewotICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRl
RGlzcGxheVR5cGUoKTsKLSAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlvbihtX21lZGlhQ29udHJv
bGxlci0+Y3VycmVudFRpbWUoKSk7Ci0gICAgdXBkYXRlQ3VycmVudFRpbWVEaXNwbGF5KCk7Ci0K
LSAgICBpZiAobV9pc0Z1bGxzY3JlZW4pCi0gICAgICAgIHN0YXJ0SGlkZUZ1bGxzY3JlZW5Db250
cm9sc1RpbWVyKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6cGxheWJhY2tQcm9ncmVzc2Vk
KCkKLXsKLSAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlvbihtX21lZGlhQ29udHJvbGxlci0+Y3Vy
cmVudFRpbWUoKSk7Ci0gICAgdXBkYXRlQ3VycmVudFRpbWVEaXNwbGF5KCk7Ci0KLSAgICBpZiAo
IW1faXNNb3VzZU92ZXJDb250cm9scyAmJiBtX21lZGlhQ29udHJvbGxlci0+aGFzVmlkZW8oKSkK
LSAgICAgICAgbWFrZVRyYW5zcGFyZW50KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6cGxh
eWJhY2tTdG9wcGVkKCkKLXsKLSAgICBtX3BsYXlCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7
Ci0gICAgbV90aW1lbGluZS0+c2V0UG9zaXRpb24obV9tZWRpYUNvbnRyb2xsZXItPmN1cnJlbnRU
aW1lKCkpOwotICAgIHVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwotICAgIG1ha2VPcGFxdWUo
KTsKLQotICAgIHN0b3BIaWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXIoKTsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xzOjp1cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKQotewotICAgIGRvdWJsZSBu
b3cgPSBtX21lZGlhQ29udHJvbGxlci0+Y3VycmVudFRpbWUoKTsKLSAgICBtX2N1cnJlbnRUaW1l
RGlzcGxheS0+c2V0SW5uZXJUZXh0KFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5mb3JtYXRNZWRp
YUNvbnRyb2xzVGltZShub3cpKTsKLSAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+c2V0Q3VycmVu
dFZhbHVlKG5vdyk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6c2hvd1ZvbHVtZVNsaWRlcigp
Ci17Ci0gICAgaWYgKCFtX21lZGlhQ29udHJvbGxlci0+aGFzQXVkaW8oKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV92b2x1bWVTbGlkZXItPnNob3coKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRy
b2xzOjpjaGFuZ2VkTXV0ZSgpCi17Ci0gICAgbV9wYW5lbE11dGVCdXR0b24tPmNoYW5nZWRNdXRl
KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdlZFZvbHVtZSgpCi17Ci0gICAgaWYg
KG1fdm9sdW1lU2xpZGVyKQotICAgICAgICBzZXRTbGlkZXJWb2x1bWUoKTsKLSAgICBpZiAobV9w
YW5lbE11dGVCdXR0b24gJiYgbV9wYW5lbE11dGVCdXR0b24tPnJlbmRlcmVyKCkpCi0gICAgICAg
IG1fcGFuZWxNdXRlQnV0dG9uLT5yZW5kZXJlcigpLT5yZXBhaW50KCk7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sczo6Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgpCi17Ci0gICAgaWYg
KG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pCi0gICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
czo6cmVmcmVzaENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJpbGl0eSgpCi17Ci0gICAgaWYgKCFt
X3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9tZWRpYUNvbnRyb2xsZXItPmhhc0Nsb3NlZENhcHRpb25zKCkpCi0gICAgICAgIG1fdG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b24tPnNob3coKTsKLSAgICBlbHNlCi0gICAgICAgIG1fdG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b24tPmhpZGUoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpj
bG9zZWRDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpCi17Ci0gICAgcmVmcmVzaENsb3NlZENhcHRpb25z
QnV0dG9uVmlzaWJpbGl0eSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmVudGVyZWRGdWxs
c2NyZWVuKCkKLXsKLSAgICBtX2lzRnVsbHNjcmVlbiA9IHRydWU7Ci0gICAgbV9mdWxsU2NyZWVu
QnV0dG9uLT5zZXRJc0Z1bGxzY3JlZW4odHJ1ZSk7Ci0KLSAgICBpZiAoUGFnZSogcGFnZSA9IGRv
Y3VtZW50KCkucGFnZSgpKQotICAgICAgICBwYWdlLT5jaHJvbWUoKS5zZXRDdXJzb3JIaWRkZW5V
bnRpbE1vdXNlTW92ZXModHJ1ZSk7Ci0KLSAgICBzdGFydEhpZGVGdWxsc2NyZWVuQ29udHJvbHNU
aW1lcigpOwotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBpZiAobV90ZXh0RGlzcGxheUNv
bnRhaW5lcikKLSAgICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+ZW50ZXJlZEZ1bGxzY3Jl
ZW4oKTsKLSNlbmRpZgotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmV4aXRlZEZ1bGxzY3JlZW4o
KQotewotICAgIG1faXNGdWxsc2NyZWVuID0gZmFsc2U7Ci0gICAgbV9mdWxsU2NyZWVuQnV0dG9u
LT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwotICAgIHN0b3BIaWRlRnVsbHNjcmVlbkNvbnRyb2xz
VGltZXIoKTsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgaWYgKG1fdGV4dERpc3BsYXlD
b250YWluZXIpCi0gICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPmV4aXRlZEZ1bGxzY3Jl
ZW4oKTsKLSNlbmRpZgotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQmIGV2ZW50KQotewotICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKGV2ZW50KTsKLQotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
b3ZlckV2ZW50KSB7Ci0gICAgICAgIGlmICghY29udGFpbnNSZWxhdGVkVGFyZ2V0KGV2ZW50KSkg
ewotICAgICAgICAgICAgbV9pc01vdXNlT3ZlckNvbnRyb2xzID0gdHJ1ZTsKLSAgICAgICAgICAg
IGlmICghbV9tZWRpYUNvbnRyb2xsZXItPmNhblBsYXkoKSkgewotICAgICAgICAgICAgICAgIG1h
a2VPcGFxdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoc2hvdWxkSGlkZUNvbnRyb2xzKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHN0YXJ0SGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpIHsKLSAgICAgICAg
aWYgKCFjb250YWluc1JlbGF0ZWRUYXJnZXQoZXZlbnQpKSB7Ci0gICAgICAgICAgICBtX2lzTW91
c2VPdmVyQ29udHJvbHMgPSBmYWxzZTsKLSAgICAgICAgICAgIHN0b3BIaWRlRnVsbHNjcmVlbkNv
bnRyb2xzVGltZXIoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpIHsKLSAgICAg
ICAgaWYgKG1faXNGdWxsc2NyZWVuKSB7Ci0gICAgICAgICAgICAvLyBXaGVuIHdlIGdldCBhIG1v
dXNlIG1vdmUgaW4gZnVsbHNjcmVlbiBtb2RlLCBzaG93IHRoZSBtZWRpYSBjb250cm9scywgYW5k
IHN0YXJ0IGEgdGltZXIKLSAgICAgICAgICAgIC8vIHRoYXQgd2lsbCBoaWRlIHRoZSBtZWRpYSBj
b250cm9scyBhZnRlciBhIDMgc2Vjb25kcyB3aXRob3V0IGEgbW91c2UgbW92ZS4KLSAgICAgICAg
ICAgIG1ha2VPcGFxdWUoKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRIaWRlQ29udHJvbHMoKSkK
LSAgICAgICAgICAgICAgICBzdGFydEhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcigpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6
aGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyRmlyZWQoKQotewotICAgIGlmIChtX21lZGlhQ29u
dHJvbGxlci0+cGF1c2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0Z1bGxz
Y3JlZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2hvdWxkSGlkZUNvbnRyb2xzKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS5wYWdl
KCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zl
cyh0cnVlKTsKLQotICAgIG1ha2VUcmFuc3BhcmVudCgpOwotfQotCi12b2lkIE1lZGlhQ29udHJv
bHM6OnN0YXJ0SGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCkKLXsKLSAgICBpZiAoIW1faXNG
dWxsc2NyZWVuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQo
KS5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2hpZGVG
dWxsc2NyZWVuQ29udHJvbHNUaW1lci5zdGFydE9uZVNob3QocGFnZS0+c2V0dGluZ3MoKS50aW1l
V2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVIaWRpbmdDb250cm9scygpKTsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xzOjpzdG9wSGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCkKLXsKLSAgICBt
X2hpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lci5zdG9wKCk7Ci19Ci0KLWJvb2wgTWVkaWFDb250
cm9sczo6Y29udGFpbnNSZWxhdGVkVGFyZ2V0KEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoIWlz
PE1vdXNlRXZlbnQ+KGV2ZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gcmVs
YXRlZFRhcmdldCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KS5yZWxhdGVkVGFyZ2V0KCk7
Ci0gICAgcmV0dXJuIGlzPE5vZGU+KHJlbGF0ZWRUYXJnZXQpICYmIGNvbnRhaW5zKCZkb3duY2Fz
dDxOb2RlPigqcmVsYXRlZFRhcmdldCkpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQot
Ci12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKQotewotICAgIGlm
IChtX3RleHREaXNwbGF5Q29udGFpbmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRl
eHREaXNwbGF5Q29udGFpbmVyID0gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgIG1fdGV4dERpc3BsYXlDb250YWluZXIgPSB0ZXh0
RGlzcGxheUNvbnRhaW5lci5wdHIoKTsKLQotICAgIGlmIChtX21lZGlhQ29udHJvbGxlcikKLSAg
ICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+c2V0TWVkaWFDb250cm9sbGVyKG1fbWVkaWFD
b250cm9sbGVyKTsKLQotICAgIC8vIEluc2VydCBpdCBiZWZvcmUgdGhlIGZpcnN0IGNvbnRyb2xs
ZXIgZWxlbWVudCBzbyBpdCBhbHdheXMgZGlzcGxheXMgYmVoaW5kIHRoZSBjb250cm9scy4KLSAg
ICBpbnNlcnRCZWZvcmUodGV4dERpc3BsYXlDb250YWluZXIsIG1fcGFuZWwpOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbHM6OnNob3dUZXh0VHJhY2tEaXNwbGF5KCkKLXsKLSAgICBpZiAoIW1fdGV4
dERpc3BsYXlDb250YWluZXIpCi0gICAgICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKLSAg
ICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5zaG93KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
czo6aGlkZVRleHRUcmFja0Rpc3BsYXkoKQotewotICAgIGlmICghbV90ZXh0RGlzcGxheUNvbnRh
aW5lcikKLSAgICAgICAgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIG1fdGV4dERpc3Bs
YXlDb250YWluZXItPmhpZGUoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGVUZXh0
VHJhY2tEaXNwbGF5KCkKLXsKLSAgICBpZiAoIW1fdGV4dERpc3BsYXlDb250YWluZXIpCi0gICAg
ICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKLQotICAgIG1fdGV4dERpc3BsYXlDb250YWlu
ZXItPnVwZGF0ZURpc3BsYXkoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjp0ZXh0VHJhY2tQ
cmVmZXJlbmNlc0NoYW5nZWQoKQotewotICAgIGNsb3NlZENhcHRpb25UcmFja3NDaGFuZ2VkKCk7
Ci0gICAgaWYgKG1fdGV4dERpc3BsYXlDb250YWluZXIpCi0gICAgICAgIG1fdGV4dERpc3BsYXlD
b250YWluZXItPnVwZGF0ZVNpemVzKE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQ6OkZvcmNlVXBkYXRlOjpZZXMpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmNsZWFyVGV4
dERpc3BsYXlDb250YWluZXIoKQotewotICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQot
ICAgICAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5yZW1vdmVDaGlsZHJlbigpOwotfQotCi12
b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5l
ZWRlZCgpCi17Ci0gICAgaWYgKG1fdGV4dERpc3BsYXlDb250YWluZXIpCi0gICAgICAgIG1fdGV4
dERpc3BsYXlDb250YWluZXItPnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5l
ZWRlZCgpOwotfQotCi0jZW5kaWYKLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpzZXRTbGlkZXJWb2x1
bWUoKQotewotICAgIG1fdm9sdW1lU2xpZGVyLT5zZXRWb2x1bWUobV9tZWRpYUNvbnRyb2xsZXIt
Pm11dGVkKCkgPyAwLjAgOiBtX21lZGlhQ29udHJvbGxlci0+dm9sdW1lKCkpOwotfQotCi19Ci0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9scy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmJjYjU3NGIyZjBhMjM5MjhlZThjMTc5ODY1Nzk5
NWNmN2JkOTU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaAorKysgL2Rldi9udWxs
CkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShWSURFTykKLQot
I2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBFdmVudDsKLWNsYXNz
IE1lZGlhUGxheWVyOwotY2xhc3MgUmVuZGVyQm94OwotY2xhc3MgUmVuZGVyTWVkaWE7Ci0KLS8v
IEFuIGFic3RyYWN0IGNsYXNzIHdpdGggdGhlIG1lZGlhIGNvbnRyb2wgZWxlbWVudHMgdGhhdCBh
bGwgcG9ydHMgc3VwcG9ydC4KLWNsYXNzIE1lZGlhQ29udHJvbHMgOiBwdWJsaWMgSFRNTERpdkVs
ZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9scyk7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCB+TWVkaWFDb250cm9scygpID0gZGVmYXVsdDsKLQotICAgIC8vIFRo
aXMgZnVuY3Rpb24gaXMgdG8gYmUgaW1wbGVtZW50ZWQgaW4geW91ciBwb3J0LXNwZWNpZmljIG1l
ZGlhCi0gICAgLy8gY29udHJvbHMgaW1wbGVtZW50YXRpb24gc2luY2UgaXQgd2lsbCByZXR1cm4g
YSBjaGlsZCBpbnN0YW5jZS4KLSAgICBzdGF0aWMgUmVmUHRyPE1lZGlhQ29udHJvbHM+IHRyeUNy
ZWF0ZShEb2N1bWVudCYpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldE1lZGlhQ29udHJvbGxlcihN
ZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqKTsKLQotICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwot
ICAgIHZpcnR1YWwgdm9pZCByZXBvcnRlZEVycm9yKCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRl
ZE1ldGFkYXRhKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwotICAgIHZpcnR1YWwgdm9p
ZCBoaWRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIG1ha2VPcGFxdWUoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgbWFrZVRyYW5zcGFyZW50KCk7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEhpZGVDb250cm9s
cygpOwotCi0gICAgdmlydHVhbCB2b2lkIGJ1ZmZlcmluZ1Byb2dyZXNzZWQoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcGxheWJhY2tTdGFydGVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHBsYXliYWNrUHJv
Z3Jlc3NlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBwbGF5YmFja1N0b3BwZWQoKTsKLQotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVTdGF0dXNEaXNwbGF5KCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1ZvbHVtZVNs
aWRlcigpOwotCi0gICAgdmlydHVhbCB2b2lkIGNoYW5nZWRNdXRlKCk7Ci0gICAgdmlydHVhbCB2
b2lkIGNoYW5nZWRWb2x1bWUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VkQ2xvc2VkQ2Fw
dGlvbnNWaXNpYmlsaXR5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlZnJlc2hDbG9zZWRDYXB0aW9u
c0J1dHRvblZpc2liaWxpdHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlQ2xvc2VkQ2FwdGlv
blRyYWNrTGlzdCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjbG9zZWRDYXB0aW9uVHJhY2tzQ2hh
bmdlZCgpOwotCi0gICAgdmlydHVhbCB2b2lkIGVudGVyZWRGdWxsc2NyZWVuKCk7Ci0gICAgdmly
dHVhbCB2b2lkIGV4aXRlZEZ1bGxzY3JlZW4oKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50cygpIG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIGhpZGVGdWxsc2NyZWVuQ29u
dHJvbHNUaW1lckZpcmVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0SGlkZUZ1bGxzY3JlZW5D
b250cm9sc1RpbWVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BIaWRlRnVsbHNjcmVlbkNvbnRy
b2xzVGltZXIoKTsKLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBzaG93VGV4dFRyYWNr
RGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHRleHRUcmFja1ByZWZlcmVuY2VzQ2hhbmdlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclRl
eHREaXNwbGF5Q29udGFpbmVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgpOwotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICBl
eHBsaWNpdCBNZWRpYUNvbnRyb2xzKERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBjb250YWluc1Jl
bGF0ZWRUYXJnZXQoRXZlbnQmKTsKLQotICAgIHZvaWQgc2V0U2xpZGVyVm9sdW1lKCk7Ci0KLSAg
ICBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqIG1fbWVkaWFDb250cm9sbGVyOwotCi0gICAgLy8g
Q29udGFpbmVyIGZvciB0aGUgbWVkaWEgY29udHJvbCBlbGVtZW50cy4KLSAgICBNZWRpYUNvbnRy
b2xQYW5lbEVsZW1lbnQqIG1fcGFuZWw7Ci0KLSAgICAvLyBDb250YWluZXIgZm9yIHRoZSB0ZXh0
IHRyYWNrIGN1ZXMuCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQqIG1fdGV4dERpc3BsYXlDb250YWluZXI7Ci0jZW5kaWYK
LQotICAgIC8vIE1lZGlhIGNvbnRyb2wgZWxlbWVudHMuCi0gICAgTWVkaWFDb250cm9sUGxheUJ1
dHRvbkVsZW1lbnQqIG1fcGxheUJ1dHRvbjsKLSAgICBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURp
c3BsYXlFbGVtZW50KiBtX2N1cnJlbnRUaW1lRGlzcGxheTsKLSAgICBNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQqIG1fdGltZWxpbmU7Ci0gICAgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9u
RWxlbWVudCogbV9wYW5lbE11dGVCdXR0b247Ci0gICAgTWVkaWFDb250cm9sUGFuZWxWb2x1bWVT
bGlkZXJFbGVtZW50KiBtX3ZvbHVtZVNsaWRlcjsKLSAgICBNZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQqIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b247Ci0g
ICAgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQqIG1fZnVsbFNjcmVlbkJ1dHRv
bjsKLQotICAgIFRpbWVyIG1faGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyOwotICAgIGJvb2wg
bV9pc0Z1bGxzY3JlZW47Ci0gICAgYm9vbCBtX2lzTW91c2VPdmVyQ29udHJvbHM7Ci0KLXByaXZh
dGU6Ci0gICAgYm9vbCBpc01lZGlhQ29udHJvbHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVl
OyB9Ci19OwotCi1pbmxpbmUgTWVkaWFDb250cm9scyogdG9NZWRpYUNvbnRyb2xzKE5vZGUqIG5v
ZGUpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwgbm9k
ZS0+aXNNZWRpYUNvbnRyb2xzKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRy
b2xzKj4obm9kZSk7Ci19Ci0KLS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5u
ZWNjZXNzYXJ5IGNhc3QuCi12b2lkIHRvTWVkaWFDb250cm9scyhjb25zdCBNZWRpYUNvbnRyb2xz
Kik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVk
aWFBRi5jcHAKaW5kZXggM2Q4Y2Y0ZmI4Zjc3ZmU4MGIzZmI0NGNkN2VlOWQ3OWE4NTI0NWMxMi4u
MmI1MjQyN2Q3ODAyOGQ0ZGNjNjU4NGFjNzk5ZDc3YzE5OWYyNjgwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKQEAg
LTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAi
TG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNZWRp
YUNvbnRyb2xFbGVtZW50cy5oIgogI2luY2x1ZGUgIlRleHRUcmFja0xpc3QuaCIKICNpbmNsdWRl
ICJVc2VyU3R5bGVTaGVldFR5cGVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKaW5kZXggZmNkZWViODQyNTlkZGM3YTQ4NTU1ODJhYjg5YmM3OGZhNTI2YWY2Ni4uMzc1
NDYxYzMxOTljZGRhZTI4ZDUyNjhmMjE4OWExMzM0ZTJjYWY2ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
CkBAIC0xMDc3LDE1ICsxMDc3LDExIEBAIHZvaWQgUGFnZTo6c2V0UGFnZVNjYWxlRmFjdG9yKGZs
b2F0IHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBib29sIGluU3RhYmxlCiAjZW5kaWYK
ICAgICB9CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChpblN0
YWJsZVN0YXRlKSB7CiAgICAgICAgIGZvckVhY2hNZWRpYUVsZW1lbnQoW10gKEhUTUxNZWRpYUVs
ZW1lbnQmIGVsZW1lbnQpIHsKICAgICAgICAgICAgIGVsZW1lbnQucGFnZVNjYWxlRmFjdG9yQ2hh
bmdlZCgpOwogICAgICAgICB9KTsKICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShpblN0
YWJsZVN0YXRlKTsKLSNlbmRpZgogfQogCiB2b2lkIFBhZ2U6OnNldERlbGVnYXRlc1NjYWxpbmco
Ym9vbCBkZWxlZ2F0ZXNTY2FsaW5nKQpAQCAtMTEzMiwxMSArMTEyOCw5IEBAIHZvaWQgUGFnZTo6
c2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbihVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uIHVzZXJJbnRlCiAKICAgICBtX3VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gPSB1c2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOwogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKICAgICBmb3JFYWNoTWVkaWFFbGVtZW50KFtdIChIVE1MTWVkaWFFbGVtZW50JiBlbGVt
ZW50KSB7CiAgICAgICAgIGVsZW1lbnQudXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkNoYW5n
ZWQoKTsKICAgICB9KTsKLSNlbmRpZgogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4Njk2NjM2MGRiOWE5ZThmMTk3YjIxZjYwOTMxYzg2NWFkYjY4
MDlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAs
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyTWVkaWFDb250cm9scy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVk
ZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5o
IgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFp
bmVyKTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChSZW5kZXJNZWRpYUNvbnRyb2xUaW1l
bGluZUNvbnRhaW5lcik7Ci0KLVJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyOjpSZW5k
ZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHls
ZSYmIHN0eWxlKQotICAgIDogUmVuZGVyQmxvY2tGbG93KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUp
KQotewotfQotCi12b2lkIFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQo
KQotewotICAgIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0KCk7Ci0KLSAgICBpZiAoc3R5bGUoKS5k
aXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6Ok5vbmUgfHwgIWlzPFJlbmRlckJveD4obmV4dFNpYmxp
bmcoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckJveCYgYnV0dG9uQm94ID0gZG93
bmNhc3Q8UmVuZGVyQm94PigqbmV4dFNpYmxpbmcoKSk7Ci0gICAgaW50IGFic29sdXRlT2Zmc2V0
VG9wID0gYnV0dG9uQm94LmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KDAsIC1zaXplKCkuaGVp
Z2h0KCkpKS55KCk7Ci0KLSAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJs
ZXIodmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKSk7Ci0KLSAgICAvLyBJZiB0aGUg
c2xpZGVyIHdvdWxkIGJlIHJlbmRlcmVkIG91dHNpZGUgdGhlIHBhZ2UsIGl0IHNob3VsZCBiZSBt
b3ZlZCBiZWxvdyB0aGUgY29udHJvbHMuCi0gICAgaWYgKFVOTElLRUxZKGFic29sdXRlT2Zmc2V0
VG9wIDwgMCkpCi0gICAgICAgIHNldFkoYnV0dG9uQm94Lm9mZnNldFRvcCgpICsgdGhlbWUoKS52
b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihidXR0b25Cb3gsIHNpemUoKSkueSgpKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZW5kZXJNZWRpYUNvbnRy
b2xUaW1lbGluZUNvbnRhaW5lcjo6UmVuZGVyTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXIo
RWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKLSAgICA6IFJlbmRlckZsZXhp
YmxlQm94KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQotewotfQotCi0vLyBXZSB3YW50IHRoZSB0
aW1lbGluZSBzbGlkZXIgdG8gYmUgYXQgbGVhc3QgMTAwIHBpeGVscyB3aWRlLgotLy8gRklYTUU6
IEVsaW1pbmF0ZSBoYXJkLWNvZGVkIHdpZHRocyBhbHRvZ2V0aGVyLgotc3RhdGljIGNvbnN0IGlu
dCBtaW5XaWR0aFRvRGlzcGxheVRpbWVEaXNwbGF5cyA9IDQ1ICsgMTAwICsgNDU7Ci0KLXZvaWQg
UmVuZGVyTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXI6OmxheW91dCgpCi17Ci0gICAgUmVu
ZGVyRmxleGlibGVCb3g6OmxheW91dCgpOwotCi0gICAgTGF5b3V0U3RhdGVEaXNhYmxlciBsYXlv
dXRTdGF0ZURpc2FibGVyKHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkpOwotICAg
IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudCogY29udGFpbmVyID0gc3RhdGlj
X2Nhc3Q8TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50Kj4oZWxlbWVudCgpKTsK
LSAgICBjb250YWluZXItPnNldFRpbWVEaXNwbGF5c0hpZGRlbih3aWR0aCgpLnRvSW50KCkgPCBt
aW5XaWR0aFRvRGlzcGxheVRpbWVEaXNwbGF5cyk7Ci19Ci0KLSNpZiBQTEFURk9STShXSU4pICYm
IFVTRShDRykKLQotdm9pZCBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShXSU4pICYmIFVTRShDRykKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOWY2MTEzNjAxN2QwOTIxN2FkODRjNTI0YTZjMmNiMGVhNmMxYzlmZS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5j
bHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJNZWRpYVZvbHVtZVNsaWRlckNv
bnRhaW5lciBmaW5hbCA6IHB1YmxpYyBSZW5kZXJCbG9ja0Zsb3cgewotICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIpOwotcHVibGljOgot
ICAgIFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKEVsZW1lbnQmLCBSZW5kZXJTdHls
ZSYmKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGxheW91dCgpIG92ZXJyaWRlOwotfTsKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBSZW5kZXJNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lciBmaW5hbCA6IHB1YmxpYyBSZW5kZXJGbGV4aWJsZUJveCB7Ci0gICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChSZW5kZXJNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5l
cik7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXIoRWxl
bWVudCYsIFJlbmRlclN0eWxlJiYpOwotCi1wcml2YXRlOgotICAgIHZvaWQgbGF5b3V0KCkgb3Zl
cnJpZGU7Ci0gICAgYm9vbCBpc0ZsZXhpYmxlQm94SW1wbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KLX07Ci0KLSNpZiBQTEFURk9STShXSU4pICYmIFVTRShDRykKLQotY2xhc3Mg
UmVuZGVyTWVkaWFDb250cm9scyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYWRqdXN0TWVk
aWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmKTsKLX07Ci0KLSNlbmRpZiAvLyBQTEFURk9S
TShXSU4pICYmIFVTRShDRykKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNsaWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcApp
bmRleCAzN2VjOGY1NDk3MDRhOWIyY2VlZjQzZjJhOThmZGE4MDYzY2ZhZDBkLi4xNjgxZjlkMWZj
MGI5OTIyNzAxYWZiMzM5ZDFiM2I2ZjE3MGM2OTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2xpZGVyLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2Vy
SWRpb21zLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNsdWRlICJN
b3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCA3ODA5MjVjMjlj
ZWYwNjQ0ZTAzY2EyYjVjMmU1YjcxZmUxZWMyYTY3Li5lOWRkMTQ5NDU4NjRiYTliZDhlODVhNDUw
ODQ3ZTJlNjI1MmQxNjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5j
cHAKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1
ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVBZHdhaXRhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUFkd2FpdGEuY3BwCmluZGV4IGIxOGM0ZDA1ZDUxZTgw
ZDRmMmVhNjEwZjY2YTcyYzI3NTY4N2Q2NzYuLjQ3OGNlOWY2NWVkOGJmNjBhZjA2Y2MyYTRmMjc0
YmYxMWQ5ZDA1NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUFkd2FpdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUFkd2FpdGEuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgorI2luY2x1ZGUgIk1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWludElu
Zm8uaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
QEAgLTQ5Miw2ICs0OTIsMTggQEAgYm9vbCBSZW5kZXJUaGVtZUFkd2FpdGE6OnBhaW50U2xpZGVy
VGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnMKIH0KIAogI2lmIEVO
QUJMRShWSURFTykKK3N0YXRpYyBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gcGFyZW50TWVkaWFF
bGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8Tm9kZT4gbWVkaWFOb2RlID0gbm9kZS0+c2hhZG93SG9z
dCgpOworICAgIGlmICghbWVkaWFOb2RlKQorICAgICAgICBtZWRpYU5vZGUgPSBjb25zdF9jYXN0
PE5vZGUqPihub2RlKTsKKyAgICBpZiAoIWlzPEhUTUxNZWRpYUVsZW1lbnQ+KCptZWRpYU5vZGUp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE1lZGlh
RWxlbWVudD4obWVkaWFOb2RlLmdldCgpKTsKK30KKwogYm9vbCBSZW5kZXJUaGVtZUFkd2FpdGE6
OnBhaW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAg
YXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQocmVuZGVyT2JqZWN0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5oCmluZGV4IDNiMmI1MGRk
ZDU5NTJkYzFlZjVkOGIwMzA0MWQ5MzNjOGIzNzllOWEuLjE5YmMzOTJlZTMxZjY5NTM0OTUyMmQy
MTVkZjk5NWZkNWZhODEyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ29jb2EuaApAQCAtMjgsOSArMjgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKIE9CSkNfQ0xBU1MgTlNEYXRlQ29tcG9uZW50c0Zvcm1hdHRlcjsKLSNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDEyICs0Miw4IEBAIHByaXZhdGU6CiAjZW5kaWYK
IAogcHJvdGVjdGVkOgotI2lmIEVOQUJMRShWSURFTykKICAgICBTdHJpbmcgbWVkaWFDb250cm9s
c0Zvcm1hdHRlZFN0cmluZ0ZvckR1cmF0aW9uKGRvdWJsZSkgb3ZlcnJpZGU7Ci0jZW5kaWYKLSNp
ZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIFJldGFpblB0cjxOU0RhdGVDb21w
b25lbnRzRm9ybWF0dGVyPiBtX2R1cmF0aW9uRm9ybWF0dGVyOwotI2VuZGlmCiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLm1tCmluZGV4IDhiNmM1
ZWRiMzg0MjFjYzdiZWVkYzFjOTZlZmE0MjNkYjdhMjFjNTMuLjYzYTA1ZjY2NTI5MTBmMGFjMmM4
ODg2OTVmMmI3ODAwZmZhN2Q3OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNvY29hLm1tCkBAIC0xMjcsMTEgKzEyNyw4IEBAIGJvb2wgUmVuZGVyVGhlbWVDb2Nv
YTo6cGFpbnRBcHBsZVBheUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25z
dCBQCiAKICNlbmRpZiAvLyBFTkFCTEUoQVBQTEVfUEFZKQogCi0jaWYgRU5BQkxFKFZJREVPKQot
CiBTdHJpbmcgUmVuZGVyVGhlbWVDb2NvYTo6bWVkaWFDb250cm9sc0Zvcm1hdHRlZFN0cmluZ0Zv
ckR1cmF0aW9uKGNvbnN0IGRvdWJsZSBkdXJhdGlvbkluU2Vjb25kcykKIHsKLSNpZiBFTkFCTEUo
TUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmICghc3RkOjppc2Zpbml0ZShkdXJhdGlvbklu
U2Vjb25kcykpCiAgICAgICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJpbmRlZmluaXRlIHRpbWUi
LCAiYWNjZXNzaWJpbGl0eSBoZWxwIHRleHQgZm9yIGFuIGluZGVmaW5pdGUgbWVkaWEgY29udHJv
bGxlciB0aW1lIHZhbHVlIik7CiAKQEAgLTE0NSwxMSArMTQyLDYgQEAgU3RyaW5nIFJlbmRlclRo
ZW1lQ29jb2E6Om1lZGlhQ29udHJvbHNGb3JtYXR0ZWRTdHJpbmdGb3JEdXJhdGlvbihjb25zdCBk
b3VibGUgZHUKICAgICB9CiAgICAgcmV0dXJuIFttX2R1cmF0aW9uRm9ybWF0dGVyLmdldCgpIHN0
cmluZ0Zyb21UaW1lSW50ZXJ2YWw6ZHVyYXRpb25JblNlY29uZHNdOwogICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7Ci0jZWxzZQotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotI2VuZGlm
CiB9CiAKLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUlPUy5tbQppbmRleCAwOWExMmRjNWRhYzFhMWIyNDllMDAxN2NiNGM2
MGYyZGU5YmRmZDVhLi4xMmZkN2ZmZjJmZDkyN2EyZjBlMjdhOGMwZTdiM2RjNGY5MGJjNzBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCkBAIC0xMzU4LDMw
ICsxMzU4LDIxIEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnVwZGF0ZUNhY2hlZFN5c3RlbUZvbnRE
ZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHZhbHVlSUQsIEZvbnRDCiAgICAgZm9udERlc2NyaXB0aW9u
LnNldEl0YWxpYyhub3JtYWxJdGFsaWNWYWx1ZSgpKTsKIH0KIAotI2lmIEVOQUJMRShWSURFTykK
IFN0cmluZyBSZW5kZXJUaGVtZUlPUzo6bWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQogewotI2lm
IEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKG1fbGVnYWN5TWVkaWFDb250
cm9sc1N0eWxlU2hlZXQuaXNFbXB0eSgpKQogICAgICAgICBtX2xlZ2FjeU1lZGlhQ29udHJvbHNT
dHlsZVNoZWV0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTpbW05TQnVuZGxl
IGJ1bmRsZUZvckNsYXNzOltXZWJDb3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xhc3NdXSBwYXRoRm9y
UmVzb3VyY2U6QCJtZWRpYUNvbnRyb2xzaU9TIiBvZlR5cGU6QCJjc3MiXSBlbmNvZGluZzpOU1VU
RjhTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdOwogICAgIHJldHVybiBtX2xlZ2FjeU1lZGlhQ29u
dHJvbHNTdHlsZVNoZWV0OwotI2Vsc2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRp
ZgogfQogCiBTdHJpbmcgUmVuZGVyVGhlbWVJT1M6Om1vZGVybk1lZGlhQ29udHJvbHNTdHlsZVNo
ZWV0KCkKIHsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLm1vZGVybk1lZGlhQ29udHJvbHNF
bmFibGVkKCkpIHsKICAgICAgICAgaWYgKG1fbWVkaWFDb250cm9sc1N0eWxlU2hlZXQuaXNFbXB0
eSgpKQogICAgICAgICAgICAgbV9tZWRpYUNvbnRyb2xzU3R5bGVTaGVldCA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoQ29udGVudHNPZkZpbGU6W1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViQ29y
ZVJlbmRlclRoZW1lQnVuZGxlIGNsYXNzXV0gcGF0aEZvclJlc291cmNlOkAibW9kZXJuLW1lZGlh
LWNvbnRyb2xzIiBvZlR5cGU6QCJjc3MiIGluRGlyZWN0b3J5OkAibW9kZXJuLW1lZGlhLWNvbnRy
b2xzIl0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKICAgICAgICAg
cmV0dXJuIG1fbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7CiAgICAgfQogICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwotI2Vsc2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgogfQog
CiB2b2lkIFJlbmRlclRoZW1lSU9TOjpwdXJnZUNhY2hlcygpCkBAIC0xMzk0LDcgKzEzODUsNiBA
QCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwdXJnZUNhY2hlcygpCiAKIFN0cmluZyBSZW5kZXJUaGVt
ZUlPUzo6bWVkaWFDb250cm9sc1NjcmlwdCgpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xT
X1NDUklQVCkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5tb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChtX21lZGlhQ29u
dHJvbHNTY3JpcHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBOU0J1bmRsZSAqYnVuZGxlID0g
W05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltXZWJDb3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xhc3Nd
XTsKQEAgLTE0MTksMjcgKzE0MDksMTggQEAgU3RyaW5nIFJlbmRlclRoZW1lSU9TOjptZWRpYUNv
bnRyb2xzU2NyaXB0KCkKICAgICAgICAgbV9sZWdhY3lNZWRpYUNvbnRyb2xzU2NyaXB0ID0gc2Ny
aXB0QnVpbGRlci50b1N0cmluZygpOwogICAgIH0KICAgICByZXR1cm4gbV9sZWdhY3lNZWRpYUNv
bnRyb2xzU2NyaXB0OwotI2Vsc2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgog
fQogCiBTdHJpbmcgUmVuZGVyVGhlbWVJT1M6Om1lZGlhQ29udHJvbHNCYXNlNjRTdHJpbmdGb3JJ
Y29uTmFtZUFuZFR5cGUoY29uc3QgU3RyaW5nJiBpY29uTmFtZSwgY29uc3QgU3RyaW5nJiBpY29u
VHlwZSkKIHsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmICghUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5tb2Rlcm5NZWRpYUNvbnRyb2xz
RW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIFN0cmluZyBk
aXJlY3RvcnkgPSAibW9kZXJuLW1lZGlhLWNvbnRyb2xzL2ltYWdlcyI7CiAgICAgTlNCdW5kbGUg
KmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViQ29yZVJlbmRlclRoZW1lQnVu
ZGxlIGNsYXNzXV07CiAgICAgcmV0dXJuIFtbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZkZpbGU6
W2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6aWNvbk5hbWUgb2ZUeXBlOmljb25UeXBlIGluRGlyZWN0
b3J5OmRpcmVjdG9yeV1dIGJhc2U2NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9uczowXTsKLSNlbHNl
Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAotI2VuZGlmIC8vIEVOQUJM
RShWSURFTykKLQogc3RydWN0IENTU1ZhbHVlSURBbmRTZWxlY3RvciB7CiAgICAgQ1NTVmFsdWVJ
RCBjc3NWYWx1ZUlEOwogICAgIFNFTCBzZWxlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAzMThlYjgyZDlhZDU3ZDdkNDM1YTVjMTc5Nzk2OGQz
ZWU3NmI5ZmRjLi4wZTM3MTg4NjIyOGMxYjE2YjI2MmU4ZDZhMDYyOTQyY2I4MmM1OWM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC00OCwxNCArNDgs
MTIgQEAKICNpbXBvcnQgIkxvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAi
TG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oIgogI2ltcG9ydCAiTG9jYWxpemVkU3RyaW5n
cy5oIgotI2ltcG9ydCAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbXBvcnQgIlBhZ2UuaCIK
ICNpbXBvcnQgIlBhaW50SW5mby5oIgogI2ltcG9ydCAiUGF0aFV0aWxpdGllcy5oIgogI2ltcG9y
dCAiUmVuZGVyQXR0YWNobWVudC5oIgogI2ltcG9ydCAiUmVuZGVyTGF5ZXIuaCIKICNpbXBvcnQg
IlJlbmRlck1lZGlhLmgiCi0jaW1wb3J0ICJSZW5kZXJNZWRpYUNvbnRyb2xzLmgiCiAjaW1wb3J0
ICJSZW5kZXJQcm9ncmVzcy5oIgogI2ltcG9ydCAiUmVuZGVyU2xpZGVyLmgiCiAjaW1wb3J0ICJS
ZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5oIgpAQCAtMjk2LDMxICsyOTQsMjEgQEAgTlNWaWV3ICpS
ZW5kZXJUaGVtZU1hYzo6ZG9jdW1lbnRWaWV3Rm9yKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29u
c3QKICAgICByZXR1cm4gVGhlbWVNYWM6OmVuc3VyZWRWaWV3KCZvLnZpZXcoKS5mcmFtZVZpZXco
KSwgc3RhdGVzKTsKIH0KIAotI2lmIEVOQUJMRShWSURFTykKLQogU3RyaW5nIFJlbmRlclRoZW1l
TWFjOjptZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRS
T0xTX1NDUklQVCkKICAgICBpZiAobV9sZWdhY3lNZWRpYUNvbnRyb2xzU3R5bGVTaGVldC5pc0Vt
cHR5KCkpCiAgICAgICAgIG1fbGVnYWN5TWVkaWFDb250cm9sc1N0eWxlU2hlZXQgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlOltbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dl
YkNvcmVSZW5kZXJUaGVtZUJ1bmRsZSBjbGFzc11dIHBhdGhGb3JSZXNvdXJjZTpAIm1lZGlhQ29u
dHJvbHNBcHBsZSIgb2ZUeXBlOkAiY3NzIl0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rpbmcg
ZXJyb3I6bmlsXTsKICAgICByZXR1cm4gbV9sZWdhY3lNZWRpYUNvbnRyb2xzU3R5bGVTaGVldDsK
LSNlbHNlCi0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAogU3RyaW5nIFJl
bmRlclRoZW1lTWFjOjptb2Rlcm5NZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCiB7Ci0jaWYgRU5B
QkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5tb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCgpKSB7CiAgICAg
ICAgIGlmIChtX21lZGlhQ29udHJvbHNTdHlsZVNoZWV0LmlzRW1wdHkoKSkKICAgICAgICAgICAg
IG1fbWVkaWFDb250cm9sc1N0eWxlU2hlZXQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRz
T2ZGaWxlOltbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dlYkNvcmVSZW5kZXJUaGVtZUJ1bmRs
ZSBjbGFzc11dIHBhdGhGb3JSZXNvdXJjZTpAIm1vZGVybi1tZWRpYS1jb250cm9scyIgb2ZUeXBl
OkAiY3NzIiBpbkRpcmVjdG9yeTpAIm1vZGVybi1tZWRpYS1jb250cm9scyJdIGVuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07CiAgICAgICAgIHJldHVybiBtX21lZGlhQ29u
dHJvbHNTdHlsZVNoZWV0OwogICAgIH0KICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbHNl
Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6cHVyZ2VDYWNoZXMoKQpAQCAtMzM1LDcgKzMyMyw2IEBAIHZvaWQgUmVuZGVyVGhlbWVN
YWM6OnB1cmdlQ2FjaGVzKCkKIAogU3RyaW5nIFJlbmRlclRoZW1lTWFjOjptZWRpYUNvbnRyb2xz
U2NyaXB0KCkKIHsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLm1vZGVybk1lZGlhQ29udHJv
bHNFbmFibGVkKCkpIHsKICAgICAgICAgaWYgKG1fbWVkaWFDb250cm9sc1NjcmlwdC5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9y
Q2xhc3M6W1dlYkNvcmVSZW5kZXJUaGVtZUJ1bmRsZSBjbGFzc11dOwpAQCAtMzUzLDI3ICszNDAs
MTggQEAgU3RyaW5nIFJlbmRlclRoZW1lTWFjOjptZWRpYUNvbnRyb2xzU2NyaXB0KCkKICAgICAg
ICAgbV9sZWdhY3lNZWRpYUNvbnRyb2xzU2NyaXB0ID0gbWFrZVN0cmluZyhTdHJpbmcgeyBsb2Nh
bGl6ZWRTdHJpbmdzIH0sIFN0cmluZyB7IHNjcmlwdCB9KTsKICAgICB9CiAgICAgcmV0dXJuIG1f
bGVnYWN5TWVkaWFDb250cm9sc1NjcmlwdDsKLSNlbHNlCi0gICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7Ci0jZW5kaWYKIH0KIAogU3RyaW5nIFJlbmRlclRoZW1lTWFjOjptZWRpYUNvbnRyb2xzQmFz
ZTY0U3RyaW5nRm9ySWNvbk5hbWVBbmRUeXBlKGNvbnN0IFN0cmluZyYgaWNvbk5hbWUsIGNvbnN0
IFN0cmluZyYgaWNvblR5cGUpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkK
ICAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubW9kZXJu
TWVkaWFDb250cm9sc0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAK
ICAgICBOU1N0cmluZyAqZGlyZWN0b3J5ID0gQCJtb2Rlcm4tbWVkaWEtY29udHJvbHMvaW1hZ2Vz
IjsKICAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltXZWJD
b3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xhc3NdXTsKICAgICByZXR1cm4gW1tOU0RhdGEgZGF0YVdp
dGhDb250ZW50c09mRmlsZTpbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTppY29uTmFtZSBvZlR5cGU6
aWNvblR5cGUgaW5EaXJlY3Rvcnk6ZGlyZWN0b3J5XV0gYmFzZTY0RW5jb2RlZFN0cmluZ1dpdGhP
cHRpb25zOjBdOwotI2Vsc2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgogfQog
Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQotCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMp
CiAKIFN0cmluZyBSZW5kZXJUaGVtZU1hYzo6aW1hZ2VDb250cm9sc1N0eWxlU2hlZXQoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKaW5kZXggY2Zk
OWYyNWMzNjI2ZDUwZWJhZDMyZjJlNWNhMDA5NzJlODVlZjYxZS4uOTQyMmYyZWMxYTVjNTNlNTNi
YjlkNTdkNDYxOTk5YTZmOWI4YmQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVXaW4uY3BwCkBAIC00MiwxMCArNDIsNiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgogCi0jaWYgRU5B
QkxFKFZJREVPKQotI2luY2x1ZGUgIlJlbmRlck1lZGlhQ29udHJvbHMuaCIKLSNlbmRpZgotCiAj
aW5jbHVkZSA8dGNoYXIuaD4KIAogLyogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
aW5kZXggOTQ1ZGRmZDU3NmQyNmZlM2I4Mjc4Y2QyNjkwZWMwZmE0ZThmNWVmNi4uN2EyNWVhYjM1
MWNhMzkxM2E5NzBkNDA4MmFmNGIxN2I0NTJlMzAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcApAQCAtNDUzMSwxMiArNDUzMSw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50
ZXJuYWxzOjpwYXRoU3RyaW5nV2l0aFNocmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8ZG91
CiAKIFN0cmluZyBJbnRlcm5hbHM6OmdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzRm9yRWxl
bWVudChIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCiB7Ci0jaWYgIUVOQUJMRShNRURJ
QV9DT05UUk9MU19TQ1JJUFQpCi0gICAgVU5VU0VEX1BBUkFNKG1lZGlhRWxlbWVudCk7Ci0gICAg
cmV0dXJuIFN0cmluZygpOwotI2Vsc2UKICAgICByZXR1cm4gbWVkaWFFbGVtZW50LmdldEN1cnJl
bnRNZWRpYUNvbnRyb2xzU3RhdHVzKCk7Ci0jZW5kaWYKIH0KIAogI2lmICFQTEFURk9STShDT0NP
QSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395216</attachid>
            <date>2020-04-01 15:51:22 -0700</date>
            <delta_ts>2020-04-02 15:05:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209875-20200401155121.patch</filename>
            <type>text/plain</type>
            <size>215596</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5MzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmRjMzc2NGI5NjMwYzlk
Nzc0ZjczM2FmNGEyNGU4YWRhNzA4ODZhMi4uNTc5NjQ2NDkxYTA0NjQ1YjEzYmNiYmNhMGYwMDlh
Mzc2YTM4ZTE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAyMC0wNC0wMSAgRXJp
YyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdW51
c2VkIG1lZGlhIGNvbnRyb2xzIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwOTg3NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjExNzI3Mzg+
CisKKyAgICAgICAgUmVtb3ZlIGNvZGUgZm9yIHRoZSwgbm93IHVudXNlZCwgQysrIGJhc2VkIG1l
ZGlhIGNvbnRyb2xzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuCisKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OnRleHRUcmFja0NvbnRhaW5lcik6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0Lmg6CisgICAgICAgICogTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRnJvbVJlbmRlcmVyKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmg6IFJlbW92ZWQuCisgICAgICAgICogZG9t
L05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzTWVkaWFDb250cm9sRWxlbWVudCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc01lZGlhQ29udHJvbHMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6On5IVE1MTWVkaWFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVy
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGF1c2VBZnRl
ckRldGFjaGVkVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRh
dGVSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RN
ZWRpYVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
TG9hZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRO
ZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y2hhbmdl
TmV0d29ya1N0YXRlRnJvbUxvYWRpbmdUb0lkbGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50Ojpwcm9ncmVzc0V2ZW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpwbGF5YmFja1Byb2dyZXNzVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjphZGRUZXh0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6cmVtb3ZlVGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OmRpZEFkZFRleHRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjplbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVDYXB0aW9uQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmxheW91dFNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja3MpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJDaGFyYWN0ZXJpc3RpY0NoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlVm9sdW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZGlkQmVjb21lRnVsbHNjcmVlbkVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6d2lsbFN0b3BCZWluZ0Z1bGxzY3Jl
ZW5FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFj
a1JlYWR5U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OmNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0Q2xvc2VkQ2FwdGlvbnNW
aXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZU1l
ZGlhQ29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y2FwdGlv
blByZWZlcmVuY2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
OjpzZXRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Omdl
dEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OmNsb3NlQ2FwdGlvblRyYWNrc0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFDb250cm9scyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpoYXNNZWRpYUNvbnRyb2xzIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0
ZU1lZGlhQ29udHJvbHMpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFDb250cm9sc0hv
c3QpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVz
Lmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
Lmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbXBhcmVDdWVJbnRlcnZhbEZvckRpc3BsYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50
Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6cHJvY2Vzc0Fj
dGl2ZVZUVEN1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50Ojp1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFN0cm9r
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y2xlYXJU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjplbnRlcmVk
RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50OjpleGl0ZWRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVZpZGVvRGlzcGxheVNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6dXBkYXRlU2l6ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp0
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6aGlkZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpzaG93KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6Omlz
U2hvd2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50Ojpsb2dnZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nSWRlbnRpZmllciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojps
b2dDaGFubmVsIGNvbnN0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01l
ZGlhQ29udHJvbHMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29u
dHJvbHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
ZWRpYUFGLmNwcDoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZTo6c2V0UGFnZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJN
ZWRpYUNvbnRyb2xzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVk
aWFDb250cm9scy5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ29jb2EuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ29jb2E6Om1lZGlhQ29udHJvbHNGb3JtYXR0
ZWRTdHJpbmdGb3JEdXJhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6Om1lZGlhQ29udHJvbHNTdHls
ZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjptb2Rlcm5NZWRpYUNv
bnRyb2xzU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6bWVk
aWFDb250cm9sc1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6bWVk
aWFDb250cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5kVHlwZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6Om1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjptb2Rlcm5NZWRpYUNvbnRyb2xzU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6bWVkaWFDb250cm9sc1NjcmlwdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6bWVkaWFDb250cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5k
VHlwZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpnZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1c0ZvckVsZW1lbnQpOgor
CiAyMDIwLTAzLTMxICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFtpUGFkXSBVc2UgQVZBdWRpb1Nlc3Npb24gdG8gZGV0ZWN0IEFpclBsYXkgcm91dGUg
Y2hhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xz
L01lZGlhQ29udHJvbHNIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250
cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKaW5kZXggNTA4YjlhMThlZWYyMzgzYWI2MWI5OWNm
NjVmNTY1MmJjYjk1NzY3Ny4uMjc1MjYxZTk5OGQzMWYxNjg5MjlhNDkyMzg3NjdhODFhZjM0ODI0
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlh
Q29udHJvbHNIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJv
bHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCkBAIC0yNSwxNCArMjUsMTIgQEAKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLQogI2luY2x1
ZGUgIk1lZGlhQ29udHJvbHNIb3N0LmgiCiAKICNpbmNsdWRlICJDYXB0aW9uVXNlclByZWZlcmVu
Y2VzLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgorI2luY2x1ZGUgIk1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTE1OSwxMSAr
MTU3LDEwIEBAIHZvaWQgTWVkaWFDb250cm9sc0hvc3Q6OnNldFNlbGVjdGVkVGV4dFRyYWNrKFRl
eHRUcmFjayogdHJhY2spCiAKIEVsZW1lbnQqIE1lZGlhQ29udHJvbHNIb3N0Ojp0ZXh0VHJhY2tD
b250YWluZXIoKQogewotICAgIGlmICghbV90ZXh0VHJhY2tDb250YWluZXIgJiYgbV9tZWRpYUVs
ZW1lbnQpIHsKLSAgICAgICAgbV90ZXh0VHJhY2tDb250YWluZXIgPSBNZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkp
OwotICAgICAgICBtX3RleHRUcmFja0NvbnRhaW5lci0+c2V0TWVkaWFDb250cm9sbGVyKG1fbWVk
aWFFbGVtZW50LmdldCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fdGV4dFRyYWNrQ29udGFpbmVy
LmdldCgpOworICAgIGlmICghbV90ZXh0VHJhY2tDb250YWluZXIgJiYgbV9tZWRpYUVsZW1lbnQp
CisgICAgICAgIG1fdGV4dFRyYWNrQ29udGFpbmVyID0gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29u
dGFpbmVyRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLCAqbV9tZWRp
YUVsZW1lbnQpOworCisgICAgICAgIHJldHVybiBtX3RleHRUcmFja0NvbnRhaW5lci5nZXQoKTsK
IH0KIAogdm9pZCBNZWRpYUNvbnRyb2xzSG9zdDo6dXBkYXRlVGV4dFRyYWNrQ29udGFpbmVyKCkK
QEAgLTMyMSw1ICszMTgsMyBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0Ojpjb21wYWN0TW9kZSgp
IGNvbnN0CiB9CiAKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCmluZGV4IGU0MGY1MWYzM2Nm
MThkZmJlNTI2OGZlYTExYzc1MDkyZDU3MWFiOGIuLjQxNGNiMGNiNTZhMmYyODVhZDI0YzljNTIx
OWY0ODlmZjRlZTBhZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFj
b250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCkBAIC0yNSw4ICsyNSw2IEBACiAKICNw
cmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLQogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WYXJpYW50Lmg+CkBAIC0xMDQsNCArMTAyLDMgQEAgcHJpdmF0ZToKIAogfQogCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQppbmRleCA1Y2VhNWUxYzVlYmIwMDU1Yzg0MzMzZmJm
NGViMWM4NmQyZWM2YjY4Li41MzdlZWU3ZGFjYzdkYzQ0NmQ5ODk5NmQ4NGRiNWQxZGEzNGYxZWE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1
Z2luUmVwbGFjZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCkBAIC0yNSw4ICsyNSw2IEBACiAKICNpbXBvcnQg
ImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLQogI2ltcG9y
dCAiUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKIAogI2ltcG9ydCAiQ29tbW9uVk0uaCIK
QEAgLTQzNyw0ICs0MzUsMyBAQCBKU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNl
bWVudDo6ZXJyb3JMb2coSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUpCiAKIH0KIAotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDNkZTI1YzQwYTZlOTVkM2RiZDU3Mzg3NmJiNGZhMTYyZWZmZTcy
ZDUuLjNiYTI0ZDcxYzUyZjk0OGNkY2ZhYjhhZjkwYzNjY2E4M2E5ODBmZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC00NDcsNyArNDQ3LDYgQEAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5j
cHAKIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwCiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5TWF0aE1MRWxlbWVudC5jcHAKLWFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29u
dHJvbHMuY3BwCiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAKIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNwcAogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAKQEAgLTEzNjgsOSArMTM2Nyw3IEBAIGh0bWwv
cGFyc2VyL1hTU0F1ZGl0b3JEZWxlZ2F0ZS5jcHAKIGh0bWwvc2hhZG93L0F1dG9GaWxsQnV0dG9u
RWxlbWVudC5jcHAKIGh0bWwvc2hhZG93L0RhdGFMaXN0QnV0dG9uRWxlbWVudC5jcHAKIGh0bWwv
c2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcAotaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
RWxlbWVudFR5cGVzLmNwcAotaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCi1o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAoraHRtbC9zaGFkb3cvTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudC5jcHAKIGh0bWwvc2hhZG93L1Byb2dyZXNzU2hhZG93RWxl
bWVudC5jcHAKIGh0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKIGh0bWwvc2hhZG93
L1NwaW5CdXR0b25FbGVtZW50LmNwcApAQCAtMjE5MCw3ICsyMTg3LDYgQEAgcmVuZGVyaW5nL1Jl
bmRlckxpc3RJdGVtLmNwcAogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCiByZW5kZXJp
bmcvUmVuZGVyTWFycXVlZS5jcHAKIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAKLXJlbmRlcmlu
Zy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAog
cmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxv
dy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA5ZWNlYTYwYmVkY2Y4YzMzOGI0ZDg3NDc1ZDNhZGYxNTk4YWRiZTljLi5mYWY0
MzY3YWRiMGU1YWRmZGU3MGEyMGNlZjJhYjllNTdkNTQ4N2E1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MzgsNyArNjM4LDYg
QEAKIAkJMUQ5RjBGQzEyMTIyMDI5QjAwNUQ4RkQ0IC8qIFNoYXJlRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMURDNTU0MDAyMTFCQThDODAwNEI3
ODBFIC8qIFNoYXJlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTFEQkMxQjU2MjM0N0IzRDIwMEI5MDFBRiAvKiBQaWN0dXJlSW5QaWN0dXJl
T2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFEQkMxQjU1MjM0N0IzRDIwMEI5MDFBRiAvKiBQaWN0dXJlSW5QaWN0dXJlT2JzZXJ2ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxRjM2RUE5
QzFFMjFCQTE3MDA2MjFFMjUgLyogV2ViQmFja2dyb3VuZFRhc2tDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjM2RUE5QTFFMjFCQTE3
MDA2MjFFMjUgLyogV2ViQmFja2dyb3VuZFRhc2tDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUYzQzNCRUIxMzVDQUYzQzAwQjhD
MUFDIC8qIE1lZGlhQ29udHJvbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFGM0MzQkU5MTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmgg
Ki87IH07CiAJCTFGNzJCRjBCMTg3RkQ0NUMwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1lbW9y
eUhhbmRsZXJJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFGNzJCRjA5MTg3RkQ0MjcwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1lbW9yeUhhbmRs
ZXJJT1MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxRjg3NTZCMjFFMjJDMzM1MDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjg3
NTZCMTFFMjJCRUVGMDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUZBRkJG
MTkxNUE1RkE3NDAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUZBRkJGMTYxNUE1RkE1MjAwMDgzQTIwIC8qIFVU
SVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xMDg2LDcgKzEwODUsNyBAQAogCQk0MTZFNkZFOTFCQkQxMkU1MDAwQTYwNDMgLyog
UmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEQ4IC8qIFJlYWRhYmxlU3RyZWFt
QnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0MTZFNkZFOTFCQkQxMkU1MDAwQTYwNTMgLyogV3JpdGFibGVTdHJlYW1CdWlsdGlucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYx
QkIzMTEwRDAwQjc2NEU4IC8qIFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTZGRDI1RjI0MEZBNEU1MDA2
NjYxRDggLyogTm93UGxheWluZ0luZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxNkZEMjVEMjQwRUUxQUUwMDY2NjFEOCAvKiBOb3dQbGF5aW5nSW5m
by5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTQx
NzI1M0FCMTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE3MjUzQTkxMzU0QkJCQzAw
MzYwRjJBIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmggKi87IH07CisJCTQxNzI1M0FCMTM1NEJC
QkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTcyNTNBOTEzNTRC
QkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oICov
OyB9OwogCQk0MTc2MTJBRjFFM0E5OTQwMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2lu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTc2
MTJBQjFFM0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2ludC5jcHAgKi87IH07
CiAJCTQxNzYxMkIwMUUzQTk5NDAwMEMzRDgxRCAvKiBMaWJXZWJSVENNZWRpYUVuZHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTc2MTJBQzFF
M0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2ludC5oICovOyB9OwogCQk0MTc2
MTJCMTFFM0E5OTQwMDBDM0Q4MUQgLyogTGliV2ViUlRDUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNzYxMkFE
MUUzQTk5M0IwMEMzRDgxRCAvKiBMaWJXZWJSVENQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwICov
OyB9OwpAQCAtNDU2Niw3ICs0NTY1LDYgQEAKIAkJREU1Rjg2NTkxRkEyQUYyNDAwNkRCNjNCIC8q
IFVuaWZpZWRTb3VyY2U2MS1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IERFNUY4NjNBMUZBMkFGMDcwMDZEQjYzQiAvKiBVbmlmaWVkU291cmNlNjEt
bW0ubW0gKi87IH07CiAJCURFNzcxMDg2MUZBMkYwRDYwMDQ2MDAxNiAvKiBXZWJBcmNoaXZlRHVt
cFN1cHBvcnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMTc2M0YzQzFFMjA1MjM0MDAxRDU4REUgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0Lm1tICov
OyB9OwogCQlERUJDQ0REMjE2NjQ2RTgyMDBBNDUyRTEgLyogUmVuZGVyTWVkaWFDb250cm9scy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU0OUIzMDgx
NjVGMkZFMTAwMTAzMzhEIC8qIFJlbmRlck1lZGlhQ29udHJvbHMuaCAqLzsgfTsKLQkJREVCQ0NE
RDQxNjY0NkVBRjAwQTQ1MkUxIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU0OUIzMDAxNjVGMkZDNjAw
MTAzMzhEIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oICovOyB9OwogCQlERUNBN0Q5MzFG
OUU2N0I1MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTEzMS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERUNBN0Q2RDFGOUU2MUNGMDBFM0I2NjEgLyog
VW5pZmllZFNvdXJjZTEzMS5jcHAgKi87IH07CiAJCURFQ0E3RDk0MUY5RTY3QjUwMEUzQjY2MSAv
KiBVbmlmaWVkU291cmNlMTMyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IERFQ0E3RDdFMUY5RTYxRTMwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMTMy
LmNwcCAqLzsgfTsKIAkJREVDQTdEOTUxRjlFNjdCNTAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2Ux
MzMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREVD
QTdEODAxRjlFNjFFNTAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxMzMuY3BwICovOyB9OwpAQCAt
NjYzNCw4ICs2NjMyLDYgQEAKIAkJMURFRjA2REUyMzNEMkUxQzAwRUUyMjhEIC8qIERvY3VtZW50
UGljdHVyZUluUGljdHVyZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRG9jdW1lbnRQaWN0
dXJlSW5QaWN0dXJlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUYzNkVBOUEx
RTIxQkExNzAwNjIxRTI1IC8qIFdlYkJhY2tncm91bmRUYXNrQ29udHJvbGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJCYWNrZ3JvdW5kVGFza0NvbnRyb2xsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUYzNkVBOUIxRTIxQkExNzAwNjIxRTI1IC8q
IFdlYkJhY2tncm91bmRUYXNrQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdlYkJhY2tncm91bmRUYXNrQ29udHJvbGxlci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUYzQzNCRTgxMzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29u
dHJvbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFDb250
cm9scy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFGM0MzQkU5MTM1Q0FGM0Mw
MEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1lZGlhQ29udHJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUY3MkJG
MDgxODdGRDQyNzAwMDlCQ0IzIC8qIFRpbGVDb250cm9sbGVyTWVtb3J5SGFuZGxlcklPUy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaWxlQ29udHJvbGxlck1lbW9y
eUhhbmRsZXJJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRjcyQkYwOTE4
N0ZENDI3MDAwOUJDQjMgLyogVGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5kbGVySU9TLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbGVDb250cm9sbGVyTWVtb3J5SGFuZGxlcklP
Uy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRjg3NTZCMDFFMjJCRUVGMDA0MkM0
MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzQ0OCw4ICs3NDQ0LDggQEAKIAkJNDE2
RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtlclJlcG9ydGluZ1Byb3h5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlclJlcG9ydGluZ1Byb3h5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNkZEMjVEMjQwRUUxQUUwMDY2NjFEOCAvKiBOb3dQbGF5
aW5nSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb3dQbGF5aW5nSW5m
by5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTcwQTJFOTFEOEMwQ0MwMDAzMTg0
NTIgLyogSlNET01XcmFwcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTRE9NV3JhcHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxNzI1
M0E4MTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxNzI1M0E5MTM1NEJCQkMwMDM2MEYyQSAvKiBN
ZWRpYUNvbnRyb2xFbGVtZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
ZWRpYUNvbnRyb2xFbGVtZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTcy
NTNBODEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDE3MjUzQTkxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MTc2MTJBQjFFM0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2lu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMaWJXZWJSVENNZWRp
YUVuZHBvaW50LmNwcDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBvaW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE3NjEyQUMxRTNBOTkzQjAwQzNEODFE
IC8qIExpYldlYlJUQ01lZGlhRW5kcG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gTGliV2ViUlRDTWVkaWFFbmRwb2ludC5oOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJU
Q01lZGlhRW5kcG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE3NjEyQUQx
RTNBOTkzQjAwQzNEODFEIC8qIExpYldlYlJUQ1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMaWJXZWJSVENQZWVyQ29ubmVjdGlv
bkJhY2tlbmQuY3BwOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJUQ1BlZXJDb25uZWN0aW9uQmFj
a2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDU3Miw4ICsxNDU2OCw2
IEBACiAJCURCRkNCMEVCRkY1Q0Q3N0VCRUIzNTk1RiAvKiBSZW5kZXJNYXRoTUxQYWRkZWQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWF0aE1MUGFkZGVk
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREQwNUZFMEIwQjhCQTNDNjAwOUFD
REZFIC8qIFdlYkNvcmVPYmpDRXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJDb3JlT2JqQ0V4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
RDc2M0JCMTA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5keWxpYiAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIi
OyBuYW1lID0gbGlieG1sMi5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYnhtbDIuZHlsaWI7IHNv
dXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07Ci0JCURFNDlCMkZGMTY1RjJGQzYwMDEwMzM4RCAv
KiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJREU0OUIzMDAxNjVGMkZDNjAwMTAzMzhEIC8qIE1lZGlhQ29udHJvbEVs
ZW1lbnRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUNvbnRy
b2xFbGVtZW50VHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREU0OUIzMDcx
NjVGMkZFMTAwMTAzMzhEIC8qIFJlbmRlck1lZGlhQ29udHJvbHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWVkaWFDb250cm9scy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFNDlCMzA4MTY1RjJGRTEwMDEwMzM4RCAvKiBSZW5kZXJN
ZWRpYUNvbnRyb2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1l
ZGlhQ29udHJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREU1RjgzQjIxRkEx
ODY3NjAwNkRCNjNBIC8qIFVuaWZpZWRTb3VyY2UzMDEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gVW5pZmllZFNvdXJjZTMwMS5jcHA7IHBhdGggPSAiRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTMwMS5jcHAiOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTgyNTAsMTIgKzE4MjQ0LDggQEAK
IAkJCQlBN0M5QUJGNzEzNTdBM0JGMDBGNTUwM0YgLyogRGV0YWlsc01hcmtlckNvbnRyb2wuaCAq
LywKIAkJCQk1MTAxOTJEMzE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVt
ZW50LmNwcCAqLywKIAkJCQk1MTAxOTJENDE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9s
c1Jvb3RFbGVtZW50LmggKi8sCi0JCQkJNDE3MjUzQTgxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlh
Q29udHJvbEVsZW1lbnRzLmNwcCAqLywKLQkJCQk0MTcyNTNBOTEzNTRCQkJDMDAzNjBGMkEgLyog
TWVkaWFDb250cm9sRWxlbWVudHMuaCAqLywKLQkJCQlERTQ5QjJGRjE2NUYyRkM2MDAxMDMzOEQg
LyogTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcCAqLywKLQkJCQlERTQ5QjMwMDE2NUYyRkM2
MDAxMDMzOEQgLyogTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmggKi8sCi0JCQkJMUYzQzNCRTgx
MzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMuY3BwICovLAotCQkJCTFGM0MzQkU5MTM1
Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggKi8sCisJCQkJNDE3MjUzQTgxMzU0QkJC
QzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuY3BwICov
LAorCQkJCTQxNzI1M0E5MTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50LmggKi8sCiAJCQkJRTRFMjQzODIxREFCOTUzRTAwQzI2RTRCIC8qIG1l
dGVyRWxlbWVudFNoYWRvdy5jc3MgKi8sCiAJCQkJQTcxNUU2NTAxMzRCQkJFQzAwRDhFNzEzIC8q
IFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHAgKi8sCiAJCQkJQTcxNUU2NTExMzRCQkJFQzAwRDhF
NzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5oICovLApAQCAtMzE4MTgsMTIgKzMxODA4LDEw
IEBACiAJCQkJQ0RDQzlCQ0YyMjM4N0U5QTAwRkZCNTFDIC8qIE1lZGlhQ2FwYWJpbGl0aWVzRGVj
b2RpbmdJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRENDOUJEMTIyMzg3RUFBMDBGRkI1MUMg
LyogTWVkaWFDYXBhYmlsaXRpZXNFbmNvZGluZ0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTA3
OEUwOTNBMTdEMTZFMUMwMDQyMEFBMSAvKiBNZWRpYUNvbnN0cmFpbnRzLmggaW4gSGVhZGVycyAq
LywKLQkJCQk0MTcyNTNBQjEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sRWxlbWVudHMu
aCBpbiBIZWFkZXJzICovLAotCQkJCURFQkNDREQ0MTY2NDZFQUYwMEE0NTJFMSAvKiBNZWRpYUNv
bnRyb2xFbGVtZW50VHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjY1Q0M4MTQ1QjFFNzUw
MEM0QzdBQSAvKiBNZWRpYUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjY1Q0NB
MTQ1QjQ0ODgwMEM0QzdBQSAvKiBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTFGM0MzQkVCMTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDREFCNkQyOTE3QzdERTZDMDBDNjBCMzQgLyogTWVkaWFDb250cm9s
c0hvc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNzI1M0FCMTM1NEJCQkMwMDM2MEYyQSAvKiBN
ZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDREYyQjAwNDE4MUYwNTlDMDBGMkI0MjQgLyogTWVkaWFEZXNjcmlwdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTUxNDVCOTAxQjNBMUNFMDAwNjYyQkY3IC8qIE1lZGlhRGV2aWNlSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUVBNzI1RDMxQUNBQkQ0NzAwRUFEMTdCIC8qIE1lZGlhRGV2
aWNlcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcAppbmRleCBkN2Y1YzRjOGYzOTc5MGMxMDZlOGJmZDY1YzRlODU1NzE4
ZDg5MzZkLi4zYTE5ODI3OTBhZWJhZTg5MjIyZDY5ODY3MWMyMGM0MGEwZTc5OGZmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTQ0LDcg
KzQ0LDYgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJveC5oIgogI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1hdGhN
TEVsZW1lbnQuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oIgogI2lu
Y2x1ZGUgIkFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdC5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxp
dHlNZW51TGlzdC5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5oIgpA
QCAtNzUsNiArNzQsNyBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTExhYmVsRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWV0ZXJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgpA
QCAtMTEyLDEwICsxMTIsNiBAQAogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8
d3RmL1NldEZvclNjb3BlLmg+CiAKLSNpZiBFTkFCTEUoVklERU8pCi0jaW5jbHVkZSAiTWVkaWFD
b250cm9sRWxlbWVudHMuaCIKLSNlbmRpZgotCiAjaWYgQ09NUElMRVIoTVNWQykKIC8vIFNlZSBo
dHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzF3ZWE1endlLmFzcHgKICNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQpAQCAtNTI5LDEyICs1MjUsNiBAQCBzdGF0aWMg
UmVmPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNyZWF0ZUZyb21SZW5kZXJlcihSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0OjpjcmVh
dGUocmVuZGVyZXIpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgLy8gbWVkaWEg
Y29udHJvbHMKLSAgICBpZiAobm9kZSAmJiBub2RlLT5pc01lZGlhQ29udHJvbEVsZW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OmNyZWF0ZShyZW5kZXJl
cik7Ci0jZW5kaWYKLQogICAgIGlmIChpczxSZW5kZXJTVkdSb290PigqcmVuZGVyZXIpKQogICAg
ICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVNWR1Jvb3Q6OmNyZWF0ZShyZW5kZXJlcik7CiAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlN
ZWRpYUNvbnRyb2xzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU1lZGlhQ29udHJvbHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTJk
ODQwM2IzNGJiZjdlMThmNDAxYzM4OTMzOWY2YTYxNGRhZGZhLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzM2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShWSURFTykKLQotI2luY2x1ZGUg
IkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmgiCi0KLSNpbmNsdWRlICJBWE9iamVjdENhY2hl
LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJp
bmdzLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwotCi0KLUFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OkFjY2Vzc2liaWxpdHlN
ZWRpYUNvbnRyb2woUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLSAgICA6IEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QocmVuZGVyZXIpCi17Ci19Ci0KLVJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBB
Y2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
LXsKLSAgICBBU1NFUlQocmVuZGVyZXItPm5vZGUoKSk7Ci0KLSAgICBzd2l0Y2ggKG1lZGlhQ29u
dHJvbEVsZW1lbnRUeXBlKHJlbmRlcmVyLT5ub2RlKCkpKSB7Ci0gICAgY2FzZSBNZWRpYVNsaWRl
cjoKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lOjpjcmVhdGUocmVu
ZGVyZXIpOwotCi0gICAgY2FzZSBNZWRpYUN1cnJlbnRUaW1lRGlzcGxheToKLSAgICBjYXNlIE1l
ZGlhVGltZVJlbWFpbmluZ0Rpc3BsYXk6Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5TWVk
aWFUaW1lRGlzcGxheTo6Y3JlYXRlKHJlbmRlcmVyKTsKLQotICAgIGNhc2UgTWVkaWFDb250cm9s
c1BhbmVsOgotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWlu
ZXI6OmNyZWF0ZShyZW5kZXJlcik7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sKHJlbmRlcmVyKSk7Ci0gICAgfQot
fQotCi1NZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpj
b250cm9sVHlwZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcigp
LT5ub2RlKCkpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWVsaW5lQ29udGFpbmVyOyAvLyBUaW1l
bGluZSBjb250YWluZXIgaXMgbm90IGFjY2Vzc2libGUuCi0KLSAgICByZXR1cm4gbWVkaWFDb250
cm9sRWxlbWVudFR5cGUocmVuZGVyZXIoKS0+bm9kZSgpKTsKLX0KLQotY29uc3QgU3RyaW5nJiBB
Y2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpjb250cm9sVHlwZU5hbWUoKSBjb25zdAotewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhRW50ZXJGdWxsc2NyZWVu
QnV0dG9uTmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiRW50ZXJGdWxsc2NyZWVuQnV0dG9u
IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhRXhpdEZ1
bGxzY3JlZW5CdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJFeGl0RnVsbHNjcmVl
bkJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRp
YU11dGVCdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJNdXRlQnV0dG9uIikpOwot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhUGxheUJ1dHRvbk5h
bWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlBsYXlCdXR0b24iKSk7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFTZWVrQmFja0J1dHRvbk5hbWUoTUFLRV9T
VEFUSUNfU1RSSU5HX0lNUEwoIlNlZWtCYWNrQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhU2Vla0ZvcndhcmRCdXR0b25OYW1lKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCJTZWVrRm9yd2FyZEJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVJld2luZEJ1dHRvbk5hbWUoTUFLRV9TVEFUSUNf
U1RSSU5HX0lNUEwoIlJld2luZEJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgU3RyaW5nPiBtZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b25OYW1lKE1BS0VfU1RBVElD
X1NUUklOR19JTVBMKCJSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhVW5NdXRlQnV0dG9uTmFtZShNQUtFX1NUQVRJ
Q19TVFJJTkdfSU1QTCgiVW5NdXRlQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBTdHJpbmc+IG1lZGlhUGF1c2VCdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19J
TVBMKCJQYXVzZUJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3Ry
aW5nPiBtZWRpYVN0YXR1c0Rpc3BsYXlOYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJTdGF0
dXNEaXNwbGF5IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1l
ZGlhQ3VycmVudFRpbWVEaXNwbGF5KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJDdXJyZW50VGlt
ZURpc3BsYXkiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVk
aWFUaW1lUmVtYWluaW5nRGlzcGxheShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVGltZVJlbWFp
bmluZ0Rpc3BsYXkiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4g
bWVkaWFTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBM
KCJTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b24iKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IFN0cmluZz4gbWVkaWFIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b25OYW1lKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCJIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24iKSk7Ci0KLSAgICBzd2l0
Y2ggKGNvbnRyb2xUeXBlKCkpIHsKLSAgICBjYXNlIE1lZGlhRW50ZXJGdWxsc2NyZWVuQnV0dG9u
OgotICAgICAgICByZXR1cm4gbWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b25OYW1lOwotICAgIGNh
c2UgTWVkaWFFeGl0RnVsbHNjcmVlbkJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhRXhpdEZ1
bGxzY3JlZW5CdXR0b25OYW1lOwotICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uOgotICAgICAgICBy
ZXR1cm4gbWVkaWFNdXRlQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhUGxheUJ1dHRvbjoKLSAg
ICAgICAgcmV0dXJuIG1lZGlhUGxheUJ1dHRvbk5hbWU7Ci0gICAgY2FzZSBNZWRpYVNlZWtCYWNr
QnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFTZWVrQmFja0J1dHRvbk5hbWU7Ci0gICAgY2Fz
ZSBNZWRpYVNlZWtGb3J3YXJkQnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFTZWVrRm9yd2Fy
ZEJ1dHRvbk5hbWU7Ci0gICAgY2FzZSBNZWRpYVJld2luZEJ1dHRvbjoKLSAgICAgICAgcmV0dXJu
IG1lZGlhUmV3aW5kQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1
dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvbk5hbWU7Ci0g
ICAgY2FzZSBNZWRpYVVuTXV0ZUJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhVW5NdXRlQnV0
dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhUGF1c2VCdXR0b246Ci0gICAgICAgIHJldHVybiBtZWRp
YVBhdXNlQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhU3RhdHVzRGlzcGxheToKLSAgICAgICAg
cmV0dXJuIG1lZGlhU3RhdHVzRGlzcGxheU5hbWU7Ci0gICAgY2FzZSBNZWRpYUN1cnJlbnRUaW1l
RGlzcGxheToKLSAgICAgICAgcmV0dXJuIG1lZGlhQ3VycmVudFRpbWVEaXNwbGF5OwotICAgIGNh
c2UgTWVkaWFUaW1lUmVtYWluaW5nRGlzcGxheToKLSAgICAgICAgcmV0dXJuIG1lZGlhVGltZVJl
bWFpbmluZ0Rpc3BsYXk7Ci0gICAgY2FzZSBNZWRpYVNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbjoK
LSAgICAgICAgcmV0dXJuIG1lZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uTmFtZTsKLSAgICBj
YXNlIE1lZGlhSGlkZUNsb3NlZENhcHRpb25zQnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFI
aWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b25OYW1lOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eU1lZGlhQ29udHJvbDo6YWNjZXNzaWJpbGl0eVRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlU
ZXh0PiYgdGV4dE9yZGVyKSBjb25zdAotewotICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGFjY2Vz
c2liaWxpdHlEZXNjcmlwdGlvbigpOwotICAgIGlmICghZGVzY3JpcHRpb24uaXNFbXB0eSgpKQot
ICAgICAgICB0ZXh0T3JkZXIuYXBwZW5kKEFjY2Vzc2liaWxpdHlUZXh0KGRlc2NyaXB0aW9uLCBB
Y2Nlc3NpYmlsaXR5VGV4dFNvdXJjZTo6QWx0ZXJuYXRpdmUpKTsKLQotICAgIFN0cmluZyB0aXRs
ZSA9IHRoaXMtPnRpdGxlKCk7Ci0gICAgaWYgKCF0aXRsZS5pc0VtcHR5KCkpCi0gICAgICAgIHRl
eHRPcmRlci5hcHBlbmQoQWNjZXNzaWJpbGl0eVRleHQodGl0bGUsIEFjY2Vzc2liaWxpdHlUZXh0
U291cmNlOjpBbHRlcm5hdGl2ZSkpOwotCi0gICAgU3RyaW5nIGhlbHB0ZXh0ID0gaGVscFRleHQo
KTsKLSAgICBpZiAoIWhlbHB0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgdGV4dE9yZGVyLmFwcGVu
ZChBY2Nlc3NpYmlsaXR5VGV4dChoZWxwdGV4dCwgQWNjZXNzaWJpbGl0eVRleHRTb3VyY2U6Okhl
bHApKTsKLX0KLSAgICAKLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OnRpdGxl
KCkgY29uc3QKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBjb250
cm9sc1BhbmVsKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJDb250cm9sc1BhbmVsIikpOwotCi0g
ICAgaWYgKGNvbnRyb2xUeXBlKCkgPT0gTWVkaWFDb250cm9sc1BhbmVsKQotICAgICAgICByZXR1
cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmluZyhjb250cm9sc1BhbmVsKTsKLQot
ICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0aXRsZSgpOwotfQotCi1TdHJp
bmcgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmluZyhj
b250cm9sVHlwZU5hbWUoKSk7Ci19Ci0KLVN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9s
OjpoZWxwVGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVs
ZW1lbnRIZWxwVGV4dChjb250cm9sVHlwZU5hbWUoKSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0
eU1lZGlhQ29udHJvbDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAotewot
ICAgIGlmICghbV9yZW5kZXJlciB8fCBtX3JlbmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAh
PSBWaXNpYmlsaXR5OjpWaXNpYmxlIHx8IGNvbnRyb2xUeXBlKCkgPT0gTWVkaWFUaW1lbGluZUNv
bnRhaW5lcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gYWNjZXNzaWJpbGl0
eUlzSWdub3JlZEJ5RGVmYXVsdCgpOwotfQotCi1BY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmls
aXR5TWVkaWFDb250cm9sOjpyb2xlVmFsdWUoKSBjb25zdAotewotICAgIHN3aXRjaCAoY29udHJv
bFR5cGUoKSkgewotICAgIGNhc2UgTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b246Ci0gICAgY2Fz
ZSBNZWRpYUV4aXRGdWxsc2NyZWVuQnV0dG9uOgotICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uOgot
ICAgIGNhc2UgTWVkaWFQbGF5QnV0dG9uOgotICAgIGNhc2UgTWVkaWFTZWVrQmFja0J1dHRvbjoK
LSAgICBjYXNlIE1lZGlhU2Vla0ZvcndhcmRCdXR0b246Ci0gICAgY2FzZSBNZWRpYVJld2luZEJ1
dHRvbjoKLSAgICBjYXNlIE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvbjoKLSAgICBjYXNlIE1l
ZGlhVW5NdXRlQnV0dG9uOgotICAgIGNhc2UgTWVkaWFQYXVzZUJ1dHRvbjoKLSAgICBjYXNlIE1l
ZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uOgotICAgIGNhc2UgTWVkaWFIaWRlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b246Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Um9sZTo6QnV0dG9uOwot
Ci0gICAgY2FzZSBNZWRpYVN0YXR1c0Rpc3BsYXk6Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5Um9sZTo6U3RhdGljVGV4dDsKLQotICAgIGNhc2UgTWVkaWFUaW1lbGluZUNvbnRhaW5lcjoK
LSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSb2xlOjpHcm91cDsKLQotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Um9sZTo6
VW5rbm93bjsKLX0KLQotCi0vLwotLy8gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWlu
ZXIKLQotQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXI6OkFjY2Vzc2liaWxpdHlN
ZWRpYUNvbnRyb2xzQ29udGFpbmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi0gICAgOiBBY2Nl
c3NpYmlsaXR5TWVkaWFDb250cm9sKHJlbmRlcmVyKQotewotfQotCi1SZWY8QWNjZXNzaWJpbGl0
eU9iamVjdD4gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXI6OmNyZWF0ZShSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFjY2Vzc2li
aWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyKHJlbmRlcmVyKSk7Ci19Ci0KLVN0cmluZyBBY2Nl
c3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmlu
ZyhlbGVtZW50VHlwZU5hbWUoKSk7Ci19Ci0KLVN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250
cm9sc0NvbnRhaW5lcjo6aGVscFRleHQoKSBjb25zdAotewotICAgIHJldHVybiBsb2NhbGl6ZWRN
ZWRpYUNvbnRyb2xFbGVtZW50SGVscFRleHQoZWxlbWVudFR5cGVOYW1lKCkpOwotfQotCi1ib29s
IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpjb250cm9sbGluZ1ZpZGVvRWxl
bWVudCgpIGNvbnN0Ci17Ci0gICAgYXV0byBlbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KCpt
X3JlbmRlcmVyKTsKLSAgICByZXR1cm4gIWVsZW1lbnQgfHwgZWxlbWVudC0+aXNWaWRlbygpOwot
fQotCi1jb25zdCBTdHJpbmcmIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpl
bGVtZW50VHlwZU5hbWUoKSBjb25zdAotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25z
dCBTdHJpbmc+IHZpZGVvRWxlbWVudChNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVmlkZW9FbGVt
ZW50IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGF1ZGlvRWxl
bWVudChNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQXVkaW9FbGVtZW50IikpOwotCi0gICAgaWYg
KGNvbnRyb2xsaW5nVmlkZW9FbGVtZW50KCkpCi0gICAgICAgIHJldHVybiB2aWRlb0VsZW1lbnQ7
Ci0gICAgcmV0dXJuIGF1ZGlvRWxlbWVudDsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5TWVkaWFD
b250cm9sc0NvbnRhaW5lcjo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAot
ewotICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZhdWx0KCk7Ci19Ci0KLS8v
Ci0vLyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZQotCi1BY2Nlc3NpYmlsaXR5TWVkaWFUaW1l
bGluZTo6QWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
LSAgICA6IEFjY2Vzc2liaWxpdHlTbGlkZXIocmVuZGVyZXIpCi17Ci19Ci0KLVJlZjxBY2Nlc3Np
YmlsaXR5T2JqZWN0PiBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6Y3JlYXRlKFJlbmRlck9i
amVjdCogcmVuZGVyZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQWNjZXNzaWJpbGl0
eU1lZGlhVGltZWxpbmUocmVuZGVyZXIpKTsKLX0KLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRp
YVRpbWVsaW5lOjp2YWx1ZURlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBOb2RlKiBub2RlID0g
bV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUp
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBmbG9hdCB0aW1lID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLnZhbHVlKCkudG9GbG9hdCgpOwotICAgIHJldHVybiBs
b2NhbGl6ZWRNZWRpYVRpbWVEZXNjcmlwdGlvbih0aW1lKTsKLX0KLQotU3RyaW5nIEFjY2Vzc2li
aWxpdHlNZWRpYVRpbWVsaW5lOjpoZWxwVGV4dCgpIGNvbnN0Ci17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IFN0cmluZz4gc2xpZGVyKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJT
bGlkZXIiKSk7Ci0gICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRIZWxwVGV4
dChzbGlkZXIpOwotfQotCi0KLS8vCi0vLyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheQot
Ci1BY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6QWNjZXNzaWJpbGl0eU1lZGlhVGltZURp
c3BsYXkoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLSAgICA6IEFjY2Vzc2liaWxpdHlNZWRpYUNv
bnRyb2wocmVuZGVyZXIpCi17Ci19Ci0KLVJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBBY2Nlc3Np
YmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3BsYXko
cmVuZGVyZXIpKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6Y29t
cHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAotewotICAgIGlmICghbV9yZW5kZXJl
ciB8fCBtX3JlbmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNp
YmxlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghbV9yZW5kZXJlci0+c3R5bGUo
KS53aWR0aCgpLnZhbHVlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIHJldHVy
biBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZhdWx0KCk7Ci19Ci0KLVN0cmluZyBBY2Nlc3Np
YmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3QK
LXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBjdXJyZW50VGltZURp
c3BsYXkoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkN1cnJlbnRUaW1lRGlzcGxheSIpKTsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0aW1lUmVtYWluaW5nRGlzcGxh
eShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVGltZVJlbWFpbmluZ0Rpc3BsYXkiKSk7Ci0KLSAg
ICBpZiAoY29udHJvbFR5cGUoKSA9PSBNZWRpYUN1cnJlbnRUaW1lRGlzcGxheSkKLSAgICAgICAg
cmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRTdHJpbmcoY3VycmVudFRpbWVEaXNw
bGF5KTsKLQotICAgIHJldHVybiBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50U3RyaW5nKHRp
bWVSZW1haW5pbmdEaXNwbGF5KTsKLX0KLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVE
aXNwbGF5OjpzdHJpbmdWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFt
X3JlbmRlcmVyLT5ub2RlKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGZsb2F0
IHRpbWUgPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQqPihtX3Jl
bmRlcmVyLT5ub2RlKCkpLT5jdXJyZW50VmFsdWUoKTsKLSAgICByZXR1cm4gbG9jYWxpemVkTWVk
aWFUaW1lRGVzY3JpcHRpb24oc3RkOjphYnModGltZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYWQ2ZDk2ZTM2Zjg1YjM3OWU1Y2Y5NWNlNGI0NWNi
M2Q2ZjdjZDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoVklERU8p
Ci0KLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5U2xpZGVyLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250
cm9sRWxlbWVudHMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBY2Nlc3NpYmls
aXR5TWVkaWFDb250cm9sIDogcHVibGljIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QgewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlKFJlbmRlck9i
amVjdCopOwotICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2woKSA9IGRlZmF1
bHQ7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlVmFsdWUoKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIFN0cmluZyB0aXRsZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBhY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgaGVscFRleHQo
KSBjb25zdCBvdmVycmlkZTsKLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IEFjY2Vzc2liaWxp
dHlNZWRpYUNvbnRyb2woUmVuZGVyT2JqZWN0Kik7Ci0gICAgTWVkaWFDb250cm9sRWxlbWVudFR5
cGUgY29udHJvbFR5cGUoKSBjb25zdDsKLSAgICBjb25zdCBTdHJpbmcmIGNvbnRyb2xUeXBlTmFt
ZSgpIGNvbnN0OwotICAgIGJvb2wgY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25z
dCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGFjY2Vzc2liaWxpdHlUZXh0KFZlY3Rv
cjxBY2Nlc3NpYmlsaXR5VGV4dD4mKSBjb25zdCBvdmVycmlkZTsKLX07Ci0KLQotY2xhc3MgQWNj
ZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUgZmluYWwgOiBwdWJsaWMgQWNjZXNzaWJpbGl0eVNsaWRl
ciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjcmVhdGUo
UmVuZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVhbCB+QWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUo
KSA9IGRlZmF1bHQ7Ci0KLSAgICBTdHJpbmcgaGVscFRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBTdHJpbmcgdmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgot
ICAgIGV4cGxpY2l0IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lKFJlbmRlck9iamVjdCopOwot
Ci0gICAgYm9vbCBpc01lZGlhVGltZWxpbmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9Ci19OwotCi0KLWNsYXNzIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyIGZp
bmFsIDogcHVibGljIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wgewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlKFJlbmRlck9iamVjdCopOwotICAg
IHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyKCkgPSBkZWZhdWx0
OwotCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gQWNjZXNzaWJpbGl0eVJvbGU6OlRvb2xiYXI7IH0KLQotICAgIFN0cmluZyBoZWxwVGV4
dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24o
KSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBBY2Nlc3NpYmlsaXR5
TWVkaWFDb250cm9sc0NvbnRhaW5lcihSZW5kZXJPYmplY3QqKTsKLSAgICBib29sIGNvbnRyb2xs
aW5nVmlkZW9FbGVtZW50KCkgY29uc3Q7Ci0gICAgY29uc3QgU3RyaW5nJiBlbGVtZW50VHlwZU5h
bWUoKSBjb25zdDsKLSAgICBib29sIGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29u
c3Qgb3ZlcnJpZGU7Ci19OwotCi0KLWNsYXNzIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5
IGZpbmFsIDogcHVibGljIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wgewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlKFJlbmRlck9iamVjdCopOwot
ICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5KCkgPSBkZWZhdWx0Owot
Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uVGltZXI7IH0KLQotICAgIFN0cmluZyBz
dHJpbmdWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVz
Y3JpcHRpb24oKSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBBY2Nl
c3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheShSZW5kZXJPYmplY3QqKTsKLSAgICBib29sIGlzTWVk
aWFDb250cm9sTGFiZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgYm9v
bCBjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IG92ZXJyaWRlOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgKaW5kZXggNmQ5NzZlOWRmYmRkZDg4YjU3Yzc5YjFlMzE4YjIwYWY5YmYwZjNmMi4uZDIwOGM3
MTc5NjkxNzJhYzQxMTM3ODAyMmQ0OGNhODdlYWMwZWYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC0xOTgs
OCArMTk4LDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNBZnRlclBzZXVkb0VsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBwc2V1ZG9JZCgpID09IFBzZXVkb0lkOjpBZnRlcjsgfQogICAgIFBzZXVkb0lk
IHBzZXVkb0lkKCkgY29uc3QgeyByZXR1cm4gKGlzRWxlbWVudE5vZGUoKSAmJiBoYXNDdXN0b21T
dHlsZVJlc29sdmVDYWxsYmFja3MoKSkgPyBjdXN0b21Qc2V1ZG9JZCgpIDogUHNldWRvSWQ6Ok5v
bmU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhQ29udHJvbHMoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICB2aXJ0dWFs
IGJvb2wgaXNXZWJWVFRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggNzE1MTdhNzc5YWQ2
ZjVkNzU5MTcwOWU4YmYwODQ2MmE2Yjc3NDRlMi4uMDI5YjhhNzE1MzI5OWFmMmViMGQ0NzU3Yjhl
MzdmNDQ4NWNkMjdmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2hy
b21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ29tbW9uVk0uaCIK
ICNpbmNsdWRlICJDb250ZW50UnVsZUxpc3RSZXN1bHRzLmgiCkBAIC02MCwxMCArNjEsMTEgQEAK
ICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVy
cmVkLmgiCiAjaW5jbHVkZSAiSlNIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNNZWRp
YUNvbnRyb2xzSG9zdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiTWVk
aWFDb250cm9scy5oIgorI2luY2x1ZGUgIk1lZGlhQ29udHJvbHNIb3N0LmgiCiAjaW5jbHVkZSAi
TWVkaWFEb2N1bWVudC5oIgogI2luY2x1ZGUgIk1lZGlhRXJyb3IuaCIKICNpbmNsdWRlICJNZWRp
YUZyYWdtZW50VVJJUGFyc2VyLmgiCkBAIC05Nyw2ICs5OSw3IEBACiAjaW5jbHVkZSAiVXNlckNv
bnRlbnRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKICNp
bmNsdWRlICJWaWRlb1BsYXliYWNrUXVhbGl0eS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1NjcmlwdE9iamVjdC5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4QXJyYXkuaD4K
ICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgpAQCAtMTU5LDEy
ICsxNjIsNiBAQAogI2luY2x1ZGUgIk1lZGlhS2V5cy5oIgogI2VuZGlmCiAKLSNpZiBFTkFCTEUo
TUVESUFfQ09OVFJPTFNfU0NSSVBUKQotI2luY2x1ZGUgIkpTTWVkaWFDb250cm9sc0hvc3QuaCIK
LSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzSG9zdC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1NjcmlwdE9iamVjdC5oPgotI2VuZGlmCi0KICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjZW5kaWYKQEAgLTQ0NywxMCArNDQ0LDggQEAg
SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCYgZG9jdW0KICAgICAsIG1faGFzRXZlck5vdGlmaWVkQWJvdXRQbGF5
aW5nKGZhbHNlKQogICAgICwgbV9oYXNFdmVySGFkQXVkaW8oZmFsc2UpCiAgICAgLCBtX2hhc0V2
ZXJIYWRWaWRlbyhmYWxzZSkKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAg
ICwgbV9tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IoZmFsc2UpCiAgICAgLCBt
X2hhdmVTZXRVcENhcHRpb25Db250YWluZXIoZmFsc2UpCi0jZW5kaWYKICAgICAsIG1faXNTY3J1
YmJpbmdSZW1vdGVseShmYWxzZSkKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgLCBtX3Ry
YWNrc0FyZVJlYWR5KHRydWUpCkBAIC02MDAsMTAgKzU5NSw4IEBAIEhUTUxNZWRpYUVsZW1lbnQ6
On5IVE1MTWVkaWFFbGVtZW50KCkKICAgICB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJQV9D
T05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKG1faXNvbGF0ZWRXb3JsZCkKICAgICAgICAgbV9pc29s
YXRlZFdvcmxkLT5jbGVhcldyYXBwZXJzKCk7Ci0jZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9T
RVNTSU9OKQogICAgIGlmIChtX3Nlc3Npb24pIHsKQEAgLTgyMiwxOSArODE1LDcgQEAgUmVuZGVy
UHRyPFJlbmRlckVsZW1lbnQ+IEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJl
cihSZW5kZXJTdHlsZSYmIHMKIAogYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpjaGlsZFNob3VsZENy
ZWF0ZVJlbmRlcmVyKGNvbnN0IE5vZGUmIGNoaWxkKSBjb25zdAogewotI2lmIEVOQUJMRShNRURJ
QV9DT05UUk9MU19TQ1JJUFQpCiAgICAgcmV0dXJuIGhhc1NoYWRvd1Jvb3RQYXJlbnQoY2hpbGQp
ICYmIEhUTUxFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNoaWxkKTsKLSNlbHNl
Ci0gICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAvLyA8bWVkaWE+IGRvZXNuJ3QgYWxsb3cgaXRzIGNvbnRlbnQsIGluY2x1ZGluZyBzaGFkb3cg
c3VidHJlZSwgdG8KLSAgICAvLyBiZSByZW5kZXJlZC4gU28gdGhpcyBzaG91bGQgcmV0dXJuIGZh
bHNlIGZvciBtb3N0IG9mIHRoZSBjaGlsZHJlbi4KLSAgICAvLyBPbmUgZXhjZXB0aW9uIGlzIGEg
c2hhZG93IHRyZWUgYnVpbHQgZm9yIHJlbmRlcmluZyBjb250cm9scyB3aGljaCBzaG91bGQgYmUg
dmlzaWJsZS4KLSAgICAvLyBTbyB3ZSBsZXQgdGhlbSBnbyBoZXJlIGJ5IGNvbXBhcmluZyBpdHMg
c3VidHJlZSByb290IHdpdGggb25lIG9mIHRoZSBjb250cm9scy4KLSAgICByZXR1cm4gJm1lZGlh
Q29udHJvbHMoKS0+dHJlZVNjb3BlKCkgPT0gJmNoaWxkLnRyZWVTY29wZSgpCi0gICAgICAgICYm
IGhhc1NoYWRvd1Jvb3RQYXJlbnQoY2hpbGQpCi0gICAgICAgICYmIEhUTUxFbGVtZW50OjpjaGls
ZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNoaWxkKTsKLSNlbmRpZgogfQogCiBOb2RlOjpJbnNlcnRl
ZEludG9BbmNlc3RvclJlc3VsdCBIVE1MTWVkaWFFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3Rv
cihJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5z
ZXJ0ZWRUcmVlKQpAQCAtODcyLDggKzg1Myw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGF1
c2VBZnRlckRldGFjaGVkVGFzaygpCiAgICAgaWYgKG1faW5BY3RpdmVEb2N1bWVudCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFD
b250cm9scygpLT5oaWRlKCk7CiAgICAgaWYgKG1fbmV0d29ya1N0YXRlID4gTkVUV09SS19FTVBU
WSkKICAgICAgICAgcGF1c2UoKTsKICAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlICE9IFZp
ZGVvRnVsbHNjcmVlbk1vZGVOb25lKQpAQCAtOTIxLDEwICs5MDAsOCBAQCBpbmxpbmUgdm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVSZW5kZXJlcigpCiAgICAgaWYgKGF1dG8qIHJlbmRlcmVy
ID0gdGhpcy0+cmVuZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUZyb21FbGVtZW50
KCk7CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChtX21lZGlh
Q29udHJvbHNIb3N0KQogICAgICAgICBtX21lZGlhQ29udHJvbHNIb3N0LT51cGRhdGVDYXB0aW9u
RGlzcGxheVNpemVzKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRB
dHRhY2hSZW5kZXJlcnMoKQpAQCAtMTMwNCw5ICsxMjgxLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpzZWxlY3RNZWRpYVJlc291cmNlKCkKIAogICAgICAgICAvLyA1LiBJZiB0aGUgbWVkaWEg
ZWxlbWVudOKAmXMgYmxvY2tlZC1vbi1wYXJzZXIgZmxhZyBpcyBmYWxzZSwgdGhlbiBwb3B1bGF0
ZSB0aGUgbGlzdCBvZiBwZW5kaW5nIHRleHQgdHJhY2tzLgogI2lmIEVOQUJMRShWSURFT19UUkFD
SykKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29u
dHJvbHMoKS0+Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgpOwotCiAgICAgICAgIC8v
IEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja3NBcmVSZWFkeSB3aWxsIG5lZWQgIi4uLiB0aGUg
dGV4dCB0cmFja3Mgd2hvc2UgbW9kZSB3YXMgbm90IGluIHRoZQogICAgICAgICAvLyBkaXNhYmxl
ZCBzdGF0ZSB3aGVuIHRoZSBlbGVtZW50J3MgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29yaXRobSBs
YXN0IHN0YXJ0ZWQiLgogICAgICAgICAvLyBGSVhNRTogVXBkYXRlIHRoaXMgdG8gbWF0Y2ggInBv
cHVsYXRlIHRoZSBsaXN0IG9mIHBlbmRpbmcgdGV4dCB0cmFja3MiIHN0ZXAuCkBAIC0yMjM1LDEw
ICsyMjA5LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUxvYWRpbmdGYWlsZWQoTWVk
aWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKICAgICAgICAgbm9uZVN1cHBvcnRlZCgpOwog
CiAgICAgdXBkYXRlRGlzcGxheVN0YXRlKCk7Ci0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkg
ewotICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnJlc2V0KCk7Ci0gICAgICAgIG1lZGlhQ29udHJv
bHMoKS0+cmVwb3J0ZWRFcnJvcigpOwotICAgIH0KIAogICAgIEVSUk9SX0xPRyhMT0dJREVOVElG
SUVSLCAiZXJyb3IgPSAiLCBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSk7CiAKQEAgLTIyODMsMTYg
KzIyNTMsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXROZXR3b3JrU3RhdGUoTWVkaWFQ
bGF5ZXI6Ok5ldHdvcmtTdGF0ZSBzdGF0ZSkKICAgICAgICAgICAgIGNoYW5nZU5ldHdvcmtTdGF0
ZUZyb21Mb2FkaW5nVG9JZGxlKCk7CiAgICAgICAgIG1fY29tcGxldGVseUxvYWRlZCA9IHRydWU7
CiAgICAgfQotCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250
cm9scygpLT51cGRhdGVTdGF0dXNEaXNwbGF5KCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6Y2hhbmdlTmV0d29ya1N0YXRlRnJvbUxvYWRpbmdUb0lkbGUoKQogewogICAgIG1fcHJvZ3Jl
c3NFdmVudFRpbWVyLnN0b3AoKTsKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpICYmIG1fcGxh
eWVyLT5kaWRMb2FkaW5nUHJvZ3Jlc3MoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5idWZm
ZXJpbmdQcm9ncmVzc2VkKCk7CiAKICAgICAvLyBTY2hlZHVsZSBvbmUgbGFzdCBwcm9ncmVzcyBl
dmVudCBzbyB3ZSBndWFyYW50ZWUgdGhhdCBhdCBsZWFzdCBvbmUgaXMgZmlyZWQKICAgICAvLyBm
b3IgZmlsZXMgdGhhdCBsb2FkIHZlcnkgcXVpY2tseS4KQEAgLTI0MzcsOCArMjQwMiw2IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSBzdGF0ZSkKICNlbmRpZgogICAgICAgICBtX2luaXRpYWxseU11dGVkID0gbV92b2x1bWUgPCAw
LjA1IHx8IG11dGVkKCk7CiAKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAg
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+bG9hZGVkTWV0YWRhdGEoKTsKICAgICAgICAgdXBkYXRl
UmVuZGVyZXIoKTsKIAogICAgICAgICBpZiAoaXM8TWVkaWFEb2N1bWVudD4oZG9jdW1lbnQoKSkp
CkBAIC0yNTA1LDEzICsyNDY4LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRSZWFkeVN0
YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0YXRlKQogICAgICAgICBzZXRBdXRvcGxheUV2
ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZTo6UHJldmVudGVkQXV0
b3BsYXkpOwogICAgIH0KIAotICAgIGlmIChzaG91bGRVcGRhdGVEaXNwbGF5U3RhdGUpIHsKKyAg
ICBpZiAoc2hvdWxkVXBkYXRlRGlzcGxheVN0YXRlKQogICAgICAgICB1cGRhdGVEaXNwbGF5U3Rh
dGUoKTsKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkgewotICAgICAgICAgICAgbWVk
aWFDb250cm9scygpLT5yZWZyZXNoQ2xvc2VkQ2FwdGlvbnNCdXR0b25WaXNpYmlsaXR5KCk7Ci0g
ICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnVwZGF0ZVN0YXR1c0Rpc3BsYXkoKTsKLSAgICAg
ICAgfQotICAgIH0KIAogICAgIHVwZGF0ZVBsYXlTdGF0ZSgpOwogICAgIHVwZGF0ZU1lZGlhQ29u
dHJvbGxlcigpOwpAQCAtMjg1NSw4ICsyODEzLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpw
cm9ncmVzc0V2ZW50VGltZXJGaXJlZCgpCiAgICAgICAgIG1fcHJldmlvdXNQcm9ncmVzc1RpbWUg
PSB0aW1lOwogICAgICAgICBtX3NlbnRTdGFsbGVkRXZlbnQgPSBmYWxzZTsKICAgICAgICAgdXBk
YXRlUmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAg
ICAgIG1lZGlhQ29udHJvbHMoKS0+YnVmZmVyaW5nUHJvZ3Jlc3NlZCgpOwogICAgIH0gZWxzZSBp
ZiAodGltZWRlbHRhID4gM19zICYmICFtX3NlbnRTdGFsbGVkRXZlbnQpIHsKICAgICAgICAgc2No
ZWR1bGVFdmVudChldmVudE5hbWVzKCkuc3RhbGxlZEV2ZW50KTsKICAgICAgICAgbV9zZW50U3Rh
bGxlZEV2ZW50ID0gdHJ1ZTsKQEAgLTM3NDAsOCArMzY5Niw2IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKICAgICAgICAgaWYgKCFwcm9jZXNzaW5nTWVkaWFQ
bGF5ZXJDYWxsYmFjaygpKSB7CiAgICAgICAgICAgICBpZiAobV9wbGF5ZXIpIHsKICAgICAgICAg
ICAgICAgICBtX3BsYXllci0+c2V0TXV0ZWQoZWZmZWN0aXZlTXV0ZWQoKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgICAgICAgICAgbWVkaWFD
b250cm9scygpLT5jaGFuZ2VkTXV0ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAg
LTM5MDgsOSArMzg2Miw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxheWJhY2tQcm9ncmVz
c1RpbWVyRmlyZWQoKQogICAgIGlmICghcmVxdWVzdGVkUGxheWJhY2tSYXRlKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghbV9wYXVzZWQgJiYgaGFzTWVkaWFDb250cm9scygpKQotICAg
ICAgICBtZWRpYUNvbnRyb2xzKCktPnBsYXliYWNrUHJvZ3Jlc3NlZCgpOwotCiAjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQogICAgIHVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoY3VycmVudE1lZGlh
VGltZSgpKTsKICNlbmRpZgpAQCAtNDAzNiwxMiArMzk4Nyw2IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6bWVkaWFQbGF5ZXJEaWRSZW1vdmVWaWRlb1RyYWNrKFZpZGVvVHJhY2tQcml2YXRlJiB0
cmFjaykKICAgICB0cmFjay53aWxsQmVSZW1vdmVkKCk7CiB9CiAKLXZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6Y2xvc2VDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpCi17Ci0gICAgaWYgKGhhc01lZGlhQ29u
dHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5jbG9zZWRDYXB0aW9uVHJhY2tzQ2hh
bmdlZCgpOwotfQotCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZEF1ZGlvVHJhY2soUmVmPEF1
ZGlvVHJhY2s+JiYgdHJhY2spCiB7CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECkBAIC00MDY1
LDggKzQwMTAsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhSZWY8VGV4
dFRyYWNrPiYmIHRyYWNrKQogICAgIH0KIAogICAgIGVuc3VyZVRleHRUcmFja3MoKS5hcHBlbmQo
V1RGTW92ZSh0cmFjaykpOwotCi0gICAgY2xvc2VDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpOwogfQog
CiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFZpZGVvVHJhY2soUmVmPFZpZGVvVHJhY2s+JiYg
dHJhY2spCkBAIC00MDkxLDggKzQwMzQsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92
ZVRleHRUcmFjayhSZWY8VGV4dFRyYWNrPiYmIHRyYWNrLCBib29sIHNjaGVkdWxlRXZlbgogICAg
IHRyYWNrLT5jbGVhckNsaWVudCgpOwogICAgIGlmIChtX3RleHRUcmFja3MpCiAgICAgICAgIG1f
dGV4dFRyYWNrcy0+cmVtb3ZlKHRyYWNrLCBzY2hlZHVsZUV2ZW50KTsKLQotICAgIGNsb3NlQ2Fw
dGlvblRyYWNrc0NoYW5nZWQoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZW1vdmVW
aWRlb1RyYWNrKFJlZjxWaWRlb1RyYWNrPiYmIHRyYWNrKQpAQCAtNDE5Myw5ICs0MTM0LDYgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRUZXh0VHJhY2soSFRNTFRyYWNrRWxlbWVudCYg
dHJhY2tFbGVtZW50KQogICAgIC8vIGluIHRoZSBtYXJrdXAgaGF2ZSBiZWVuIGFkZGVkLgogICAg
IGlmICghbV9wYXJzaW5nSW5Qcm9ncmVzcykKICAgICAgICAgc2NoZWR1bGVDb25maWd1cmVUZXh0
VHJhY2tzKCk7Ci0KLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICBtZWRpYUNv
bnRyb2xzKCktPmNsb3NlZENhcHRpb25UcmFja3NDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6ZGlkUmVtb3ZlVGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQmIHRyYWNrRWxl
bWVudCkKQEAgLTQzNTksNyArNDI5Nyw5IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udHJvbGxl
ckpTVmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwKIAogdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpCiB7Ci0g
ICAgQVNTRVJUKCFtX2NyZWF0aW5nQ29udHJvbHMpOworICAgIGlmIChtX2NyZWF0aW5nQ29udHJv
bHMpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fY3JlYXRpbmdDb250cm9scyA9IHRydWU7CiAg
ICAgZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwogICAgIG1fY3JlYXRpbmdDb250cm9scyA9
IGZhbHNlOwpAQCAtNDM4Nyw3ICs0MzI3LDYgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpzZXR1
cEFuZENhbGxKUyhjb25zdCBKU1NldHVwRnVuY3Rpb24mIHRhc2spCiAKIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6dXBkYXRlQ2FwdGlvbkNvbnRhaW5lcigpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NP
TlRST0xTX1NDUklQVCkKICAgICBpZiAobV9oYXZlU2V0VXBDYXB0aW9uQ29udGFpbmVyKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTQ0MzIsMTMgKzQzNzEsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojp1cGRhdGVDYXB0aW9uQ29udGFpbmVyKCkKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9KTsKLQotI2VuZGlmCiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bGF5b3V0U2l6ZUNo
YW5nZWQoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKGF1
dG8gZnJhbWVWaWV3ID0gbWFrZVJlZlB0cihkb2N1bWVudCgpLnZpZXcoKSkpIHsKICAgICAgICAg
YXV0byB0YXNrID0gW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewogICAg
ICAgICAgICAgaWYgKGF1dG8gcm9vdCA9IHVzZXJBZ2VudFNoYWRvd1Jvb3QoKSkKQEAgLTQ0NDYs
NyArNDM4Miw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bGF5b3V0U2l6ZUNoYW5nZWQoKQog
ICAgICAgICB9OwogICAgICAgICBmcmFtZVZpZXctPnF1ZXVlUG9zdExheW91dENhbGxiYWNrKFdU
Rk1vdmUodGFzaykpOwogICAgIH0KLSNlbmRpZgogCiAgICAgaWYgKCFtX3JlY2VpdmVkTGF5b3V0
U2l6ZUNoYW5nZWQpIHsKICAgICAgICAgbV9yZWNlaXZlZExheW91dFNpemVDaGFuZ2VkID0gdHJ1
ZTsKQEAgLTQ1ODYsOCArNDUyMSw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJl
VGV4dFRyYWNrcygpCiAKICAgICB1cGRhdGVDYXB0aW9uQ29udGFpbmVyKCk7CiAgICAgY29uZmln
dXJlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAg
ICAgIG1lZGlhQ29udHJvbHMoKS0+Y2xvc2VkQ2FwdGlvblRyYWNrc0NoYW5nZWQoKTsKIH0KICNl
bmRpZgogCkBAIC01MTU0LDggKzUwODcsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
UGxheWVyQ2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCkKICAgICAgICAgbWVkaWFQbGF5ZXJSZW5kZXJp
bmdNb2RlQ2hhbmdlZCgpOwogICAgIH0KIAotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0g
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVzZXQoKTsKICAgICB1cGRhdGVSZW5kZXJlcigpOwog
CiAgICAgaWYgKCFwYXVzZWQoKSAmJiAhbV9tZWRpYVNlc3Npb24tPnBsYXliYWNrUGVybWl0dGVk
KCkpIHsKQEAgLTUzNTAsOSArNTI4MSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRl
Vm9sdW1lKCkKICAgICBkb2N1bWVudCgpLnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7CiAjZW5kaWYK
IAotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+
Y2hhbmdlZFZvbHVtZSgpOwotI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkK
IH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzY2hlZHVsZVVwZGF0ZVBsYXlTdGF0ZSgpCkBA
IC01MzgwLDggKzUzMDksNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0
ZSgpCiAgICAgICAgICAgICBtX3BsYXllci0+cGF1c2UoKTsKICAgICAgICAgcmVmcmVzaENhY2hl
ZFRpbWUoKTsKICAgICAgICAgbV9wbGF5YmFja1Byb2dyZXNzVGltZXIuc3RvcCgpOwotICAgICAg
ICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5w
bGF5YmFja1N0b3BwZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTQyNSw5ICs1
MzUyLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUoKQogICAgICAg
ICAgICAgbV9wbGF5ZXItPnBsYXkoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChoYXNNZWRp
YUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnBsYXliYWNrU3RhcnRl
ZCgpOwotCiAgICAgICAgIHN0YXJ0UGxheWJhY2tQcm9ncmVzc1RpbWVyKCk7CiAgICAgICAgIHNl
dFBsYXlpbmcodHJ1ZSk7CiAgICAgfSBlbHNlIHsKQEAgLTU0NDUsOSArNTM2OSw2IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUGxheVN0YXRlKCkKIAogICAgICAgICBpZiAoY291bGRQ
bGF5SWZFbm91Z2hEYXRhKCkpCiAgICAgICAgICAgICBwcmVwYXJlVG9QbGF5KCk7Ci0KLSAgICAg
ICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+
cGxheWJhY2tTdG9wcGVkKCk7CiAgICAgfQogCiAgICAgdXBkYXRlTWVkaWFDb250cm9sbGVyKCk7
CkBAIC02MDczLDggKzU5OTQsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNj
cmVlbihWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCiAKICAgICAgICAgZnVsbHNjcmVlbk1vZGVD
aGFuZ2VkKG1vZGUpOwogICAgICAgICBjb25maWd1cmVNZWRpYUNvbnRyb2xzKCk7Ci0gICAgICAg
IGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmVu
dGVyZWRGdWxsc2NyZWVuKCk7CiAgICAgICAgIGlmIChpczxIVE1MVmlkZW9FbGVtZW50PigqdGhp
cykpIHsKICAgICAgICAgICAgIEhUTUxWaWRlb0VsZW1lbnQmIGFzVmlkZW8gPSBkb3duY2FzdDxI
VE1MVmlkZW9FbGVtZW50PigqdGhpcyk7CiAgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS5wYWdl
KCktPmNocm9tZSgpLmNsaWVudCgpLnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKG1fdmlkZW9GdWxs
c2NyZWVuTW9kZSkpIHsKQEAgLTYxMTAsMTIgKzYwMjksOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OmV4aXRGdWxsc2NyZWVuKCkKICAgICBBU1NFUlQobV92aWRlb0Z1bGxzY3JlZW5Nb2RlICE9
IFZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKICAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlIG9sZFZp
ZGVvRnVsbHNjcmVlbk1vZGUgPSBtX3ZpZGVvRnVsbHNjcmVlbk1vZGU7CiAgICAgZnVsbHNjcmVl
bk1vZGVDaGFuZ2VkKFZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSNpZiBFTkFCTEUoTUVESUFf
Q09OVFJPTFNfU0NSSVBUKQogICAgIFJlZjxIVE1MTWVkaWFFbGVtZW50PiBwcm90ZWN0ZWRUaGlz
KCp0aGlzKTsgLy8gdXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJlc2VudGF0aW9uTW9kZUNoYW5n
ZSBjYWxscyBtZXRob2RzIHRoYXQgY2FuIHRyaWdnZXIgYXJiaXRyYXJ5IERPTSBtdXRhdGlvbnMu
CiAgICAgdXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJlc2VudGF0aW9uTW9kZUNoYW5nZSgpOwot
I2VuZGlmCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9s
cygpLT5leGl0ZWRGdWxsc2NyZWVuKCk7CiAKICAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpIHx8
ICFpczxIVE1MVmlkZW9FbGVtZW50PigqdGhpcykpCiAgICAgICAgIHJldHVybjsKQEAgLTYxOTgs
MTYgKzYxMTMsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRCZWNvbWVGdWxsc2NyZWVu
RWxlbWVudCgpCiB7CiAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIiwgZnVsbHNjcmVlbiBt
b2RlID0gIiwgZnVsbHNjcmVlbk1vZGUoKSk7CiAgICAgbV93YWl0aW5nVG9FbnRlckZ1bGxzY3Jl
ZW4gPSBmYWxzZTsKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICBtZWRpYUNv
bnRyb2xzKCktPmVudGVyZWRGdWxsc2NyZWVuKCk7CiAgICAgc2NoZWR1bGVVcGRhdGVQbGF5U3Rh
dGUoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp3aWxsU3RvcEJlaW5nRnVsbHNjcmVl
bkVsZW1lbnQoKQogewotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlh
Q29udHJvbHMoKS0+ZXhpdGVkRnVsbHNjcmVlbigpOwotCiAgICAgaWYgKGZ1bGxzY3JlZW5Nb2Rl
KCkgPT0gVmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKQogICAgICAgICBmdWxsc2NyZWVuTW9k
ZUNoYW5nZWQoVmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwogfQpAQCAtNjM0OCwxOSArNjI1OCwx
MSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKFRl
eHRUcmFjayogdHJhY2spCiAgICAgICAgIC8vIFRoZSBkaXNwbGF5IHRyZWVzIGV4aXN0IGFzIGxv
bmcgYXMgdGhlIHRyYWNrIGlzIGFjdGl2ZSwgaW4gdGhpcyBjYXNlLAogICAgICAgICAvLyBhbmQg
aWYgdGhlIHNhbWUgdHJhY2sgaXMgbG9hZGVkIGFnYWluIChmb3IgZXhhbXBsZSBpZiB0aGUgc3Jj
IGF0dHJpYnV0ZSB3YXMgY2hhbmdlZCksCiAgICAgICAgIC8vIGN1ZXMgY2FuIGJlIGFjY3VtdWxh
dGVkIHdpdGggdGhlIG9sZCBvbmVzLCB0aGF0J3Mgd2h5IHRoZXkgbmVlZHMgdG8gYmUgZmx1c2hl
ZAotICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICAgICAgbWVkaWFDb250
cm9scygpLT5jbGVhclRleHREaXNwbGF5Q29udGFpbmVyKCk7CiAgICAgICAgIHVwZGF0ZVRleHRU
cmFja0Rpc3BsYXkoKTsKICAgICB9CiAgICAgaWYgKG1fcGxheWVyICYmIG1fdGV4dFRyYWNrc1do
ZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuLmNvbnRhaW5zKHRyYWNrKSkgewogICAgICAgICBpZiAo
dHJhY2stPnJlYWRpbmVzc1N0YXRlKCkgIT0gVGV4dFRyYWNrOjpMb2FkaW5nKQogICAgICAgICAg
ICAgc2V0UmVhZHlTdGF0ZShtX3BsYXllci0+cmVhZHlTdGF0ZSgpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBUaGUgdHJhY2sgcmVhZGluZXNzIHN0YXRlIG1pZ2h0IGhhdmUgY2hhbmdlZCBh
cyBhIHJlc3VsdCBvZiB0aGUgdXNlcgotICAgICAgICAvLyBjbGlja2luZyB0aGUgY2FwdGlvbnMg
YnV0dG9uLiBJbiB0aGlzIGNhc2UsIGEgY2hlY2sgd2hldGhlciBhbGwgdGhlCi0gICAgICAgIC8v
IHJlc291cmNlcyBoYXZlIGZhaWxlZCBsb2FkaW5nIHNob3VsZCBiZSBkb25lIGluIG9yZGVyIHRv
IGhpZGUgdGhlIENDIGJ1dHRvbi4KLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSAmJiB0
cmFjay0+cmVhZGluZXNzU3RhdGUoKSA9PSBUZXh0VHJhY2s6OkZhaWxlZFRvTG9hZCkKLSAgICAg
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVmcmVzaENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJp
bGl0eSgpOwogICAgIH0KIH0KIApAQCAtNjM5MSw1MSArNjI5MywyNyBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkoVGV4dFRyYWNrVmlzaWJpbGl0eUNo
ZWNrVHlwZSBjaAogICAgIG1faGF2ZVZpc2libGVUZXh0VHJhY2sgPSBoYXZlVmlzaWJsZVRleHRU
cmFjazsKICAgICBtX2Nsb3NlZENhcHRpb25zVmlzaWJsZSA9IG1faGF2ZVZpc2libGVUZXh0VHJh
Y2s7CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmICghbV9oYXZl
VmlzaWJsZVRleHRUcmFjaykKICAgICAgICAgcmV0dXJuOwogCiAgICAgZW5zdXJlTWVkaWFDb250
cm9sc1NoYWRvd1Jvb3QoKTsKICAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0jZWxzZQot
ICAgIGlmICghbV9oYXZlVmlzaWJsZVRleHRUcmFjayAmJiAhaGFzTWVkaWFDb250cm9scygpICYm
ICFjcmVhdGVNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1lZGlhQ29u
dHJvbHMoKS0+Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgpOwotCi0gICAgdXBkYXRl
VGV4dFRyYWNrRGlzcGxheSgpOwotICAgIHVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoY3VycmVu
dE1lZGlhVGltZSgpKTsKLSNlbmRpZgogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0
ZVRleHRUcmFja0Rpc3BsYXkoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQp
CiAgICAgZW5zdXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QoKTsKICAgICBpZiAoIW1fbWVkaWFD
b250cm9sc0hvc3QpCiAgICAgICAgIG1fbWVkaWFDb250cm9sc0hvc3QgPSBNZWRpYUNvbnRyb2xz
SG9zdDo6Y3JlYXRlKCp0aGlzKTsKICAgICBtX21lZGlhQ29udHJvbHNIb3N0LT51cGRhdGVUZXh0
VHJhY2tDb250YWluZXIoKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYg
IWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFDb250
cm9scygpLT51cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQo
KQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgZW5zdXJlTWVkaWFD
b250cm9sc1NoYWRvd1Jvb3QoKTsKICAgICBpZiAoIW1fbWVkaWFDb250cm9sc0hvc3QpCiAgICAg
ICAgIG1fbWVkaWFDb250cm9sc0hvc3QgPSBNZWRpYUNvbnRyb2xzSG9zdDo6Y3JlYXRlKCp0aGlz
KTsKICAgICBtX21lZGlhQ29udHJvbHNIb3N0LT51cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkltYWdlSWZOZWVkZWQoKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYg
IWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFDb250
cm9scygpLT51cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQoKTsKLSNl
bmRpZgogfQogCiAjZW5kaWYKQEAgLTY0NTYsOCArNjMzNCw2IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgY2xvc2VkQ2FwdGlvblZpc2libGUp
CiAgICAgbWFya0NhcHRpb25BbmRTdWJ0aXRsZVRyYWNrc0FzVW5jb25maWd1cmVkKEltbWVkaWF0
ZWx5KTsKICAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CiAjZWxzZQotICAgIGlmIChoYXNN
ZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+Y2hhbmdlZENsb3NlZENh
cHRpb25zVmlzaWJpbGl0eSgpOwogI2VuZGlmCiB9CiAKQEAgLTY1NzYsNjIgKzY0NTIsNiBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKICNlbmRpZgogfQogCi1NZWRpYUNvbnRyb2xzKiBIVE1MTWVk
aWFFbGVtZW50OjptZWRpYUNvbnRyb2xzKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoTUVESUFfQ09O
VFJPTFNfU0NSSVBUKQotICAgIHJldHVybiBudWxscHRyOwotI2Vsc2UKLSAgICBhdXRvIHJvb3Qg
PSB1c2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBjaGlsZHJlbk9mVHlwZTxNZWRpYUNvbnRyb2xzPigqcm9v
dCkuZmlyc3QoKTsKLSNlbmRpZgotfQotCi1ib29sIEhUTUxNZWRpYUVsZW1lbnQ6Omhhc01lZGlh
Q29udHJvbHMoKSBjb25zdAotewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0g
ICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKLQotICAgIGlmIChhdXRvIHVzZXJBZ2VudCA9IHVzZXJB
Z2VudFNoYWRvd1Jvb3QoKSkgewotICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNoaWxkcmVu
T2ZUeXBlPE1lZGlhQ29udHJvbHM+KCpyb290KS5maXJzdCgpOwotICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8fCBub2RlLT5pc01lZGlhQ29udHJvbHMoKSk7
Ci0gICAgICAgIHJldHVybiBub2RlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRp
ZgotfQotCi1ib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlhQ29udHJvbHMoKQotewot
I2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0gICAgZW5zdXJlTWVkaWFDb250cm9s
c1NoYWRvd1Jvb3QoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIGlmIChoYXNNZWRp
YUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byBtZWRpYUNvbnRy
b2xzID0gTWVkaWFDb250cm9sczo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgIGlmICghbWVkaWFD
b250cm9scykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbWVkaWFDb250cm9scy0+c2V0
TWVkaWFDb250cm9sbGVyKG1fbWVkaWFDb250cm9sbGVyID8gbV9tZWRpYUNvbnRyb2xsZXIuZ2V0
KCkgOiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqPih0aGlzKSk7Ci0gICAg
bWVkaWFDb250cm9scy0+cmVzZXQoKTsKLSAgICBpZiAoaXNGdWxsc2NyZWVuKCkpCi0gICAgICAg
IG1lZGlhQ29udHJvbHMtPmVudGVyZWRGdWxsc2NyZWVuKCk7Ci0KLSAgICBlbnN1cmVVc2VyQWdl
bnRTaGFkb3dSb290KCkuYXBwZW5kQ2hpbGQobWVkaWFDb250cm9scyk7Ci0KLSAgICBpZiAoIWNv
bnRyb2xzKCkgfHwgIWlzQ29ubmVjdGVkKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMtPmhpZGUo
KTsKLQotICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi19Ci0KIGJvb2wgSFRNTE1lZGlhRWxlbWVu
dDo6c2hvdWxkRm9yY2VDb250cm9sc0Rpc3BsYXkoKSBjb25zdAogewogICAgIC8vIEFsd2F5cyBj
cmVhdGUgY29udHJvbHMgZm9yIGF1dG9wbGF5IHZpZGVvIHRoYXQgcmVxdWlyZXMgdXNlciBnZXN0
dXJlIGR1ZSB0byBiZWluZyBpbiBsb3cgcG93ZXIgbW9kZS4KQEAgLTY2NTgsMjMgKzY0NzgsMTAg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVNZWRpYUNvbnRyb2xzKCkKICAgICAg
ICAgcmVxdWlyZUNvbnRyb2xzID0gdHJ1ZTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE1FRElBX0NP
TlRST0xTX1NDUklQVCkKICAgICBpZiAoIXJlcXVpcmVDb250cm9scyB8fCAhaXNDb25uZWN0ZWQo
KSB8fCAhaW5BY3RpdmVEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBlbnN1cmVN
ZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpOwotI2Vsc2UKLSAgICBpZiAoIXJlcXVpcmVDb250cm9s
cyB8fCAhaXNDb25uZWN0ZWQoKSB8fCAhaW5BY3RpdmVEb2N1bWVudCgpKSB7Ci0gICAgICAgIGlm
IChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmhpZGUo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaGFzTWVkaWFDb250cm9scygp
ICYmICFjcmVhdGVNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1lZGlh
Q29udHJvbHMoKS0+c2hvdygpOwotI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CkBAIC02Njg0LDEzICs2NDkxLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjYXB0aW9uUHJl
ZmVyZW5jZXNDaGFuZ2VkKCkKICAgICBpZiAoIWlzVmlkZW8oKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT50
ZXh0VHJhY2tQcmVmZXJlbmNlc0NoYW5nZWQoKTsKLQotI2lmIEVOQUJMRShNRURJQV9DT05UUk9M
U19TQ1JJUFQpCiAgICAgaWYgKG1fbWVkaWFDb250cm9sc0hvc3QpCiAgICAgICAgIG1fbWVkaWFD
b250cm9sc0hvc3QtPnVwZGF0ZUNhcHRpb25EaXNwbGF5U2l6ZXMoTWVkaWFDb250cm9sc0hvc3Q6
OkZvcmNlVXBkYXRlOjpZZXMpOwotI2VuZGlmCiAKICAgICBpZiAobV9wbGF5ZXIpCiAgICAgICAg
IG1fcGxheWVyLT50cmFja3NDaGFuZ2VkKCk7CkBAIC02ODY4LDkgKzY2NzAsNiBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnNldENvbnRyb2xsZXIoUmVmUHRyPE1lZGlhQ29udHJvbGxlcj4mJiBj
b250cm9sbGVyKQogCiAgICAgaWYgKG1fbWVkaWFDb250cm9sbGVyKQogICAgICAgICBtX21lZGlh
Q29udHJvbGxlci0+YWRkTWVkaWFFbGVtZW50KCp0aGlzKTsKLQotICAgIGlmIChoYXNNZWRpYUNv
bnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+c2V0TWVkaWFDb250cm9sbGVyKG1f
bWVkaWFDb250cm9sbGVyID8gbV9tZWRpYUNvbnRyb2xsZXIuZ2V0KCkgOiBzdGF0aWNfY2FzdDxN
ZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqPih0aGlzKSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0Q29udHJvbGxlckZvckJpbmRpbmdzKE1lZGlhQ29udHJvbGxlciogY29udHJvbGxl
cikKQEAgLTczMTAsNyArNzEwOSw2IEBAIFJlZlB0cjxWaWRlb1BsYXliYWNrUXVhbGl0eT4gSFRN
TE1lZGlhRWxlbWVudDo6Z2V0VmlkZW9QbGF5YmFja1F1YWxpdHkoKQogICAgIHJldHVybiBWaWRl
b1BsYXliYWNrUXVhbGl0eTo6Y3JlYXRlKHRpbWVzdGFtcCwgbWV0cmljcy52YWx1ZSgpKTsKIH0K
IAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiBET01XcmFwcGVyV29ybGQmIEhU
TUxNZWRpYUVsZW1lbnQ6OmVuc3VyZUlzb2xhdGVkV29ybGQoKQogewogICAgIGlmICghbV9pc29s
YXRlZFdvcmxkKQpAQCAtNzU2OSw3ICs3MzY3LDYgQEAgU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6
OmdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKCkKIAogICAgIHJldHVybiBzdGF0dXM7CiB9
Ci0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKIAogdW5zaWduZWQgbG9u
ZyBsb25nIEhUTUxNZWRpYUVsZW1lbnQ6OmZpbGVTaXplKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggZmNkOGVkZmFiYzI4NTg2MjQzOTIwMjI3OTM4
M2EwODMyZGQ4ZDJjYi4uMWE3MjlmNDA5MWFjZGZjZjc2NWMwYmY1NjkxNjYyNWMyNWEyM2ZkZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTQ0Nyw4ICs0NDcsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBjbG9zZWRDYXB0aW9uc1Zpc2libGUoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2b2lkIHNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sKSBvdmVycmlkZTsKIAot
ICAgIE1lZGlhQ29udHJvbHMqIG1lZGlhQ29udHJvbHMoKSBjb25zdDsKLQogICAgIHZvaWQgc291
cmNlV2FzUmVtb3ZlZChIVE1MU291cmNlRWxlbWVudCYpOwogICAgIHZvaWQgc291cmNlV2FzQWRk
ZWQoSFRNTFNvdXJjZUVsZW1lbnQmKTsKIApAQCAtNTA4LDEzICs1MDYsMTAgQEAgcHVibGljOgog
ICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIHByZWxvYWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJlbG9hZDsgfQogICAgIE1lZGlhRWxlbWVudFNlc3Npb24mIG1lZGlhU2Vzc2lvbigpIGNvbnN0
IHsgcmV0dXJuICptX21lZGlhU2Vzc2lvbjsgfQogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xT
X1NDUklQVCkKICAgICB2b2lkIHBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKICAgICB2b2lkIHVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIGdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKCk7Ci0KICAgICBNZWRpYUNvbnRy
b2xzSG9zdCogbWVkaWFDb250cm9sc0hvc3QoKSB7IHJldHVybiBtX21lZGlhQ29udHJvbHNIb3N0
LmdldCgpOyB9Ci0jZW5kaWYKIAogICAgIGJvb2wgaXNEaXNhYmxpbmdTbGVlcCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2xlZXBEaXNhYmxlci5nZXQoKTsgfQogCkBAIC02MTMsMTEgKzYwOCw5IEBAIHBy
b3RlY3RlZDoKIAogICAgIFNlY3VyaXR5T3JpZ2luRGF0YSBkb2N1bWVudFNlY3VyaXR5T3JpZ2lu
KCkgY29uc3QgZmluYWw7CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAg
IGJvb2wgbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3I7IH0KICAgICB2b2lkIHNl
dE1lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3Rvcihib29sKTsKICAgICB2b2lkIHVw
ZGF0ZU1lZGlhQ29udHJvbHNBZnRlclByZXNlbnRhdGlvbk1vZGVDaGFuZ2UoKTsKLSNlbmRpZgog
CiAgICAgdm9pZCBzY2hlZHVsZUV2ZW50KGNvbnN0IEF0b21TdHJpbmcmKTsKIApAQCAtODUyLDgg
Kzg0NSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGVkVGltZSgpIGNvbnN0
OwogICAgIHZvaWQgcmVmcmVzaENhY2hlZFRpbWUoKSBjb25zdDsKIAotICAgIGJvb2wgaGFzTWVk
aWFDb250cm9scygpIGNvbnN0OwotICAgIGJvb2wgY3JlYXRlTWVkaWFDb250cm9scygpOwogICAg
IHZvaWQgY29uZmlndXJlTWVkaWFDb250cm9scygpOwogCiAgICAgdm9pZCBwcmVwYXJlTWVkaWFG
cmFnbWVudFVSSSgpOwpAQCAtODczLDExICs4NjQsOSBAQCBwcml2YXRlOgogICAgIGVudW0gY2xh
c3MgU2xlZXBUeXBlIHsgTm9uZSwgRGlzcGxheSwgU3lzdGVtIH07CiAgICAgU2xlZXBUeXBlIHNo
b3VsZERpc2FibGVTbGVlcCgpIGNvbnN0OwogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKICAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIG92
ZXJyaWRlOwogICAgIERPTVdyYXBwZXJXb3JsZCYgZW5zdXJlSXNvbGF0ZWRXb3JsZCgpOwogICAg
IGJvb2wgZW5zdXJlTWVkaWFDb250cm9sc0luamVjdGVkU2NyaXB0KCk7Ci0jZW5kaWYKIAogICAg
IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUgbWVkaWFUeXBlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1lZGlhVHlwZSBwcmVzZW50YXRpb25UeXBl
KCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMTE1LDEwICsxMTA0LDggQEAgcHJpdmF0ZToKICAgICBi
b29sIG1faGFzRXZlckhhZEF1ZGlvIDogMTsKICAgICBib29sIG1faGFzRXZlckhhZFZpZGVvIDog
MTsKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgYm9vbCBtX21lZGlh
Q29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvciA6IDE7CiAgICAgYm9vbCBtX2hhdmVTZXRV
cENhcHRpb25Db250YWluZXIgOiAxOwotI2VuZGlmCiAKICAgICBib29sIG1faXNTY3J1YmJpbmdS
ZW1vdGVseSA6IDE7CiAgICAgYm9vbCBtX3dhaXRpbmdUb0VudGVyRnVsbHNjcmVlbiA6IDE7CkBA
IC0xMTkyLDExICsxMTc5LDkgQEAgcHJpdmF0ZToKICAgICBjb25zdCB2b2lkKiBtX2xvZ0lkZW50
aWZpZXI7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAg
ZnJpZW5kIGNsYXNzIE1lZGlhQ29udHJvbHNIb3N0OwogICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xz
SG9zdD4gbV9tZWRpYUNvbnRyb2xzSG9zdDsKICAgICBSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBt
X2lzb2xhdGVkV29ybGQ7Ci0jZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAg
UmVmUHRyPE1lZGlhU3RyZWFtPiBtX21lZGlhU3RyZWFtU3JjT2JqZWN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhYjgyYTE4MDAxMzIwNjk3YjAyY2FkOTYy
ZThlYjE4NjUyNGJhZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVz
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKQotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1l
bnRUeXBlcy5oIgotCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCi0jaW5jbHVkZSAiUmVuZGVyTWVkaWEuaCIKLSNpbmNsdWRlICJSZW5kZXJNZWRpYUNvbnRy
b2xzLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1XVEZfTUFLRV9JU09fQUxM
T0NBVEVEX0lNUEwoTWVkaWFDb250cm9sRGl2RWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NB
VEVEX0lNUEwoTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lT
T19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudCk7Ci0K
LXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLWNsYXNzIEV2ZW50OwotCi1SZWZQdHI8SFRN
TE1lZGlhRWxlbWVudD4gcGFyZW50TWVkaWFFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCi17Ci0g
ICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8Tm9kZT4g
bWVkaWFOb2RlID0gbm9kZS0+c2hhZG93SG9zdCgpOwotICAgIGlmICghbWVkaWFOb2RlKQotICAg
ICAgICBtZWRpYU5vZGUgPSBjb25zdF9jYXN0PE5vZGUqPihub2RlKTsKLSAgICBpZiAoIWlzPEhU
TUxNZWRpYUVsZW1lbnQ+KCptZWRpYU5vZGUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gZG93bmNhc3Q8SFRNTE1lZGlhRWxlbWVudD4obWVkaWFOb2RlLmdldCgpKTsKLX0K
LQotTWVkaWFDb250cm9sRWxlbWVudFR5cGUgbWVkaWFDb250cm9sRWxlbWVudFR5cGUoTm9kZSog
bm9kZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihub2RlLT5pc01l
ZGlhQ29udHJvbEVsZW1lbnQoKSk7Ci0gICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2Rl
KSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbElucHV0RWxlbWVudCo+
KG5vZGUpLT5kaXNwbGF5VHlwZSgpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRy
b2xEaXZFbGVtZW50Kj4obm9kZSktPmRpc3BsYXlUeXBlKCk7Ci19Ci0KLU1lZGlhQ29udHJvbEVs
ZW1lbnQ6Ok1lZGlhQ29udHJvbEVsZW1lbnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxh
eVR5cGUsIEhUTUxFbGVtZW50KiBlbGVtZW50KQotICAgIDogbV9tZWRpYUNvbnRyb2xsZXIoMCkK
LSAgICAsIG1fZGlzcGxheVR5cGUoZGlzcGxheVR5cGUpCi0gICAgLCBtX2VsZW1lbnQoZWxlbWVu
dCkKLXsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50OjpoaWRlKCkKLXsKLSAgICBtX2Vs
ZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5LCBDU1NWYWx1
ZU5vbmUpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnNob3coKQotewotICAgIG1f
ZWxlbWVudC0+cmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXkpOwot
fQotCi1ib29sIE1lZGlhQ29udHJvbEVsZW1lbnQ6OmlzU2hvd2luZygpIGNvbnN0Ci17Ci0gICAg
Y29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBwcm9wZXJ0eVNldCA9IG1fZWxlbWVudC0+aW5saW5lU3R5
bGUoKTsKLSAgICAvLyBGb2xsb3dpbmcgdGhlIGNvZGUgZnJvbSBzaG93KCkgYW5kIGhpZGUoKSBh
Ym92ZSwgd2Ugb25seSBoYXZlCi0gICAgLy8gdG8gY2hlY2sgZm9yIHRoZSBwcmVzZW5zZSBvZiBp
bmxpbmUgZGlzcGxheS4KLSAgICByZXR1cm4gKCFwcm9wZXJ0eVNldCB8fCAhcHJvcGVydHlTZXQt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXNwbGF5KSk7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sRWxlbWVudDo6c2V0RGlzcGxheVR5cGUoTWVkaWFDb250cm9sRWxlbWVudFR5cGUg
ZGlzcGxheVR5cGUpCi17Ci0gICAgaWYgKGRpc3BsYXlUeXBlID09IG1fZGlzcGxheVR5cGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fZGlzcGxheVR5cGUgPSBkaXNwbGF5VHlwZTsKLSAgICBp
ZiAoYXV0byBvYmplY3QgPSBtX2VsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgIG9iamVjdC0+
cmVwYWludCgpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlh
Q29udHJvbERpdkVsZW1lbnQ6Ok1lZGlhQ29udHJvbERpdkVsZW1lbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSkKLSAgICA6IEhUTUxEaXZF
bGVtZW50KGRpdlRhZywgZG9jdW1lbnQpCi0gICAgLCBNZWRpYUNvbnRyb2xFbGVtZW50KGRpc3Bs
YXlUeXBlLCB0aGlzKQotewotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LU1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6TWVkaWFDb250cm9sSW5wdXRFbGVtZW50KERvY3Vt
ZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUpCi0gICAg
OiBIVE1MSW5wdXRFbGVtZW50KGlucHV0VGFnLCBkb2N1bWVudCwgMCwgZmFsc2UpCi0gICAgLCBN
ZWRpYUNvbnRyb2xFbGVtZW50KGRpc3BsYXlUeXBlLCB0aGlzKQotewotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudDo6
TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFD
b250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVt
ZW50KGRvY3VtZW50LCBkaXNwbGF5VHlwZSkKLSAgICAsIG1fY3VycmVudFZhbHVlKDApCi17Ci19
Ci0KLXZvaWQgTWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50OjpzZXRDdXJyZW50VmFsdWUo
ZG91YmxlIHRpbWUpCi17Ci0gICAgbV9jdXJyZW50VmFsdWUgPSB0aW1lOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50
OjpNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlh
Q29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKQotICAgIDogTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50KGRvY3VtZW50LCBkaXNwbGF5VHlwZSkKLXsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xN
dXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0g
ICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewotICAgICAg
ICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0TXV0ZWQoIW1lZGlhQ29udHJvbGxlcigpLT5tdXRlZCgp
KTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0KLSAgICBIVE1M
SW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotdm9pZCBNZWRp
YUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6Y2hhbmdlZE11dGUoKQotewotICAgIHVwZGF0ZURp
c3BsYXlUeXBlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6OnVw
ZGF0ZURpc3BsYXlUeXBlKCkKLXsKLSAgICBzZXREaXNwbGF5VHlwZShtZWRpYUNvbnRyb2xsZXIo
KS0+bXV0ZWQoKSA/IE1lZGlhVW5NdXRlQnV0dG9uIDogTWVkaWFNdXRlQnV0dG9uKTsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xTZWVrQnV0dG9u
RWxlbWVudDo6TWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50
LCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSkKLSAgICA6IE1lZGlhQ29udHJv
bElucHV0RWxlbWVudChkb2N1bWVudCwgZGlzcGxheVR5cGUpCi17Ci19Ci0KLXZvaWQgTWVkaWFD
b250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50
KQotewotICAgIC8vIFNldCB0aGUgbW91c2Vkb3duIGFuZCBtb3VzZXVwIGV2ZW50cyBhcyBkZWZh
dWx0SGFuZGxlZCBzbyB0aGV5Ci0gICAgLy8gZG8gbm90IHRyaWdnZXIgZHJhZyBzdGFydCBvciBl
bmQgYWN0aW9ucyBpbiBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQuCi0gICAgaWYgKGV2ZW50LnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpCi0gICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVk
KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6OnNldEFjdGl2ZShi
b29sIGZsYWcsIGJvb2wgcGF1c2UpCi17Ci0gICAgaWYgKGZsYWcgPT0gYWN0aXZlKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChmbGFnKQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+
YmVnaW5TY2FubmluZyhpc0ZvcndhcmRCdXR0b24oKSA/IE1lZGlhQ29udHJvbGxlckludGVyZmFj
ZTo6Rm9yd2FyZCA6IE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQpOwotICAgIGVs
c2UKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPmVuZFNjYW5uaW5nKCk7Ci0KLSAgICBNZWRp
YUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnNldEFjdGl2ZShmbGFnLCBwYXVzZSk7Ci19Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxl
bWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQp
Ci0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhVm9sdW1lU2xp
ZGVyKQotICAgICwgbV9jbGVhck11dGVkT25Vc2VySW50ZXJhY3Rpb24oZmFsc2UpCi17Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCYgZXZlbnQpCi17Ci0gICAgLy8gTGVmdCBidXR0b24gaXMgMC4gUmVqZWN0cyBtb3Vz
ZSBldmVudHMgbm90IGZyb20gbGVmdCBidXR0b24uCi0gICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2
ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkuYnV0dG9uKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAg
IGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50IHx8IGV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCBldmVudC50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3Vi
bGUgdm9sdW1lID0gdmFsdWUoKS50b0RvdWJsZSgpOwotICAgIGlmICh2b2x1bWUgIT0gbWVkaWFD
b250cm9sbGVyKCktPnZvbHVtZSgpKQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0Vm9s
dW1lKHZvbHVtZSk7Ci0gICAgaWYgKG1fY2xlYXJNdXRlZE9uVXNlckludGVyYWN0aW9uKQotICAg
ICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0TXV0ZWQoZmFsc2UpOwotICAgIGV2ZW50LnNldERl
ZmF1bHRIYW5kbGVkKCk7Ci19Ci0KLWJvb2wgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVu
dDo6d2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50cygpCi17Ci0gICAgaWYgKCFyZW5kZXJlcigp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCk7Ci19Ci0KLWJvb2wgTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMo
KQotewotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tF
dmVudHMoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpzZXRW
b2x1bWUoZG91YmxlIHZvbHVtZSkKLXsKLSAgICBpZiAodmFsdWUoKS50b0RvdWJsZSgpICE9IHZv
bHVtZSkKLSAgICAgICAgc2V0VmFsdWUoU3RyaW5nOjpudW1iZXIodm9sdW1lKSk7Ci19Ci0KLXZv
aWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6c2V0Q2xlYXJNdXRlZE9uVXNlcklu
dGVyYWN0aW9uKGJvb2wgY2xlYXJNdXRlKQotewotICAgIG1fY2xlYXJNdXRlZE9uVXNlckludGVy
YWN0aW9uID0gY2xlYXJNdXRlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5MzFmYzBlMzk1ODNjYTI3ZDgxYjc1NzdjZWQ4Mzk2OTE0OTExN2VhLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShWSURFTykKLQotI2luY2x1
ZGUgIkhUTUxEaXZFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xsZXJJbnRl
cmZhY2UuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1lbnVtIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIHsKLSAgICBNZWRpYUVudGVyRnVsbHNj
cmVlbkJ1dHRvbiA9IDAsCi0gICAgTWVkaWFNdXRlQnV0dG9uLAotICAgIE1lZGlhUGxheUJ1dHRv
biwKLSAgICBNZWRpYVNlZWtCYWNrQnV0dG9uLAotICAgIE1lZGlhU2Vla0ZvcndhcmRCdXR0b24s
Ci0gICAgTWVkaWFTbGlkZXIsCi0gICAgTWVkaWFTbGlkZXJUaHVtYiwKLSAgICBNZWRpYVJld2lu
ZEJ1dHRvbiwKLSAgICBNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24sCi0gICAgTWVkaWFTaG93
Q2xvc2VkQ2FwdGlvbnNCdXR0b24sCi0gICAgTWVkaWFIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24s
Ci0gICAgTWVkaWFVbk11dGVCdXR0b24sCi0gICAgTWVkaWFQYXVzZUJ1dHRvbiwKLSAgICBNZWRp
YVRpbWVsaW5lQ29udGFpbmVyLAotICAgIE1lZGlhQ3VycmVudFRpbWVEaXNwbGF5LAotICAgIE1l
ZGlhVGltZVJlbWFpbmluZ0Rpc3BsYXksCi0gICAgTWVkaWFTdGF0dXNEaXNwbGF5LAotICAgIE1l
ZGlhQ29udHJvbHNQYW5lbCwKLSAgICBNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lciwKLSAgICBN
ZWRpYVZvbHVtZVNsaWRlciwKLSAgICBNZWRpYVZvbHVtZVNsaWRlclRodW1iLAotICAgIE1lZGlh
RnVsbFNjcmVlblZvbHVtZVNsaWRlciwKLSAgICBNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJU
aHVtYiwKLSAgICBNZWRpYVZvbHVtZVNsaWRlck11dGVCdXR0b24sCi0gICAgTWVkaWFUZXh0VHJh
Y2tEaXNwbGF5Q29udGFpbmVyLAotICAgIE1lZGlhVGV4dFRyYWNrRGlzcGxheSwKLSAgICBNZWRp
YUV4aXRGdWxsc2NyZWVuQnV0dG9uLAotICAgIE1lZGlhT3ZlcmxheVBsYXlCdXR0b24sCi0gICAg
TWVkaWFDbG9zZWRDYXB0aW9uc0NvbnRhaW5lciwKLSAgICBNZWRpYUNsb3NlZENhcHRpb25zVHJh
Y2tMaXN0LAotfTsKLQotUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IHBhcmVudE1lZGlhRWxlbWVu
dChjb25zdCBOb2RlKik7Ci1pbmxpbmUgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IHBhcmVudE1l
ZGlhRWxlbWVudChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSB7IHJldHVybiBwYXJlbnRN
ZWRpYUVsZW1lbnQocmVuZGVyZXIubm9kZSgpKTsgfQotCi1NZWRpYUNvbnRyb2xFbGVtZW50VHlw
ZSBtZWRpYUNvbnRyb2xFbGVtZW50VHlwZShOb2RlKik7Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sRWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB2b2lkIGhpZGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwotICAgIHZpcnR1
YWwgYm9vbCBpc1Nob3dpbmcoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxl
bWVudFR5cGUgZGlzcGxheVR5cGUoKSB7IHJldHVybiBtX2Rpc3BsYXlUeXBlOyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TWVkaWFDb250cm9sbGVyKE1lZGlhQ29udHJvbGxlckludGVyZmFjZSog
Y29udHJvbGxlcikgeyBtX21lZGlhQ29udHJvbGxlciA9IGNvbnRyb2xsZXI7IH0KLSAgICB2aXJ0
dWFsIE1lZGlhQ29udHJvbGxlckludGVyZmFjZSogbWVkaWFDb250cm9sbGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9tZWRpYUNvbnRyb2xsZXI7IH0KLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IE1l
ZGlhQ29udHJvbEVsZW1lbnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUsIEhUTUxFbGVtZW50Kik7
Ci0gICAgfk1lZGlhQ29udHJvbEVsZW1lbnQoKSA9IGRlZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0RGlzcGxheVR5cGUoTWVkaWFDb250cm9sRWxlbWVudFR5cGUpOwotICAgIHZpcnR1YWwg
Ym9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgTWVkaWFDb250cm9sbGVySW50ZXJmYWNlKiBtX21lZGlhQ29udHJvbGxlcjsK
LSAgICBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBtX2Rpc3BsYXlUeXBlOwotICAgIEhUTUxFbGVt
ZW50KiBtX2VsZW1lbnQ7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LWNsYXNzIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQsIHB1
YmxpYyBNZWRpYUNvbnRyb2xFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1l
ZGlhQ29udHJvbERpdkVsZW1lbnQpOwotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IE1lZGlhQ29u
dHJvbERpdkVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSk7Ci0KLXBy
aXZhdGU6Ci0gICAgYm9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBNZWRpYUNvbnRyb2xFbGVtZW50Ojppc01lZGlhQ29udHJvbEVsZW1lbnQoKTsgfQotfTsK
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xJ
bnB1dEVsZW1lbnQgOiBwdWJsaWMgSFRNTElucHV0RWxlbWVudCwgcHVibGljIE1lZGlhQ29udHJv
bEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50KTsKLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSk7Ci0KLXByaXZhdGU6Ci0gICAg
Ym9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBNZWRpYUNv
bnRyb2xFbGVtZW50Ojppc01lZGlhQ29udHJvbEVsZW1lbnQoKTsgfQotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVEaXNwbGF5VHlwZSgpIHsgfQotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQgOiBwdWJsaWMg
TWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRp
YUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQpOwotcHVibGljOgotICAgIHZvaWQgc2V0Q3VycmVu
dFZhbHVlKGRvdWJsZSk7Ci0gICAgZG91YmxlIGN1cnJlbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY3VycmVudFZhbHVlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRy
b2xUaW1lRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSk7
Ci0KLXByaXZhdGU6Ci0gICAgZG91YmxlIG1fY3VycmVudFZhbHVlOwotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxl
bWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAg
IHZvaWQgY2hhbmdlZE11dGUoKTsKLQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tF
dmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBleHBs
aWNpdCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChEb2N1bWVudCYsIE1lZGlhQ29udHJv
bEVsZW1lbnRUeXBlKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIG92
ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKSBvdmVycmlk
ZTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFD
b250cm9sU2Vla0J1dHRvbkVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50
IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVt
ZW50KTsKLXB1YmxpYzoKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgTWVk
aWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50
VHlwZSk7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNGb3J3YXJkQnV0dG9uKCkgY29uc3QgPSAwOwotCi1wcml2YXRl
OgotICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wgLypmbGFnKi8gPSB0cnVlLCBib29sIC8qcGF1c2Uq
LyA9IGZhbHNlKSBmaW5hbDsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotY2xhc3MgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgYm9vbCB3aWxsUmVzcG9uZFRv
TW91c2VNb3ZlRXZlbnRzKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VD
bGlja0V2ZW50cygpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Vm9sdW1lKGRvdWJsZSk7Ci0gICAg
dm9pZCBzZXRDbGVhck11dGVkT25Vc2VySW50ZXJhY3Rpb24oYm9vbCk7Ci0KLXByb3RlY3RlZDoK
LSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KERvY3VtZW50Jik7
Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotcHJp
dmF0ZToKLSAgICBib29sIG1fY2xlYXJNdXRlZE9uVXNlckludGVyYWN0aW9uOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmI0YjRjYjY0YWViZTIxNGI5MjgxNWEwNmQ3ZGFi
OTM4ODA1MDY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE1MDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKQot
Ci0jaW5jbHVkZSAiRE9NVG9rZW5MaXN0LmgiCi0jaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0
b3IuaCIKLSNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGdWxsc2NyZWVuTWFuYWdlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxIZWFkaW5nRWxlbWVudC5o
IgotI2luY2x1ZGUgIkhUTUxMSUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVUxpc3RFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCi0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
LSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzLmgiCi0jaW5jbHVkZSAiTW91c2VFdmVudC5oIgotI2lu
Y2x1ZGUgIlBPREludGVydmFsLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VH
cm91cC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyTWVkaWFD
b250cm9scy5oIgotI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgotI2luY2x1ZGUgIlJlbmRlclRo
ZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
Ci0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaGFkb3dSb290LmgiCi0jaW5jbHVk
ZSAiVGV4dFRyYWNrQ3VlR2VuZXJpYy5oIgotI2luY2x1ZGUgIlRleHRUcmFja0xpc3QuaCIKLSNp
bmNsdWRlICJWVFRSZWdpb25MaXN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMu
aD4KLSNpbmNsdWRlIDx3dGYvTGFuZ3VhZ2UuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1X
VEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sUGFuZWxFbGVtZW50KTsKLVdU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVsZW1l
bnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbE92ZXJsYXlFbmNs
b3N1cmVFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1l
ZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KTsKLVdURl9NQUtF
X0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50KTsK
LVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRl
QnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9s
UGxheUJ1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29u
dHJvbE92ZXJsYXlQbGF5QnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoTWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQpOwotV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQpOwot
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVC
dXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xU
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudCk7Ci1XVEZf
TUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xp
c3RFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5CdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRp
YUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50KTsKLVdURl9N
QUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0
dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sRnVs
bHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TVBMKE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudCk7Ci1XVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudCk7
Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudCk7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLXN0YXRpYyBjb25z
dCBBdG9tU3RyaW5nJiBnZXRNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50U2hh
ZG93UHNldWRvSWQoKTsKLXN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBnZXRNZWRpYUNvbnRyb2xU
aW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnRTaGFkb3dQc2V1ZG9JZCgpOwotCi1NZWRpYUNvbnRy
b2xQYW5lbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudChEb2N1bWVudCYgZG9jdW1l
bnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYUNvbnRyb2xz
UGFuZWwpCi0gICAgLCBtX2NhbkJlRHJhZ2dlZChmYWxzZSkKLSAgICAsIG1faXNCZWluZ0RyYWdn
ZWQoZmFsc2UpCi0gICAgLCBtX2lzRGlzcGxheWVkKGZhbHNlKQotICAgICwgbV9vcGFxdWUodHJ1
ZSkKLSAgICAsIG1fdHJhbnNpdGlvblRpbWVyKCp0aGlzLCAmTWVkaWFDb250cm9sUGFuZWxFbGVt
ZW50Ojp0cmFuc2l0aW9uVGltZXJGaXJlZCkKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygi
LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ+IE1lZGlhQ29udHJv
bFBhbmVsRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQoZG9jdW1lbnQpKTsKLX0KLQot
dm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnN0YXJ0RHJhZyhjb25zdCBMYXlvdXRQb2lu
dCYgZXZlbnRMb2NhdGlvbikKLXsKLSAgICBpZiAoIW1fY2FuQmVEcmFnZ2VkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pc0JlaW5nRHJhZ2dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8
fCAhcmVuZGVyZXItPmlzQm94KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxGcmFt
ZT4gZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9sYXN0RHJhZ0V2ZW50TG9jYXRpb24gPSBldmVudExvY2F0aW9uOwot
Ci0gICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLnNldENhcHR1cmluZ01vdXNlRXZlbnRzRWxlbWVu
dCh0aGlzKTsKLQotICAgIG1faXNCZWluZ0RyYWdnZWQgPSB0cnVlOwotfQotCi12b2lkIE1lZGlh
Q29udHJvbFBhbmVsRWxlbWVudDo6Y29udGludWVEcmFnKGNvbnN0IExheW91dFBvaW50JiBldmVu
dExvY2F0aW9uKQotewotICAgIGlmICghbV9pc0JlaW5nRHJhZ2dlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgTGF5b3V0U2l6ZSBkaXN0YW5jZURyYWdnZWQgPSBldmVudExvY2F0aW9uIC0gbV9s
YXN0RHJhZ0V2ZW50TG9jYXRpb247Ci0gICAgbV9jdW11bGF0aXZlRHJhZ09mZnNldC5tb3ZlKGRp
c3RhbmNlRHJhZ2dlZCk7Ci0gICAgbV9sYXN0RHJhZ0V2ZW50TG9jYXRpb24gPSBldmVudExvY2F0
aW9uOwotICAgIHNldFBvc2l0aW9uKG1fY3VtdWxhdGl2ZURyYWdPZmZzZXQpOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZW5kRHJhZygpCi17Ci0gICAgaWYgKCFtX2lzQmVp
bmdEcmFnZ2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzQmVpbmdEcmFnZ2VkID0gZmFs
c2U7Ci0KLSAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZyYW1lLT5ldmVudEhhbmRsZXIo
KS5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQobnVsbHB0cik7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sUGFuZWxFbGVtZW50OjpzdGFydFRpbWVyKCkKLXsKLSAgICBzdG9wVGltZXIoKTsK
LQotICAgIC8vIFRoZSB0aW1lciBpcyByZXF1aXJlZCB0byBzZXQgdGhlIHByb3BlcnR5IGRpc3Bs
YXk6J25vbmUnIG9uIHRoZSBwYW5lbCwKLSAgICAvLyBzdWNoIHRoYXQgY2FwdGlvbnMgYXJlIGNv
cnJlY3RseSBkaXNwbGF5ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdmlkZW8KLSAgICAvLyBhdCB0
aGUgZW5kIG9mIHRoZSBmYWRlb3V0IHRyYW5zaXRpb24uCi0gICAgU2Vjb25kcyBkdXJhdGlvbiA9
IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5tZWRpYUNvbnRyb2xzRmFkZU91dER1cmF0aW9uKCk7
Ci0gICAgbV90cmFuc2l0aW9uVGltZXIuc3RhcnRPbmVTaG90KGR1cmF0aW9uKTsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnN0b3BUaW1lcigpCi17Ci0gICAgaWYgKG1fdHJh
bnNpdGlvblRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdHJhbnNpdGlvblRpbWVyLnN0b3Ao
KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnRyYW5zaXRpb25UaW1lckZp
cmVkKCkKLXsKLSAgICBpZiAoIW1fb3BhcXVlKQotICAgICAgICBoaWRlKCk7Ci0KLSAgICBzdG9w
VGltZXIoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnNldFBvc2l0aW9u
KGNvbnN0IExheW91dFBvaW50JiBwb3NpdGlvbikKLXsKLSAgICBkb3VibGUgbGVmdCA9IHBvc2l0
aW9uLngoKTsKLSAgICBkb3VibGUgdG9wID0gcG9zaXRpb24ueSgpOwotCi0gICAgLy8gU2V0IHRo
ZSBsZWZ0IGFuZCB0b3AgdG8gY29udHJvbCB0aGUgcGFuZWwncyBwb3NpdGlvbjsgdGhpcyBkZXBl
bmRzIG9uIGl0IGJlaW5nIGFic29sdXRlIHBvc2l0aW9uZWQuCi0gICAgLy8gU2V0IHRoZSBtYXJn
aW4gdG8gemVybyBzaW5jZSB0aGUgcG9zaXRpb24gcGFzc2VkIGluIHdpbGwgYWxyZWFkeSBpbmNs
dWRlIHRoZSBlZmZlY3Qgb2YgdGhlIG1hcmdpbi4KLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5TGVmdCwgbGVmdCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgc2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgdG9wLCBDU1NVbml0VHlwZTo6Q1NTX1BY
KTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgMC4w
LCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5TWFyZ2luVG9wLCAwLjAsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotCi0gICAgY2xhc3NM
aXN0KCkuYWRkKCJkcmFnZ2VkIik7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50
OjpyZXNldFBvc2l0aW9uKCkKLXsKLSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5TGVmdCk7Ci0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRv
cCk7Ci0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQp
OwotICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3ApOwot
Ci0gICAgY2xhc3NMaXN0KCkucmVtb3ZlKCJkcmFnZ2VkIik7Ci0KLSAgICBtX2N1bXVsYXRpdmVE
cmFnT2Zmc2V0LnNldFgoMCk7Ci0gICAgbV9jdW11bGF0aXZlRHJhZ09mZnNldC5zZXRZKDApOwot
fQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6bWFrZU9wYXF1ZSgpCi17Ci0gICAg
aWYgKG1fb3BhcXVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3VibGUgZHVyYXRpb24gPSBS
ZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkubWVkaWFDb250cm9sc0ZhZGVJbkR1cmF0aW9uKCk7Ci0K
LSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNpdGlvblByb3BlcnR5
LCBDU1NQcm9wZXJ0eU9wYWNpdHkpOwotICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlUcmFuc2l0aW9uRHVyYXRpb24sIGR1cmF0aW9uLCBDU1NVbml0VHlwZTo6Q1NTX1MpOwot
ICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlPcGFjaXR5LCAxLjAsIENTU1Vu
aXRUeXBlOjpDU1NfTlVNQkVSKTsKLQotICAgIG1fb3BhcXVlID0gdHJ1ZTsKLQotICAgIGlmICht
X2lzRGlzcGxheWVkKQotICAgICAgICBzaG93KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFu
ZWxFbGVtZW50OjptYWtlVHJhbnNwYXJlbnQoKQotewotICAgIGlmICghbV9vcGFxdWUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFNlY29uZHMgZHVyYXRpb24gPSBSZW5kZXJUaGVtZTo6c2luZ2xl
dG9uKCkubWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpOwotCi0gICAgc2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlPcGFj
aXR5KTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNpdGlvbkR1
cmF0aW9uLCBkdXJhdGlvbi52YWx1ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX1MpOwotICAgIHNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlPcGFjaXR5LCAwLjAsIENTU1VuaXRUeXBlOjpD
U1NfTlVNQkVSKTsKLQotICAgIG1fb3BhcXVlID0gZmFsc2U7Ci0gICAgc3RhcnRUaW1lcigpOwot
fQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCYgZXZlbnQpCi17Ci0gICAgTWVkaWFDb250cm9sRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihldmVudCk7Ci0KLSAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpKSB7Ci0gICAg
ICAgIExheW91dFBvaW50IGxvY2F0aW9uID0gZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQpLmFi
c29sdXRlTG9jYXRpb24oKTsKLSAgICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQudGFyZ2V0KCkgPT0gdGhpcykgewotICAgICAgICAg
ICAgc3RhcnREcmFnKGxvY2F0aW9uKTsKLSAgICAgICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5k
bGVkKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZW1vdmVFdmVudCAmJiBtX2lzQmVpbmdEcmFnZ2VkKQotICAgICAgICAgICAgY29udGludWVE
cmFnKGxvY2F0aW9uKTsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZXVwRXZlbnQgJiYgbV9pc0JlaW5nRHJhZ2dlZCkgewotICAgICAgICAgICAgY29u
dGludWVEcmFnKGxvY2F0aW9uKTsKLSAgICAgICAgICAgIGVuZERyYWcoKTsKLSAgICAgICAgICAg
IGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
TWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzZXRDYW5CZURyYWdnZWQoYm9vbCBjYW5CZURyYWdn
ZWQpCi17Ci0gICAgaWYgKG1fY2FuQmVEcmFnZ2VkID09IGNhbkJlRHJhZ2dlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9jYW5CZURyYWdnZWQgPSBjYW5CZURyYWdnZWQ7Ci0KLSAgICBpZiAo
IWNhbkJlRHJhZ2dlZCkKLSAgICAgICAgZW5kRHJhZygpOwotfQotCi12b2lkIE1lZGlhQ29udHJv
bFBhbmVsRWxlbWVudDo6c2V0SXNEaXNwbGF5ZWQoYm9vbCBpc0Rpc3BsYXllZCkKLXsKLSAgICBt
X2lzRGlzcGxheWVkID0gaXNEaXNwbGF5ZWQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotTWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVFbGVtZW50OjpNZWRpYUNvbnRy
b2xQYW5lbEVuY2xvc3VyZUVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIC8vIE1hcHBp
bmcgb250byBzYW1lIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGFzIHBhbmVsIGVsZW1lbnQsIHNp
bmNlIGl0IGhhcyBzaW1pbGFyIHByb3BlcnRpZXMuCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVt
ZW50KGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzUGFuZWwpCi17Ci0gICAgc2V0UHNldWRvKEF0b21T
dHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtZW5jbG9zdXJlIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFBhbmVsRW5jbG9zdXJl
RWxlbWVudD4gTWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVFbGVtZW50OjpjcmVhdGUoRG9jdW1l
bnQmIGRvY3VtZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFBh
bmVsRW5jbG9zdXJlRWxlbWVudChkb2N1bWVudCkpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbE92ZXJsYXlFbmNsb3N1cmVFbGVtZW50OjpNZWRp
YUNvbnRyb2xPdmVybGF5RW5jbG9zdXJlRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAg
Ly8gTWFwcGluZyBvbnRvIHNhbWUgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgYXMgcGFuZWwgZWxl
bWVudCwgc2luY2UgaXQgaGFzIHNpbWlsYXIgcHJvcGVydGllcy4KLSAgICA6IE1lZGlhQ29udHJv
bERpdkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhQ29udHJvbHNQYW5lbCkKLXsKLSAgICBzZXRQc2V1
ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1vdmVybGF5LWVuY2xvc3VyZSIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRy
b2xPdmVybGF5RW5jbG9zdXJlRWxlbWVudD4gTWVkaWFDb250cm9sT3ZlcmxheUVuY2xvc3VyZUVs
ZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTWVkaWFDb250cm9sT3ZlcmxheUVuY2xvc3VyZUVsZW1lbnQoZG9jdW1lbnQpKTsKLX0K
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xUaW1lbGlu
ZUNvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudChE
b2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50
LCBNZWRpYVRpbWVsaW5lQ29udGFpbmVyKQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCIt
d2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLWNvbnRhaW5lciIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRh
aW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sVGltZWxpbmVDb250
YWluZXJFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xUaW1lbGlu
ZUNvbnRhaW5lckVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBlbGVtZW50LT5oaWRlKCk7Ci0gICAg
cmV0dXJuIGVsZW1lbnQ7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJF
bGVtZW50OjpzZXRUaW1lRGlzcGxheXNIaWRkZW4oYm9vbCBoaWRkZW4pCi17Ci0gICAgZm9yIChh
dXRvJiBlbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAg
IGlmIChlbGVtZW50LnNoYWRvd1BzZXVkb0lkKCkgIT0gZ2V0TWVkaWFDb250cm9sVGltZVJlbWFp
bmluZ0Rpc3BsYXlFbGVtZW50U2hhZG93UHNldWRvSWQoKQotICAgICAgICAgICAgJiYgZWxlbWVu
dC5zaGFkb3dQc2V1ZG9JZCgpICE9IGdldE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVs
ZW1lbnRTaGFkb3dQc2V1ZG9JZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50JiB0aW1lRGlzcGxheSA9IHN0YXRpY19jYXN0
PE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudCY+KGVsZW1lbnQpOwotICAgICAgICBpZiAo
aGlkZGVuKQotICAgICAgICAgICAgdGltZURpc3BsYXkuaGlkZSgpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB0aW1lRGlzcGxheS5zaG93KCk7Ci0gICAgfQotfQotCi1SZW5kZXJQdHI8UmVu
ZGVyRWxlbWVudD4gTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OjpjcmVhdGVF
bGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsZSwgY29uc3QgUmVuZGVyVHJlZVBvc2l0
aW9uJikKLXsKLSAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyTWVkaWFDb250cm9sVGlt
ZWxpbmVDb250YWluZXI+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7Ci19Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVy
RWxlbWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChEb2N1bWVu
dCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRp
YVZvbHVtZVNsaWRlckNvbnRhaW5lcikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdl
YmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlk
ZXJDb250YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRp
YUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgZWxl
bWVudC0+aGlkZSgpOwotICAgIHJldHVybiBlbGVtZW50OwotfQotCi1SZW5kZXJQdHI8UmVuZGVy
RWxlbWVudD4gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRl
RWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3Np
dGlvbiYpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlck1lZGlhVm9sdW1lU2xp
ZGVyQ29udGFpbmVyPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwotfQotCi12b2lkIE1lZGlhQ29u
dHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQmIGV2ZW50KQotewotICAgIC8vIFBvb3IgbWFuJ3MgbW91c2VsZWF2ZSBldmVudCBkZXRlY3Rp
b24uCi0KLSAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSB8fCBldmVudC50eXBlKCkgIT0g
ZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
aXM8Tm9kZT4oZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQpLnJlbGF0ZWRUYXJnZXQoKSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChjb250YWluc0luY2x1ZGluZ1NoYWRvd0RPTSgmZG93
bmNhc3Q8Tm9kZT4oKmRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KS5yZWxhdGVkVGFyZ2V0KCkp
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaGlkZSgpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpNZWRp
YUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBN
ZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYVN0YXR1c0Rpc3BsYXkpCi0gICAg
LCBtX3N0YXRlQmVpbmdEaXNwbGF5ZWQoTm90aGluZykKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0
cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1zdGF0dXMtZGlzcGxheSIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNw
bGF5RWxlbWVudD4gTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShEb2N1
bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVt
ZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxl
bWVudChkb2N1bWVudCkpOwotICAgIGVsZW1lbnQtPmhpZGUoKTsKLSAgICByZXR1cm4gZWxlbWVu
dDsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6dXBkYXRlKCkK
LXsKLSAgICAvLyBHZXQgdGhlIG5ldyBzdGF0ZSB0aGF0IHdlJ2xsIGhhdmUgdG8gZGlzcGxheS4K
LSAgICBTdGF0ZUJlaW5nRGlzcGxheWVkIG5ld1N0YXRlVG9EaXNwbGF5ID0gTm90aGluZzsKLQot
ICAgIGlmIChtZWRpYUNvbnRyb2xsZXIoKS0+cmVhZHlTdGF0ZSgpIDw9IE1lZGlhQ29udHJvbGxl
ckludGVyZmFjZTo6SEFWRV9NRVRBREFUQSAmJiBtZWRpYUNvbnRyb2xsZXIoKS0+aGFzQ3VycmVu
dFNyYygpKQotICAgICAgICBuZXdTdGF0ZVRvRGlzcGxheSA9IExvYWRpbmc7Ci0gICAgZWxzZSBp
ZiAobWVkaWFDb250cm9sbGVyKCktPmlzTGl2ZVN0cmVhbSgpKQotICAgICAgICBuZXdTdGF0ZVRv
RGlzcGxheSA9IExpdmVCcm9hZGNhc3Q7Ci0KLSAgICBpZiAobmV3U3RhdGVUb0Rpc3BsYXkgPT0g
bV9zdGF0ZUJlaW5nRGlzcGxheWVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zdGF0
ZUJlaW5nRGlzcGxheWVkID09IE5vdGhpbmcpCi0gICAgICAgIHNob3coKTsKLSAgICBlbHNlIGlm
IChuZXdTdGF0ZVRvRGlzcGxheSA9PSBOb3RoaW5nKQotICAgICAgICBoaWRlKCk7Ci0KLSAgICBt
X3N0YXRlQmVpbmdEaXNwbGF5ZWQgPSBuZXdTdGF0ZVRvRGlzcGxheTsKLQotICAgIHN3aXRjaCAo
bV9zdGF0ZUJlaW5nRGlzcGxheWVkKSB7Ci0gICAgY2FzZSBOb3RoaW5nOgotICAgICAgICBzZXRJ
bm5lclRleHQoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTG9hZGlu
ZzoKLSAgICAgICAgc2V0SW5uZXJUZXh0KG1lZGlhRWxlbWVudExvYWRpbmdTdGF0ZVRleHQoKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGl2ZUJyb2FkY2FzdDoKLSAgICAgICAgc2V0SW5u
ZXJUZXh0KG1lZGlhRWxlbWVudExpdmVCcm9hZGNhc3RTdGF0ZVRleHQoKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRp
YUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0
b25FbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi0g
ICAgOiBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChkb2N1bWVudCwgTWVkaWFNdXRlQnV0
dG9uKQotICAgICwgbV9jb250cm9scyhjb250cm9scykKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0
cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1tdXRlLWJ1dHRvbiIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0
b25FbGVtZW50PiBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpjcmVhdGUoRG9j
dW1lbnQmIGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzKiBjb250cm9scykKLXsKLSAgICBBU1NFUlQo
Y29udHJvbHMpOwotCi0gICAgUmVmPE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+
IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVu
dChkb2N1bWVudCwgY29udHJvbHMpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJBZ2VudFNoYWRv
d1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIHJldHVybiBidXR0
b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpCi0gICAgICAgIG1fY29udHJvbHMtPnNob3dWb2x1
bWVTbGlkZXIoKTsKLQotICAgIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1NZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudDo6TWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAg
IDogTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhTXV0ZUJ1dHRv
bikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy12
b2x1bWUtc2xpZGVyLW11dGUtYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50
PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3Vt
ZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1
dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sVm9sdW1lU2xp
ZGVyTXV0ZUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJB
Z2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIHJl
dHVybiBidXR0b247Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVk
aWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50
KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1
bWVudCwgTWVkaWFQbGF5QnV0dG9uKQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50PiBNZWRp
YUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsK
LSAgICBSZWY8TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVm
KCpuZXcgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0
b24tPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1
dHRvbiIpOwotICAgIHJldHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGxheUJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewotICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgaWYg
KG1lZGlhQ29udHJvbGxlcigpLT5jYW5QbGF5KCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xs
ZXIoKS0+cGxheSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xsZXIo
KS0+cGF1c2UoKTsKLSAgICAgICAgdXBkYXRlRGlzcGxheVR5cGUoKTsKLSAgICAgICAgZXZlbnQu
c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVs
ZW1lbnQ6OnVwZGF0ZURpc3BsYXlUeXBlKCkKLXsKLSAgICBzZXREaXNwbGF5VHlwZShtZWRpYUNv
bnRyb2xsZXIoKS0+Y2FuUGxheSgpID8gTWVkaWFQbGF5QnV0dG9uIDogTWVkaWFQYXVzZUJ1dHRv
bik7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9s
T3ZlcmxheVBsYXlCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVs
ZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50
KGRvY3VtZW50LCBNZWRpYU92ZXJsYXlQbGF5QnV0dG9uKQotewotICAgIHNldFBzZXVkbyhBdG9t
U3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLW92ZXJsYXktcGxheS1idXR0b24iLCBBdG9t
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sT3Zl
cmxheVBsYXlCdXR0b25FbGVtZW50PiBNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1l
bnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbE92
ZXJsYXlQbGF5QnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRy
b2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0b24tPmVuc3Vy
ZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwot
ICAgIHJldHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0
b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAo
ZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIG1lZGlhQ29udHJvbGxl
cigpLT5jYW5QbGF5KCkpIHsKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPnBsYXkoKTsKLSAg
ICAgICAgdXBkYXRlRGlzcGxheVR5cGUoKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRs
ZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihl
dmVudCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0b25FbGVtZW50Ojp1
cGRhdGVEaXNwbGF5VHlwZSgpCi17Ci0gICAgaWYgKG1lZGlhQ29udHJvbGxlcigpLT5jYW5QbGF5
KCkpIHsKLSAgICAgICAgc2hvdygpOwotICAgIH0gZWxzZQotICAgICAgICBoaWRlKCk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sU2Vla0Zvcndh
cmRCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQoRG9j
dW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQoZG9j
dW1lbnQsIE1lZGlhU2Vla0ZvcndhcmRCdXR0b24pCi17Ci0gICAgc2V0UHNldWRvKEF0b21TdHJp
bmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtc2Vlay1mb3J3YXJkLWJ1dHRvbiIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xTZWVrRm9y
d2FyZEJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudDo6
Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sU2Vla0Zv
cndhcmRCdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFNl
ZWtGb3J3YXJkQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNl
ckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAg
cmV0dXJuIGJ1dHRvbjsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1N
ZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFNlZWtCYWNrQnV0
dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xTZWVrQnV0
dG9uRWxlbWVudChkb2N1bWVudCwgTWVkaWFTZWVrQmFja0J1dHRvbikKLXsKLSAgICBzZXRQc2V1
ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWJhY2stYnV0dG9uIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJv
bFNlZWtCYWNrQnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50
OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xTZWVr
QmFja0J1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sU2Vl
a0JhY2tCdXR0b25FbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgYnV0dG9uLT5lbnN1cmVVc2VyQWdl
bnRTaGFkb3dSb290KCk7Ci0gICAgYnV0dG9uLT5zZXRUeXBlKCJidXR0b24iKTsKLSAgICByZXR1
cm4gYnV0dG9uOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlh
Q29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1l
bnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KGRv
Y3VtZW50LCBNZWRpYVJld2luZEJ1dHRvbikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygi
LXdlYmtpdC1tZWRpYS1jb250cm9scy1yZXdpbmQtYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1l
bnQ+IE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9j
dW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ+IGJ1dHRv
biA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudChkb2N1bWVu
dCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRv
bi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRp
YUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBl
dmVudCkKLXsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50
KSB7Ci0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5zZXRDdXJyZW50VGltZShzdGQ6Om1heDxk
b3VibGU+KDAsIG1lZGlhQ29udHJvbGxlcigpLT5jdXJyZW50VGltZSgpIC0gMzApKTsKLSAgICAg
ICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ6
Ok1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50KERvY3VtZW50JiBkb2N1
bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1bWVudCwgTWVkaWFSZXR1
cm5Ub1JlYWx0aW1lQnV0dG9uKQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0
LW1lZGlhLWNvbnRyb2xzLXJldHVybi10by1yZWFsdGltZS1idXR0b24iLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sUmV0dXJuVG9SZWFs
dGltZUJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xS
ZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRp
YUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1
dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgi
YnV0dG9uIik7Ci0gICAgYnV0dG9uLT5oaWRlKCk7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQot
dm9pZCBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuY2xpY2tFdmVudCkgewotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+cmV0dXJu
VG9SZWFsdGltZSgpOwotICAgICAgICBldmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0K
LSAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25z
QnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhQ29udHJvbHMqIGNvbnRyb2xz
KQotICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KGRvY3VtZW50LCBNZWRpYVNob3dDbG9z
ZWRDYXB0aW9uc0J1dHRvbikKLSNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oV0lOKSB8
fCBQTEFURk9STShHVEspCi0gICAgLCBtX2NvbnRyb2xzKGNvbnRyb2xzKQotI2VuZGlmCi17Ci0j
aWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oV0lOKSB8fCAhUExBVEZPUk0oR1RLKQot
ICAgIFVOVVNFRF9QQVJBTShjb250cm9scyk7Ci0jZW5kaWYKLSAgICBzZXRQc2V1ZG8oQXRvbVN0
cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy10b2dnbGUtY2xvc2VkLWNhcHRpb25zLWJ1dHRv
biIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNv
bnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFRvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwg
TWVkaWFDb250cm9scyogY29udHJvbHMpCi17Ci0gICAgQVNTRVJUKGNvbnRyb2xzKTsKLQotICAg
IFJlZjxNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IGJ1dHRv
biA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25F
bGVtZW50KGRvY3VtZW50LCBjb250cm9scykpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFnZW50
U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgYnV0dG9u
LT5oaWRlKCk7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUb2dn
bGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OnVwZGF0ZURpc3BsYXlUeXBlKCkKLXsKLSAg
ICBib29sIGNhcHRpb25zVmlzaWJsZSA9IG1lZGlhQ29udHJvbGxlcigpLT5jbG9zZWRDYXB0aW9u
c1Zpc2libGUoKTsKLSAgICBzZXREaXNwbGF5VHlwZShjYXB0aW9uc1Zpc2libGUgPyBNZWRpYUhp
ZGVDbG9zZWRDYXB0aW9uc0J1dHRvbiA6IE1lZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uKTsK
LSAgICBzZXRDaGVja2VkKGNhcHRpb25zVmlzaWJsZSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
VG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50JiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlj
a0V2ZW50KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBncmVhdCB0aGF0IHRoZSBzaGFy
ZWQgY29kZSBpcyBkaWN0YXRpbmcgYmVoYXZpb3Igb2YgcGxhdGZvcm0tc3BlY2lmaWMKLSAgICAg
ICAgLy8gVUkuIE5vdCBhbGwgcG9ydHMgbWF5IHdhbnQgdGhlIGNsb3NlZCBjYXB0aW9ucyBidXR0
b24gdG8gdG9nZ2xlIGEgbGlzdCBvZiB0cmFja3MsIHNvCi0gICAgICAgIC8vIHdlIGhhdmUgdG8g
dXNlICNpZi4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMTg3NwotI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKFdJTikgJiYgIVBM
QVRGT1JNKEdUSykKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPnNldENsb3NlZENhcHRpb25z
VmlzaWJsZSghbWVkaWFDb250cm9sbGVyKCktPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpKTsKLSAg
ICAgICAgc2V0Q2hlY2tlZChtZWRpYUNvbnRyb2xsZXIoKS0+Y2xvc2VkQ2FwdGlvbnNWaXNpYmxl
KCkpOwotICAgICAgICB1cGRhdGVEaXNwbGF5VHlwZSgpOwotI2Vsc2UKLSAgICAgICAgbV9jb250
cm9scy0+dG9nZ2xlQ2xvc2VkQ2FwdGlvblRyYWNrTGlzdCgpOwotI2VuZGlmCi0gICAgICAgIGV2
ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfQotCi0gICAgSFRNTElucHV0RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNDb250YWluZXJFbGVtZW50OjpN
ZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50KQotICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChkb2N1bWVudCwgTWVkaWFDbG9zZWRD
YXB0aW9uc0NvbnRhaW5lcikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1t
ZWRpYS1jb250cm9scy1jbG9zZWQtY2FwdGlvbnMtY29udGFpbmVyIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25z
Q29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNDb250YWluZXJFbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xD
bG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IE1l
ZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCkpOwotICAg
IGVsZW1lbnQtPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZGlyQXR0ciwgQXRv
bVN0cmluZygiYXV0byIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAg
ZWxlbWVudC0+aGlkZSgpOwotICAgIHJldHVybiBlbGVtZW50OwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0
RWxlbWVudDo6TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50KERvY3Vt
ZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi0gICAgOiBNZWRpYUNvbnRy
b2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYUNsb3NlZENhcHRpb25zVHJhY2tMaXN0KQotI2lm
IEVOQUJMRShWSURFT19UUkFDSykKLSAgICAsIG1fY29udHJvbHMoY29udHJvbHMpCi0jZW5kaWYK
LXsKLSNpZiAhRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIFVOVVNFRF9QQVJBTShjb250cm9scyk7
Ci0jZW5kaWYKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9s
cy1jbG9zZWQtY2FwdGlvbnMtdHJhY2stbGlzdCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVs
ZW1lbnQ+IE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudDo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi17Ci0gICAgQVNT
RVJUKGNvbnRyb2xzKTsKLSAgICBSZWY8TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xp
c3RFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0
aW9uc1RyYWNrTGlzdEVsZW1lbnQoZG9jdW1lbnQsIGNvbnRyb2xzKSk7Ci0gICAgcmV0dXJuIGVs
ZW1lbnQ7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCkgewotICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KGV2ZW50LnRhcmdldCgpKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAvLyBXaGVuIHdlIGNyZWF0ZWQgdGhlIGVsZW1lbnRzIGlu
IHRoZSB0cmFjayBsaXN0LCB3ZSBnYXZlIHRoZW0gYSBjdXN0b20KLSAgICAgICAgLy8gYXR0cmli
dXRlIHJlcHJlc2VudGluZyB0aGUgaW5kZXggaW4gdGhlIEhUTUxNZWRpYUVsZW1lbnQncyBsaXN0
IG9mIHRyYWNrcy4KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50IHRhcmdldCBoYXMgc3Vj
aCBhIGN1c3RvbSBlbGVtZW50IGFuZCwgaWYgc28sCi0gICAgICAgIC8vIHRlbGwgdGhlIEhUTUxN
ZWRpYUVsZW1lbnQgdG8gZW5hYmxlIHRoYXQgdHJhY2suCi0KLSAgICAgICAgYXV0byB0ZXh0VHJh
Y2sgPSBtYWtlUmVmUHRyKG1fbWVudVRvVHJhY2tNYXAuZ2V0KCZkb3duY2FzdDxFbGVtZW50Pigq
ZXZlbnQudGFyZ2V0KCkpKSk7Ci0gICAgICAgIG1fbWVudVRvVHJhY2tNYXAuY2xlYXIoKTsKLSAg
ICAgICAgbV9jb250cm9scy0+dG9nZ2xlQ2xvc2VkQ2FwdGlvblRyYWNrTGlzdCgpOwotICAgICAg
ICBpZiAoIXRleHRUcmFjaykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvIG1l
ZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKLSAgICAgICAgaWYgKCFtZWRp
YUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbWVkaWFFbGVtZW50LT5z
ZXRTZWxlY3RlZFRleHRUcmFjayh0ZXh0VHJhY2suZ2V0KCkpOwotCi0gICAgICAgIHVwZGF0ZURp
c3BsYXkoKTsKLSAgICB9Ci0KLSAgICBNZWRpYUNvbnRyb2xEaXZFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKGV2ZW50KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsKLSNlbmRp
ZgotfQotCi12b2lkIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudDo6
dXBkYXRlRGlzcGxheSgpCi17Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5nPiBzZWxlY3RlZENsYXNzVmFsdWUoInNlbGVjdGVkIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAgaWYgKCFtZWRpYUNvbnRy
b2xsZXIoKS0+aGFzQ2xvc2VkQ2FwdGlvbnMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXM6OkNhcHRpb25EaXNwbGF5TW9kZSBkaXNwbGF5TW9kZSA9IGRvY3VtZW50KCkucGFn
ZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLmNhcHRpb25EaXNwbGF5TW9kZSgpOwot
Ci0gICAgYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0gICAg
aWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbWVkaWFFbGVt
ZW50LT50ZXh0VHJhY2tzKCkgfHwgIW1lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpLT5sZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVidWlsZFRyYWNrTGlzdE1lbnUoKTsKLQotICAg
IFJlZlB0cjxFbGVtZW50PiBvZmZNZW51SXRlbTsKLSAgICBib29sIHRyYWNrTWVudUl0ZW1TZWxl
Y3RlZCA9IGZhbHNlOwotCi0gICAgZm9yIChhdXRvJiB0cmFja0l0ZW0gOiBtX21lbnVJdGVtcykg
ewotICAgICAgICBSZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2s7Ci0gICAgICAgIE1lbnVJdGVt
VG9UcmFja01hcDo6aXRlcmF0b3IgaXRlciA9IG1fbWVudVRvVHJhY2tNYXAuZmluZCh0cmFja0l0
ZW0uZ2V0KCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX21lbnVUb1RyYWNrTWFwLmVuZCgpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHRleHRUcmFjayA9IGl0ZXItPnZhbHVlOwot
ICAgICAgICBpZiAoIXRleHRUcmFjaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IGlmICh0ZXh0VHJhY2sgPT0gJlRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpIHsKLSAg
ICAgICAgICAgIG9mZk1lbnVJdGVtID0gdHJhY2tJdGVtOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGV4dFRyYWNrID09ICZUZXh0VHJhY2s6OmNhcHRp
b25NZW51QXV0b21hdGljSXRlbSgpKSB7Ci0gICAgICAgICAgICBpZiAoZGlzcGxheU1vZGUgPT0g
Q2FwdGlvblVzZXJQcmVmZXJlbmNlczo6QXV0b21hdGljKQotICAgICAgICAgICAgICAgIHRyYWNr
SXRlbS0+Y2xhc3NMaXN0KCkuYWRkKHNlbGVjdGVkQ2xhc3NWYWx1ZSk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgdHJhY2tJdGVtLT5jbGFzc0xpc3QoKS5yZW1vdmUoc2VsZWN0
ZWRDbGFzc1ZhbHVlKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGRpc3BsYXlNb2RlICE9IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYyAm
JiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKLSAgICAg
ICAgICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgICAgICB0cmFja0l0
ZW0tPmNsYXNzTGlzdCgpLmFkZChzZWxlY3RlZENsYXNzVmFsdWUpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIHRyYWNrSXRlbS0+Y2xhc3NMaXN0KCkucmVtb3ZlKHNlbGVjdGVkQ2xhc3NW
YWx1ZSk7Ci0gICAgfQotCi0gICAgaWYgKG9mZk1lbnVJdGVtKSB7Ci0gICAgICAgIGlmIChkaXNw
bGF5TW9kZSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpGb3JjZWRPbmx5ICYmICF0cmFja01l
bnVJdGVtU2VsZWN0ZWQpCi0gICAgICAgICAgICBvZmZNZW51SXRlbS0+Y2xhc3NMaXN0KCkuYWRk
KHNlbGVjdGVkQ2xhc3NWYWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9mZk1lbnVJ
dGVtLT5jbGFzc0xpc3QoKS5yZW1vdmUoc2VsZWN0ZWRDbGFzc1ZhbHVlKTsKLSAgICB9Ci0jZW5k
aWYKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQ6
OnJlYnVpbGRUcmFja0xpc3RNZW51KCkKLXsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAg
Ly8gUmVtb3ZlIGFueSBleGlzdGluZyBjb250ZW50LgotICAgIHJlbW92ZUNoaWxkcmVuKCk7Ci0g
ICAgbV9tZW51SXRlbXMuY2xlYXIoKTsKLSAgICBtX21lbnVUb1RyYWNrTWFwLmNsZWFyKCk7Ci0K
LSAgICBpZiAoIW1lZGlhQ29udHJvbGxlcigpLT5oYXNDbG9zZWRDYXB0aW9ucygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0
aGlzKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byogdHJhY2tMaXN0ID0gbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7Ci0gICAgaWYgKCF0cmFj
a0xpc3QgfHwgIXRyYWNrTGlzdC0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvJiBjYXB0aW9u
UHJlZmVyZW5jZXMgPSBkb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5j
ZXMoKTsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IHRyYWNrc0Zvck1lbnUgPSBjYXB0
aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudSh0cmFja0xpc3QpOwotCi0gICAg
YXV0byBjYXB0aW9uc0hlYWRlciA9IEhUTUxIZWFkaW5nRWxlbWVudDo6Y3JlYXRlKGgzVGFnLCBk
b2N1bWVudCgpKTsKLSAgICBjYXB0aW9uc0hlYWRlci0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS5j
cmVhdGVUZXh0Tm9kZSh0ZXh0VHJhY2tTdWJ0aXRsZXNUZXh0KCkpKTsKLSAgICBhcHBlbmRDaGls
ZChjYXB0aW9uc0hlYWRlcik7Ci0gICAgYXV0byBjYXB0aW9uc01lbnVMaXN0ID0gSFRNTFVMaXN0
RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotCi0gICAgZm9yIChhdXRvJiB0ZXh0VHJhY2sg
OiB0cmFja3NGb3JNZW51KSB7Ci0gICAgICAgIGF1dG8gbWVudUl0ZW0gPSBIVE1MTElFbGVtZW50
OjpjcmVhdGUoZG9jdW1lbnQoKSk7Ci0gICAgICAgIG1lbnVJdGVtLT5hcHBlbmRDaGlsZChkb2N1
bWVudCgpLmNyZWF0ZVRleHROb2RlKGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5TmFtZUZvclRy
YWNrKHRleHRUcmFjay5nZXQoKSkpKTsKLSAgICAgICAgY2FwdGlvbnNNZW51TGlzdC0+YXBwZW5k
Q2hpbGQobWVudUl0ZW0pOwotICAgICAgICBtX21lbnVJdGVtcy5hcHBlbmQobWVudUl0ZW0ucHRy
KCkpOwotICAgICAgICBtX21lbnVUb1RyYWNrTWFwLmFkZChtZW51SXRlbS5wdHIoKSwgdGV4dFRy
YWNrKTsKLSAgICB9Ci0KLSAgICBhcHBlbmRDaGlsZChjYXB0aW9uc01lbnVMaXN0KTsKLSNlbmRp
ZgotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFRp
bWVsaW5lRWxlbWVudDo6TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50KERvY3VtZW50JiBkb2N1
bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVs
ZW1lbnQoZG9jdW1lbnQsIE1lZGlhU2xpZGVyKQotICAgICwgbV9jb250cm9scyhjb250cm9scykK
LXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
bGluZSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRp
YUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3Jl
YXRlKERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi17Ci0gICAg
QVNTRVJUKGNvbnRyb2xzKTsKLQotICAgIFJlZjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+
IHRpbWVsaW5lID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQoZG9j
dW1lbnQsIGNvbnRyb2xzKSk7Ci0gICAgdGltZWxpbmUtPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jv
b3QoKTsKLSAgICB0aW1lbGluZS0+c2V0VHlwZSgicmFuZ2UiKTsKLSAgICB0aW1lbGluZS0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwcmVjaXNpb25BdHRyLCBBdG9tU3RyaW5n
KCJmbG9hdCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgcmV0dXJu
IHRpbWVsaW5lOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgLy8gTGVmdCBidXR0b24gaXMgMC4g
UmVqZWN0cyBtb3VzZSBldmVudHMgbm90IGZyb20gbGVmdCBidXR0b24uCi0gICAgaWYgKGlzPE1v
dXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkuYnV0dG9uKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQp
Ci0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5iZWdpblNjcnViYmluZygpOwotCi0gICAgaWYg
KGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KQotICAgICAgICBtZWRp
YUNvbnRyb2xsZXIoKS0+ZW5kU2NydWJiaW5nKCk7Ci0KLSAgICBNZWRpYUNvbnRyb2xJbnB1dEVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAgaWYgKGV2ZW50LnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZW91dEV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vtb3ZlRXZlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRvdWJsZSB0aW1lID0gdmFsdWUo
KS50b0RvdWJsZSgpOwotICAgIGlmICgoZXZlbnQuaXNJbnB1dEV2ZW50KCkgfHwgZXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5pbnB1dEV2ZW50KSAmJiB0aW1lICE9IG1lZGlhQ29udHJvbGxl
cigpLT5jdXJyZW50VGltZSgpKQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0Q3VycmVu
dFRpbWUodGltZSk7Ci0KLSAgICBSZW5kZXJTbGlkZXImIHNsaWRlciA9IGRvd25jYXN0PFJlbmRl
clNsaWRlcj4oKnJlbmRlcmVyKCkpOwotICAgIGlmIChzbGlkZXIuaW5EcmFnTW9kZSgpKQotICAg
ICAgICBtX2NvbnRyb2xzLT51cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKTsKLX0KLQotI2lmICFQ
TEFURk9STShJT1NfRkFNSUxZKQotYm9vbCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6Ondp
bGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmIC8vICFQ
TEFURk9STShJT1NfRkFNSUxZKQotCi12b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6
c2V0UG9zaXRpb24oZG91YmxlIGN1cnJlbnRUaW1lKQotewotICAgIHNldFZhbHVlKFN0cmluZzo6
bnVtYmVyKGN1cnJlbnRUaW1lKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGltZWxpbmVFbGVt
ZW50OjpzZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgc2V0QXR0cmlidXRlKG1h
eEF0dHIsIEF0b21TdHJpbmc6Om51bWJlcihkdXJhdGlvbikpOwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVu
dDo6TWVkaWFDb250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50KERvY3VtZW50JiBkb2N1bWVu
dCkKLSAgICA6IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQoZG9jdW1lbnQpCi17Ci0g
ICAgc2V0UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNs
aWRlciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRp
YUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQ+IE1lZGlhQ29udHJvbFBhbmVsVm9sdW1l
U2xpZGVyRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVk
aWFDb250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50PiBzbGlkZXIgPSBhZG9wdFJlZigqbmV3
IE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudChkb2N1bWVudCkpOwotICAgIHNs
aWRlci0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIHNsaWRlci0+c2V0VHlwZSgi
cmFuZ2UiKTsKLSAgICBzbGlkZXItPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
cHJlY2lzaW9uQXR0ciwgQXRvbVN0cmluZygiZmxvYXQiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCkpOwotICAgIHNsaWRlci0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihtYXhBdHRyLCBBdG9tU3RyaW5nKCIxIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpKTsKLSAgICByZXR1cm4gc2xpZGVyOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50OjpN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYgZG9jdW1l
bnQpCi0gICAgOiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KGRvY3VtZW50KQotewot
ICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3Jl
ZW4tdm9sdW1lLXNsaWRlciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19
Ci0KLVJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudD4gTWVkaWFD
b250cm9sRnVsbHNjcmVlblZvbHVtZVNsaWRlckVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9j
dW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVt
ZW50PiBzbGlkZXIgPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVT
bGlkZXJFbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgc2xpZGVyLT5lbnN1cmVVc2VyQWdlbnRTaGFk
b3dSb290KCk7Ci0gICAgc2xpZGVyLT5zZXRUeXBlKCJyYW5nZSIpOwotICAgIHNsaWRlci0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwcmVjaXNpb25BdHRyLCBBdG9tU3RyaW5n
KCJmbG9hdCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgc2xpZGVy
LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1heEF0dHIsIEF0b21TdHJpbmco
IjEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBzbGlk
ZXI7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9s
RnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVt
ZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChk
b2N1bWVudCwgTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b24pCi17Ci0gICAgc2V0UHNldWRvKEF0
b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1idXR0b24iLCBBdG9t
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sRnVs
bHNjcmVlbkJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50
OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xG
dWxsc2NyZWVuQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNl
ckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAg
YnV0dG9uLT5oaWRlKCk7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZl
bnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkg
ewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICAgICAgLy8gT25seSB1c2UgdGhlIG5l
dyBmdWxsIHNjcmVlbiBBUEkgaWYgdGhlIGZ1bGxTY3JlZW5FbmFibGVkIHNldHRpbmcgaGFzCi0g
ICAgICAgIC8vIGJlZW4gZXhwbGljaXRseSBlbmFibGVkLiBPdGhlcndpc2UsIHVzZSB0aGUgb2xk
IGZ1bGxzY3JlZW4gQVBJLiBUaGlzCi0gICAgICAgIC8vIGFsbG93cyBhcHBzIHdoaWNoIGVtYmVk
IGEgV2ViVmlldyB0byByZXRhaW4gdGhlIGV4aXN0aW5nIGZ1bGwgc2NyZWVuCi0gICAgICAgIC8v
IHZpZGVvIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgcmVxdWlyaW5nIHRoZW0gdG8gaW1wbGVtZW50
IHRoZWlyIG93biBmdWxsCi0gICAgICAgIC8vIHNjcmVlbiBiZWhhdmlvci4KLSAgICAgICAgaWYg
KGRvY3VtZW50KCkuc2V0dGluZ3MoKS5mdWxsU2NyZWVuRW5hYmxlZCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoZG9jdW1lbnQoKS5mdWxsc2NyZWVuTWFuYWdlcigpLmlzRnVsbHNjcmVlbigpICYmIGRv
Y3VtZW50KCkuZnVsbHNjcmVlbk1hbmFnZXIoKS5jdXJyZW50RnVsbHNjcmVlbkVsZW1lbnQoKSA9
PSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcykpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5m
dWxsc2NyZWVuTWFuYWdlcigpLmNhbmNlbEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLmZ1bGxzY3JlZW5NYW5hZ2VyKCkucmVxdWVzdEZ1
bGxzY3JlZW5Gb3JFbGVtZW50KHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKS5nZXQoKSwgRnVsbHNj
cmVlbk1hbmFnZXI6OkV4ZW1wdElGcmFtZUFsbG93RnVsbHNjcmVlblJlcXVpcmVtZW50KTsKLSAg
ICAgICAgfSBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5lbnRl
ckZ1bGxzY3JlZW4oKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9
Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OnNldElzRnVsbHNjcmVl
bihib29sIGlzRnVsbHNjcmVlbikKLXsKLSAgICBzZXREaXNwbGF5VHlwZShpc0Z1bGxzY3JlZW4g
PyBNZWRpYUV4aXRGdWxsc2NyZWVuQnV0dG9uIDogTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b24p
OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9s
dW1lTWluQnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRy
b2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhVW5NdXRlQnV0dG9uKQotewotICAgIHNldFBz
ZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tdm9sdW1l
LW1pbi1idXR0b24iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1S
ZWY8TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRv
Y3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9u
RWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9s
dW1lTWluQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFn
ZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgcmV0
dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0
dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYg
KGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewotICAgICAgICBtZWRp
YUNvbnRyb2xsZXIoKS0+c2V0Vm9sdW1lKDApOwotICAgICAgICBldmVudC5zZXREZWZhdWx0SGFu
ZGxlZCgpOwotICAgIH0KLSAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sRnVsbHNj
cmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotOiBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhTXV0ZUJ1dHRvbikKLXsKLSAgICBzZXRQ
c2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2NyZWVuLXZvbHVt
ZS1tYXgtYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQot
UmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVtZW50PiBNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBk
b2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRv
bkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sRnVsbHNjcmVlblZv
bHVtZU1heEJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJB
Z2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIHJl
dHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewotICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgbWVk
aWFDb250cm9sbGVyKCktPnNldFZvbHVtZSgxKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhh
bmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFD
b250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lUmVtYWlu
aW5nRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9s
VGltZURpc3BsYXlFbGVtZW50KGRvY3VtZW50LCBNZWRpYVRpbWVSZW1haW5pbmdEaXNwbGF5KQot
ewotICAgIHNldFBzZXVkbyhnZXRNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1l
bnRTaGFkb3dQc2V1ZG9JZCgpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdE
aXNwbGF5RWxlbWVudD4gTWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50Ojpj
cmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1l
ZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudChkb2N1bWVudCkpOwotfQotCi1z
dGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZ2V0TWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3Bs
YXlFbGVtZW50U2hhZG93UHNldWRvSWQoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9tU3RyaW5nPiBpZCgiLXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNw
bGF5IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBpZDsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xDdXJy
ZW50VGltZURpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVt
ZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxl
bWVudChkb2N1bWVudCwgTWVkaWFDdXJyZW50VGltZURpc3BsYXkpCi17Ci0gICAgc2V0UHNldWRv
KGdldE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnRTaGFkb3dQc2V1ZG9JZCgp
KTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ+IE1lZGlh
Q29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1l
bnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sQ3VycmVudFRpbWVE
aXNwbGF5RWxlbWVudChkb2N1bWVudCkpOwotfQotCi1zdGF0aWMgY29uc3QgQXRvbVN0cmluZyYg
Z2V0TWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudFNoYWRvd1BzZXVkb0lkKCkK
LXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZz4gaWQoIi13ZWJraXQtbWVk
aWEtY29udHJvbHMtY3VycmVudC10aW1lLWRpc3BsYXkiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIGlkOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0KLU1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChkb2N1
bWVudCwgTWVkaWFUZXh0VHJhY2tEaXNwbGF5Q29udGFpbmVyKQotewotICAgIHNldFBzZXVkbyhB
dG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLXRleHQtdHJhY2stY29udGFpbmVyIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6
OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgYXV0byBlbGVtZW50ID0gYWRvcHRS
ZWYoKm5ldyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KGRvY3VtZW50KSk7
Ci0gICAgZWxlbWVudC0+aGlkZSgpOwotICAgIHJldHVybiBlbGVtZW50OwotfQotCi1SZW5kZXJQ
dHI8UmVuZGVyRWxlbWVudD4gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6
Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRy
ZWVQb3NpdGlvbiYpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxv
dz4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKLX0KLQotc3RhdGljIGJvb2wgY29tcGFyZUN1ZUlu
dGVydmFsRm9yRGlzcGxheShjb25zdCBDdWVJbnRlcnZhbCYgb25lLCBjb25zdCBDdWVJbnRlcnZh
bCYgdHdvKQotewotICAgIHJldHVybiBvbmUuZGF0YSgpLT5pc1Bvc2l0aW9uZWRBYm92ZSh0d28u
ZGF0YSgpKTsKLX07Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6dXBkYXRlRGlzcGxheSgpCi17Ci0gICAgaWYgKCFtZWRpYUNvbnRyb2xsZXIoKS0+Y2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlKCkpCi0gICAgICAgIHJlbW92ZUNoaWxkcmVuKCk7Ci0KLSAgICBhdXRv
IG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKLSAgICAvLyAxLiBJZiB0
aGUgbWVkaWEgZWxlbWVudCBpcyBhbiBhdWRpbyBlbGVtZW50LCBvciBpcyBhbm90aGVyIHBsYXli
YWNrCi0gICAgLy8gbWVjaGFuaXNtIHdpdGggbm8gcmVuZGVyaW5nIGFyZWEsIGFib3J0IHRoZXNl
IHN0ZXBzLiBUaGVyZSBpcyBub3RoaW5nIHRvCi0gICAgLy8gcmVuZGVyLgotICAgIGlmICghbWVk
aWFFbGVtZW50IHx8ICFtZWRpYUVsZW1lbnQtPmlzVmlkZW8oKSB8fCBtX3ZpZGVvRGlzcGxheVNp
emUuc2l6ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gMi4gTGV0IHZp
ZGVvIGJlIHRoZSBtZWRpYSBlbGVtZW50IG9yIG90aGVyIHBsYXliYWNrIG1lY2hhbmlzbS4KLSAg
ICBIVE1MVmlkZW9FbGVtZW50JiB2aWRlbyA9IGRvd25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KCpt
ZWRpYUVsZW1lbnQpOwotCi0gICAgLy8gMy4gTGV0IG91dHB1dCBiZSBhbiBlbXB0eSBsaXN0IG9m
IGFic29sdXRlbHkgcG9zaXRpb25lZCBDU1MgYmxvY2sgYm94ZXMuCi0KLSAgICAvLyA0LiBJZiB0
aGUgdXNlciBhZ2VudCBpcyBleHBvc2luZyBhIHVzZXIgaW50ZXJmYWNlIGZvciB2aWRlbywgYWRk
IHRvCi0gICAgLy8gb3V0cHV0IG9uZSBvciBtb3JlIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQgcG9z
aXRpb25lZCBDU1MgYmxvY2sgYm94ZXMgdGhhdAotICAgIC8vIGNvdmVyIHRoZSBzYW1lIHJlZ2lv
biBhcyB0aGUgdXNlciBpbnRlcmZhY2UuCi0KLSAgICAvLyA1LiBJZiB0aGUgbGFzdCB0aW1lIHRo
ZXNlIHJ1bGVzIHdlcmUgcnVuLCB0aGUgdXNlciBhZ2VudCB3YXMgbm90IGV4cG9zaW5nCi0gICAg
Ly8gYSB1c2VyIGludGVyZmFjZSBmb3IgdmlkZW8sIGJ1dCBub3cgaXQgaXMsIGxldCByZXNldCBi
ZSB0cnVlLiBPdGhlcndpc2UsCi0gICAgLy8gbGV0IHJlc2V0IGJlIGZhbHNlLgotCi0gICAgLy8g
VGhlcmUgaXMgbm90aGluZyB0byBiZSBkb25lIGV4cGxpY2l0bHkgZm9yIDR0aCBhbmQgNXRoIHN0
ZXBzLCBhcwotICAgIC8vIGV2ZXJ5dGhpbmcgaXMgaGFuZGxlZCB0aHJvdWdoIENTUy4gVGhlIGNh
cHRpb24gYm94IGlzIG9uIHRvcCBvZiB0aGUKLSAgICAvLyBjb250cm9scyBib3gsIGluIGEgY29u
dGFpbmVyIHNldCB3aXRoIHRoZSAtd2Via2l0LWJveCBkaXNwbGF5IHByb3BlcnR5LgotCi0gICAg
Ly8gNi4gTGV0IHRyYWNrcyBiZSB0aGUgc3Vic2V0IG9mIHZpZGVvJ3MgbGlzdCBvZiB0ZXh0IHRy
YWNrcyB0aGF0IGhhdmUgYXMKLSAgICAvLyB0aGVpciBydWxlcyBmb3IgdXBkYXRpbmcgdGhlIHRl
eHQgdHJhY2sgcmVuZGVyaW5nIHRoZXNlIHJ1bGVzIGZvcgotICAgIC8vIHVwZGF0aW5nIHRoZSBk
aXNwbGF5IG9mIFdlYlZUVCB0ZXh0IHRyYWNrcywgYW5kIHdob3NlIHRleHQgdHJhY2sgbW9kZSBp
cwotICAgIC8vIHNob3dpbmcgb3Igc2hvd2luZyBieSBkZWZhdWx0LgotICAgIC8vIDcuIExldCBj
dWVzIGJlIGFuIGVtcHR5IGxpc3Qgb2YgdGV4dCB0cmFjayBjdWVzLgotICAgIC8vIDguIEZvciBl
YWNoIHRyYWNrIHRyYWNrIGluIHRyYWNrcywgYXBwZW5kIHRvIGN1ZXMgYWxsIHRoZSBjdWVzIGZy
b20KLSAgICAvLyB0cmFjaydzIGxpc3Qgb2YgY3VlcyB0aGF0IGhhdmUgdGhlaXIgdGV4dCB0cmFj
ayBjdWUgYWN0aXZlIGZsYWcgc2V0LgotICAgIEN1ZUxpc3QgYWN0aXZlQ3VlcyA9IHZpZGVvLmN1
cnJlbnRseUFjdGl2ZUN1ZXMoKTsKLQotICAgIC8vIDkuIElmIHJlc2V0IGlzIGZhbHNlLCB0aGVu
LCBmb3IgZWFjaCB0ZXh0IHRyYWNrIGN1ZSBjdWUgaW4gY3VlczogaWYgY3VlJ3MKLSAgICAvLyB0
ZXh0IHRyYWNrIGN1ZSBkaXNwbGF5IHN0YXRlIGhhcyBhIHNldCBvZiBDU1MgYm94ZXMsIHRoZW4g
YWRkIHRob3NlIGJveGVzCi0gICAgLy8gdG8gb3V0cHV0LCBhbmQgcmVtb3ZlIGN1ZSBmcm9tIGN1
ZXMuCi0KLSAgICAvLyBUaGVyZSBpcyBub3RoaW5nIGV4cGxpY2l0bHkgdG8gYmUgZG9uZSBoZXJl
LCBhcyBhbGwgdGhlIGNhY2hpbmcgb2NjdXJzCi0gICAgLy8gd2l0aGluIHRoZSBUZXh0VHJhY2tD
dWUgaW5zdGFuY2UgaXRzZWxmLiBJZiBwYXJhbWV0ZXJzIG9mIHRoZSBjdWUgY2hhbmdlLAotICAg
IC8vIHRoZSBkaXNwbGF5IHRyZWUgaXMgY2xlYXJlZC4KLQotICAgIC8vIElmIHRoZSBudW1iZXIg
b2YgQ1NTIGJveGVzIGluIHRoZSBvdXRwdXQgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgY3Vl
cwotICAgIC8vIHdlIHdpc2ggdG8gcmVuZGVyIChlLmcuLCB3ZSBhcmUgYWRkaW5nIGFub3RoZXIg
Y3VlIGluIGEgc2V0IG9mIHJvbGwtdXAKLSAgICAvLyBjdWVzKSwgcmVtb3ZlIGFsbCB0aGUgZXhp
c3RpbmcgQ1NTIGJveGVzIHJlcHJlc2VudGluZyB0aGUgY3VlcyBhbmQgcmUtYWRkCi0gICAgLy8g
dGhlbSBzbyB0aGF0IHRoZSBuZXcgY3VlIGlzIGF0IHRoZSBib3R0b20uCi0gICAgLy8gRklYTUU6
IENhbGxpbmcgY291bnRDaGlsZE5vZGVzKCkgaGVyZSBpcyBpbmVmZmljaWVudC4gV2UgZG9uJ3Qg
bmVlZCB0bwotICAgIC8vIHRyYXZlcnNlIGFsbCBjaGlsZHJlbiBqdXN0IHRvIGNoZWNrIGlmIHRo
ZXJlIGFyZSBsZXNzIGNoaWxkcmVuIHRoYW4gY3Vlcy4KLSAgICBpZiAoY291bnRDaGlsZE5vZGVz
KCkgPCBhY3RpdmVDdWVzLnNpemUoKSkKLSAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oKTsKLQotICAg
IGFjdGl2ZUN1ZXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10gKEN1ZUludGVydmFsJiBjdWVJbnRlcnZh
bCkgewotICAgICAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBjdWVJbnRlcnZhbC5kYXRh
KCk7Ci0gICAgICAgIHJldHVybiAhY3VlLT50cmFjaygpCi0gICAgICAgICAgICB8fCAhY3VlLT50
cmFjaygpLT5pc1JlbmRlcmVkKCkKLSAgICAgICAgICAgIHx8IGN1ZS0+dHJhY2soKS0+bW9kZSgp
ID09IFRleHRUcmFjazo6TW9kZTo6RGlzYWJsZWQKLSAgICAgICAgICAgIHx8ICFjdWUtPmlzQWN0
aXZlKCkKLSAgICAgICAgICAgIHx8ICFjdWUtPmlzUmVuZGVyYWJsZSgpOwotICAgIH0pOwotCi0g
ICAgLy8gU29ydCB0aGUgYWN0aXZlIGN1ZXMgZm9yIHRoZSBhcHByb3ByaWF0ZSBkaXNwbGF5IG9y
ZGVyLiBGb3IgZXhhbXBsZSwgZm9yIHJvbGwtdXAKLSAgICAvLyBvciBwYWludC1vbiBjYXB0aW9u
cywgd2UgbmVlZCB0byBhZGQgdGhlIGN1ZXMgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVy
LAotICAgIC8vIHNvIHRoYXQgdGhlIG5ld2VzdCBjYXB0aW9ucyBhcHBlYXIgYXQgdGhlIGJvdHRv
bS4KLSAgICBzdGQ6OnNvcnQoYWN0aXZlQ3Vlcy5iZWdpbigpLCBhY3RpdmVDdWVzLmVuZCgpLCAm
Y29tcGFyZUN1ZUludGVydmFsRm9yRGlzcGxheSk7Ci0KLSAgICBpZiAobWVkaWFDb250cm9sbGVy
KCktPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpKSB7Ci0gICAgICAgIC8vIDEwLiBGb3IgZWFjaCB0
ZXh0IHRyYWNrIGN1ZSBpbiBjdWVzIHRoYXQgaGFzIG5vdCB5ZXQgaGFkCi0gICAgICAgIC8vIGNv
cnJlc3BvbmRpbmcgQ1NTIGJveGVzIGFkZGVkIHRvIG91dHB1dCwgaW4gdGV4dCB0cmFjayBjdWUg
b3JkZXIsIHJ1biB0aGUKLSAgICAgICAgLy8gZm9sbG93aW5nIHN1YnN0ZXBzOgotICAgICAgICBm
b3IgKGF1dG8mIGludGVydmFsIDogYWN0aXZlQ3VlcykgewotICAgICAgICAgICAgYXV0byBjdWUg
PSBpbnRlcnZhbC5kYXRhKCk7Ci0gICAgICAgICAgICBjdWUtPnNldEZvbnRTaXplKG1fZm9udFNp
emUsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCksIG1fZm9udFNpemVJc0ltcG9ydGFudCk7Ci0g
ICAgICAgICAgICBpZiAoaXM8VlRUQ3VlPigqY3VlKSkKLSAgICAgICAgICAgICAgICBwcm9jZXNz
QWN0aXZlVlRUQ3VlKGRvd25jYXN0PFZUVEN1ZT4oKmN1ZSkpOwotICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBkaXNwbGF5Qm94ID0gY3VlLT5nZXREaXNwbGF5VHJlZSht
X3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplKTsKLSAgICAgICAgICAgICAgICBp
ZiAoZGlzcGxheUJveC0+aGFzQ2hpbGROb2RlcygpICYmICFjb250YWlucyhkaXNwbGF5Qm94Lmdl
dCgpKSkKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ2hpbGQoKmRpc3BsYXlCb3gpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gMTEuIFJldHVybiBvdXRwdXQu
Ci0gICAgaWYgKGhhc0NoaWxkTm9kZXMoKSkKLSAgICAgICAgc2hvdygpOwotICAgIGVsc2UKLSAg
ICAgICAgaGlkZSgpOwotCi0gICAgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRl
ZCgpOwotICAgIHVwZGF0ZVRleHRUcmFja1N0eWxlKCk7Ci0gICAgbV9uZWVkc0dlbmVyYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24gPSB0cnVlOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJ
Zk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX25lZWRzR2VuZXJhdGVUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZWVkc0dlbmVyYXRlVGV4dFRyYWNrUmVw
cmVzZW50YXRpb24gPSBmYWxzZTsKLQotICAgIC8vIFdlIHNob3VsZCBjYWxsIG1fdGV4dFRyYWNr
UmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpIHRvIHBhaW50IHRoZSBzdWJ0cmVlIG9mCi0gICAgLy8g
dGhlIFJlbmRlclRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQgYWZ0ZXIgdGhlIGxheW91dCBpcyBj
bGVhbi4KLSAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikKLSAgICAgICAgbV90ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbi0+dXBkYXRlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6cHJvY2Vzc0FjdGl2ZVZUVEN1ZShWVFRDdWUmIGN1ZSkK
LXsKLSAgICBERUJVR19MT0coTE9HSURFTlRJRklFUiwgImFkZGluZyBhbmQgcG9zaXRpb25pbmcg
Y3VlOiBcIiIsIGN1ZS50ZXh0KCksICJcIiwgc3RhcnQ9IiwgY3VlLnN0YXJ0VGltZSgpLCAiLCBl
bmQ9IiwgY3VlLmVuZFRpbWUoKSwgIiwgbGluZT0iLCBjdWUubGluZSgpKTsKLSAgICBSZWY8VGV4
dFRyYWNrQ3VlQm94PiBkaXNwbGF5Qm94ID0gKmN1ZS5nZXREaXNwbGF5VHJlZShtX3ZpZGVvRGlz
cGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplKTsKLQotICAgIGlmIChhdXRvIHJlZ2lvbiA9IGN1
ZS50cmFjaygpLT5yZWdpb25zKCktPmdldFJlZ2lvbkJ5SWQoY3VlLnJlZ2lvbklkKCkpKSB7Ci0g
ICAgICAgIC8vIExldCByZWdpb24gYmUgdGhlIFdlYlZUVCByZWdpb24gd2hvc2UgcmVnaW9uIGlk
ZW50aWZpZXIKLSAgICAgICAgLy8gbWF0Y2hlcyB0aGUgdGV4dCB0cmFjayBjdWUgcmVnaW9uIGlk
ZW50aWZpZXIgb2YgY3VlLgotICAgICAgICBSZWY8SFRNTERpdkVsZW1lbnQ+IHJlZ2lvbk5vZGUg
PSByZWdpb24tPmdldERpc3BsYXlUcmVlKCk7Ci0KLSAgICAgICAgaWYgKCFjb250YWlucyhyZWdp
b25Ob2RlLnB0cigpKSkKLSAgICAgICAgICAgIGFwcGVuZENoaWxkKHJlZ2lvbi0+Z2V0RGlzcGxh
eVRyZWUoKSk7Ci0KLSAgICAgICAgcmVnaW9uLT5hcHBlbmRUZXh0VHJhY2tDdWVCb3goV1RGTW92
ZShkaXNwbGF5Qm94KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgY3VlIGhhcyBhbiBl
bXB0eSB0ZXh0IHRyYWNrIGN1ZSByZWdpb24gaWRlbnRpZmllciBvciB0aGVyZSBpcyBubwotICAg
ICAgICAvLyBXZWJWVFQgcmVnaW9uIHdob3NlIHJlZ2lvbiBpZGVudGlmaWVyIGlzIGlkZW50aWNh
bCB0byBjdWUncyB0ZXh0Ci0gICAgICAgIC8vIHRyYWNrIGN1ZSByZWdpb24gaWRlbnRpZmllciwg
cnVuIHRoZSBmb2xsb3dpbmcgc3Vic3RlcHM6Ci0gICAgICAgIGlmIChkaXNwbGF5Qm94LT5oYXND
aGlsZE5vZGVzKCkgJiYgIWNvbnRhaW5zKGRpc3BsYXlCb3gucHRyKCkpKSB7Ci0gICAgICAgICAg
ICAvLyBOb3RlOiB0aGUgZGlzcGxheSB0cmVlIG9mIGEgY3VlIGlzIHJlbW92ZWQgd2hlbiB0aGUg
YWN0aXZlIGZsYWcgb2YgdGhlIGN1ZSBpcyB1bnNldC4KLSAgICAgICAgICAgIGFwcGVuZENoaWxk
KGRpc3BsYXlCb3gpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZUFjdGl2ZUN1ZXNGb250U2l6ZSgpCi17Ci0g
ICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBt
ZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0gICAgaWYgKCFtZWRpYUVs
ZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHNtYWxsZXN0RGltZW5zaW9uID0g
c3RkOjptaW4obV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWlnaHQoKSwgbV92aWRlb0Rpc3Bs
YXlTaXplLnNpemUoKS53aWR0aCgpKTsKLSAgICBmbG9hdCBmb250U2NhbGUgPSBkb2N1bWVudCgp
LnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5jYXB0aW9uRm9udFNpemVTY2Fs
ZUFuZEltcG9ydGFuY2UobV9mb250U2l6ZUlzSW1wb3J0YW50KTsKLSAgICBtX2ZvbnRTaXplID0g
bHJvdW5kZihzbWFsbGVzdERpbWVuc2lvbiAqIGZvbnRTY2FsZSk7Ci0KLSAgICBmb3IgKGF1dG8m
IGFjdGl2ZUN1ZSA6IG1lZGlhRWxlbWVudC0+Y3VycmVudGx5QWN0aXZlQ3VlcygpKSB7Ci0gICAg
ICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9IGFjdGl2ZUN1ZS5kYXRhKCk7Ci0gICAgICAg
IGlmIChjdWUtPmlzUmVuZGVyYWJsZSgpKQotICAgICAgICAgICAgY3VlLT5zZXRGb250U2l6ZSht
X2ZvbnRTaXplLCBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplSXNJbXBvcnRh
bnQpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50Ojp1cGRhdGVUZXh0U3Ryb2tlU3R5bGUoKQotewotICAgIGlmICghZG9jdW1lbnQoKS5wYWdl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVk
aWFFbGVtZW50KHRoaXMpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgU3RyaW5nIGxhbmd1YWdlOwotCi0gICAgLy8gRklYTUU6IFNpbmNlIGl0IGlz
IHBvc3NpYmxlIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSB0ZXh0IHRyYWNrIGVuYWJsZWQsIHRoZSBm
b2xsb3dpbmcgY29kZSBtYXkgbm90IGZpbmQgdGhlIGNvcnJlY3QgbGFuZ3VhZ2UuCi0gICAgLy8g
VGhlIGRlZmF1bHQgVUkgb25seSBhbGxvd3MgYSB1c2VyIHRvIGVuYWJsZSBvbmUgdHJhY2sgYXQg
YSB0aW1lLCBzbyBpdCBzaG91bGQgYmUgT0sgZm9yIG5vdywgYnV0IHdlIHNob3VsZCBjb25zaWRl
ciBkb2luZwotICAgIC8vIHRoaXMgZGlmZmVyZW50bHksIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTg3NT4uCi0gICAgaWYgKGF1dG8qIHRyYWNrcyA9IG1l
ZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0cmFja3MtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8gdHJhY2sgPSB0
cmFja3MtPml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAodHJhY2sgJiYgdHJhY2stPm1vZGUoKSA9
PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKLSAgICAgICAgICAgICAgICBsYW5ndWFnZSA9
IHRyYWNrLT52YWxpZEJDUDQ3TGFuZ3VhZ2UoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZsb2F0IHN0cm9rZVdpZHRoOwot
ICAgIGJvb2wgaW1wb3J0YW50OwotCi0gICAgLy8gRklYTUU6IGZpbmQgYSB3YXkgdG8gc2V0IHRo
aXMgcHJvcGVydHkgaW4gdGhlIHN0eWxlc2hlZXQgbGlrZSB0aGUgb3RoZXIgdXNlciBzdHlsZSBw
cmVmZXJlbmNlcywgc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY5ODc0Pi4KLSAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZl
cmVuY2VzKCkuY2FwdGlvblN0cm9rZVdpZHRoRm9yRm9udChtX2ZvbnRTaXplLCBsYW5ndWFnZSwg
c3Ryb2tlV2lkdGgsIGltcG9ydGFudCkpCi0gICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlTdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgsIENTU1VuaXRUeXBlOjpDU1NfUFgs
IGltcG9ydGFudCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxl
bWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpCi17Ci0gICAgYXV0
byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0gICAgaWYgKCFtZWRp
YUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVxdWlyZXNUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbiA9IG1lZGlhRWxlbWVudC0+cmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbigpOwotICAgIGlmICghaGFzQ2hpbGROb2RlcygpIHx8ICFyZXF1aXJlc1RleHRUcmFja1Jl
cHJlc2VudGF0aW9uKSB7Ci0gICAgICAgIGlmIChtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uKSB7
Ci0gICAgICAgICAgICBpZiAoIXJlcXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCi0gICAg
ICAgICAgICAgICAgY2xlYXJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNldEhpZGRl
bih0cnVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFt
X3RleHRUcmFja1JlcHJlc2VudGF0aW9uKSB7Ci0gICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJ
RklFUik7Ci0KLSAgICAgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IFRleHRUcmFja1Jl
cHJlc2VudGF0aW9uOjpjcmVhdGUoKnRoaXMpOwotICAgICAgICBpZiAoZG9jdW1lbnQoKS5wYWdl
KCkpCi0gICAgICAgICAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT5zZXRDb250ZW50U2Nh
bGUoZG9jdW1lbnQoKS5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICBtZWRp
YUVsZW1lbnQtPnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKG1fdGV4dFRyYWNrUmVwcmVzZW50
YXRpb24uZ2V0KCkpOwotICAgIH0KLQotICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNl
dEhpZGRlbihmYWxzZSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6Y2xlYXJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpCi17Ci0gICAgaWYgKCFtX3Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBTFdBWVNfTE9H
KExPR0lERU5USUZJRVIpOwotCi0gICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IG51bGxw
dHI7Ci0gICAgaWYgKGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHRoaXMp
KQotICAgICAgICBtZWRpYUVsZW1lbnQtPnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKG51bGxw
dHIpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVw
ZGF0ZVRleHRUcmFja1N0eWxlKCkKLXsKLSAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlv
bikgewotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24s
IENTU1ZhbHVlQWJzb2x1dGUpOwotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5V2lkdGgsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkud2lkdGgoKSwgQ1NTVW5pdFR5
cGU6OkNTU19QWCk7Ci0gICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlI
ZWlnaHQsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkuaGVpZ2h0KCksIENTU1VuaXRUeXBlOjpD
U1NfUFgpOwotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwg
MCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlUb3AsIDAsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0
aW9uKTsKLSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgpOwot
ICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQpOwotICAgIHJl
bW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0KTsKLSAgICByZW1vdmVJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjplbnRlcmVkRnVsbHNjcmVlbigpCi17Ci0gICAgdXBk
YXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOwotICAgIHVwZGF0ZVNpemVzKEZv
cmNlVXBkYXRlOjpZZXMpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OmV4aXRlZEZ1bGxzY3JlZW4oKQotewotICAgIGNsZWFyVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24oKTsKLSAgICB1cGRhdGVTaXplcyhGb3JjZVVwZGF0ZTo6WWVzKTsKLX0KLQotYm9v
bCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVWaWRlb0Rpc3Bs
YXlTaXplKCkKLXsKLSAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlz
KTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
SW50UmVjdCB2aWRlb0JveDsKLSAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgewot
ICAgICAgICB2aWRlb0JveCA9IG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPmJvdW5kcygpOwot
ICAgICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IGRvY3VtZW50KCkucGFnZSgpLT5kZXZp
Y2VTY2FsZUZhY3RvcigpOwotICAgICAgICB2aWRlb0JveC5zZXRXaWR0aCh2aWRlb0JveC53aWR0
aCgpICogZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgICAgICB2aWRlb0JveC5zZXRIZWlnaHQodmlk
ZW9Cb3guaGVpZ2h0KCkgKiBkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKCFpczxSZW5kZXJWaWRlbz4obWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmlkZW9Cb3ggPSBkb3duY2FzdDxSZW5kZXJW
aWRlbz4oKm1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSkudmlkZW9Cb3goKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV92aWRlb0Rpc3BsYXlTaXplID09IHZpZGVvQm94KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBtX3ZpZGVvRGlzcGxheVNpemUgPSB2aWRlb0JveDsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRh
dGVTaXplcyhGb3JjZVVwZGF0ZSBmb3JjZSkKLXsKLSAgICBpZiAoIXVwZGF0ZVZpZGVvRGlzcGxh
eVNpemUoKSAmJiBmb3JjZSAhPSBGb3JjZVVwZGF0ZTo6WWVzKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
IG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKLSAgICBpZiAoIW1lZGlh
RWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFFbGVtZW50LT5zeW5jVGV4dFRy
YWNrQm91bmRzKCk7Ci0KLSAgICB1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKTsKLSAgICB1cGRh
dGVUZXh0U3Ryb2tlU3R5bGUoKTsKLSAgICBmb3IgKGF1dG8mIGFjdGl2ZUN1ZSA6IG1lZGlhRWxl
bWVudC0+Y3VycmVudGx5QWN0aXZlQ3VlcygpKQotICAgICAgICBhY3RpdmVDdWUuZGF0YSgpLT5y
ZWNhbGN1bGF0ZVN0eWxlcygpOwotCi0gICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNd
ICgpIHsKLSAgICAgICAgdXBkYXRlRGlzcGxheSgpOwotICAgIH0pOwotfQotCi1SZWZQdHI8SW1h
Z2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFj
a1JlcHJlc2VudGF0aW9uSW1hZ2UoKQotewotICAgIGlmICghaGFzQ2hpbGROb2RlcygpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBkb2N1bWVu
dCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwotCi0gICAgYXV0byogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgaWYgKCFyZW5kZXJlci0+aGFzTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1v
ZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7Ci0KLSAgICBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvciA9IDE7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAg
ICAgZGV2aWNlU2NhbGVGYWN0b3IgPSBwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotCi0gICAg
SW50UmVjdCBwYWludGluZ1JlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5zaXplKCkp
OwotCi0gICAgLy8gRklYTUUgKDE0OTQyMik6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5j
b25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3RvcikpOwotICAgIGlmICgh
YnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcGFpbnRGbGFncyA9
IFJlbmRlckxheWVyOjpwYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ0FsbFBoYXNlc0ZsYWdz
KCk7Ci0gICAgcGFpbnRGbGFncy5hZGQoUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJUZW1wb3JhcnlD
bGlwUmVjdHMpOwotICAgIGxheWVyLT5wYWludChidWZmZXItPmNvbnRleHQoKSwgcGFpbnRpbmdS
ZWN0LCBMYXlvdXRTaXplKCksIHsgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5
ZXJzLCBQYWludEJlaGF2aW9yOjpTbmFwc2hvdHRpbmcgfSwgbnVsbHB0ciwgcGFpbnRGbGFncyk7
Ci0KLSAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShidWZmZXIp
KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp0ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQoY29uc3QgSW50UmVjdCYpCi17Ci0gICAg
dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOwotICAgIHVwZGF0ZVNpemVz
KCk7Ci19Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLWNvbnN0IExvZ2dlciYgTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nZ2VyKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fbG9nZ2VyKQotICAgICAgICBtX2xvZ2dlciA9ICZkb2N1bWVudCgpLmxvZ2dlcigpOwot
Ci0gICAgcmV0dXJuICptX2xvZ2dlcjsKLX0KLQotY29uc3Qgdm9pZCogTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nSWRlbnRpZmllcigpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2xvZ0lkZW50aWZpZXIpIHsKLSAgICAgICAgaWYgKGF1dG8gbWVkaWFFbGVtZW50ID0gcGFy
ZW50TWVkaWFFbGVtZW50KHRoaXMpKQotICAgICAgICAgICAgbV9sb2dJZGVudGlmaWVyID0gbWVk
aWFFbGVtZW50LT5sb2dJZGVudGlmaWVyKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fbG9nSWRl
bnRpZmllcjsKLX0KLQotV1RGTG9nQ2hhbm5lbCYgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudDo6bG9nQ2hhbm5lbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIExvZ01lZGlhOwot
fQotI2VuZGlmIC8vICFSRUxFQVNFX0xPR19ESVNBQkxFRAotCi0jZW5kaWYgLy8gRU5BQkxFKFZJ
REVPX1RSQUNLKQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3NmIxNGQ2ZjUyYmU2YTBlNzM4MTkxNzI5M2Q1Mzc3OWJjZjkxZDky
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw1MzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRl
ICJHZW5lcmljVGFza1F1ZXVlLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudFR5cGVz
LmgiCi0jaW5jbHVkZSAiVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uaCIKLSNpbmNsdWRlIDx3dGYv
TG9nZ2VySGVscGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQgZmluYWwg
OiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9D
QVRFRChNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
TWVkaWFDb250cm9sUGFuZWxFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQg
c2V0Q2FuQmVEcmFnZ2VkKGJvb2wpOwotICAgIHZvaWQgc2V0SXNEaXNwbGF5ZWQoYm9vbCk7Ci0K
LSAgICB2b2lkIHJlc2V0UG9zaXRpb24oKTsKLSAgICB2b2lkIG1ha2VPcGFxdWUoKTsKLSAgICB2
b2lkIG1ha2VUcmFuc3BhcmVudCgpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
Ym9vbCB3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNv
bnRyb2xQYW5lbEVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzdGFydERyYWcoY29uc3QgTGF5b3V0
UG9pbnQmIGV2ZW50TG9jYXRpb24pOwotICAgIHZvaWQgY29udGludWVEcmFnKGNvbnN0IExheW91
dFBvaW50JiBldmVudExvY2F0aW9uKTsKLSAgICB2b2lkIGVuZERyYWcoKTsKLQotICAgIHZvaWQg
c3RhcnRUaW1lcigpOwotICAgIHZvaWQgc3RvcFRpbWVyKCk7Ci0gICAgdm9pZCB0cmFuc2l0aW9u
VGltZXJGaXJlZCgpOwotCi0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBMYXlvdXRQb2ludCYp
OwotCi0gICAgYm9vbCBtX2NhbkJlRHJhZ2dlZDsKLSAgICBib29sIG1faXNCZWluZ0RyYWdnZWQ7
Ci0gICAgYm9vbCBtX2lzRGlzcGxheWVkOwotICAgIGJvb2wgbV9vcGFxdWU7Ci0gICAgTGF5b3V0
UG9pbnQgbV9sYXN0RHJhZ0V2ZW50TG9jYXRpb247Ci0gICAgTGF5b3V0UG9pbnQgbV9jdW11bGF0
aXZlRHJhZ09mZnNldDsKLQotICAgIFRpbWVyIG1fdHJhbnNpdGlvblRpbWVyOwotfTsKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xQYW5lbEVu
Y2xvc3VyZUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0g
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVsZW1l
bnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVF
bGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRp
YUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVsZW1lbnQoRG9jdW1lbnQmKTsKLX07Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sT3ZlcmxheUVuY2xv
c3VyZUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xPdmVybGF5RW5jbG9zdXJlRWxlbWVu
dCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xPdmVybGF5RW5jbG9zdXJl
RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVk
aWFDb250cm9sT3ZlcmxheUVuY2xvc3VyZUVsZW1lbnQoRG9jdW1lbnQmKTsKLX07Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sVGltZWxpbmVD
b250YWluZXJFbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgewot
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJF
bGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFRpbWVsaW5lQ29u
dGFpbmVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIHNldFRpbWVEaXNw
bGF5c0hpZGRlbihib29sKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIFJlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVu
ZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1l
bnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KTsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5l
ckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci0KLSAgICBSZW5kZXJQdHI8UmVuZGVy
RWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRl
clRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudCBmaW5hbCA6
IHB1YmxpYyBNZWRpYUNvbnRyb2xEaXZFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEKE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQm
KTsKLQotICAgIHZvaWQgdXBkYXRlKCk7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFD
b250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIGVudW0gU3RhdGVC
ZWluZ0Rpc3BsYXllZCB7IE5vdGhpbmcsIExvYWRpbmcsIExpdmVCcm9hZGNhc3QgfTsKLSAgICBT
dGF0ZUJlaW5nRGlzcGxheWVkIG1fc3RhdGVCZWluZ0Rpc3BsYXllZDsKLX07Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0
dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudCB7
Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25F
bGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1
dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYsIE1lZGlhQ29udHJvbHMqKTsKLQotI2lmICFQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50
cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmLCBNZWRp
YUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVy
cmlkZTsKLQotICAgIE1lZGlhQ29udHJvbHMqIG1fY29udHJvbHM7Ci19OwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11
dGVCdXR0b25FbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVt
ZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFZvbHVtZVNsaWRl
ck11dGVCdXR0b25FbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxl
bWVudChEb2N1bWVudCYpOwotfTsKLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLWNsYXNzIE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50IGZpbmFsIDogcHVibGljIE1l
ZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRp
YUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRp
YUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRz
KCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHVwZGF0ZURp
c3BsYXlUeXBlKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250
cm9sUGxheUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQgZmlu
YWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKE1lZGlhQ29udHJvbE92ZXJsYXlQbGF5QnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQ+IGNy
ZWF0ZShEb2N1bWVudCYpOwotCi0gICAgdm9pZCB1cGRhdGVEaXNwbGF5VHlwZSgpIG92ZXJyaWRl
OwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbE92ZXJsYXlQbGF5QnV0dG9u
RWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNs
YXNzIE1lZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBN
ZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChNZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8TWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50PiBjcmVhdGUoRG9j
dW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xTZWVrRm9yd2Fy
ZEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIGJvb2wgaXNGb3J3YXJkQnV0dG9uKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQg
ZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQgewotICAgIFdURl9N
QUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50KTsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9s
U2Vla0JhY2tCdXR0b25FbGVtZW50KERvY3VtZW50Jik7Ci0KLSAgICBib29sIGlzRm9yd2FyZEJ1
dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci19OwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQpOwotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudD4gY3Jl
YXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdp
bGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQot
I2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sUmV3aW5kQnV0dG9u
RWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNs
YXNzIE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50IGZpbmFsIDogcHVi
bGljIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29s
IHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sUmV0dXJuVG9S
ZWFsdGltZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9u
RWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYsIE1lZGlhQ29udHJvbHMq
KTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01v
dXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotICAg
IHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBleHBs
aWNpdCBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQoRG9jdW1l
bnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQmKSBvdmVycmlkZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShXSU4pIHx8
IFBMQVRGT1JNKEdUSykKLSAgICBNZWRpYUNvbnRyb2xzKiBtX2NvbnRyb2xzOwotI2VuZGlmCi19
OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJv
bENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRy
b2xEaXZFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbENs
b3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxN
ZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVu
dCYpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9uZFRv
TW91c2VDbGlja0V2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi1w
cml2YXRlOgotICAgIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudChE
b2N1bWVudCYpOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFz
cyBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQgZmluYWwgOiBwdWJs
aWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChN
ZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQpOwotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50PiBj
cmVhdGUoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHVwZGF0ZURpc3BsYXkoKTsKLQot
cHJpdmF0ZToKLSAgICBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQo
RG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIHJlYnVpbGRUcmFja0xpc3RN
ZW51KCk7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsK
LQotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4gVHJhY2tNZW51SXRlbXM7Ci0g
ICAgVHJhY2tNZW51SXRlbXMgbV9tZW51SXRlbXM7Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQot
ICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxUZXh0VHJhY2s+PiBN
ZW51SXRlbVRvVHJhY2tNYXA7Ci0gICAgTWVudUl0ZW1Ub1RyYWNrTWFwIG1fbWVudVRvVHJhY2tN
YXA7Ci0jZW5kaWYKLSAgICBNZWRpYUNvbnRyb2xzKiBtX2NvbnRyb2xzOwotfTsKLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xUaW1lbGluZUVs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudCk7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IGNyZWF0ZShEb2N1
bWVudCYsIE1lZGlhQ29udHJvbHMqKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZTsKLSNlbmRpZgot
Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihkb3VibGUpOwotICAgIHZvaWQgc2V0RHVyYXRpb24oZG91
YmxlKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1l
bnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIE1lZGlhQ29udHJvbHMqIG1fY29udHJvbHM7
Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbElu
cHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuQnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRz
KCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHNldElzRnVs
bHNjcmVlbihib29sKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuQnV0dG9uRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudCBmaW5h
bCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50IHsKLSAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudCk7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1l
bnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29u
dHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYpOwotfTsKLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVt
ZVNsaWRlckVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxl
bWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xGdWxsc2NyZWVu
Vm9sdW1lU2xpZGVyRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLXBy
aXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZVNsaWRlckVs
ZW1lbnQoRG9jdW1lbnQmKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotY2xhc3MgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1dHRvbkVsZW1lbnQgZmlu
YWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50KTsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5C
dXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9uRWxlbWVudChEb2N1bWVudCYpOwotICAgIHZv
aWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9s
dW1lTWF4QnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sRnVsbHNjcmVlblZv
bHVtZU1heEJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250
cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwot
Ci0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VD
bGlja0V2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi1wcml2YXRl
OgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVt
ZW50KERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBv
dmVycmlkZTsKLX07Ci0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFz
cyBNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQgZmluYWwgOiBwdWJsaWMg
TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEKE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudCk7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQ+IGNy
ZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbFRp
bWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudChEb2N1bWVudCYpOwotfTsKLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3Bs
YXlFbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudCB7
Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3Bs
YXlFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbEN1cnJlbnRU
aW1lRGlzcGxheUVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmKTsK
LX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIEVOQUJMRShWSURF
T19UUkFDSykKLQotY2xhc3MgVlRUQ3VlOwotCi1jbGFzcyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50IGZpbmFsCi0gICAgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVu
dAotICAgICwgcHVibGljIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50Ci0jaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECi0gICAgLCBwcml2YXRlIExvZ2dlckhlbHBlcgotI2VuZGlmCi17Ci0g
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi0gICAgZW51bSBjbGFzcyBGb3Jj
ZVVwZGF0ZSB7IFllcywgTm8gfTsKLSAgICB2b2lkIHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlIGZv
cmNlID0gRm9yY2VVcGRhdGU6Ok5vKTsKLSAgICB2b2lkIHVwZGF0ZURpc3BsYXkoKTsKLQotICAg
IHZvaWQgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKCk7Ci0KLSAg
ICB2b2lkIGVudGVyZWRGdWxsc2NyZWVuKCk7Ci0gICAgdm9pZCBleGl0ZWRGdWxsc2NyZWVuKCk7
Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgLy8gRWxlbWVudAotICAgIFJlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVu
ZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkNsaWVudAotICAgIFJlZlB0cjxJbWFnZT4gY3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25JbWFnZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgdGV4dFRyYWNrUmVwcmVzZW50YXRpb25Cb3Vu
ZHNDaGFuZ2VkKGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdXBkYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOwotICAgIHZvaWQgY2xlYXJUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbigpOwotCi0gICAgYm9vbCB1cGRhdGVWaWRlb0Rpc3BsYXlTaXplKCk7Ci0g
ICAgdm9pZCB1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKTsKLSAgICB2b2lkIHVwZGF0ZVRleHRT
dHJva2VTdHlsZSgpOwotICAgIHZvaWQgcHJvY2Vzc0FjdGl2ZVZUVEN1ZShWVFRDdWUmKTsKLSAg
ICB2b2lkIHVwZGF0ZVRleHRUcmFja1N0eWxlKCk7Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJM
RUQKLSAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsOwotICAgIGNvbnN0IHZv
aWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbDsKLSAgICBXVEZMb2dDaGFubmVsJiBsb2dD
aGFubmVsKCkgY29uc3QgZmluYWw7Ci0gICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIk1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQi
OyB9Ci0gICAgbXV0YWJsZSBSZWZQdHI8TG9nZ2VyPiBtX2xvZ2dlcjsKLSAgICBtdXRhYmxlIGNv
bnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsKLSNlbmRpZgotCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFRleHRUcmFja1JlcHJlc2VudGF0aW9uPiBtX3RleHRUcmFja1JlcHJlc2Vu
dGF0aW9uOwotCi0gICAgR2VuZXJpY1Rhc2tRdWV1ZTxUaW1lcj4gbV90YXNrUXVldWU7Ci0gICAg
SW50UmVjdCBtX3ZpZGVvRGlzcGxheVNpemU7Ci0gICAgaW50IG1fZm9udFNpemUgeyAwIH07Ci0g
ICAgYm9vbCBtX2ZvbnRTaXplSXNJbXBvcnRhbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9uZWVk
c0dlbmVyYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24geyBmYWxzZSB9OwotfTsKLQotI2VuZGlm
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmMxZGViY2Vl
MmY2M2RmNjdkMTQzNDYyNzIyNzUzMmQ2MDY1Y2I3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQuY3BwCkBAIC0wLDAgKzEsNDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oIgorCisjaWYgRU5BQkxFKFZJREVPKQor
CisjaW5jbHVkZSAiRE9NVG9rZW5MaXN0LmgiCisjaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGdWxsc2NyZWVuTWFuYWdlci5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUE9ESW50ZXJ2YWwuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNp
bmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJT
dHlsZVByb3BlcnRpZXMuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWVHZW5lcmljLmgiCisjaW5j
bHVkZSAiVGV4dFRyYWNrTGlzdC5oIgorI2luY2x1ZGUgIlZUVFJlZ2lvbkxpc3QuaCIKKyNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9MYW5ndWFnZS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KTsKKwordXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworUmVmPE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIEhUTUxNZWRpYUVsZW1lbnQmIG1lZGlh
RWxlbWVudCkKK3sKKyAgICBhdXRvIGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQoZG9jdW1lbnQsIG1lZGlhRWxlbWVudCkpOworICAg
IGVsZW1lbnQtPmhpZGUoKTsKKyAgICByZXR1cm4gZWxlbWVudDsKK30KKworTWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCisg
ICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIGRvY3VtZW50KQorICAgICwgbV9tZWRpYUVsZW1l
bnQobWFrZVdlYWtQdHIoJmVsZW1lbnQpKQoreworICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCIt
d2Via2l0LW1lZGlhLXRleHQtdHJhY2stY29udGFpbmVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpKTsKK30KKworUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJT
dHlsZSYmIHN0eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKQoreworICAgIHJldHVybiBj
cmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7Cit9
CisKK3N0YXRpYyBib29sIGNvbXBhcmVDdWVJbnRlcnZhbEZvckRpc3BsYXkoY29uc3QgQ3VlSW50
ZXJ2YWwmIG9uZSwgY29uc3QgQ3VlSW50ZXJ2YWwmIHR3bykKK3sKKyAgICByZXR1cm4gb25lLmRh
dGEoKS0+aXNQb3NpdGlvbmVkQWJvdmUodHdvLmRhdGEoKSk7Cit9OworCit2b2lkIE1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZURpc3BsYXkoKQoreworICAgIGlm
IChtX21lZGlhRWxlbWVudCAmJiAhbV9tZWRpYUVsZW1lbnQtPmNsb3NlZENhcHRpb25zVmlzaWJs
ZSgpKQorICAgICAgICByZW1vdmVDaGlsZHJlbigpOworCisgICAgLy8gMS4gSWYgdGhlIG1lZGlh
IGVsZW1lbnQgaXMgYW4gYXVkaW8gZWxlbWVudCwgb3IgaXMgYW5vdGhlciBwbGF5YmFjaworICAg
IC8vIG1lY2hhbmlzbSB3aXRoIG5vIHJlbmRlcmluZyBhcmVhLCBhYm9ydCB0aGVzZSBzdGVwcy4g
VGhlcmUgaXMgbm90aGluZyB0bworICAgIC8vIHJlbmRlci4KKyAgICBpZiAoIW1fbWVkaWFFbGVt
ZW50IHx8ICFtX21lZGlhRWxlbWVudC0+aXNWaWRlbygpIHx8IG1fdmlkZW9EaXNwbGF5U2l6ZS5z
aXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyAyLiBMZXQgdmlkZW8g
YmUgdGhlIG1lZGlhIGVsZW1lbnQgb3Igb3RoZXIgcGxheWJhY2sgbWVjaGFuaXNtLgorICAgIEhU
TUxWaWRlb0VsZW1lbnQmIHZpZGVvID0gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4oKm1fbWVk
aWFFbGVtZW50KTsKKworICAgIC8vIDMuIExldCBvdXRwdXQgYmUgYW4gZW1wdHkgbGlzdCBvZiBh
YnNvbHV0ZWx5IHBvc2l0aW9uZWQgQ1NTIGJsb2NrIGJveGVzLgorCisgICAgLy8gNC4gSWYgdGhl
IHVzZXIgYWdlbnQgaXMgZXhwb3NpbmcgYSB1c2VyIGludGVyZmFjZSBmb3IgdmlkZW8sIGFkZCB0
bworICAgIC8vIG91dHB1dCBvbmUgb3IgbW9yZSBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IHBvc2l0
aW9uZWQgQ1NTIGJsb2NrIGJveGVzIHRoYXQKKyAgICAvLyBjb3ZlciB0aGUgc2FtZSByZWdpb24g
YXMgdGhlIHVzZXIgaW50ZXJmYWNlLgorCisgICAgLy8gNS4gSWYgdGhlIGxhc3QgdGltZSB0aGVz
ZSBydWxlcyB3ZXJlIHJ1biwgdGhlIHVzZXIgYWdlbnQgd2FzIG5vdCBleHBvc2luZworICAgIC8v
IGEgdXNlciBpbnRlcmZhY2UgZm9yIHZpZGVvLCBidXQgbm93IGl0IGlzLCBsZXQgcmVzZXQgYmUg
dHJ1ZS4gT3RoZXJ3aXNlLAorICAgIC8vIGxldCByZXNldCBiZSBmYWxzZS4KKworICAgIC8vIFRo
ZXJlIGlzIG5vdGhpbmcgdG8gYmUgZG9uZSBleHBsaWNpdGx5IGZvciA0dGggYW5kIDV0aCBzdGVw
cywgYXMKKyAgICAvLyBldmVyeXRoaW5nIGlzIGhhbmRsZWQgdGhyb3VnaCBDU1MuIFRoZSBjYXB0
aW9uIGJveCBpcyBvbiB0b3Agb2YgdGhlCisgICAgLy8gY29udHJvbHMgYm94LCBpbiBhIGNvbnRh
aW5lciBzZXQgd2l0aCB0aGUgLXdlYmtpdC1ib3ggZGlzcGxheSBwcm9wZXJ0eS4KKworICAgIC8v
IDYuIExldCB0cmFja3MgYmUgdGhlIHN1YnNldCBvZiB2aWRlbydzIGxpc3Qgb2YgdGV4dCB0cmFj
a3MgdGhhdCBoYXZlIGFzCisgICAgLy8gdGhlaXIgcnVsZXMgZm9yIHVwZGF0aW5nIHRoZSB0ZXh0
IHRyYWNrIHJlbmRlcmluZyB0aGVzZSBydWxlcyBmb3IKKyAgICAvLyB1cGRhdGluZyB0aGUgZGlz
cGxheSBvZiBXZWJWVFQgdGV4dCB0cmFja3MsIGFuZCB3aG9zZSB0ZXh0IHRyYWNrIG1vZGUgaXMK
KyAgICAvLyBzaG93aW5nIG9yIHNob3dpbmcgYnkgZGVmYXVsdC4KKyAgICAvLyA3LiBMZXQgY3Vl
cyBiZSBhbiBlbXB0eSBsaXN0IG9mIHRleHQgdHJhY2sgY3Vlcy4KKyAgICAvLyA4LiBGb3IgZWFj
aCB0cmFjayB0cmFjayBpbiB0cmFja3MsIGFwcGVuZCB0byBjdWVzIGFsbCB0aGUgY3VlcyBmcm9t
CisgICAgLy8gdHJhY2sncyBsaXN0IG9mIGN1ZXMgdGhhdCBoYXZlIHRoZWlyIHRleHQgdHJhY2sg
Y3VlIGFjdGl2ZSBmbGFnIHNldC4KKyAgICBDdWVMaXN0IGFjdGl2ZUN1ZXMgPSB2aWRlby5jdXJy
ZW50bHlBY3RpdmVDdWVzKCk7CisKKyAgICAvLyA5LiBJZiByZXNldCBpcyBmYWxzZSwgdGhlbiwg
Zm9yIGVhY2ggdGV4dCB0cmFjayBjdWUgY3VlIGluIGN1ZXM6IGlmIGN1ZSdzCisgICAgLy8gdGV4
dCB0cmFjayBjdWUgZGlzcGxheSBzdGF0ZSBoYXMgYSBzZXQgb2YgQ1NTIGJveGVzLCB0aGVuIGFk
ZCB0aG9zZSBib3hlcworICAgIC8vIHRvIG91dHB1dCwgYW5kIHJlbW92ZSBjdWUgZnJvbSBjdWVz
LgorCisgICAgLy8gVGhlcmUgaXMgbm90aGluZyBleHBsaWNpdGx5IHRvIGJlIGRvbmUgaGVyZSwg
YXMgYWxsIHRoZSBjYWNoaW5nIG9jY3VycworICAgIC8vIHdpdGhpbiB0aGUgVGV4dFRyYWNrQ3Vl
IGluc3RhbmNlIGl0c2VsZi4gSWYgcGFyYW1ldGVycyBvZiB0aGUgY3VlIGNoYW5nZSwKKyAgICAv
LyB0aGUgZGlzcGxheSB0cmVlIGlzIGNsZWFyZWQuCisKKyAgICAvLyBJZiB0aGUgbnVtYmVyIG9m
IENTUyBib3hlcyBpbiB0aGUgb3V0cHV0IGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGN1ZXMK
KyAgICAvLyB3ZSB3aXNoIHRvIHJlbmRlciAoZS5nLiwgd2UgYXJlIGFkZGluZyBhbm90aGVyIGN1
ZSBpbiBhIHNldCBvZiByb2xsLXVwCisgICAgLy8gY3VlcyksIHJlbW92ZSBhbGwgdGhlIGV4aXN0
aW5nIENTUyBib3hlcyByZXByZXNlbnRpbmcgdGhlIGN1ZXMgYW5kIHJlLWFkZAorICAgIC8vIHRo
ZW0gc28gdGhhdCB0aGUgbmV3IGN1ZSBpcyBhdCB0aGUgYm90dG9tLgorICAgIC8vIEZJWE1FOiBD
YWxsaW5nIGNvdW50Q2hpbGROb2RlcygpIGhlcmUgaXMgaW5lZmZpY2llbnQuIFdlIGRvbid0IG5l
ZWQgdG8KKyAgICAvLyB0cmF2ZXJzZSBhbGwgY2hpbGRyZW4ganVzdCB0byBjaGVjayBpZiB0aGVy
ZSBhcmUgbGVzcyBjaGlsZHJlbiB0aGFuIGN1ZXMuCisgICAgaWYgKGNvdW50Q2hpbGROb2Rlcygp
IDwgYWN0aXZlQ3Vlcy5zaXplKCkpCisgICAgICAgIHJlbW92ZUNoaWxkcmVuKCk7CisKKyAgICBh
Y3RpdmVDdWVzLnJlbW92ZUFsbE1hdGNoaW5nKFtdIChDdWVJbnRlcnZhbCYgY3VlSW50ZXJ2YWwp
IHsKKyAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gY3VlSW50ZXJ2YWwuZGF0YSgp
OworICAgICAgICByZXR1cm4gIWN1ZS0+dHJhY2soKQorICAgICAgICAgICAgfHwgIWN1ZS0+dHJh
Y2soKS0+aXNSZW5kZXJlZCgpCisgICAgICAgICAgICB8fCBjdWUtPnRyYWNrKCktPm1vZGUoKSA9
PSBUZXh0VHJhY2s6Ok1vZGU6OkRpc2FibGVkCisgICAgICAgICAgICB8fCAhY3VlLT5pc0FjdGl2
ZSgpCisgICAgICAgICAgICB8fCAhY3VlLT5pc1JlbmRlcmFibGUoKTsKKyAgICB9KTsKKworICAg
IC8vIFNvcnQgdGhlIGFjdGl2ZSBjdWVzIGZvciB0aGUgYXBwcm9wcmlhdGUgZGlzcGxheSBvcmRl
ci4gRm9yIGV4YW1wbGUsIGZvciByb2xsLXVwCisgICAgLy8gb3IgcGFpbnQtb24gY2FwdGlvbnMs
IHdlIG5lZWQgdG8gYWRkIHRoZSBjdWVzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciwK
KyAgICAvLyBzbyB0aGF0IHRoZSBuZXdlc3QgY2FwdGlvbnMgYXBwZWFyIGF0IHRoZSBib3R0b20u
CisgICAgc3RkOjpzb3J0KGFjdGl2ZUN1ZXMuYmVnaW4oKSwgYWN0aXZlQ3Vlcy5lbmQoKSwgJmNv
bXBhcmVDdWVJbnRlcnZhbEZvckRpc3BsYXkpOworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50LT5j
bG9zZWRDYXB0aW9uc1Zpc2libGUoKSkgeworICAgICAgICAvLyAxMC4gRm9yIGVhY2ggdGV4dCB0
cmFjayBjdWUgaW4gY3VlcyB0aGF0IGhhcyBub3QgeWV0IGhhZAorICAgICAgICAvLyBjb3JyZXNw
b25kaW5nIENTUyBib3hlcyBhZGRlZCB0byBvdXRwdXQsIGluIHRleHQgdHJhY2sgY3VlIG9yZGVy
LCBydW4gdGhlCisgICAgICAgIC8vIGZvbGxvd2luZyBzdWJzdGVwczoKKyAgICAgICAgZm9yIChh
dXRvJiBpbnRlcnZhbCA6IGFjdGl2ZUN1ZXMpIHsKKyAgICAgICAgICAgIGF1dG8gY3VlID0gaW50
ZXJ2YWwuZGF0YSgpOworICAgICAgICAgICAgY3VlLT5zZXRGb250U2l6ZShtX2ZvbnRTaXplLCBt
X3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplSXNJbXBvcnRhbnQpOworICAgICAg
ICAgICAgaWYgKGlzPFZUVEN1ZT4oKmN1ZSkpCisgICAgICAgICAgICAgICAgcHJvY2Vzc0FjdGl2
ZVZUVEN1ZShkb3duY2FzdDxWVFRDdWU+KCpjdWUpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGF1dG8gZGlzcGxheUJveCA9IGN1ZS0+Z2V0RGlzcGxheVRyZWUobV92aWRl
b0Rpc3BsYXlTaXplLnNpemUoKSwgbV9mb250U2l6ZSk7CisgICAgICAgICAgICAgICAgaWYgKGRp
c3BsYXlCb3gtPmhhc0NoaWxkTm9kZXMoKSAmJiAhY29udGFpbnMoZGlzcGxheUJveC5nZXQoKSkp
CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkKCpkaXNwbGF5Qm94KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIDExLiBSZXR1cm4gb3V0cHV0LgorICAg
IGlmIChoYXNDaGlsZE5vZGVzKCkpCisgICAgICAgIHNob3coKTsKKyAgICBlbHNlCisgICAgICAg
IGhpZGUoKTsKKworICAgIHVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQoKTsK
KyAgICB1cGRhdGVUZXh0VHJhY2tTdHlsZSgpOworICAgIG1fbmVlZHNHZW5lcmF0ZVRleHRUcmFj
a1JlcHJlc2VudGF0aW9uID0gdHJ1ZTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVk
ZWQoKQoreworICAgIGlmICghbV9uZWVkc0dlbmVyYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIG1fbmVlZHNHZW5lcmF0ZVRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uID0gZmFsc2U7CisKKyAgICAvLyBXZSBzaG91bGQgY2FsbCBtX3RleHRUcmFja1JlcHJl
c2VudGF0aW9uLT51cGRhdGUoKSB0byBwYWludCB0aGUgc3VidHJlZSBvZgorICAgIC8vIHRoZSBS
ZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVtZW50IGFmdGVyIHRoZSBsYXlvdXQgaXMgY2xlYW4u
CisgICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCisgICAgICAgIG1fdGV4dFRyYWNr
UmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6OnByb2Nlc3NBY3RpdmVWVFRDdWUoVlRUQ3VlJiBjdWUpCit7Cisg
ICAgREVCVUdfTE9HKExPR0lERU5USUZJRVIsICJhZGRpbmcgYW5kIHBvc2l0aW9uaW5nIGN1ZTog
XCIiLCBjdWUudGV4dCgpLCAiXCIsIHN0YXJ0PSIsIGN1ZS5zdGFydFRpbWUoKSwgIiwgZW5kPSIs
IGN1ZS5lbmRUaW1lKCksICIsIGxpbmU9IiwgY3VlLmxpbmUoKSk7CisgICAgUmVmPFRleHRUcmFj
a0N1ZUJveD4gZGlzcGxheUJveCA9ICpjdWUuZ2V0RGlzcGxheVRyZWUobV92aWRlb0Rpc3BsYXlT
aXplLnNpemUoKSwgbV9mb250U2l6ZSk7CisKKyAgICBpZiAoYXV0byByZWdpb24gPSBjdWUudHJh
Y2soKS0+cmVnaW9ucygpLT5nZXRSZWdpb25CeUlkKGN1ZS5yZWdpb25JZCgpKSkgeworICAgICAg
ICAvLyBMZXQgcmVnaW9uIGJlIHRoZSBXZWJWVFQgcmVnaW9uIHdob3NlIHJlZ2lvbiBpZGVudGlm
aWVyCisgICAgICAgIC8vIG1hdGNoZXMgdGhlIHRleHQgdHJhY2sgY3VlIHJlZ2lvbiBpZGVudGlm
aWVyIG9mIGN1ZS4KKyAgICAgICAgUmVmPEhUTUxEaXZFbGVtZW50PiByZWdpb25Ob2RlID0gcmVn
aW9uLT5nZXREaXNwbGF5VHJlZSgpOworCisgICAgICAgIGlmICghY29udGFpbnMocmVnaW9uTm9k
ZS5wdHIoKSkpCisgICAgICAgICAgICBhcHBlbmRDaGlsZChyZWdpb24tPmdldERpc3BsYXlUcmVl
KCkpOworCisgICAgICAgIHJlZ2lvbi0+YXBwZW5kVGV4dFRyYWNrQ3VlQm94KFdURk1vdmUoZGlz
cGxheUJveCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIGN1ZSBoYXMgYW4gZW1wdHkg
dGV4dCB0cmFjayBjdWUgcmVnaW9uIGlkZW50aWZpZXIgb3IgdGhlcmUgaXMgbm8KKyAgICAgICAg
Ly8gV2ViVlRUIHJlZ2lvbiB3aG9zZSByZWdpb24gaWRlbnRpZmllciBpcyBpZGVudGljYWwgdG8g
Y3VlJ3MgdGV4dAorICAgICAgICAvLyB0cmFjayBjdWUgcmVnaW9uIGlkZW50aWZpZXIsIHJ1biB0
aGUgZm9sbG93aW5nIHN1YnN0ZXBzOgorICAgICAgICBpZiAoZGlzcGxheUJveC0+aGFzQ2hpbGRO
b2RlcygpICYmICFjb250YWlucyhkaXNwbGF5Qm94LnB0cigpKSkgeworICAgICAgICAgICAgLy8g
Tm90ZTogdGhlIGRpc3BsYXkgdHJlZSBvZiBhIGN1ZSBpcyByZW1vdmVkIHdoZW4gdGhlIGFjdGl2
ZSBmbGFnIG9mIHRoZSBjdWUgaXMgdW5zZXQuCisgICAgICAgICAgICBhcHBlbmRDaGlsZChkaXNw
bGF5Qm94KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKQoreworICAgIGlm
ICghZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9tZWRp
YUVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHNtYWxsZXN0RGltZW5zaW9u
ID0gc3RkOjptaW4obV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWlnaHQoKSwgbV92aWRlb0Rp
c3BsYXlTaXplLnNpemUoKS53aWR0aCgpKTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBkb2N1bWVu
dCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5jYXB0aW9uRm9udFNpemVT
Y2FsZUFuZEltcG9ydGFuY2UobV9mb250U2l6ZUlzSW1wb3J0YW50KTsKKyAgICBtX2ZvbnRTaXpl
ID0gbHJvdW5kZihzbWFsbGVzdERpbWVuc2lvbiAqIGZvbnRTY2FsZSk7CisKKyAgICBmb3IgKGF1
dG8mIGFjdGl2ZUN1ZSA6IG1fbWVkaWFFbGVtZW50LT5jdXJyZW50bHlBY3RpdmVDdWVzKCkpIHsK
KyAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gYWN0aXZlQ3VlLmRhdGEoKTsKKyAg
ICAgICAgaWYgKGN1ZS0+aXNSZW5kZXJhYmxlKCkpCisgICAgICAgICAgICBjdWUtPnNldEZvbnRT
aXplKG1fZm9udFNpemUsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCksIG1fZm9udFNpemVJc0lt
cG9ydGFudCk7CisgICAgfQorfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OnVwZGF0ZVRleHRTdHJva2VTdHlsZSgpCit7CisgICAgaWYgKCFkb2N1bWVudCgp
LnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIFN0cmluZyBsYW5ndWFnZTsKKworICAgIC8vIEZJWE1F
OiBTaW5jZSBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG1vcmUgdGhhbiBvbmUgdGV4dCB0cmFjayBl
bmFibGVkLCB0aGUgZm9sbG93aW5nIGNvZGUgbWF5IG5vdCBmaW5kIHRoZSBjb3JyZWN0IGxhbmd1
YWdlLgorICAgIC8vIFRoZSBkZWZhdWx0IFVJIG9ubHkgYWxsb3dzIGEgdXNlciB0byBlbmFibGUg
b25lIHRyYWNrIGF0IGEgdGltZSwgc28gaXQgc2hvdWxkIGJlIE9LIGZvciBub3csIGJ1dCB3ZSBz
aG91bGQgY29uc2lkZXIgZG9pbmcKKyAgICAvLyB0aGlzIGRpZmZlcmVudGx5LCBzZWUgPGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4NzU+LgorICAgIGlmIChhdXRv
KiB0cmFja3MgPSBtX21lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0cmFja3MtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAg
IGF1dG8gdHJhY2sgPSB0cmFja3MtPml0ZW0oaSk7CisgICAgICAgICAgICBpZiAodHJhY2sgJiYg
dHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKKyAgICAgICAgICAg
ICAgICBsYW5ndWFnZSA9IHRyYWNrLT52YWxpZEJDUDQ3TGFuZ3VhZ2UoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZsb2F0
IHN0cm9rZVdpZHRoOworICAgIGJvb2wgaW1wb3J0YW50OworCisgICAgLy8gRklYTUU6IGZpbmQg
YSB3YXkgdG8gc2V0IHRoaXMgcHJvcGVydHkgaW4gdGhlIHN0eWxlc2hlZXQgbGlrZSB0aGUgb3Ro
ZXIgdXNlciBzdHlsZSBwcmVmZXJlbmNlcywgc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY5ODc0Pi4KKyAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmdyb3Vw
KCkuY2FwdGlvblByZWZlcmVuY2VzKCkuY2FwdGlvblN0cm9rZVdpZHRoRm9yRm9udChtX2ZvbnRT
aXplLCBsYW5ndWFnZSwgc3Ryb2tlV2lkdGgsIGltcG9ydGFudCkpCisgICAgICAgIHNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlTdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgsIENTU1Vu
aXRUeXBlOjpDU1NfUFgsIGltcG9ydGFudCk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRl
ZCgpCit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byByZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uID0gbV9tZWRpYUVsZW1lbnQtPnJl
cXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKTsKKyAgICBpZiAoIWhhc0NoaWxkTm9kZXMo
KSB8fCAhcmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgeworICAgICAgICBpZiAobV90
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgeworICAgICAgICAgICAgaWYgKCFyZXF1aXJlc1RleHRU
cmFja1JlcHJlc2VudGF0aW9uKQorICAgICAgICAgICAgICAgIGNsZWFyVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24oKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3RleHRUcmFj
a1JlcHJlc2VudGF0aW9uLT5zZXRIaWRkZW4odHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgeworICAg
ICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOworCisgICAgICAgIG1fdGV4dFRyYWNrUmVw
cmVzZW50YXRpb24gPSBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbjo6Y3JlYXRlKCp0aGlzKTsKKyAg
ICAgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICAgICAgbV90ZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbi0+c2V0Q29udGVudFNjYWxlKGRvY3VtZW50KCkucGFnZSgpLT5kZXZpY2VTY2Fs
ZUZhY3RvcigpKTsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnNldFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24uZ2V0KCkpOworICAgIH0KKworICAgIG1f
dGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNldEhpZGRlbihmYWxzZSk7Cit9CisKK3ZvaWQgTWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y2xlYXJUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbigpCit7CisgICAgaWYgKCFtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOworCisgICAgbV90ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbiA9IG51bGxwdHI7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQor
ICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb24obnVsbHB0
cik7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBk
YXRlVGV4dFRyYWNrU3R5bGUoKQoreworICAgIGlmIChtX3RleHRUcmFja1JlcHJlc2VudGF0aW9u
KSB7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwg
Q1NTVmFsdWVBYnNvbHV0ZSk7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlXaWR0aCwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS53aWR0aCgpLCBDU1NVbml0VHlw
ZTo6Q1NTX1BYKTsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhl
aWdodCwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWlnaHQoKSwgQ1NTVW5pdFR5cGU6OkNT
U19QWCk7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCAw
LCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVRvcCwgMCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRp
b24pOworICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCk7Cisg
ICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCk7CisgICAgcmVt
b3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQpOworICAgIHJlbW92ZUlubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3ApOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmVudGVyZWRGdWxsc2NyZWVuKCkKK3sKKyAgICB1cGRh
dGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklmTmVlZGVkKCk7CisgICAgdXBkYXRlU2l6ZXMoRm9y
Y2VVcGRhdGU6Olllcyk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6ZXhpdGVkRnVsbHNjcmVlbigpCit7CisgICAgY2xlYXJUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbigpOworICAgIHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlOjpZZXMpOworfQorCitib29s
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVZpZGVvRGlzcGxh
eVNpemUoKQoreworICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEludFJlY3QgdmlkZW9Cb3g7CisgICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRp
b24pIHsKKyAgICAgICAgdmlkZW9Cb3ggPSBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT5ib3Vu
ZHMoKTsKKyAgICAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBkb2N1bWVudCgpLnBhZ2Uo
KS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgdmlkZW9Cb3guc2V0V2lkdGgodmlkZW9C
b3gud2lkdGgoKSAqIGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgdmlkZW9Cb3guc2V0SGVp
Z2h0KHZpZGVvQm94LmhlaWdodCgpICogZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmICghaXM8UmVuZGVyVmlkZW8+KG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigp
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdmlkZW9Cb3ggPSBkb3duY2Fz
dDxSZW5kZXJWaWRlbz4oKm1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKS52aWRlb0JveCgpOwor
ICAgIH0KKworICAgIGlmIChtX3ZpZGVvRGlzcGxheVNpemUgPT0gdmlkZW9Cb3gpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIG1fdmlkZW9EaXNwbGF5U2l6ZSA9IHZpZGVvQm94OworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OnVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlIGZvcmNlKQoreworICAgIGlmICghdXBkYXRl
VmlkZW9EaXNwbGF5U2l6ZSgpICYmIGZvcmNlICE9IEZvcmNlVXBkYXRlOjpZZXMpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkgfHwgIW1fbWVkaWFFbGVtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX21lZGlhRWxlbWVudC0+c3luY1RleHRUcmFja0Jv
dW5kcygpOworCisgICAgdXBkYXRlQWN0aXZlQ3Vlc0ZvbnRTaXplKCk7CisgICAgdXBkYXRlVGV4
dFN0cm9rZVN0eWxlKCk7CisgICAgZm9yIChhdXRvJiBhY3RpdmVDdWUgOiBtX21lZGlhRWxlbWVu
dC0+Y3VycmVudGx5QWN0aXZlQ3VlcygpKQorICAgICAgICBhY3RpdmVDdWUuZGF0YSgpLT5yZWNh
bGN1bGF0ZVN0eWxlcygpOworCisgICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNdICgp
IHsKKyAgICAgICAgdXBkYXRlRGlzcGxheSgpOworICAgIH0pOworfQorCitSZWZQdHI8SW1hZ2U+
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSW1hZ2UoKQoreworICAgIGlmICghaGFzQ2hpbGROb2RlcygpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBkb2N1bWVudCgp
LmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworCisgICAgYXV0byogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgaWYgKCFyZW5kZXJlci0+aGFzTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVs
T2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CisKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rv
ciA9IDE7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAg
ZGV2aWNlU2NhbGVGYWN0b3IgPSBwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOworCisgICAgSW50
UmVjdCBwYWludGluZ1JlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5zaXplKCkpOwor
CisgICAgLy8gRklYTUUgKDE0OTQyMik6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25k
aXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3RvcikpOworICAgIGlmICghYnVm
ZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcGFpbnRGbGFncyA9IFJl
bmRlckxheWVyOjpwYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ0FsbFBoYXNlc0ZsYWdzKCk7
CisgICAgcGFpbnRGbGFncy5hZGQoUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJUZW1wb3JhcnlDbGlw
UmVjdHMpOworICAgIGxheWVyLT5wYWludChidWZmZXItPmNvbnRleHQoKSwgcGFpbnRpbmdSZWN0
LCBMYXlvdXRTaXplKCksIHsgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJz
LCBQYWludEJlaGF2aW9yOjpTbmFwc2hvdHRpbmcgfSwgbnVsbHB0ciwgcGFpbnRGbGFncyk7CisK
KyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShidWZmZXIpKTsK
K30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp0ZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQoY29uc3QgSW50UmVjdCYpCit7CisgICAgdXBk
YXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOworICAgIHVwZGF0ZVNpemVzKCk7
Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6aGlkZSgp
Cit7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXksIENTU1Zh
bHVlTm9uZSk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6c2hvdygpCit7CisgICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURp
c3BsYXkpOworfQorCitib29sIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6
OmlzU2hvd2luZygpIGNvbnN0Cit7CisgICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBwcm9wZXJ0
eVNldCA9IGlubGluZVN0eWxlKCk7CisKKyAgICAvLyBGb2xsb3dpbmcgdGhlIGNvZGUgZnJvbSBz
aG93KCkgYW5kIGhpZGUoKSBhYm92ZSwgd2Ugb25seSBoYXZlCisgICAgLy8gdG8gY2hlY2sgZm9y
IHRoZSBwcmVzZW5zZSBvZiBpbmxpbmUgZGlzcGxheS4KKyAgICByZXR1cm4gKCFwcm9wZXJ0eVNl
dCB8fCAhcHJvcGVydHlTZXQtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXNwbGF5
KSk7Cit9CisKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorY29uc3QgTG9nZ2VyJiBNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojpsb2dnZXIoKSBjb25zdAoreworICAg
IGlmICghbV9sb2dnZXIpCisgICAgICAgIG1fbG9nZ2VyID0gJmRvY3VtZW50KCkubG9nZ2VyKCk7
CisKKyAgICByZXR1cm4gKm1fbG9nZ2VyOworfQorCitjb25zdCB2b2lkKiBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojpsb2dJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fbG9nSWRlbnRpZmllciAmJiBtX21lZGlhRWxlbWVudCkKKyAgICAgICAgbV9sb2dJZGVu
dGlmaWVyID0gbV9tZWRpYUVsZW1lbnQtPmxvZ0lkZW50aWZpZXIoKTsKKworICAgIHJldHVybiBt
X2xvZ0lkZW50aWZpZXI7Cit9CisKK1dURkxvZ0NoYW5uZWwmIE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6OmxvZ0NoYW5uZWwoKSBjb25zdAoreworICAgIHJldHVybiBMb2dN
ZWRpYTsKK30KKyNlbmRpZiAvLyAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKworI2VuZGlmIC8vIEVO
QUJMRShWSURFT19UUkFDSykKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjNlOWVlNTc0M2ZiOTJmOGQ4
NTlmMzE3YzIwZjc4YzNlNmRlMjlkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaApAQCAt
MCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbmNsdWRlICJH
ZW5lcmljVGFza1F1ZXVlLmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KKyNpbmNsdWRlIDx3dGYv
V2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCisKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBWVFRDdWU7CisKK2NsYXNzIE1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQgZmluYWwKKyAgICA6IHB1YmxpYyBI
VE1MRGl2RWxlbWVudAorICAgICwgcHVibGljIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50
CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgLCBwcml2YXRlIExvZ2dlckhlbHBlcgor
I2VuZGlmCit7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYsIEhUTUxNZWRpYUVs
ZW1lbnQmKTsKKworICAgIGVudW0gY2xhc3MgRm9yY2VVcGRhdGUgeyBZZXMsIE5vIH07CisgICAg
dm9pZCB1cGRhdGVTaXplcyhGb3JjZVVwZGF0ZSBmb3JjZSA9IEZvcmNlVXBkYXRlOjpObyk7Cisg
ICAgdm9pZCB1cGRhdGVEaXNwbGF5KCk7CisKKyAgICB2b2lkIHVwZGF0ZVRleHRUcmFja1JlcHJl
c2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgpOworCisgICAgdm9pZCBlbnRlcmVkRnVsbHNjcmVlbigp
OworICAgIHZvaWQgZXhpdGVkRnVsbHNjcmVlbigpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmLCBIVE1MTWVk
aWFFbGVtZW50Jik7CisKKyAgICAvLyBFbGVtZW50CisgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1l
bnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJUcmVl
UG9zaXRpb24mKSBvdmVycmlkZTsKKworICAgIC8vIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xp
ZW50CisgICAgUmVmUHRyPEltYWdlPiBjcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdl
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCB0ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5n
ZWQoY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbklmTmVlZGVkKCk7CisgICAgdm9pZCBjbGVhclRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKCk7CisKKyAgICBib29sIHVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKTsKKyAgICB2b2lk
IHVwZGF0ZUFjdGl2ZUN1ZXNGb250U2l6ZSgpOworICAgIHZvaWQgdXBkYXRlVGV4dFN0cm9rZVN0
eWxlKCk7CisgICAgdm9pZCBwcm9jZXNzQWN0aXZlVlRUQ3VlKFZUVEN1ZSYpOworICAgIHZvaWQg
dXBkYXRlVGV4dFRyYWNrU3R5bGUoKTsKKworICAgIHZvaWQgaGlkZSgpOworICAgIHZvaWQgc2hv
dygpOworICAgIGJvb2wgaXNTaG93aW5nKCkgY29uc3Q7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0
IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbDsKKyAgICBXVEZMb2dDaGFubmVsJiBs
b2dDaGFubmVsKCkgY29uc3QgZmluYWw7CisgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gIk1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQiOyB9CisgICAgbXV0YWJsZSBSZWZQdHI8TG9nZ2VyPiBtX2xvZ2dlcjsKKyAgICBtdXRhYmxl
IGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsKKyNlbmRpZgorCisgICAg
c3RkOjp1bmlxdWVfcHRyPFRleHRUcmFja1JlcHJlc2VudGF0aW9uPiBtX3RleHRUcmFja1JlcHJl
c2VudGF0aW9uOworCisgICAgR2VuZXJpY1Rhc2tRdWV1ZTxUaW1lcj4gbV90YXNrUXVldWU7Cisg
ICAgV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21lZGlhRWxlbWVudDsKKyAgICBJbnRSZWN0
IG1fdmlkZW9EaXNwbGF5U2l6ZTsKKyAgICBpbnQgbV9mb250U2l6ZSB7IDAgfTsKKyAgICBib29s
IG1fZm9udFNpemVJc0ltcG9ydGFudCB7IGZhbHNlIH07CisgICAgYm9vbCBtX25lZWRzR2VuZXJh
dGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiB7IGZhbHNlIH07Cit9OworCisjZW5kaWYKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzk5MjdiOTdiZmU2ZDI5ZTllNGY4NDc0NzQ2N2QyYjQyNTRjMzYzZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzNyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCi0jaW5jbHVk
ZSAiTWVkaWFDb250cm9scy5oIgotCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUg
Ik1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xzKTsKLQotTWVkaWFDb250
cm9sczo6TWVkaWFDb250cm9scyhEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBIVE1MRGl2RWxl
bWVudChIVE1MTmFtZXM6OmRpdlRhZywgZG9jdW1lbnQpCi0gICAgLCBtX21lZGlhQ29udHJvbGxl
cigwKQotICAgICwgbV9wYW5lbCgwKQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICAsIG1f
dGV4dERpc3BsYXlDb250YWluZXIoMCkKLSNlbmRpZgotICAgICwgbV9wbGF5QnV0dG9uKDApCi0g
ICAgLCBtX2N1cnJlbnRUaW1lRGlzcGxheSgwKQotICAgICwgbV90aW1lbGluZSgwKQotICAgICwg
bV9wYW5lbE11dGVCdXR0b24oMCkKLSAgICAsIG1fdm9sdW1lU2xpZGVyKDApCi0gICAgLCBtX3Rv
Z2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKDApCi0gICAgLCBtX2Z1bGxTY3JlZW5CdXR0b24oMCkK
LSAgICAsIG1faGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCp0aGlzLCAmTWVkaWFDb250cm9s
czo6aGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyRmlyZWQpCi0gICAgLCBtX2lzRnVsbHNjcmVl
bihmYWxzZSkKLSAgICAsIG1faXNNb3VzZU92ZXJDb250cm9scyhmYWxzZSkKLXsKLSAgICBzZXRQ
c2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scyIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6c2V0TWVkaWFD
b250cm9sbGVyKE1lZGlhQ29udHJvbGxlckludGVyZmFjZSogY29udHJvbGxlcikKLXsKLSAgICBp
ZiAobV9tZWRpYUNvbnRyb2xsZXIgPT0gY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fbWVkaWFDb250cm9sbGVyID0gY29udHJvbGxlcjsKLQotICAgIGlmIChtX3BhbmVsKQotICAg
ICAgICBtX3BhbmVsLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0jaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQotICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQotICAgICAgICBt
X3RleHREaXNwbGF5Q29udGFpbmVyLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0j
ZW5kaWYKLSAgICBpZiAobV9wbGF5QnV0dG9uKQotICAgICAgICBtX3BsYXlCdXR0b24tPnNldE1l
ZGlhQ29udHJvbGxlcihjb250cm9sbGVyKTsKLSAgICBpZiAobV9jdXJyZW50VGltZURpc3BsYXkp
Ci0gICAgICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJv
bGxlcik7Ci0gICAgaWYgKG1fdGltZWxpbmUpCi0gICAgICAgIG1fdGltZWxpbmUtPnNldE1lZGlh
Q29udHJvbGxlcihjb250cm9sbGVyKTsKLSAgICBpZiAobV9wYW5lbE11dGVCdXR0b24pCi0gICAg
ICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0g
ICAgaWYgKG1fdm9sdW1lU2xpZGVyKQotICAgICAgICBtX3ZvbHVtZVNsaWRlci0+c2V0TWVkaWFD
b250cm9sbGVyKGNvbnRyb2xsZXIpOwotICAgIGlmIChtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0
dG9uKQotICAgICAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5zZXRNZWRpYUNvbnRy
b2xsZXIoY29udHJvbGxlcik7Ci0gICAgaWYgKG1fZnVsbFNjcmVlbkJ1dHRvbikKLSAgICAgICAg
bV9mdWxsU2NyZWVuQnV0dG9uLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sczo6cmVzZXQoKQotewotICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRl
RGlzcGxheVR5cGUoKTsKLQotICAgIHVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwotCi0gICAg
ZG91YmxlIGR1cmF0aW9uID0gbV9tZWRpYUNvbnRyb2xsZXItPmR1cmF0aW9uKCk7Ci0gICAgaWYg
KHN0ZDo6aXNmaW5pdGUoZHVyYXRpb24pIHx8IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5oYXNP
d25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoTWVkaWFTbGlkZXJQYXJ0KSkgewotICAgICAgICBt
X3RpbWVsaW5lLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gICAgICAgIG1fdGltZWxpbmUtPnNl
dFBvc2l0aW9uKG1fbWVkaWFDb250cm9sbGVyLT5jdXJyZW50VGltZSgpKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9tZWRpYUNvbnRyb2xsZXItPmhhc0F1ZGlvKCkgfHwgUmVuZGVyVGhlbWU6OnNpbmds
ZXRvbigpLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYU11dGVCdXR0b25QYXJ0
KSkKLSAgICAgICAgbV9wYW5lbE11dGVCdXR0b24tPnNob3coKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7Ci0KLSAgICBpZiAobV92b2x1bWVTbGlkZXIpIHsK
LSAgICAgICAgaWYgKCFtX21lZGlhQ29udHJvbGxlci0+aGFzQXVkaW8oKSkKLSAgICAgICAgICAg
IG1fdm9sdW1lU2xpZGVyLT5oaWRlKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV92
b2x1bWVTbGlkZXItPnNob3coKTsKLSAgICAgICAgICAgIHNldFNsaWRlclZvbHVtZSgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmVmcmVzaENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJpbGl0
eSgpOwotCi0gICAgaWYgKG1fZnVsbFNjcmVlbkJ1dHRvbikgewotICAgICAgICBpZiAobV9tZWRp
YUNvbnRyb2xsZXItPnN1cHBvcnRzRnVsbHNjcmVlbihIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgJiYgbV9tZWRpYUNvbnRyb2xsZXItPmhhc1ZpZGVv
KCkpCi0gICAgICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPnNob3coKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9mdWxsU2NyZWVuQnV0dG9uLT5oaWRlKCk7Ci0gICAgfQotCi0gICAg
bWFrZU9wYXF1ZSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnJlcG9ydGVkRXJyb3IoKQot
ewotICAgIGF1dG8mIHRoZW1lID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpOwotICAgIGlmICgh
dGhlbWUuaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKE1lZGlhTXV0ZUJ1dHRvblBhcnQp
KSB7Ci0gICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7Ci0gICAgICAgIG1fdm9sdW1l
U2xpZGVyLT5oaWRlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNC
dXR0b24gJiYgIXRoZW1lLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYVRvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uUGFydCkpCi0gICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlv
bnNCdXR0b24tPmhpZGUoKTsKLQotICAgIGlmIChtX2Z1bGxTY3JlZW5CdXR0b24gJiYgIXRoZW1l
Lmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYUVudGVyRnVsbHNjcmVlbkJ1dHRv
blBhcnQpKQotICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPmhpZGUoKTsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xzOjpsb2FkZWRNZXRhZGF0YSgpCi17Ci0gICAgcmVzZXQoKTsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xzOjpzaG93KCkKLXsKLSAgICBtYWtlT3BhcXVlKCk7Ci0gICAgbV9wYW5l
bC0+c2V0SXNEaXNwbGF5ZWQodHJ1ZSk7Ci0gICAgbV9wYW5lbC0+c2hvdygpOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbHM6OmhpZGUoKQotewotICAgIG1fcGFuZWwtPnNldElzRGlzcGxheWVkKGZh
bHNlKTsKLSAgICBtX3BhbmVsLT5oaWRlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6bWFr
ZU9wYXF1ZSgpCi17Ci0gICAgbV9wYW5lbC0+bWFrZU9wYXF1ZSgpOwotfQotCi12b2lkIE1lZGlh
Q29udHJvbHM6Om1ha2VUcmFuc3BhcmVudCgpCi17Ci0gICAgbV9wYW5lbC0+bWFrZVRyYW5zcGFy
ZW50KCk7Ci19Ci0KLWJvb2wgTWVkaWFDb250cm9sczo6c2hvdWxkSGlkZUNvbnRyb2xzKCkKLXsK
LSAgICByZXR1cm4gIW1fcGFuZWwtPmhvdmVyZWQoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xz
OjpidWZmZXJpbmdQcm9ncmVzc2VkKCkKLXsKLSAgICAvLyBXZSBvbmx5IG5lZWQgdG8gdXBkYXRl
IGJ1ZmZlcmluZyBwcm9ncmVzcyB3aGVuIHBhdXNlZCwgZHVyaW5nIG5vcm1hbAotICAgIC8vIHBs
YXliYWNrIHBsYXliYWNrUHJvZ3Jlc3NlZCgpIHdpbGwgdGFrZSBjYXJlIG9mIGl0LgotICAgIGlm
IChtX21lZGlhQ29udHJvbGxlci0+cGF1c2VkKCkpCi0gICAgICAgIG1fdGltZWxpbmUtPnNldFBv
c2l0aW9uKG1fbWVkaWFDb250cm9sbGVyLT5jdXJyZW50VGltZSgpKTsKLX0KLQotdm9pZCBNZWRp
YUNvbnRyb2xzOjpwbGF5YmFja1N0YXJ0ZWQoKQotewotICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRl
RGlzcGxheVR5cGUoKTsKLSAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlvbihtX21lZGlhQ29udHJv
bGxlci0+Y3VycmVudFRpbWUoKSk7Ci0gICAgdXBkYXRlQ3VycmVudFRpbWVEaXNwbGF5KCk7Ci0K
LSAgICBpZiAobV9pc0Z1bGxzY3JlZW4pCi0gICAgICAgIHN0YXJ0SGlkZUZ1bGxzY3JlZW5Db250
cm9sc1RpbWVyKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6cGxheWJhY2tQcm9ncmVzc2Vk
KCkKLXsKLSAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlvbihtX21lZGlhQ29udHJvbGxlci0+Y3Vy
cmVudFRpbWUoKSk7Ci0gICAgdXBkYXRlQ3VycmVudFRpbWVEaXNwbGF5KCk7Ci0KLSAgICBpZiAo
IW1faXNNb3VzZU92ZXJDb250cm9scyAmJiBtX21lZGlhQ29udHJvbGxlci0+aGFzVmlkZW8oKSkK
LSAgICAgICAgbWFrZVRyYW5zcGFyZW50KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6cGxh
eWJhY2tTdG9wcGVkKCkKLXsKLSAgICBtX3BsYXlCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7
Ci0gICAgbV90aW1lbGluZS0+c2V0UG9zaXRpb24obV9tZWRpYUNvbnRyb2xsZXItPmN1cnJlbnRU
aW1lKCkpOwotICAgIHVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwotICAgIG1ha2VPcGFxdWUo
KTsKLQotICAgIHN0b3BIaWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXIoKTsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xzOjp1cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKQotewotICAgIGRvdWJsZSBu
b3cgPSBtX21lZGlhQ29udHJvbGxlci0+Y3VycmVudFRpbWUoKTsKLSAgICBtX2N1cnJlbnRUaW1l
RGlzcGxheS0+c2V0SW5uZXJUZXh0KFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5mb3JtYXRNZWRp
YUNvbnRyb2xzVGltZShub3cpKTsKLSAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+c2V0Q3VycmVu
dFZhbHVlKG5vdyk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6c2hvd1ZvbHVtZVNsaWRlcigp
Ci17Ci0gICAgaWYgKCFtX21lZGlhQ29udHJvbGxlci0+aGFzQXVkaW8oKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV92b2x1bWVTbGlkZXItPnNob3coKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRy
b2xzOjpjaGFuZ2VkTXV0ZSgpCi17Ci0gICAgbV9wYW5lbE11dGVCdXR0b24tPmNoYW5nZWRNdXRl
KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdlZFZvbHVtZSgpCi17Ci0gICAgaWYg
KG1fdm9sdW1lU2xpZGVyKQotICAgICAgICBzZXRTbGlkZXJWb2x1bWUoKTsKLSAgICBpZiAobV9w
YW5lbE11dGVCdXR0b24gJiYgbV9wYW5lbE11dGVCdXR0b24tPnJlbmRlcmVyKCkpCi0gICAgICAg
IG1fcGFuZWxNdXRlQnV0dG9uLT5yZW5kZXJlcigpLT5yZXBhaW50KCk7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sczo6Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgpCi17Ci0gICAgaWYg
KG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pCi0gICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
czo6cmVmcmVzaENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJpbGl0eSgpCi17Ci0gICAgaWYgKCFt
X3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9tZWRpYUNvbnRyb2xsZXItPmhhc0Nsb3NlZENhcHRpb25zKCkpCi0gICAgICAgIG1fdG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b24tPnNob3coKTsKLSAgICBlbHNlCi0gICAgICAgIG1fdG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b24tPmhpZGUoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpj
bG9zZWRDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpCi17Ci0gICAgcmVmcmVzaENsb3NlZENhcHRpb25z
QnV0dG9uVmlzaWJpbGl0eSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmVudGVyZWRGdWxs
c2NyZWVuKCkKLXsKLSAgICBtX2lzRnVsbHNjcmVlbiA9IHRydWU7Ci0gICAgbV9mdWxsU2NyZWVu
QnV0dG9uLT5zZXRJc0Z1bGxzY3JlZW4odHJ1ZSk7Ci0KLSAgICBpZiAoUGFnZSogcGFnZSA9IGRv
Y3VtZW50KCkucGFnZSgpKQotICAgICAgICBwYWdlLT5jaHJvbWUoKS5zZXRDdXJzb3JIaWRkZW5V
bnRpbE1vdXNlTW92ZXModHJ1ZSk7Ci0KLSAgICBzdGFydEhpZGVGdWxsc2NyZWVuQ29udHJvbHNU
aW1lcigpOwotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBpZiAobV90ZXh0RGlzcGxheUNv
bnRhaW5lcikKLSAgICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+ZW50ZXJlZEZ1bGxzY3Jl
ZW4oKTsKLSNlbmRpZgotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmV4aXRlZEZ1bGxzY3JlZW4o
KQotewotICAgIG1faXNGdWxsc2NyZWVuID0gZmFsc2U7Ci0gICAgbV9mdWxsU2NyZWVuQnV0dG9u
LT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwotICAgIHN0b3BIaWRlRnVsbHNjcmVlbkNvbnRyb2xz
VGltZXIoKTsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgaWYgKG1fdGV4dERpc3BsYXlD
b250YWluZXIpCi0gICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPmV4aXRlZEZ1bGxzY3Jl
ZW4oKTsKLSNlbmRpZgotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQmIGV2ZW50KQotewotICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKGV2ZW50KTsKLQotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
b3ZlckV2ZW50KSB7Ci0gICAgICAgIGlmICghY29udGFpbnNSZWxhdGVkVGFyZ2V0KGV2ZW50KSkg
ewotICAgICAgICAgICAgbV9pc01vdXNlT3ZlckNvbnRyb2xzID0gdHJ1ZTsKLSAgICAgICAgICAg
IGlmICghbV9tZWRpYUNvbnRyb2xsZXItPmNhblBsYXkoKSkgewotICAgICAgICAgICAgICAgIG1h
a2VPcGFxdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoc2hvdWxkSGlkZUNvbnRyb2xzKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHN0YXJ0SGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpIHsKLSAgICAgICAg
aWYgKCFjb250YWluc1JlbGF0ZWRUYXJnZXQoZXZlbnQpKSB7Ci0gICAgICAgICAgICBtX2lzTW91
c2VPdmVyQ29udHJvbHMgPSBmYWxzZTsKLSAgICAgICAgICAgIHN0b3BIaWRlRnVsbHNjcmVlbkNv
bnRyb2xzVGltZXIoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpIHsKLSAgICAg
ICAgaWYgKG1faXNGdWxsc2NyZWVuKSB7Ci0gICAgICAgICAgICAvLyBXaGVuIHdlIGdldCBhIG1v
dXNlIG1vdmUgaW4gZnVsbHNjcmVlbiBtb2RlLCBzaG93IHRoZSBtZWRpYSBjb250cm9scywgYW5k
IHN0YXJ0IGEgdGltZXIKLSAgICAgICAgICAgIC8vIHRoYXQgd2lsbCBoaWRlIHRoZSBtZWRpYSBj
b250cm9scyBhZnRlciBhIDMgc2Vjb25kcyB3aXRob3V0IGEgbW91c2UgbW92ZS4KLSAgICAgICAg
ICAgIG1ha2VPcGFxdWUoKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRIaWRlQ29udHJvbHMoKSkK
LSAgICAgICAgICAgICAgICBzdGFydEhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcigpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6
aGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyRmlyZWQoKQotewotICAgIGlmIChtX21lZGlhQ29u
dHJvbGxlci0+cGF1c2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0Z1bGxz
Y3JlZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2hvdWxkSGlkZUNvbnRyb2xzKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS5wYWdl
KCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zl
cyh0cnVlKTsKLQotICAgIG1ha2VUcmFuc3BhcmVudCgpOwotfQotCi12b2lkIE1lZGlhQ29udHJv
bHM6OnN0YXJ0SGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCkKLXsKLSAgICBpZiAoIW1faXNG
dWxsc2NyZWVuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQo
KS5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2hpZGVG
dWxsc2NyZWVuQ29udHJvbHNUaW1lci5zdGFydE9uZVNob3QocGFnZS0+c2V0dGluZ3MoKS50aW1l
V2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVIaWRpbmdDb250cm9scygpKTsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xzOjpzdG9wSGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCkKLXsKLSAgICBt
X2hpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lci5zdG9wKCk7Ci19Ci0KLWJvb2wgTWVkaWFDb250
cm9sczo6Y29udGFpbnNSZWxhdGVkVGFyZ2V0KEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoIWlz
PE1vdXNlRXZlbnQ+KGV2ZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gcmVs
YXRlZFRhcmdldCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KS5yZWxhdGVkVGFyZ2V0KCk7
Ci0gICAgcmV0dXJuIGlzPE5vZGU+KHJlbGF0ZWRUYXJnZXQpICYmIGNvbnRhaW5zKCZkb3duY2Fz
dDxOb2RlPigqcmVsYXRlZFRhcmdldCkpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQot
Ci12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKQotewotICAgIGlm
IChtX3RleHREaXNwbGF5Q29udGFpbmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRl
eHREaXNwbGF5Q29udGFpbmVyID0gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgIG1fdGV4dERpc3BsYXlDb250YWluZXIgPSB0ZXh0
RGlzcGxheUNvbnRhaW5lci5wdHIoKTsKLQotICAgIGlmIChtX21lZGlhQ29udHJvbGxlcikKLSAg
ICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+c2V0TWVkaWFDb250cm9sbGVyKG1fbWVkaWFD
b250cm9sbGVyKTsKLQotICAgIC8vIEluc2VydCBpdCBiZWZvcmUgdGhlIGZpcnN0IGNvbnRyb2xs
ZXIgZWxlbWVudCBzbyBpdCBhbHdheXMgZGlzcGxheXMgYmVoaW5kIHRoZSBjb250cm9scy4KLSAg
ICBpbnNlcnRCZWZvcmUodGV4dERpc3BsYXlDb250YWluZXIsIG1fcGFuZWwpOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbHM6OnNob3dUZXh0VHJhY2tEaXNwbGF5KCkKLXsKLSAgICBpZiAoIW1fdGV4
dERpc3BsYXlDb250YWluZXIpCi0gICAgICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKLSAg
ICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5zaG93KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
czo6aGlkZVRleHRUcmFja0Rpc3BsYXkoKQotewotICAgIGlmICghbV90ZXh0RGlzcGxheUNvbnRh
aW5lcikKLSAgICAgICAgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIG1fdGV4dERpc3Bs
YXlDb250YWluZXItPmhpZGUoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGVUZXh0
VHJhY2tEaXNwbGF5KCkKLXsKLSAgICBpZiAoIW1fdGV4dERpc3BsYXlDb250YWluZXIpCi0gICAg
ICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKLQotICAgIG1fdGV4dERpc3BsYXlDb250YWlu
ZXItPnVwZGF0ZURpc3BsYXkoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjp0ZXh0VHJhY2tQ
cmVmZXJlbmNlc0NoYW5nZWQoKQotewotICAgIGNsb3NlZENhcHRpb25UcmFja3NDaGFuZ2VkKCk7
Ci0gICAgaWYgKG1fdGV4dERpc3BsYXlDb250YWluZXIpCi0gICAgICAgIG1fdGV4dERpc3BsYXlD
b250YWluZXItPnVwZGF0ZVNpemVzKE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQ6OkZvcmNlVXBkYXRlOjpZZXMpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmNsZWFyVGV4
dERpc3BsYXlDb250YWluZXIoKQotewotICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQot
ICAgICAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5yZW1vdmVDaGlsZHJlbigpOwotfQotCi12
b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5l
ZWRlZCgpCi17Ci0gICAgaWYgKG1fdGV4dERpc3BsYXlDb250YWluZXIpCi0gICAgICAgIG1fdGV4
dERpc3BsYXlDb250YWluZXItPnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5l
ZWRlZCgpOwotfQotCi0jZW5kaWYKLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpzZXRTbGlkZXJWb2x1
bWUoKQotewotICAgIG1fdm9sdW1lU2xpZGVyLT5zZXRWb2x1bWUobV9tZWRpYUNvbnRyb2xsZXIt
Pm11dGVkKCkgPyAwLjAgOiBtX21lZGlhQ29udHJvbGxlci0+dm9sdW1lKCkpOwotfQotCi19Ci0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9scy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmJjYjU3NGIyZjBhMjM5MjhlZThjMTc5ODY1Nzk5
NWNmN2JkOTU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaAorKysgL2Rldi9udWxs
CkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShWSURFTykKLQot
I2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBFdmVudDsKLWNsYXNz
IE1lZGlhUGxheWVyOwotY2xhc3MgUmVuZGVyQm94OwotY2xhc3MgUmVuZGVyTWVkaWE7Ci0KLS8v
IEFuIGFic3RyYWN0IGNsYXNzIHdpdGggdGhlIG1lZGlhIGNvbnRyb2wgZWxlbWVudHMgdGhhdCBh
bGwgcG9ydHMgc3VwcG9ydC4KLWNsYXNzIE1lZGlhQ29udHJvbHMgOiBwdWJsaWMgSFRNTERpdkVs
ZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9scyk7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCB+TWVkaWFDb250cm9scygpID0gZGVmYXVsdDsKLQotICAgIC8vIFRo
aXMgZnVuY3Rpb24gaXMgdG8gYmUgaW1wbGVtZW50ZWQgaW4geW91ciBwb3J0LXNwZWNpZmljIG1l
ZGlhCi0gICAgLy8gY29udHJvbHMgaW1wbGVtZW50YXRpb24gc2luY2UgaXQgd2lsbCByZXR1cm4g
YSBjaGlsZCBpbnN0YW5jZS4KLSAgICBzdGF0aWMgUmVmUHRyPE1lZGlhQ29udHJvbHM+IHRyeUNy
ZWF0ZShEb2N1bWVudCYpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldE1lZGlhQ29udHJvbGxlcihN
ZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqKTsKLQotICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwot
ICAgIHZpcnR1YWwgdm9pZCByZXBvcnRlZEVycm9yKCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRl
ZE1ldGFkYXRhKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwotICAgIHZpcnR1YWwgdm9p
ZCBoaWRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIG1ha2VPcGFxdWUoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgbWFrZVRyYW5zcGFyZW50KCk7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEhpZGVDb250cm9s
cygpOwotCi0gICAgdmlydHVhbCB2b2lkIGJ1ZmZlcmluZ1Byb2dyZXNzZWQoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcGxheWJhY2tTdGFydGVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHBsYXliYWNrUHJv
Z3Jlc3NlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBwbGF5YmFja1N0b3BwZWQoKTsKLQotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVTdGF0dXNEaXNwbGF5KCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1ZvbHVtZVNs
aWRlcigpOwotCi0gICAgdmlydHVhbCB2b2lkIGNoYW5nZWRNdXRlKCk7Ci0gICAgdmlydHVhbCB2
b2lkIGNoYW5nZWRWb2x1bWUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VkQ2xvc2VkQ2Fw
dGlvbnNWaXNpYmlsaXR5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlZnJlc2hDbG9zZWRDYXB0aW9u
c0J1dHRvblZpc2liaWxpdHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlQ2xvc2VkQ2FwdGlv
blRyYWNrTGlzdCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjbG9zZWRDYXB0aW9uVHJhY2tzQ2hh
bmdlZCgpOwotCi0gICAgdmlydHVhbCB2b2lkIGVudGVyZWRGdWxsc2NyZWVuKCk7Ci0gICAgdmly
dHVhbCB2b2lkIGV4aXRlZEZ1bGxzY3JlZW4oKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50cygpIG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIGhpZGVGdWxsc2NyZWVuQ29u
dHJvbHNUaW1lckZpcmVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0SGlkZUZ1bGxzY3JlZW5D
b250cm9sc1RpbWVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BIaWRlRnVsbHNjcmVlbkNvbnRy
b2xzVGltZXIoKTsKLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBzaG93VGV4dFRyYWNr
RGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHRleHRUcmFja1ByZWZlcmVuY2VzQ2hhbmdlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclRl
eHREaXNwbGF5Q29udGFpbmVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgpOwotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICBl
eHBsaWNpdCBNZWRpYUNvbnRyb2xzKERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBjb250YWluc1Jl
bGF0ZWRUYXJnZXQoRXZlbnQmKTsKLQotICAgIHZvaWQgc2V0U2xpZGVyVm9sdW1lKCk7Ci0KLSAg
ICBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqIG1fbWVkaWFDb250cm9sbGVyOwotCi0gICAgLy8g
Q29udGFpbmVyIGZvciB0aGUgbWVkaWEgY29udHJvbCBlbGVtZW50cy4KLSAgICBNZWRpYUNvbnRy
b2xQYW5lbEVsZW1lbnQqIG1fcGFuZWw7Ci0KLSAgICAvLyBDb250YWluZXIgZm9yIHRoZSB0ZXh0
IHRyYWNrIGN1ZXMuCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQqIG1fdGV4dERpc3BsYXlDb250YWluZXI7Ci0jZW5kaWYK
LQotICAgIC8vIE1lZGlhIGNvbnRyb2wgZWxlbWVudHMuCi0gICAgTWVkaWFDb250cm9sUGxheUJ1
dHRvbkVsZW1lbnQqIG1fcGxheUJ1dHRvbjsKLSAgICBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURp
c3BsYXlFbGVtZW50KiBtX2N1cnJlbnRUaW1lRGlzcGxheTsKLSAgICBNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQqIG1fdGltZWxpbmU7Ci0gICAgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9u
RWxlbWVudCogbV9wYW5lbE11dGVCdXR0b247Ci0gICAgTWVkaWFDb250cm9sUGFuZWxWb2x1bWVT
bGlkZXJFbGVtZW50KiBtX3ZvbHVtZVNsaWRlcjsKLSAgICBNZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQqIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b247Ci0g
ICAgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQqIG1fZnVsbFNjcmVlbkJ1dHRv
bjsKLQotICAgIFRpbWVyIG1faGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyOwotICAgIGJvb2wg
bV9pc0Z1bGxzY3JlZW47Ci0gICAgYm9vbCBtX2lzTW91c2VPdmVyQ29udHJvbHM7Ci0KLXByaXZh
dGU6Ci0gICAgYm9vbCBpc01lZGlhQ29udHJvbHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVl
OyB9Ci19OwotCi1pbmxpbmUgTWVkaWFDb250cm9scyogdG9NZWRpYUNvbnRyb2xzKE5vZGUqIG5v
ZGUpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwgbm9k
ZS0+aXNNZWRpYUNvbnRyb2xzKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRy
b2xzKj4obm9kZSk7Ci19Ci0KLS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5u
ZWNjZXNzYXJ5IGNhc3QuCi12b2lkIHRvTWVkaWFDb250cm9scyhjb25zdCBNZWRpYUNvbnRyb2xz
Kik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVk
aWFBRi5jcHAKaW5kZXggM2Q4Y2Y0ZmI4Zjc3ZmU4MGIzZmI0NGNkN2VlOWQ3OWE4NTI0NWMxMi4u
MmI1MjQyN2Q3ODAyOGQ0ZGNjNjU4NGFjNzk5ZDc3YzE5OWYyNjgwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKQEAg
LTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAi
TG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNZWRp
YUNvbnRyb2xFbGVtZW50cy5oIgogI2luY2x1ZGUgIlRleHRUcmFja0xpc3QuaCIKICNpbmNsdWRl
ICJVc2VyU3R5bGVTaGVldFR5cGVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKaW5kZXggZmNkZWViODQyNTlkZGM3YTQ4NTU1ODJhYjg5YmM3OGZhNTI2YWY2Ni4uMzc1
NDYxYzMxOTljZGRhZTI4ZDUyNjhmMjE4OWExMzM0ZTJjYWY2ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
CkBAIC0xMDc3LDE1ICsxMDc3LDExIEBAIHZvaWQgUGFnZTo6c2V0UGFnZVNjYWxlRmFjdG9yKGZs
b2F0IHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBib29sIGluU3RhYmxlCiAjZW5kaWYK
ICAgICB9CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChpblN0
YWJsZVN0YXRlKSB7CiAgICAgICAgIGZvckVhY2hNZWRpYUVsZW1lbnQoW10gKEhUTUxNZWRpYUVs
ZW1lbnQmIGVsZW1lbnQpIHsKICAgICAgICAgICAgIGVsZW1lbnQucGFnZVNjYWxlRmFjdG9yQ2hh
bmdlZCgpOwogICAgICAgICB9KTsKICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShpblN0
YWJsZVN0YXRlKTsKLSNlbmRpZgogfQogCiB2b2lkIFBhZ2U6OnNldERlbGVnYXRlc1NjYWxpbmco
Ym9vbCBkZWxlZ2F0ZXNTY2FsaW5nKQpAQCAtMTEzMiwxMSArMTEyOCw5IEBAIHZvaWQgUGFnZTo6
c2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbihVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uIHVzZXJJbnRlCiAKICAgICBtX3VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gPSB1c2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOwogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKICAgICBmb3JFYWNoTWVkaWFFbGVtZW50KFtdIChIVE1MTWVkaWFFbGVtZW50JiBlbGVt
ZW50KSB7CiAgICAgICAgIGVsZW1lbnQudXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkNoYW5n
ZWQoKTsKICAgICB9KTsKLSNlbmRpZgogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4Njk2NjM2MGRiOWE5ZThmMTk3YjIxZjYwOTMxYzg2NWFkYjY4
MDlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAs
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyTWVkaWFDb250cm9scy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVk
ZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5o
IgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFp
bmVyKTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChSZW5kZXJNZWRpYUNvbnRyb2xUaW1l
bGluZUNvbnRhaW5lcik7Ci0KLVJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyOjpSZW5k
ZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHls
ZSYmIHN0eWxlKQotICAgIDogUmVuZGVyQmxvY2tGbG93KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUp
KQotewotfQotCi12b2lkIFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQo
KQotewotICAgIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0KCk7Ci0KLSAgICBpZiAoc3R5bGUoKS5k
aXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6Ok5vbmUgfHwgIWlzPFJlbmRlckJveD4obmV4dFNpYmxp
bmcoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckJveCYgYnV0dG9uQm94ID0gZG93
bmNhc3Q8UmVuZGVyQm94PigqbmV4dFNpYmxpbmcoKSk7Ci0gICAgaW50IGFic29sdXRlT2Zmc2V0
VG9wID0gYnV0dG9uQm94LmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KDAsIC1zaXplKCkuaGVp
Z2h0KCkpKS55KCk7Ci0KLSAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJs
ZXIodmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKSk7Ci0KLSAgICAvLyBJZiB0aGUg
c2xpZGVyIHdvdWxkIGJlIHJlbmRlcmVkIG91dHNpZGUgdGhlIHBhZ2UsIGl0IHNob3VsZCBiZSBt
b3ZlZCBiZWxvdyB0aGUgY29udHJvbHMuCi0gICAgaWYgKFVOTElLRUxZKGFic29sdXRlT2Zmc2V0
VG9wIDwgMCkpCi0gICAgICAgIHNldFkoYnV0dG9uQm94Lm9mZnNldFRvcCgpICsgdGhlbWUoKS52
b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihidXR0b25Cb3gsIHNpemUoKSkueSgpKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZW5kZXJNZWRpYUNvbnRy
b2xUaW1lbGluZUNvbnRhaW5lcjo6UmVuZGVyTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXIo
RWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKLSAgICA6IFJlbmRlckZsZXhp
YmxlQm94KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQotewotfQotCi0vLyBXZSB3YW50IHRoZSB0
aW1lbGluZSBzbGlkZXIgdG8gYmUgYXQgbGVhc3QgMTAwIHBpeGVscyB3aWRlLgotLy8gRklYTUU6
IEVsaW1pbmF0ZSBoYXJkLWNvZGVkIHdpZHRocyBhbHRvZ2V0aGVyLgotc3RhdGljIGNvbnN0IGlu
dCBtaW5XaWR0aFRvRGlzcGxheVRpbWVEaXNwbGF5cyA9IDQ1ICsgMTAwICsgNDU7Ci0KLXZvaWQg
UmVuZGVyTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXI6OmxheW91dCgpCi17Ci0gICAgUmVu
ZGVyRmxleGlibGVCb3g6OmxheW91dCgpOwotCi0gICAgTGF5b3V0U3RhdGVEaXNhYmxlciBsYXlv
dXRTdGF0ZURpc2FibGVyKHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkpOwotICAg
IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudCogY29udGFpbmVyID0gc3RhdGlj
X2Nhc3Q8TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50Kj4oZWxlbWVudCgpKTsK
LSAgICBjb250YWluZXItPnNldFRpbWVEaXNwbGF5c0hpZGRlbih3aWR0aCgpLnRvSW50KCkgPCBt
aW5XaWR0aFRvRGlzcGxheVRpbWVEaXNwbGF5cyk7Ci19Ci0KLSNpZiBQTEFURk9STShXSU4pICYm
IFVTRShDRykKLQotdm9pZCBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShXSU4pICYmIFVTRShDRykKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOWY2MTEzNjAxN2QwOTIxN2FkODRjNTI0YTZjMmNiMGVhNmMxYzlmZS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5j
bHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJNZWRpYVZvbHVtZVNsaWRlckNv
bnRhaW5lciBmaW5hbCA6IHB1YmxpYyBSZW5kZXJCbG9ja0Zsb3cgewotICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIpOwotcHVibGljOgot
ICAgIFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKEVsZW1lbnQmLCBSZW5kZXJTdHls
ZSYmKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGxheW91dCgpIG92ZXJyaWRlOwotfTsKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBSZW5kZXJNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lciBmaW5hbCA6IHB1YmxpYyBSZW5kZXJGbGV4aWJsZUJveCB7Ci0gICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChSZW5kZXJNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5l
cik7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXIoRWxl
bWVudCYsIFJlbmRlclN0eWxlJiYpOwotCi1wcml2YXRlOgotICAgIHZvaWQgbGF5b3V0KCkgb3Zl
cnJpZGU7Ci0gICAgYm9vbCBpc0ZsZXhpYmxlQm94SW1wbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KLX07Ci0KLSNpZiBQTEFURk9STShXSU4pICYmIFVTRShDRykKLQotY2xhc3Mg
UmVuZGVyTWVkaWFDb250cm9scyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYWRqdXN0TWVk
aWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmKTsKLX07Ci0KLSNlbmRpZiAvLyBQTEFURk9S
TShXSU4pICYmIFVTRShDRykKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNsaWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcApp
bmRleCAzN2VjOGY1NDk3MDRhOWIyY2VlZjQzZjJhOThmZGE4MDYzY2ZhZDBkLi4xNjgxZjlkMWZj
MGI5OTIyNzAxYWZiMzM5ZDFiM2I2ZjE3MGM2OTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2xpZGVyLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2Vy
SWRpb21zLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNsdWRlICJN
b3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCA3ODA5MjVjMjlj
ZWYwNjQ0ZTAzY2EyYjVjMmU1YjcxZmUxZWMyYTY3Li5lOWRkMTQ5NDU4NjRiYTliZDhlODVhNDUw
ODQ3ZTJlNjI1MmQxNjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5j
cHAKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1
ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVBZHdhaXRhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUFkd2FpdGEuY3BwCmluZGV4IGIxOGM0ZDA1ZDUxZTgw
ZDRmMmVhNjEwZjY2YTcyYzI3NTY4N2Q2NzYuLjMxMDY2YTQ5ZTc1MTllNjJmYmQxNmQ3YmFhN2E2
YmM0YTNiMzQxYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUFkd2FpdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUFkd2FpdGEuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgorI2luY2x1ZGUgIk1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWludElu
Zm8uaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
QEAgLTQ5Miw5ICs0OTIsMjEgQEAgYm9vbCBSZW5kZXJUaGVtZUFkd2FpdGE6OnBhaW50U2xpZGVy
VGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnMKIH0KIAogI2lmIEVO
QUJMRShWSURFTykKK3N0YXRpYyBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gcGFyZW50TWVkaWFF
bGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8Tm9kZT4gbWVkaWFOb2RlID0gbm9kZS0+c2hhZG93SG9z
dCgpOworICAgIGlmICghbWVkaWFOb2RlKQorICAgICAgICBtZWRpYU5vZGUgPSBjb25zdF9jYXN0
PE5vZGUqPihub2RlKTsKKyAgICBpZiAoIWlzPEhUTUxNZWRpYUVsZW1lbnQ+KCptZWRpYU5vZGUp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE1lZGlh
RWxlbWVudD4obWVkaWFOb2RlLmdldCgpKTsKK30KKwogYm9vbCBSZW5kZXJUaGVtZUFkd2FpdGE6
OnBhaW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAg
YXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQocmVuZGVyT2JqZWN0KTsKKyAg
ICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudChyZW5kZXJPYmplY3Qubm9k
ZSgpKTsKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC01NDIsNyArNTU0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUFkd2FpdGE6OnBhaW50TWVkaWFTbGlk
ZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwKIAogYm9vbCBSZW5kZXJU
aGVtZUFkd2FpdGE6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7Ci0gICAgYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQo
cmVuZGVyT2JqZWN0KTsKKyAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVu
dChyZW5kZXJPYmplY3Qubm9kZSgpKTsKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ29j
b2EuaAppbmRleCAzYjJiNTBkZGQ1OTUyZGMxZWY1ZDhiMDMwNDFkOTMzYzhiMzc5ZTlhLi4xOWJj
MzkyZWUzMWY2OTUzNDk1MjJkMjE1ZGY5OTVmZDVmYTgxMjRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLmgKQEAgLTI4LDkgKzI4LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAotI2lmIEVOQUJM
RShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiBPQkpDX0NMQVNTIE5TRGF0ZUNvbXBvbmVudHNGb3Jt
YXR0ZXI7Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NCwxMiArNDIsOCBA
QCBwcml2YXRlOgogI2VuZGlmCiAKIHByb3RlY3RlZDoKLSNpZiBFTkFCTEUoVklERU8pCiAgICAg
U3RyaW5nIG1lZGlhQ29udHJvbHNGb3JtYXR0ZWRTdHJpbmdGb3JEdXJhdGlvbihkb3VibGUpIG92
ZXJyaWRlOwotI2VuZGlmCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBS
ZXRhaW5QdHI8TlNEYXRlQ29tcG9uZW50c0Zvcm1hdHRlcj4gbV9kdXJhdGlvbkZvcm1hdHRlcjsK
LSNlbmRpZgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
b2NvYS5tbQppbmRleCA4YjZjNWVkYjM4NDIxY2M3YmVlZGMxYzk2ZWZhNDIzZGI3YTIxYzUzLi42
M2EwNWY2NjUyOTEwZjBhYzJjODg4Njk1ZjJiNzgwMGZmYTdkNzhkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5tbQpAQCAtMTI3LDExICsxMjcsOCBAQCBi
b29sIFJlbmRlclRoZW1lQ29jb2E6OnBhaW50QXBwbGVQYXlCdXR0b24oY29uc3QgUmVuZGVyT2Jq
ZWN0JiByZW5kZXJlciwgY29uc3QgUAogCiAjZW5kaWYgLy8gRU5BQkxFKEFQUExFX1BBWSkKIAot
I2lmIEVOQUJMRShWSURFTykKLQogU3RyaW5nIFJlbmRlclRoZW1lQ29jb2E6Om1lZGlhQ29udHJv
bHNGb3JtYXR0ZWRTdHJpbmdGb3JEdXJhdGlvbihjb25zdCBkb3VibGUgZHVyYXRpb25JblNlY29u
ZHMpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAoIXN0ZDo6
aXNmaW5pdGUoZHVyYXRpb25JblNlY29uZHMpKQogICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklO
RygiaW5kZWZpbml0ZSB0aW1lIiwgImFjY2Vzc2liaWxpdHkgaGVscCB0ZXh0IGZvciBhbiBpbmRl
ZmluaXRlIG1lZGlhIGNvbnRyb2xsZXIgdGltZSB2YWx1ZSIpOwogCkBAIC0xNDUsMTEgKzE0Miw2
IEBAIFN0cmluZyBSZW5kZXJUaGVtZUNvY29hOjptZWRpYUNvbnRyb2xzRm9ybWF0dGVkU3RyaW5n
Rm9yRHVyYXRpb24oY29uc3QgZG91YmxlIGR1CiAgICAgfQogICAgIHJldHVybiBbbV9kdXJhdGlv
bkZvcm1hdHRlci5nZXQoKSBzdHJpbmdGcm9tVGltZUludGVydmFsOmR1cmF0aW9uSW5TZWNvbmRz
XTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotI2Vsc2UKLSAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKLSNlbmRpZgogfQogCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQotCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KaW5kZXggMDlhMTJkYzVk
YWMxYTFiMjQ5ZTAwMTdjYjRjNjBmMmRlOWJkZmQ1YS4uMTJmZDdmZmYyZmQ5MjdhMmYwZTI3YThj
MGU3YjNkYzRmOTBiYzcwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUlPUy5tbQpAQCAtMTM1OCwzMCArMTM1OCwyMSBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjp1cGRh
dGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCB2YWx1ZUlELCBGb250Qwog
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMobm9ybWFsSXRhbGljVmFsdWUoKSk7CiB9CiAK
LSNpZiBFTkFCTEUoVklERU8pCiBTdHJpbmcgUmVuZGVyVGhlbWVJT1M6Om1lZGlhQ29udHJvbHNT
dHlsZVNoZWV0KCkKIHsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlm
IChtX2xlZ2FjeU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0LmlzRW1wdHkoKSkKICAgICAgICAgbV9s
ZWdhY3lNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVu
dHNPZkZpbGU6W1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViQ29yZVJlbmRlclRoZW1lQnVu
ZGxlIGNsYXNzXV0gcGF0aEZvclJlc291cmNlOkAibWVkaWFDb250cm9sc2lPUyIgb2ZUeXBlOkAi
Y3NzIl0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKICAgICByZXR1
cm4gbV9sZWdhY3lNZWRpYUNvbnRyb2xzU3R5bGVTaGVldDsKLSNlbHNlCi0gICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAogU3RyaW5nIFJlbmRlclRoZW1lSU9TOjptb2Rlcm5N
ZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5t
b2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChtX21lZGlhQ29udHJv
bHNTdHlsZVNoZWV0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fbWVkaWFDb250cm9sc1N0eWxl
U2hlZXQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlOltbTlNCdW5kbGUgYnVu
ZGxlRm9yQ2xhc3M6W1dlYkNvcmVSZW5kZXJUaGVtZUJ1bmRsZSBjbGFzc11dIHBhdGhGb3JSZXNv
dXJjZTpAIm1vZGVybi1tZWRpYS1jb250cm9scyIgb2ZUeXBlOkAiY3NzIiBpbkRpcmVjdG9yeTpA
Im1vZGVybi1tZWRpYS1jb250cm9scyJdIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVy
cm9yOm5pbF07CiAgICAgICAgIHJldHVybiBtX21lZGlhQ29udHJvbHNTdHlsZVNoZWV0OwogICAg
IH0KICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbHNlCi0gICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJUaGVtZUlPUzo6cHVyZ2VDYWNoZXMoKQpA
QCAtMTM5NCw3ICsxMzg1LDYgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6cHVyZ2VDYWNoZXMoKQog
CiBTdHJpbmcgUmVuZGVyVGhlbWVJT1M6Om1lZGlhQ29udHJvbHNTY3JpcHQoKQogewotI2lmIEVO
QUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkubW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoKSkgewogICAg
ICAgICBpZiAobV9tZWRpYUNvbnRyb2xzU2NyaXB0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
TlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViQ29yZVJlbmRl
clRoZW1lQnVuZGxlIGNsYXNzXV07CkBAIC0xNDE5LDI3ICsxNDA5LDE4IEBAIFN0cmluZyBSZW5k
ZXJUaGVtZUlPUzo6bWVkaWFDb250cm9sc1NjcmlwdCgpCiAgICAgICAgIG1fbGVnYWN5TWVkaWFD
b250cm9sc1NjcmlwdCA9IHNjcmlwdEJ1aWxkZXIudG9TdHJpbmcoKTsKICAgICB9CiAgICAgcmV0
dXJuIG1fbGVnYWN5TWVkaWFDb250cm9sc1NjcmlwdDsKLSNlbHNlCi0gICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAogU3RyaW5nIFJlbmRlclRoZW1lSU9TOjptZWRpYUNvbnRy
b2xzQmFzZTY0U3RyaW5nRm9ySWNvbk5hbWVBbmRUeXBlKGNvbnN0IFN0cmluZyYgaWNvbk5hbWUs
IGNvbnN0IFN0cmluZyYgaWNvblR5cGUpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKICAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
bW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7CiAKICAgICBTdHJpbmcgZGlyZWN0b3J5ID0gIm1vZGVybi1tZWRpYS1jb250cm9scy9pbWFn
ZXMiOwogICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dl
YkNvcmVSZW5kZXJUaGVtZUJ1bmRsZSBjbGFzc11dOwogICAgIHJldHVybiBbW05TRGF0YSBkYXRh
V2l0aENvbnRlbnRzT2ZGaWxlOltidW5kbGUgcGF0aEZvclJlc291cmNlOmljb25OYW1lIG9mVHlw
ZTppY29uVHlwZSBpbkRpcmVjdG9yeTpkaXJlY3RvcnldXSBiYXNlNjRFbmNvZGVkU3RyaW5nV2l0
aE9wdGlvbnM6MF07Ci0jZWxzZQotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotI2VuZGlmCiB9
CiAKLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCi0KIHN0cnVjdCBDU1NWYWx1ZUlEQW5kU2VsZWN0
b3IgewogICAgIENTU1ZhbHVlSUQgY3NzVmFsdWVJRDsKICAgICBTRUwgc2VsZWN0b3I7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXggMzE4ZWI4MmQ5YWQ1
N2Q3ZDQzNWE1YzE3OTc5NjhkM2VlNzZiOWZkYy4uMGUzNzE4ODYyMjhjMWIxNmIyNjJlOGQ2YTA2
Mjk0MmNiODJjNTljNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbQpAQCAtNDgsMTQgKzQ4LDEyIEBACiAjaW1wb3J0ICJMb2NhbEN1cnJlbnRHcmFwaGljc0Nv
bnRleHQuaCIKICNpbXBvcnQgIkxvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaCIKICNpbXBv
cnQgIkxvY2FsaXplZFN0cmluZ3MuaCIKLSNpbXBvcnQgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgi
CiAjaW1wb3J0ICJQYWdlLmgiCiAjaW1wb3J0ICJQYWludEluZm8uaCIKICNpbXBvcnQgIlBhdGhV
dGlsaXRpZXMuaCIKICNpbXBvcnQgIlJlbmRlckF0dGFjaG1lbnQuaCIKICNpbXBvcnQgIlJlbmRl
ckxheWVyLmgiCiAjaW1wb3J0ICJSZW5kZXJNZWRpYS5oIgotI2ltcG9ydCAiUmVuZGVyTWVkaWFD
b250cm9scy5oIgogI2ltcG9ydCAiUmVuZGVyUHJvZ3Jlc3MuaCIKICNpbXBvcnQgIlJlbmRlclNs
aWRlci5oIgogI2ltcG9ydCAiUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uaCIKQEAgLTI5NiwzMSAr
Mjk0LDIxIEBAIE5TVmlldyAqUmVuZGVyVGhlbWVNYWM6OmRvY3VtZW50Vmlld0Zvcihjb25zdCBS
ZW5kZXJPYmplY3QmIG8pIGNvbnN0CiAgICAgcmV0dXJuIFRoZW1lTWFjOjplbnN1cmVkVmlldygm
by52aWV3KCkuZnJhbWVWaWV3KCksIHN0YXRlcyk7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi0K
IFN0cmluZyBSZW5kZXJUaGVtZU1hYzo6bWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQogewotI2lm
IEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKG1fbGVnYWN5TWVkaWFDb250
cm9sc1N0eWxlU2hlZXQuaXNFbXB0eSgpKQogICAgICAgICBtX2xlZ2FjeU1lZGlhQ29udHJvbHNT
dHlsZVNoZWV0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTpbW05TQnVuZGxl
IGJ1bmRsZUZvckNsYXNzOltXZWJDb3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xhc3NdXSBwYXRoRm9y
UmVzb3VyY2U6QCJtZWRpYUNvbnRyb2xzQXBwbGUiIG9mVHlwZTpAImNzcyJdIGVuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07CiAgICAgcmV0dXJuIG1fbGVnYWN5TWVkaWFD
b250cm9sc1N0eWxlU2hlZXQ7Ci0jZWxzZQotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotI2Vu
ZGlmCiB9CiAKIFN0cmluZyBSZW5kZXJUaGVtZU1hYzo6bW9kZXJuTWVkaWFDb250cm9sc1N0eWxl
U2hlZXQoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubW9kZXJuTWVkaWFDb250cm9s
c0VuYWJsZWQoKSkgewogICAgICAgICBpZiAobV9tZWRpYUNvbnRyb2xzU3R5bGVTaGVldC5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBtX21lZGlhQ29udHJvbHNTdHlsZVNoZWV0ID0gW05TU3RyaW5n
IHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTpbW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltXZWJD
b3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xhc3NdXSBwYXRoRm9yUmVzb3VyY2U6QCJtb2Rlcm4tbWVk
aWEtY29udHJvbHMiIG9mVHlwZTpAImNzcyIgaW5EaXJlY3Rvcnk6QCJtb2Rlcm4tbWVkaWEtY29u
dHJvbHMiXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdOwogICAgICAg
ICByZXR1cm4gbV9tZWRpYUNvbnRyb2xzU3R5bGVTaGVldDsKICAgICB9CiAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7Ci0jZWxzZQotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotI2VuZGlmCiB9
CiAKIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnB1cmdlQ2FjaGVzKCkKQEAgLTMzNSw3ICszMjMsNiBA
QCB2b2lkIFJlbmRlclRoZW1lTWFjOjpwdXJnZUNhY2hlcygpCiAKIFN0cmluZyBSZW5kZXJUaGVt
ZU1hYzo6bWVkaWFDb250cm9sc1NjcmlwdCgpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xT
X1NDUklQVCkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5tb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChtX21lZGlhQ29u
dHJvbHNTY3JpcHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBOU0J1bmRsZSAqYnVuZGxlID0g
W05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltXZWJDb3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xhc3Nd
XTsKQEAgLTM1MywyNyArMzQwLDE4IEBAIFN0cmluZyBSZW5kZXJUaGVtZU1hYzo6bWVkaWFDb250
cm9sc1NjcmlwdCgpCiAgICAgICAgIG1fbGVnYWN5TWVkaWFDb250cm9sc1NjcmlwdCA9IG1ha2VT
dHJpbmcoU3RyaW5nIHsgbG9jYWxpemVkU3RyaW5ncyB9LCBTdHJpbmcgeyBzY3JpcHQgfSk7CiAg
ICAgfQogICAgIHJldHVybiBtX2xlZ2FjeU1lZGlhQ29udHJvbHNTY3JpcHQ7Ci0jZWxzZQotICAg
IHJldHVybiBlbXB0eVN0cmluZygpOwotI2VuZGlmCiB9CiAKIFN0cmluZyBSZW5kZXJUaGVtZU1h
Yzo6bWVkaWFDb250cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5kVHlwZShjb25zdCBTdHJp
bmcmIGljb25OYW1lLCBjb25zdCBTdHJpbmcmIGljb25UeXBlKQogewotI2lmIEVOQUJMRShNRURJ
QV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLm1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKCkpCiAgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwogCiAgICAgTlNTdHJpbmcgKmRpcmVjdG9yeSA9IEAibW9kZXJuLW1l
ZGlhLWNvbnRyb2xzL2ltYWdlcyI7CiAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBi
dW5kbGVGb3JDbGFzczpbV2ViQ29yZVJlbmRlclRoZW1lQnVuZGxlIGNsYXNzXV07CiAgICAgcmV0
dXJuIFtbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZkZpbGU6W2J1bmRsZSBwYXRoRm9yUmVzb3Vy
Y2U6aWNvbk5hbWUgb2ZUeXBlOmljb25UeXBlIGluRGlyZWN0b3J5OmRpcmVjdG9yeV1dIGJhc2U2
NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9uczowXTsKLSNlbHNlCi0gICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7Ci0jZW5kaWYKIH0KIAotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKLQogI2lmIEVOQUJM
RShTRVJWSUNFX0NPTlRST0xTKQogCiBTdHJpbmcgUmVuZGVyVGhlbWVNYWM6OmltYWdlQ29udHJv
bHNTdHlsZVNoZWV0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVXaW4uY3BwCmluZGV4IGNmZDlmMjVjMzYyNmQ1MGViYWQzMmYyZTVjYTAwOTcyZTg1ZWY2MWUu
Ljk0MjJmMmVjMWE1YzUzZTUzYmI5ZDU3ZDQ2MTk5OWE2ZjliOGJkODIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcApAQCAtNDIsMTAgKzQyLDYgQEAKICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3dpbi9HRElP
YmplY3QuaD4KIAotI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJSZW5kZXJNZWRpYUNvbnRy
b2xzLmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgPHRjaGFyLmg+CiAKIC8qIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDk0NWRkZmQ1NzZkMjZmZTNiODI3OGNkMjY5MGVjMGZh
NGU4ZjVlZjYuLjdhMjVlYWIzNTFjYTM5MTNhOTcwZDQwODJhZjRiMTdiNDUyZTMwMDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTQ1MzEsMTIgKzQ1MzEsNyBAQCBFeGNl
cHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6cGF0aFN0cmluZ1dpdGhTaHJpbmtXcmFwcGVkUmVj
dHMoY29uc3QgVmVjdG9yPGRvdQogCiBTdHJpbmcgSW50ZXJuYWxzOjpnZXRDdXJyZW50TWVkaWFD
b250cm9sc1N0YXR1c0ZvckVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQog
ewotI2lmICFFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAgIFVOVVNFRF9QQVJBTSht
ZWRpYUVsZW1lbnQpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLSNlbHNlCiAgICAgcmV0dXJuIG1l
ZGlhRWxlbWVudC5nZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1cygpOwotI2VuZGlmCiB9CiAK
ICNpZiAhUExBVEZPUk0oQ09DT0EpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395281</attachid>
            <date>2020-04-02 11:28:38 -0700</date>
            <delta_ts>2020-04-02 12:10:02 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-209875-20200402112837.patch</filename>
            <type>text/plain</type>
            <size>216115</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5MzcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmJiYjIxNzcyYTM2ZDUw
ZWM4NjIwN2FjZWM1NTVkMjlhYTJkOTVhMC4uMTY3OGJlY2QwYWUzYjNiMmJkODJhNThiNjFiYzdm
MzBiODZkNTY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAyMC0wNC0wMSAgRXJp
YyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdW51
c2VkIG1lZGlhIGNvbnRyb2xzIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwOTg3NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjExNzI3Mzg+
CisKKyAgICAgICAgUmVtb3ZlIGNvZGUgZm9yIHRoZSwgbm93IHVudXNlZCwgQysrIGJhc2VkIG1l
ZGlhIGNvbnRyb2xzLgorCisgICAgICAgIFJldmlld2VkIGJ5IERhbmllbCBCYXRlcy4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLgorCisgICAgICAgICogTW9k
dWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29udHJvbHNIb3N0Ojp0ZXh0VHJhY2tDb250YWluZXIpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oOgorICAgICAgICAqIE1vZHVs
ZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbToKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUZyb21SZW5kZXJlcik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5TWVkaWFDb250cm9scy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oOiBSZW1vdmVkLgorICAgICAgICAqIGRvbS9O
b2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc01lZGlhQ29udHJvbEVsZW1lbnQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNNZWRpYUNvbnRyb2xzIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp+SFRNTE1lZGlhRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlQWZ0ZXJE
ZXRhY2hlZFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRl
UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TWVk
aWFSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYUxv
YWRpbmdGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0TmV0
d29ya1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNoYW5nZU5l
dHdvcmtTdGF0ZUZyb21Mb2FkaW5nVG9JZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6cHJvZ3Jlc3NFdmVudFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6cGxheWJhY2tQcm9ncmVzc1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6YWRkVGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnJlbW92ZVRleHRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpkaWRBZGRUZXh0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6ZW5zdXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6dXBkYXRlQ2FwdGlvbkNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjpsYXlvdXRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhY2tzKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyQ2hhcmFjdGVyaXN0aWNDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVZvbHVtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmRpZEJlY29tZUZ1bGxzY3JlZW5FbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OndpbGxTdG9wQmVpbmdGdWxsc2NyZWVu
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tS
ZWFkeVN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpj
b25maWd1cmVUZXh0VHJhY2tEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZVRleHRUcmFja0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNldENsb3NlZENhcHRpb25zVmlz
aWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVNZWRp
YUNvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
c2V0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpnZXRD
dXJyZW50TWVkaWFDb250cm9sc1N0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjpjbG9zZUNhcHRpb25UcmFja3NDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhQ29udHJvbHMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6aGFzTWVkaWFDb250cm9scyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVN
ZWRpYUNvbnRyb2xzKTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhQ29udHJvbHNIb3N0
KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5o
OiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5o
OiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wYXJlQ3VlSW50ZXJ2YWxGb3JEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZURpc3BsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6
dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnByb2Nlc3NBY3Rp
dmVWVFRDdWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudDo6dXBkYXRlQWN0aXZlQ3Vlc0ZvbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVRleHRTdHJva2VT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNsZWFyVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6ZW50ZXJlZEZ1
bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudDo6ZXhpdGVkRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVWaWRlb0Rpc3BsYXlTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6
OnVwZGF0ZVNpemVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dGV4
dFRyYWNrUmVwcmVzZW50YXRpb25Cb3VuZHNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmhpZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6c2hvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojppc1No
b3dpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29u
dGFpbmVyRWxlbWVudDo6bG9nZ2VyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmxvZ0lkZW50aWZpZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9n
Q2hhbm5lbCBjb25zdCk6CisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRp
YUNvbnRyb2xzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xzLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVk
aWFBRi5jcHA6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2U6OnNldFBhZ2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRVc2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVk
aWFDb250cm9scy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlh
Q29udHJvbHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZUFkd2FpdGEuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZUNvY29hLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ29jb2EubW06Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNvY29hOjptZWRpYUNvbnRyb2xzRm9ybWF0dGVk
U3RyaW5nRm9yRHVyYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjptZWRpYUNvbnRyb2xzU3R5bGVT
aGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6bW9kZXJuTWVkaWFDb250
cm9sc1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6Om1lZGlh
Q29udHJvbHNTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6Om1lZGlh
Q29udHJvbHNCYXNlNjRTdHJpbmdGb3JJY29uTmFtZUFuZFR5cGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
OjptZWRpYUNvbnRyb2xzU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6bW9kZXJuTWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVNYWM6Om1lZGlhQ29udHJvbHNTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVNYWM6Om1lZGlhQ29udHJvbHNCYXNlNjRTdHJpbmdGb3JJY29uTmFtZUFuZFR5
cGUpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6Z2V0Q3VycmVudE1lZGlhQ29udHJvbHNTdGF0dXNGb3JFbGVtZW50KToKKwog
MjAyMC0wNC0wMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIGh0
dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLWZvbnRmYWNlc2V0Lmh0bWwgaXMgZmxha3kg
Y3Jhc2hpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9s
cy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29u
dHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCmluZGV4IDUwOGI5YTE4ZWVmMjM4M2FiNjFiOTlj
ZjY1ZjU2NTJiY2I5NTc2NzcuLjI3NTI2MWU5OThkMzFmMTY4OTI5YTQ5MjM4NzY3YTgxYWYzNDgy
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRp
YUNvbnRyb2xzSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRy
b2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcApAQCAtMjUsMTQgKzI1LDEyIEBACiAKICNpbmNsdWRl
ICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0KICNpbmNs
dWRlICJNZWRpYUNvbnRyb2xzSG9zdC5oIgogCiAjaW5jbHVkZSAiQ2FwdGlvblVzZXJQcmVmZXJl
bmNlcy5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKKyNpbmNsdWRlICJNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0xNTksMTEg
KzE1NywxMCBAQCB2b2lkIE1lZGlhQ29udHJvbHNIb3N0OjpzZXRTZWxlY3RlZFRleHRUcmFjayhU
ZXh0VHJhY2sqIHRyYWNrKQogCiBFbGVtZW50KiBNZWRpYUNvbnRyb2xzSG9zdDo6dGV4dFRyYWNr
Q29udGFpbmVyKCkKIHsKLSAgICBpZiAoIW1fdGV4dFRyYWNrQ29udGFpbmVyICYmIG1fbWVkaWFF
bGVtZW50KSB7Ci0gICAgICAgIG1fdGV4dFRyYWNrQ29udGFpbmVyID0gTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgp
KTsKLSAgICAgICAgbV90ZXh0VHJhY2tDb250YWluZXItPnNldE1lZGlhQ29udHJvbGxlcihtX21l
ZGlhRWxlbWVudC5nZXQoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX3RleHRUcmFja0NvbnRhaW5l
ci5nZXQoKTsKKyAgICBpZiAoIW1fdGV4dFRyYWNrQ29udGFpbmVyICYmIG1fbWVkaWFFbGVtZW50
KQorICAgICAgICBtX3RleHRUcmFja0NvbnRhaW5lciA9IE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSwgKm1fbWVk
aWFFbGVtZW50KTsKKworICAgICAgICByZXR1cm4gbV90ZXh0VHJhY2tDb250YWluZXIuZ2V0KCk7
CiB9CiAKIHZvaWQgTWVkaWFDb250cm9sc0hvc3Q6OnVwZGF0ZVRleHRUcmFja0NvbnRhaW5lcigp
CkBAIC0zMjEsNSArMzE4LDMgQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6Y29tcGFjdE1vZGUo
KSBjb25zdAogfQogCiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaAppbmRleCBlNDBmNTFmMzNj
ZjE4ZGZiZTUyNjhmZWExMWM3NTA5MmQ1NzFhYjhiLi40MTRjYjBjYjU2YTJmMjg1YWQyNGM5YzUy
MTlmNDg5ZmY0ZWUwYWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
Y29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaApAQCAtMjUsOCArMjUsNiBAQAogCiAj
cHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvVmFyaWFudC5oPgpAQCAtMTA0LDQgKzEwMiwzIEBAIHByaXZhdGU6CiAKIH0KIAotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KaW5kZXggNWNlYTVlMWM1ZWJiMDA1NWM4NDMzM2Zi
ZjRlYjFjODZkMmVjNmI2OC4uNTM3ZWVlN2RhY2M3ZGM0NDZkOTg5OTZkODRkYjVkMWRhMzRmMWVh
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9R
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQpAQCAtMjUsOCArMjUsNiBAQAogCiAjaW1wb3J0
ICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0KICNpbXBv
cnQgIlF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmgiCiAKICNpbXBvcnQgIkNvbW1vblZNLmgi
CkBAIC00MzcsNCArNDM1LDMgQEAgSlNDOjpKU1ZhbHVlIEpTUXVpY2tUaW1lUGx1Z2luUmVwbGFj
ZW1lbnQ6OmVycm9yTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlKQogCiB9CiAKLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAppbmRleCBjNmQ1NWQ1MzkzZTY3NmFkY2I4ZjYxYWU5NmRlMzM3NDYyMmIz
NmRjLi5iMjcwNTBkNjJkMjkzOWI2YmNkNTMwYzNhMTk0Y2E3MGI5ZDY1ODU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dApAQCAtNDQ3LDcgKzQ0Nyw2IEBAIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3Qu
Y3BwCiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcAogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAKIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU1hdGhNTEVsZW1lbnQuY3BwCi1hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNv
bnRyb2xzLmNwcAogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwCiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5jcHAKIGFjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuY3BwCkBAIC0xMzY4LDkgKzEzNjcsNyBAQCBodG1s
L3BhcnNlci9YU1NBdWRpdG9yRGVsZWdhdGUuY3BwCiBodG1sL3NoYWRvdy9BdXRvRmlsbEJ1dHRv
bkVsZW1lbnQuY3BwCiBodG1sL3NoYWRvdy9EYXRhTGlzdEJ1dHRvbkVsZW1lbnQuY3BwCiBodG1s
L3NoYWRvdy9EZXRhaWxzTWFya2VyQ29udHJvbC5jcHAKLWh0bWwvc2hhZG93L01lZGlhQ29udHJv
bEVsZW1lbnRUeXBlcy5jcHAKLWh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAot
aHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKK2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQuY3BwCiBodG1sL3NoYWRvdy9Qcm9ncmVzc1NoYWRvd0Vs
ZW1lbnQuY3BwCiBodG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCiBodG1sL3NoYWRv
dy9TcGluQnV0dG9uRWxlbWVudC5jcHAKQEAgLTIxOTEsNyArMjE4OCw2IEBAIHJlbmRlcmluZy9S
ZW5kZXJMaXN0SXRlbS5jcHAKIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAogcmVuZGVy
aW5nL1JlbmRlck1hcnF1ZWUuY3BwCiByZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCi1yZW5kZXJp
bmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAKIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAK
IHJlbmRlcmluZy9SZW5kZXJNZXRlci5jcHAKIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZs
b3cuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggZDQzNzkxOGNhYmE3MzNmZmI2M2YzYTA3YjQ4ZWEwZjQ0NTNjZWE3OC4uYjNi
N2Y5MWYzYWQzYWEzMDRkYTRlY2M1NGQxODRjOWM5MTQwZDdhNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjM4LDcgKzYzOCw2
IEBACiAJCTFEOUYwRkMxMjEyMjAyOUIwMDVEOEZENCAvKiBTaGFyZURhdGEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFEQzU1NDAwMjExQkE4QzgwMDRC
NzgwRSAvKiBTaGFyZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxREJDMUI1NjIzNDdCM0QyMDBCOTAxQUYgLyogUGljdHVyZUluUGljdHVy
ZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxREJDMUI1NTIzNDdCM0QyMDBCOTAxQUYgLyogUGljdHVyZUluUGljdHVyZU9ic2VydmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUYzNkVB
OUMxRTIxQkExNzAwNjIxRTI1IC8qIFdlYkJhY2tncm91bmRUYXNrQ29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUYzNkVBOUExRTIxQkEx
NzAwNjIxRTI1IC8qIFdlYkJhY2tncm91bmRUYXNrQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTFGM0MzQkVCMTM1Q0FGM0MwMEI4
QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxRjNDM0JFOTEzNUNBRjNDMDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5o
ICovOyB9OwogCQkxRjcyQkYwQjE4N0ZENDVDMDAwOUJDQjMgLyogVGlsZUNvbnRyb2xsZXJNZW1v
cnlIYW5kbGVySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxRjcyQkYwOTE4N0ZENDI3MDAwOUJDQjMgLyogVGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5k
bGVySU9TLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMUY4NzU2QjIxRTIyQzMzNTAwNDJDNDBEIC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUY4
NzU2QjExRTIyQkVFRjAwNDJDNDBEIC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFGQUZC
RjE5MTVBNUZBNzQwMDA4M0EyMCAvKiBVVElVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGQUZCRjE2MTVBNUZBNTIwMDA4M0EyMCAvKiBV
VElVdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTA4Niw3ICsxMDg1LDcgQEAKIAkJNDE2RTZGRTkxQkJEMTJFNTAwMEE2MDQzIC8q
IFJlYWRhYmxlU3RyZWFtQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3NjREOCAvKiBSZWFkYWJsZVN0cmVh
bUJ1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDE2RTZGRTkxQkJEMTJFNTAwMEE2MDUzIC8qIFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDNEODA2
MUJCMzExMEQwMEI3NjRFOCAvKiBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDE2RkQyNUYyNDBGQTRFNTAw
NjY2MUQ4IC8qIE5vd1BsYXlpbmdJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MTZGRDI1RDI0MEVFMUFFMDA2NjYxRDggLyogTm93UGxheWluZ0lu
Zm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk0
MTcyNTNBQjEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sRWxlbWVudHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNzI1M0E5MTM1NEJCQkMw
MDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5oICovOyB9OworCQk0MTcyNTNBQjEzNTRC
QkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE3MjUzQTkxMzU0
QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaCAq
LzsgfTsKIAkJNDE3NjEyQUYxRTNBOTk0MDAwQzNEODFEIC8qIExpYldlYlJUQ01lZGlhRW5kcG9p
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE3
NjEyQUIxRTNBOTkzQjAwQzNEODFEIC8qIExpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwICovOyB9
OwogCQk0MTc2MTJCMDFFM0E5OTQwMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE3NjEyQUMx
RTNBOTkzQjAwQzNEODFEIC8qIExpYldlYlJUQ01lZGlhRW5kcG9pbnQuaCAqLzsgfTsKIAkJNDE3
NjEyQjExRTNBOTk0MDAwQzNEODFEIC8qIExpYldlYlJUQ1BlZXJDb25uZWN0aW9uQmFja2VuZC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTc2MTJB
RDFFM0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcCAq
LzsgfTsKQEAgLTQ1NjYsNyArNDU2NSw2IEBACiAJCURFNUY4NjU5MUZBMkFGMjQwMDZEQjYzQiAv
KiBVbmlmaWVkU291cmNlNjEtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBERTVGODYzQTFGQTJBRjA3MDA2REI2M0IgLyogVW5pZmllZFNvdXJjZTYx
LW1tLm1tICovOyB9OwogCQlERTc3MTA4NjFGQTJGMEQ2MDA0NjAwMTYgLyogV2ViQXJjaGl2ZUR1
bXBTdXBwb3J0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTE3NjNGM0MxRTIwNTIzNDAwMUQ1OERFIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5tbSAq
LzsgfTsKIAkJREVCQ0NERDIxNjY0NkU4MjAwQTQ1MkUxIC8qIFJlbmRlck1lZGlhQ29udHJvbHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERFNDlCMzA4
MTY1RjJGRTEwMDEwMzM4RCAvKiBSZW5kZXJNZWRpYUNvbnRyb2xzLmggKi87IH07Ci0JCURFQkND
REQ0MTY2NDZFQUYwMEE0NTJFMSAvKiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERFNDlCMzAwMTY1RjJGQzYw
MDEwMzM4RCAvKiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuaCAqLzsgfTsKIAkJREVDQTdEOTMx
RjlFNjdCNTAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxMzEuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREVDQTdENkQxRjlFNjFDRjAwRTNCNjYxIC8q
IFVuaWZpZWRTb3VyY2UxMzEuY3BwICovOyB9OwogCQlERUNBN0Q5NDFGOUU2N0I1MDBFM0I2NjEg
LyogVW5pZmllZFNvdXJjZTEzMi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBERUNBN0Q3RTFGOUU2MUUzMDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTEz
Mi5jcHAgKi87IH07CiAJCURFQ0E3RDk1MUY5RTY3QjUwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNl
MTMzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERF
Q0E3RDgwMUY5RTYxRTUwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMTMzLmNwcCAqLzsgfTsKQEAg
LTY2MzQsOCArNjYzMiw2IEBACiAJCTFERUYwNkRFMjMzRDJFMUMwMEVFMjI4RCAvKiBEb2N1bWVu
dFBpY3R1cmVJblBpY3R1cmUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERvY3VtZW50UGlj
dHVyZUluUGljdHVyZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGMzZFQTlB
MUUyMUJBMTcwMDYyMUUyNSAvKiBXZWJCYWNrZ3JvdW5kVGFza0NvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQmFja2dyb3VuZFRhc2tDb250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGMzZFQTlCMUUyMUJBMTcwMDYyMUUyNSAv
KiBXZWJCYWNrZ3JvdW5kVGFza0NvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXZWJCYWNrZ3JvdW5kVGFza0NvbnRyb2xsZXIubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFGM0MzQkU4MTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNv
bnRyb2xzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhQ29u
dHJvbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxRjNDM0JFOTEzNUNBRjND
MDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNZWRpYUNvbnRyb2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGNzJC
RjA4MTg3RkQ0MjcwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1lbW9yeUhhbmRsZXJJT1MuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGlsZUNvbnRyb2xsZXJNZW1v
cnlIYW5kbGVySU9TLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUY3MkJGMDkx
ODdGRDQyNzAwMDlCQ0IzIC8qIFRpbGVDb250cm9sbGVyTWVtb3J5SGFuZGxlcklPUy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaWxlQ29udHJvbGxlck1lbW9yeUhhbmRsZXJJ
T1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUY4NzU2QjAxRTIyQkVFRjAwNDJD
NDBEIC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc0NDgsOCArNzQ0NCw4IEBACiAJCTQx
NkUyOUE1MTAyRkE5NjIwMDdGQzE0RSAvKiBXb3JrZXJSZXBvcnRpbmdQcm94eS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrZXJSZXBvcnRpbmdQcm94eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZGRDI1RDI0MEVFMUFFMDA2NjYxRDggLyogTm93UGxh
eWluZ0luZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm93UGxheWluZ0lu
Zm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE3MEEyRTkxRDhDMENDMDAwMzE4
NDUyIC8qIEpTRE9NV3JhcHBlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RPTVdyYXBwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTcy
NTNBODEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sRWxlbWVudHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTcyNTNBOTEzNTRCQkJDMDAzNjBGMkEgLyog
TWVkaWFDb250cm9sRWxlbWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWVkaWFDb250cm9sRWxlbWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE3
MjUzQTgxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQxNzI1M0E5MTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDE3NjEyQUIxRTNBOTkzQjAwQzNEODFEIC8qIExpYldlYlJUQ01lZGlhRW5kcG9p
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTGliV2ViUlRDTWVk
aWFFbmRwb2ludC5jcHA7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDTWVkaWFFbmRwb2ludC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNzYxMkFDMUUzQTk5M0IwMEMzRDgx
RCAvKiBMaWJXZWJSVENNZWRpYUVuZHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IExpYldlYlJUQ01lZGlhRW5kcG9pbnQuaDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJS
VENNZWRpYUVuZHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNzYxMkFE
MUUzQTk5M0IwMEMzRDgxRCAvKiBMaWJXZWJSVENQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTGliV2ViUlRDUGVlckNvbm5lY3Rp
b25CYWNrZW5kLmNwcDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ1NzMsOCArMTQ1Njks
NiBAQAogCQlEQkZDQjBFQkZGNUNENzdFQkVCMzU5NUYgLyogUmVuZGVyTWF0aE1MUGFkZGVkLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1hdGhNTFBhZGRl
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUREMDVGRTBCMEI4QkEzQzYwMDlB
Q0RGRSAvKiBXZWJDb3JlT2JqQ0V4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViQ29yZU9iakNFeHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
REQ3NjNCQjEwOTkyQzJDOTAwNzQwQjhFIC8qIGxpYnhtbDIuZHlsaWIgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGli
IjsgbmFtZSA9IGxpYnhtbDIuZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9saWJ4bWwyLmR5bGliOyBz
b3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwotCQlERTQ5QjJGRjE2NUYyRkM2MDAxMDMzOEQg
LyogTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCURFNDlCMzAwMTY1RjJGQzYwMDEwMzM4RCAvKiBNZWRpYUNvbnRyb2xF
bGVtZW50VHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFDb250
cm9sRWxlbWVudFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFNDlCMzA3
MTY1RjJGRTEwMDEwMzM4RCAvKiBSZW5kZXJNZWRpYUNvbnRyb2xzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1lZGlhQ29udHJvbHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlERTQ5QjMwODE2NUYyRkUxMDAxMDMzOEQgLyogUmVuZGVy
TWVkaWFDb250cm9scy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJN
ZWRpYUNvbnRyb2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFNUY4M0IyMUZB
MTg2NzYwMDZEQjYzQSAvKiBVbmlmaWVkU291cmNlMzAxLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFVuaWZpZWRTb3VyY2UzMDEuY3BwOyBwYXRoID0gIkRlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UzMDEuY3BwIjsgc291
cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTE4MjUxLDEyICsxODI0NSw4IEBA
CiAJCQkJQTdDOUFCRjcxMzU3QTNCRjAwRjU1MDNGIC8qIERldGFpbHNNYXJrZXJDb250cm9sLmgg
Ki8sCiAJCQkJNTEwMTkyRDMxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxl
bWVudC5jcHAgKi8sCiAJCQkJNTEwMTkyRDQxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJv
bHNSb290RWxlbWVudC5oICovLAotCQkJCTQxNzI1M0E4MTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRp
YUNvbnRyb2xFbGVtZW50cy5jcHAgKi8sCi0JCQkJNDE3MjUzQTkxMzU0QkJCQzAwMzYwRjJBIC8q
IE1lZGlhQ29udHJvbEVsZW1lbnRzLmggKi8sCi0JCQkJREU0OUIyRkYxNjVGMkZDNjAwMTAzMzhE
IC8qIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAgKi8sCi0JCQkJREU0OUIzMDAxNjVGMkZD
NjAwMTAzMzhEIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oICovLAotCQkJCTFGM0MzQkU4
MTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmNwcCAqLywKLQkJCQkxRjNDM0JFOTEz
NUNBRjNDMDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5oICovLAorCQkJCTQxNzI1M0E4MTM1NEJC
QkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmNwcCAq
LywKKwkJCQk0MTcyNTNBOTEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudC5oICovLAogCQkJCUU0RTI0MzgyMURBQjk1M0UwMEMyNkU0QiAvKiBt
ZXRlckVsZW1lbnRTaGFkb3cuY3NzICovLAogCQkJCUE3MTVFNjUwMTM0QkJCRUMwMEQ4RTcxMyAv
KiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwICovLAogCQkJCUE3MTVFNjUxMTM0QkJCRUMwMEQ4
RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuaCAqLywKQEAgLTMxODIwLDEyICszMTgxMCwx
MCBAQAogCQkJCUNEQ0M5QkNGMjIzODdFOUEwMEZGQjUxQyAvKiBNZWRpYUNhcGFiaWxpdGllc0Rl
Y29kaW5nSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RDQzlCRDEyMjM4N0VBQTAwRkZCNTFD
IC8qIE1lZGlhQ2FwYWJpbGl0aWVzRW5jb2RpbmdJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
NzhFMDkzQTE3RDE2RTFDMDA0MjBBQTEgLyogTWVkaWFDb25zdHJhaW50cy5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNDE3MjUzQUIxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRz
LmggaW4gSGVhZGVycyAqLywKLQkJCQlERUJDQ0RENDE2NjQ2RUFGMDBBNDUyRTEgLyogTWVkaWFD
b250cm9sRWxlbWVudFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREY2NUNDODE0NUIxRTc1
MDBDNEM3QUEgLyogTWVkaWFDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREY2NUND
QTE0NUI0NDg4MDBDNEM3QUEgLyogTWVkaWFDb250cm9sbGVySW50ZXJmYWNlLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkxRjNDM0JFQjEzNUNBRjNDMDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQ0RBQjZEMjkxN0M3REU2QzAwQzYwQjM0IC8qIE1lZGlhQ29udHJv
bHNIb3N0LmggaW4gSGVhZGVycyAqLywKKwkJCQk0MTcyNTNBQjEzNTRCQkJDMDAzNjBGMkEgLyog
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQ0RGMkIwMDQxODFGMDU5QzAwRjJCNDI0IC8qIE1lZGlhRGVzY3JpcHRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE1MTQ1QjkwMUIzQTFDRTAwMDY2MkJGNyAvKiBNZWRpYURldmljZUluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCTVFQTcyNUQzMUFDQUJENDcwMEVBRDE3QiAvKiBNZWRpYURl
dmljZXMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAKaW5kZXggZDdmNWM0YzhmMzk3OTBjMTA2ZThiZmQ2NWM0ZTg1NTcx
OGQ4OTM2ZC4uM2ExOTgyNzkwYWViYWU4OTIyMmQ2OTg2NzFjMjBjNDBhMGU3OThmZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC00NCw3
ICs0NCw2IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUxpc3RCb3guaCIKICNpbmNsdWRlICJB
Y2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNYXRo
TUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuaCIKICNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3QuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmls
aXR5TWVudUxpc3QuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uaCIK
QEAgLTc1LDYgKzc0LDcgQEAKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1ldGVyRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIK
QEAgLTExMiwxMCArMTEyLDYgQEAKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUg
PHd0Zi9TZXRGb3JTY29wZS5oPgogCi0jaWYgRU5BQkxFKFZJREVPKQotI2luY2x1ZGUgIk1lZGlh
Q29udHJvbEVsZW1lbnRzLmgiCi0jZW5kaWYKLQogI2lmIENPTVBJTEVSKE1TVkMpCiAvLyBTZWUg
aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8xd2VhNXp3ZS5hc3B4CiAj
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMSkKQEAgLTUyOSwxMiArNTI1LDYgQEAgc3RhdGlj
IFJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjcmVhdGVGcm9tUmVuZGVyZXIoUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6Y3Jl
YXRlKHJlbmRlcmVyKTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIC8vIG1lZGlh
IGNvbnRyb2xzCi0gICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNNZWRpYUNvbnRyb2xFbGVtZW50KCkp
Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpjcmVhdGUocmVuZGVy
ZXIpOwotI2VuZGlmCi0KICAgICBpZiAoaXM8UmVuZGVyU1ZHUm9vdD4oKnJlbmRlcmVyKSkKICAg
ICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlTVkdSb290OjpjcmVhdGUocmVuZGVyZXIpOwogICAg
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVkaWFDb250cm9scy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlNZWRpYUNvbnRyb2xzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEy
ZDg0MDNiMzRiYmY3ZTE4ZjQwMWMzODkzMzlmNmE2MTRkYWRmYS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzNiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRl
ICJBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oIgotCi0jaW5jbHVkZSAiQVhPYmplY3RDYWNo
ZS5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTWVkaWFF
bGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTG9jYWxpemVkU3Ry
aW5ncy5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCi0jaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKLQotCi1BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpBY2Nlc3NpYmlsaXR5
TWVkaWFDb250cm9sKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi0gICAgOiBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0KHJlbmRlcmVyKQotewotfQotCi1SZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4g
QWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
Ci17Ci0gICAgQVNTRVJUKHJlbmRlcmVyLT5ub2RlKCkpOwotCi0gICAgc3dpdGNoIChtZWRpYUNv
bnRyb2xFbGVtZW50VHlwZShyZW5kZXJlci0+bm9kZSgpKSkgewotICAgIGNhc2UgTWVkaWFTbGlk
ZXI6Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6Y3JlYXRlKHJl
bmRlcmVyKTsKLQotICAgIGNhc2UgTWVkaWFDdXJyZW50VGltZURpc3BsYXk6Ci0gICAgY2FzZSBN
ZWRpYVRpbWVSZW1haW5pbmdEaXNwbGF5OgotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1l
ZGlhVGltZURpc3BsYXk6OmNyZWF0ZShyZW5kZXJlcik7Ci0KLSAgICBjYXNlIE1lZGlhQ29udHJv
bHNQYW5lbDoKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFp
bmVyOjpjcmVhdGUocmVuZGVyZXIpOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbChyZW5kZXJlcikpOwotICAgIH0K
LX0KLQotTWVkaWFDb250cm9sRWxlbWVudFR5cGUgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6
Y29udHJvbFR5cGUoKSBjb25zdAotewotICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIo
KS0+bm9kZSgpKQotICAgICAgICByZXR1cm4gTWVkaWFUaW1lbGluZUNvbnRhaW5lcjsgLy8gVGlt
ZWxpbmUgY29udGFpbmVyIGlzIG5vdCBhY2Nlc3NpYmxlLgotCi0gICAgcmV0dXJuIG1lZGlhQ29u
dHJvbEVsZW1lbnRUeXBlKHJlbmRlcmVyKCktPm5vZGUoKSk7Ci19Ci0KLWNvbnN0IFN0cmluZyYg
QWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6Y29udHJvbFR5cGVOYW1lKCkgY29uc3QKLXsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYUVudGVyRnVsbHNjcmVl
bkJ1dHRvbk5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkVudGVyRnVsbHNjcmVlbkJ1dHRv
biIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYUV4aXRG
dWxsc2NyZWVuQnV0dG9uTmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiRXhpdEZ1bGxzY3Jl
ZW5CdXR0b24iKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVk
aWFNdXRlQnV0dG9uTmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiTXV0ZUJ1dHRvbiIpKTsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVBsYXlCdXR0b25O
YW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJQbGF5QnV0dG9uIikpOwotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhU2Vla0JhY2tCdXR0b25OYW1lKE1BS0Vf
U1RBVElDX1NUUklOR19JTVBMKCJTZWVrQmFja0J1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVNlZWtGb3J3YXJkQnV0dG9uTmFtZShNQUtFX1NU
QVRJQ19TVFJJTkdfSU1QTCgiU2Vla0ZvcndhcmRCdXR0b24iKSk7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFSZXdpbmRCdXR0b25OYW1lKE1BS0VfU1RBVElD
X1NUUklOR19JTVBMKCJSZXdpbmRCdXR0b24iKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IFN0cmluZz4gbWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uTmFtZShNQUtFX1NUQVRJ
Q19TVFJJTkdfSU1QTCgiUmV0dXJuVG9SZWFsdGltZUJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVVuTXV0ZUJ1dHRvbk5hbWUoTUFLRV9TVEFU
SUNfU1RSSU5HX0lNUEwoIlVuTXV0ZUJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVBhdXNlQnV0dG9uTmFtZShNQUtFX1NUQVRJQ19TVFJJTkdf
SU1QTCgiUGF1c2VCdXR0b24iKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0
cmluZz4gbWVkaWFTdGF0dXNEaXNwbGF5TmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiU3Rh
dHVzRGlzcGxheSIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBt
ZWRpYUN1cnJlbnRUaW1lRGlzcGxheShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQ3VycmVudFRp
bWVEaXNwbGF5IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1l
ZGlhVGltZVJlbWFpbmluZ0Rpc3BsYXkoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlRpbWVSZW1h
aW5pbmdEaXNwbGF5IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+
IG1lZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uTmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1Q
TCgiU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBTdHJpbmc+IG1lZGlhSGlkZUNsb3NlZENhcHRpb25zQnV0dG9uTmFtZShNQUtFX1NU
QVRJQ19TVFJJTkdfSU1QTCgiSGlkZUNsb3NlZENhcHRpb25zQnV0dG9uIikpOwotCi0gICAgc3dp
dGNoIChjb250cm9sVHlwZSgpKSB7Ci0gICAgY2FzZSBNZWRpYUVudGVyRnVsbHNjcmVlbkJ1dHRv
bjoKLSAgICAgICAgcmV0dXJuIG1lZGlhRW50ZXJGdWxsc2NyZWVuQnV0dG9uTmFtZTsKLSAgICBj
YXNlIE1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b246Ci0gICAgICAgIHJldHVybiBtZWRpYUV4aXRG
dWxsc2NyZWVuQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhTXV0ZUJ1dHRvbjoKLSAgICAgICAg
cmV0dXJuIG1lZGlhTXV0ZUJ1dHRvbk5hbWU7Ci0gICAgY2FzZSBNZWRpYVBsYXlCdXR0b246Ci0g
ICAgICAgIHJldHVybiBtZWRpYVBsYXlCdXR0b25OYW1lOwotICAgIGNhc2UgTWVkaWFTZWVrQmFj
a0J1dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhU2Vla0JhY2tCdXR0b25OYW1lOwotICAgIGNh
c2UgTWVkaWFTZWVrRm9yd2FyZEJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhU2Vla0Zvcndh
cmRCdXR0b25OYW1lOwotICAgIGNhc2UgTWVkaWFSZXdpbmRCdXR0b246Ci0gICAgICAgIHJldHVy
biBtZWRpYVJld2luZEJ1dHRvbk5hbWU7Ci0gICAgY2FzZSBNZWRpYVJldHVyblRvUmVhbHRpbWVC
dXR0b246Ci0gICAgICAgIHJldHVybiBtZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b25OYW1lOwot
ICAgIGNhc2UgTWVkaWFVbk11dGVCdXR0b246Ci0gICAgICAgIHJldHVybiBtZWRpYVVuTXV0ZUJ1
dHRvbk5hbWU7Ci0gICAgY2FzZSBNZWRpYVBhdXNlQnV0dG9uOgotICAgICAgICByZXR1cm4gbWVk
aWFQYXVzZUJ1dHRvbk5hbWU7Ci0gICAgY2FzZSBNZWRpYVN0YXR1c0Rpc3BsYXk6Ci0gICAgICAg
IHJldHVybiBtZWRpYVN0YXR1c0Rpc3BsYXlOYW1lOwotICAgIGNhc2UgTWVkaWFDdXJyZW50VGlt
ZURpc3BsYXk6Ci0gICAgICAgIHJldHVybiBtZWRpYUN1cnJlbnRUaW1lRGlzcGxheTsKLSAgICBj
YXNlIE1lZGlhVGltZVJlbWFpbmluZ0Rpc3BsYXk6Ci0gICAgICAgIHJldHVybiBtZWRpYVRpbWVS
ZW1haW5pbmdEaXNwbGF5OwotICAgIGNhc2UgTWVkaWFTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b246
Ci0gICAgICAgIHJldHVybiBtZWRpYVNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbk5hbWU7Ci0gICAg
Y2FzZSBNZWRpYUhpZGVDbG9zZWRDYXB0aW9uc0J1dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlh
SGlkZUNsb3NlZENhcHRpb25zQnV0dG9uTmFtZTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIHJldHVybiBudWxsQXRvbSgpOwotfQotCi12b2lkIEFjY2Vzc2li
aWxpdHlNZWRpYUNvbnRyb2w6OmFjY2Vzc2liaWxpdHlUZXh0KFZlY3RvcjxBY2Nlc3NpYmlsaXR5
VGV4dD4mIHRleHRPcmRlcikgY29uc3QKLXsKLSAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBhY2Nl
c3NpYmlsaXR5RGVzY3JpcHRpb24oKTsKLSAgICBpZiAoIWRlc2NyaXB0aW9uLmlzRW1wdHkoKSkK
LSAgICAgICAgdGV4dE9yZGVyLmFwcGVuZChBY2Nlc3NpYmlsaXR5VGV4dChkZXNjcmlwdGlvbiwg
QWNjZXNzaWJpbGl0eVRleHRTb3VyY2U6OkFsdGVybmF0aXZlKSk7Ci0KLSAgICBTdHJpbmcgdGl0
bGUgPSB0aGlzLT50aXRsZSgpOwotICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKQotICAgICAgICB0
ZXh0T3JkZXIuYXBwZW5kKEFjY2Vzc2liaWxpdHlUZXh0KHRpdGxlLCBBY2Nlc3NpYmlsaXR5VGV4
dFNvdXJjZTo6QWx0ZXJuYXRpdmUpKTsKLQotICAgIFN0cmluZyBoZWxwdGV4dCA9IGhlbHBUZXh0
KCk7Ci0gICAgaWYgKCFoZWxwdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIHRleHRPcmRlci5hcHBl
bmQoQWNjZXNzaWJpbGl0eVRleHQoaGVscHRleHQsIEFjY2Vzc2liaWxpdHlUZXh0U291cmNlOjpI
ZWxwKSk7Ci19Ci0gICAgCi0KLVN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjp0aXRs
ZSgpIGNvbnN0Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gY29u
dHJvbHNQYW5lbChNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQ29udHJvbHNQYW5lbCIpKTsKLQot
ICAgIGlmIChjb250cm9sVHlwZSgpID09IE1lZGlhQ29udHJvbHNQYW5lbCkKLSAgICAgICAgcmV0
dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRTdHJpbmcoY29udHJvbHNQYW5lbCk7Ci0K
LSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGl0bGUoKTsKLX0KLQotU3Ry
aW5nIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRTdHJpbmco
Y29udHJvbFR5cGVOYW1lKCkpOwotfQotCi1TdHJpbmcgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJv
bDo6aGVscFRleHQoKSBjb25zdAotewotICAgIHJldHVybiBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xF
bGVtZW50SGVscFRleHQoY29udHJvbFR5cGVOYW1lKCkpOwotfQotCi1ib29sIEFjY2Vzc2liaWxp
dHlNZWRpYUNvbnRyb2w6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKLXsK
LSAgICBpZiAoIW1fcmVuZGVyZXIgfHwgbV9yZW5kZXJlci0+c3R5bGUoKS52aXNpYmlsaXR5KCkg
IT0gVmlzaWJpbGl0eTo6VmlzaWJsZSB8fCBjb250cm9sVHlwZSgpID09IE1lZGlhVGltZWxpbmVD
b250YWluZXIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGFjY2Vzc2liaWxp
dHlJc0lnbm9yZWRCeURlZmF1bHQoKTsKLX0KLQotQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJp
bGl0eU1lZGlhQ29udHJvbDo6cm9sZVZhbHVlKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGNvbnRy
b2xUeXBlKCkpIHsKLSAgICBjYXNlIE1lZGlhRW50ZXJGdWxsc2NyZWVuQnV0dG9uOgotICAgIGNh
c2UgTWVkaWFFeGl0RnVsbHNjcmVlbkJ1dHRvbjoKLSAgICBjYXNlIE1lZGlhTXV0ZUJ1dHRvbjoK
LSAgICBjYXNlIE1lZGlhUGxheUJ1dHRvbjoKLSAgICBjYXNlIE1lZGlhU2Vla0JhY2tCdXR0b246
Ci0gICAgY2FzZSBNZWRpYVNlZWtGb3J3YXJkQnV0dG9uOgotICAgIGNhc2UgTWVkaWFSZXdpbmRC
dXR0b246Ci0gICAgY2FzZSBNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b246Ci0gICAgY2FzZSBN
ZWRpYVVuTXV0ZUJ1dHRvbjoKLSAgICBjYXNlIE1lZGlhUGF1c2VCdXR0b246Ci0gICAgY2FzZSBN
ZWRpYVNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbjoKLSAgICBjYXNlIE1lZGlhSGlkZUNsb3NlZENh
cHRpb25zQnV0dG9uOgotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVJvbGU6OkJ1dHRvbjsK
LQotICAgIGNhc2UgTWVkaWFTdGF0dXNEaXNwbGF5OgotICAgICAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eVJvbGU6OlN0YXRpY1RleHQ7Ci0KLSAgICBjYXNlIE1lZGlhVGltZWxpbmVDb250YWluZXI6
Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Um9sZTo6R3JvdXA7Ci0KLSAgICBkZWZhdWx0
OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVJvbGU6
OlVua25vd247Ci19Ci0KLQotLy8KLS8vIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFp
bmVyCi0KLUFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpBY2Nlc3NpYmlsaXR5
TWVkaWFDb250cm9sc0NvbnRhaW5lcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQotICAgIDogQWNj
ZXNzaWJpbGl0eU1lZGlhQ29udHJvbChyZW5kZXJlcikKLXsKLX0KLQotUmVmPEFjY2Vzc2liaWxp
dHlPYmplY3Q+IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpjcmVhdGUoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBY2Nlc3Np
YmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcihyZW5kZXJlcikpOwotfQotCi1TdHJpbmcgQWNj
ZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXI6OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRTdHJp
bmcoZWxlbWVudFR5cGVOYW1lKCkpOwotfQotCi1TdHJpbmcgQWNjZXNzaWJpbGl0eU1lZGlhQ29u
dHJvbHNDb250YWluZXI6OmhlbHBUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbG9jYWxpemVk
TWVkaWFDb250cm9sRWxlbWVudEhlbHBUZXh0KGVsZW1lbnRUeXBlTmFtZSgpKTsKLX0KLQotYm9v
bCBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6Y29udHJvbGxpbmdWaWRlb0Vs
ZW1lbnQoKSBjb25zdAotewotICAgIGF1dG8gZWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCgq
bV9yZW5kZXJlcik7Ci0gICAgcmV0dXJuICFlbGVtZW50IHx8IGVsZW1lbnQtPmlzVmlkZW8oKTsK
LX0KLQotY29uc3QgU3RyaW5nJiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6
ZWxlbWVudFR5cGVOYW1lKCkgY29uc3QKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgU3RyaW5nPiB2aWRlb0VsZW1lbnQoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlZpZGVvRWxl
bWVudCIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBhdWRpb0Vs
ZW1lbnQoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkF1ZGlvRWxlbWVudCIpKTsKLQotICAgIGlm
IChjb250cm9sbGluZ1ZpZGVvRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gdmlkZW9FbGVtZW50
OwotICAgIHJldHVybiBhdWRpb0VsZW1lbnQ7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eU1lZGlh
Q29udHJvbHNDb250YWluZXI6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gYWNjZXNzaWJpbGl0eUlzSWdub3JlZEJ5RGVmYXVsdCgpOwotfQotCi0v
LwotLy8gQWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUKLQotQWNjZXNzaWJpbGl0eU1lZGlhVGlt
ZWxpbmU6OkFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
Ci0gICAgOiBBY2Nlc3NpYmlsaXR5U2xpZGVyKHJlbmRlcmVyKQotewotfQotCi1SZWY8QWNjZXNz
aWJpbGl0eU9iamVjdD4gQWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OmNyZWF0ZShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFjY2Vzc2liaWxp
dHlNZWRpYVRpbWVsaW5lKHJlbmRlcmVyKSk7Ci19Ci0KLVN0cmluZyBBY2Nlc3NpYmlsaXR5TWVk
aWFUaW1lbGluZTo6dmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgTm9kZSogbm9kZSA9
IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2Rl
KSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgZmxvYXQgdGltZSA9IGRvd25jYXN0
PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKS52YWx1ZSgpLnRvRmxvYXQoKTsKLSAgICByZXR1cm4g
bG9jYWxpemVkTWVkaWFUaW1lRGVzY3JpcHRpb24odGltZSk7Ci19Ci0KLVN0cmluZyBBY2Nlc3Np
YmlsaXR5TWVkaWFUaW1lbGluZTo6aGVscFRleHQoKSBjb25zdAotewotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHNsaWRlcihNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgi
U2xpZGVyIikpOwotICAgIHJldHVybiBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50SGVscFRl
eHQoc2xpZGVyKTsKLX0KLQotCi0vLwotLy8gQWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3BsYXkK
LQotQWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3BsYXk6OkFjY2Vzc2liaWxpdHlNZWRpYVRpbWVE
aXNwbGF5KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi0gICAgOiBBY2Nlc3NpYmlsaXR5TWVkaWFD
b250cm9sKHJlbmRlcmVyKQotewotfQotCi1SZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gQWNjZXNz
aWJpbGl0eU1lZGlhVGltZURpc3BsYXk6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5
KHJlbmRlcmVyKSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3BsYXk6OmNv
bXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcmVuZGVy
ZXIgfHwgbV9yZW5kZXJlci0+c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVmlzaWJpbGl0eTo6Vmlz
aWJsZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIW1fcmVuZGVyZXItPnN0eWxl
KCkud2lkdGgoKS52YWx1ZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICByZXR1
cm4gYWNjZXNzaWJpbGl0eUlzSWdub3JlZEJ5RGVmYXVsdCgpOwotfQotCi1TdHJpbmcgQWNjZXNz
aWJpbGl0eU1lZGlhVGltZURpc3BsYXk6OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0
Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gY3VycmVudFRpbWVE
aXNwbGF5KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJDdXJyZW50VGltZURpc3BsYXkiKSk7Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdGltZVJlbWFpbmluZ0Rpc3Bs
YXkoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlRpbWVSZW1haW5pbmdEaXNwbGF5IikpOwotCi0g
ICAgaWYgKGNvbnRyb2xUeXBlKCkgPT0gTWVkaWFDdXJyZW50VGltZURpc3BsYXkpCi0gICAgICAg
IHJldHVybiBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50U3RyaW5nKGN1cnJlbnRUaW1lRGlz
cGxheSk7Ci0KLSAgICByZXR1cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmluZyh0
aW1lUmVtYWluaW5nRGlzcGxheSk7Ci19Ci0KLVN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1l
RGlzcGxheTo6c3RyaW5nVmFsdWUoKSBjb25zdAotewotICAgIGlmICghbV9yZW5kZXJlciB8fCAh
bV9yZW5kZXJlci0+bm9kZSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBmbG9h
dCB0aW1lID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50Kj4obV9y
ZW5kZXJlci0+bm9kZSgpKS0+Y3VycmVudFZhbHVlKCk7Ci0gICAgcmV0dXJuIGxvY2FsaXplZE1l
ZGlhVGltZURlc2NyaXB0aW9uKHN0ZDo6YWJzKHRpbWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2FkNmQ5NmUzNmY4NWIzNzllNWNmOTVjZTRiNDVj
YjNkNmY3Y2QxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMu
aAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFZJREVP
KQotCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVNsaWRlci5oIgotI2luY2x1ZGUgIk1lZGlhQ29u
dHJvbEVsZW1lbnRzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQWNjZXNzaWJp
bGl0eU1lZGlhQ29udHJvbCA6IHB1YmxpYyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNyZWF0ZShSZW5kZXJP
YmplY3QqKTsKLSAgICB2aXJ0dWFsIH5BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sKCkgPSBkZWZh
dWx0OwotCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0KLSAgICBTdHJpbmcgdGl0bGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgYWNjZXNz
aWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGhlbHBUZXh0
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBBY2Nlc3NpYmls
aXR5TWVkaWFDb250cm9sKFJlbmRlck9iamVjdCopOwotICAgIE1lZGlhQ29udHJvbEVsZW1lbnRU
eXBlIGNvbnRyb2xUeXBlKCkgY29uc3Q7Ci0gICAgY29uc3QgU3RyaW5nJiBjb250cm9sVHlwZU5h
bWUoKSBjb25zdDsKLSAgICBib29sIGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29u
c3Qgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBhY2Nlc3NpYmlsaXR5VGV4dChWZWN0
b3I8QWNjZXNzaWJpbGl0eVRleHQ+JikgY29uc3Qgb3ZlcnJpZGU7Ci19OwotCi0KLWNsYXNzIEFj
Y2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lIGZpbmFsIDogcHVibGljIEFjY2Vzc2liaWxpdHlTbGlk
ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRl
KFJlbmRlck9iamVjdCopOwotICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5l
KCkgPSBkZWZhdWx0OwotCi0gICAgU3RyaW5nIGhlbHBUZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToK
LSAgICBleHBsaWNpdCBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZShSZW5kZXJPYmplY3QqKTsK
LQotICAgIGJvb2wgaXNNZWRpYVRpbWVsaW5lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQotfTsKLQotCi1jbGFzcyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lciBm
aW5hbCA6IHB1YmxpYyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNyZWF0ZShSZW5kZXJPYmplY3QqKTsKLSAg
ICB2aXJ0dWFsIH5BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcigpID0gZGVmYXVs
dDsKLQotICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIEFjY2Vzc2liaWxpdHlSb2xlOjpUb29sYmFyOyB9Ci0KLSAgICBTdHJpbmcgaGVscFRl
eHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9u
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgQWNjZXNzaWJpbGl0
eU1lZGlhQ29udHJvbHNDb250YWluZXIoUmVuZGVyT2JqZWN0Kik7Ci0gICAgYm9vbCBjb250cm9s
bGluZ1ZpZGVvRWxlbWVudCgpIGNvbnN0OwotICAgIGNvbnN0IFN0cmluZyYgZWxlbWVudFR5cGVO
YW1lKCkgY29uc3Q7Ci0gICAgYm9vbCBjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNv
bnN0IG92ZXJyaWRlOwotfTsKLQotCi1jbGFzcyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxh
eSBmaW5hbCA6IHB1YmxpYyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNyZWF0ZShSZW5kZXJPYmplY3QqKTsK
LSAgICB2aXJ0dWFsIH5BY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheSgpID0gZGVmYXVsdDsK
LQotICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIEFjY2Vzc2liaWxpdHlSb2xlOjpBcHBsaWNhdGlvblRpbWVyOyB9Ci0KLSAgICBTdHJpbmcg
c3RyaW5nVmFsdWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgYWNjZXNzaWJpbGl0eURl
c2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgQWNj
ZXNzaWJpbGl0eU1lZGlhVGltZURpc3BsYXkoUmVuZGVyT2JqZWN0Kik7Ci0gICAgYm9vbCBpc01l
ZGlhQ29udHJvbExhYmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJv
b2wgY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdCBvdmVycmlkZTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5oCmluZGV4IDZkOTc2ZTlkZmJkZGQ4OGI1N2M3OWIxZTMxOGIyMGFmOWJmMGYzZjIuLmQyMDhj
NzE3OTY5MTcyYWM0MTEzNzgwMjJkNDhjYTg3ZWFjMGVmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtMTk4
LDggKzE5OCw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzQWZ0ZXJQc2V1ZG9FbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gcHNldWRvSWQoKSA9PSBQc2V1ZG9JZDo6QWZ0ZXI7IH0KICAgICBQc2V1ZG9J
ZCBwc2V1ZG9JZCgpIGNvbnN0IHsgcmV0dXJuIChpc0VsZW1lbnROb2RlKCkgJiYgaGFzQ3VzdG9t
U3R5bGVSZXNvbHZlQ2FsbGJhY2tzKCkpID8gY3VzdG9tUHNldWRvSWQoKSA6IFBzZXVkb0lkOjpO
b25lOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYUNvbnRyb2xFbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYUNvbnRyb2xzKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgdmlydHVh
bCBib29sIGlzV2ViVlRURWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IDNlOGQwMzhmODA4
ZTQ1MTJmZTU3MWQ5ZDI2NzkyMGU5ZTE3YzI4Y2UuLmYwYjI4OWEyZTZlOWFiZDZiYzFiZmYwMzU3
MjUxNjc2MjFhYjdmZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkJsb2IuaCIKICNpbmNsdWRlICJDU1NQcm9w
ZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkNo
cm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkNvbW1vblZNLmgi
CiAjaW5jbHVkZSAiQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5oIgpAQCAtNjAsMTAgKzYxLDExIEBA
CiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZl
cnJlZC5oIgogI2luY2x1ZGUgIkpTSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTTWVk
aWFDb250cm9sc0hvc3QuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk1lZGlhQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIk1l
ZGlhQ29udHJvbHMuaCIKKyNpbmNsdWRlICJNZWRpYUNvbnRyb2xzSG9zdC5oIgogI2luY2x1ZGUg
Ik1lZGlhRG9jdW1lbnQuaCIKICNpbmNsdWRlICJNZWRpYUVycm9yLmgiCiAjaW5jbHVkZSAiTWVk
aWFGcmFnbWVudFVSSVBhcnNlci5oIgpAQCAtOTcsNiArOTksNyBAQAogI2luY2x1ZGUgIlVzZXJD
b250ZW50Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9yLmgiCiAj
aW5jbHVkZSAiVmlkZW9QbGF5YmFja1F1YWxpdHkuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9TY3JpcHRPYmplY3QuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OEFycmF5Lmg+
CiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KQEAgLTE1OSwx
MiArMTYyLDYgQEAKICNpbmNsdWRlICJNZWRpYUtleXMuaCIKICNlbmRpZgogCi0jaWYgRU5BQkxF
KE1FRElBX0NPTlRST0xTX1NDUklQVCkKLSNpbmNsdWRlICJKU01lZGlhQ29udHJvbHNIb3N0Lmgi
Ci0jaW5jbHVkZSAiTWVkaWFDb250cm9sc0hvc3QuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9TY3JpcHRPYmplY3QuaD4KLSNlbmRpZgotCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2VuZGlmCkBAIC00NDcsMTAgKzQ0NCw4IEBA
IEhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQmIGRvY3VtCiAgICAgLCBtX2hhc0V2ZXJOb3RpZmllZEFib3V0UGxh
eWluZyhmYWxzZSkKICAgICAsIG1faGFzRXZlckhhZEF1ZGlvKGZhbHNlKQogICAgICwgbV9oYXNF
dmVySGFkVmlkZW8oZmFsc2UpCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAg
ICAsIG1fbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKGZhbHNlKQogICAgICwg
bV9oYXZlU2V0VXBDYXB0aW9uQ29udGFpbmVyKGZhbHNlKQotI2VuZGlmCiAgICAgLCBtX2lzU2Ny
dWJiaW5nUmVtb3RlbHkoZmFsc2UpCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgICwgbV90
cmFja3NBcmVSZWFkeSh0cnVlKQpAQCAtNjAwLDEwICs1OTUsOCBAQCBIVE1MTWVkaWFFbGVtZW50
Ojp+SFRNTE1lZGlhRWxlbWVudCgpCiAgICAgfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTUVESUFf
Q09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChtX2lzb2xhdGVkV29ybGQpCiAgICAgICAgIG1faXNv
bGF0ZWRXb3JsZC0+Y2xlYXJXcmFwcGVycygpOwotI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFf
U0VTU0lPTikKICAgICBpZiAobV9zZXNzaW9uKSB7CkBAIC04MjIsMTkgKzgxNSw3IEBAIFJlbmRl
clB0cjxSZW5kZXJFbGVtZW50PiBIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVy
ZXIoUmVuZGVyU3R5bGUmJiBzCiAKIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6Y2hpbGRTaG91bGRD
cmVhdGVSZW5kZXJlcihjb25zdCBOb2RlJiBjaGlsZCkgY29uc3QKIHsKLSNpZiBFTkFCTEUoTUVE
SUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIHJldHVybiBoYXNTaGFkb3dSb290UGFyZW50KGNoaWxk
KSAmJiBIVE1MRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihjaGlsZCk7Ci0jZWxz
ZQotICAgIGlmICghaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgLy8gPG1lZGlhPiBkb2Vzbid0IGFsbG93IGl0cyBjb250ZW50LCBpbmNsdWRpbmcgc2hhZG93
IHN1YnRyZWUsIHRvCi0gICAgLy8gYmUgcmVuZGVyZWQuIFNvIHRoaXMgc2hvdWxkIHJldHVybiBm
YWxzZSBmb3IgbW9zdCBvZiB0aGUgY2hpbGRyZW4uCi0gICAgLy8gT25lIGV4Y2VwdGlvbiBpcyBh
IHNoYWRvdyB0cmVlIGJ1aWx0IGZvciByZW5kZXJpbmcgY29udHJvbHMgd2hpY2ggc2hvdWxkIGJl
IHZpc2libGUuCi0gICAgLy8gU28gd2UgbGV0IHRoZW0gZ28gaGVyZSBieSBjb21wYXJpbmcgaXRz
IHN1YnRyZWUgcm9vdCB3aXRoIG9uZSBvZiB0aGUgY29udHJvbHMuCi0gICAgcmV0dXJuICZtZWRp
YUNvbnRyb2xzKCktPnRyZWVTY29wZSgpID09ICZjaGlsZC50cmVlU2NvcGUoKQotICAgICAgICAm
JiBoYXNTaGFkb3dSb290UGFyZW50KGNoaWxkKQotICAgICAgICAmJiBIVE1MRWxlbWVudDo6Y2hp
bGRTaG91bGRDcmVhdGVSZW5kZXJlcihjaGlsZCk7Ci0jZW5kaWYKIH0KIAogTm9kZTo6SW5zZXJ0
ZWRJbnRvQW5jZXN0b3JSZXN1bHQgSFRNTE1lZGlhRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0
b3IoSW5zZXJ0aW9uVHlwZSBpbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZklu
c2VydGVkVHJlZSkKQEAgLTg3Miw4ICs4NTMsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBh
dXNlQWZ0ZXJEZXRhY2hlZFRhc2soKQogICAgIGlmIChtX2luQWN0aXZlRG9jdW1lbnQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlh
Q29udHJvbHMoKS0+aGlkZSgpOwogICAgIGlmIChtX25ldHdvcmtTdGF0ZSA+IE5FVFdPUktfRU1Q
VFkpCiAgICAgICAgIHBhdXNlKCk7CiAgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZSAhPSBW
aWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSkKQEAgLTkyMSwxMCArOTAwLDggQEAgaW5saW5lIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUmVuZGVyZXIoKQogICAgIGlmIChhdXRvKiByZW5kZXJl
ciA9IHRoaXMtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyLT51cGRhdGVGcm9tRWxlbWVu
dCgpOwogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAobV9tZWRp
YUNvbnRyb2xzSG9zdCkKICAgICAgICAgbV9tZWRpYUNvbnRyb2xzSG9zdC0+dXBkYXRlQ2FwdGlv
bkRpc3BsYXlTaXplcygpOwotI2VuZGlmCiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlk
QXR0YWNoUmVuZGVyZXJzKCkKQEAgLTEzMDQsOSArMTI4MSw2IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2VsZWN0TWVkaWFSZXNvdXJjZSgpCiAKICAgICAgICAgLy8gNS4gSWYgdGhlIG1lZGlh
IGVsZW1lbnTigJlzIGJsb2NrZWQtb24tcGFyc2VyIGZsYWcgaXMgZmFsc2UsIHRoZW4gcG9wdWxh
dGUgdGhlIGxpc3Qgb2YgcGVuZGluZyB0ZXh0IHRyYWNrcy4KICNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCi0gICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNv
bnRyb2xzKCktPmNoYW5nZWRDbG9zZWRDYXB0aW9uc1Zpc2liaWxpdHkoKTsKLQogICAgICAgICAv
LyBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tzQXJlUmVhZHkgd2lsbCBuZWVkICIuLi4gdGhl
IHRleHQgdHJhY2tzIHdob3NlIG1vZGUgd2FzIG5vdCBpbiB0aGUKICAgICAgICAgLy8gZGlzYWJs
ZWQgc3RhdGUgd2hlbiB0aGUgZWxlbWVudCdzIHJlc291cmNlIHNlbGVjdGlvbiBhbGdvcml0aG0g
bGFzdCBzdGFydGVkIi4KICAgICAgICAgLy8gRklYTUU6IFVwZGF0ZSB0aGlzIHRvIG1hdGNoICJw
b3B1bGF0ZSB0aGUgbGlzdCBvZiBwZW5kaW5nIHRleHQgdHJhY2tzIiBzdGVwLgpAQCAtMjIzNSwx
MCArMjIwOSw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFMb2FkaW5nRmFpbGVkKE1l
ZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgZXJyb3IpCiAgICAgICAgIG5vbmVTdXBwb3J0ZWQoKTsK
IAogICAgIHVwZGF0ZURpc3BsYXlTdGF0ZSgpOwotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkp
IHsKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5yZXNldCgpOwotICAgICAgICBtZWRpYUNvbnRy
b2xzKCktPnJlcG9ydGVkRXJyb3IoKTsKLSAgICB9CiAKICAgICBFUlJPUl9MT0coTE9HSURFTlRJ
RklFUiwgImVycm9yID0gIiwgc3RhdGljX2Nhc3Q8aW50PihlcnJvcikpOwogCkBAIC0yMjgzLDE2
ICsyMjUzLDExIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0TmV0d29ya1N0YXRlKE1lZGlh
UGxheWVyOjpOZXR3b3JrU3RhdGUgc3RhdGUpCiAgICAgICAgICAgICBjaGFuZ2VOZXR3b3JrU3Rh
dGVGcm9tTG9hZGluZ1RvSWRsZSgpOwogICAgICAgICBtX2NvbXBsZXRlbHlMb2FkZWQgPSB0cnVl
OwogICAgIH0KLQotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29u
dHJvbHMoKS0+dXBkYXRlU3RhdHVzRGlzcGxheSgpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OmNoYW5nZU5ldHdvcmtTdGF0ZUZyb21Mb2FkaW5nVG9JZGxlKCkKIHsKICAgICBtX3Byb2dy
ZXNzRXZlbnRUaW1lci5zdG9wKCk7Ci0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSAmJiBtX3Bs
YXllci0+ZGlkTG9hZGluZ1Byb2dyZXNzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+YnVm
ZmVyaW5nUHJvZ3Jlc3NlZCgpOwogCiAgICAgLy8gU2NoZWR1bGUgb25lIGxhc3QgcHJvZ3Jlc3Mg
ZXZlbnQgc28gd2UgZ3VhcmFudGVlIHRoYXQgYXQgbGVhc3Qgb25lIGlzIGZpcmVkCiAgICAgLy8g
Zm9yIGZpbGVzIHRoYXQgbG9hZCB2ZXJ5IHF1aWNrbHkuCkBAIC0yNDM3LDggKzI0MDIsNiBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUgc3RhdGUpCiAjZW5kaWYKICAgICAgICAgbV9pbml0aWFsbHlNdXRlZCA9IG1fdm9sdW1lIDwg
MC4wNSB8fCBtdXRlZCgpOwogCi0gICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAg
ICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmxvYWRlZE1ldGFkYXRhKCk7CiAgICAgICAgIHVwZGF0
ZVJlbmRlcmVyKCk7CiAKICAgICAgICAgaWYgKGlzPE1lZGlhRG9jdW1lbnQ+KGRvY3VtZW50KCkp
KQpAQCAtMjUwNSwxMyArMjQ2OCw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlT
dGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBzdGF0ZSkKICAgICAgICAgc2V0QXV0b3BsYXlF
dmVudFBsYXliYWNrU3RhdGUoQXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGU6OlByZXZlbnRlZEF1
dG9wbGF5KTsKICAgICB9CiAKLSAgICBpZiAoc2hvdWxkVXBkYXRlRGlzcGxheVN0YXRlKSB7Cisg
ICAgaWYgKHNob3VsZFVwZGF0ZURpc3BsYXlTdGF0ZSkKICAgICAgICAgdXBkYXRlRGlzcGxheVN0
YXRlKCk7Ci0gICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpIHsKLSAgICAgICAgICAgIG1l
ZGlhQ29udHJvbHMoKS0+cmVmcmVzaENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJpbGl0eSgpOwot
ICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT51cGRhdGVTdGF0dXNEaXNwbGF5KCk7Ci0gICAg
ICAgIH0KLSAgICB9CiAKICAgICB1cGRhdGVQbGF5U3RhdGUoKTsKICAgICB1cGRhdGVNZWRpYUNv
bnRyb2xsZXIoKTsKQEAgLTI4NTUsOCArMjgxMyw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
cHJvZ3Jlc3NFdmVudFRpbWVyRmlyZWQoKQogICAgICAgICBtX3ByZXZpb3VzUHJvZ3Jlc3NUaW1l
ID0gdGltZTsKICAgICAgICAgbV9zZW50U3RhbGxlZEV2ZW50ID0gZmFsc2U7CiAgICAgICAgIHVw
ZGF0ZVJlbmRlcmVyKCk7Ci0gICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAg
ICAgICBtZWRpYUNvbnRyb2xzKCktPmJ1ZmZlcmluZ1Byb2dyZXNzZWQoKTsKICAgICB9IGVsc2Ug
aWYgKHRpbWVkZWx0YSA+IDNfcyAmJiAhbV9zZW50U3RhbGxlZEV2ZW50KSB7CiAgICAgICAgIHNj
aGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnN0YWxsZWRFdmVudCk7CiAgICAgICAgIG1fc2VudFN0
YWxsZWRFdmVudCA9IHRydWU7CkBAIC0zNzQwLDggKzM2OTYsNiBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNldE11dGVkKGJvb2wgbXV0ZWQpCiAgICAgICAgIGlmICghcHJvY2Vzc2luZ01lZGlh
UGxheWVyQ2FsbGJhY2soKSkgewogICAgICAgICAgICAgaWYgKG1fcGxheWVyKSB7CiAgICAgICAg
ICAgICAgICAgbV9wbGF5ZXItPnNldE11dGVkKGVmZmVjdGl2ZU11dGVkKCkpOwotICAgICAgICAg
ICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgICAgICAgICAgICAgIG1lZGlh
Q29udHJvbHMoKS0+Y2hhbmdlZE11dGUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBA
IC0zOTA4LDkgKzM4NjIsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrUHJvZ3Jl
c3NUaW1lckZpcmVkKCkKICAgICBpZiAoIXJlcXVlc3RlZFBsYXliYWNrUmF0ZSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoIW1fcGF1c2VkICYmIGhhc01lZGlhQ29udHJvbHMoKSkKLSAg
ICAgICAgbWVkaWFDb250cm9scygpLT5wbGF5YmFja1Byb2dyZXNzZWQoKTsKLQogI2lmIEVOQUJM
RShWSURFT19UUkFDSykKICAgICB1cGRhdGVBY3RpdmVUZXh0VHJhY2tDdWVzKGN1cnJlbnRNZWRp
YVRpbWUoKSk7CiAjZW5kaWYKQEAgLTQwMzYsMTIgKzM5ODcsNiBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6Om1lZGlhUGxheWVyRGlkUmVtb3ZlVmlkZW9UcmFjayhWaWRlb1RyYWNrUHJpdmF0ZSYg
dHJhY2spCiAgICAgdHJhY2sud2lsbEJlUmVtb3ZlZCgpOwogfQogCi12b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OmNsb3NlQ2FwdGlvblRyYWNrc0NoYW5nZWQoKQotewotICAgIGlmIChoYXNNZWRpYUNv
bnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+Y2xvc2VkQ2FwdGlvblRyYWNrc0No
YW5nZWQoKTsKLX0KLQogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjphZGRBdWRpb1RyYWNrKFJlZjxB
dWRpb1RyYWNrPiYmIHRyYWNrKQogewogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRApAQCAtNDA2
NSw4ICs0MDEwLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjphZGRUZXh0VHJhY2soUmVmPFRl
eHRUcmFjaz4mJiB0cmFjaykKICAgICB9CiAKICAgICBlbnN1cmVUZXh0VHJhY2tzKCkuYXBwZW5k
KFdURk1vdmUodHJhY2spKTsKLQotICAgIGNsb3NlQ2FwdGlvblRyYWNrc0NoYW5nZWQoKTsKIH0K
IAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjphZGRWaWRlb1RyYWNrKFJlZjxWaWRlb1RyYWNrPiYm
IHRyYWNrKQpAQCAtNDA5MSw4ICs0MDM0LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZW1v
dmVUZXh0VHJhY2soUmVmPFRleHRUcmFjaz4mJiB0cmFjaywgYm9vbCBzY2hlZHVsZUV2ZW4KICAg
ICB0cmFjay0+Y2xlYXJDbGllbnQoKTsKICAgICBpZiAobV90ZXh0VHJhY2tzKQogICAgICAgICBt
X3RleHRUcmFja3MtPnJlbW92ZSh0cmFjaywgc2NoZWR1bGVFdmVudCk7Ci0KLSAgICBjbG9zZUNh
cHRpb25UcmFja3NDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVtb3Zl
VmlkZW9UcmFjayhSZWY8VmlkZW9UcmFjaz4mJiB0cmFjaykKQEAgLTQxOTMsOSArNDEzNCw2IEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQm
IHRyYWNrRWxlbWVudCkKICAgICAvLyBpbiB0aGUgbWFya3VwIGhhdmUgYmVlbiBhZGRlZC4KICAg
ICBpZiAoIW1fcGFyc2luZ0luUHJvZ3Jlc3MpCiAgICAgICAgIHNjaGVkdWxlQ29uZmlndXJlVGV4
dFRyYWNrcygpOwotCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFD
b250cm9scygpLT5jbG9zZWRDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpOwogfQogCiB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OmRpZFJlbW92ZVRleHRUcmFjayhIVE1MVHJhY2tFbGVtZW50JiB0cmFja0Vs
ZW1lbnQpCkBAIC00MzU5LDcgKzQyOTcsOSBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnRyb2xs
ZXJKU1ZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsCiAKIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6ZW5zdXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QoKQogewot
ICAgIEFTU0VSVCghbV9jcmVhdGluZ0NvbnRyb2xzKTsKKyAgICBpZiAobV9jcmVhdGluZ0NvbnRy
b2xzKQorICAgICAgICByZXR1cm47CisKICAgICBtX2NyZWF0aW5nQ29udHJvbHMgPSB0cnVlOwog
ICAgIGVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKICAgICBtX2NyZWF0aW5nQ29udHJvbHMg
PSBmYWxzZTsKQEAgLTQzODcsNyArNDMyNyw2IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6c2V0
dXBBbmRDYWxsSlMoY29uc3QgSlNTZXR1cEZ1bmN0aW9uJiB0YXNrKQogCiB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnVwZGF0ZUNhcHRpb25Db250YWluZXIoKQogewotI2lmIEVOQUJMRShNRURJQV9D
T05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKG1faGF2ZVNldFVwQ2FwdGlvbkNvbnRhaW5lcikKICAg
ICAgICAgcmV0dXJuOwogCkBAIC00NDMyLDEzICs0MzcxLDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6dXBkYXRlQ2FwdGlvbkNvbnRhaW5lcigpCiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfSk7Ci0KLSNlbmRpZgogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxheW91dFNpemVD
aGFuZ2VkKCkKIHsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChh
dXRvIGZyYW1lVmlldyA9IG1ha2VSZWZQdHIoZG9jdW1lbnQoKS52aWV3KCkpKSB7CiAgICAgICAg
IGF1dG8gdGFzayA9IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKICAg
ICAgICAgICAgIGlmIChhdXRvIHJvb3QgPSB1c2VyQWdlbnRTaGFkb3dSb290KCkpCkBAIC00NDQ2
LDcgKzQzODIsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxheW91dFNpemVDaGFuZ2VkKCkK
ICAgICAgICAgfTsKICAgICAgICAgZnJhbWVWaWV3LT5xdWV1ZVBvc3RMYXlvdXRDYWxsYmFjayhX
VEZNb3ZlKHRhc2spKTsKICAgICB9Ci0jZW5kaWYKIAogICAgIGlmICghbV9yZWNlaXZlZExheW91
dFNpemVDaGFuZ2VkKSB7CiAgICAgICAgIG1fcmVjZWl2ZWRMYXlvdXRTaXplQ2hhbmdlZCA9IHRy
dWU7CkBAIC00NTg2LDggKzQ1MjEsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3Vy
ZVRleHRUcmFja3MoKQogCiAgICAgdXBkYXRlQ2FwdGlvbkNvbnRhaW5lcigpOwogICAgIGNvbmZp
Z3VyZVRleHRUcmFja0Rpc3BsYXkoKTsKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAg
ICAgICBtZWRpYUNvbnRyb2xzKCktPmNsb3NlZENhcHRpb25UcmFja3NDaGFuZ2VkKCk7CiB9CiAj
ZW5kaWYKIApAQCAtNTE1NCw4ICs1MDg3LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRp
YVBsYXllckNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpCiAgICAgICAgIG1lZGlhUGxheWVyUmVuZGVy
aW5nTW9kZUNoYW5nZWQoKTsKICAgICB9CiAKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQot
ICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnJlc2V0KCk7CiAgICAgdXBkYXRlUmVuZGVyZXIoKTsK
IAogICAgIGlmICghcGF1c2VkKCkgJiYgIW1fbWVkaWFTZXNzaW9uLT5wbGF5YmFja1Blcm1pdHRl
ZCgpKSB7CkBAIC01MzUwLDkgKzUyODEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0
ZVZvbHVtZSgpCiAgICAgZG9jdW1lbnQoKS51cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwogI2VuZGlm
CiAKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICBtZWRpYUNvbnRyb2xzKCkt
PmNoYW5nZWRWb2x1bWUoKTsKLSNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkp
CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2NoZWR1bGVVcGRhdGVQbGF5U3RhdGUoKQpA
QCAtNTM4MCw4ICs1MzA5LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5U3Rh
dGUoKQogICAgICAgICAgICAgbV9wbGF5ZXItPnBhdXNlKCk7CiAgICAgICAgIHJlZnJlc2hDYWNo
ZWRUaW1lKCk7CiAgICAgICAgIG1fcGxheWJhY2tQcm9ncmVzc1RpbWVyLnN0b3AoKTsKLSAgICAg
ICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+
cGxheWJhY2tTdG9wcGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU0MjUsOSAr
NTM1Miw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUGxheVN0YXRlKCkKICAgICAg
ICAgICAgIG1fcGxheWVyLT5wbGF5KCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaGFzTWVk
aWFDb250cm9scygpKQotICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5wbGF5YmFja1N0YXJ0
ZWQoKTsKLQogICAgICAgICBzdGFydFBsYXliYWNrUHJvZ3Jlc3NUaW1lcigpOwogICAgICAgICBz
ZXRQbGF5aW5nKHRydWUpOwogICAgIH0gZWxzZSB7CkBAIC01NDQ1LDkgKzUzNjksNiBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSgpCiAKICAgICAgICAgaWYgKGNvdWxk
UGxheUlmRW5vdWdoRGF0YSgpKQogICAgICAgICAgICAgcHJlcGFyZVRvUGxheSgpOwotCi0gICAg
ICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCkt
PnBsYXliYWNrU3RvcHBlZCgpOwogICAgIH0KIAogICAgIHVwZGF0ZU1lZGlhQ29udHJvbGxlcigp
OwpAQCAtNjA3Niw4ICs1OTk3LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjplbnRlckZ1bGxz
Y3JlZW4oVmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogCiAgICAgICAgIGZ1bGxzY3JlZW5Nb2Rl
Q2hhbmdlZChtb2RlKTsKICAgICAgICAgY29uZmlndXJlTWVkaWFDb250cm9scygpOwotICAgICAg
ICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5l
bnRlcmVkRnVsbHNjcmVlbigpOwogICAgICAgICBpZiAoaXM8SFRNTFZpZGVvRWxlbWVudD4oKnRo
aXMpKSB7CiAgICAgICAgICAgICBIVE1MVmlkZW9FbGVtZW50JiBhc1ZpZGVvID0gZG93bmNhc3Q8
SFRNTFZpZGVvRWxlbWVudD4oKnRoaXMpOwogICAgICAgICAgICAgaWYgKGRvY3VtZW50KCkucGFn
ZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5zdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbihtX3ZpZGVvRnVs
bHNjcmVlbk1vZGUpKSB7CkBAIC02MTEzLDEyICs2MDMyLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpleGl0RnVsbHNjcmVlbigpCiAgICAgQVNTRVJUKG1fdmlkZW9GdWxsc2NyZWVuTW9kZSAh
PSBWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CiAgICAgVmlkZW9GdWxsc2NyZWVuTW9kZSBvbGRW
aWRlb0Z1bGxzY3JlZW5Nb2RlID0gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlOwogICAgIGZ1bGxzY3Jl
ZW5Nb2RlQ2hhbmdlZChWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci0jaWYgRU5BQkxFKE1FRElB
X0NPTlRST0xTX1NDUklQVCkKICAgICBSZWY8SFRNTE1lZGlhRWxlbWVudD4gcHJvdGVjdGVkVGhp
cygqdGhpcyk7IC8vIHVwZGF0ZU1lZGlhQ29udHJvbHNBZnRlclByZXNlbnRhdGlvbk1vZGVDaGFu
Z2UgY2FsbHMgbWV0aG9kcyB0aGF0IGNhbiB0cmlnZ2VyIGFyYml0cmFyeSBET00gbXV0YXRpb25z
LgogICAgIHVwZGF0ZU1lZGlhQ29udHJvbHNBZnRlclByZXNlbnRhdGlvbk1vZGVDaGFuZ2UoKTsK
LSNlbmRpZgotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJv
bHMoKS0+ZXhpdGVkRnVsbHNjcmVlbigpOwogCiAgICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKSB8
fCAhaXM8SFRNTFZpZGVvRWxlbWVudD4oKnRoaXMpKQogICAgICAgICByZXR1cm47CkBAIC02MjAx
LDE2ICs2MTE2LDExIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkQmVjb21lRnVsbHNjcmVl
bkVsZW1lbnQoKQogewogICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICIsIGZ1bGxzY3JlZW4g
bW9kZSA9ICIsIGZ1bGxzY3JlZW5Nb2RlKCkpOwogICAgIG1fd2FpdGluZ1RvRW50ZXJGdWxsc2Ny
ZWVuID0gZmFsc2U7Ci0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFD
b250cm9scygpLT5lbnRlcmVkRnVsbHNjcmVlbigpOwogICAgIHNjaGVkdWxlVXBkYXRlUGxheVN0
YXRlKCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2lsbFN0b3BCZWluZ0Z1bGxzY3Jl
ZW5FbGVtZW50KCkKIHsKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICBtZWRp
YUNvbnRyb2xzKCktPmV4aXRlZEZ1bGxzY3JlZW4oKTsKLQogICAgIGlmIChmdWxsc2NyZWVuTW9k
ZSgpID09IFZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkKICAgICAgICAgZnVsbHNjcmVlbk1v
ZGVDaGFuZ2VkKFZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKIH0KQEAgLTYzNTEsMTkgKzYyNjEs
MTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tSZWFkeVN0YXRlQ2hhbmdlZChU
ZXh0VHJhY2sqIHRyYWNrKQogICAgICAgICAvLyBUaGUgZGlzcGxheSB0cmVlcyBleGlzdCBhcyBs
b25nIGFzIHRoZSB0cmFjayBpcyBhY3RpdmUsIGluIHRoaXMgY2FzZSwKICAgICAgICAgLy8gYW5k
IGlmIHRoZSBzYW1lIHRyYWNrIGlzIGxvYWRlZCBhZ2FpbiAoZm9yIGV4YW1wbGUgaWYgdGhlIHNy
YyBhdHRyaWJ1dGUgd2FzIGNoYW5nZWQpLAogICAgICAgICAvLyBjdWVzIGNhbiBiZSBhY2N1bXVs
YXRlZCB3aXRoIHRoZSBvbGQgb25lcywgdGhhdCdzIHdoeSB0aGV5IG5lZWRzIHRvIGJlIGZsdXNo
ZWQKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29u
dHJvbHMoKS0+Y2xlYXJUZXh0RGlzcGxheUNvbnRhaW5lcigpOwogICAgICAgICB1cGRhdGVUZXh0
VHJhY2tEaXNwbGF5KCk7CiAgICAgfQogICAgIGlmIChtX3BsYXllciAmJiBtX3RleHRUcmFja3NX
aGVuUmVzb3VyY2VTZWxlY3Rpb25CZWdhbi5jb250YWlucyh0cmFjaykpIHsKICAgICAgICAgaWYg
KHRyYWNrLT5yZWFkaW5lc3NTdGF0ZSgpICE9IFRleHRUcmFjazo6TG9hZGluZykKICAgICAgICAg
ICAgIHNldFJlYWR5U3RhdGUobV9wbGF5ZXItPnJlYWR5U3RhdGUoKSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gVGhlIHRyYWNrIHJlYWRpbmVzcyBzdGF0ZSBtaWdodCBoYXZlIGNoYW5nZWQg
YXMgYSByZXN1bHQgb2YgdGhlIHVzZXIKLSAgICAgICAgLy8gY2xpY2tpbmcgdGhlIGNhcHRpb25z
IGJ1dHRvbi4gSW4gdGhpcyBjYXNlLCBhIGNoZWNrIHdoZXRoZXIgYWxsIHRoZQotICAgICAgICAv
LyByZXNvdXJjZXMgaGF2ZSBmYWlsZWQgbG9hZGluZyBzaG91bGQgYmUgZG9uZSBpbiBvcmRlciB0
byBoaWRlIHRoZSBDQyBidXR0b24uCi0gICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkgJiYg
dHJhY2stPnJlYWRpbmVzc1N0YXRlKCkgPT0gVGV4dFRyYWNrOjpGYWlsZWRUb0xvYWQpCi0gICAg
ICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnJlZnJlc2hDbG9zZWRDYXB0aW9uc0J1dHRvblZpc2li
aWxpdHkoKTsKICAgICB9CiB9CiAKQEAgLTYzOTQsNTEgKzYyOTYsMjcgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhY2tEaXNwbGF5KFRleHRUcmFja1Zpc2liaWxpdHlD
aGVja1R5cGUgY2gKICAgICBtX2hhdmVWaXNpYmxlVGV4dFRyYWNrID0gaGF2ZVZpc2libGVUZXh0
VHJhY2s7CiAgICAgbV9jbG9zZWRDYXB0aW9uc1Zpc2libGUgPSBtX2hhdmVWaXNpYmxlVGV4dFRy
YWNrOwogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAoIW1faGF2
ZVZpc2libGVUZXh0VHJhY2spCiAgICAgICAgIHJldHVybjsKIAogICAgIGVuc3VyZU1lZGlhQ29u
dHJvbHNTaGFkb3dSb290KCk7CiAgICAgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotI2Vsc2UK
LSAgICBpZiAoIW1faGF2ZVZpc2libGVUZXh0VHJhY2sgJiYgIWhhc01lZGlhQ29udHJvbHMoKSAm
JiAhY3JlYXRlTWVkaWFDb250cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtZWRpYUNv
bnRyb2xzKCktPmNoYW5nZWRDbG9zZWRDYXB0aW9uc1Zpc2liaWxpdHkoKTsKLQotICAgIHVwZGF0
ZVRleHRUcmFja0Rpc3BsYXkoKTsKLSAgICB1cGRhdGVBY3RpdmVUZXh0VHJhY2tDdWVzKGN1cnJl
bnRNZWRpYVRpbWUoKSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRh
dGVUZXh0VHJhY2tEaXNwbGF5KCkKIHsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBU
KQogICAgIGVuc3VyZU1lZGlhQ29udHJvbHNTaGFkb3dSb290KCk7CiAgICAgaWYgKCFtX21lZGlh
Q29udHJvbHNIb3N0KQogICAgICAgICBtX21lZGlhQ29udHJvbHNIb3N0ID0gTWVkaWFDb250cm9s
c0hvc3Q6OmNyZWF0ZSgqdGhpcyk7CiAgICAgbV9tZWRpYUNvbnRyb2xzSG9zdC0+dXBkYXRlVGV4
dFRyYWNrQ29udGFpbmVyKCk7Ci0jZWxzZQotICAgIGlmICghaGFzTWVkaWFDb250cm9scygpICYm
ICFjcmVhdGVNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1lZGlhQ29u
dHJvbHMoKS0+dXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotI2VuZGlmCiB9CiAKIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVk
KCkKIHsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGVuc3VyZU1lZGlh
Q29udHJvbHNTaGFkb3dSb290KCk7CiAgICAgaWYgKCFtX21lZGlhQ29udHJvbHNIb3N0KQogICAg
ICAgICBtX21lZGlhQ29udHJvbHNIb3N0ID0gTWVkaWFDb250cm9sc0hvc3Q6OmNyZWF0ZSgqdGhp
cyk7CiAgICAgbV9tZWRpYUNvbnRyb2xzSG9zdC0+dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25JbWFnZUlmTmVlZGVkKCk7Ci0jZWxzZQotICAgIGlmICghaGFzTWVkaWFDb250cm9scygpICYm
ICFjcmVhdGVNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1lZGlhQ29u
dHJvbHMoKS0+dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKCk7Ci0j
ZW5kaWYKIH0KIAogI2VuZGlmCkBAIC02NDU5LDggKzYzMzcsNiBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sIGNsb3NlZENhcHRpb25WaXNpYmxl
KQogICAgIG1hcmtDYXB0aW9uQW5kU3VidGl0bGVUcmFja3NBc1VuY29uZmlndXJlZChJbW1lZGlh
dGVseSk7CiAgICAgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwogI2Vsc2UKLSAgICBpZiAoaGFz
TWVkaWFDb250cm9scygpKQotICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmNoYW5nZWRDbG9zZWRD
YXB0aW9uc1Zpc2liaWxpdHkoKTsKICNlbmRpZgogfQogCkBAIC02NTc5LDYyICs2NDU1LDYgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAjZW5kaWYKIH0KIAotTWVkaWFDb250cm9scyogSFRNTE1l
ZGlhRWxlbWVudDo6bWVkaWFDb250cm9scygpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKE1FRElBX0NP
TlRST0xTX1NDUklQVCkKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbHNlCi0gICAgYXV0byByb290
ID0gdXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICByZXR1cm4gY2hpbGRyZW5PZlR5cGU8TWVkaWFDb250cm9scz4oKnJv
b3QpLmZpcnN0KCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpoYXNNZWRp
YUNvbnRyb2xzKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQot
ICAgIHJldHVybiBmYWxzZTsKLSNlbHNlCi0KLSAgICBpZiAoYXV0byB1c2VyQWdlbnQgPSB1c2Vy
QWdlbnRTaGFkb3dSb290KCkpIHsKLSAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBjaGlsZHJl
bk9mVHlwZTxNZWRpYUNvbnRyb2xzPigqcm9vdCkuZmlyc3QoKTsKLSAgICAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwgbm9kZS0+aXNNZWRpYUNvbnRyb2xzKCkp
OwotICAgICAgICByZXR1cm4gbm9kZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5k
aWYKLX0KLQotYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVNZWRpYUNvbnRyb2xzKCkKLXsK
LSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAgIGVuc3VyZU1lZGlhQ29udHJv
bHNTaGFkb3dSb290KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKLSAgICBpZiAoaGFzTWVk
aWFDb250cm9scygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGF1dG8gbWVkaWFDb250
cm9scyA9IE1lZGlhQ29udHJvbHM6OmNyZWF0ZShkb2N1bWVudCgpKTsKLSAgICBpZiAoIW1lZGlh
Q29udHJvbHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1lZGlhQ29udHJvbHMtPnNl
dE1lZGlhQ29udHJvbGxlcihtX21lZGlhQ29udHJvbGxlciA/IG1fbWVkaWFDb250cm9sbGVyLmdl
dCgpIDogc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sbGVySW50ZXJmYWNlKj4odGhpcykpOwotICAg
IG1lZGlhQ29udHJvbHMtPnJlc2V0KCk7Ci0gICAgaWYgKGlzRnVsbHNjcmVlbigpKQotICAgICAg
ICBtZWRpYUNvbnRyb2xzLT5lbnRlcmVkRnVsbHNjcmVlbigpOwotCi0gICAgZW5zdXJlVXNlckFn
ZW50U2hhZG93Um9vdCgpLmFwcGVuZENoaWxkKG1lZGlhQ29udHJvbHMpOwotCi0gICAgaWYgKCFj
b250cm9scygpIHx8ICFpc0Nvbm5lY3RlZCgpKQotICAgICAgICBtZWRpYUNvbnRyb2xzLT5oaWRl
KCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotfQotCiBib29sIEhUTUxNZWRpYUVsZW1l
bnQ6OnNob3VsZEZvcmNlQ29udHJvbHNEaXNwbGF5KCkgY29uc3QKIHsKICAgICAvLyBBbHdheXMg
Y3JlYXRlIGNvbnRyb2xzIGZvciBhdXRvcGxheSB2aWRlbyB0aGF0IHJlcXVpcmVzIHVzZXIgZ2Vz
dHVyZSBkdWUgdG8gYmVpbmcgaW4gbG93IHBvd2VyIG1vZGUuCkBAIC02NjYxLDIzICs2NDgxLDEw
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlTWVkaWFDb250cm9scygpCiAgICAg
ICAgIHJlcXVpcmVDb250cm9scyA9IHRydWU7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJQV9D
T05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKCFyZXF1aXJlQ29udHJvbHMgfHwgIWlzQ29ubmVjdGVk
KCkgfHwgIWluQWN0aXZlRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZW5zdXJl
TWVkaWFDb250cm9sc1NoYWRvd1Jvb3QoKTsKLSNlbHNlCi0gICAgaWYgKCFyZXF1aXJlQ29udHJv
bHMgfHwgIWlzQ29ubmVjdGVkKCkgfHwgIWluQWN0aXZlRG9jdW1lbnQoKSkgewotICAgICAgICBp
ZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5oaWRl
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWhhc01lZGlhQ29udHJvbHMo
KSAmJiAhY3JlYXRlTWVkaWFDb250cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtZWRp
YUNvbnRyb2xzKCktPnNob3coKTsKLSNlbmRpZgogfQogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQpAQCAtNjY4NywxMyArNjQ5NCw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y2FwdGlvblBy
ZWZlcmVuY2VzQ2hhbmdlZCgpCiAgICAgaWYgKCFpc1ZpZGVvKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+
dGV4dFRyYWNrUHJlZmVyZW5jZXNDaGFuZ2VkKCk7Ci0KLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJP
TFNfU0NSSVBUKQogICAgIGlmIChtX21lZGlhQ29udHJvbHNIb3N0KQogICAgICAgICBtX21lZGlh
Q29udHJvbHNIb3N0LT51cGRhdGVDYXB0aW9uRGlzcGxheVNpemVzKE1lZGlhQ29udHJvbHNIb3N0
OjpGb3JjZVVwZGF0ZTo6WWVzKTsKLSNlbmRpZgogCiAgICAgaWYgKG1fcGxheWVyKQogICAgICAg
ICBtX3BsYXllci0+dHJhY2tzQ2hhbmdlZCgpOwpAQCAtNjg3MSw5ICs2NjczLDYgQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50OjpzZXRDb250cm9sbGVyKFJlZlB0cjxNZWRpYUNvbnRyb2xsZXI+JiYg
Y29udHJvbGxlcikKIAogICAgIGlmIChtX21lZGlhQ29udHJvbGxlcikKICAgICAgICAgbV9tZWRp
YUNvbnRyb2xsZXItPmFkZE1lZGlhRWxlbWVudCgqdGhpcyk7Ci0KLSAgICBpZiAoaGFzTWVkaWFD
b250cm9scygpKQotICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnNldE1lZGlhQ29udHJvbGxlciht
X21lZGlhQ29udHJvbGxlciA/IG1fbWVkaWFDb250cm9sbGVyLmdldCgpIDogc3RhdGljX2Nhc3Q8
TWVkaWFDb250cm9sbGVySW50ZXJmYWNlKj4odGhpcykpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNldENvbnRyb2xsZXJGb3JCaW5kaW5ncyhNZWRpYUNvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIpCkBAIC03MzEzLDcgKzcxMTIsNiBAQCBSZWZQdHI8VmlkZW9QbGF5YmFja1F1YWxpdHk+IEhU
TUxNZWRpYUVsZW1lbnQ6OmdldFZpZGVvUGxheWJhY2tRdWFsaXR5KCkKICAgICByZXR1cm4gVmlk
ZW9QbGF5YmFja1F1YWxpdHk6OmNyZWF0ZSh0aW1lc3RhbXAsIG1ldHJpY3MudmFsdWUoKSk7CiB9
CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogRE9NV3JhcHBlcldvcmxkJiBI
VE1MTWVkaWFFbGVtZW50OjplbnN1cmVJc29sYXRlZFdvcmxkKCkKIHsKICAgICBpZiAoIW1faXNv
bGF0ZWRXb3JsZCkKQEAgLTc1NzIsNyArNzM3MCw2IEBAIFN0cmluZyBIVE1MTWVkaWFFbGVtZW50
OjpnZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1cygpCiAKICAgICByZXR1cm4gc3RhdHVzOwog
fQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAKIHVuc2lnbmVkIGxv
bmcgbG9uZyBIVE1MTWVkaWFFbGVtZW50OjpmaWxlU2l6ZSgpIGNvbnN0CiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IGZjZDhlZGZhYmMyODU4NjI0MzkyMDIyNzkz
ODNhMDgzMmRkOGQyY2IuLjFhNzI5ZjQwOTFhY2RmY2Y3NjVjMGJmNTY5MTY2MjVjMjVhMjNmZGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBAIC00NDcsOCArNDQ3LDYg
QEAgcHVibGljOgogICAgIGJvb2wgY2xvc2VkQ2FwdGlvbnNWaXNpYmxlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCkgb3ZlcnJpZGU7CiAK
LSAgICBNZWRpYUNvbnRyb2xzKiBtZWRpYUNvbnRyb2xzKCkgY29uc3Q7Ci0KICAgICB2b2lkIHNv
dXJjZVdhc1JlbW92ZWQoSFRNTFNvdXJjZUVsZW1lbnQmKTsKICAgICB2b2lkIHNvdXJjZVdhc0Fk
ZGVkKEhUTUxTb3VyY2VFbGVtZW50Jik7CiAKQEAgLTUwOCwxMyArNTA2LDEwIEBAIHB1YmxpYzoK
ICAgICBNZWRpYVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3ByZWxvYWQ7IH0KICAgICBNZWRpYUVsZW1lbnRTZXNzaW9uJiBtZWRpYVNlc3Npb24oKSBjb25z
dCB7IHJldHVybiAqbV9tZWRpYVNlc3Npb247IH0KIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9M
U19TQ1JJUFQpCiAgICAgdm9pZCBwYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAgICAgdm9pZCB1
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZCgpOwogICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBnZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1cygpOwotCiAgICAgTWVkaWFDb250
cm9sc0hvc3QqIG1lZGlhQ29udHJvbHNIb3N0KCkgeyByZXR1cm4gbV9tZWRpYUNvbnRyb2xzSG9z
dC5nZXQoKTsgfQotI2VuZGlmCiAKICAgICBib29sIGlzRGlzYWJsaW5nU2xlZXAoKSBjb25zdCB7
IHJldHVybiBtX3NsZWVwRGlzYWJsZXIuZ2V0KCk7IH0KIApAQCAtNjEzLDExICs2MDgsOSBAQCBw
cm90ZWN0ZWQ6CiAKICAgICBTZWN1cml0eU9yaWdpbkRhdGEgZG9jdW1lbnRTZWN1cml0eU9yaWdp
bigpIGNvbnN0IGZpbmFsOwogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAg
ICBib29sIG1lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0
dXJuIG1fbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yOyB9CiAgICAgdm9pZCBz
ZXRNZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IoYm9vbCk7CiAgICAgdm9pZCB1
cGRhdGVNZWRpYUNvbnRyb2xzQWZ0ZXJQcmVzZW50YXRpb25Nb2RlQ2hhbmdlKCk7Ci0jZW5kaWYK
IAogICAgIHZvaWQgc2NoZWR1bGVFdmVudChjb25zdCBBdG9tU3RyaW5nJik7CiAKQEAgLTg1Miw4
ICs4NDUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlZFRpbWUoKSBjb25z
dDsKICAgICB2b2lkIHJlZnJlc2hDYWNoZWRUaW1lKCkgY29uc3Q7CiAKLSAgICBib29sIGhhc01l
ZGlhQ29udHJvbHMoKSBjb25zdDsKLSAgICBib29sIGNyZWF0ZU1lZGlhQ29udHJvbHMoKTsKICAg
ICB2b2lkIGNvbmZpZ3VyZU1lZGlhQ29udHJvbHMoKTsKIAogICAgIHZvaWQgcHJlcGFyZU1lZGlh
RnJhZ21lbnRVUkkoKTsKQEAgLTg3MywxMSArODY0LDkgQEAgcHJpdmF0ZToKICAgICBlbnVtIGNs
YXNzIFNsZWVwVHlwZSB7IE5vbmUsIERpc3BsYXksIFN5c3RlbSB9OwogICAgIFNsZWVwVHlwZSBz
aG91bGREaXNhYmxlU2xlZXAoKSBjb25zdDsKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19T
Q1JJUFQpCiAgICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmKSBv
dmVycmlkZTsKICAgICBET01XcmFwcGVyV29ybGQmIGVuc3VyZUlzb2xhdGVkV29ybGQoKTsKICAg
ICBib29sIGVuc3VyZU1lZGlhQ29udHJvbHNJbmplY3RlZFNjcmlwdCgpOwotI2VuZGlmCiAKICAg
ICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlIG1lZGlhVHlwZSgpIGNvbnN0IG92ZXJy
aWRlOwogICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUgcHJlc2VudGF0aW9uVHlw
ZSgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTExNSwxMCArMTEwNCw4IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2hhc0V2ZXJIYWRBdWRpbyA6IDE7CiAgICAgYm9vbCBtX2hhc0V2ZXJIYWRWaWRlbyA6
IDE7CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGJvb2wgbV9tZWRp
YUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IgOiAxOwogICAgIGJvb2wgbV9oYXZlU2V0
VXBDYXB0aW9uQ29udGFpbmVyIDogMTsKLSNlbmRpZgogCiAgICAgYm9vbCBtX2lzU2NydWJiaW5n
UmVtb3RlbHkgOiAxOwogICAgIGJvb2wgbV93YWl0aW5nVG9FbnRlckZ1bGxzY3JlZW4gOiAxOwpA
QCAtMTE5MiwxMSArMTE3OSw5IEBAIHByaXZhdGU6CiAgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVu
dGlmaWVyOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAg
IGZyaWVuZCBjbGFzcyBNZWRpYUNvbnRyb2xzSG9zdDsKICAgICBSZWZQdHI8TWVkaWFDb250cm9s
c0hvc3Q+IG1fbWVkaWFDb250cm9sc0hvc3Q7CiAgICAgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4g
bV9pc29sYXRlZFdvcmxkOwotI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAg
IFJlZlB0cjxNZWRpYVN0cmVhbT4gbV9tZWRpYVN0cmVhbVNyY09iamVjdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWI4MmExODAwMTMyMDY5N2IwMmNhZDk2
MmU4ZWIxODY1MjRiYWU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBl
cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVt
ZW50VHlwZXMuaCIKLQotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTW91c2VFdmVu
dC5oIgotI2luY2x1ZGUgIlJlbmRlck1lZGlhLmgiCi0jaW5jbHVkZSAiUmVuZGVyTWVkaWFDb250
cm9scy5oIgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgotI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbERpdkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9D
QVRFRF9JTVBMKE1lZGlhQ29udHJvbElucHV0RWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NB
VEVEX0lNUEwoTWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50KTsKLVdURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQpOwotV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQpOwot
Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1jbGFzcyBFdmVudDsKLQotUmVmUHRyPEhU
TUxNZWRpYUVsZW1lbnQ+IHBhcmVudE1lZGlhRWxlbWVudChjb25zdCBOb2RlKiBub2RlKQotewot
ICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPE5vZGU+
IG1lZGlhTm9kZSA9IG5vZGUtPnNoYWRvd0hvc3QoKTsKLSAgICBpZiAoIW1lZGlhTm9kZSkKLSAg
ICAgICAgbWVkaWFOb2RlID0gY29uc3RfY2FzdDxOb2RlKj4obm9kZSk7Ci0gICAgaWYgKCFpczxI
VE1MTWVkaWFFbGVtZW50PigqbWVkaWFOb2RlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIGRvd25jYXN0PEhUTUxNZWRpYUVsZW1lbnQ+KG1lZGlhTm9kZS5nZXQoKSk7Ci19
Ci0KLU1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIG1lZGlhQ29udHJvbEVsZW1lbnRUeXBlKE5vZGUq
IG5vZGUpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS0+aXNN
ZWRpYUNvbnRyb2xFbGVtZW50KCkpOwotICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pigqbm9k
ZSkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQq
Pihub2RlKS0+ZGlzcGxheVR5cGUoKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWVkaWFDb250
cm9sRGl2RWxlbWVudCo+KG5vZGUpLT5kaXNwbGF5VHlwZSgpOwotfQotCi1NZWRpYUNvbnRyb2xF
bGVtZW50OjpNZWRpYUNvbnRyb2xFbGVtZW50KE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3Bs
YXlUeXBlLCBIVE1MRWxlbWVudCogZWxlbWVudCkKLSAgICA6IG1fbWVkaWFDb250cm9sbGVyKDAp
Ci0gICAgLCBtX2Rpc3BsYXlUeXBlKGRpc3BsYXlUeXBlKQotICAgICwgbV9lbGVtZW50KGVsZW1l
bnQpCi17Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6aGlkZSgpCi17Ci0gICAgbV9l
bGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5RGlzcGxheSwgQ1NTVmFs
dWVOb25lKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50OjpzaG93KCkKLXsKLSAgICBt
X2VsZW1lbnQtPnJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5KTsK
LX0KLQotYm9vbCBNZWRpYUNvbnRyb2xFbGVtZW50Ojppc1Nob3dpbmcoKSBjb25zdAotewotICAg
IGNvbnN0IFN0eWxlUHJvcGVydGllcyogcHJvcGVydHlTZXQgPSBtX2VsZW1lbnQtPmlubGluZVN0
eWxlKCk7Ci0gICAgLy8gRm9sbG93aW5nIHRoZSBjb2RlIGZyb20gc2hvdygpIGFuZCBoaWRlKCkg
YWJvdmUsIHdlIG9ubHkgaGF2ZQotICAgIC8vIHRvIGNoZWNrIGZvciB0aGUgcHJlc2Vuc2Ugb2Yg
aW5saW5lIGRpc3BsYXkuCi0gICAgcmV0dXJuICghcHJvcGVydHlTZXQgfHwgIXByb3BlcnR5U2V0
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlzcGxheSkpOwotfQotCi12b2lkIE1l
ZGlhQ29udHJvbEVsZW1lbnQ6OnNldERpc3BsYXlUeXBlKE1lZGlhQ29udHJvbEVsZW1lbnRUeXBl
IGRpc3BsYXlUeXBlKQotewotICAgIGlmIChkaXNwbGF5VHlwZSA9PSBtX2Rpc3BsYXlUeXBlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Rpc3BsYXlUeXBlID0gZGlzcGxheVR5cGU7Ci0gICAg
aWYgKGF1dG8gb2JqZWN0ID0gbV9lbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICBvYmplY3Qt
PnJlcGFpbnQoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRp
YUNvbnRyb2xEaXZFbGVtZW50OjpNZWRpYUNvbnRyb2xEaXZFbGVtZW50KERvY3VtZW50JiBkb2N1
bWVudCwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUpCi0gICAgOiBIVE1MRGl2
RWxlbWVudChkaXZUYWcsIGRvY3VtZW50KQotICAgICwgTWVkaWFDb250cm9sRWxlbWVudChkaXNw
bGF5VHlwZSwgdGhpcykKLXsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1NZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6Ok1lZGlhQ29udHJvbElucHV0RWxlbWVudChEb2N1
bWVudCYgZG9jdW1lbnQsIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKQotICAg
IDogSFRNTElucHV0RWxlbWVudChpbnB1dFRhZywgZG9jdW1lbnQsIDAsIGZhbHNlKQotICAgICwg
TWVkaWFDb250cm9sRWxlbWVudChkaXNwbGF5VHlwZSwgdGhpcykKLXsKLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ6
Ok1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlh
Q29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKQotICAgIDogTWVkaWFDb250cm9sRGl2RWxl
bWVudChkb2N1bWVudCwgZGlzcGxheVR5cGUpCi0gICAgLCBtX2N1cnJlbnRWYWx1ZSgwKQotewot
fQotCi12b2lkIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudDo6c2V0Q3VycmVudFZhbHVl
KGRvdWJsZSB0aW1lKQotewotICAgIG1fY3VycmVudFZhbHVlID0gdGltZTsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVu
dDo6TWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBNZWRp
YUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0
RWxlbWVudChkb2N1bWVudCwgZGlzcGxheVR5cGUpCi17Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
TXV0ZUJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewot
ICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAg
ICAgbWVkaWFDb250cm9sbGVyKCktPnNldE11dGVkKCFtZWRpYUNvbnRyb2xsZXIoKS0+bXV0ZWQo
KSk7Ci0gICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfQotCi0gICAgSFRN
TElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6OmNoYW5nZWRNdXRlKCkKLXsKLSAgICB1cGRhdGVE
aXNwbGF5VHlwZSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50Ojp1
cGRhdGVEaXNwbGF5VHlwZSgpCi17Ci0gICAgc2V0RGlzcGxheVR5cGUobWVkaWFDb250cm9sbGVy
KCktPm11dGVkKCkgPyBNZWRpYVVuTXV0ZUJ1dHRvbiA6IE1lZGlhTXV0ZUJ1dHRvbik7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sU2Vla0J1dHRv
bkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50KERvY3VtZW50JiBkb2N1bWVu
dCwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUpCi0gICAgOiBNZWRpYUNvbnRy
b2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIGRpc3BsYXlUeXBlKQotewotfQotCi12b2lkIE1lZGlh
Q29udHJvbFNlZWtCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVu
dCkKLXsKLSAgICAvLyBTZXQgdGhlIG1vdXNlZG93biBhbmQgbW91c2V1cCBldmVudHMgYXMgZGVm
YXVsdEhhbmRsZWQgc28gdGhleQotICAgIC8vIGRvIG5vdCB0cmlnZ2VyIGRyYWcgc3RhcnQgb3Ig
ZW5kIGFjdGlvbnMgaW4gTWVkaWFDb250cm9sUGFuZWxFbGVtZW50LgotICAgIGlmIChldmVudC50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2V1cEV2ZW50KQotICAgICAgICBldmVudC5zZXREZWZhdWx0SGFuZGxl
ZCgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50OjpzZXRBY3RpdmUo
Ym9vbCBmbGFnLCBib29sIHBhdXNlKQotewotICAgIGlmIChmbGFnID09IGFjdGl2ZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoZmxhZykKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCkt
PmJlZ2luU2Nhbm5pbmcoaXNGb3J3YXJkQnV0dG9uKCkgPyBNZWRpYUNvbnRyb2xsZXJJbnRlcmZh
Y2U6OkZvcndhcmQgOiBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKLSAgICBl
bHNlCi0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5lbmRTY2FubmluZygpOwotCi0gICAgTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50OjpzZXRBY3RpdmUoZmxhZywgcGF1c2UpOwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVs
ZW1lbnQ6Ok1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50
KQotICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KGRvY3VtZW50LCBNZWRpYVZvbHVtZVNs
aWRlcikKLSAgICAsIG1fY2xlYXJNdXRlZE9uVXNlckludGVyYWN0aW9uKGZhbHNlKQotewotfQot
Ci12b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQmIGV2ZW50KQotewotICAgIC8vIExlZnQgYnV0dG9uIGlzIDAuIFJlamVjdHMgbW91
c2UgZXZlbnRzIG5vdCBmcm9tIGxlZnQgYnV0dG9uLgotICAgIGlmIChpczxNb3VzZUV2ZW50Pihl
dmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQpLmJ1dHRvbigpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE1l
ZGlhQ29udHJvbElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAg
ICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCB8fCBldmVu
dC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQgfHwgZXZlbnQudHlwZSgpID09
IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZG91
YmxlIHZvbHVtZSA9IHZhbHVlKCkudG9Eb3VibGUoKTsKLSAgICBpZiAodm9sdW1lICE9IG1lZGlh
Q29udHJvbGxlcigpLT52b2x1bWUoKSkKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPnNldFZv
bHVtZSh2b2x1bWUpOwotICAgIGlmIChtX2NsZWFyTXV0ZWRPblVzZXJJbnRlcmFjdGlvbikKLSAg
ICAgICAgbWVkaWFDb250cm9sbGVyKCktPnNldE11dGVkKGZhbHNlKTsKLSAgICBldmVudC5zZXRE
ZWZhdWx0SGFuZGxlZCgpOwotfQotCi1ib29sIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1l
bnQ6OndpbGxSZXNwb25kVG9Nb3VzZU1vdmVFdmVudHMoKQotewotICAgIGlmICghcmVuZGVyZXIo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIE1lZGlhQ29udHJvbElucHV0
RWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50cygpOwotfQotCi1ib29sIE1lZGlh
Q29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OndpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRz
KCkKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OndpbGxSZXNwb25kVG9Nb3VzZUNsaWNr
RXZlbnRzKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6c2V0
Vm9sdW1lKGRvdWJsZSB2b2x1bWUpCi17Ci0gICAgaWYgKHZhbHVlKCkudG9Eb3VibGUoKSAhPSB2
b2x1bWUpCi0gICAgICAgIHNldFZhbHVlKFN0cmluZzo6bnVtYmVyKHZvbHVtZSkpOwotfQotCi12
b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OnNldENsZWFyTXV0ZWRPblVzZXJJ
bnRlcmFjdGlvbihib29sIGNsZWFyTXV0ZSkKLXsKLSAgICBtX2NsZWFyTXV0ZWRPblVzZXJJbnRl
cmFjdGlvbiA9IGNsZWFyTXV0ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOTMxZmMwZTM5NTgzY2EyN2Q4MWI3NTc3Y2VkODM5NjkxNDkxMTdlYS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwMCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbmNs
dWRlICJIVE1MRGl2RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNp
bmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sbGVySW50
ZXJmYWNlLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotZW51bSBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSB7Ci0gICAgTWVkaWFFbnRlckZ1bGxz
Y3JlZW5CdXR0b24gPSAwLAotICAgIE1lZGlhTXV0ZUJ1dHRvbiwKLSAgICBNZWRpYVBsYXlCdXR0
b24sCi0gICAgTWVkaWFTZWVrQmFja0J1dHRvbiwKLSAgICBNZWRpYVNlZWtGb3J3YXJkQnV0dG9u
LAotICAgIE1lZGlhU2xpZGVyLAotICAgIE1lZGlhU2xpZGVyVGh1bWIsCi0gICAgTWVkaWFSZXdp
bmRCdXR0b24sCi0gICAgTWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uLAotICAgIE1lZGlhU2hv
d0Nsb3NlZENhcHRpb25zQnV0dG9uLAotICAgIE1lZGlhSGlkZUNsb3NlZENhcHRpb25zQnV0dG9u
LAotICAgIE1lZGlhVW5NdXRlQnV0dG9uLAotICAgIE1lZGlhUGF1c2VCdXR0b24sCi0gICAgTWVk
aWFUaW1lbGluZUNvbnRhaW5lciwKLSAgICBNZWRpYUN1cnJlbnRUaW1lRGlzcGxheSwKLSAgICBN
ZWRpYVRpbWVSZW1haW5pbmdEaXNwbGF5LAotICAgIE1lZGlhU3RhdHVzRGlzcGxheSwKLSAgICBN
ZWRpYUNvbnRyb2xzUGFuZWwsCi0gICAgTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIsCi0gICAg
TWVkaWFWb2x1bWVTbGlkZXIsCi0gICAgTWVkaWFWb2x1bWVTbGlkZXJUaHVtYiwKLSAgICBNZWRp
YUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXIsCi0gICAgTWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVy
VGh1bWIsCi0gICAgTWVkaWFWb2x1bWVTbGlkZXJNdXRlQnV0dG9uLAotICAgIE1lZGlhVGV4dFRy
YWNrRGlzcGxheUNvbnRhaW5lciwKLSAgICBNZWRpYVRleHRUcmFja0Rpc3BsYXksCi0gICAgTWVk
aWFFeGl0RnVsbHNjcmVlbkJ1dHRvbiwKLSAgICBNZWRpYU92ZXJsYXlQbGF5QnV0dG9uLAotICAg
IE1lZGlhQ2xvc2VkQ2FwdGlvbnNDb250YWluZXIsCi0gICAgTWVkaWFDbG9zZWRDYXB0aW9uc1Ry
YWNrTGlzdCwKLX07Ci0KLVJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBwYXJlbnRNZWRpYUVsZW1l
bnQoY29uc3QgTm9kZSopOwotaW5saW5lIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBwYXJlbnRN
ZWRpYUVsZW1lbnQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgeyByZXR1cm4gcGFyZW50
TWVkaWFFbGVtZW50KHJlbmRlcmVyLm5vZGUoKSk7IH0KLQotTWVkaWFDb250cm9sRWxlbWVudFR5
cGUgbWVkaWFDb250cm9sRWxlbWVudFR5cGUoTm9kZSopOwotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbEVsZW1lbnQgewotcHVibGljOgotICAg
IHZpcnR1YWwgdm9pZCBoaWRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNob3coKTsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNTaG93aW5nKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIE1lZGlhQ29udHJvbEVs
ZW1lbnRUeXBlIGRpc3BsYXlUeXBlKCkgeyByZXR1cm4gbV9kaXNwbGF5VHlwZTsgfQotCi0gICAg
dmlydHVhbCB2b2lkIHNldE1lZGlhQ29udHJvbGxlcihNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2Uq
IGNvbnRyb2xsZXIpIHsgbV9tZWRpYUNvbnRyb2xsZXIgPSBjb250cm9sbGVyOyB9Ci0gICAgdmly
dHVhbCBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqIG1lZGlhQ29udHJvbGxlcigpIGNvbnN0IHsg
cmV0dXJuIG1fbWVkaWFDb250cm9sbGVyOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBN
ZWRpYUNvbnRyb2xFbGVtZW50KE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlLCBIVE1MRWxlbWVudCop
OwotICAgIH5NZWRpYUNvbnRyb2xFbGVtZW50KCkgPSBkZWZhdWx0OwotCi0gICAgdmlydHVhbCB2
b2lkIHNldERpc3BsYXlUeXBlKE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlKTsKLSAgICB2aXJ0dWFs
IGJvb2wgaXNNZWRpYUNvbnRyb2xFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi1w
cml2YXRlOgotICAgIE1lZGlhQ29udHJvbGxlckludGVyZmFjZSogbV9tZWRpYUNvbnRyb2xsZXI7
Ci0gICAgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgbV9kaXNwbGF5VHlwZTsKLSAgICBIVE1MRWxl
bWVudCogbV9lbGVtZW50OwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1jbGFzcyBNZWRpYUNvbnRyb2xEaXZFbGVtZW50IDogcHVibGljIEhUTUxEaXZFbGVtZW50LCBw
dWJsaWMgTWVkaWFDb250cm9sRWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChN
ZWRpYUNvbnRyb2xEaXZFbGVtZW50KTsKLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBNZWRpYUNv
bnRyb2xEaXZFbGVtZW50KERvY3VtZW50JiwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUpOwotCi1w
cml2YXRlOgotICAgIGJvb2wgaXNNZWRpYUNvbnRyb2xFbGVtZW50KCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gTWVkaWFDb250cm9sRWxlbWVudDo6aXNNZWRpYUNvbnRyb2xFbGVtZW50KCk7IH0KLX07
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9s
SW5wdXRFbGVtZW50IDogcHVibGljIEhUTUxJbnB1dEVsZW1lbnQsIHB1YmxpYyBNZWRpYUNvbnRy
b2xFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbElucHV0
RWxlbWVudCk7Ci1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sSW5wdXRFbGVt
ZW50KERvY3VtZW50JiwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUpOwotCi1wcml2YXRlOgotICAg
IGJvb2wgaXNNZWRpYUNvbnRyb2xFbGVtZW50KCkgY29uc3QgZmluYWwgeyByZXR1cm4gTWVkaWFD
b250cm9sRWxlbWVudDo6aXNNZWRpYUNvbnRyb2xFbGVtZW50KCk7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlRGlzcGxheVR5cGUoKSB7IH0KLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50IDogcHVibGlj
IE1lZGlhQ29udHJvbERpdkVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVk
aWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50KTsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEN1cnJl
bnRWYWx1ZShkb3VibGUpOwotICAgIGRvdWJsZSBjdXJyZW50VmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX2N1cnJlbnRWYWx1ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250
cm9sVGltZURpc3BsYXlFbGVtZW50KERvY3VtZW50JiwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUp
OwotCi1wcml2YXRlOgotICAgIGRvdWJsZSBtX2N1cnJlbnRWYWx1ZTsKLX07Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVs
ZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50KTsKLXB1YmxpYzoKLSAg
ICB2b2lkIGNoYW5nZWRNdXRlKCk7Ci0KLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNr
RXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhw
bGljaXQgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRy
b2xFbGVtZW50VHlwZSk7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBv
dmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0ZURpc3BsYXlUeXBlKCkgb3ZlcnJp
ZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlh
Q29udHJvbFNlZWtCdXR0b25FbGVtZW50IDogcHVibGljIE1lZGlhQ29udHJvbElucHV0RWxlbWVu
dCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxl
bWVudCk7Ci1wdWJsaWM6Ci0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50cygp
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IE1l
ZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50KERvY3VtZW50JiwgTWVkaWFDb250cm9sRWxlbWVu
dFR5cGUpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBib29sIGlzRm9yd2FyZEJ1dHRvbigpIGNvbnN0ID0gMDsKLQotcHJpdmF0
ZToKLSAgICB2b2lkIHNldEFjdGl2ZShib29sIC8qZmxhZyovID0gdHJ1ZSwgYm9vbCAvKnBhdXNl
Ki8gPSBmYWxzZSkgZmluYWw7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLWNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQgOiBwdWJsaWMgTWVkaWFD
b250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29u
dHJvbFZvbHVtZVNsaWRlckVsZW1lbnQpOwotcHVibGljOgotICAgIGJvb2wgd2lsbFJlc3BvbmRU
b01vdXNlTW92ZUV2ZW50cygpIG92ZXJyaWRlOwotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNl
Q2xpY2tFdmVudHMoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFZvbHVtZShkb3VibGUpOwotICAg
IHZvaWQgc2V0Q2xlYXJNdXRlZE9uVXNlckludGVyYWN0aW9uKGJvb2wpOwotCi1wcm90ZWN0ZWQ6
Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYp
OwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci0KLXBy
aXZhdGU6Ci0gICAgYm9vbCBtX2NsZWFyTXV0ZWRPblVzZXJJbnRlcmFjdGlvbjsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJiNGI0Y2I2NGFlYmUyMTRiOTI4MTVhMDZkN2Rh
YjkzODgwNTA2NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxNTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLQotI2lmIEVOQUJMRShWSURFTykK
LQotI2luY2x1ZGUgIkRPTVRva2VuTGlzdC5oIgotI2luY2x1ZGUgIkVsZW1lbnRDaGlsZEl0ZXJh
dG9yLmgiCi0jaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnVsbHNjcmVlbk1hbmFnZXIuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIVE1MSGVhZGluZ0VsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MTElFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFVMaXN0RWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgotI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgi
Ci0jaW5jbHVkZSAiTWVkaWFDb250cm9scy5oIgotI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKLSNp
bmNsdWRlICJQT0RJbnRlcnZhbC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWdl
R3JvdXAuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgotI2luY2x1ZGUgIlJlbmRlck1lZGlh
Q29udHJvbHMuaCIKLSNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgotI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2hhZG93Um9vdC5oIgotI2luY2x1
ZGUgIlRleHRUcmFja0N1ZUdlbmVyaWMuaCIKLSNpbmNsdWRlICJUZXh0VHJhY2tMaXN0LmgiCi0j
aW5jbHVkZSAiVlRUUmVnaW9uTGlzdC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0xhbmd1YWdlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudCk7Ci1X
VEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVFbGVt
ZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xPdmVybGF5RW5j
bG9zdXJlRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9s
VGltZWxpbmVDb250YWluZXJFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChN
ZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KTsKLVdURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudCk7Ci1XVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudCk7
Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0
ZUJ1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJv
bFBsYXlCdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNv
bnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TVBMKE1lZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09f
QUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50KTsKLVdURl9N
QUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50KTsK
LVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1l
QnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9s
VG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQpOwotV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tM
aXN0RWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xG
dWxsc2NyZWVuQnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVk
aWFDb250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudCk7Ci1XVEZf
TUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1
dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURf
SU1QTChNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQpOwotV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQp
OwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQpOwotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1zdGF0aWMgY29u
c3QgQXRvbVN0cmluZyYgZ2V0TWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudFNo
YWRvd1BzZXVkb0lkKCk7Ci1zdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZ2V0TWVkaWFDb250cm9s
VGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50U2hhZG93UHNldWRvSWQoKTsKLQotTWVkaWFDb250
cm9sUGFuZWxFbGVtZW50OjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50KQotICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChkb2N1bWVudCwgTWVkaWFDb250cm9s
c1BhbmVsKQotICAgICwgbV9jYW5CZURyYWdnZWQoZmFsc2UpCi0gICAgLCBtX2lzQmVpbmdEcmFn
Z2VkKGZhbHNlKQotICAgICwgbV9pc0Rpc3BsYXllZChmYWxzZSkKLSAgICAsIG1fb3BhcXVlKHRy
dWUpCi0gICAgLCBtX3RyYW5zaXRpb25UaW1lcigqdGhpcywgJk1lZGlhQ29udHJvbFBhbmVsRWxl
bWVudDo6dHJhbnNpdGlvblRpbWVyRmlyZWQpCi17Ci0gICAgc2V0UHNldWRvKEF0b21TdHJpbmco
Ii13ZWJraXQtbWVkaWEtY29udHJvbHMtcGFuZWwiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sUGFuZWxFbGVtZW50PiBNZWRpYUNvbnRy
b2xQYW5lbEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50KGRvY3VtZW50KSk7Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzdGFydERyYWcoY29uc3QgTGF5b3V0UG9p
bnQmIGV2ZW50TG9jYXRpb24pCi17Ci0gICAgaWYgKCFtX2NhbkJlRHJhZ2dlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1faXNCZWluZ0RyYWdnZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGF1dG8gcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIg
fHwgIXJlbmRlcmVyLT5pc0JveCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8RnJh
bWU+IGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fbGFzdERyYWdFdmVudExvY2F0aW9uID0gZXZlbnRMb2NhdGlvbjsK
LQotICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1l
bnQodGhpcyk7Ci0KLSAgICBtX2lzQmVpbmdEcmFnZ2VkID0gdHJ1ZTsKLX0KLQotdm9pZCBNZWRp
YUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmNvbnRpbnVlRHJhZyhjb25zdCBMYXlvdXRQb2ludCYgZXZl
bnRMb2NhdGlvbikKLXsKLSAgICBpZiAoIW1faXNCZWluZ0RyYWdnZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIExheW91dFNpemUgZGlzdGFuY2VEcmFnZ2VkID0gZXZlbnRMb2NhdGlvbiAtIG1f
bGFzdERyYWdFdmVudExvY2F0aW9uOwotICAgIG1fY3VtdWxhdGl2ZURyYWdPZmZzZXQubW92ZShk
aXN0YW5jZURyYWdnZWQpOwotICAgIG1fbGFzdERyYWdFdmVudExvY2F0aW9uID0gZXZlbnRMb2Nh
dGlvbjsKLSAgICBzZXRQb3NpdGlvbihtX2N1bXVsYXRpdmVEcmFnT2Zmc2V0KTsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmVuZERyYWcoKQotewotICAgIGlmICghbV9pc0Jl
aW5nRHJhZ2dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc0JlaW5nRHJhZ2dlZCA9IGZh
bHNlOwotCi0gICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKTsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmcmFtZS0+ZXZlbnRIYW5kbGVy
KCkuc2V0Q2FwdHVyaW5nTW91c2VFdmVudHNFbGVtZW50KG51bGxwdHIpOwotfQotCi12b2lkIE1l
ZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6c3RhcnRUaW1lcigpCi17Ci0gICAgc3RvcFRpbWVyKCk7
Ci0KLSAgICAvLyBUaGUgdGltZXIgaXMgcmVxdWlyZWQgdG8gc2V0IHRoZSBwcm9wZXJ0eSBkaXNw
bGF5Oidub25lJyBvbiB0aGUgcGFuZWwsCi0gICAgLy8gc3VjaCB0aGF0IGNhcHRpb25zIGFyZSBj
b3JyZWN0bHkgZGlzcGxheWVkIGF0IHRoZSBib3R0b20gb2YgdGhlIHZpZGVvCi0gICAgLy8gYXQg
dGhlIGVuZCBvZiB0aGUgZmFkZW91dCB0cmFuc2l0aW9uLgotICAgIFNlY29uZHMgZHVyYXRpb24g
PSBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkubWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigp
OwotICAgIG1fdHJhbnNpdGlvblRpbWVyLnN0YXJ0T25lU2hvdChkdXJhdGlvbik7Ci19Ci0KLXZv
aWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzdG9wVGltZXIoKQotewotICAgIGlmIChtX3Ry
YW5zaXRpb25UaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3RyYW5zaXRpb25UaW1lci5zdG9w
KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50Ojp0cmFuc2l0aW9uVGltZXJG
aXJlZCgpCi17Ci0gICAgaWYgKCFtX29wYXF1ZSkKLSAgICAgICAgaGlkZSgpOwotCi0gICAgc3Rv
cFRpbWVyKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzZXRQb3NpdGlv
bihjb25zdCBMYXlvdXRQb2ludCYgcG9zaXRpb24pCi17Ci0gICAgZG91YmxlIGxlZnQgPSBwb3Np
dGlvbi54KCk7Ci0gICAgZG91YmxlIHRvcCA9IHBvc2l0aW9uLnkoKTsKLQotICAgIC8vIFNldCB0
aGUgbGVmdCBhbmQgdG9wIHRvIGNvbnRyb2wgdGhlIHBhbmVsJ3MgcG9zaXRpb247IHRoaXMgZGVw
ZW5kcyBvbiBpdCBiZWluZyBhYnNvbHV0ZSBwb3NpdGlvbmVkLgotICAgIC8vIFNldCB0aGUgbWFy
Z2luIHRvIHplcm8gc2luY2UgdGhlIHBvc2l0aW9uIHBhc3NlZCBpbiB3aWxsIGFscmVhZHkgaW5j
bHVkZSB0aGUgZWZmZWN0IG9mIHRoZSBtYXJnaW4uCi0gICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eUxlZnQsIGxlZnQsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIHNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3AsIHRvcCwgQ1NTVW5pdFR5cGU6OkNTU19Q
WCk7Ci0gICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIDAu
MCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eU1hcmdpblRvcCwgMC4wLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLQotICAgIGNsYXNz
TGlzdCgpLmFkZCgiZHJhZ2dlZCIpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVu
dDo6cmVzZXRQb3NpdGlvbigpCi17Ci0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUxlZnQpOwotICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlU
b3ApOwotICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0
KTsKLSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wKTsK
LQotICAgIGNsYXNzTGlzdCgpLnJlbW92ZSgiZHJhZ2dlZCIpOwotCi0gICAgbV9jdW11bGF0aXZl
RHJhZ09mZnNldC5zZXRYKDApOwotICAgIG1fY3VtdWxhdGl2ZURyYWdPZmZzZXQuc2V0WSgwKTsK
LX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6Om1ha2VPcGFxdWUoKQotewotICAg
IGlmIChtX29wYXF1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZG91YmxlIGR1cmF0aW9uID0g
UmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLm1lZGlhQ29udHJvbHNGYWRlSW5EdXJhdGlvbigpOwot
Ci0gICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zaXRpb25Qcm9wZXJ0
eSwgQ1NTUHJvcGVydHlPcGFjaXR5KTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5VHJhbnNpdGlvbkR1cmF0aW9uLCBkdXJhdGlvbiwgQ1NTVW5pdFR5cGU6OkNTU19TKTsK
LSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5T3BhY2l0eSwgMS4wLCBDU1NV
bml0VHlwZTo6Q1NTX05VTUJFUik7Ci0KLSAgICBtX29wYXF1ZSA9IHRydWU7Ci0KLSAgICBpZiAo
bV9pc0Rpc3BsYXllZCkKLSAgICAgICAgc2hvdygpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFBh
bmVsRWxlbWVudDo6bWFrZVRyYW5zcGFyZW50KCkKLXsKLSAgICBpZiAoIW1fb3BhcXVlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBTZWNvbmRzIGR1cmF0aW9uID0gUmVuZGVyVGhlbWU6OnNpbmds
ZXRvbigpLm1lZGlhQ29udHJvbHNGYWRlT3V0RHVyYXRpb24oKTsKLQotICAgIHNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2l0aW9uUHJvcGVydHksIENTU1Byb3BlcnR5T3Bh
Y2l0eSk7Ci0gICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zaXRpb25E
dXJhdGlvbiwgZHVyYXRpb24udmFsdWUoKSwgQ1NTVW5pdFR5cGU6OkNTU19TKTsKLSAgICBzZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5T3BhY2l0eSwgMC4wLCBDU1NVbml0VHlwZTo6
Q1NTX05VTUJFUik7Ci0KLSAgICBtX29wYXF1ZSA9IGZhbHNlOwotICAgIHN0YXJ0VGltZXIoKTsK
LX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIo
RXZlbnQmIGV2ZW50KQotewotICAgIE1lZGlhQ29udHJvbERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoZXZlbnQpOwotCi0gICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkgewotICAg
ICAgICBMYXlvdXRQb2ludCBsb2NhdGlvbiA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KS5h
YnNvbHV0ZUxvY2F0aW9uKCk7Ci0gICAgICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LnRhcmdldCgpID09IHRoaXMpIHsKLSAgICAgICAg
ICAgIHN0YXJ0RHJhZyhsb2NhdGlvbik7Ci0gICAgICAgICAgICBldmVudC5zZXREZWZhdWx0SGFu
ZGxlZCgpOwotICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2Vtb3ZlRXZlbnQgJiYgbV9pc0JlaW5nRHJhZ2dlZCkKLSAgICAgICAgICAgIGNvbnRpbnVl
RHJhZyhsb2NhdGlvbik7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2V1cEV2ZW50ICYmIG1faXNCZWluZ0RyYWdnZWQpIHsKLSAgICAgICAgICAgIGNv
bnRpbnVlRHJhZyhsb2NhdGlvbik7Ci0gICAgICAgICAgICBlbmREcmFnKCk7Ci0gICAgICAgICAg
ICBldmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6c2V0Q2FuQmVEcmFnZ2VkKGJvb2wgY2FuQmVEcmFn
Z2VkKQotewotICAgIGlmIChtX2NhbkJlRHJhZ2dlZCA9PSBjYW5CZURyYWdnZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fY2FuQmVEcmFnZ2VkID0gY2FuQmVEcmFnZ2VkOwotCi0gICAgaWYg
KCFjYW5CZURyYWdnZWQpCi0gICAgICAgIGVuZERyYWcoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRy
b2xQYW5lbEVsZW1lbnQ6OnNldElzRGlzcGxheWVkKGJvb2wgaXNEaXNwbGF5ZWQpCi17Ci0gICAg
bV9pc0Rpc3BsYXllZCA9IGlzRGlzcGxheWVkOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFBhbmVsRW5jbG9zdXJlRWxlbWVudDo6TWVkaWFDb250
cm9sUGFuZWxFbmNsb3N1cmVFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICAvLyBNYXBw
aW5nIG9udG8gc2FtZSBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBhcyBwYW5lbCBlbGVtZW50LCBz
aW5jZSBpdCBoYXMgc2ltaWxhciBwcm9wZXJ0aWVzLgotICAgIDogTWVkaWFDb250cm9sRGl2RWxl
bWVudChkb2N1bWVudCwgTWVkaWFDb250cm9sc1BhbmVsKQotewotICAgIHNldFBzZXVkbyhBdG9t
U3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLWVuY2xvc3VyZSIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xQYW5lbEVuY2xvc3Vy
ZUVsZW1lbnQ+IE1lZGlhQ29udHJvbFBhbmVsRW5jbG9zdXJlRWxlbWVudDo6Y3JlYXRlKERvY3Vt
ZW50JiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xQ
YW5lbEVuY2xvc3VyZUVsZW1lbnQoZG9jdW1lbnQpKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xPdmVybGF5RW5jbG9zdXJlRWxlbWVudDo6TWVk
aWFDb250cm9sT3ZlcmxheUVuY2xvc3VyZUVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAg
IC8vIE1hcHBpbmcgb250byBzYW1lIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGFzIHBhbmVsIGVs
ZW1lbnQsIHNpbmNlIGl0IGhhcyBzaW1pbGFyIHByb3BlcnRpZXMuCi0gICAgOiBNZWRpYUNvbnRy
b2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzUGFuZWwpCi17Ci0gICAgc2V0UHNl
dWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtb3ZlcmxheS1lbmNsb3N1cmUi
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250
cm9sT3ZlcmxheUVuY2xvc3VyZUVsZW1lbnQ+IE1lZGlhQ29udHJvbE92ZXJsYXlFbmNsb3N1cmVF
bGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE1lZGlhQ29udHJvbE92ZXJsYXlFbmNsb3N1cmVFbGVtZW50KGRvY3VtZW50KSk7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sVGltZWxp
bmVDb250YWluZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQo
RG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChkb2N1bWVu
dCwgTWVkaWFUaW1lbGluZUNvbnRhaW5lcikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygi
LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZS1jb250YWluZXIiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sVGltZWxpbmVDb250
YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0
ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbFRpbWVsaW5lQ29u
dGFpbmVyRWxlbWVudD4gZWxlbWVudCA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sVGltZWxp
bmVDb250YWluZXJFbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgZWxlbWVudC0+aGlkZSgpOwotICAg
IHJldHVybiBlbGVtZW50OwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVy
RWxlbWVudDo6c2V0VGltZURpc3BsYXlzSGlkZGVuKGJvb2wgaGlkZGVuKQotewotICAgIGZvciAo
YXV0byYgZWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KCp0aGlzKSkgewotICAgICAg
ICBpZiAoZWxlbWVudC5zaGFkb3dQc2V1ZG9JZCgpICE9IGdldE1lZGlhQ29udHJvbFRpbWVSZW1h
aW5pbmdEaXNwbGF5RWxlbWVudFNoYWRvd1BzZXVkb0lkKCkKLSAgICAgICAgICAgICYmIGVsZW1l
bnQuc2hhZG93UHNldWRvSWQoKSAhPSBnZXRNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlF
bGVtZW50U2hhZG93UHNldWRvSWQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudCYgdGltZURpc3BsYXkgPSBzdGF0aWNfY2Fz
dDxNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQmPihlbGVtZW50KTsKLSAgICAgICAgaWYg
KGhpZGRlbikKLSAgICAgICAgICAgIHRpbWVEaXNwbGF5LmhpZGUoKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdGltZURpc3BsYXkuc2hvdygpOwotICAgIH0KLX0KLQotUmVuZGVyUHRyPFJl
bmRlckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRl
RWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3Np
dGlvbiYpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlck1lZGlhQ29udHJvbFRp
bWVsaW5lQ29udGFpbmVyPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5l
ckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQoRG9jdW1l
bnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChkb2N1bWVudCwgTWVk
aWFWb2x1bWVTbGlkZXJDb250YWluZXIpCi17Ci0gICAgc2V0UHNldWRvKEF0b21TdHJpbmcoIi13
ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIiLCBBdG9tU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sVm9sdW1lU2xp
ZGVyQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxl
bWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudD4gZWxlbWVudCA9IGFkb3B0UmVmKCpuZXcgTWVk
aWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCkpOwotICAgIGVs
ZW1lbnQtPmhpZGUoKTsKLSAgICByZXR1cm4gZWxlbWVudDsKLX0KLQotUmVuZGVyUHRyPFJlbmRl
ckVsZW1lbnQ+IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0
ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9z
aXRpb24mKQotewotICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJNZWRpYVZvbHVtZVNs
aWRlckNvbnRhaW5lcj4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKLX0KLQotdm9pZCBNZWRpYUNv
bnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50JiBldmVudCkKLXsKLSAgICAvLyBQb29yIG1hbidzIG1vdXNlbGVhdmUgZXZlbnQgZGV0ZWN0
aW9uLgotCi0gICAgaWYgKCFpczxNb3VzZUV2ZW50PihldmVudCkgfHwgZXZlbnQudHlwZSgpICE9
IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IWlzPE5vZGU+KGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KS5yZWxhdGVkVGFyZ2V0KCkpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29udGFpbnNJbmNsdWRpbmdTaGFkb3dET00oJmRv
d25jYXN0PE5vZGU+KCpkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkucmVsYXRlZFRhcmdldCgp
KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGhpZGUoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6TWVk
aWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDog
TWVkaWFDb250cm9sRGl2RWxlbWVudChkb2N1bWVudCwgTWVkaWFTdGF0dXNEaXNwbGF5KQotICAg
ICwgbV9zdGF0ZUJlaW5nRGlzcGxheWVkKE5vdGhpbmcpCi17Ci0gICAgc2V0UHNldWRvKEF0b21T
dHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtc3RhdHVzLWRpc3BsYXkiLCBBdG9tU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sU3RhdHVzRGlz
cGxheUVsZW1lbnQ+IE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUoRG9j
dW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxl
bWVudD4gZWxlbWVudCA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVs
ZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBlbGVtZW50LT5oaWRlKCk7Ci0gICAgcmV0dXJuIGVsZW1l
bnQ7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OnVwZGF0ZSgp
Ci17Ci0gICAgLy8gR2V0IHRoZSBuZXcgc3RhdGUgdGhhdCB3ZSdsbCBoYXZlIHRvIGRpc3BsYXku
Ci0gICAgU3RhdGVCZWluZ0Rpc3BsYXllZCBuZXdTdGF0ZVRvRGlzcGxheSA9IE5vdGhpbmc7Ci0K
LSAgICBpZiAobWVkaWFDb250cm9sbGVyKCktPnJlYWR5U3RhdGUoKSA8PSBNZWRpYUNvbnRyb2xs
ZXJJbnRlcmZhY2U6OkhBVkVfTUVUQURBVEEgJiYgbWVkaWFDb250cm9sbGVyKCktPmhhc0N1cnJl
bnRTcmMoKSkKLSAgICAgICAgbmV3U3RhdGVUb0Rpc3BsYXkgPSBMb2FkaW5nOwotICAgIGVsc2Ug
aWYgKG1lZGlhQ29udHJvbGxlcigpLT5pc0xpdmVTdHJlYW0oKSkKLSAgICAgICAgbmV3U3RhdGVU
b0Rpc3BsYXkgPSBMaXZlQnJvYWRjYXN0OwotCi0gICAgaWYgKG5ld1N0YXRlVG9EaXNwbGF5ID09
IG1fc3RhdGVCZWluZ0Rpc3BsYXllZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc3Rh
dGVCZWluZ0Rpc3BsYXllZCA9PSBOb3RoaW5nKQotICAgICAgICBzaG93KCk7Ci0gICAgZWxzZSBp
ZiAobmV3U3RhdGVUb0Rpc3BsYXkgPT0gTm90aGluZykKLSAgICAgICAgaGlkZSgpOwotCi0gICAg
bV9zdGF0ZUJlaW5nRGlzcGxheWVkID0gbmV3U3RhdGVUb0Rpc3BsYXk7Ci0KLSAgICBzd2l0Y2gg
KG1fc3RhdGVCZWluZ0Rpc3BsYXllZCkgewotICAgIGNhc2UgTm90aGluZzoKLSAgICAgICAgc2V0
SW5uZXJUZXh0KGVtcHR5U3RyaW5nKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExvYWRp
bmc6Ci0gICAgICAgIHNldElubmVyVGV4dChtZWRpYUVsZW1lbnRMb2FkaW5nU3RhdGVUZXh0KCkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExpdmVCcm9hZGNhc3Q6Ci0gICAgICAgIHNldElu
bmVyVGV4dChtZWRpYUVsZW1lbnRMaXZlQnJvYWRjYXN0U3RhdGVUZXh0KCkpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVk
aWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0
dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhQ29udHJvbHMqIGNvbnRyb2xzKQot
ICAgIDogTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhTXV0ZUJ1
dHRvbikKLSAgICAsIG1fY29udHJvbHMoY29udHJvbHMpCi17Ci0gICAgc2V0UHNldWRvKEF0b21T
dHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtbXV0ZS1idXR0b24iLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0
dG9uRWxlbWVudD4gTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERv
Y3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi17Ci0gICAgQVNTRVJU
KGNvbnRyb2xzKTsKLQotICAgIFJlZjxNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50
PiBidXR0b24gPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1l
bnQoZG9jdW1lbnQsIGNvbnRyb2xzKSk7Ci0gICAgYnV0dG9uLT5lbnN1cmVVc2VyQWdlbnRTaGFk
b3dSb290KCk7Ci0gICAgYnV0dG9uLT5zZXRUeXBlKCJidXR0b24iKTsKLSAgICByZXR1cm4gYnV0
dG9uOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ6OmRlZmF1
bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewotICAgIGlmIChldmVudC50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KQotICAgICAgICBtX2NvbnRyb2xzLT5zaG93Vm9s
dW1lU2xpZGVyKCk7Ci0KLSAgICBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29u
dHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAg
ICA6IE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50KGRvY3VtZW50LCBNZWRpYU11dGVCdXR0
b24pCi17Ci0gICAgc2V0UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMt
dm9sdW1lLXNsaWRlci1tdXRlLWJ1dHRvbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVu
dD4gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShEb2N1
bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVC
dXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFZvbHVtZVNs
aWRlck11dGVCdXR0b25FbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgYnV0dG9uLT5lbnN1cmVVc2Vy
QWdlbnRTaGFkb3dSb290KCk7Ci0gICAgYnV0dG9uLT5zZXRUeXBlKCJidXR0b24iKTsKLSAgICBy
ZXR1cm4gYnV0dG9uOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1l
ZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVu
dChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoZG9j
dW1lbnQsIE1lZGlhUGxheUJ1dHRvbikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdl
YmtpdC1tZWRpYS1jb250cm9scy1wbGF5LWJ1dHRvbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudD4gTWVk
aWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17
Ci0gICAgUmVmPE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJl
ZigqbmV3IE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgYnV0
dG9uLT5lbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgYnV0dG9uLT5zZXRUeXBlKCJi
dXR0b24iKTsKLSAgICByZXR1cm4gYnV0dG9uOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFBsYXlC
dXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSAgICBp
ZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7Ci0gICAgICAgIGlm
IChtZWRpYUNvbnRyb2xsZXIoKS0+Y2FuUGxheSgpKQotICAgICAgICAgICAgbWVkaWFDb250cm9s
bGVyKCktPnBsYXkoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVkaWFDb250cm9sbGVy
KCktPnBhdXNlKCk7Ci0gICAgICAgIHVwZGF0ZURpc3BsYXlUeXBlKCk7Ci0gICAgICAgIGV2ZW50
LnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfQotICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1
bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFBsYXlCdXR0b25F
bGVtZW50Ojp1cGRhdGVEaXNwbGF5VHlwZSgpCi17Ci0gICAgc2V0RGlzcGxheVR5cGUobWVkaWFD
b250cm9sbGVyKCktPmNhblBsYXkoKSA/IE1lZGlhUGxheUJ1dHRvbiA6IE1lZGlhUGF1c2VCdXR0
b24pOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJv
bE92ZXJsYXlQbGF5QnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0b25F
bGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVu
dChkb2N1bWVudCwgTWVkaWFPdmVybGF5UGxheUJ1dHRvbikKLXsKLSAgICBzZXRQc2V1ZG8oQXRv
bVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1vdmVybGF5LXBsYXktYnV0dG9uIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbE92
ZXJsYXlQbGF5QnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0b25FbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xP
dmVybGF5UGxheUJ1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250
cm9sT3ZlcmxheVBsYXlCdXR0b25FbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgYnV0dG9uLT5lbnN1
cmVVc2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgYnV0dG9uLT5zZXRUeXBlKCJidXR0b24iKTsK
LSAgICByZXR1cm4gYnV0dG9uOwotfQotCi12b2lkIE1lZGlhQ29udHJvbE92ZXJsYXlQbGF5QnV0
dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYg
KGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiBtZWRpYUNvbnRyb2xs
ZXIoKS0+Y2FuUGxheSgpKSB7Ci0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5wbGF5KCk7Ci0g
ICAgICAgIHVwZGF0ZURpc3BsYXlUeXBlKCk7Ci0gICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5k
bGVkKCk7Ci0gICAgfQotICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIo
ZXZlbnQpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbE92ZXJsYXlQbGF5QnV0dG9uRWxlbWVudDo6
dXBkYXRlRGlzcGxheVR5cGUoKQotewotICAgIGlmIChtZWRpYUNvbnRyb2xsZXIoKS0+Y2FuUGxh
eSgpKSB7Ci0gICAgICAgIHNob3coKTsKLSAgICB9IGVsc2UKLSAgICAgICAgaGlkZSgpOwotfQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFNlZWtGb3J3
YXJkQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50KERv
Y3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50KGRv
Y3VtZW50LCBNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKQotewotICAgIHNldFBzZXVkbyhBdG9tU3Ry
aW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXNlZWstZm9yd2FyZC1idXR0b24iLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sU2Vla0Zv
cndhcmRCdXR0b25FbGVtZW50PiBNZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQ6
OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbFNlZWtG
b3J3YXJkQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xT
ZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0b24tPmVuc3VyZVVz
ZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAg
IHJldHVybiBidXR0b247Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
TWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xTZWVrQmFja0J1
dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sU2Vla0J1
dHRvbkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhU2Vla0JhY2tCdXR0b24pCi17Ci0gICAgc2V0UHNl
dWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtc2Vlay1iYWNrLWJ1dHRvbiIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRy
b2xTZWVrQmFja0J1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVu
dDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sU2Vl
a0JhY2tCdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFNl
ZWtCYWNrQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFn
ZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgcmV0
dXJuIGJ1dHRvbjsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRp
YUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVt
ZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChk
b2N1bWVudCwgTWVkaWFSZXdpbmRCdXR0b24pCi17Ci0gICAgc2V0UHNldWRvKEF0b21TdHJpbmco
Ii13ZWJraXQtbWVkaWEtY29udHJvbHMtcmV3aW5kLWJ1dHRvbiIsIEF0b21TdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVt
ZW50PiBNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRv
Y3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50PiBidXR0
b24gPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQoZG9jdW1l
bnQpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0
b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIHJldHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYg
ZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCkgewotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0Q3VycmVudFRpbWUoc3RkOjptYXg8
ZG91YmxlPigwLCBtZWRpYUNvbnRyb2xsZXIoKS0+Y3VycmVudFRpbWUoKSAtIDMwKSk7Ci0gICAg
ICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfQotICAgIEhUTUxJbnB1dEVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50
OjpNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9j
dW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhUmV0
dXJuVG9SZWFsdGltZUJ1dHRvbikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtp
dC1tZWRpYS1jb250cm9scy1yZXR1cm4tdG8tcmVhbHRpbWUtYnV0dG9uIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFJldHVyblRvUmVh
bHRpbWVCdXR0b25FbGVtZW50PiBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxl
bWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9s
UmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVk
aWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBi
dXR0b24tPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUo
ImJ1dHRvbiIpOwotICAgIGJ1dHRvbi0+aGlkZSgpOwotICAgIHJldHVybiBidXR0b247Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPnJldHVy
blRvUmVhbHRpbWUoKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9
Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sVG9nZ2xlQ2xv
c2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9u
c0J1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzKiBjb250cm9s
cykKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1bWVudCwgTWVkaWFTaG93Q2xv
c2VkQ2FwdGlvbnNCdXR0b24pCi0jaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKFdJTikg
fHwgUExBVEZPUk0oR1RLKQotICAgICwgbV9jb250cm9scyhjb250cm9scykKLSNlbmRpZgotewot
I2lmICFQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKFdJTikgfHwgIVBMQVRGT1JNKEdUSykK
LSAgICBVTlVTRURfUEFSQU0oY29udHJvbHMpOwotI2VuZGlmCi0gICAgc2V0UHNldWRvKEF0b21T
dHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtdG9nZ2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0
b24iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFD
b250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50PiBNZWRpYUNvbnRyb2xUb2dn
bGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQs
IE1lZGlhQ29udHJvbHMqIGNvbnRyb2xzKQotewotICAgIEFTU0VSVChjb250cm9scyk7Ci0KLSAg
ICBSZWY8TWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50PiBidXR0
b24gPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9u
RWxlbWVudChkb2N1bWVudCwgY29udHJvbHMpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIGJ1dHRv
bi0+aGlkZSgpOwotICAgIHJldHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVG9n
Z2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50Ojp1cGRhdGVEaXNwbGF5VHlwZSgpCi17Ci0g
ICAgYm9vbCBjYXB0aW9uc1Zpc2libGUgPSBtZWRpYUNvbnRyb2xsZXIoKS0+Y2xvc2VkQ2FwdGlv
bnNWaXNpYmxlKCk7Ci0gICAgc2V0RGlzcGxheVR5cGUoY2FwdGlvbnNWaXNpYmxlID8gTWVkaWFI
aWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24gOiBNZWRpYVNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbik7
Ci0gICAgc2V0Q2hlY2tlZChjYXB0aW9uc1Zpc2libGUpOwotfQotCi12b2lkIE1lZGlhQ29udHJv
bFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xp
Y2tFdmVudCkgewotICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgZ3JlYXQgdGhhdCB0aGUgc2hh
cmVkIGNvZGUgaXMgZGljdGF0aW5nIGJlaGF2aW9yIG9mIHBsYXRmb3JtLXNwZWNpZmljCi0gICAg
ICAgIC8vIFVJLiBOb3QgYWxsIHBvcnRzIG1heSB3YW50IHRoZSBjbG9zZWQgY2FwdGlvbnMgYnV0
dG9uIHRvIHRvZ2dsZSBhIGxpc3Qgb2YgdHJhY2tzLCBzbwotICAgICAgICAvLyB3ZSBoYXZlIHRv
IHVzZSAjaWYuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDE4NzcKLSNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShXSU4pICYmICFQ
TEFURk9STShHVEspCi0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5zZXRDbG9zZWRDYXB0aW9u
c1Zpc2libGUoIW1lZGlhQ29udHJvbGxlcigpLT5jbG9zZWRDYXB0aW9uc1Zpc2libGUoKSk7Ci0g
ICAgICAgIHNldENoZWNrZWQobWVkaWFDb250cm9sbGVyKCktPmNsb3NlZENhcHRpb25zVmlzaWJs
ZSgpKTsKLSAgICAgICAgdXBkYXRlRGlzcGxheVR5cGUoKTsKLSNlbHNlCi0gICAgICAgIG1fY29u
dHJvbHMtPnRvZ2dsZUNsb3NlZENhcHRpb25UcmFja0xpc3QoKTsKLSNlbmRpZgotICAgICAgICBl
dmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0KLQotICAgIEhUTUxJbnB1dEVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudDo6
TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNDb250YWluZXJFbGVtZW50KERvY3VtZW50JiBkb2N1
bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbERpdkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhQ2xvc2Vk
Q2FwdGlvbnNDb250YWluZXIpCi17Ci0gICAgc2V0UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQt
bWVkaWEtY29udHJvbHMtY2xvc2VkLWNhcHRpb25zLWNvbnRhaW5lciIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9u
c0NvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxl
bWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9s
Q2xvc2VkQ2FwdGlvbnNDb250YWluZXJFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBN
ZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQoZG9jdW1lbnQpKTsKLSAg
ICBlbGVtZW50LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGRpckF0dHIsIEF0
b21TdHJpbmcoImF1dG8iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAg
IGVsZW1lbnQtPmhpZGUoKTsKLSAgICByZXR1cm4gZWxlbWVudDsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlz
dEVsZW1lbnQ6Ok1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudChEb2N1
bWVudCYgZG9jdW1lbnQsIE1lZGlhQ29udHJvbHMqIGNvbnRyb2xzKQotICAgIDogTWVkaWFDb250
cm9sRGl2RWxlbWVudChkb2N1bWVudCwgTWVkaWFDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdCkKLSNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgLCBtX2NvbnRyb2xzKGNvbnRyb2xzKQotI2VuZGlm
Ci17Ci0jaWYgIUVOQUJMRShWSURFT19UUkFDSykKLSAgICBVTlVTRURfUEFSQU0oY29udHJvbHMp
OwotI2VuZGlmCi0gICAgc2V0UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJv
bHMtY2xvc2VkLWNhcHRpb25zLXRyYWNrLWxpc3QiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RF
bGVtZW50PiBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQ6OmNyZWF0
ZShEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhQ29udHJvbHMqIGNvbnRyb2xzKQotewotICAgIEFT
U0VSVChjb250cm9scyk7Ci0gICAgUmVmPE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tM
aXN0RWxlbWVudD4gZWxlbWVudCA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sQ2xvc2VkQ2Fw
dGlvbnNUcmFja0xpc3RFbGVtZW50KGRvY3VtZW50LCBjb250cm9scykpOwotICAgIHJldHVybiBl
bGVtZW50OwotfQotCi12b2lkIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0jaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZl
bnQpIHsKLSAgICAgICAgaWYgKCFpczxFbGVtZW50PihldmVudC50YXJnZXQoKSkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gV2hlbiB3ZSBjcmVhdGVkIHRoZSBlbGVtZW50cyBp
biB0aGUgdHJhY2sgbGlzdCwgd2UgZ2F2ZSB0aGVtIGEgY3VzdG9tCi0gICAgICAgIC8vIGF0dHJp
YnV0ZSByZXByZXNlbnRpbmcgdGhlIGluZGV4IGluIHRoZSBIVE1MTWVkaWFFbGVtZW50J3MgbGlz
dCBvZiB0cmFja3MuCi0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBldmVudCB0YXJnZXQgaGFzIHN1
Y2ggYSBjdXN0b20gZWxlbWVudCBhbmQsIGlmIHNvLAotICAgICAgICAvLyB0ZWxsIHRoZSBIVE1M
TWVkaWFFbGVtZW50IHRvIGVuYWJsZSB0aGF0IHRyYWNrLgotCi0gICAgICAgIGF1dG8gdGV4dFRy
YWNrID0gbWFrZVJlZlB0cihtX21lbnVUb1RyYWNrTWFwLmdldCgmZG93bmNhc3Q8RWxlbWVudD4o
KmV2ZW50LnRhcmdldCgpKSkpOwotICAgICAgICBtX21lbnVUb1RyYWNrTWFwLmNsZWFyKCk7Ci0g
ICAgICAgIG1fY29udHJvbHMtPnRvZ2dsZUNsb3NlZENhcHRpb25UcmFja0xpc3QoKTsKLSAgICAg
ICAgaWYgKCF0ZXh0VHJhY2spCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byBt
ZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0gICAgICAgIGlmICghbWVk
aWFFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1lZGlhRWxlbWVudC0+
c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrLmdldCgpKTsKLQotICAgICAgICB1cGRhdGVE
aXNwbGF5KCk7Ci0gICAgfQotCi0gICAgTWVkaWFDb250cm9sRGl2RWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihldmVudCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShldmVudCk7Ci0jZW5k
aWYKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQ6
OnVwZGF0ZURpc3BsYXkoKQotewotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZz4gc2VsZWN0ZWRDbGFzc1ZhbHVlKCJzZWxlY3RlZCIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLQotICAgIGlmICghbWVkaWFDb250
cm9sbGVyKCktPmhhc0Nsb3NlZENhcHRpb25zKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzOjpDYXB0aW9uRGlzcGxheU1vZGUgZGlzcGxheU1vZGUgPSBkb2N1bWVudCgpLnBh
Z2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5jYXB0aW9uRGlzcGxheU1vZGUoKTsK
LQotICAgIGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHRoaXMpOwotICAg
IGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1lZGlhRWxl
bWVudC0+dGV4dFRyYWNrcygpIHx8ICFtZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKS0+bGVuZ3Ro
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlYnVpbGRUcmFja0xpc3RNZW51KCk7Ci0KLSAg
ICBSZWZQdHI8RWxlbWVudD4gb2ZmTWVudUl0ZW07Ci0gICAgYm9vbCB0cmFja01lbnVJdGVtU2Vs
ZWN0ZWQgPSBmYWxzZTsKLQotICAgIGZvciAoYXV0byYgdHJhY2tJdGVtIDogbV9tZW51SXRlbXMp
IHsKLSAgICAgICAgUmVmUHRyPFRleHRUcmFjaz4gdGV4dFRyYWNrOwotICAgICAgICBNZW51SXRl
bVRvVHJhY2tNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX21lbnVUb1RyYWNrTWFwLmZpbmQodHJhY2tJ
dGVtLmdldCgpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9tZW51VG9UcmFja01hcC5lbmQoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB0ZXh0VHJhY2sgPSBpdGVyLT52YWx1ZTsK
LSAgICAgICAgaWYgKCF0ZXh0VHJhY2spCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBpZiAodGV4dFRyYWNrID09ICZUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpKSB7Ci0g
ICAgICAgICAgICBvZmZNZW51SXRlbSA9IHRyYWNrSXRlbTsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRleHRUcmFjayA9PSAmVGV4dFRyYWNrOjpjYXB0
aW9uTWVudUF1dG9tYXRpY0l0ZW0oKSkgewotICAgICAgICAgICAgaWYgKGRpc3BsYXlNb2RlID09
IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYykKLSAgICAgICAgICAgICAgICB0cmFj
a0l0ZW0tPmNsYXNzTGlzdCgpLmFkZChzZWxlY3RlZENsYXNzVmFsdWUpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHRyYWNrSXRlbS0+Y2xhc3NMaXN0KCkucmVtb3ZlKHNlbGVj
dGVkQ2xhc3NWYWx1ZSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChkaXNwbGF5TW9kZSAhPSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpBdXRvbWF0aWMg
JiYgdGV4dFRyYWNrLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nKSB7Ci0gICAg
ICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSB0cnVlOwotICAgICAgICAgICAgdHJhY2tJ
dGVtLT5jbGFzc0xpc3QoKS5hZGQoc2VsZWN0ZWRDbGFzc1ZhbHVlKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICB0cmFja0l0ZW0tPmNsYXNzTGlzdCgpLnJlbW92ZShzZWxlY3RlZENsYXNz
VmFsdWUpOwotICAgIH0KLQotICAgIGlmIChvZmZNZW51SXRlbSkgewotICAgICAgICBpZiAoZGlz
cGxheU1vZGUgPT0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Rm9yY2VkT25seSAmJiAhdHJhY2tN
ZW51SXRlbVNlbGVjdGVkKQotICAgICAgICAgICAgb2ZmTWVudUl0ZW0tPmNsYXNzTGlzdCgpLmFk
ZChzZWxlY3RlZENsYXNzVmFsdWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvZmZNZW51
SXRlbS0+Y2xhc3NMaXN0KCkucmVtb3ZlKHNlbGVjdGVkQ2xhc3NWYWx1ZSk7Ci0gICAgfQotI2Vu
ZGlmCi19Ci0KLXZvaWQgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50
OjpyZWJ1aWxkVHJhY2tMaXN0TWVudSgpCi17Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAg
IC8vIFJlbW92ZSBhbnkgZXhpc3RpbmcgY29udGVudC4KLSAgICByZW1vdmVDaGlsZHJlbigpOwot
ICAgIG1fbWVudUl0ZW1zLmNsZWFyKCk7Ci0gICAgbV9tZW51VG9UcmFja01hcC5jbGVhcigpOwot
Ci0gICAgaWYgKCFtZWRpYUNvbnRyb2xsZXIoKS0+aGFzQ2xvc2VkQ2FwdGlvbnMoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQo
dGhpcyk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8qIHRyYWNrTGlzdCA9IG1lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpOwotICAgIGlmICghdHJh
Y2tMaXN0IHx8ICF0cmFja0xpc3QtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIWRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byYgY2FwdGlv
blByZWZlcmVuY2VzID0gZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVu
Y2VzKCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiB0cmFja3NGb3JNZW51ID0gY2Fw
dGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUodHJhY2tMaXN0KTsKLQotICAg
IGF1dG8gY2FwdGlvbnNIZWFkZXIgPSBIVE1MSGVhZGluZ0VsZW1lbnQ6OmNyZWF0ZShoM1RhZywg
ZG9jdW1lbnQoKSk7Ci0gICAgY2FwdGlvbnNIZWFkZXItPmFwcGVuZENoaWxkKGRvY3VtZW50KCku
Y3JlYXRlVGV4dE5vZGUodGV4dFRyYWNrU3VidGl0bGVzVGV4dCgpKSk7Ci0gICAgYXBwZW5kQ2hp
bGQoY2FwdGlvbnNIZWFkZXIpOwotICAgIGF1dG8gY2FwdGlvbnNNZW51TGlzdCA9IEhUTUxVTGlz
dEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKLQotICAgIGZvciAoYXV0byYgdGV4dFRyYWNr
IDogdHJhY2tzRm9yTWVudSkgewotICAgICAgICBhdXRvIG1lbnVJdGVtID0gSFRNTExJRWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgICAgICBtZW51SXRlbS0+YXBwZW5kQ2hpbGQoZG9j
dW1lbnQoKS5jcmVhdGVUZXh0Tm9kZShjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JU
cmFjayh0ZXh0VHJhY2suZ2V0KCkpKSk7Ci0gICAgICAgIGNhcHRpb25zTWVudUxpc3QtPmFwcGVu
ZENoaWxkKG1lbnVJdGVtKTsKLSAgICAgICAgbV9tZW51SXRlbXMuYXBwZW5kKG1lbnVJdGVtLnB0
cigpKTsKLSAgICAgICAgbV9tZW51VG9UcmFja01hcC5hZGQobWVudUl0ZW0ucHRyKCksIHRleHRU
cmFjayk7Ci0gICAgfQotCi0gICAgYXBwZW5kQ2hpbGQoY2FwdGlvbnNNZW51TGlzdCk7Ci0jZW5k
aWYKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xU
aW1lbGluZUVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudChEb2N1bWVudCYgZG9j
dW1lbnQsIE1lZGlhQ29udHJvbHMqIGNvbnRyb2xzKQotICAgIDogTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50KGRvY3VtZW50LCBNZWRpYVNsaWRlcikKLSAgICAsIG1fY29udHJvbHMoY29udHJvbHMp
Ci17Ci0gICAgc2V0UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGlt
ZWxpbmUiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVk
aWFDb250cm9sVGltZWxpbmVFbGVtZW50PiBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmNy
ZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhQ29udHJvbHMqIGNvbnRyb2xzKQotewotICAg
IEFTU0VSVChjb250cm9scyk7Ci0KLSAgICBSZWY8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50
PiB0aW1lbGluZSA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50KGRv
Y3VtZW50LCBjb250cm9scykpOwotICAgIHRpbWVsaW5lLT5lbnN1cmVVc2VyQWdlbnRTaGFkb3dS
b290KCk7Ci0gICAgdGltZWxpbmUtPnNldFR5cGUoInJhbmdlIik7Ci0gICAgdGltZWxpbmUtPnNl
dEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocHJlY2lzaW9uQXR0ciwgQXRvbVN0cmlu
ZygiZmxvYXQiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVy
biB0aW1lbGluZTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1
bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewotICAgIC8vIExlZnQgYnV0dG9uIGlzIDAu
IFJlamVjdHMgbW91c2UgZXZlbnRzIG5vdCBmcm9tIGxlZnQgYnV0dG9uLgotICAgIGlmIChpczxN
b3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQpLmJ1dHRvbigp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50
KQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+YmVnaW5TY3J1YmJpbmcoKTsKLQotICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKLSAgICAgICAgbWVk
aWFDb250cm9sbGVyKCktPmVuZFNjcnViYmluZygpOwotCi0gICAgTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgIGlmIChldmVudC50eXBl
KCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCBldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNlbW92ZUV2ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3VibGUgdGltZSA9IHZhbHVl
KCkudG9Eb3VibGUoKTsKLSAgICBpZiAoKGV2ZW50LmlzSW5wdXRFdmVudCgpIHx8IGV2ZW50LnR5
cGUoKSA9PSBldmVudE5hbWVzKCkuaW5wdXRFdmVudCkgJiYgdGltZSAhPSBtZWRpYUNvbnRyb2xs
ZXIoKS0+Y3VycmVudFRpbWUoKSkKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPnNldEN1cnJl
bnRUaW1lKHRpbWUpOwotCi0gICAgUmVuZGVyU2xpZGVyJiBzbGlkZXIgPSBkb3duY2FzdDxSZW5k
ZXJTbGlkZXI+KCpyZW5kZXJlcigpKTsKLSAgICBpZiAoc2xpZGVyLmluRHJhZ01vZGUoKSkKLSAg
ICAgICAgbV9jb250cm9scy0+dXBkYXRlQ3VycmVudFRpbWVEaXNwbGF5KCk7Ci19Ci0KLSNpZiAh
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLWJvb2wgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50Ojp3
aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50cygpCi17Ci0gICAgaWYgKCFyZW5kZXJlcigpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZiAvLyAh
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotdm9pZCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6
OnNldFBvc2l0aW9uKGRvdWJsZSBjdXJyZW50VGltZSkKLXsKLSAgICBzZXRWYWx1ZShTdHJpbmc6
Om51bWJlcihjdXJyZW50VGltZSkpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxl
bWVudDo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQotewotICAgIHNldEF0dHJpYnV0ZSht
YXhBdHRyLCBBdG9tU3RyaW5nOjpudW1iZXIoZHVyYXRpb24pKTsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1l
bnQ6Ok1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYgZG9jdW1l
bnQpCi0gICAgOiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KGRvY3VtZW50KQotewot
ICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1z
bGlkZXIiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVk
aWFDb250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xQYW5lbFZvbHVt
ZVNsaWRlckVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1l
ZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudD4gc2xpZGVyID0gYWRvcHRSZWYoKm5l
dyBNZWRpYUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBz
bGlkZXItPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBzbGlkZXItPnNldFR5cGUo
InJhbmdlIik7Ci0gICAgc2xpZGVyLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KHByZWNpc2lvbkF0dHIsIEF0b21TdHJpbmcoImZsb2F0IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpKTsKLSAgICBzbGlkZXItPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24obWF4QXR0ciwgQXRvbVN0cmluZygiMSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7Ci0gICAgcmV0dXJuIHNsaWRlcjsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudDo6
TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZVNsaWRlckVsZW1lbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50KQotICAgIDogTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudChkb2N1bWVudCkKLXsK
LSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2Ny
ZWVuLXZvbHVtZS1zbGlkZXIiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwot
fQotCi1SZWY8TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZVNsaWRlckVsZW1lbnQ+IE1lZGlh
Q29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRv
Y3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxl
bWVudD4gc2xpZGVyID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1l
U2xpZGVyRWxlbWVudChkb2N1bWVudCkpOwotICAgIHNsaWRlci0+ZW5zdXJlVXNlckFnZW50U2hh
ZG93Um9vdCgpOwotICAgIHNsaWRlci0+c2V0VHlwZSgicmFuZ2UiKTsKLSAgICBzbGlkZXItPnNl
dEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocHJlY2lzaW9uQXR0ciwgQXRvbVN0cmlu
ZygiZmxvYXQiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHNsaWRl
ci0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRyLCBBdG9tU3RyaW5n
KCIxIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICByZXR1cm4gc2xp
ZGVyOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJv
bEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxl
bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQo
ZG9jdW1lbnQsIE1lZGlhRW50ZXJGdWxsc2NyZWVuQnV0dG9uKQotewotICAgIHNldFBzZXVkbyhB
dG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tYnV0dG9uIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5CdXR0b25FbGVtZW50PiBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVu
dDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sRnVs
bHNjcmVlbkJ1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9s
RnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0b24tPmVuc3VyZVVz
ZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAg
IGJ1dHRvbi0+aGlkZSgpOwotICAgIHJldHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250
cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2
ZW50KQotewotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQp
IHsKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgICAgIC8vIE9ubHkgdXNlIHRoZSBu
ZXcgZnVsbCBzY3JlZW4gQVBJIGlmIHRoZSBmdWxsU2NyZWVuRW5hYmxlZCBzZXR0aW5nIGhhcwot
ICAgICAgICAvLyBiZWVuIGV4cGxpY2l0bHkgZW5hYmxlZC4gT3RoZXJ3aXNlLCB1c2UgdGhlIG9s
ZCBmdWxsc2NyZWVuIEFQSS4gVGhpcwotICAgICAgICAvLyBhbGxvd3MgYXBwcyB3aGljaCBlbWJl
ZCBhIFdlYlZpZXcgdG8gcmV0YWluIHRoZSBleGlzdGluZyBmdWxsIHNjcmVlbgotICAgICAgICAv
LyB2aWRlbyBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IHJlcXVpcmluZyB0aGVtIHRvIGltcGxlbWVu
dCB0aGVpciBvd24gZnVsbAotICAgICAgICAvLyBzY3JlZW4gYmVoYXZpb3IuCi0gICAgICAgIGlm
IChkb2N1bWVudCgpLnNldHRpbmdzKCkuZnVsbFNjcmVlbkVuYWJsZWQoKSkgewotICAgICAgICAg
ICAgaWYgKGRvY3VtZW50KCkuZnVsbHNjcmVlbk1hbmFnZXIoKS5pc0Z1bGxzY3JlZW4oKSAmJiBk
b2N1bWVudCgpLmZ1bGxzY3JlZW5NYW5hZ2VyKCkuY3VycmVudEZ1bGxzY3JlZW5FbGVtZW50KCkg
PT0gcGFyZW50TWVkaWFFbGVtZW50KHRoaXMpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCku
ZnVsbHNjcmVlbk1hbmFnZXIoKS5jYW5jZWxGdWxsc2NyZWVuKCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5mdWxsc2NyZWVuTWFuYWdlcigpLnJlcXVlc3RG
dWxsc2NyZWVuRm9yRWxlbWVudChwYXJlbnRNZWRpYUVsZW1lbnQodGhpcykuZ2V0KCksIEZ1bGxz
Y3JlZW5NYW5hZ2VyOjpFeGVtcHRJRnJhbWVBbGxvd0Z1bGxzY3JlZW5SZXF1aXJlbWVudCk7Ci0g
ICAgICAgIH0gZWxzZQotI2VuZGlmCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+ZW50
ZXJGdWxsc2NyZWVuKCk7Ci0gICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAg
fQotICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotfQot
Ci12b2lkIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpzZXRJc0Z1bGxzY3Jl
ZW4oYm9vbCBpc0Z1bGxzY3JlZW4pCi17Ci0gICAgc2V0RGlzcGxheVR5cGUoaXNGdWxsc2NyZWVu
ID8gTWVkaWFFeGl0RnVsbHNjcmVlbkJ1dHRvbiA6IE1lZGlhRW50ZXJGdWxsc2NyZWVuQnV0dG9u
KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xG
dWxsc2NyZWVuVm9sdW1lTWluQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sRnVsbHNjcmVlblZv
bHVtZU1pbkJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250
cm9sSW5wdXRFbGVtZW50KGRvY3VtZW50LCBNZWRpYVVuTXV0ZUJ1dHRvbikKLXsKLSAgICBzZXRQ
c2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2NyZWVuLXZvbHVt
ZS1taW4tYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQot
UmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50PiBNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBk
b2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1dHRv
bkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sRnVsbHNjcmVlblZv
bHVtZU1pbkJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJB
Z2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIHJl
dHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewotICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgbWVk
aWFDb250cm9sbGVyKCktPnNldFZvbHVtZSgwKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhh
bmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFD
b250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1bGxz
Y3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKLTogTWVkaWFD
b250cm9sSW5wdXRFbGVtZW50KGRvY3VtZW50LCBNZWRpYU11dGVCdXR0b24pCi17Ci0gICAgc2V0
UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi12b2x1
bWUtbWF4LWJ1dHRvbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0K
LVJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudD4gTWVkaWFD
b250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYg
ZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0
b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5W
b2x1bWVNYXhCdXR0b25FbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgYnV0dG9uLT5lbnN1cmVVc2Vy
QWdlbnRTaGFkb3dSb290KCk7Ci0gICAgYnV0dG9uLT5zZXRUeXBlKCJidXR0b24iKTsKLSAgICBy
ZXR1cm4gYnV0dG9uOwotfQotCi12b2lkIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhC
dXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSAgICBp
ZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7Ci0gICAgICAgIG1l
ZGlhQ29udHJvbGxlcigpLT5zZXRWb2x1bWUoMSk7Ci0gICAgICAgIGV2ZW50LnNldERlZmF1bHRI
YW5kbGVkKCk7Ci0gICAgfQotICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZlbnQpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlh
Q29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudDo6TWVkaWFDb250cm9sVGltZVJlbWFp
bmluZ0Rpc3BsYXlFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJv
bFRpbWVEaXNwbGF5RWxlbWVudChkb2N1bWVudCwgTWVkaWFUaW1lUmVtYWluaW5nRGlzcGxheSkK
LXsKLSAgICBzZXRQc2V1ZG8oZ2V0TWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVt
ZW50U2hhZG93UHNldWRvSWQoKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5n
RGlzcGxheUVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudDo6
Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBN
ZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQoZG9jdW1lbnQpKTsKLX0KLQot
c3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGdldE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNw
bGF5RWxlbWVudFNoYWRvd1BzZXVkb0lkKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbVN0cmluZz4gaWQoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZS1yZW1haW5pbmctZGlz
cGxheSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICByZXR1cm4gaWQ7
Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sQ3Vy
cmVudFRpbWVEaXNwbGF5RWxlbWVudDo6TWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxl
bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVs
ZW1lbnQoZG9jdW1lbnQsIE1lZGlhQ3VycmVudFRpbWVEaXNwbGF5KQotewotICAgIHNldFBzZXVk
byhnZXRNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50U2hhZG93UHNldWRvSWQo
KSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50PiBNZWRp
YUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3Vt
ZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbEN1cnJlbnRUaW1l
RGlzcGxheUVsZW1lbnQoZG9jdW1lbnQpKTsKLX0KLQotc3RhdGljIGNvbnN0IEF0b21TdHJpbmcm
IGdldE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnRTaGFkb3dQc2V1ZG9JZCgp
Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21TdHJpbmc+IGlkKCItd2Via2l0LW1l
ZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBpZDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotCi1NZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbERpdkVsZW1lbnQoZG9j
dW1lbnQsIE1lZGlhVGV4dFRyYWNrRGlzcGxheUNvbnRhaW5lcikKLXsKLSAgICBzZXRQc2V1ZG8o
QXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLWNvbnRhaW5lciIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50
OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIGF1dG8gZWxlbWVudCA9IGFkb3B0
UmVmKCpuZXcgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCkp
OwotICAgIGVsZW1lbnQtPmhpZGUoKTsKLSAgICByZXR1cm4gZWxlbWVudDsKLX0KLQotUmVuZGVy
UHRyPFJlbmRlckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6
OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlLCBjb25zdCBSZW5kZXJU
cmVlUG9zaXRpb24mKQotewotICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zs
b3c+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7Ci19Ci0KLXN0YXRpYyBib29sIGNvbXBhcmVDdWVJ
bnRlcnZhbEZvckRpc3BsYXkoY29uc3QgQ3VlSW50ZXJ2YWwmIG9uZSwgY29uc3QgQ3VlSW50ZXJ2
YWwmIHR3bykKLXsKLSAgICByZXR1cm4gb25lLmRhdGEoKS0+aXNQb3NpdGlvbmVkQWJvdmUodHdv
LmRhdGEoKSk7Ci19OwotCi12b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQ6OnVwZGF0ZURpc3BsYXkoKQotewotICAgIGlmICghbWVkaWFDb250cm9sbGVyKCktPmNsb3Nl
ZENhcHRpb25zVmlzaWJsZSgpKQotICAgICAgICByZW1vdmVDaGlsZHJlbigpOwotCi0gICAgYXV0
byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0gICAgLy8gMS4gSWYg
dGhlIG1lZGlhIGVsZW1lbnQgaXMgYW4gYXVkaW8gZWxlbWVudCwgb3IgaXMgYW5vdGhlciBwbGF5
YmFjawotICAgIC8vIG1lY2hhbmlzbSB3aXRoIG5vIHJlbmRlcmluZyBhcmVhLCBhYm9ydCB0aGVz
ZSBzdGVwcy4gVGhlcmUgaXMgbm90aGluZyB0bwotICAgIC8vIHJlbmRlci4KLSAgICBpZiAoIW1l
ZGlhRWxlbWVudCB8fCAhbWVkaWFFbGVtZW50LT5pc1ZpZGVvKCkgfHwgbV92aWRlb0Rpc3BsYXlT
aXplLnNpemUoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIDIuIExldCB2
aWRlbyBiZSB0aGUgbWVkaWEgZWxlbWVudCBvciBvdGhlciBwbGF5YmFjayBtZWNoYW5pc20uCi0g
ICAgSFRNTFZpZGVvRWxlbWVudCYgdmlkZW8gPSBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50Pigq
bWVkaWFFbGVtZW50KTsKLQotICAgIC8vIDMuIExldCBvdXRwdXQgYmUgYW4gZW1wdHkgbGlzdCBv
ZiBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgQ1NTIGJsb2NrIGJveGVzLgotCi0gICAgLy8gNC4gSWYg
dGhlIHVzZXIgYWdlbnQgaXMgZXhwb3NpbmcgYSB1c2VyIGludGVyZmFjZSBmb3IgdmlkZW8sIGFk
ZCB0bwotICAgIC8vIG91dHB1dCBvbmUgb3IgbW9yZSBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IHBv
c2l0aW9uZWQgQ1NTIGJsb2NrIGJveGVzIHRoYXQKLSAgICAvLyBjb3ZlciB0aGUgc2FtZSByZWdp
b24gYXMgdGhlIHVzZXIgaW50ZXJmYWNlLgotCi0gICAgLy8gNS4gSWYgdGhlIGxhc3QgdGltZSB0
aGVzZSBydWxlcyB3ZXJlIHJ1biwgdGhlIHVzZXIgYWdlbnQgd2FzIG5vdCBleHBvc2luZwotICAg
IC8vIGEgdXNlciBpbnRlcmZhY2UgZm9yIHZpZGVvLCBidXQgbm93IGl0IGlzLCBsZXQgcmVzZXQg
YmUgdHJ1ZS4gT3RoZXJ3aXNlLAotICAgIC8vIGxldCByZXNldCBiZSBmYWxzZS4KLQotICAgIC8v
IFRoZXJlIGlzIG5vdGhpbmcgdG8gYmUgZG9uZSBleHBsaWNpdGx5IGZvciA0dGggYW5kIDV0aCBz
dGVwcywgYXMKLSAgICAvLyBldmVyeXRoaW5nIGlzIGhhbmRsZWQgdGhyb3VnaCBDU1MuIFRoZSBj
YXB0aW9uIGJveCBpcyBvbiB0b3Agb2YgdGhlCi0gICAgLy8gY29udHJvbHMgYm94LCBpbiBhIGNv
bnRhaW5lciBzZXQgd2l0aCB0aGUgLXdlYmtpdC1ib3ggZGlzcGxheSBwcm9wZXJ0eS4KLQotICAg
IC8vIDYuIExldCB0cmFja3MgYmUgdGhlIHN1YnNldCBvZiB2aWRlbydzIGxpc3Qgb2YgdGV4dCB0
cmFja3MgdGhhdCBoYXZlIGFzCi0gICAgLy8gdGhlaXIgcnVsZXMgZm9yIHVwZGF0aW5nIHRoZSB0
ZXh0IHRyYWNrIHJlbmRlcmluZyB0aGVzZSBydWxlcyBmb3IKLSAgICAvLyB1cGRhdGluZyB0aGUg
ZGlzcGxheSBvZiBXZWJWVFQgdGV4dCB0cmFja3MsIGFuZCB3aG9zZSB0ZXh0IHRyYWNrIG1vZGUg
aXMKLSAgICAvLyBzaG93aW5nIG9yIHNob3dpbmcgYnkgZGVmYXVsdC4KLSAgICAvLyA3LiBMZXQg
Y3VlcyBiZSBhbiBlbXB0eSBsaXN0IG9mIHRleHQgdHJhY2sgY3Vlcy4KLSAgICAvLyA4LiBGb3Ig
ZWFjaCB0cmFjayB0cmFjayBpbiB0cmFja3MsIGFwcGVuZCB0byBjdWVzIGFsbCB0aGUgY3VlcyBm
cm9tCi0gICAgLy8gdHJhY2sncyBsaXN0IG9mIGN1ZXMgdGhhdCBoYXZlIHRoZWlyIHRleHQgdHJh
Y2sgY3VlIGFjdGl2ZSBmbGFnIHNldC4KLSAgICBDdWVMaXN0IGFjdGl2ZUN1ZXMgPSB2aWRlby5j
dXJyZW50bHlBY3RpdmVDdWVzKCk7Ci0KLSAgICAvLyA5LiBJZiByZXNldCBpcyBmYWxzZSwgdGhl
biwgZm9yIGVhY2ggdGV4dCB0cmFjayBjdWUgY3VlIGluIGN1ZXM6IGlmIGN1ZSdzCi0gICAgLy8g
dGV4dCB0cmFjayBjdWUgZGlzcGxheSBzdGF0ZSBoYXMgYSBzZXQgb2YgQ1NTIGJveGVzLCB0aGVu
IGFkZCB0aG9zZSBib3hlcwotICAgIC8vIHRvIG91dHB1dCwgYW5kIHJlbW92ZSBjdWUgZnJvbSBj
dWVzLgotCi0gICAgLy8gVGhlcmUgaXMgbm90aGluZyBleHBsaWNpdGx5IHRvIGJlIGRvbmUgaGVy
ZSwgYXMgYWxsIHRoZSBjYWNoaW5nIG9jY3VycwotICAgIC8vIHdpdGhpbiB0aGUgVGV4dFRyYWNr
Q3VlIGluc3RhbmNlIGl0c2VsZi4gSWYgcGFyYW1ldGVycyBvZiB0aGUgY3VlIGNoYW5nZSwKLSAg
ICAvLyB0aGUgZGlzcGxheSB0cmVlIGlzIGNsZWFyZWQuCi0KLSAgICAvLyBJZiB0aGUgbnVtYmVy
IG9mIENTUyBib3hlcyBpbiB0aGUgb3V0cHV0IGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGN1
ZXMKLSAgICAvLyB3ZSB3aXNoIHRvIHJlbmRlciAoZS5nLiwgd2UgYXJlIGFkZGluZyBhbm90aGVy
IGN1ZSBpbiBhIHNldCBvZiByb2xsLXVwCi0gICAgLy8gY3VlcyksIHJlbW92ZSBhbGwgdGhlIGV4
aXN0aW5nIENTUyBib3hlcyByZXByZXNlbnRpbmcgdGhlIGN1ZXMgYW5kIHJlLWFkZAotICAgIC8v
IHRoZW0gc28gdGhhdCB0aGUgbmV3IGN1ZSBpcyBhdCB0aGUgYm90dG9tLgotICAgIC8vIEZJWE1F
OiBDYWxsaW5nIGNvdW50Q2hpbGROb2RlcygpIGhlcmUgaXMgaW5lZmZpY2llbnQuIFdlIGRvbid0
IG5lZWQgdG8KLSAgICAvLyB0cmF2ZXJzZSBhbGwgY2hpbGRyZW4ganVzdCB0byBjaGVjayBpZiB0
aGVyZSBhcmUgbGVzcyBjaGlsZHJlbiB0aGFuIGN1ZXMuCi0gICAgaWYgKGNvdW50Q2hpbGROb2Rl
cygpIDwgYWN0aXZlQ3Vlcy5zaXplKCkpCi0gICAgICAgIHJlbW92ZUNoaWxkcmVuKCk7Ci0KLSAg
ICBhY3RpdmVDdWVzLnJlbW92ZUFsbE1hdGNoaW5nKFtdIChDdWVJbnRlcnZhbCYgY3VlSW50ZXJ2
YWwpIHsKLSAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gY3VlSW50ZXJ2YWwuZGF0
YSgpOwotICAgICAgICByZXR1cm4gIWN1ZS0+dHJhY2soKQotICAgICAgICAgICAgfHwgIWN1ZS0+
dHJhY2soKS0+aXNSZW5kZXJlZCgpCi0gICAgICAgICAgICB8fCBjdWUtPnRyYWNrKCktPm1vZGUo
KSA9PSBUZXh0VHJhY2s6Ok1vZGU6OkRpc2FibGVkCi0gICAgICAgICAgICB8fCAhY3VlLT5pc0Fj
dGl2ZSgpCi0gICAgICAgICAgICB8fCAhY3VlLT5pc1JlbmRlcmFibGUoKTsKLSAgICB9KTsKLQot
ICAgIC8vIFNvcnQgdGhlIGFjdGl2ZSBjdWVzIGZvciB0aGUgYXBwcm9wcmlhdGUgZGlzcGxheSBv
cmRlci4gRm9yIGV4YW1wbGUsIGZvciByb2xsLXVwCi0gICAgLy8gb3IgcGFpbnQtb24gY2FwdGlv
bnMsIHdlIG5lZWQgdG8gYWRkIHRoZSBjdWVzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRl
ciwKLSAgICAvLyBzbyB0aGF0IHRoZSBuZXdlc3QgY2FwdGlvbnMgYXBwZWFyIGF0IHRoZSBib3R0
b20uCi0gICAgc3RkOjpzb3J0KGFjdGl2ZUN1ZXMuYmVnaW4oKSwgYWN0aXZlQ3Vlcy5lbmQoKSwg
JmNvbXBhcmVDdWVJbnRlcnZhbEZvckRpc3BsYXkpOwotCi0gICAgaWYgKG1lZGlhQ29udHJvbGxl
cigpLT5jbG9zZWRDYXB0aW9uc1Zpc2libGUoKSkgewotICAgICAgICAvLyAxMC4gRm9yIGVhY2gg
dGV4dCB0cmFjayBjdWUgaW4gY3VlcyB0aGF0IGhhcyBub3QgeWV0IGhhZAotICAgICAgICAvLyBj
b3JyZXNwb25kaW5nIENTUyBib3hlcyBhZGRlZCB0byBvdXRwdXQsIGluIHRleHQgdHJhY2sgY3Vl
IG9yZGVyLCBydW4gdGhlCi0gICAgICAgIC8vIGZvbGxvd2luZyBzdWJzdGVwczoKLSAgICAgICAg
Zm9yIChhdXRvJiBpbnRlcnZhbCA6IGFjdGl2ZUN1ZXMpIHsKLSAgICAgICAgICAgIGF1dG8gY3Vl
ID0gaW50ZXJ2YWwuZGF0YSgpOwotICAgICAgICAgICAgY3VlLT5zZXRGb250U2l6ZShtX2ZvbnRT
aXplLCBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplSXNJbXBvcnRhbnQpOwot
ICAgICAgICAgICAgaWYgKGlzPFZUVEN1ZT4oKmN1ZSkpCi0gICAgICAgICAgICAgICAgcHJvY2Vz
c0FjdGl2ZVZUVEN1ZShkb3duY2FzdDxWVFRDdWU+KCpjdWUpKTsKLSAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIGF1dG8gZGlzcGxheUJveCA9IGN1ZS0+Z2V0RGlzcGxheVRyZWUo
bV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKSwgbV9mb250U2l6ZSk7Ci0gICAgICAgICAgICAgICAg
aWYgKGRpc3BsYXlCb3gtPmhhc0NoaWxkTm9kZXMoKSAmJiAhY29udGFpbnMoZGlzcGxheUJveC5n
ZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkKCpkaXNwbGF5Qm94KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIDExLiBSZXR1cm4gb3V0cHV0
LgotICAgIGlmIChoYXNDaGlsZE5vZGVzKCkpCi0gICAgICAgIHNob3coKTsKLSAgICBlbHNlCi0g
ICAgICAgIGhpZGUoKTsKLQotICAgIHVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVk
ZWQoKTsKLSAgICB1cGRhdGVUZXh0VHJhY2tTdHlsZSgpOwotICAgIG1fbmVlZHNHZW5lcmF0ZVRl
eHRUcmFja1JlcHJlc2VudGF0aW9uID0gdHJ1ZTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdl
SWZOZWVkZWQoKQotewotICAgIGlmICghbV9uZWVkc0dlbmVyYXRlVGV4dFRyYWNrUmVwcmVzZW50
YXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmVlZHNHZW5lcmF0ZVRleHRUcmFja1Jl
cHJlc2VudGF0aW9uID0gZmFsc2U7Ci0KLSAgICAvLyBXZSBzaG91bGQgY2FsbCBtX3RleHRUcmFj
a1JlcHJlc2VudGF0aW9uLT51cGRhdGUoKSB0byBwYWludCB0aGUgc3VidHJlZSBvZgotICAgIC8v
IHRoZSBSZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVtZW50IGFmdGVyIHRoZSBsYXlvdXQgaXMg
Y2xlYW4uCi0gICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCi0gICAgICAgIG1fdGV4
dFRyYWNrUmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnByb2Nlc3NBY3RpdmVWVFRDdWUoVlRUQ3VlJiBjdWUp
Ci17Ci0gICAgREVCVUdfTE9HKExPR0lERU5USUZJRVIsICJhZGRpbmcgYW5kIHBvc2l0aW9uaW5n
IGN1ZTogXCIiLCBjdWUudGV4dCgpLCAiXCIsIHN0YXJ0PSIsIGN1ZS5zdGFydFRpbWUoKSwgIiwg
ZW5kPSIsIGN1ZS5lbmRUaW1lKCksICIsIGxpbmU9IiwgY3VlLmxpbmUoKSk7Ci0gICAgUmVmPFRl
eHRUcmFja0N1ZUJveD4gZGlzcGxheUJveCA9ICpjdWUuZ2V0RGlzcGxheVRyZWUobV92aWRlb0Rp
c3BsYXlTaXplLnNpemUoKSwgbV9mb250U2l6ZSk7Ci0KLSAgICBpZiAoYXV0byByZWdpb24gPSBj
dWUudHJhY2soKS0+cmVnaW9ucygpLT5nZXRSZWdpb25CeUlkKGN1ZS5yZWdpb25JZCgpKSkgewot
ICAgICAgICAvLyBMZXQgcmVnaW9uIGJlIHRoZSBXZWJWVFQgcmVnaW9uIHdob3NlIHJlZ2lvbiBp
ZGVudGlmaWVyCi0gICAgICAgIC8vIG1hdGNoZXMgdGhlIHRleHQgdHJhY2sgY3VlIHJlZ2lvbiBp
ZGVudGlmaWVyIG9mIGN1ZS4KLSAgICAgICAgUmVmPEhUTUxEaXZFbGVtZW50PiByZWdpb25Ob2Rl
ID0gcmVnaW9uLT5nZXREaXNwbGF5VHJlZSgpOwotCi0gICAgICAgIGlmICghY29udGFpbnMocmVn
aW9uTm9kZS5wdHIoKSkpCi0gICAgICAgICAgICBhcHBlbmRDaGlsZChyZWdpb24tPmdldERpc3Bs
YXlUcmVlKCkpOwotCi0gICAgICAgIHJlZ2lvbi0+YXBwZW5kVGV4dFRyYWNrQ3VlQm94KFdURk1v
dmUoZGlzcGxheUJveCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIGN1ZSBoYXMgYW4g
ZW1wdHkgdGV4dCB0cmFjayBjdWUgcmVnaW9uIGlkZW50aWZpZXIgb3IgdGhlcmUgaXMgbm8KLSAg
ICAgICAgLy8gV2ViVlRUIHJlZ2lvbiB3aG9zZSByZWdpb24gaWRlbnRpZmllciBpcyBpZGVudGlj
YWwgdG8gY3VlJ3MgdGV4dAotICAgICAgICAvLyB0cmFjayBjdWUgcmVnaW9uIGlkZW50aWZpZXIs
IHJ1biB0aGUgZm9sbG93aW5nIHN1YnN0ZXBzOgotICAgICAgICBpZiAoZGlzcGxheUJveC0+aGFz
Q2hpbGROb2RlcygpICYmICFjb250YWlucyhkaXNwbGF5Qm94LnB0cigpKSkgewotICAgICAgICAg
ICAgLy8gTm90ZTogdGhlIGRpc3BsYXkgdHJlZSBvZiBhIGN1ZSBpcyByZW1vdmVkIHdoZW4gdGhl
IGFjdGl2ZSBmbGFnIG9mIHRoZSBjdWUgaXMgdW5zZXQuCi0gICAgICAgICAgICBhcHBlbmRDaGls
ZChkaXNwbGF5Qm94KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKQotewot
ICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8g
bWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHRoaXMpOwotICAgIGlmICghbWVkaWFF
bGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBzbWFsbGVzdERpbWVuc2lvbiA9
IHN0ZDo6bWluKG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkuaGVpZ2h0KCksIG1fdmlkZW9EaXNw
bGF5U2l6ZS5zaXplKCkud2lkdGgoKSk7Ci0gICAgZmxvYXQgZm9udFNjYWxlID0gZG9jdW1lbnQo
KS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCkuY2FwdGlvbkZvbnRTaXplU2Nh
bGVBbmRJbXBvcnRhbmNlKG1fZm9udFNpemVJc0ltcG9ydGFudCk7Ci0gICAgbV9mb250U2l6ZSA9
IGxyb3VuZGYoc21hbGxlc3REaW1lbnNpb24gKiBmb250U2NhbGUpOwotCi0gICAgZm9yIChhdXRv
JiBhY3RpdmVDdWUgOiBtZWRpYUVsZW1lbnQtPmN1cnJlbnRseUFjdGl2ZUN1ZXMoKSkgewotICAg
ICAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBhY3RpdmVDdWUuZGF0YSgpOwotICAgICAg
ICBpZiAoY3VlLT5pc1JlbmRlcmFibGUoKSkKLSAgICAgICAgICAgIGN1ZS0+c2V0Rm9udFNpemUo
bV9mb250U2l6ZSwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKSwgbV9mb250U2l6ZUlzSW1wb3J0
YW50KTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxl
bWVudDo6dXBkYXRlVGV4dFN0cm9rZVN0eWxlKCkKLXsKLSAgICBpZiAoIWRvY3VtZW50KCkucGFn
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1l
ZGlhRWxlbWVudCh0aGlzKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIFN0cmluZyBsYW5ndWFnZTsKLQotICAgIC8vIEZJWE1FOiBTaW5jZSBpdCBp
cyBwb3NzaWJsZSB0byBoYXZlIG1vcmUgdGhhbiBvbmUgdGV4dCB0cmFjayBlbmFibGVkLCB0aGUg
Zm9sbG93aW5nIGNvZGUgbWF5IG5vdCBmaW5kIHRoZSBjb3JyZWN0IGxhbmd1YWdlLgotICAgIC8v
IFRoZSBkZWZhdWx0IFVJIG9ubHkgYWxsb3dzIGEgdXNlciB0byBlbmFibGUgb25lIHRyYWNrIGF0
IGEgdGltZSwgc28gaXQgc2hvdWxkIGJlIE9LIGZvciBub3csIGJ1dCB3ZSBzaG91bGQgY29uc2lk
ZXIgZG9pbmcKLSAgICAvLyB0aGlzIGRpZmZlcmVudGx5LCBzZWUgPGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4NzU+LgotICAgIGlmIChhdXRvKiB0cmFja3MgPSBt
ZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdHJhY2tzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvIHRyYWNrID0g
dHJhY2tzLT5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKHRyYWNrICYmIHRyYWNrLT5tb2RlKCkg
PT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nKSB7Ci0gICAgICAgICAgICAgICAgbGFuZ3VhZ2Ug
PSB0cmFjay0+dmFsaWRCQ1A0N0xhbmd1YWdlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmbG9hdCBzdHJva2VXaWR0aDsK
LSAgICBib29sIGltcG9ydGFudDsKLQotICAgIC8vIEZJWE1FOiBmaW5kIGEgd2F5IHRvIHNldCB0
aGlzIHByb3BlcnR5IGluIHRoZSBzdHlsZXNoZWV0IGxpa2UgdGhlIG90aGVyIHVzZXIgc3R5bGUg
cHJlZmVyZW5jZXMsIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2OTg3ND4uCi0gICAgaWYgKGRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVm
ZXJlbmNlcygpLmNhcHRpb25TdHJva2VXaWR0aEZvckZvbnQobV9mb250U2l6ZSwgbGFuZ3VhZ2Us
IHN0cm9rZVdpZHRoLCBpbXBvcnRhbnQpKQotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5U3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRoLCBDU1NVbml0VHlwZTo6Q1NTX1BY
LCBpbXBvcnRhbnQpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQoKQotewotICAgIGF1
dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHRoaXMpOwotICAgIGlmICghbWVk
aWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlcXVpcmVzVGV4dFRyYWNr
UmVwcmVzZW50YXRpb24gPSBtZWRpYUVsZW1lbnQtPnJlcXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50
YXRpb24oKTsKLSAgICBpZiAoIWhhc0NoaWxkTm9kZXMoKSB8fCAhcmVxdWlyZXNUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbikgewotICAgICAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikg
ewotICAgICAgICAgICAgaWYgKCFyZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKQotICAg
ICAgICAgICAgICAgIGNsZWFyVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT5zZXRIaWRk
ZW4odHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
bV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgewotICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5U
SUZJRVIpOwotCi0gICAgICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24gPSBUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbjo6Y3JlYXRlKCp0aGlzKTsKLSAgICAgICAgaWYgKGRvY3VtZW50KCkucGFn
ZSgpKQotICAgICAgICAgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi0+c2V0Q29udGVudFNj
YWxlKGRvY3VtZW50KCkucGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICAgICAgbWVk
aWFFbGVtZW50LT5zZXRUZXh0VHJhY2tSZXByZXNlbnRhdGlvbihtX3RleHRUcmFja1JlcHJlc2Vu
dGF0aW9uLmdldCgpKTsKLSAgICB9Ci0KLSAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT5z
ZXRIaWRkZW4oZmFsc2UpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OmNsZWFyVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKQotewotICAgIGlmICghbV90
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQUxXQVlTX0xP
RyhMT0dJREVOVElGSUVSKTsKLQotICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24gPSBudWxs
cHRyOwotICAgIGlmIChhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlz
KSkKLSAgICAgICAgbWVkaWFFbGVtZW50LT5zZXRUZXh0VHJhY2tSZXByZXNlbnRhdGlvbihudWxs
cHRyKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1
cGRhdGVUZXh0VHJhY2tTdHlsZSgpCi17Ci0gICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRp
b24pIHsKLSAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9u
LCBDU1NWYWx1ZUFic29sdXRlKTsKLSAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdpZHRoLCBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLndpZHRoKCksIENTU1VuaXRU
eXBlOjpDU1NfUFgpOwotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
SGVpZ2h0LCBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLmhlaWdodCgpLCBDU1NVbml0VHlwZTo6
Q1NTX1BYKTsKLSAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQs
IDAsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5VG9wLCAwLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlQb3Np
dGlvbik7Ci0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoKTsK
LSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0KTsKLSAgICBy
ZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCk7Ci0gICAgcmVtb3ZlSW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6ZW50ZXJlZEZ1bGxzY3JlZW4oKQotewotICAgIHVw
ZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQoKTsKLSAgICB1cGRhdGVTaXplcyhG
b3JjZVVwZGF0ZTo6WWVzKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50OjpleGl0ZWRGdWxsc2NyZWVuKCkKLXsKLSAgICBjbGVhclRleHRUcmFja1JlcHJl
c2VudGF0aW9uKCk7Ci0gICAgdXBkYXRlU2l6ZXMoRm9yY2VVcGRhdGU6Olllcyk7Ci19Ci0KLWJv
b2wgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVmlkZW9EaXNw
bGF5U2l6ZSgpCi17Ci0gICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhp
cyk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEludFJlY3QgdmlkZW9Cb3g7Ci0gICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24pIHsK
LSAgICAgICAgdmlkZW9Cb3ggPSBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT5ib3VuZHMoKTsK
LSAgICAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBkb2N1bWVudCgpLnBhZ2UoKS0+ZGV2
aWNlU2NhbGVGYWN0b3IoKTsKLSAgICAgICAgdmlkZW9Cb3guc2V0V2lkdGgodmlkZW9Cb3gud2lk
dGgoKSAqIGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgdmlkZW9Cb3guc2V0SGVpZ2h0KHZp
ZGVvQm94LmhlaWdodCgpICogZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmICghaXM8UmVuZGVyVmlkZW8+KG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHZpZGVvQm94ID0gZG93bmNhc3Q8UmVuZGVy
VmlkZW8+KCptZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpLnZpZGVvQm94KCk7Ci0gICAgfQotCi0g
ICAgaWYgKG1fdmlkZW9EaXNwbGF5U2l6ZSA9PSB2aWRlb0JveCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgbV92aWRlb0Rpc3BsYXlTaXplID0gdmlkZW9Cb3g7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBk
YXRlU2l6ZXMoRm9yY2VVcGRhdGUgZm9yY2UpCi17Ci0gICAgaWYgKCF1cGRhdGVWaWRlb0Rpc3Bs
YXlTaXplKCkgJiYgZm9yY2UgIT0gRm9yY2VVcGRhdGU6OlllcykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0gICAgaWYgKCFtZWRp
YUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1lZGlhRWxlbWVudC0+c3luY1RleHRU
cmFja0JvdW5kcygpOwotCi0gICAgdXBkYXRlQWN0aXZlQ3Vlc0ZvbnRTaXplKCk7Ci0gICAgdXBk
YXRlVGV4dFN0cm9rZVN0eWxlKCk7Ci0gICAgZm9yIChhdXRvJiBhY3RpdmVDdWUgOiBtZWRpYUVs
ZW1lbnQtPmN1cnJlbnRseUFjdGl2ZUN1ZXMoKSkKLSAgICAgICAgYWN0aXZlQ3VlLmRhdGEoKS0+
cmVjYWxjdWxhdGVTdHlsZXMoKTsKLQotICAgIG1fdGFza1F1ZXVlLmVucXVldWVUYXNrKFt0aGlz
XSAoKSB7Ci0gICAgICAgIHVwZGF0ZURpc3BsYXkoKTsKLSAgICB9KTsKLX0KLQotUmVmUHRyPElt
YWdlPiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkltYWdlKCkKLXsKLSAgICBpZiAoIWhhc0NoaWxkTm9kZXMoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZG9jdW1l
bnQoKS5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKLQotICAgIGF1dG8qIHJlbmRlcmVyID0g
dGhpcy0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGlmICghcmVuZGVyZXItPmhhc0xheWVyKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJN
b2RlbE9iamVjdD4oKnJlbmRlcmVyKS5sYXllcigpOwotCi0gICAgZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IgPSAxOwotICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAg
ICAgIGRldmljZVNjYWxlRmFjdG9yID0gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLQotICAg
IEludFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+c2l6ZSgp
KTsKLQotICAgIC8vIEZJWE1FICgxNDk0MjIpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVu
Y29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNpemUoKSwgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKLSAgICBpZiAo
IWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHBhaW50RmxhZ3Mg
PSBSZW5kZXJMYXllcjo6cGFpbnRMYXllclBhaW50aW5nQ29tcG9zaXRpbmdBbGxQaGFzZXNGbGFn
cygpOwotICAgIHBhaW50RmxhZ3MuYWRkKFJlbmRlckxheWVyOjpQYWludExheWVyVGVtcG9yYXJ5
Q2xpcFJlY3RzKTsKLSAgICBsYXllci0+cGFpbnQoYnVmZmVyLT5jb250ZXh0KCksIHBhaW50aW5n
UmVjdCwgTGF5b3V0U2l6ZSgpLCB7IFBhaW50QmVoYXZpb3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xh
eWVycywgUGFpbnRCZWhhdmlvcjo6U25hcHNob3R0aW5nIH0sIG51bGxwdHIsIHBhaW50RmxhZ3Mp
OwotCi0gICAgcmV0dXJuIEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKFdURk1vdmUoYnVmZmVy
KSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dGV4
dFRyYWNrUmVwcmVzZW50YXRpb25Cb3VuZHNDaGFuZ2VkKGNvbnN0IEludFJlY3QmKQotewotICAg
IHVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQoKTsKLSAgICB1cGRhdGVTaXpl
cygpOwotfQotCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi1jb25zdCBMb2dnZXImIE1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmxvZ2dlcigpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX2xvZ2dlcikKLSAgICAgICAgbV9sb2dnZXIgPSAmZG9jdW1lbnQoKS5sb2dnZXIoKTsK
LQotICAgIHJldHVybiAqbV9sb2dnZXI7Ci19Ci0KLWNvbnN0IHZvaWQqIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmxvZ0lkZW50aWZpZXIoKSBjb25zdAotewotICAgIGlm
ICghbV9sb2dJZGVudGlmaWVyKSB7Ci0gICAgICAgIGlmIChhdXRvIG1lZGlhRWxlbWVudCA9IHBh
cmVudE1lZGlhRWxlbWVudCh0aGlzKSkKLSAgICAgICAgICAgIG1fbG9nSWRlbnRpZmllciA9IG1l
ZGlhRWxlbWVudC0+bG9nSWRlbnRpZmllcigpOwotICAgIH0KLQotICAgIHJldHVybiBtX2xvZ0lk
ZW50aWZpZXI7Ci19Ci0KLVdURkxvZ0NoYW5uZWwmIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQ6OmxvZ0NoYW5uZWwoKSBjb25zdAotewotICAgIHJldHVybiBMb2dNZWRpYTsK
LX0KLSNlbmRpZiAvLyAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLQotI2VuZGlmIC8vIEVOQUJMRShW
SURFT19UUkFDSykKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNzZiMTRkNmY1MmJlNmEwZTczODE5MTcyOTNkNTM3NzliY2Y5MWQ5
Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCisrKyAvZGV2L251bGwK
QEAgLTEsNTM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVk
ZSAiR2VuZXJpY1Rhc2tRdWV1ZS5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRUeXBl
cy5oIgotI2luY2x1ZGUgIlRleHRUcmFja1JlcHJlc2VudGF0aW9uLmgiCi0jaW5jbHVkZSA8d3Rm
L0xvZ2dlckhlbHBlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50IGZpbmFs
IDogcHVibGljIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoTWVkaWFDb250cm9sUGFuZWxFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSAgICB2b2lk
IHNldENhbkJlRHJhZ2dlZChib29sKTsKLSAgICB2b2lkIHNldElzRGlzcGxheWVkKGJvb2wpOwot
Ci0gICAgdm9pZCByZXNldFBvc2l0aW9uKCk7Ci0gICAgdm9pZCBtYWtlT3BhcXVlKCk7Ci0gICAg
dm9pZCBtYWtlVHJhbnNwYXJlbnQoKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFD
b250cm9sUGFuZWxFbGVtZW50KERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc3RhcnREcmFnKGNvbnN0IExheW91
dFBvaW50JiBldmVudExvY2F0aW9uKTsKLSAgICB2b2lkIGNvbnRpbnVlRHJhZyhjb25zdCBMYXlv
dXRQb2ludCYgZXZlbnRMb2NhdGlvbik7Ci0gICAgdm9pZCBlbmREcmFnKCk7Ci0KLSAgICB2b2lk
IHN0YXJ0VGltZXIoKTsKLSAgICB2b2lkIHN0b3BUaW1lcigpOwotICAgIHZvaWQgdHJhbnNpdGlv
blRpbWVyRmlyZWQoKTsKLQotICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgTGF5b3V0UG9pbnQm
KTsKLQotICAgIGJvb2wgbV9jYW5CZURyYWdnZWQ7Ci0gICAgYm9vbCBtX2lzQmVpbmdEcmFnZ2Vk
OwotICAgIGJvb2wgbV9pc0Rpc3BsYXllZDsKLSAgICBib29sIG1fb3BhcXVlOwotICAgIExheW91
dFBvaW50IG1fbGFzdERyYWdFdmVudExvY2F0aW9uOwotICAgIExheW91dFBvaW50IG1fY3VtdWxh
dGl2ZURyYWdPZmZzZXQ7Ci0KLSAgICBUaW1lciBtX3RyYW5zaXRpb25UaW1lcjsKLX07Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sUGFuZWxF
bmNsb3N1cmVFbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgewot
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVFbGVt
ZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFBhbmVsRW5jbG9zdXJl
RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVk
aWFDb250cm9sUGFuZWxFbmNsb3N1cmVFbGVtZW50KERvY3VtZW50Jik7Ci19OwotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbE92ZXJsYXlFbmNs
b3N1cmVFbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgewotICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sT3ZlcmxheUVuY2xvc3VyZUVsZW1l
bnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sT3ZlcmxheUVuY2xvc3Vy
ZUVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1l
ZGlhQ29udHJvbE92ZXJsYXlFbmNsb3N1cmVFbGVtZW50KERvY3VtZW50Jik7Ci19OwotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFRpbWVsaW5l
Q29udGFpbmVyRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xEaXZFbGVtZW50IHsK
LSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVy
RWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xUaW1lbGluZUNv
bnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi0gICAgdm9pZCBzZXRUaW1lRGlz
cGxheXNIaWRkZW4oYm9vbCk7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9s
VGltZWxpbmVDb250YWluZXJFbGVtZW50KERvY3VtZW50Jik7Ci0KLSAgICBSZW5kZXJQdHI8UmVu
ZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNvbnN0IFJl
bmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVt
ZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgewotICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudCk7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWlu
ZXJFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50cygpIG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotCi0gICAgUmVuZGVyUHRyPFJlbmRl
ckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5k
ZXJUcmVlUG9zaXRpb24mKSBvdmVycmlkZTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQgZmluYWwg
OiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9D
QVRFRChNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudD4gY3JlYXRlKERvY3VtZW50
Jik7Ci0KLSAgICB2b2lkIHVwZGF0ZSgpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlh
Q29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KERvY3VtZW50Jik7Ci0KLSAgICBlbnVtIFN0YXRl
QmVpbmdEaXNwbGF5ZWQgeyBOb3RoaW5nLCBMb2FkaW5nLCBMaXZlQnJvYWRjYXN0IH07Ci0gICAg
U3RhdGVCZWluZ0Rpc3BsYXllZCBtX3N0YXRlQmVpbmdEaXNwbGF5ZWQ7Ci19OwotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1
dHRvbkVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQg
ewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9u
RWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xQYW5lbE11dGVC
dXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSNpZiAh
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZU1vdmVFdmVu
dHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBl
eHBsaWNpdCBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50KERvY3VtZW50JiwgTWVk
aWFDb250cm9scyopOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Jikgb3Zl
cnJpZGU7Ci0KLSAgICBNZWRpYUNvbnRyb2xzKiBtX2NvbnRyb2xzOwotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJN
dXRlQnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxl
bWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xWb2x1bWVTbGlk
ZXJNdXRlQnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRy
b2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLXBy
aXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVs
ZW1lbnQoRG9jdW1lbnQmKTsKLX07Ci0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1jbGFzcyBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBN
ZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVk
aWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVk
aWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi0jaWYgIVBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50
cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi0gICAgdm9pZCB1cGRhdGVE
aXNwbGF5VHlwZSgpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29u
dHJvbFBsYXlCdXR0b25FbGVtZW50KERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0b25FbGVtZW50IGZp
bmFsIDogcHVibGljIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQpOwotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0b25FbGVtZW50PiBj
cmVhdGUoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKSBvdmVycmlk
ZTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRv
bkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1j
bGFzcyBNZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQgZmluYWwgOiBwdWJsaWMg
TWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FU
RUQoTWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50KTsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPE1lZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudD4gY3JlYXRlKERv
Y3VtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sU2Vla0Zvcndh
cmRCdXR0b25FbGVtZW50KERvY3VtZW50Jik7Ci0KLSAgICBib29sIGlzRm9yd2FyZEJ1dHRvbigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50
IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVudCk7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQ+
IGNyZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJv
bFNlZWtCYWNrQnV0dG9uRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgYm9vbCBpc0ZvcndhcmRC
dXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25F
bGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RG
X01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50KTsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ+IGNy
ZWF0ZShEb2N1bWVudCYpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCB3
aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
LSNlbmRpZgotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbFJld2luZEJ1dHRv
bkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1j
bGFzcyBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1
YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FU
RUQoTWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ+
IGNyZWF0ZShEb2N1bWVudCYpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9v
bCB3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbFJldHVyblRv
UmVhbHRpbWVCdXR0b25FbGVtZW50KERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25F
bGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RG
X01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRv
bkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sVG9nZ2xlQ2xv
c2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xz
Kik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9N
b3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAg
ICB2b2lkIHVwZGF0ZURpc3BsYXlUeXBlKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgZXhw
bGljaXQgTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50KERvY3Vt
ZW50JiwgTWVkaWFDb250cm9scyopOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50Jikgb3ZlcnJpZGU7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oV0lOKSB8
fCBQTEFURk9STShHVEspCi0gICAgTWVkaWFDb250cm9scyogbV9jb250cm9sczsKLSNlbmRpZgot
fTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRy
b2xDbG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250
cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xD
bG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNDb250YWluZXJFbGVtZW50PiBjcmVhdGUoRG9jdW1l
bnQmKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRU
b01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQot
cHJpdmF0ZToKLSAgICBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQo
RG9jdW1lbnQmKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xh
c3MgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50IGZpbmFsIDogcHVi
bGljIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQo
TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50KTsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50JiwgTWVkaWFDb250cm9scyopOwotCi0jaWYgIVBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50cygpIG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi0gICAgdm9pZCB1cGRhdGVEaXNwbGF5KCk7Ci0K
LXByaXZhdGU6Ci0gICAgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50
KERvY3VtZW50JiwgTWVkaWFDb250cm9scyopOwotCi0gICAgdm9pZCByZWJ1aWxkVHJhY2tMaXN0
TWVudSgpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7
Ci0KLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RWxlbWVudD4+IFRyYWNrTWVudUl0ZW1zOwot
ICAgIFRyYWNrTWVudUl0ZW1zIG1fbWVudUl0ZW1zOwotI2lmIEVOQUJMRShWSURFT19UUkFDSykK
LSAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8VGV4dFRyYWNrPj4g
TWVudUl0ZW1Ub1RyYWNrTWFwOwotICAgIE1lbnVJdGVtVG9UcmFja01hcCBtX21lbnVUb1RyYWNr
TWFwOwotI2VuZGlmCi0gICAgTWVkaWFDb250cm9scyogbV9jb250cm9sczsKLX07Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sVGltZWxpbmVF
bGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RG
X01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQpOwotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50PiBjcmVhdGUoRG9j
dW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGU7Ci0jZW5kaWYK
LQotICAgIHZvaWQgc2V0UG9zaXRpb24oZG91YmxlKTsKLSAgICB2b2lkIHNldER1cmF0aW9uKGRv
dWJsZSk7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sVGltZWxpbmVFbGVt
ZW50KERvY3VtZW50JiwgTWVkaWFDb250cm9scyopOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci0KLSAgICBNZWRpYUNvbnRyb2xzKiBtX2NvbnRyb2xz
OwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJ
bnB1dEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sRnVs
bHNjcmVlbkJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250
cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi0jaWYgIVBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50
cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi0gICAgdm9pZCBzZXRJc0Z1
bGxzY3JlZW4oYm9vbCk7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sRnVs
bHNjcmVlbkJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQgZmlu
YWwgOiBwdWJsaWMgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudCB7Ci0gICAgV1RGX01B
S0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQpOwot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVt
ZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNv
bnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQoRG9jdW1lbnQmKTsKLX07Ci0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1
bWVTbGlkZXJFbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVs
ZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sRnVsbHNjcmVl
blZvbHVtZVNsaWRlckVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250
cm9sRnVsbHNjcmVlblZvbHVtZVNsaWRlckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi1w
cml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJF
bGVtZW50KERvY3VtZW50Jik7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLWNsYXNzIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50IGZp
bmFsIDogcHVibGljIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9uRWxlbWVudCk7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWlu
QnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFD
b250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLSAgICB2
b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLX07Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sRnVsbHNjcmVlblZv
bHVtZU1heEJ1dHRvbkVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVt
ZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5W
b2x1bWVNYXhCdXR0b25FbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsK
LQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNl
Q2xpY2tFdmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxl
bWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Jikg
b3ZlcnJpZGU7Ci19OwotCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xh
c3MgTWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50IGZpbmFsIDogcHVibGlj
IE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9D
QVRFRChNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQpOwotcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50PiBj
cmVhdGUoRG9jdW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xU
aW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmKTsKLX07Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNw
bGF5RWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQg
ewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNw
bGF5RWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xDdXJyZW50
VGltZURpc3BsYXlFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICBl
eHBsaWNpdCBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50KERvY3VtZW50Jik7
Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCi0KLWNsYXNzIFZUVEN1ZTsKLQotY2xhc3MgTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudCBmaW5hbAotICAgIDogcHVibGljIE1lZGlhQ29udHJvbERpdkVsZW1l
bnQKLSAgICAsIHB1YmxpYyBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNsaWVudAotI2lmICFSRUxF
QVNFX0xPR19ESVNBQkxFRAotICAgICwgcHJpdmF0ZSBMb2dnZXJIZWxwZXIKLSNlbmRpZgotewot
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotICAgIGVudW0gY2xhc3MgRm9y
Y2VVcGRhdGUgeyBZZXMsIE5vIH07Ci0gICAgdm9pZCB1cGRhdGVTaXplcyhGb3JjZVVwZGF0ZSBm
b3JjZSA9IEZvcmNlVXBkYXRlOjpObyk7Ci0gICAgdm9pZCB1cGRhdGVEaXNwbGF5KCk7Ci0KLSAg
ICB2b2lkIHVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgpOwotCi0g
ICAgdm9pZCBlbnRlcmVkRnVsbHNjcmVlbigpOwotICAgIHZvaWQgZXhpdGVkRnVsbHNjcmVlbigp
OwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIC8vIEVsZW1lbnQKLSAgICBSZW5kZXJQdHI8UmVu
ZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNvbnN0IFJl
bmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotCi0gICAgLy8gVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25DbGllbnQKLSAgICBSZWZQdHI8SW1hZ2U+IGNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0
aW9uSW1hZ2UoKSBvdmVycmlkZTsKLSAgICB2b2lkIHRleHRUcmFja1JlcHJlc2VudGF0aW9uQm91
bmRzQ2hhbmdlZChjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVwZGF0ZVRl
eHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQoKTsKLSAgICB2b2lkIGNsZWFyVGV4dFRyYWNr
UmVwcmVzZW50YXRpb24oKTsKLQotICAgIGJvb2wgdXBkYXRlVmlkZW9EaXNwbGF5U2l6ZSgpOwot
ICAgIHZvaWQgdXBkYXRlQWN0aXZlQ3Vlc0ZvbnRTaXplKCk7Ci0gICAgdm9pZCB1cGRhdGVUZXh0
U3Ryb2tlU3R5bGUoKTsKLSAgICB2b2lkIHByb2Nlc3NBY3RpdmVWVFRDdWUoVlRUQ3VlJik7Ci0g
ICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tTdHlsZSgpOwotCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FC
TEVECi0gICAgY29uc3QgTG9nZ2VyJiBsb2dnZXIoKSBjb25zdCBmaW5hbDsKLSAgICBjb25zdCB2
b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgZmluYWw7Ci0gICAgV1RGTG9nQ2hhbm5lbCYgbG9n
Q2hhbm5lbCgpIGNvbnN0IGZpbmFsOwotICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuICJNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50
IjsgfQotICAgIG11dGFibGUgUmVmUHRyPExvZ2dlcj4gbV9sb2dnZXI7Ci0gICAgbXV0YWJsZSBj
b25zdCB2b2lkKiBtX2xvZ0lkZW50aWZpZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLQotICAgIHN0
ZDo6dW5pcXVlX3B0cjxUZXh0VHJhY2tSZXByZXNlbnRhdGlvbj4gbV90ZXh0VHJhY2tSZXByZXNl
bnRhdGlvbjsKLQotICAgIEdlbmVyaWNUYXNrUXVldWU8VGltZXI+IG1fdGFza1F1ZXVlOwotICAg
IEludFJlY3QgbV92aWRlb0Rpc3BsYXlTaXplOwotICAgIGludCBtX2ZvbnRTaXplIHsgMCB9Owot
ICAgIGJvb2wgbV9mb250U2l6ZUlzSW1wb3J0YW50IHsgZmFsc2UgfTsKLSAgICBib29sIG1fbmVl
ZHNHZW5lcmF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uIHsgZmFsc2UgfTsKLX07Ci0KLSNlbmRp
ZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjMWRlYmNl
ZTJmNjNkZjY3ZDE0MzQ2MjcyMjc1MzJkNjA2NWNiNzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50LmNwcApAQCAtMCwwICsxLDQ4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaCIKKworI2lmIEVOQUJMRShWSURFTykK
KworI2luY2x1ZGUgIkRPTVRva2VuTGlzdC5oIgorI2luY2x1ZGUgIkVsZW1lbnRDaGlsZEl0ZXJh
dG9yLmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnVsbHNjcmVlbk1hbmFnZXIuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50Lmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBPREludGVydmFsLmgiCisjaW5jbHVk
ZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5jbHVkZSAi
U3R5bGVQcm9wZXJ0aWVzLmgiCisjaW5jbHVkZSAiVGV4dFRyYWNrQ3VlR2VuZXJpYy5oIgorI2lu
Y2x1ZGUgIlRleHRUcmFja0xpc3QuaCIKKyNpbmNsdWRlICJWVFRSZWdpb25MaXN0LmgiCisjaW5j
bHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvTGFuZ3VhZ2UuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCk7CisKK3VzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKK1JlZjxNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBIVE1MTWVkaWFFbGVtZW50JiBtZWRp
YUVsZW1lbnQpCit7CisgICAgYXV0byBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KGRvY3VtZW50LCBtZWRpYUVsZW1lbnQpKTsKKyAg
ICBlbGVtZW50LT5oaWRlKCk7CisgICAgcmV0dXJuIGVsZW1lbnQ7Cit9CisKK01lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KQor
ICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBkb2N1bWVudCkKKyAgICAsIG1fbWVkaWFFbGVt
ZW50KG1ha2VXZWFrUHRyKCZlbGVtZW50KSkKK3sKKyAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygi
LXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLWNvbnRhaW5lciIsIEF0b21TdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7Cit9CisKK1JlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVy
U3R5bGUmJiBzdHlsZSwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikKK3sKKyAgICByZXR1cm4g
Y3JlYXRlUmVuZGVyZXI8UmVuZGVyQmxvY2tGbG93PigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwor
fQorCitzdGF0aWMgYm9vbCBjb21wYXJlQ3VlSW50ZXJ2YWxGb3JEaXNwbGF5KGNvbnN0IEN1ZUlu
dGVydmFsJiBvbmUsIGNvbnN0IEN1ZUludGVydmFsJiB0d28pCit7CisgICAgcmV0dXJuIG9uZS5k
YXRhKCktPmlzUG9zaXRpb25lZEFib3ZlKHR3by5kYXRhKCkpOworfTsKKwordm9pZCBNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVEaXNwbGF5KCkKK3sKKyAgICBp
ZiAobV9tZWRpYUVsZW1lbnQgJiYgIW1fbWVkaWFFbGVtZW50LT5jbG9zZWRDYXB0aW9uc1Zpc2li
bGUoKSkKKyAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oKTsKKworICAgIC8vIDEuIElmIHRoZSBtZWRp
YSBlbGVtZW50IGlzIGFuIGF1ZGlvIGVsZW1lbnQsIG9yIGlzIGFub3RoZXIgcGxheWJhY2sKKyAg
ICAvLyBtZWNoYW5pc20gd2l0aCBubyByZW5kZXJpbmcgYXJlYSwgYWJvcnQgdGhlc2Ugc3RlcHMu
IFRoZXJlIGlzIG5vdGhpbmcgdG8KKyAgICAvLyByZW5kZXIuCisgICAgaWYgKCFtX21lZGlhRWxl
bWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPmlzVmlkZW8oKSB8fCBtX3ZpZGVvRGlzcGxheVNpemUu
c2l6ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gMi4gTGV0IHZpZGVv
IGJlIHRoZSBtZWRpYSBlbGVtZW50IG9yIG90aGVyIHBsYXliYWNrIG1lY2hhbmlzbS4KKyAgICBI
VE1MVmlkZW9FbGVtZW50JiB2aWRlbyA9IGRvd25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KCptX21l
ZGlhRWxlbWVudCk7CisKKyAgICAvLyAzLiBMZXQgb3V0cHV0IGJlIGFuIGVtcHR5IGxpc3Qgb2Yg
YWJzb2x1dGVseSBwb3NpdGlvbmVkIENTUyBibG9jayBib3hlcy4KKworICAgIC8vIDQuIElmIHRo
ZSB1c2VyIGFnZW50IGlzIGV4cG9zaW5nIGEgdXNlciBpbnRlcmZhY2UgZm9yIHZpZGVvLCBhZGQg
dG8KKyAgICAvLyBvdXRwdXQgb25lIG9yIG1vcmUgY29tcGxldGVseSB0cmFuc3BhcmVudCBwb3Np
dGlvbmVkIENTUyBibG9jayBib3hlcyB0aGF0CisgICAgLy8gY292ZXIgdGhlIHNhbWUgcmVnaW9u
IGFzIHRoZSB1c2VyIGludGVyZmFjZS4KKworICAgIC8vIDUuIElmIHRoZSBsYXN0IHRpbWUgdGhl
c2UgcnVsZXMgd2VyZSBydW4sIHRoZSB1c2VyIGFnZW50IHdhcyBub3QgZXhwb3NpbmcKKyAgICAv
LyBhIHVzZXIgaW50ZXJmYWNlIGZvciB2aWRlbywgYnV0IG5vdyBpdCBpcywgbGV0IHJlc2V0IGJl
IHRydWUuIE90aGVyd2lzZSwKKyAgICAvLyBsZXQgcmVzZXQgYmUgZmFsc2UuCisKKyAgICAvLyBU
aGVyZSBpcyBub3RoaW5nIHRvIGJlIGRvbmUgZXhwbGljaXRseSBmb3IgNHRoIGFuZCA1dGggc3Rl
cHMsIGFzCisgICAgLy8gZXZlcnl0aGluZyBpcyBoYW5kbGVkIHRocm91Z2ggQ1NTLiBUaGUgY2Fw
dGlvbiBib3ggaXMgb24gdG9wIG9mIHRoZQorICAgIC8vIGNvbnRyb2xzIGJveCwgaW4gYSBjb250
YWluZXIgc2V0IHdpdGggdGhlIC13ZWJraXQtYm94IGRpc3BsYXkgcHJvcGVydHkuCisKKyAgICAv
LyA2LiBMZXQgdHJhY2tzIGJlIHRoZSBzdWJzZXQgb2YgdmlkZW8ncyBsaXN0IG9mIHRleHQgdHJh
Y2tzIHRoYXQgaGF2ZSBhcworICAgIC8vIHRoZWlyIHJ1bGVzIGZvciB1cGRhdGluZyB0aGUgdGV4
dCB0cmFjayByZW5kZXJpbmcgdGhlc2UgcnVsZXMgZm9yCisgICAgLy8gdXBkYXRpbmcgdGhlIGRp
c3BsYXkgb2YgV2ViVlRUIHRleHQgdHJhY2tzLCBhbmQgd2hvc2UgdGV4dCB0cmFjayBtb2RlIGlz
CisgICAgLy8gc2hvd2luZyBvciBzaG93aW5nIGJ5IGRlZmF1bHQuCisgICAgLy8gNy4gTGV0IGN1
ZXMgYmUgYW4gZW1wdHkgbGlzdCBvZiB0ZXh0IHRyYWNrIGN1ZXMuCisgICAgLy8gOC4gRm9yIGVh
Y2ggdHJhY2sgdHJhY2sgaW4gdHJhY2tzLCBhcHBlbmQgdG8gY3VlcyBhbGwgdGhlIGN1ZXMgZnJv
bQorICAgIC8vIHRyYWNrJ3MgbGlzdCBvZiBjdWVzIHRoYXQgaGF2ZSB0aGVpciB0ZXh0IHRyYWNr
IGN1ZSBhY3RpdmUgZmxhZyBzZXQuCisgICAgQ3VlTGlzdCBhY3RpdmVDdWVzID0gdmlkZW8uY3Vy
cmVudGx5QWN0aXZlQ3VlcygpOworCisgICAgLy8gOS4gSWYgcmVzZXQgaXMgZmFsc2UsIHRoZW4s
IGZvciBlYWNoIHRleHQgdHJhY2sgY3VlIGN1ZSBpbiBjdWVzOiBpZiBjdWUncworICAgIC8vIHRl
eHQgdHJhY2sgY3VlIGRpc3BsYXkgc3RhdGUgaGFzIGEgc2V0IG9mIENTUyBib3hlcywgdGhlbiBh
ZGQgdGhvc2UgYm94ZXMKKyAgICAvLyB0byBvdXRwdXQsIGFuZCByZW1vdmUgY3VlIGZyb20gY3Vl
cy4KKworICAgIC8vIFRoZXJlIGlzIG5vdGhpbmcgZXhwbGljaXRseSB0byBiZSBkb25lIGhlcmUs
IGFzIGFsbCB0aGUgY2FjaGluZyBvY2N1cnMKKyAgICAvLyB3aXRoaW4gdGhlIFRleHRUcmFja0N1
ZSBpbnN0YW5jZSBpdHNlbGYuIElmIHBhcmFtZXRlcnMgb2YgdGhlIGN1ZSBjaGFuZ2UsCisgICAg
Ly8gdGhlIGRpc3BsYXkgdHJlZSBpcyBjbGVhcmVkLgorCisgICAgLy8gSWYgdGhlIG51bWJlciBv
ZiBDU1MgYm94ZXMgaW4gdGhlIG91dHB1dCBpcyBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBjdWVz
CisgICAgLy8gd2Ugd2lzaCB0byByZW5kZXIgKGUuZy4sIHdlIGFyZSBhZGRpbmcgYW5vdGhlciBj
dWUgaW4gYSBzZXQgb2Ygcm9sbC11cAorICAgIC8vIGN1ZXMpLCByZW1vdmUgYWxsIHRoZSBleGlz
dGluZyBDU1MgYm94ZXMgcmVwcmVzZW50aW5nIHRoZSBjdWVzIGFuZCByZS1hZGQKKyAgICAvLyB0
aGVtIHNvIHRoYXQgdGhlIG5ldyBjdWUgaXMgYXQgdGhlIGJvdHRvbS4KKyAgICAvLyBGSVhNRTog
Q2FsbGluZyBjb3VudENoaWxkTm9kZXMoKSBoZXJlIGlzIGluZWZmaWNpZW50LiBXZSBkb24ndCBu
ZWVkIHRvCisgICAgLy8gdHJhdmVyc2UgYWxsIGNoaWxkcmVuIGp1c3QgdG8gY2hlY2sgaWYgdGhl
cmUgYXJlIGxlc3MgY2hpbGRyZW4gdGhhbiBjdWVzLgorICAgIGlmIChjb3VudENoaWxkTm9kZXMo
KSA8IGFjdGl2ZUN1ZXMuc2l6ZSgpKQorICAgICAgICByZW1vdmVDaGlsZHJlbigpOworCisgICAg
YWN0aXZlQ3Vlcy5yZW1vdmVBbGxNYXRjaGluZyhbXSAoQ3VlSW50ZXJ2YWwmIGN1ZUludGVydmFs
KSB7CisgICAgICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9IGN1ZUludGVydmFsLmRhdGEo
KTsKKyAgICAgICAgcmV0dXJuICFjdWUtPnRyYWNrKCkKKyAgICAgICAgICAgIHx8ICFjdWUtPnRy
YWNrKCktPmlzUmVuZGVyZWQoKQorICAgICAgICAgICAgfHwgY3VlLT50cmFjaygpLT5tb2RlKCkg
PT0gVGV4dFRyYWNrOjpNb2RlOjpEaXNhYmxlZAorICAgICAgICAgICAgfHwgIWN1ZS0+aXNBY3Rp
dmUoKQorICAgICAgICAgICAgfHwgIWN1ZS0+aXNSZW5kZXJhYmxlKCk7CisgICAgfSk7CisKKyAg
ICAvLyBTb3J0IHRoZSBhY3RpdmUgY3VlcyBmb3IgdGhlIGFwcHJvcHJpYXRlIGRpc3BsYXkgb3Jk
ZXIuIEZvciBleGFtcGxlLCBmb3Igcm9sbC11cAorICAgIC8vIG9yIHBhaW50LW9uIGNhcHRpb25z
LCB3ZSBuZWVkIHRvIGFkZCB0aGUgY3VlcyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIs
CisgICAgLy8gc28gdGhhdCB0aGUgbmV3ZXN0IGNhcHRpb25zIGFwcGVhciBhdCB0aGUgYm90dG9t
LgorICAgIHN0ZDo6c29ydChhY3RpdmVDdWVzLmJlZ2luKCksIGFjdGl2ZUN1ZXMuZW5kKCksICZj
b21wYXJlQ3VlSW50ZXJ2YWxGb3JEaXNwbGF5KTsKKworICAgIGlmIChtX21lZGlhRWxlbWVudC0+
Y2xvc2VkQ2FwdGlvbnNWaXNpYmxlKCkpIHsKKyAgICAgICAgLy8gMTAuIEZvciBlYWNoIHRleHQg
dHJhY2sgY3VlIGluIGN1ZXMgdGhhdCBoYXMgbm90IHlldCBoYWQKKyAgICAgICAgLy8gY29ycmVz
cG9uZGluZyBDU1MgYm94ZXMgYWRkZWQgdG8gb3V0cHV0LCBpbiB0ZXh0IHRyYWNrIGN1ZSBvcmRl
ciwgcnVuIHRoZQorICAgICAgICAvLyBmb2xsb3dpbmcgc3Vic3RlcHM6CisgICAgICAgIGZvciAo
YXV0byYgaW50ZXJ2YWwgOiBhY3RpdmVDdWVzKSB7CisgICAgICAgICAgICBhdXRvIGN1ZSA9IGlu
dGVydmFsLmRhdGEoKTsKKyAgICAgICAgICAgIGN1ZS0+c2V0Rm9udFNpemUobV9mb250U2l6ZSwg
bV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKSwgbV9mb250U2l6ZUlzSW1wb3J0YW50KTsKKyAgICAg
ICAgICAgIGlmIChpczxWVFRDdWU+KCpjdWUpKQorICAgICAgICAgICAgICAgIHByb2Nlc3NBY3Rp
dmVWVFRDdWUoZG93bmNhc3Q8VlRUQ3VlPigqY3VlKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIGRpc3BsYXlCb3ggPSBjdWUtPmdldERpc3BsYXlUcmVlKG1fdmlk
ZW9EaXNwbGF5U2l6ZS5zaXplKCksIG1fZm9udFNpemUpOworICAgICAgICAgICAgICAgIGlmIChk
aXNwbGF5Qm94LT5oYXNDaGlsZE5vZGVzKCkgJiYgIWNvbnRhaW5zKGRpc3BsYXlCb3guZ2V0KCkp
KQorICAgICAgICAgICAgICAgICAgICBhcHBlbmRDaGlsZCgqZGlzcGxheUJveCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAxMS4gUmV0dXJuIG91dHB1dC4KKyAg
ICBpZiAoaGFzQ2hpbGROb2RlcygpKQorICAgICAgICBzaG93KCk7CisgICAgZWxzZQorICAgICAg
ICBoaWRlKCk7CisKKyAgICB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklmTmVlZGVkKCk7
CisgICAgdXBkYXRlVGV4dFRyYWNrU3R5bGUoKTsKKyAgICBtX25lZWRzR2VuZXJhdGVUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbiA9IHRydWU7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVl
ZGVkKCkKK3sKKyAgICBpZiAoIW1fbmVlZHNHZW5lcmF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9u
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX25lZWRzR2VuZXJhdGVUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbiA9IGZhbHNlOworCisgICAgLy8gV2Ugc2hvdWxkIGNhbGwgbV90ZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbi0+dXBkYXRlKCkgdG8gcGFpbnQgdGhlIHN1YnRyZWUgb2YKKyAgICAvLyB0aGUg
UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCBhZnRlciB0aGUgbGF5b3V0IGlzIGNsZWFu
LgorICAgIGlmIChtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uKQorICAgICAgICBtX3RleHRUcmFj
a1JlcHJlc2VudGF0aW9uLT51cGRhdGUoKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50Ojpwcm9jZXNzQWN0aXZlVlRUQ3VlKFZUVEN1ZSYgY3VlKQorewor
ICAgIERFQlVHX0xPRyhMT0dJREVOVElGSUVSLCAiYWRkaW5nIGFuZCBwb3NpdGlvbmluZyBjdWU6
IFwiIiwgY3VlLnRleHQoKSwgIlwiLCBzdGFydD0iLCBjdWUuc3RhcnRUaW1lKCksICIsIGVuZD0i
LCBjdWUuZW5kVGltZSgpLCAiLCBsaW5lPSIsIGN1ZS5saW5lKCkpOworICAgIFJlZjxUZXh0VHJh
Y2tDdWVCb3g+IGRpc3BsYXlCb3ggPSAqY3VlLmdldERpc3BsYXlUcmVlKG1fdmlkZW9EaXNwbGF5
U2l6ZS5zaXplKCksIG1fZm9udFNpemUpOworCisgICAgaWYgKGF1dG8gcmVnaW9uID0gY3VlLnRy
YWNrKCktPnJlZ2lvbnMoKS0+Z2V0UmVnaW9uQnlJZChjdWUucmVnaW9uSWQoKSkpIHsKKyAgICAg
ICAgLy8gTGV0IHJlZ2lvbiBiZSB0aGUgV2ViVlRUIHJlZ2lvbiB3aG9zZSByZWdpb24gaWRlbnRp
ZmllcgorICAgICAgICAvLyBtYXRjaGVzIHRoZSB0ZXh0IHRyYWNrIGN1ZSByZWdpb24gaWRlbnRp
ZmllciBvZiBjdWUuCisgICAgICAgIFJlZjxIVE1MRGl2RWxlbWVudD4gcmVnaW9uTm9kZSA9IHJl
Z2lvbi0+Z2V0RGlzcGxheVRyZWUoKTsKKworICAgICAgICBpZiAoIWNvbnRhaW5zKHJlZ2lvbk5v
ZGUucHRyKCkpKQorICAgICAgICAgICAgYXBwZW5kQ2hpbGQocmVnaW9uLT5nZXREaXNwbGF5VHJl
ZSgpKTsKKworICAgICAgICByZWdpb24tPmFwcGVuZFRleHRUcmFja0N1ZUJveChXVEZNb3ZlKGRp
c3BsYXlCb3gpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiBjdWUgaGFzIGFuIGVtcHR5
IHRleHQgdHJhY2sgY3VlIHJlZ2lvbiBpZGVudGlmaWVyIG9yIHRoZXJlIGlzIG5vCisgICAgICAg
IC8vIFdlYlZUVCByZWdpb24gd2hvc2UgcmVnaW9uIGlkZW50aWZpZXIgaXMgaWRlbnRpY2FsIHRv
IGN1ZSdzIHRleHQKKyAgICAgICAgLy8gdHJhY2sgY3VlIHJlZ2lvbiBpZGVudGlmaWVyLCBydW4g
dGhlIGZvbGxvd2luZyBzdWJzdGVwczoKKyAgICAgICAgaWYgKGRpc3BsYXlCb3gtPmhhc0NoaWxk
Tm9kZXMoKSAmJiAhY29udGFpbnMoZGlzcGxheUJveC5wdHIoKSkpIHsKKyAgICAgICAgICAgIC8v
IE5vdGU6IHRoZSBkaXNwbGF5IHRyZWUgb2YgYSBjdWUgaXMgcmVtb3ZlZCB3aGVuIHRoZSBhY3Rp
dmUgZmxhZyBvZiB0aGUgY3VlIGlzIHVuc2V0LgorICAgICAgICAgICAgYXBwZW5kQ2hpbGQoZGlz
cGxheUJveCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlQWN0aXZlQ3Vlc0ZvbnRTaXplKCkKK3sKKyAgICBp
ZiAoIWRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbWVk
aWFFbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBzbWFsbGVzdERpbWVuc2lv
biA9IHN0ZDo6bWluKG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkuaGVpZ2h0KCksIG1fdmlkZW9E
aXNwbGF5U2l6ZS5zaXplKCkud2lkdGgoKSk7CisgICAgZmxvYXQgZm9udFNjYWxlID0gZG9jdW1l
bnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCkuY2FwdGlvbkZvbnRTaXpl
U2NhbGVBbmRJbXBvcnRhbmNlKG1fZm9udFNpemVJc0ltcG9ydGFudCk7CisgICAgbV9mb250U2l6
ZSA9IGxyb3VuZGYoc21hbGxlc3REaW1lbnNpb24gKiBmb250U2NhbGUpOworCisgICAgZm9yIChh
dXRvJiBhY3RpdmVDdWUgOiBtX21lZGlhRWxlbWVudC0+Y3VycmVudGx5QWN0aXZlQ3VlcygpKSB7
CisgICAgICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9IGFjdGl2ZUN1ZS5kYXRhKCk7Cisg
ICAgICAgIGlmIChjdWUtPmlzUmVuZGVyYWJsZSgpKQorICAgICAgICAgICAgY3VlLT5zZXRGb250
U2l6ZShtX2ZvbnRTaXplLCBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplSXNJ
bXBvcnRhbnQpOworICAgIH0KK30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50Ojp1cGRhdGVUZXh0U3Ryb2tlU3R5bGUoKQoreworICAgIGlmICghZG9jdW1lbnQo
KS5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTdHJpbmcgbGFuZ3VhZ2U7CisKKyAgICAvLyBGSVhN
RTogU2luY2UgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBtb3JlIHRoYW4gb25lIHRleHQgdHJhY2sg
ZW5hYmxlZCwgdGhlIGZvbGxvd2luZyBjb2RlIG1heSBub3QgZmluZCB0aGUgY29ycmVjdCBsYW5n
dWFnZS4KKyAgICAvLyBUaGUgZGVmYXVsdCBVSSBvbmx5IGFsbG93cyBhIHVzZXIgdG8gZW5hYmxl
IG9uZSB0cmFjayBhdCBhIHRpbWUsIHNvIGl0IHNob3VsZCBiZSBPSyBmb3Igbm93LCBidXQgd2Ug
c2hvdWxkIGNvbnNpZGVyIGRvaW5nCisgICAgLy8gdGhpcyBkaWZmZXJlbnRseSwgc2VlIDxodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5ODc1Pi4KKyAgICBpZiAoYXV0
byogdHJhY2tzID0gbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKSkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdHJhY2tzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAg
ICBhdXRvIHRyYWNrID0gdHJhY2tzLT5pdGVtKGkpOworICAgICAgICAgICAgaWYgKHRyYWNrICYm
IHRyYWNrLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nKSB7CisgICAgICAgICAg
ICAgICAgbGFuZ3VhZ2UgPSB0cmFjay0+dmFsaWRCQ1A0N0xhbmd1YWdlKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmbG9h
dCBzdHJva2VXaWR0aDsKKyAgICBib29sIGltcG9ydGFudDsKKworICAgIC8vIEZJWE1FOiBmaW5k
IGEgd2F5IHRvIHNldCB0aGlzIHByb3BlcnR5IGluIHRoZSBzdHlsZXNoZWV0IGxpa2UgdGhlIG90
aGVyIHVzZXIgc3R5bGUgcHJlZmVyZW5jZXMsIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2OTg3ND4uCisgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpLT5ncm91
cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLmNhcHRpb25TdHJva2VXaWR0aEZvckZvbnQobV9mb250
U2l6ZSwgbGFuZ3VhZ2UsIHN0cm9rZVdpZHRoLCBpbXBvcnRhbnQpKQorICAgICAgICBzZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5U3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRoLCBDU1NV
bml0VHlwZTo6Q1NTX1BYLCBpbXBvcnRhbnQpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVk
ZWQoKQoreworICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8gcmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IG1fbWVkaWFFbGVtZW50LT5y
ZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCk7CisgICAgaWYgKCFoYXNDaGlsZE5vZGVz
KCkgfHwgIXJlcXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24pIHsKKyAgICAgICAgaWYgKG1f
dGV4dFRyYWNrUmVwcmVzZW50YXRpb24pIHsKKyAgICAgICAgICAgIGlmICghcmVxdWlyZXNUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbikKKyAgICAgICAgICAgICAgICBjbGVhclRleHRUcmFja1JlcHJl
c2VudGF0aW9uKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV90ZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbi0+c2V0SGlkZGVuKHRydWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24pIHsKKyAg
ICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKKworICAgICAgICBtX3RleHRUcmFja1Jl
cHJlc2VudGF0aW9uID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb246OmNyZWF0ZSgqdGhpcyk7Cisg
ICAgICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgICAgIG1fdGV4dFRyYWNrUmVw
cmVzZW50YXRpb24tPnNldENvbnRlbnRTY2FsZShkb2N1bWVudCgpLnBhZ2UoKS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7CisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbihtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLmdldCgpKTsKKyAgICB9CisKKyAgICBt
X3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT5zZXRIaWRkZW4oZmFsc2UpOworfQorCit2b2lkIE1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNsZWFyVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24oKQoreworICAgIGlmICghbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKKworICAgIG1fdGV4
dFRyYWNrUmVwcmVzZW50YXRpb24gPSBudWxscHRyOworICAgIGlmIChtX21lZGlhRWxlbWVudCkK
KyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKG51bGxw
dHIpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVw
ZGF0ZVRleHRUcmFja1N0eWxlKCkKK3sKKyAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlv
bikgeworICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24s
IENTU1ZhbHVlQWJzb2x1dGUpOworICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5V2lkdGgsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkud2lkdGgoKSwgQ1NTVW5pdFR5
cGU6OkNTU19QWCk7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlI
ZWlnaHQsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkuaGVpZ2h0KCksIENTU1VuaXRUeXBlOjpD
U1NfUFgpOworICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwg
MCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlUb3AsIDAsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0
aW9uKTsKKyAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgpOwor
ICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQpOworICAgIHJl
bW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0KTsKKyAgICByZW1vdmVJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjplbnRlcmVkRnVsbHNjcmVlbigpCit7CisgICAgdXBk
YXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOworICAgIHVwZGF0ZVNpemVzKEZv
cmNlVXBkYXRlOjpZZXMpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OmV4aXRlZEZ1bGxzY3JlZW4oKQoreworICAgIGNsZWFyVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24oKTsKKyAgICB1cGRhdGVTaXplcyhGb3JjZVVwZGF0ZTo6WWVzKTsKK30KKworYm9v
bCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVWaWRlb0Rpc3Bs
YXlTaXplKCkKK3sKKyAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBJbnRSZWN0IHZpZGVvQm94OworICAgIGlmIChtX3RleHRUcmFja1JlcHJlc2VudGF0
aW9uKSB7CisgICAgICAgIHZpZGVvQm94ID0gbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi0+Ym91
bmRzKCk7CisgICAgICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gZG9jdW1lbnQoKS5wYWdl
KCktPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIHZpZGVvQm94LnNldFdpZHRoKHZpZGVv
Qm94LndpZHRoKCkgKiBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgICAgIHZpZGVvQm94LnNldEhl
aWdodCh2aWRlb0JveC5oZWlnaHQoKSAqIGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpZiAoIWlzPFJlbmRlclZpZGVvPihtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIo
KSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHZpZGVvQm94ID0gZG93bmNh
c3Q8UmVuZGVyVmlkZW8+KCptX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSkudmlkZW9Cb3goKTsK
KyAgICB9CisKKyAgICBpZiAobV92aWRlb0Rpc3BsYXlTaXplID09IHZpZGVvQm94KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3ZpZGVvRGlzcGxheVNpemUgPSB2aWRlb0JveDsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50Ojp1cGRhdGVTaXplcyhGb3JjZVVwZGF0ZSBmb3JjZSkKK3sKKyAgICBpZiAoIXVwZGF0
ZVZpZGVvRGlzcGxheVNpemUoKSAmJiBmb3JjZSAhPSBGb3JjZVVwZGF0ZTo6WWVzKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpIHx8ICFtX21lZGlhRWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9tZWRpYUVsZW1lbnQtPnN5bmNUZXh0VHJhY2tC
b3VuZHMoKTsKKworICAgIHVwZGF0ZUFjdGl2ZUN1ZXNGb250U2l6ZSgpOworICAgIHVwZGF0ZVRl
eHRTdHJva2VTdHlsZSgpOworICAgIGZvciAoYXV0byYgYWN0aXZlQ3VlIDogbV9tZWRpYUVsZW1l
bnQtPmN1cnJlbnRseUFjdGl2ZUN1ZXMoKSkKKyAgICAgICAgYWN0aXZlQ3VlLmRhdGEoKS0+cmVj
YWxjdWxhdGVTdHlsZXMoKTsKKworICAgIG1fdGFza1F1ZXVlLmVucXVldWVUYXNrKFt0aGlzXSAo
KSB7CisgICAgICAgIHVwZGF0ZURpc3BsYXkoKTsKKyAgICB9KTsKK30KKworUmVmUHRyPEltYWdl
PiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbkltYWdlKCkKK3sKKyAgICBpZiAoIWhhc0NoaWxkTm9kZXMoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZG9jdW1lbnQo
KS5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKKworICAgIGF1dG8qIHJlbmRlcmVyID0gdGhp
cy0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGlmICghcmVuZGVyZXItPmhhc0xheWVyKCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdD4oKnJlbmRlcmVyKS5sYXllcigpOworCisgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IgPSAxOworICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAg
IGRldmljZVNjYWxlRmFjdG9yID0gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKworICAgIElu
dFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+c2l6ZSgpKTsK
KworICAgIC8vIEZJWE1FICgxNDk0MjIpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29u
ZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNpemUoKSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBpZiAoIWJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHBhaW50RmxhZ3MgPSBS
ZW5kZXJMYXllcjo6cGFpbnRMYXllclBhaW50aW5nQ29tcG9zaXRpbmdBbGxQaGFzZXNGbGFncygp
OworICAgIHBhaW50RmxhZ3MuYWRkKFJlbmRlckxheWVyOjpQYWludExheWVyVGVtcG9yYXJ5Q2xp
cFJlY3RzKTsKKyAgICBsYXllci0+cGFpbnQoYnVmZmVyLT5jb250ZXh0KCksIHBhaW50aW5nUmVj
dCwgTGF5b3V0U2l6ZSgpLCB7IFBhaW50QmVoYXZpb3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVy
cywgUGFpbnRCZWhhdmlvcjo6U25hcHNob3R0aW5nIH0sIG51bGxwdHIsIHBhaW50RmxhZ3MpOwor
CisgICAgcmV0dXJuIEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKFdURk1vdmUoYnVmZmVyKSk7
Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dGV4dFRy
YWNrUmVwcmVzZW50YXRpb25Cb3VuZHNDaGFuZ2VkKGNvbnN0IEludFJlY3QmKQoreworICAgIHVw
ZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQoKTsKKyAgICB1cGRhdGVTaXplcygp
OworfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmhpZGUo
KQoreworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5LCBDU1NW
YWx1ZU5vbmUpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQ6OnNob3coKQoreworICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlE
aXNwbGF5KTsKK30KKworYm9vbCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50
Ojppc1Nob3dpbmcoKSBjb25zdAoreworICAgIGNvbnN0IFN0eWxlUHJvcGVydGllcyogcHJvcGVy
dHlTZXQgPSBpbmxpbmVTdHlsZSgpOworCisgICAgLy8gRm9sbG93aW5nIHRoZSBjb2RlIGZyb20g
c2hvdygpIGFuZCBoaWRlKCkgYWJvdmUsIHdlIG9ubHkgaGF2ZQorICAgIC8vIHRvIGNoZWNrIGZv
ciB0aGUgcHJlc2Vuc2Ugb2YgaW5saW5lIGRpc3BsYXkuCisgICAgcmV0dXJuICghcHJvcGVydHlT
ZXQgfHwgIXByb3BlcnR5U2V0LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlzcGxh
eSkpOworfQorCisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKK2NvbnN0IExvZ2dlciYgTWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nZ2VyKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fbG9nZ2VyKQorICAgICAgICBtX2xvZ2dlciA9ICZkb2N1bWVudCgpLmxvZ2dlcigp
OworCisgICAgcmV0dXJuICptX2xvZ2dlcjsKK30KKworY29uc3Qgdm9pZCogTWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nSWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAg
aWYgKCFtX2xvZ0lkZW50aWZpZXIgJiYgbV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbG9nSWRl
bnRpZmllciA9IG1fbWVkaWFFbGVtZW50LT5sb2dJZGVudGlmaWVyKCk7CisKKyAgICByZXR1cm4g
bV9sb2dJZGVudGlmaWVyOworfQorCitXVEZMb2dDaGFubmVsJiBNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50Ojpsb2dDaGFubmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTG9n
TWVkaWE7Cit9CisjZW5kaWYgLy8gIVJFTEVBU0VfTE9HX0RJU0FCTEVECisKKyNlbmRpZiAvLyBF
TkFCTEUoVklERU9fVFJBQ0spCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sVGV4dFRyYWNrQ29u
dGFpbmVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzZTllZTU3NDNmYjkyZjhk
ODU5ZjMxN2MyMGY3OGMzZTZkZTI5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmgKQEAg
LTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFZJREVPKQorCisjaW5jbHVkZSAi
R2VuZXJpY1Rhc2tRdWV1ZS5oIgorI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCisjaW5jbHVk
ZSAiTWVkaWFDb250cm9sbGVySW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvTG9nZ2VySGVscGVyLmg+CisjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQorCitjbGFzcyBIVE1MTWVkaWFFbGVtZW50OworY2xhc3MgVlRUQ3VlOworCitjbGFzcyBN
ZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50IGZpbmFsCisgICAgOiBwdWJsaWMg
SFRNTERpdkVsZW1lbnQKKyAgICAsIHB1YmxpYyBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNsaWVu
dAorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICwgcHJpdmF0ZSBMb2dnZXJIZWxwZXIK
KyNlbmRpZgoreworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudCk7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxNZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmLCBIVE1MTWVkaWFF
bGVtZW50Jik7CisKKyAgICBlbnVtIGNsYXNzIEZvcmNlVXBkYXRlIHsgWWVzLCBObyB9OworICAg
IHZvaWQgdXBkYXRlU2l6ZXMoRm9yY2VVcGRhdGUgZm9yY2UgPSBGb3JjZVVwZGF0ZTo6Tm8pOwor
ICAgIHZvaWQgdXBkYXRlRGlzcGxheSgpOworCisgICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQoKTsKKworICAgIHZvaWQgZW50ZXJlZEZ1bGxzY3JlZW4o
KTsKKyAgICB2b2lkIGV4aXRlZEZ1bGxzY3JlZW4oKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNp
dCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KERvY3VtZW50JiwgSFRNTE1l
ZGlhRWxlbWVudCYpOworCisgICAgLy8gRWxlbWVudAorICAgIFJlbmRlclB0cjxSZW5kZXJFbGVt
ZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVuZGVyVHJl
ZVBvc2l0aW9uJikgb3ZlcnJpZGU7CisKKyAgICAvLyBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNs
aWVudAorICAgIFJlZlB0cjxJbWFnZT4gY3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFn
ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgdGV4dFRyYWNrUmVwcmVzZW50YXRpb25Cb3VuZHNDaGFu
Z2VkKGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKworICAgIHZvaWQgdXBkYXRlVGV4dFRyYWNr
UmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOworICAgIHZvaWQgY2xlYXJUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbigpOworCisgICAgYm9vbCB1cGRhdGVWaWRlb0Rpc3BsYXlTaXplKCk7CisgICAgdm9p
ZCB1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKTsKKyAgICB2b2lkIHVwZGF0ZVRleHRTdHJva2VT
dHlsZSgpOworICAgIHZvaWQgcHJvY2Vzc0FjdGl2ZVZUVEN1ZShWVFRDdWUmKTsKKyAgICB2b2lk
IHVwZGF0ZVRleHRUcmFja1N0eWxlKCk7CisKKyAgICB2b2lkIGhpZGUoKTsKKyAgICB2b2lkIHNo
b3coKTsKKyAgICBib29sIGlzU2hvd2luZygpIGNvbnN0OworCisjaWYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECisgICAgY29uc3QgTG9nZ2VyJiBsb2dnZXIoKSBjb25zdCBmaW5hbDsKKyAgICBjb25z
dCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgZmluYWw7CisgICAgV1RGTG9nQ2hhbm5lbCYg
bG9nQ2hhbm5lbCgpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50IjsgfQorICAgIG11dGFibGUgUmVmUHRyPExvZ2dlcj4gbV9sb2dnZXI7CisgICAgbXV0YWJs
ZSBjb25zdCB2b2lkKiBtX2xvZ0lkZW50aWZpZXIgeyBudWxscHRyIH07CisjZW5kaWYKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxUZXh0VHJhY2tSZXByZXNlbnRhdGlvbj4gbV90ZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbjsKKworICAgIEdlbmVyaWNUYXNrUXVldWU8VGltZXI+IG1fdGFza1F1ZXVlOwor
ICAgIFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRpYUVsZW1lbnQ7CisgICAgSW50UmVj
dCBtX3ZpZGVvRGlzcGxheVNpemU7CisgICAgaW50IG1fZm9udFNpemUgeyAwIH07CisgICAgYm9v
bCBtX2ZvbnRTaXplSXNJbXBvcnRhbnQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9uZWVkc0dlbmVy
YXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24geyBmYWxzZSB9OworfTsKKworI2VuZGlmCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDM5OTI3Yjk3YmZlNmQyOWU5ZTRmODQ3NDc0NjdkMmI0MjU0YzM2M2UuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0Mzcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKQotI2luY2x1
ZGUgIk1lZGlhQ29udHJvbHMuaCIKLQotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRl
ICJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckVsZW1l
bnQuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0j
aW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9scyk7Ci0KLU1lZGlhQ29u
dHJvbHM6Ok1lZGlhQ29udHJvbHMoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogSFRNTERpdkVs
ZW1lbnQoSFRNTE5hbWVzOjpkaXZUYWcsIGRvY3VtZW50KQotICAgICwgbV9tZWRpYUNvbnRyb2xs
ZXIoMCkKLSAgICAsIG1fcGFuZWwoMCkKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgLCBt
X3RleHREaXNwbGF5Q29udGFpbmVyKDApCi0jZW5kaWYKLSAgICAsIG1fcGxheUJ1dHRvbigwKQot
ICAgICwgbV9jdXJyZW50VGltZURpc3BsYXkoMCkKLSAgICAsIG1fdGltZWxpbmUoMCkKLSAgICAs
IG1fcGFuZWxNdXRlQnV0dG9uKDApCi0gICAgLCBtX3ZvbHVtZVNsaWRlcigwKQotICAgICwgbV90
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbigwKQotICAgICwgbV9mdWxsU2NyZWVuQnV0dG9uKDAp
Ci0gICAgLCBtX2hpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcigqdGhpcywgJk1lZGlhQ29udHJv
bHM6OmhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lckZpcmVkKQotICAgICwgbV9pc0Z1bGxzY3Jl
ZW4oZmFsc2UpCi0gICAgLCBtX2lzTW91c2VPdmVyQ29udHJvbHMoZmFsc2UpCi17Ci0gICAgc2V0
UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnNldE1lZGlh
Q29udHJvbGxlcihNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqIGNvbnRyb2xsZXIpCi17Ci0gICAg
aWYgKG1fbWVkaWFDb250cm9sbGVyID09IGNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX21lZGlhQ29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0KLSAgICBpZiAobV9wYW5lbCkKLSAg
ICAgICAgbV9wYW5lbC0+c2V0TWVkaWFDb250cm9sbGVyKGNvbnRyb2xsZXIpOwotI2lmIEVOQUJM
RShWSURFT19UUkFDSykKLSAgICBpZiAobV90ZXh0RGlzcGxheUNvbnRhaW5lcikKLSAgICAgICAg
bV90ZXh0RGlzcGxheUNvbnRhaW5lci0+c2V0TWVkaWFDb250cm9sbGVyKGNvbnRyb2xsZXIpOwot
I2VuZGlmCi0gICAgaWYgKG1fcGxheUJ1dHRvbikKLSAgICAgICAgbV9wbGF5QnV0dG9uLT5zZXRN
ZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0gICAgaWYgKG1fY3VycmVudFRpbWVEaXNwbGF5
KQotICAgICAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+c2V0TWVkaWFDb250cm9sbGVyKGNvbnRy
b2xsZXIpOwotICAgIGlmIChtX3RpbWVsaW5lKQotICAgICAgICBtX3RpbWVsaW5lLT5zZXRNZWRp
YUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0gICAgaWYgKG1fcGFuZWxNdXRlQnV0dG9uKQotICAg
ICAgICBtX3BhbmVsTXV0ZUJ1dHRvbi0+c2V0TWVkaWFDb250cm9sbGVyKGNvbnRyb2xsZXIpOwot
ICAgIGlmIChtX3ZvbHVtZVNsaWRlcikKLSAgICAgICAgbV92b2x1bWVTbGlkZXItPnNldE1lZGlh
Q29udHJvbGxlcihjb250cm9sbGVyKTsKLSAgICBpZiAobV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1
dHRvbikKLSAgICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+c2V0TWVkaWFDb250
cm9sbGVyKGNvbnRyb2xsZXIpOwotICAgIGlmIChtX2Z1bGxTY3JlZW5CdXR0b24pCi0gICAgICAg
IG1fZnVsbFNjcmVlbkJ1dHRvbi0+c2V0TWVkaWFDb250cm9sbGVyKGNvbnRyb2xsZXIpOwotfQot
Ci12b2lkIE1lZGlhQ29udHJvbHM6OnJlc2V0KCkKLXsKLSAgICBtX3BsYXlCdXR0b24tPnVwZGF0
ZURpc3BsYXlUeXBlKCk7Ci0KLSAgICB1cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKTsKLQotICAg
IGRvdWJsZSBkdXJhdGlvbiA9IG1fbWVkaWFDb250cm9sbGVyLT5kdXJhdGlvbigpOwotICAgIGlm
IChzdGQ6OmlzZmluaXRlKGR1cmF0aW9uKSB8fCBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuaGFz
T3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKE1lZGlhU2xpZGVyUGFydCkpIHsKLSAgICAgICAg
bV90aW1lbGluZS0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwotICAgICAgICBtX3RpbWVsaW5lLT5z
ZXRQb3NpdGlvbihtX21lZGlhQ29udHJvbGxlci0+Y3VycmVudFRpbWUoKSk7Ci0gICAgfQotCi0g
ICAgaWYgKG1fbWVkaWFDb250cm9sbGVyLT5oYXNBdWRpbygpIHx8IFJlbmRlclRoZW1lOjpzaW5n
bGV0b24oKS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoTWVkaWFNdXRlQnV0dG9uUGFy
dCkpCi0gICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5zaG93KCk7Ci0gICAgZWxzZQotICAgICAg
ICBtX3BhbmVsTXV0ZUJ1dHRvbi0+aGlkZSgpOwotCi0gICAgaWYgKG1fdm9sdW1lU2xpZGVyKSB7
Ci0gICAgICAgIGlmICghbV9tZWRpYUNvbnRyb2xsZXItPmhhc0F1ZGlvKCkpCi0gICAgICAgICAg
ICBtX3ZvbHVtZVNsaWRlci0+aGlkZSgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1f
dm9sdW1lU2xpZGVyLT5zaG93KCk7Ci0gICAgICAgICAgICBzZXRTbGlkZXJWb2x1bWUoKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJlZnJlc2hDbG9zZWRDYXB0aW9uc0J1dHRvblZpc2liaWxp
dHkoKTsKLQotICAgIGlmIChtX2Z1bGxTY3JlZW5CdXR0b24pIHsKLSAgICAgICAgaWYgKG1fbWVk
aWFDb250cm9sbGVyLT5zdXBwb3J0c0Z1bGxzY3JlZW4oSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpICYmIG1fbWVkaWFDb250cm9sbGVyLT5oYXNWaWRl
bygpKQotICAgICAgICAgICAgbV9mdWxsU2NyZWVuQnV0dG9uLT5zaG93KCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1fZnVsbFNjcmVlbkJ1dHRvbi0+aGlkZSgpOwotICAgIH0KLQotICAg
IG1ha2VPcGFxdWUoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpyZXBvcnRlZEVycm9yKCkK
LXsKLSAgICBhdXRvJiB0aGVtZSA9IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKTsKLSAgICBpZiAo
IXRoZW1lLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYU11dGVCdXR0b25QYXJ0
KSkgewotICAgICAgICBtX3BhbmVsTXV0ZUJ1dHRvbi0+aGlkZSgpOwotICAgICAgICBtX3ZvbHVt
ZVNsaWRlci0+aGlkZSgpOwotICAgIH0KLQotICAgIGlmIChtX3RvZ2dsZUNsb3NlZENhcHRpb25z
QnV0dG9uICYmICF0aGVtZS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoTWVkaWFUb2dn
bGVDbG9zZWRDYXB0aW9uc0J1dHRvblBhcnQpKQotICAgICAgICBtX3RvZ2dsZUNsb3NlZENhcHRp
b25zQnV0dG9uLT5oaWRlKCk7Ci0KLSAgICBpZiAobV9mdWxsU2NyZWVuQnV0dG9uICYmICF0aGVt
ZS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0
b25QYXJ0KSkKLSAgICAgICAgbV9mdWxsU2NyZWVuQnV0dG9uLT5oaWRlKCk7Ci19Ci0KLXZvaWQg
TWVkaWFDb250cm9sczo6bG9hZGVkTWV0YWRhdGEoKQotewotICAgIHJlc2V0KCk7Ci19Ci0KLXZv
aWQgTWVkaWFDb250cm9sczo6c2hvdygpCi17Ci0gICAgbWFrZU9wYXF1ZSgpOwotICAgIG1fcGFu
ZWwtPnNldElzRGlzcGxheWVkKHRydWUpOwotICAgIG1fcGFuZWwtPnNob3coKTsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xzOjpoaWRlKCkKLXsKLSAgICBtX3BhbmVsLT5zZXRJc0Rpc3BsYXllZChm
YWxzZSk7Ci0gICAgbV9wYW5lbC0+aGlkZSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6Om1h
a2VPcGFxdWUoKQotewotICAgIG1fcGFuZWwtPm1ha2VPcGFxdWUoKTsKLX0KLQotdm9pZCBNZWRp
YUNvbnRyb2xzOjptYWtlVHJhbnNwYXJlbnQoKQotewotICAgIG1fcGFuZWwtPm1ha2VUcmFuc3Bh
cmVudCgpOwotfQotCi1ib29sIE1lZGlhQ29udHJvbHM6OnNob3VsZEhpZGVDb250cm9scygpCi17
Ci0gICAgcmV0dXJuICFtX3BhbmVsLT5ob3ZlcmVkKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
czo6YnVmZmVyaW5nUHJvZ3Jlc3NlZCgpCi17Ci0gICAgLy8gV2Ugb25seSBuZWVkIHRvIHVwZGF0
ZSBidWZmZXJpbmcgcHJvZ3Jlc3Mgd2hlbiBwYXVzZWQsIGR1cmluZyBub3JtYWwKLSAgICAvLyBw
bGF5YmFjayBwbGF5YmFja1Byb2dyZXNzZWQoKSB3aWxsIHRha2UgY2FyZSBvZiBpdC4KLSAgICBp
ZiAobV9tZWRpYUNvbnRyb2xsZXItPnBhdXNlZCgpKQotICAgICAgICBtX3RpbWVsaW5lLT5zZXRQ
b3NpdGlvbihtX21lZGlhQ29udHJvbGxlci0+Y3VycmVudFRpbWUoKSk7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sczo6cGxheWJhY2tTdGFydGVkKCkKLXsKLSAgICBtX3BsYXlCdXR0b24tPnVwZGF0
ZURpc3BsYXlUeXBlKCk7Ci0gICAgbV90aW1lbGluZS0+c2V0UG9zaXRpb24obV9tZWRpYUNvbnRy
b2xsZXItPmN1cnJlbnRUaW1lKCkpOwotICAgIHVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwot
Ci0gICAgaWYgKG1faXNGdWxsc2NyZWVuKQotICAgICAgICBzdGFydEhpZGVGdWxsc2NyZWVuQ29u
dHJvbHNUaW1lcigpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnBsYXliYWNrUHJvZ3Jlc3Nl
ZCgpCi17Ci0gICAgbV90aW1lbGluZS0+c2V0UG9zaXRpb24obV9tZWRpYUNvbnRyb2xsZXItPmN1
cnJlbnRUaW1lKCkpOwotICAgIHVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwotCi0gICAgaWYg
KCFtX2lzTW91c2VPdmVyQ29udHJvbHMgJiYgbV9tZWRpYUNvbnRyb2xsZXItPmhhc1ZpZGVvKCkp
Ci0gICAgICAgIG1ha2VUcmFuc3BhcmVudCgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnBs
YXliYWNrU3RvcHBlZCgpCi17Ci0gICAgbV9wbGF5QnV0dG9uLT51cGRhdGVEaXNwbGF5VHlwZSgp
OwotICAgIG1fdGltZWxpbmUtPnNldFBvc2l0aW9uKG1fbWVkaWFDb250cm9sbGVyLT5jdXJyZW50
VGltZSgpKTsKLSAgICB1cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKTsKLSAgICBtYWtlT3BhcXVl
KCk7Ci0KLSAgICBzdG9wSGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCk7Ci19Ci0KLXZvaWQg
TWVkaWFDb250cm9sczo6dXBkYXRlQ3VycmVudFRpbWVEaXNwbGF5KCkKLXsKLSAgICBkb3VibGUg
bm93ID0gbV9tZWRpYUNvbnRyb2xsZXItPmN1cnJlbnRUaW1lKCk7Ci0gICAgbV9jdXJyZW50VGlt
ZURpc3BsYXktPnNldElubmVyVGV4dChSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuZm9ybWF0TWVk
aWFDb250cm9sc1RpbWUobm93KSk7Ci0gICAgbV9jdXJyZW50VGltZURpc3BsYXktPnNldEN1cnJl
bnRWYWx1ZShub3cpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnNob3dWb2x1bWVTbGlkZXIo
KQotewotICAgIGlmICghbV9tZWRpYUNvbnRyb2xsZXItPmhhc0F1ZGlvKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fdm9sdW1lU2xpZGVyLT5zaG93KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250
cm9sczo6Y2hhbmdlZE11dGUoKQotewotICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5jaGFuZ2VkTXV0
ZSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmNoYW5nZWRWb2x1bWUoKQotewotICAgIGlm
IChtX3ZvbHVtZVNsaWRlcikKLSAgICAgICAgc2V0U2xpZGVyVm9sdW1lKCk7Ci0gICAgaWYgKG1f
cGFuZWxNdXRlQnV0dG9uICYmIG1fcGFuZWxNdXRlQnV0dG9uLT5yZW5kZXJlcigpKQotICAgICAg
ICBtX3BhbmVsTXV0ZUJ1dHRvbi0+cmVuZGVyZXIoKS0+cmVwYWludCgpOwotfQotCi12b2lkIE1l
ZGlhQ29udHJvbHM6OmNoYW5nZWRDbG9zZWRDYXB0aW9uc1Zpc2liaWxpdHkoKQotewotICAgIGlm
IChtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKQotICAgICAgICBtX3RvZ2dsZUNsb3NlZENh
cHRpb25zQnV0dG9uLT51cGRhdGVEaXNwbGF5VHlwZSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJv
bHM6OnJlZnJlc2hDbG9zZWRDYXB0aW9uc0J1dHRvblZpc2liaWxpdHkoKQotewotICAgIGlmICgh
bV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1fbWVkaWFDb250cm9sbGVyLT5oYXNDbG9zZWRDYXB0aW9ucygpKQotICAgICAgICBtX3RvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uLT5zaG93KCk7Ci0gICAgZWxzZQotICAgICAgICBtX3RvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uLT5oaWRlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6
Y2xvc2VkQ2FwdGlvblRyYWNrc0NoYW5nZWQoKQotewotICAgIHJlZnJlc2hDbG9zZWRDYXB0aW9u
c0J1dHRvblZpc2liaWxpdHkoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjplbnRlcmVkRnVs
bHNjcmVlbigpCi17Ci0gICAgbV9pc0Z1bGxzY3JlZW4gPSB0cnVlOwotICAgIG1fZnVsbFNjcmVl
bkJ1dHRvbi0+c2V0SXNGdWxsc2NyZWVuKHRydWUpOwotCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBk
b2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+Y2hyb21lKCkuc2V0Q3Vyc29ySGlkZGVu
VW50aWxNb3VzZU1vdmVzKHRydWUpOwotCi0gICAgc3RhcnRIaWRlRnVsbHNjcmVlbkNvbnRyb2xz
VGltZXIoKTsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgaWYgKG1fdGV4dERpc3BsYXlD
b250YWluZXIpCi0gICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPmVudGVyZWRGdWxsc2Ny
ZWVuKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpleGl0ZWRGdWxsc2NyZWVu
KCkKLXsKLSAgICBtX2lzRnVsbHNjcmVlbiA9IGZhbHNlOwotICAgIG1fZnVsbFNjcmVlbkJ1dHRv
bi0+c2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsKLSAgICBzdG9wSGlkZUZ1bGxzY3JlZW5Db250cm9s
c1RpbWVyKCk7Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIGlmIChtX3RleHREaXNwbGF5
Q29udGFpbmVyKQotICAgICAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5leGl0ZWRGdWxsc2Ny
ZWVuKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50JiBldmVudCkKLXsKLSAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihldmVudCk7Ci0KLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZW92ZXJFdmVudCkgewotICAgICAgICBpZiAoIWNvbnRhaW5zUmVsYXRlZFRhcmdldChldmVudCkp
IHsKLSAgICAgICAgICAgIG1faXNNb3VzZU92ZXJDb250cm9scyA9IHRydWU7Ci0gICAgICAgICAg
ICBpZiAoIW1fbWVkaWFDb250cm9sbGVyLT5jYW5QbGF5KCkpIHsKLSAgICAgICAgICAgICAgICBt
YWtlT3BhcXVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNob3VsZEhpZGVDb250cm9scygpKQot
ICAgICAgICAgICAgICAgICAgICBzdGFydEhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcigpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KSB7Ci0gICAgICAg
IGlmICghY29udGFpbnNSZWxhdGVkVGFyZ2V0KGV2ZW50KSkgewotICAgICAgICAgICAgbV9pc01v
dXNlT3ZlckNvbnRyb2xzID0gZmFsc2U7Ci0gICAgICAgICAgICBzdG9wSGlkZUZ1bGxzY3JlZW5D
b250cm9sc1RpbWVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KSB7Ci0gICAg
ICAgIGlmIChtX2lzRnVsbHNjcmVlbikgewotICAgICAgICAgICAgLy8gV2hlbiB3ZSBnZXQgYSBt
b3VzZSBtb3ZlIGluIGZ1bGxzY3JlZW4gbW9kZSwgc2hvdyB0aGUgbWVkaWEgY29udHJvbHMsIGFu
ZCBzdGFydCBhIHRpbWVyCi0gICAgICAgICAgICAvLyB0aGF0IHdpbGwgaGlkZSB0aGUgbWVkaWEg
Y29udHJvbHMgYWZ0ZXIgYSAzIHNlY29uZHMgd2l0aG91dCBhIG1vdXNlIG1vdmUuCi0gICAgICAg
ICAgICBtYWtlT3BhcXVlKCk7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkSGlkZUNvbnRyb2xzKCkp
Ci0gICAgICAgICAgICAgICAgc3RhcnRIaWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXIoKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6
OmhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lckZpcmVkKCkKLXsKLSAgICBpZiAobV9tZWRpYUNv
bnRyb2xsZXItPnBhdXNlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1faXNGdWxs
c2NyZWVuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNob3VsZEhpZGVDb250cm9scygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCkucGFn
ZSgpKQotICAgICAgICBwYWdlLT5jaHJvbWUoKS5zZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92
ZXModHJ1ZSk7Ci0KLSAgICBtYWtlVHJhbnNwYXJlbnQoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRy
b2xzOjpzdGFydEhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcigpCi17Ci0gICAgaWYgKCFtX2lz
RnVsbHNjcmVlbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGFnZSogcGFnZSA9IGRvY3VtZW50
KCkucGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9oaWRl
RnVsbHNjcmVlbkNvbnRyb2xzVGltZXIuc3RhcnRPbmVTaG90KHBhZ2UtPnNldHRpbmdzKCkudGlt
ZVdpdGhvdXRNb3VzZU1vdmVtZW50QmVmb3JlSGlkaW5nQ29udHJvbHMoKSk7Ci19Ci0KLXZvaWQg
TWVkaWFDb250cm9sczo6c3RvcEhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcigpCi17Ci0gICAg
bV9oaWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXIuc3RvcCgpOwotfQotCi1ib29sIE1lZGlhQ29u
dHJvbHM6OmNvbnRhaW5zUmVsYXRlZFRhcmdldChFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKCFp
czxNb3VzZUV2ZW50PihldmVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHJl
bGF0ZWRUYXJnZXQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkucmVsYXRlZFRhcmdldCgp
OwotICAgIHJldHVybiBpczxOb2RlPihyZWxhdGVkVGFyZ2V0KSAmJiBjb250YWlucygmZG93bmNh
c3Q8Tm9kZT4oKnJlbGF0ZWRUYXJnZXQpKTsKLX0KLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykK
LQotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCkKLXsKLSAgICBp
ZiAobV90ZXh0RGlzcGxheUNvbnRhaW5lcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0
ZXh0RGlzcGxheUNvbnRhaW5lciA9IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKLSAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyID0gdGV4
dERpc3BsYXlDb250YWluZXIucHRyKCk7Ci0KLSAgICBpZiAobV9tZWRpYUNvbnRyb2xsZXIpCi0g
ICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPnNldE1lZGlhQ29udHJvbGxlcihtX21lZGlh
Q29udHJvbGxlcik7Ci0KLSAgICAvLyBJbnNlcnQgaXQgYmVmb3JlIHRoZSBmaXJzdCBjb250cm9s
bGVyIGVsZW1lbnQgc28gaXQgYWx3YXlzIGRpc3BsYXlzIGJlaGluZCB0aGUgY29udHJvbHMuCi0g
ICAgaW5zZXJ0QmVmb3JlKHRleHREaXNwbGF5Q29udGFpbmVyLCBtX3BhbmVsKTsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xzOjpzaG93VGV4dFRyYWNrRGlzcGxheSgpCi17Ci0gICAgaWYgKCFtX3Rl
eHREaXNwbGF5Q29udGFpbmVyKQotICAgICAgICBjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0g
ICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+c2hvdygpOwotfQotCi12b2lkIE1lZGlhQ29udHJv
bHM6OmhpZGVUZXh0VHJhY2tEaXNwbGF5KCkKLXsKLSAgICBpZiAoIW1fdGV4dERpc3BsYXlDb250
YWluZXIpCi0gICAgICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKLSAgICBtX3RleHREaXNw
bGF5Q29udGFpbmVyLT5oaWRlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6dXBkYXRlVGV4
dFRyYWNrRGlzcGxheSgpCi17Ci0gICAgaWYgKCFtX3RleHREaXNwbGF5Q29udGFpbmVyKQotICAg
ICAgICBjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0KLSAgICBtX3RleHREaXNwbGF5Q29udGFp
bmVyLT51cGRhdGVEaXNwbGF5KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6dGV4dFRyYWNr
UHJlZmVyZW5jZXNDaGFuZ2VkKCkKLXsKLSAgICBjbG9zZWRDYXB0aW9uVHJhY2tzQ2hhbmdlZCgp
OwotICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQotICAgICAgICBtX3RleHREaXNwbGF5
Q29udGFpbmVyLT51cGRhdGVTaXplcyhNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50OjpGb3JjZVVwZGF0ZTo6WWVzKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpjbGVhclRl
eHREaXNwbGF5Q29udGFpbmVyKCkKLXsKLSAgICBpZiAobV90ZXh0RGlzcGxheUNvbnRhaW5lcikK
LSAgICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+cmVtb3ZlQ2hpbGRyZW4oKTsKLX0KLQot
dm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZO
ZWVkZWQoKQotewotICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQotICAgICAgICBtX3Rl
eHREaXNwbGF5Q29udGFpbmVyLT51cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZO
ZWVkZWQoKTsKLX0KLQotI2VuZGlmCi0KLXZvaWQgTWVkaWFDb250cm9sczo6c2V0U2xpZGVyVm9s
dW1lKCkKLXsKLSAgICBtX3ZvbHVtZVNsaWRlci0+c2V0Vm9sdW1lKG1fbWVkaWFDb250cm9sbGVy
LT5tdXRlZCgpID8gMC4wIDogbV9tZWRpYUNvbnRyb2xsZXItPnZvbHVtZSgpKTsKLX0KLQotfQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29u
dHJvbHMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJiY2I1NzRiMmYwYTIzOTI4ZWU4YzE3OTg2NTc5
OTVjZjdiZDk1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoVklERU8pCi0K
LSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgotI2luY2x1
ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERvY3VtZW50OwotY2xhc3MgRXZlbnQ7Ci1jbGFz
cyBNZWRpYVBsYXllcjsKLWNsYXNzIFJlbmRlckJveDsKLWNsYXNzIFJlbmRlck1lZGlhOwotCi0v
LyBBbiBhYnN0cmFjdCBjbGFzcyB3aXRoIHRoZSBtZWRpYSBjb250cm9sIGVsZW1lbnRzIHRoYXQg
YWxsIHBvcnRzIHN1cHBvcnQuCi1jbGFzcyBNZWRpYUNvbnRyb2xzIDogcHVibGljIEhUTUxEaXZF
bGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbHMpOwotcHVi
bGljOgotICAgIHZpcnR1YWwgfk1lZGlhQ29udHJvbHMoKSA9IGRlZmF1bHQ7Ci0KLSAgICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIHRvIGJlIGltcGxlbWVudGVkIGluIHlvdXIgcG9ydC1zcGVjaWZpYyBt
ZWRpYQotICAgIC8vIGNvbnRyb2xzIGltcGxlbWVudGF0aW9uIHNpbmNlIGl0IHdpbGwgcmV0dXJu
IGEgY2hpbGQgaW5zdGFuY2UuCi0gICAgc3RhdGljIFJlZlB0cjxNZWRpYUNvbnRyb2xzPiB0cnlD
cmVhdGUoRG9jdW1lbnQmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRNZWRpYUNvbnRyb2xsZXIo
TWVkaWFDb250cm9sbGVySW50ZXJmYWNlKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0ZWRFcnJvcigpOwotICAgIHZpcnR1YWwgdm9pZCBsb2Fk
ZWRNZXRhZGF0YSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHNob3coKTsKLSAgICB2aXJ0dWFsIHZv
aWQgaGlkZSgpOwotICAgIHZpcnR1YWwgdm9pZCBtYWtlT3BhcXVlKCk7Ci0gICAgdmlydHVhbCB2
b2lkIG1ha2VUcmFuc3BhcmVudCgpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIaWRlQ29udHJv
bHMoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBidWZmZXJpbmdQcm9ncmVzc2VkKCk7Ci0gICAgdmly
dHVhbCB2b2lkIHBsYXliYWNrU3RhcnRlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBwbGF5YmFja1By
b2dyZXNzZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGxheWJhY2tTdG9wcGVkKCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdHVzRGlzcGxheSgpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQ3VycmVudFRpbWVEaXNwbGF5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNob3dWb2x1bWVT
bGlkZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VkTXV0ZSgpOwotICAgIHZpcnR1YWwg
dm9pZCBjaGFuZ2VkVm9sdW1lKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlZENsb3NlZENh
cHRpb25zVmlzaWJpbGl0eSgpOwotICAgIHZpcnR1YWwgdm9pZCByZWZyZXNoQ2xvc2VkQ2FwdGlv
bnNCdXR0b25WaXNpYmlsaXR5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZUNsb3NlZENhcHRp
b25UcmFja0xpc3QoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VkQ2FwdGlvblRyYWNrc0No
YW5nZWQoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBlbnRlcmVkRnVsbHNjcmVlbigpOwotICAgIHZp
cnR1YWwgdm9pZCBleGl0ZWRGdWxsc2NyZWVuKCk7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZU1vdmVFdmVudHMoKSBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBoaWRlRnVsbHNjcmVlbkNv
bnRyb2xzVGltZXJGaXJlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBzdGFydEhpZGVGdWxsc2NyZWVu
Q29udHJvbHNUaW1lcigpOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wSGlkZUZ1bGxzY3JlZW5Db250
cm9sc1RpbWVyKCk7Ci0KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgdmlydHVhbCB2b2lk
IGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1RleHRUcmFj
a0Rpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaGlkZVRleHRUcmFja0Rpc3BsYXkoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9p
ZCB0ZXh0VHJhY2tQcmVmZXJlbmNlc0NoYW5nZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJU
ZXh0RGlzcGxheUNvbnRhaW5lcigpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQoKTsKLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAg
ZXhwbGljaXQgTWVkaWFDb250cm9scyhEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNS
ZWxhdGVkVGFyZ2V0KEV2ZW50Jik7Ci0KLSAgICB2b2lkIHNldFNsaWRlclZvbHVtZSgpOwotCi0g
ICAgTWVkaWFDb250cm9sbGVySW50ZXJmYWNlKiBtX21lZGlhQ29udHJvbGxlcjsKLQotICAgIC8v
IENvbnRhaW5lciBmb3IgdGhlIG1lZGlhIGNvbnRyb2wgZWxlbWVudHMuCi0gICAgTWVkaWFDb250
cm9sUGFuZWxFbGVtZW50KiBtX3BhbmVsOwotCi0gICAgLy8gQ29udGFpbmVyIGZvciB0aGUgdGV4
dCB0cmFjayBjdWVzLgotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50KiBtX3RleHREaXNwbGF5Q29udGFpbmVyOwotI2VuZGlm
Ci0KLSAgICAvLyBNZWRpYSBjb250cm9sIGVsZW1lbnRzLgotICAgIE1lZGlhQ29udHJvbFBsYXlC
dXR0b25FbGVtZW50KiBtX3BsYXlCdXR0b247Ci0gICAgTWVkaWFDb250cm9sQ3VycmVudFRpbWVE
aXNwbGF5RWxlbWVudCogbV9jdXJyZW50VGltZURpc3BsYXk7Ci0gICAgTWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50KiBtX3RpbWVsaW5lOwotICAgIE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRv
bkVsZW1lbnQqIG1fcGFuZWxNdXRlQnV0dG9uOwotICAgIE1lZGlhQ29udHJvbFBhbmVsVm9sdW1l
U2xpZGVyRWxlbWVudCogbV92b2x1bWVTbGlkZXI7Ci0gICAgTWVkaWFDb250cm9sVG9nZ2xlQ2xv
c2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50KiBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uOwot
ICAgIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50KiBtX2Z1bGxTY3JlZW5CdXR0
b247Ci0KLSAgICBUaW1lciBtX2hpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcjsKLSAgICBib29s
IG1faXNGdWxsc2NyZWVuOwotICAgIGJvb2wgbV9pc01vdXNlT3ZlckNvbnRyb2xzOwotCi1wcml2
YXRlOgotICAgIGJvb2wgaXNNZWRpYUNvbnRyb2xzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQotfTsKLQotaW5saW5lIE1lZGlhQ29udHJvbHMqIHRvTWVkaWFDb250cm9scyhOb2RlKiBu
b2RlKQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlIHx8IG5v
ZGUtPmlzTWVkaWFDb250cm9scygpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWVkaWFDb250
cm9scyo+KG5vZGUpOwotfQotCi0vLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVu
bmVjY2Vzc2FyeSBjYXN0Lgotdm9pZCB0b01lZGlhQ29udHJvbHMoY29uc3QgTWVkaWFDb250cm9s
cyopOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
ZWRpYUFGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUYuY3BwCmluZGV4IDNkOGNmNGZiOGY3N2ZlODBiM2ZiNDRjZDdlZTlkNzlhODUyNDVjMTIu
LjJiNTI0MjdkNzgwMjhkNGRjYzY1ODRhYzc5OWQ3N2MxOTlmMjY4MGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCkBA
IC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUg
IkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTWVk
aWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNsdWRlICJUZXh0VHJhY2tMaXN0LmgiCiAjaW5jbHVk
ZSAiVXNlclN0eWxlU2hlZXRUeXBlcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCmluZGV4IDlmMGE0MDZkZTQxNDkxODNmODUxMTYxMjRiM2VkNWMxOWIxZWYyZWIuLjQ3
MjJiMWI5ODkyNzFmMzUyNmM5MjdlODgwMDhhZTU2NjZlZWM4MTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cApAQCAtMTA3NywxNSArMTA3NywxMSBAQCB2b2lkIFBhZ2U6OnNldFBhZ2VTY2FsZUZhY3Rvcihm
bG9hdCBzY2FsZSwgY29uc3QgSW50UG9pbnQmIG9yaWdpbiwgYm9vbCBpblN0YWJsZQogI2VuZGlm
CiAgICAgfQogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAoaW5T
dGFibGVTdGF0ZSkgewogICAgICAgICBmb3JFYWNoTWVkaWFFbGVtZW50KFtdIChIVE1MTWVkaWFF
bGVtZW50JiBlbGVtZW50KSB7CiAgICAgICAgICAgICBlbGVtZW50LnBhZ2VTY2FsZUZhY3RvckNo
YW5nZWQoKTsKICAgICAgICAgfSk7CiAgICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaW5T
dGFibGVTdGF0ZSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBQYWdlOjpzZXREZWxlZ2F0ZXNTY2FsaW5n
KGJvb2wgZGVsZWdhdGVzU2NhbGluZykKQEAgLTExMzIsMTEgKzExMjgsOSBAQCB2b2lkIFBhZ2U6
OnNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oVXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbiB1c2VySW50ZQogCiAgICAgbV91c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uID0gdXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbjsKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19T
Q1JJUFQpCiAgICAgZm9yRWFjaE1lZGlhRWxlbWVudChbXSAoSFRNTE1lZGlhRWxlbWVudCYgZWxl
bWVudCkgewogICAgICAgICBlbGVtZW50LnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFu
Z2VkKCk7CiAgICAgfSk7Ci0jZW5kaWYKIH0KIAogI2lmIEVOQUJMRShWSURFTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggODY5NjYzNjBkYjlhOWU4ZjE5N2IyMWY2MDkzMWM4NjVhZGI2
ODA5YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEw
LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlJlbmRlck1lZGlhQ29udHJvbHMuaCIKLQotI2lmIEVOQUJMRShWSURFTykKLQotI2luY2x1
ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUu
aCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChSZW5kZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRh
aW5lcik7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUmVuZGVyTWVkaWFDb250cm9sVGlt
ZWxpbmVDb250YWluZXIpOwotCi1SZW5kZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcjo6UmVu
ZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5
bGUmJiBzdHlsZSkKLSAgICA6IFJlbmRlckJsb2NrRmxvdyhlbGVtZW50LCBXVEZNb3ZlKHN0eWxl
KSkKLXsKLX0KLQotdm9pZCBSZW5kZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcjo6bGF5b3V0
KCkKLXsKLSAgICBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dCgpOwotCi0gICAgaWYgKHN0eWxlKCku
ZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpOb25lIHx8ICFpczxSZW5kZXJCb3g+KG5leHRTaWJs
aW5nKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJCb3gmIGJ1dHRvbkJveCA9IGRv
d25jYXN0PFJlbmRlckJveD4oKm5leHRTaWJsaW5nKCkpOwotICAgIGludCBhYnNvbHV0ZU9mZnNl
dFRvcCA9IGJ1dHRvbkJveC5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgwLCAtc2l6ZSgpLmhl
aWdodCgpKSkueSgpOwotCi0gICAgTGF5b3V0U3RhdGVEaXNhYmxlciBsYXlvdXRTdGF0ZURpc2Fi
bGVyKHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkpOwotCi0gICAgLy8gSWYgdGhl
IHNsaWRlciB3b3VsZCBiZSByZW5kZXJlZCBvdXRzaWRlIHRoZSBwYWdlLCBpdCBzaG91bGQgYmUg
bW92ZWQgYmVsb3cgdGhlIGNvbnRyb2xzLgotICAgIGlmIChVTkxJS0VMWShhYnNvbHV0ZU9mZnNl
dFRvcCA8IDApKQotICAgICAgICBzZXRZKGJ1dHRvbkJveC5vZmZzZXRUb3AoKSArIHRoZW1lKCku
dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oYnV0dG9uQm94LCBzaXplKCkpLnkoKSk7
Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVuZGVyTWVkaWFDb250
cm9sVGltZWxpbmVDb250YWluZXI6OlJlbmRlck1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVy
KEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCi0gICAgOiBSZW5kZXJGbGV4
aWJsZUJveChlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSkKLXsKLX0KLQotLy8gV2Ugd2FudCB0aGUg
dGltZWxpbmUgc2xpZGVyIHRvIGJlIGF0IGxlYXN0IDEwMCBwaXhlbHMgd2lkZS4KLS8vIEZJWE1F
OiBFbGltaW5hdGUgaGFyZC1jb2RlZCB3aWR0aHMgYWx0b2dldGhlci4KLXN0YXRpYyBjb25zdCBp
bnQgbWluV2lkdGhUb0Rpc3BsYXlUaW1lRGlzcGxheXMgPSA0NSArIDEwMCArIDQ1OwotCi12b2lk
IFJlbmRlck1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyOjpsYXlvdXQoKQotewotICAgIFJl
bmRlckZsZXhpYmxlQm94OjpsYXlvdXQoKTsKLQotICAgIExheW91dFN0YXRlRGlzYWJsZXIgbGF5
b3V0U3RhdGVEaXNhYmxlcih2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpKTsKLSAg
ICBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQqIGNvbnRhaW5lciA9IHN0YXRp
Y19jYXN0PE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudCo+KGVsZW1lbnQoKSk7
Ci0gICAgY29udGFpbmVyLT5zZXRUaW1lRGlzcGxheXNIaWRkZW4od2lkdGgoKS50b0ludCgpIDwg
bWluV2lkdGhUb0Rpc3BsYXlUaW1lRGlzcGxheXMpOwotfQotCi0jaWYgUExBVEZPUk0oV0lOKSAm
JiBVU0UoQ0cpCi0KLXZvaWQgUmVuZGVyTWVkaWFDb250cm9sczo6YWRqdXN0TWVkaWFTbGlkZXJU
aHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oV0lOKSAmJiBVU0UoQ0cpCi0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDlmNjExMzYwMTdkMDkyMTdhZDg0YzUyNGE2YzJjYjBlYTZjMWM5ZmUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShWSURFTykKLQotI2lu
Y2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgotI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94Lmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJD
b250YWluZXIgZmluYWwgOiBwdWJsaWMgUmVuZGVyQmxvY2tGbG93IHsKLSAgICBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEKFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKTsKLXB1YmxpYzoK
LSAgICBSZW5kZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihFbGVtZW50JiwgUmVuZGVyU3R5
bGUmJik7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBsYXlvdXQoKSBvdmVycmlkZTsKLX07Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgUmVuZGVyTWVkaWFDb250cm9s
VGltZWxpbmVDb250YWluZXIgZmluYWwgOiBwdWJsaWMgUmVuZGVyRmxleGlibGVCb3ggewotICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoUmVuZGVyTWVkaWFDb250cm9sVGltZWxpbmVDb250YWlu
ZXIpOwotcHVibGljOgotICAgIFJlbmRlck1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyKEVs
ZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGxheW91dCgpIG92
ZXJyaWRlOwotICAgIGJvb2wgaXNGbGV4aWJsZUJveEltcGwoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9Ci19OwotCi0jaWYgUExBVEZPUk0oV0lOKSAmJiBVU0UoQ0cpCi0KLWNsYXNz
IFJlbmRlck1lZGlhQ29udHJvbHMgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFkanVzdE1l
ZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJik7Ci19OwotCi0jZW5kaWYgLy8gUExBVEZP
Uk0oV0lOKSAmJiBVU0UoQ0cpCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShWSURFTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTbGlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAK
aW5kZXggMzdlYzhmNTQ5NzA0YTliMmNlZWY0M2YyYTk4ZmRhODA2M2NmYWQwZC4uMTY4MWY5ZDFm
YzBiOTkyMjcwMWFmYjMzOWQxYjNiNmYxNzBjNjk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNsaWRlci5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJIVE1MSW5w
dXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNl
cklkaW9tcy5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAi
TW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5o
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKaW5kZXggNzgwOTI1YzI5
Y2VmMDY0NGUwM2NhMmI1YzJlNWI3MWZlMWVjMmE2Ny4uZTlkZDE0OTQ1ODY0YmE5YmQ4ZTg1YTQ1
MDg0N2UyZTYyNTJkMTY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUu
Y3BwCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKLSNpbmNs
dWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVBZHdhaXRhLmNwcAppbmRleCBiMThjNGQwNWQ1MWU4
MGQ0ZjJlYTYxMGY2NmE3MmMyNzU2ODdkNjc2Li4zMTA2NmE0OWU3NTE5ZTYyZmJkMTZkN2JhYTdh
NmJjNGEzYjM0MWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVBZHdhaXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVBZHdhaXRhLmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFF
bGVtZW50LmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKKyNpbmNsdWRlICJN
ZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUGFpbnRJ
bmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
CkBAIC00OTIsOSArNDkyLDIxIEBAIGJvb2wgUmVuZGVyVGhlbWVBZHdhaXRhOjpwYWludFNsaWRl
clRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zCiB9CiAKICNpZiBF
TkFCTEUoVklERU8pCitzdGF0aWMgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IHBhcmVudE1lZGlh
RWxlbWVudChjb25zdCBOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPE5vZGU+IG1lZGlhTm9kZSA9IG5vZGUtPnNoYWRvd0hv
c3QoKTsKKyAgICBpZiAoIW1lZGlhTm9kZSkKKyAgICAgICAgbWVkaWFOb2RlID0gY29uc3RfY2Fz
dDxOb2RlKj4obm9kZSk7CisgICAgaWYgKCFpczxIVE1MTWVkaWFFbGVtZW50PigqbWVkaWFOb2Rl
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxNZWRp
YUVsZW1lbnQ+KG1lZGlhTm9kZS5nZXQoKSk7Cit9CisKIGJvb2wgUmVuZGVyVGhlbWVBZHdhaXRh
OjpwYWludE1lZGlhU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAg
IGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHJlbmRlck9iamVjdCk7Cisg
ICAgYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQocmVuZGVyT2JqZWN0Lm5v
ZGUoKSk7CiAgICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtNTQyLDcgKzU1NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVBZHdhaXRhOjpwYWludE1lZGlhU2xp
ZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsCiAKIGJvb2wgUmVuZGVy
VGhlbWVBZHdhaXRhOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2Jq
ZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogewotICAgIGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50
KHJlbmRlck9iamVjdCk7CisgICAgYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1l
bnQocmVuZGVyT2JqZWN0Lm5vZGUoKSk7CiAgICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNv
Y29hLmgKaW5kZXggM2IyYjUwZGRkNTk1MmRjMWVmNWQ4YjAzMDQxZDkzM2M4YjM3OWU5YS4uMTli
YzM5MmVlMzFmNjk1MzQ5NTIyZDIxNWRmOTk1ZmQ1ZmE4MTI0ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5oCkBAIC0yOCw5ICsyOCw3IEBACiAjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKLSNpZiBFTkFC
TEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogT0JKQ19DTEFTUyBOU0RhdGVDb21wb25lbnRzRm9y
bWF0dGVyOwotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsMTIgKzQyLDgg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0jaWYgRU5BQkxFKFZJREVPKQogICAg
IFN0cmluZyBtZWRpYUNvbnRyb2xzRm9ybWF0dGVkU3RyaW5nRm9yRHVyYXRpb24oZG91YmxlKSBv
dmVycmlkZTsKLSNlbmRpZgotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAg
UmV0YWluUHRyPE5TRGF0ZUNvbXBvbmVudHNGb3JtYXR0ZXI+IG1fZHVyYXRpb25Gb3JtYXR0ZXI7
Ci0jZW5kaWYKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q29jb2EubW0KaW5kZXggOGI2YzVlZGIzODQyMWNjN2JlZWRjMWM5NmVmYTQyM2RiN2EyMWM1My4u
NjNhMDVmNjY1MjkxMGYwYWMyYzg4ODY5NWYyYjc4MDBmZmE3ZDc4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ29jb2EubW0KQEAgLTEyNywxMSArMTI3LDggQEAg
Ym9vbCBSZW5kZXJUaGVtZUNvY29hOjpwYWludEFwcGxlUGF5QnV0dG9uKGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyZXIsIGNvbnN0IFAKIAogI2VuZGlmIC8vIEVOQUJMRShBUFBMRV9QQVkpCiAK
LSNpZiBFTkFCTEUoVklERU8pCi0KIFN0cmluZyBSZW5kZXJUaGVtZUNvY29hOjptZWRpYUNvbnRy
b2xzRm9ybWF0dGVkU3RyaW5nRm9yRHVyYXRpb24oY29uc3QgZG91YmxlIGR1cmF0aW9uSW5TZWNv
bmRzKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKCFzdGQ6
OmlzZmluaXRlKGR1cmF0aW9uSW5TZWNvbmRzKSkKICAgICAgICAgcmV0dXJuIFdFQl9VSV9TVFJJ
TkcoImluZGVmaW5pdGUgdGltZSIsICJhY2Nlc3NpYmlsaXR5IGhlbHAgdGV4dCBmb3IgYW4gaW5k
ZWZpbml0ZSBtZWRpYSBjb250cm9sbGVyIHRpbWUgdmFsdWUiKTsKIApAQCAtMTQ1LDExICsxNDIs
NiBAQCBTdHJpbmcgUmVuZGVyVGhlbWVDb2NvYTo6bWVkaWFDb250cm9sc0Zvcm1hdHRlZFN0cmlu
Z0ZvckR1cmF0aW9uKGNvbnN0IGRvdWJsZSBkdQogICAgIH0KICAgICByZXR1cm4gW21fZHVyYXRp
b25Gb3JtYXR0ZXIuZ2V0KCkgc3RyaW5nRnJvbVRpbWVJbnRlcnZhbDpkdXJhdGlvbkluU2Vjb25k
c107CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSNlbHNlCi0gICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKLQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCmluZGV4IDA5YTEyZGM1
ZGFjMWExYjI0OWUwMDE3Y2I0YzYwZjJkZTliZGZkNWEuLjEyZmQ3ZmZmMmZkOTI3YTJmMGUyN2E4
YzBlN2IzZGM0ZjkwYmM3MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVJT1MubW0KQEAgLTEzNTgsMzAgKzEzNTgsMjEgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6dXBk
YXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQgdmFsdWVJRCwgRm9udEMK
ICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKG5vcm1hbEl0YWxpY1ZhbHVlKCkpOwogfQog
Ci0jaWYgRU5BQkxFKFZJREVPKQogU3RyaW5nIFJlbmRlclRoZW1lSU9TOjptZWRpYUNvbnRyb2xz
U3R5bGVTaGVldCgpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBp
ZiAobV9sZWdhY3lNZWRpYUNvbnRyb2xzU3R5bGVTaGVldC5pc0VtcHR5KCkpCiAgICAgICAgIG1f
bGVnYWN5TWVkaWFDb250cm9sc1N0eWxlU2hlZXQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRl
bnRzT2ZGaWxlOltbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dlYkNvcmVSZW5kZXJUaGVtZUJ1
bmRsZSBjbGFzc11dIHBhdGhGb3JSZXNvdXJjZTpAIm1lZGlhQ29udHJvbHNpT1MiIG9mVHlwZTpA
ImNzcyJdIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07CiAgICAgcmV0
dXJuIG1fbGVnYWN5TWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7Ci0jZWxzZQotICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwotI2VuZGlmCiB9CiAKIFN0cmluZyBSZW5kZXJUaGVtZUlPUzo6bW9kZXJu
TWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19T
Q1JJUFQpCiAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
bW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoKSkgewogICAgICAgICBpZiAobV9tZWRpYUNvbnRy
b2xzU3R5bGVTaGVldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX21lZGlhQ29udHJvbHNTdHls
ZVNoZWV0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTpbW05TQnVuZGxlIGJ1
bmRsZUZvckNsYXNzOltXZWJDb3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xhc3NdXSBwYXRoRm9yUmVz
b3VyY2U6QCJtb2Rlcm4tbWVkaWEtY29udHJvbHMiIG9mVHlwZTpAImNzcyIgaW5EaXJlY3Rvcnk6
QCJtb2Rlcm4tbWVkaWEtY29udHJvbHMiXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBl
cnJvcjpuaWxdOwogICAgICAgICByZXR1cm4gbV9tZWRpYUNvbnRyb2xzU3R5bGVTaGVldDsKICAg
ICB9CiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZWxzZQotICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwotI2VuZGlmCiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnB1cmdlQ2FjaGVzKCkK
QEAgLTEzOTQsNyArMTM4NSw2IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnB1cmdlQ2FjaGVzKCkK
IAogU3RyaW5nIFJlbmRlclRoZW1lSU9TOjptZWRpYUNvbnRyb2xzU2NyaXB0KCkKIHsKLSNpZiBF
TkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLm1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKCkpIHsKICAg
ICAgICAgaWYgKG1fbWVkaWFDb250cm9sc1NjcmlwdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dlYkNvcmVSZW5k
ZXJUaGVtZUJ1bmRsZSBjbGFzc11dOwpAQCAtMTQxOSwyNyArMTQwOSwxOCBAQCBTdHJpbmcgUmVu
ZGVyVGhlbWVJT1M6Om1lZGlhQ29udHJvbHNTY3JpcHQoKQogICAgICAgICBtX2xlZ2FjeU1lZGlh
Q29udHJvbHNTY3JpcHQgPSBzY3JpcHRCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQogICAgIHJl
dHVybiBtX2xlZ2FjeU1lZGlhQ29udHJvbHNTY3JpcHQ7Ci0jZWxzZQotICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwotI2VuZGlmCiB9CiAKIFN0cmluZyBSZW5kZXJUaGVtZUlPUzo6bWVkaWFDb250
cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5kVHlwZShjb25zdCBTdHJpbmcmIGljb25OYW1l
LCBjb25zdCBTdHJpbmcmIGljb25UeXBlKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19T
Q1JJUFQpCiAgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
Lm1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwogCiAgICAgU3RyaW5nIGRpcmVjdG9yeSA9ICJtb2Rlcm4tbWVkaWEtY29udHJvbHMvaW1h
Z2VzIjsKICAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltX
ZWJDb3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xhc3NdXTsKICAgICByZXR1cm4gW1tOU0RhdGEgZGF0
YVdpdGhDb250ZW50c09mRmlsZTpbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTppY29uTmFtZSBvZlR5
cGU6aWNvblR5cGUgaW5EaXJlY3Rvcnk6ZGlyZWN0b3J5XV0gYmFzZTY0RW5jb2RlZFN0cmluZ1dp
dGhPcHRpb25zOjBdOwotI2Vsc2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgog
fQogCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQotCiBzdHJ1Y3QgQ1NTVmFsdWVJREFuZFNlbGVj
dG9yIHsKICAgICBDU1NWYWx1ZUlEIGNzc1ZhbHVlSUQ7CiAgICAgU0VMIHNlbGVjdG9yOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IDMxOGViODJkOWFk
NTdkN2Q0MzVhNWMxNzk3OTY4ZDNlZTc2YjlmZGMuLjBlMzcxODg2MjI4YzFiMTZiMjYyZThkNmEw
NjI5NDJjYjgyYzU5YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0KQEAgLTQ4LDE0ICs0OCwxMiBAQAogI2ltcG9ydCAiTG9jYWxDdXJyZW50R3JhcGhpY3ND
b250ZXh0LmgiCiAjaW1wb3J0ICJMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLmgiCiAjaW1w
b3J0ICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW1wb3J0ICJNZWRpYUNvbnRyb2xFbGVtZW50cy5o
IgogI2ltcG9ydCAiUGFnZS5oIgogI2ltcG9ydCAiUGFpbnRJbmZvLmgiCiAjaW1wb3J0ICJQYXRo
VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJSZW5kZXJBdHRhY2htZW50LmgiCiAjaW1wb3J0ICJSZW5k
ZXJMYXllci5oIgogI2ltcG9ydCAiUmVuZGVyTWVkaWEuaCIKLSNpbXBvcnQgIlJlbmRlck1lZGlh
Q29udHJvbHMuaCIKICNpbXBvcnQgIlJlbmRlclByb2dyZXNzLmgiCiAjaW1wb3J0ICJSZW5kZXJT
bGlkZXIuaCIKICNpbXBvcnQgIlJlbmRlclNuYXBzaG90dGVkUGx1Z0luLmgiCkBAIC0yOTYsMzEg
KzI5NCwyMSBAQCBOU1ZpZXcgKlJlbmRlclRoZW1lTWFjOjpkb2N1bWVudFZpZXdGb3IoY29uc3Qg
UmVuZGVyT2JqZWN0JiBvKSBjb25zdAogICAgIHJldHVybiBUaGVtZU1hYzo6ZW5zdXJlZFZpZXco
Jm8udmlldygpLmZyYW1lVmlldygpLCBzdGF0ZXMpOwogfQogCi0jaWYgRU5BQkxFKFZJREVPKQot
CiBTdHJpbmcgUmVuZGVyVGhlbWVNYWM6Om1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkKIHsKLSNp
ZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChtX2xlZ2FjeU1lZGlhQ29u
dHJvbHNTdHlsZVNoZWV0LmlzRW1wdHkoKSkKICAgICAgICAgbV9sZWdhY3lNZWRpYUNvbnRyb2xz
U3R5bGVTaGVldCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6W1tOU0J1bmRs
ZSBidW5kbGVGb3JDbGFzczpbV2ViQ29yZVJlbmRlclRoZW1lQnVuZGxlIGNsYXNzXV0gcGF0aEZv
clJlc291cmNlOkAibWVkaWFDb250cm9sc0FwcGxlIiBvZlR5cGU6QCJjc3MiXSBlbmNvZGluZzpO
U1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdOwogICAgIHJldHVybiBtX2xlZ2FjeU1lZGlh
Q29udHJvbHNTdHlsZVNoZWV0OwotI2Vsc2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNl
bmRpZgogfQogCiBTdHJpbmcgUmVuZGVyVGhlbWVNYWM6Om1vZGVybk1lZGlhQ29udHJvbHNTdHls
ZVNoZWV0KCkKIHsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLm1vZGVybk1lZGlhQ29udHJv
bHNFbmFibGVkKCkpIHsKICAgICAgICAgaWYgKG1fbWVkaWFDb250cm9sc1N0eWxlU2hlZXQuaXNF
bXB0eSgpKQogICAgICAgICAgICAgbV9tZWRpYUNvbnRyb2xzU3R5bGVTaGVldCA9IFtOU1N0cmlu
ZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6W1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2Vi
Q29yZVJlbmRlclRoZW1lQnVuZGxlIGNsYXNzXV0gcGF0aEZvclJlc291cmNlOkAibW9kZXJuLW1l
ZGlhLWNvbnRyb2xzIiBvZlR5cGU6QCJjc3MiIGluRGlyZWN0b3J5OkAibW9kZXJuLW1lZGlhLWNv
bnRyb2xzIl0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKICAgICAg
ICAgcmV0dXJuIG1fbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7CiAgICAgfQogICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwotI2Vsc2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgog
fQogCiB2b2lkIFJlbmRlclRoZW1lTWFjOjpwdXJnZUNhY2hlcygpCkBAIC0zMzUsNyArMzIzLDYg
QEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6cHVyZ2VDYWNoZXMoKQogCiBTdHJpbmcgUmVuZGVyVGhl
bWVNYWM6Om1lZGlhQ29udHJvbHNTY3JpcHQoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9M
U19TQ1JJUFQpCiAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkubW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoKSkgewogICAgICAgICBpZiAobV9tZWRpYUNv
bnRyb2xzU2NyaXB0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9
IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViQ29yZVJlbmRlclRoZW1lQnVuZGxlIGNsYXNz
XV07CkBAIC0zNTMsMjcgKzM0MCwxOCBAQCBTdHJpbmcgUmVuZGVyVGhlbWVNYWM6Om1lZGlhQ29u
dHJvbHNTY3JpcHQoKQogICAgICAgICBtX2xlZ2FjeU1lZGlhQ29udHJvbHNTY3JpcHQgPSBtYWtl
U3RyaW5nKFN0cmluZyB7IGxvY2FsaXplZFN0cmluZ3MgfSwgU3RyaW5nIHsgc2NyaXB0IH0pOwog
ICAgIH0KICAgICByZXR1cm4gbV9sZWdhY3lNZWRpYUNvbnRyb2xzU2NyaXB0OwotI2Vsc2UKLSAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgogfQogCiBTdHJpbmcgUmVuZGVyVGhlbWVN
YWM6Om1lZGlhQ29udHJvbHNCYXNlNjRTdHJpbmdGb3JJY29uTmFtZUFuZFR5cGUoY29uc3QgU3Ry
aW5nJiBpY29uTmFtZSwgY29uc3QgU3RyaW5nJiBpY29uVHlwZSkKIHsKLSNpZiBFTkFCTEUoTUVE
SUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS5tb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCgpKQogICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIE5TU3RyaW5nICpkaXJlY3RvcnkgPSBAIm1vZGVybi1t
ZWRpYS1jb250cm9scy9pbWFnZXMiOwogICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUg
YnVuZGxlRm9yQ2xhc3M6W1dlYkNvcmVSZW5kZXJUaGVtZUJ1bmRsZSBjbGFzc11dOwogICAgIHJl
dHVybiBbW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZGaWxlOltidW5kbGUgcGF0aEZvclJlc291
cmNlOmljb25OYW1lIG9mVHlwZTppY29uVHlwZSBpbkRpcmVjdG9yeTpkaXJlY3RvcnldXSBiYXNl
NjRFbmNvZGVkU3RyaW5nV2l0aE9wdGlvbnM6MF07Ci0jZWxzZQotICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwotI2VuZGlmCiB9CiAKLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCi0KICNpZiBFTkFC
TEUoU0VSVklDRV9DT05UUk9MUykKIAogU3RyaW5nIFJlbmRlclRoZW1lTWFjOjppbWFnZUNvbnRy
b2xzU3R5bGVTaGVldCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lV2luLmNwcAppbmRleCBjZmQ5ZjI1YzM2MjZkNTBlYmFkMzJmMmU1Y2EwMDk3MmU4NWVmNjFl
Li5kNzdmN2ZhYjY5ZmNjMzZhNDhhZTljNjhiNGI3MzFmMGY4YTNjNDJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKQEAgLTQyLDEwICs0Miw2IEBACiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi93aW4vR0RJ
T2JqZWN0Lmg+CiAKLSNpZiBFTkFCTEUoVklERU8pCi0jaW5jbHVkZSAiUmVuZGVyTWVkaWFDb250
cm9scy5oIgotI2VuZGlmCi0KICNpbmNsdWRlIDx0Y2hhci5oPgogCiAvKiAKQEAgLTg0NSwxMCAr
ODQxLDYgQEAgdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRl
clN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGMKICAgICAgICAgc3R5bGUuc2V0V2lkdGgo
TGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7CiAgICAgICAgIHN0eWxlLnNldEhlaWdo
dChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7CiAgICAgfQotI2lmIEVOQUJMRShW
SURFTykgJiYgVVNFKENHKQotICAgIGVsc2UgaWYgKHBhcnQgPT0gTWVkaWFTbGlkZXJUaHVtYlBh
cnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCkgCi0gICAgICAgIFJlbmRl
ck1lZGlhQ29udHJvbHM6OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKHN0eWxlKTsKLSNlbmRp
ZgogfQogCiBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDk0NWRkZmQ1NzZkMjZmZTNiODI3OGNkMjY5
MGVjMGZhNGU4ZjVlZjYuLjdhMjVlYWIzNTFjYTM5MTNhOTcwZDQwODJhZjRiMTdiNDUyZTMwMDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTQ1MzEsMTIgKzQ1MzEsNyBA
QCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6cGF0aFN0cmluZ1dpdGhTaHJpbmtXcmFw
cGVkUmVjdHMoY29uc3QgVmVjdG9yPGRvdQogCiBTdHJpbmcgSW50ZXJuYWxzOjpnZXRDdXJyZW50
TWVkaWFDb250cm9sc1N0YXR1c0ZvckVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVt
ZW50KQogewotI2lmICFFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAgIFVOVVNFRF9Q
QVJBTShtZWRpYUVsZW1lbnQpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLSNlbHNlCiAgICAgcmV0
dXJuIG1lZGlhRWxlbWVudC5nZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1cygpOwotI2VuZGlm
CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395286</attachid>
            <date>2020-04-02 12:07:47 -0700</date>
            <delta_ts>2020-04-02 15:05:53 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-209875-20200402120746.patch</filename>
            <type>text/plain</type>
            <size>215499</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5MzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmRjMzc2NGI5NjMwYzlk
Nzc0ZjczM2FmNGEyNGU4YWRhNzA4ODZhMi4uNTc5NjQ2NDkxYTA0NjQ1YjEzYmNiYmNhMGYwMDlh
Mzc2YTM4ZTE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAyMC0wNC0wMSAgRXJp
YyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdW51
c2VkIG1lZGlhIGNvbnRyb2xzIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwOTg3NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjExNzI3Mzg+
CisKKyAgICAgICAgUmVtb3ZlIGNvZGUgZm9yIHRoZSwgbm93IHVudXNlZCwgQysrIGJhc2VkIG1l
ZGlhIGNvbnRyb2xzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuCisKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OnRleHRUcmFja0NvbnRhaW5lcik6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0Lmg6CisgICAgICAgICogTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRnJvbVJlbmRlcmVyKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmg6IFJlbW92ZWQuCisgICAgICAgICogZG9t
L05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzTWVkaWFDb250cm9sRWxlbWVudCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc01lZGlhQ29udHJvbHMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6On5IVE1MTWVkaWFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVy
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGF1c2VBZnRl
ckRldGFjaGVkVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRh
dGVSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RN
ZWRpYVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
TG9hZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRO
ZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y2hhbmdl
TmV0d29ya1N0YXRlRnJvbUxvYWRpbmdUb0lkbGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50Ojpwcm9ncmVzc0V2ZW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpwbGF5YmFja1Byb2dyZXNzVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjphZGRUZXh0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6cmVtb3ZlVGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OmRpZEFkZFRleHRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjplbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVDYXB0aW9uQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmxheW91dFNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja3MpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJDaGFyYWN0ZXJpc3RpY0NoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlVm9sdW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZGlkQmVjb21lRnVsbHNjcmVlbkVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6d2lsbFN0b3BCZWluZ0Z1bGxzY3Jl
ZW5FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFj
a1JlYWR5U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OmNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0Q2xvc2VkQ2FwdGlvbnNW
aXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZU1l
ZGlhQ29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y2FwdGlv
blByZWZlcmVuY2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
OjpzZXRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Omdl
dEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OmNsb3NlQ2FwdGlvblRyYWNrc0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFDb250cm9scyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpoYXNNZWRpYUNvbnRyb2xzIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0
ZU1lZGlhQ29udHJvbHMpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFDb250cm9sc0hv
c3QpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVz
Lmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
Lmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbXBhcmVDdWVJbnRlcnZhbEZvckRpc3BsYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50
Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6cHJvY2Vzc0Fj
dGl2ZVZUVEN1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50Ojp1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFN0cm9r
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y2xlYXJU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjplbnRlcmVk
RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50OjpleGl0ZWRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVZpZGVvRGlzcGxheVNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6dXBkYXRlU2l6ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp0
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6aGlkZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpzaG93KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6Omlz
U2hvd2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50Ojpsb2dnZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nSWRlbnRpZmllciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojps
b2dDaGFubmVsIGNvbnN0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01l
ZGlhQ29udHJvbHMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29u
dHJvbHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
ZWRpYUFGLmNwcDoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZTo6c2V0UGFnZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJN
ZWRpYUNvbnRyb2xzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVk
aWFDb250cm9scy5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ29jb2EuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ29jb2E6Om1lZGlhQ29udHJvbHNGb3JtYXR0
ZWRTdHJpbmdGb3JEdXJhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6Om1lZGlhQ29udHJvbHNTdHls
ZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjptb2Rlcm5NZWRpYUNv
bnRyb2xzU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6bWVk
aWFDb250cm9sc1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6bWVk
aWFDb250cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5kVHlwZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6Om1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjptb2Rlcm5NZWRpYUNvbnRyb2xzU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6bWVkaWFDb250cm9sc1NjcmlwdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6bWVkaWFDb250cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5k
VHlwZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpnZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1c0ZvckVsZW1lbnQpOgor
CiAyMDIwLTAzLTMxICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFtpUGFkXSBVc2UgQVZBdWRpb1Nlc3Npb24gdG8gZGV0ZWN0IEFpclBsYXkgcm91dGUg
Y2hhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xz
L01lZGlhQ29udHJvbHNIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250
cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKaW5kZXggNTA4YjlhMThlZWYyMzgzYWI2MWI5OWNm
NjVmNTY1MmJjYjk1NzY3Ny4uNjBlYTZlN2QxMDU2M2VlMTc5NDBmYzU5MzNlODMzZTlhMGNmYWQx
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlh
Q29udHJvbHNIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJv
bHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCkBAIC0yNSwxNCArMjUsMTIgQEAKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLQogI2luY2x1
ZGUgIk1lZGlhQ29udHJvbHNIb3N0LmgiCiAKICNpbmNsdWRlICJDYXB0aW9uVXNlclByZWZlcmVu
Y2VzLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgorI2luY2x1ZGUgIk1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTE1OSwxMCAr
MTU3LDkgQEAgdm9pZCBNZWRpYUNvbnRyb2xzSG9zdDo6c2V0U2VsZWN0ZWRUZXh0VHJhY2soVGV4
dFRyYWNrKiB0cmFjaykKIAogRWxlbWVudCogTWVkaWFDb250cm9sc0hvc3Q6OnRleHRUcmFja0Nv
bnRhaW5lcigpCiB7Ci0gICAgaWYgKCFtX3RleHRUcmFja0NvbnRhaW5lciAmJiBtX21lZGlhRWxl
bWVudCkgewotICAgICAgICBtX3RleHRUcmFja0NvbnRhaW5lciA9IE1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSk7
Ci0gICAgICAgIG1fdGV4dFRyYWNrQ29udGFpbmVyLT5zZXRNZWRpYUNvbnRyb2xsZXIobV9tZWRp
YUVsZW1lbnQuZ2V0KCkpOwotICAgIH0KKyAgICBpZiAoIW1fdGV4dFRyYWNrQ29udGFpbmVyICYm
IG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX3RleHRUcmFja0NvbnRhaW5lciA9IE1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudC0+ZG9j
dW1lbnQoKSwgKm1fbWVkaWFFbGVtZW50KTsKKwogICAgIHJldHVybiBtX3RleHRUcmFja0NvbnRh
aW5lci5nZXQoKTsKIH0KIApAQCAtMzIxLDUgKzMxOCwzIEBAIGJvb2wgTWVkaWFDb250cm9sc0hv
c3Q6OmNvbXBhY3RNb2RlKCkgY29uc3QKIH0KIAogfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmgK
aW5kZXggZTQwZjUxZjMzY2YxOGRmYmU1MjY4ZmVhMTFjNzUwOTJkNTcxYWI4Yi4uNDE0Y2IwY2I1
NmEyZjI4NWFkMjRjOWM1MjE5ZjQ4OWZmNGVlMGFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmgKQEAgLTI1
LDggKzI1LDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNf
U0NSSVBUKQotCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KQEAgLTEwNCw0ICsxMDIsMyBAQCBwcml2
YXRlOgogCiB9CiAKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9w
bHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCmluZGV4IDVjZWE1ZTFj
NWViYjAwNTVjODQzMzNmYmY0ZWIxYzg2ZDJlYzZiNjguLjUzN2VlZTdkYWNjN2RjNDQ2ZDk4OTk2
ZDg0ZGI1ZDFkYTM0ZjFlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1
Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KQEAgLTI1LDggKzI1
LDYgQEAKIAogI2ltcG9ydCAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNf
U0NSSVBUKQotCiAjaW1wb3J0ICJRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5oIgogCiAjaW1w
b3J0ICJDb21tb25WTS5oIgpAQCAtNDM3LDQgKzQzNSwzIEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNr
VGltZVBsdWdpblJlcGxhY2VtZW50OjplcnJvckxvZyhKU0M6OkpTR2xvYmFsT2JqZWN0JiBzdGF0
ZSkKIAogfQogCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggM2RlMjVjNDBhNmU5NWQzZGJkNTcz
ODc2YmI0ZmExNjJlZmZlNzJkNS4uM2JhMjRkNzFjNTJmOTQ4Y2RjZmFiOGFmOTBjM2NjYTgzYTk4
MGZmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTQ0Nyw3ICs0NDcsNiBAQCBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlMaXN0LmNwcAogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5j
cHAKIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LmNwcAotYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1l
bnVMaXN0LmNwcAogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3Bw
CiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcApAQCAtMTM2OCw5
ICsxMzY3LDcgQEAgaHRtbC9wYXJzZXIvWFNTQXVkaXRvckRlbGVnYXRlLmNwcAogaHRtbC9zaGFk
b3cvQXV0b0ZpbGxCdXR0b25FbGVtZW50LmNwcAogaHRtbC9zaGFkb3cvRGF0YUxpc3RCdXR0b25F
bGVtZW50LmNwcAogaHRtbC9zaGFkb3cvRGV0YWlsc01hcmtlckNvbnRyb2wuY3BwCi1odG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwCi1odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHAKLWh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwCitodG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmNwcAogaHRtbC9zaGFkb3cv
UHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcAogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50
LmNwcAogaHRtbC9zaGFkb3cvU3BpbkJ1dHRvbkVsZW1lbnQuY3BwCkBAIC0yMTkwLDcgKzIxODcs
NiBAQCByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCiByZW5kZXJpbmcvUmVuZGVyTGlzdE1h
cmtlci5jcHAKIHJlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAogcmVuZGVyaW5nL1JlbmRlck1l
ZGlhLmNwcAotcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCiByZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwCiByZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwCiByZW5kZXJpbmcvUmVu
ZGVyTXVsdGlDb2x1bW5GbG93LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDllY2VhNjBiZWRjZjhjMzM4YjRkODc0NzVkM2Fk
ZjE1OThhZGJlOWMuLmZhZjQzNjdhZGIwZTVhZGZkZTcwYTIwY2VmMmFiOWU1N2Q1NDg3YTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTYzOCw3ICs2MzgsNiBAQAogCQkxRDlGMEZDMTIxMjIwMjlCMDA1RDhGRDQgLyogU2hhcmVE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxREM1
NTQwMDIxMUJBOEM4MDA0Qjc4MEUgLyogU2hhcmVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMURCQzFCNTYyMzQ3QjNEMjAwQjkwMUFGIC8q
IFBpY3R1cmVJblBpY3R1cmVPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMURCQzFCNTUyMzQ3QjNEMjAwQjkwMUFGIC8qIFBpY3R1cmVJblBp
Y3R1cmVPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTFGMzZFQTlDMUUyMUJBMTcwMDYyMUUyNSAvKiBXZWJCYWNrZ3JvdW5kVGFza0Nv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFGMzZFQTlBMUUyMUJBMTcwMDYyMUUyNSAvKiBXZWJCYWNrZ3JvdW5kVGFza0NvbnRyb2xsZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxRjND
M0JFQjEzNUNBRjNDMDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUYzQzNCRTkxMzVDQUYzQzAwQjhDMUFDIC8q
IE1lZGlhQ29udHJvbHMuaCAqLzsgfTsKIAkJMUY3MkJGMEIxODdGRDQ1QzAwMDlCQ0IzIC8qIFRp
bGVDb250cm9sbGVyTWVtb3J5SGFuZGxlcklPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUY3MkJGMDkxODdGRDQyNzAwMDlCQ0IzIC8qIFRpbGVDb250
cm9sbGVyTWVtb3J5SGFuZGxlcklPUy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTFGODc1NkIyMUUyMkMzMzUwMDQyQzQwRCAvKiBXZWJTUUxpdGVE
YXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFGODc1NkIxMUUyMkJFRUYwMDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFz
ZVRyYWNrZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxRkFGQkYxOTE1QTVGQTc0MDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRkFGQkYxNjE1QTVG
QTUyMDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwODYsNyArMTA4NSw3IEBACiAJCTQxNkU2RkU5MUJC
RDEyRTUwMDBBNjA0MyAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDgg
LyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU5MUJCRDEyRTUwMDBBNjA1MyAvKiBXcml0YWJs
ZVN0cmVhbUJ1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTggLyogV3JpdGFibGVTdHJlYW1CdWlsdGlu
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQx
NkZEMjVGMjQwRkE0RTUwMDY2NjFEOCAvKiBOb3dQbGF5aW5nSW5mby5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RkQyNUQyNDBFRTFBRTAwNjY2MUQ4
IC8qIE5vd1BsYXlpbmdJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJNDE3MjUzQUIxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbEVs
ZW1lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MTcyNTNBOTEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sRWxlbWVudHMuaCAqLzsgfTsK
KwkJNDE3MjUzQUIxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxNzI1M0E5MTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50LmggKi87IH07CiAJCTQxNzYxMkFGMUUzQTk5NDAwMEMzRDgxRCAvKiBMaWJX
ZWJSVENNZWRpYUVuZHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxNzYxMkFCMUUzQTk5M0IwMEMzRDgxRCAvKiBMaWJXZWJSVENNZWRpYUVu
ZHBvaW50LmNwcCAqLzsgfTsKIAkJNDE3NjEyQjAxRTNBOTk0MDAwQzNEODFEIC8qIExpYldlYlJU
Q01lZGlhRW5kcG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxNzYxMkFDMUUzQTk5M0IwMEMzRDgxRCAvKiBMaWJXZWJSVENNZWRpYUVuZHBvaW50
LmggKi87IH07CiAJCTQxNzYxMkIxMUUzQTk5NDAwMEMzRDgxRCAvKiBMaWJXZWJSVENQZWVyQ29u
bmVjdGlvbkJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDE3NjEyQUQxRTNBOTkzQjAwQzNEODFEIC8qIExpYldlYlJUQ1BlZXJDb25uZWN0
aW9uQmFja2VuZC5jcHAgKi87IH07CkBAIC00NTY2LDcgKzQ1NjUsNiBAQAogCQlERTVGODY1OTFG
QTJBRjI0MDA2REI2M0IgLyogVW5pZmllZFNvdXJjZTYxLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU1Rjg2M0ExRkEyQUYwNzAwNkRCNjNCIC8q
IFVuaWZpZWRTb3VyY2U2MS1tbS5tbSAqLzsgfTsKIAkJREU3NzEwODYxRkEyRjBENjAwNDYwMDE2
IC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEExNzYzRjNDMUUyMDUyMzQwMDFENThERSAvKiBXZWJBcmNoaXZl
RHVtcFN1cHBvcnQubW0gKi87IH07CiAJCURFQkNDREQyMTY2NDZFODIwMEE0NTJFMSAvKiBSZW5k
ZXJNZWRpYUNvbnRyb2xzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBERTQ5QjMwODE2NUYyRkUxMDAxMDMzOEQgLyogUmVuZGVyTWVkaWFDb250cm9scy5o
ICovOyB9OwotCQlERUJDQ0RENDE2NjQ2RUFGMDBBNDUyRTEgLyogTWVkaWFDb250cm9sRWxlbWVu
dFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
RTQ5QjMwMDE2NUYyRkM2MDAxMDMzOEQgLyogTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmggKi87
IH07CiAJCURFQ0E3RDkzMUY5RTY3QjUwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMTMxLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERFQ0E3RDZEMUY5
RTYxQ0YwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMTMxLmNwcCAqLzsgfTsKIAkJREVDQTdEOTQx
RjlFNjdCNTAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxMzIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREVDQTdEN0UxRjlFNjFFMzAwRTNCNjYxIC8q
IFVuaWZpZWRTb3VyY2UxMzIuY3BwICovOyB9OwogCQlERUNBN0Q5NTFGOUU2N0I1MDBFM0I2NjEg
LyogVW5pZmllZFNvdXJjZTEzMy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBERUNBN0Q4MDFGOUU2MUU1MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTEz
My5jcHAgKi87IH07CkBAIC02NjM0LDggKzY2MzIsNiBAQAogCQkxREVGMDZERTIzM0QyRTFDMDBF
RTIyOEQgLyogRG9jdW1lbnRQaWN0dXJlSW5QaWN0dXJlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBEb2N1bWVudFBpY3R1cmVJblBpY3R1cmUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxRjM2RUE5QTFFMjFCQTE3MDA2MjFFMjUgLyogV2ViQmFja2dyb3VuZFRhc2tDb250
cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkJhY2tncm91bmRU
YXNrQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRjM2RUE5QjFF
MjFCQTE3MDA2MjFFMjUgLyogV2ViQmFja2dyb3VuZFRhc2tDb250cm9sbGVyLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQmFja2dyb3VuZFRhc2tDb250cm9s
bGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxRjNDM0JFODEzNUNBRjNDMDBC
OEMxQUMgLyogTWVkaWFDb250cm9scy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNZWRpYUNvbnRyb2xzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MUYzQzNCRTkxMzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFDb250cm9scy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxRjcyQkYwODE4N0ZENDI3MDAwOUJDQjMgLyogVGlsZUNvbnRyb2xsZXJNZW1v
cnlIYW5kbGVySU9TLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRp
bGVDb250cm9sbGVyTWVtb3J5SGFuZGxlcklPUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFGNzJCRjA5MTg3RkQ0MjcwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1lbW9yeUhh
bmRsZXJJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlsZUNvbnRyb2xs
ZXJNZW1vcnlIYW5kbGVySU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGODc1
NkIwMUUyMkJFRUYwMDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTUUxpdGVEYXRhYmFz
ZVRyYWNrZXJDbGllbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NDQ4LDgg
Kzc0NDQsOCBAQAogCQk0MTZFMjlBNTEwMkZBOTYyMDA3RkMxNEUgLyogV29ya2VyUmVwb3J0aW5n
UHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya2VyUmVwb3J0aW5n
UHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RkQyNUQyNDBFRTFBRTAw
NjY2MUQ4IC8qIE5vd1BsYXlpbmdJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5vd1BsYXlpbmdJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNzBB
MkU5MUQ4QzBDQzAwMDMxODQ1MiAvKiBKU0RPTVdyYXBwZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01XcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDE3MjUzQTgxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhQ29udHJv
bEVsZW1lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDE3MjUzQTkxMzU0
QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1lZGlhQ29udHJvbEVsZW1lbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQxNzI1M0E4MTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0MTcyNTNBOTEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNzYxMkFCMUUzQTk5M0IwMEMzRDgxRCAvKiBMaWJX
ZWJSVENNZWRpYUVuZHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IExpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJU
Q01lZGlhRW5kcG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTc2MTJB
QzFFM0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2ludC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBMaWJXZWJSVENNZWRpYUVuZHBvaW50Lmg7IHBhdGggPSBs
aWJ3ZWJydGMvTGliV2ViUlRDTWVkaWFFbmRwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MTc2MTJBRDFFM0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDUGVlckNvbm5lY3Rp
b25CYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExpYldl
YlJUQ1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHA7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRD
UGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE0NTcyLDggKzE0NTY4LDYgQEAKIAkJREJGQ0IwRUJGRjVDRDc3RUJFQjM1OTVGIC8qIFJlbmRl
ck1hdGhNTFBhZGRlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJNYXRoTUxQYWRkZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERDA1
RkUwQjBCOEJBM0M2MDA5QUNERkUgLyogV2ViQ29yZU9iakNFeHRyYXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVPYmpDRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCURENzYzQkIxMDk5MkMyQzkwMDc0MEI4RSAvKiBsaWJ4bWwyLmR5bGli
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBp
bGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJ4bWwyLmR5bGliOyBwYXRoID0gL3Vzci9saWIv
bGlieG1sMi5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKLQkJREU0OUIyRkYx
NjVGMkZDNjAwMTAzMzhEIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlERTQ5QjMwMDE2NUYyRkM2MDAxMDMzOEQg
LyogTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlERTQ5QjMwNzE2NUYyRkUxMDAxMDMzOEQgLyogUmVuZGVyTWVkaWFDb250cm9scy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJNZWRpYUNvbnRy
b2xzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREU0OUIzMDgxNjVGMkZFMTAw
MTAzMzhEIC8qIFJlbmRlck1lZGlhQ29udHJvbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyTWVkaWFDb250cm9scy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlERTVGODNCMjFGQTE4Njc2MDA2REI2M0EgLyogVW5pZmllZFNvdXJjZTMwMS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBVbmlmaWVkU291cmNlMzAxLmNwcDsg
cGF0aCA9ICJEZXJpdmVkU291cmNlcy9XZWJDb3JlL3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291
cmNlMzAxLmNwcCI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xODI1
MCwxMiArMTgyNDQsOCBAQAogCQkJCUE3QzlBQkY3MTM1N0EzQkYwMEY1NTAzRiAvKiBEZXRhaWxz
TWFya2VyQ29udHJvbC5oICovLAogCQkJCTUxMDE5MkQzMThCNkI5QjcwMDdGQzdBMSAvKiBJbWFn
ZUNvbnRyb2xzUm9vdEVsZW1lbnQuY3BwICovLAogCQkJCTUxMDE5MkQ0MThCNkI5QjcwMDdGQzdB
MSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCAqLywKLQkJCQk0MTcyNTNBODEzNTRCQkJD
MDAzNjBGMkEgLyogTWVkaWFDb250cm9sRWxlbWVudHMuY3BwICovLAotCQkJCTQxNzI1M0E5MTM1
NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5oICovLAotCQkJCURFNDlCMkZG
MTY1RjJGQzYwMDEwMzM4RCAvKiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwICovLAotCQkJ
CURFNDlCMzAwMTY1RjJGQzYwMDEwMzM4RCAvKiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuaCAq
LywKLQkJCQkxRjNDM0JFODEzNUNBRjNDMDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5jcHAgKi8s
Ci0JCQkJMUYzQzNCRTkxMzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMuaCAqLywKKwkJ
CQk0MTcyNTNBODEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudC5jcHAgKi8sCisJCQkJNDE3MjUzQTkxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaCAqLywKIAkJCQlFNEUyNDM4MjFEQUI5
NTNFMDBDMjZFNEIgLyogbWV0ZXJFbGVtZW50U2hhZG93LmNzcyAqLywKIAkJCQlBNzE1RTY1MDEz
NEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcCAqLywKIAkJCQlBNzE1
RTY1MTEzNEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmggKi8sCkBAIC0z
MTgxOCwxMiArMzE4MDgsMTAgQEAKIAkJCQlDRENDOUJDRjIyMzg3RTlBMDBGRkI1MUMgLyogTWVk
aWFDYXBhYmlsaXRpZXNEZWNvZGluZ0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQ0M5QkQx
MjIzODdFQUEwMEZGQjUxQyAvKiBNZWRpYUNhcGFiaWxpdGllc0VuY29kaW5nSW5mby5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDc4RTA5M0ExN0QxNkUxQzAwNDIwQUExIC8qIE1lZGlhQ29uc3RyYWlu
dHMuaCBpbiBIZWFkZXJzICovLAotCQkJCTQxNzI1M0FCMTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRp
YUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJREVCQ0NERDQxNjY0NkVBRjAw
QTQ1MkUxIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0RGNjVDQzgxNDVCMUU3NTAwQzRDN0FBIC8qIE1lZGlhQ29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0RGNjVDQ0ExNDVCNDQ4ODAwQzRDN0FBIC8qIE1lZGlhQ29udHJvbGxlckludGVy
ZmFjZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUYzQzNCRUIxMzVDQUYzQzAwQjhDMUFDIC8qIE1l
ZGlhQ29udHJvbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQUI2RDI5MTdDN0RFNkMwMEM2MEIz
NCAvKiBNZWRpYUNvbnRyb2xzSG9zdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDE3MjUzQUIxMzU0
QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUNERjJCMDA0MTgxRjA1OUMwMEYyQjQyNCAvKiBNZWRpYURlc2Ny
aXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNTE0NUI5MDFCM0ExQ0UwMDA2NjJCRjcgLyog
TWVkaWFEZXZpY2VJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk1RUE3MjVEMzFBQ0FCRDQ3MDBF
QUQxN0IgLyogTWVkaWFEZXZpY2VzLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IGQ3ZjVjNGM4ZjM5NzkwYzEw
NmU4YmZkNjVjNGU4NTU3MThkODkzNmQuLjNhMTk4Mjc5MGFlYmFlODkyMjJkNjk4NjcxYzIwYzQw
YTBlNzk4ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmNwcApAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlMaXN0Qm94
LmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uaCIKICNpbmNsdWRlICJB
Y2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZWRp
YUNvbnRyb2xzLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0LmgiCiAjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1l
bnVMaXN0T3B0aW9uLmgiCkBAIC03NSw2ICs3NCw3IEBACiAjaW5jbHVkZSAiSFRNTEltYWdlRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGFi
ZWxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxNZXRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1M
UGFyc2VySWRpb21zLmgiCkBAIC0xMTIsMTAgKzExMiw2IEBACiAjaW5jbHVkZSA8d3RmL0RhdGFM
b2cuaD4KICNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KIAotI2lmIEVOQUJMRShWSURFTykK
LSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgotI2VuZGlmCi0KICNpZiBDT01QSUxF
UihNU1ZDKQogLy8gU2VlIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
MXdlYTV6d2UuYXNweAogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCkBAIC01MjksMTIg
KzUyNSw2IEBAIHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlRnJvbVJlbmRl
cmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5
TWVkaWFPYmplY3Q6OmNyZWF0ZShyZW5kZXJlcik7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShWSURF
TykKLSAgICAvLyBtZWRpYSBjb250cm9scwotICAgIGlmIChub2RlICYmIG5vZGUtPmlzTWVkaWFD
b250cm9sRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJv
bDo6Y3JlYXRlKHJlbmRlcmVyKTsKLSNlbmRpZgotCiAgICAgaWYgKGlzPFJlbmRlclNWR1Jvb3Q+
KCpyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5U1ZHUm9vdDo6Y3JlYXRl
KHJlbmRlcmVyKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGVhMmQ4NDAzYjM0YmJmN2UxOGY0MDFjMzg5MzM5ZjZhNjE0ZGFkZmEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwzMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFZJ
REVPKQotCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuaCIKLQotI2luY2x1
ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1
ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5o
IgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgot
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLQotQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJv
bDo6QWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQotICAg
IDogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdChyZW5kZXJlcikKLXsKLX0KLQotUmVmPEFjY2Vz
c2liaWxpdHlPYmplY3Q+IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OmNyZWF0ZShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKQotewotICAgIEFTU0VSVChyZW5kZXJlci0+bm9kZSgpKTsKLQotICAg
IHN3aXRjaCAobWVkaWFDb250cm9sRWxlbWVudFR5cGUocmVuZGVyZXItPm5vZGUoKSkpIHsKLSAg
ICBjYXNlIE1lZGlhU2xpZGVyOgotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1lZGlhVGlt
ZWxpbmU6OmNyZWF0ZShyZW5kZXJlcik7Ci0KLSAgICBjYXNlIE1lZGlhQ3VycmVudFRpbWVEaXNw
bGF5OgotICAgIGNhc2UgTWVkaWFUaW1lUmVtYWluaW5nRGlzcGxheToKLSAgICAgICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5OjpjcmVhdGUocmVuZGVyZXIpOwotCi0gICAg
Y2FzZSBNZWRpYUNvbnRyb2xzUGFuZWw6Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5TWVk
aWFDb250cm9sc0NvbnRhaW5lcjo6Y3JlYXRlKHJlbmRlcmVyKTsKLQotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wocmVu
ZGVyZXIpKTsKLSAgICB9Ci19Ci0KLU1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIEFjY2Vzc2liaWxp
dHlNZWRpYUNvbnRyb2w6OmNvbnRyb2xUeXBlKCkgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVy
KCkgfHwgIXJlbmRlcmVyKCktPm5vZGUoKSkKLSAgICAgICAgcmV0dXJuIE1lZGlhVGltZWxpbmVD
b250YWluZXI7IC8vIFRpbWVsaW5lIGNvbnRhaW5lciBpcyBub3QgYWNjZXNzaWJsZS4KLQotICAg
IHJldHVybiBtZWRpYUNvbnRyb2xFbGVtZW50VHlwZShyZW5kZXJlcigpLT5ub2RlKCkpOwotfQot
Ci1jb25zdCBTdHJpbmcmIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OmNvbnRyb2xUeXBlTmFt
ZSgpIGNvbnN0Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVk
aWFFbnRlckZ1bGxzY3JlZW5CdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJFbnRl
ckZ1bGxzY3JlZW5CdXR0b24iKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0
cmluZz4gbWVkaWFFeGl0RnVsbHNjcmVlbkJ1dHRvbk5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lN
UEwoIkV4aXRGdWxsc2NyZWVuQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxj
b25zdCBTdHJpbmc+IG1lZGlhTXV0ZUJ1dHRvbk5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwo
Ik11dGVCdXR0b24iKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4g
bWVkaWFQbGF5QnV0dG9uTmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiUGxheUJ1dHRvbiIp
KTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVNlZWtCYWNr
QnV0dG9uTmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiU2Vla0JhY2tCdXR0b24iKSk7Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFTZWVrRm9yd2FyZEJ1
dHRvbk5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlNlZWtGb3J3YXJkQnV0dG9uIikpOwot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhUmV3aW5kQnV0dG9u
TmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiUmV3aW5kQnV0dG9uIikpOwotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRv
bk5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlJldHVyblRvUmVhbHRpbWVCdXR0b24iKSk7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFVbk11dGVCdXR0
b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVbk11dGVCdXR0b24iKSk7Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFQYXVzZUJ1dHRvbk5hbWUoTUFL
RV9TVEFUSUNfU1RSSU5HX0lNUEwoIlBhdXNlQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhU3RhdHVzRGlzcGxheU5hbWUoTUFLRV9TVEFUSUNf
U1RSSU5HX0lNUEwoIlN0YXR1c0Rpc3BsYXkiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IFN0cmluZz4gbWVkaWFDdXJyZW50VGltZURpc3BsYXkoTUFLRV9TVEFUSUNfU1RSSU5H
X0lNUEwoIkN1cnJlbnRUaW1lRGlzcGxheSIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgU3RyaW5nPiBtZWRpYVRpbWVSZW1haW5pbmdEaXNwbGF5KE1BS0VfU1RBVElDX1NUUklO
R19JTVBMKCJUaW1lUmVtYWluaW5nRGlzcGxheSIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbk5hbWUoTUFLRV9T
VEFUSUNfU1RSSU5HX0lNUEwoIlNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbiIpKTsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYUhpZGVDbG9zZWRDYXB0aW9uc0J1
dHRvbk5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkhpZGVDbG9zZWRDYXB0aW9uc0J1dHRv
biIpKTsKLQotICAgIHN3aXRjaCAoY29udHJvbFR5cGUoKSkgewotICAgIGNhc2UgTWVkaWFFbnRl
ckZ1bGxzY3JlZW5CdXR0b246Ci0gICAgICAgIHJldHVybiBtZWRpYUVudGVyRnVsbHNjcmVlbkJ1
dHRvbk5hbWU7Ci0gICAgY2FzZSBNZWRpYUV4aXRGdWxsc2NyZWVuQnV0dG9uOgotICAgICAgICBy
ZXR1cm4gbWVkaWFFeGl0RnVsbHNjcmVlbkJ1dHRvbk5hbWU7Ci0gICAgY2FzZSBNZWRpYU11dGVC
dXR0b246Ci0gICAgICAgIHJldHVybiBtZWRpYU11dGVCdXR0b25OYW1lOwotICAgIGNhc2UgTWVk
aWFQbGF5QnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFQbGF5QnV0dG9uTmFtZTsKLSAgICBj
YXNlIE1lZGlhU2Vla0JhY2tCdXR0b246Ci0gICAgICAgIHJldHVybiBtZWRpYVNlZWtCYWNrQnV0
dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhU2Vla0ZvcndhcmRCdXR0b246Ci0gICAgICAgIHJldHVy
biBtZWRpYVNlZWtGb3J3YXJkQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhUmV3aW5kQnV0dG9u
OgotICAgICAgICByZXR1cm4gbWVkaWFSZXdpbmRCdXR0b25OYW1lOwotICAgIGNhc2UgTWVkaWFS
ZXR1cm5Ub1JlYWx0aW1lQnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFSZXR1cm5Ub1JlYWx0
aW1lQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhVW5NdXRlQnV0dG9uOgotICAgICAgICByZXR1
cm4gbWVkaWFVbk11dGVCdXR0b25OYW1lOwotICAgIGNhc2UgTWVkaWFQYXVzZUJ1dHRvbjoKLSAg
ICAgICAgcmV0dXJuIG1lZGlhUGF1c2VCdXR0b25OYW1lOwotICAgIGNhc2UgTWVkaWFTdGF0dXNE
aXNwbGF5OgotICAgICAgICByZXR1cm4gbWVkaWFTdGF0dXNEaXNwbGF5TmFtZTsKLSAgICBjYXNl
IE1lZGlhQ3VycmVudFRpbWVEaXNwbGF5OgotICAgICAgICByZXR1cm4gbWVkaWFDdXJyZW50VGlt
ZURpc3BsYXk7Ci0gICAgY2FzZSBNZWRpYVRpbWVSZW1haW5pbmdEaXNwbGF5OgotICAgICAgICBy
ZXR1cm4gbWVkaWFUaW1lUmVtYWluaW5nRGlzcGxheTsKLSAgICBjYXNlIE1lZGlhU2hvd0Nsb3Nl
ZENhcHRpb25zQnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFTaG93Q2xvc2VkQ2FwdGlvbnNC
dXR0b25OYW1lOwotICAgIGNhc2UgTWVkaWFIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b246Ci0gICAg
ICAgIHJldHVybiBtZWRpYUhpZGVDbG9zZWRDYXB0aW9uc0J1dHRvbk5hbWU7Ci0KLSAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbEF0b20oKTsKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjphY2Nlc3NpYmlsaXR5VGV4dChWZWN0
b3I8QWNjZXNzaWJpbGl0eVRleHQ+JiB0ZXh0T3JkZXIpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIGRl
c2NyaXB0aW9uID0gYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCk7Ci0gICAgaWYgKCFkZXNjcmlw
dGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIHRleHRPcmRlci5hcHBlbmQoQWNjZXNzaWJpbGl0eVRl
eHQoZGVzY3JpcHRpb24sIEFjY2Vzc2liaWxpdHlUZXh0U291cmNlOjpBbHRlcm5hdGl2ZSkpOwot
Ci0gICAgU3RyaW5nIHRpdGxlID0gdGhpcy0+dGl0bGUoKTsKLSAgICBpZiAoIXRpdGxlLmlzRW1w
dHkoKSkKLSAgICAgICAgdGV4dE9yZGVyLmFwcGVuZChBY2Nlc3NpYmlsaXR5VGV4dCh0aXRsZSwg
QWNjZXNzaWJpbGl0eVRleHRTb3VyY2U6OkFsdGVybmF0aXZlKSk7Ci0KLSAgICBTdHJpbmcgaGVs
cHRleHQgPSBoZWxwVGV4dCgpOwotICAgIGlmICghaGVscHRleHQuaXNFbXB0eSgpKQotICAgICAg
ICB0ZXh0T3JkZXIuYXBwZW5kKEFjY2Vzc2liaWxpdHlUZXh0KGhlbHB0ZXh0LCBBY2Nlc3NpYmls
aXR5VGV4dFNvdXJjZTo6SGVscCkpOwotfQotICAgIAotCi1TdHJpbmcgQWNjZXNzaWJpbGl0eU1l
ZGlhQ29udHJvbDo6dGl0bGUoKSBjb25zdAotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxj
b25zdCBTdHJpbmc+IGNvbnRyb2xzUGFuZWwoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkNvbnRy
b2xzUGFuZWwiKSk7Ci0KLSAgICBpZiAoY29udHJvbFR5cGUoKSA9PSBNZWRpYUNvbnRyb2xzUGFu
ZWwpCi0gICAgICAgIHJldHVybiBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50U3RyaW5nKGNv
bnRyb2xzUGFuZWwpOwotCi0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRp
dGxlKCk7Ci19Ci0KLVN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjphY2Nlc3NpYmls
aXR5RGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBsb2NhbGl6ZWRNZWRpYUNvbnRy
b2xFbGVtZW50U3RyaW5nKGNvbnRyb2xUeXBlTmFtZSgpKTsKLX0KLQotU3RyaW5nIEFjY2Vzc2li
aWxpdHlNZWRpYUNvbnRyb2w6OmhlbHBUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbG9jYWxp
emVkTWVkaWFDb250cm9sRWxlbWVudEhlbHBUZXh0KGNvbnRyb2xUeXBlTmFtZSgpKTsKLX0KLQot
Ym9vbCBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdu
b3JlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3JlbmRlcmVyIHx8IG1fcmVuZGVyZXItPnN0eWxl
KCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2libGUgfHwgY29udHJvbFR5cGUoKSA9
PSBNZWRpYVRpbWVsaW5lQ29udGFpbmVyKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJl
dHVybiBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZhdWx0KCk7Ci19Ci0KLUFjY2Vzc2liaWxp
dHlSb2xlIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OnJvbGVWYWx1ZSgpIGNvbnN0Ci17Ci0g
ICAgc3dpdGNoIChjb250cm9sVHlwZSgpKSB7Ci0gICAgY2FzZSBNZWRpYUVudGVyRnVsbHNjcmVl
bkJ1dHRvbjoKLSAgICBjYXNlIE1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b246Ci0gICAgY2FzZSBN
ZWRpYU11dGVCdXR0b246Ci0gICAgY2FzZSBNZWRpYVBsYXlCdXR0b246Ci0gICAgY2FzZSBNZWRp
YVNlZWtCYWNrQnV0dG9uOgotICAgIGNhc2UgTWVkaWFTZWVrRm9yd2FyZEJ1dHRvbjoKLSAgICBj
YXNlIE1lZGlhUmV3aW5kQnV0dG9uOgotICAgIGNhc2UgTWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0
dG9uOgotICAgIGNhc2UgTWVkaWFVbk11dGVCdXR0b246Ci0gICAgY2FzZSBNZWRpYVBhdXNlQnV0
dG9uOgotICAgIGNhc2UgTWVkaWFTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b246Ci0gICAgY2FzZSBN
ZWRpYUhpZGVDbG9zZWRDYXB0aW9uc0J1dHRvbjoKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHlSb2xlOjpCdXR0b247Ci0KLSAgICBjYXNlIE1lZGlhU3RhdHVzRGlzcGxheToKLSAgICAgICAg
cmV0dXJuIEFjY2Vzc2liaWxpdHlSb2xlOjpTdGF0aWNUZXh0OwotCi0gICAgY2FzZSBNZWRpYVRp
bWVsaW5lQ29udGFpbmVyOgotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVJvbGU6Okdyb3Vw
OwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIEFj
Y2Vzc2liaWxpdHlSb2xlOjpVbmtub3duOwotfQotCi0KLS8vCi0vLyBBY2Nlc3NpYmlsaXR5TWVk
aWFDb250cm9sc0NvbnRhaW5lcgotCi1BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5l
cjo6QWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXIoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcikKLSAgICA6IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wocmVuZGVyZXIpCi17Ci19Ci0K
LVJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRh
aW5lcjo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXIocmVuZGVyZXIpKTsK
LX0KLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjphY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBsb2NhbGl6ZWRNZWRpYUNv
bnRyb2xFbGVtZW50U3RyaW5nKGVsZW1lbnRUeXBlTmFtZSgpKTsKLX0KLQotU3RyaW5nIEFjY2Vz
c2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpoZWxwVGV4dCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRIZWxwVGV4dChlbGVtZW50VHlwZU5h
bWUoKSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXI6OmNv
bnRyb2xsaW5nVmlkZW9FbGVtZW50KCkgY29uc3QKLXsKLSAgICBhdXRvIGVsZW1lbnQgPSBwYXJl
bnRNZWRpYUVsZW1lbnQoKm1fcmVuZGVyZXIpOwotICAgIHJldHVybiAhZWxlbWVudCB8fCBlbGVt
ZW50LT5pc1ZpZGVvKCk7Ci19Ci0KLWNvbnN0IFN0cmluZyYgQWNjZXNzaWJpbGl0eU1lZGlhQ29u
dHJvbHNDb250YWluZXI6OmVsZW1lbnRUeXBlTmFtZSgpIGNvbnN0Ci17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmlkZW9FbGVtZW50KE1BS0VfU1RBVElDX1NUUklO
R19JTVBMKCJWaWRlb0VsZW1lbnQiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0
IFN0cmluZz4gYXVkaW9FbGVtZW50KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJBdWRpb0VsZW1l
bnQiKSk7Ci0KLSAgICBpZiAoY29udHJvbGxpbmdWaWRlb0VsZW1lbnQoKSkKLSAgICAgICAgcmV0
dXJuIHZpZGVvRWxlbWVudDsKLSAgICByZXR1cm4gYXVkaW9FbGVtZW50OwotfQotCi1ib29sIEFj
Y2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpjb21wdXRlQWNjZXNzaWJpbGl0eUlz
SWdub3JlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRCeURl
ZmF1bHQoKTsKLX0KLQotLy8KLS8vIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lCi0KLUFjY2Vz
c2liaWxpdHlNZWRpYVRpbWVsaW5lOjpBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKQotICAgIDogQWNjZXNzaWJpbGl0eVNsaWRlcihyZW5kZXJlcikKLXsK
LX0KLQotUmVmPEFjY2Vzc2liaWxpdHlPYmplY3Q+IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5l
OjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZShyZW5kZXJlcikpOwotfQotCi1TdHJpbmcg
QWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OnZhbHVlRGVzY3JpcHRpb24oKSBjb25zdAotewot
ICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKCFpczxIVE1MSW5w
dXRFbGVtZW50Pigqbm9kZSkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGZsb2F0
IHRpbWUgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkudmFsdWUoKS50b0Zsb2F0
KCk7Ci0gICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhVGltZURlc2NyaXB0aW9uKHRpbWUpOwotfQot
Ci1TdHJpbmcgQWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OmhlbHBUZXh0KCkgY29uc3QKLXsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBzbGlkZXIoTUFLRV9TVEFU
SUNfU1RSSU5HX0lNUEwoIlNsaWRlciIpKTsKLSAgICByZXR1cm4gbG9jYWxpemVkTWVkaWFDb250
cm9sRWxlbWVudEhlbHBUZXh0KHNsaWRlcik7Ci19Ci0KLQotLy8KLS8vIEFjY2Vzc2liaWxpdHlN
ZWRpYVRpbWVEaXNwbGF5Ci0KLUFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5OjpBY2Nlc3Np
YmlsaXR5TWVkaWFUaW1lRGlzcGxheShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQotICAgIDogQWNj
ZXNzaWJpbGl0eU1lZGlhQ29udHJvbChyZW5kZXJlcikKLXsKLX0KLQotUmVmPEFjY2Vzc2liaWxp
dHlPYmplY3Q+IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5OjpjcmVhdGUoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBY2Nlc3NpYmlsaXR5
TWVkaWFUaW1lRGlzcGxheShyZW5kZXJlcikpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlNZWRp
YVRpbWVEaXNwbGF5Ojpjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX3JlbmRlcmVyIHx8IG1fcmVuZGVyZXItPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9
IFZpc2liaWxpdHk6OlZpc2libGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFt
X3JlbmRlcmVyLT5zdHlsZSgpLndpZHRoKCkudmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgCi0gICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRCeURlZmF1bHQoKTsKLX0K
LQotU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5OjphY2Nlc3NpYmlsaXR5RGVz
Y3JpcHRpb24oKSBjb25zdAotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJp
bmc+IGN1cnJlbnRUaW1lRGlzcGxheShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQ3VycmVudFRp
bWVEaXNwbGF5IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHRp
bWVSZW1haW5pbmdEaXNwbGF5KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJUaW1lUmVtYWluaW5n
RGlzcGxheSIpKTsKLQotICAgIGlmIChjb250cm9sVHlwZSgpID09IE1lZGlhQ3VycmVudFRpbWVE
aXNwbGF5KQotICAgICAgICByZXR1cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmlu
ZyhjdXJyZW50VGltZURpc3BsYXkpOwotCi0gICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJv
bEVsZW1lbnRTdHJpbmcodGltZVJlbWFpbmluZ0Rpc3BsYXkpOwotfQotCi1TdHJpbmcgQWNjZXNz
aWJpbGl0eU1lZGlhVGltZURpc3BsYXk6OnN0cmluZ1ZhbHVlKCkgY29uc3QKLXsKLSAgICBpZiAo
IW1fcmVuZGVyZXIgfHwgIW1fcmVuZGVyZXItPm5vZGUoKSkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotCi0gICAgZmxvYXQgdGltZSA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbFRpbWVEaXNw
bGF5RWxlbWVudCo+KG1fcmVuZGVyZXItPm5vZGUoKSktPmN1cnJlbnRWYWx1ZSgpOwotICAgIHJl
dHVybiBsb2NhbGl6ZWRNZWRpYVRpbWVEZXNjcmlwdGlvbihzdGQ6OmFicyh0aW1lKSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29u
dHJvbHMuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlh
Q29udHJvbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNhZDZkOTZlMzZmODVi
Mzc5ZTVjZjk1Y2U0YjQ1Y2IzZDZmN2NkMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlNZWRpYUNvbnRyb2xzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2lmIEVOQUJMRShWSURFTykKLQotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlTbGlkZXIuaCIKLSNp
bmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wgOiBwdWJsaWMgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0
PiBjcmVhdGUoUmVuZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVhbCB+QWNjZXNzaWJpbGl0eU1lZGlh
Q29udHJvbCgpID0gZGVmYXVsdDsKLQotICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1ZSgp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgU3RyaW5nIHRpdGxlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgU3RyaW5nIGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFN0cmluZyBoZWxwVGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhw
bGljaXQgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbChSZW5kZXJPYmplY3QqKTsKLSAgICBNZWRp
YUNvbnRyb2xFbGVtZW50VHlwZSBjb250cm9sVHlwZSgpIGNvbnN0OwotICAgIGNvbnN0IFN0cmlu
ZyYgY29udHJvbFR5cGVOYW1lKCkgY29uc3Q7Ci0gICAgYm9vbCBjb21wdXRlQWNjZXNzaWJpbGl0
eUlzSWdub3JlZCgpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHZvaWQgYWNjZXNz
aWJpbGl0eVRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiYpIGNvbnN0IG92ZXJyaWRlOwot
fTsKLQotCi1jbGFzcyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZSBmaW5hbCA6IHB1YmxpYyBB
Y2Nlc3NpYmlsaXR5U2xpZGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEFjY2Vzc2liaWxp
dHlPYmplY3Q+IGNyZWF0ZShSZW5kZXJPYmplY3QqKTsKLSAgICB2aXJ0dWFsIH5BY2Nlc3NpYmls
aXR5TWVkaWFUaW1lbGluZSgpID0gZGVmYXVsdDsKLQotICAgIFN0cmluZyBoZWxwVGV4dCgpIGNv
bnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyB2YWx1ZURlc2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgQWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUo
UmVuZGVyT2JqZWN0Kik7Ci0KLSAgICBib29sIGlzTWVkaWFUaW1lbGluZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KLX07Ci0KLQotY2xhc3MgQWNjZXNzaWJpbGl0eU1lZGlhQ29u
dHJvbHNDb250YWluZXIgZmluYWwgOiBwdWJsaWMgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbCB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjcmVhdGUoUmVu
ZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVhbCB+QWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250
YWluZXIoKSA9IGRlZmF1bHQ7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlVmFsdWUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5Um9sZTo6VG9vbGJhcjsgfQotCi0g
ICAgU3RyaW5nIGhlbHBUZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGFjY2Vzc2li
aWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIGV4cGxp
Y2l0IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyKFJlbmRlck9iamVjdCopOwot
ICAgIGJvb2wgY29udHJvbGxpbmdWaWRlb0VsZW1lbnQoKSBjb25zdDsKLSAgICBjb25zdCBTdHJp
bmcmIGVsZW1lbnRUeXBlTmFtZSgpIGNvbnN0OwotICAgIGJvb2wgY29tcHV0ZUFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQoKSBjb25zdCBvdmVycmlkZTsKLX07Ci0KLQotY2xhc3MgQWNjZXNzaWJpbGl0
eU1lZGlhVGltZURpc3BsYXkgZmluYWwgOiBwdWJsaWMgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJv
bCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjcmVhdGUo
UmVuZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVhbCB+QWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3Bs
YXkoKSA9IGRlZmF1bHQ7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlVmFsdWUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBwbGljYXRpb25UaW1lcjsg
fQotCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5n
IGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgot
ICAgIGV4cGxpY2l0IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5KFJlbmRlck9iamVjdCop
OwotICAgIGJvb2wgaXNNZWRpYUNvbnRyb2xMYWJlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KLSAgICBib29sIGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Qg
b3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCA2ZDk3NmU5ZGZiZGRkODhiNTdjNzliMWUzMThiMjBh
ZjliZjBmM2YyLi5kMjA4YzcxNzk2OTE3MmFjNDExMzc4MDIyZDQ4Y2E4N2VhYzBlZjM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgKQEAgLTE5OCw4ICsxOTgsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0FmdGVyUHNl
dWRvRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHBzZXVkb0lkKCkgPT0gUHNldWRvSWQ6OkFmdGVy
OyB9CiAgICAgUHNldWRvSWQgcHNldWRvSWQoKSBjb25zdCB7IHJldHVybiAoaXNFbGVtZW50Tm9k
ZSgpICYmIGhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpKSA/IGN1c3RvbVBzZXVkb0lk
KCkgOiBQc2V1ZG9JZDo6Tm9uZTsgfQogCi0gICAgdmlydHVhbCBib29sIGlzTWVkaWFDb250cm9s
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzTWVk
aWFDb250cm9scygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQogICAgIHZpcnR1YWwgYm9vbCBpc1dlYlZUVEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApp
bmRleCA3MTUxN2E3NzlhZDZmNWQ3NTkxNzA5ZThiZjA4NDYyYTZiNzc0NGUyLi4wMjliOGE3MTUz
Mjk5YWYyZWIwZDQ3NTdiOGUzN2Y0NDg1Y2QyN2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJCbG9iLmgiCiAj
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNs
dWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkNvbnRlbnRSdWxlTGlzdFJlc3VsdHMuaCIKQEAg
LTYwLDEwICs2MSwxMSBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAi
SlNET01Qcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU0hUTUxNZWRpYUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJKU01lZGlhQ29udHJvbHNIb3N0LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgog
I2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJNZWRpYUNvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzLmgiCisjaW5jbHVkZSAiTWVkaWFDb250cm9sc0hv
c3QuaCIKICNpbmNsdWRlICJNZWRpYURvY3VtZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFFcnJvci5o
IgogI2luY2x1ZGUgIk1lZGlhRnJhZ21lbnRVUklQYXJzZXIuaCIKQEAgLTk3LDYgKzk5LDcgQEAK
ICNpbmNsdWRlICJVc2VyQ29udGVudENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJVc2VyR2VzdHVy
ZUluZGljYXRvci5oIgogI2luY2x1ZGUgIlZpZGVvUGxheWJhY2tRdWFsaXR5LmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvU2NyaXB0T2JqZWN0Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhBcnJheS5oPgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxwYWwvU2Vzc2lv
bklELmg+CkBAIC0xNTksMTIgKzE2Miw2IEBACiAjaW5jbHVkZSAiTWVkaWFLZXlzLmgiCiAjZW5k
aWYKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0jaW5jbHVkZSAiSlNNZWRp
YUNvbnRyb2xzSG9zdC5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbHNIb3N0LmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvU2NyaXB0T2JqZWN0Lmg+Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShF
TkNSWVBURURfTUVESUEpCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNlbmRpZgpAQCAt
NDQ3LDEwICs0NDQsOCBAQCBIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bQogICAgICwgbV9oYXNFdmVy
Tm90aWZpZWRBYm91dFBsYXlpbmcoZmFsc2UpCiAgICAgLCBtX2hhc0V2ZXJIYWRBdWRpbyhmYWxz
ZSkKICAgICAsIG1faGFzRXZlckhhZFZpZGVvKGZhbHNlKQotI2lmIEVOQUJMRShNRURJQV9DT05U
Uk9MU19TQ1JJUFQpCiAgICAgLCBtX21lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3Rv
cihmYWxzZSkKICAgICAsIG1faGF2ZVNldFVwQ2FwdGlvbkNvbnRhaW5lcihmYWxzZSkKLSNlbmRp
ZgogICAgICwgbV9pc1NjcnViYmluZ1JlbW90ZWx5KGZhbHNlKQogI2lmIEVOQUJMRShWSURFT19U
UkFDSykKICAgICAsIG1fdHJhY2tzQXJlUmVhZHkodHJ1ZSkKQEAgLTYwMCwxMCArNTk1LDggQEAg
SFRNTE1lZGlhRWxlbWVudDo6fkhUTUxNZWRpYUVsZW1lbnQoKQogICAgIH0KICNlbmRpZgogCi0j
aWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAobV9pc29sYXRlZFdvcmxk
KQogICAgICAgICBtX2lzb2xhdGVkV29ybGQtPmNsZWFyV3JhcHBlcnMoKTsKLSNlbmRpZgogCiAj
aWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCiAgICAgaWYgKG1fc2Vzc2lvbikgewpAQCAtODIyLDE5
ICs4MTUsNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gSFRNTE1lZGlhRWxlbWVudDo6Y3Jl
YXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgcwogCiBib29sIEhUTUxNZWRpYUVsZW1l
bnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoY29uc3QgTm9kZSYgY2hpbGQpIGNvbnN0CiB7
Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICByZXR1cm4gaGFzU2hhZG93
Um9vdFBhcmVudChjaGlsZCkgJiYgSFRNTEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVy
ZXIoY2hpbGQpOwotI2Vsc2UKLSAgICBpZiAoIWhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIC8vIDxtZWRpYT4gZG9lc24ndCBhbGxvdyBpdHMgY29udGVudCwg
aW5jbHVkaW5nIHNoYWRvdyBzdWJ0cmVlLCB0bwotICAgIC8vIGJlIHJlbmRlcmVkLiBTbyB0aGlz
IHNob3VsZCByZXR1cm4gZmFsc2UgZm9yIG1vc3Qgb2YgdGhlIGNoaWxkcmVuLgotICAgIC8vIE9u
ZSBleGNlcHRpb24gaXMgYSBzaGFkb3cgdHJlZSBidWlsdCBmb3IgcmVuZGVyaW5nIGNvbnRyb2xz
IHdoaWNoIHNob3VsZCBiZSB2aXNpYmxlLgotICAgIC8vIFNvIHdlIGxldCB0aGVtIGdvIGhlcmUg
YnkgY29tcGFyaW5nIGl0cyBzdWJ0cmVlIHJvb3Qgd2l0aCBvbmUgb2YgdGhlIGNvbnRyb2xzLgot
ICAgIHJldHVybiAmbWVkaWFDb250cm9scygpLT50cmVlU2NvcGUoKSA9PSAmY2hpbGQudHJlZVNj
b3BlKCkKLSAgICAgICAgJiYgaGFzU2hhZG93Um9vdFBhcmVudChjaGlsZCkKLSAgICAgICAgJiYg
SFRNTEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoY2hpbGQpOwotI2VuZGlmCiB9
CiAKIE5vZGU6Okluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0IEhUTUxNZWRpYUVsZW1lbnQ6Omlu
c2VydGVkSW50b0FuY2VzdG9yKEluc2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVy
Tm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCkBAIC04NzIsOCArODUzLDYgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpwYXVzZUFmdGVyRGV0YWNoZWRUYXNrKCkKICAgICBpZiAobV9pbkFjdGl2
ZURvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygp
KQotICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmhpZGUoKTsKICAgICBpZiAobV9uZXR3b3JrU3Rh
dGUgPiBORVRXT1JLX0VNUFRZKQogICAgICAgICBwYXVzZSgpOwogICAgIGlmIChtX3ZpZGVvRnVs
bHNjcmVlbk1vZGUgIT0gVmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpCkBAIC05MjEsMTAgKzkwMCw4
IEBAIGlubGluZSB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVJlbmRlcmVyKCkKICAgICBp
ZiAoYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQogICAgICAgICByZW5kZXJlci0+
dXBkYXRlRnJvbUVsZW1lbnQoKTsKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQp
CiAgICAgaWYgKG1fbWVkaWFDb250cm9sc0hvc3QpCiAgICAgICAgIG1fbWVkaWFDb250cm9sc0hv
c3QtPnVwZGF0ZUNhcHRpb25EaXNwbGF5U2l6ZXMoKTsKLSNlbmRpZgogfQogCiB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OmRpZEF0dGFjaFJlbmRlcmVycygpCkBAIC0xMzA0LDkgKzEyODEsNiBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3VyY2UoKQogCiAgICAgICAgIC8v
IDUuIElmIHRoZSBtZWRpYSBlbGVtZW504oCZcyBibG9ja2VkLW9uLXBhcnNlciBmbGFnIGlzIGZh
bHNlLCB0aGVuIHBvcHVsYXRlIHRoZSBsaXN0IG9mIHBlbmRpbmcgdGV4dCB0cmFja3MuCiAjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQotICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAg
ICAgICAgICAgbWVkaWFDb250cm9scygpLT5jaGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5
KCk7Ci0KICAgICAgICAgLy8gSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrc0FyZVJlYWR5IHdp
bGwgbmVlZCAiLi4uIHRoZSB0ZXh0IHRyYWNrcyB3aG9zZSBtb2RlIHdhcyBub3QgaW4gdGhlCiAg
ICAgICAgIC8vIGRpc2FibGVkIHN0YXRlIHdoZW4gdGhlIGVsZW1lbnQncyByZXNvdXJjZSBzZWxl
Y3Rpb24gYWxnb3JpdGhtIGxhc3Qgc3RhcnRlZCIuCiAgICAgICAgIC8vIEZJWE1FOiBVcGRhdGUg
dGhpcyB0byBtYXRjaCAicG9wdWxhdGUgdGhlIGxpc3Qgb2YgcGVuZGluZyB0ZXh0IHRyYWNrcyIg
c3RlcC4KQEAgLTIyMzUsMTAgKzIyMDksNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
TG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKQogICAgICAgICBu
b25lU3VwcG9ydGVkKCk7CiAKICAgICB1cGRhdGVEaXNwbGF5U3RhdGUoKTsKLSAgICBpZiAoaGFz
TWVkaWFDb250cm9scygpKSB7Ci0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVzZXQoKTsKLSAg
ICAgICAgbWVkaWFDb250cm9scygpLT5yZXBvcnRlZEVycm9yKCk7Ci0gICAgfQogCiAgICAgRVJS
T1JfTE9HKExPR0lERU5USUZJRVIsICJlcnJvciA9ICIsIHN0YXRpY19jYXN0PGludD4oZXJyb3Ip
KTsKIApAQCAtMjI4MywxNiArMjI1MywxMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldE5l
dHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIHN0YXRlKQogICAgICAgICAgICAg
Y2hhbmdlTmV0d29ya1N0YXRlRnJvbUxvYWRpbmdUb0lkbGUoKTsKICAgICAgICAgbV9jb21wbGV0
ZWx5TG9hZGVkID0gdHJ1ZTsKICAgICB9Ci0KLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQot
ICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnVwZGF0ZVN0YXR1c0Rpc3BsYXkoKTsKIH0KIAogdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpjaGFuZ2VOZXR3b3JrU3RhdGVGcm9tTG9hZGluZ1RvSWRsZSgp
CiB7CiAgICAgbV9wcm9ncmVzc0V2ZW50VGltZXIuc3RvcCgpOwotICAgIGlmIChoYXNNZWRpYUNv
bnRyb2xzKCkgJiYgbV9wbGF5ZXItPmRpZExvYWRpbmdQcm9ncmVzcygpKQotICAgICAgICBtZWRp
YUNvbnRyb2xzKCktPmJ1ZmZlcmluZ1Byb2dyZXNzZWQoKTsKIAogICAgIC8vIFNjaGVkdWxlIG9u
ZSBsYXN0IHByb2dyZXNzIGV2ZW50IHNvIHdlIGd1YXJhbnRlZSB0aGF0IGF0IGxlYXN0IG9uZSBp
cyBmaXJlZAogICAgIC8vIGZvciBmaWxlcyB0aGF0IGxvYWQgdmVyeSBxdWlja2x5LgpAQCAtMjQz
Nyw4ICsyNDAyLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRSZWFkeVN0YXRlKE1lZGlh
UGxheWVyOjpSZWFkeVN0YXRlIHN0YXRlKQogI2VuZGlmCiAgICAgICAgIG1faW5pdGlhbGx5TXV0
ZWQgPSBtX3ZvbHVtZSA8IDAuMDUgfHwgbXV0ZWQoKTsKIAotICAgICAgICBpZiAoaGFzTWVkaWFD
b250cm9scygpKQotICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5sb2FkZWRNZXRhZGF0YSgp
OwogICAgICAgICB1cGRhdGVSZW5kZXJlcigpOwogCiAgICAgICAgIGlmIChpczxNZWRpYURvY3Vt
ZW50Pihkb2N1bWVudCgpKSkKQEAgLTI1MDUsMTMgKzI0NjgsOCBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgc3RhdGUpCiAgICAg
ICAgIHNldEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0
YXRlOjpQcmV2ZW50ZWRBdXRvcGxheSk7CiAgICAgfQogCi0gICAgaWYgKHNob3VsZFVwZGF0ZURp
c3BsYXlTdGF0ZSkgeworICAgIGlmIChzaG91bGRVcGRhdGVEaXNwbGF5U3RhdGUpCiAgICAgICAg
IHVwZGF0ZURpc3BsYXlTdGF0ZSgpOwotICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKSB7
Ci0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnJlZnJlc2hDbG9zZWRDYXB0aW9uc0J1dHRv
blZpc2liaWxpdHkoKTsKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+dXBkYXRlU3RhdHVz
RGlzcGxheSgpOwotICAgICAgICB9Ci0gICAgfQogCiAgICAgdXBkYXRlUGxheVN0YXRlKCk7CiAg
ICAgdXBkYXRlTWVkaWFDb250cm9sbGVyKCk7CkBAIC0yODU1LDggKzI4MTMsNiBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnByb2dyZXNzRXZlbnRUaW1lckZpcmVkKCkKICAgICAgICAgbV9wcmV2
aW91c1Byb2dyZXNzVGltZSA9IHRpbWU7CiAgICAgICAgIG1fc2VudFN0YWxsZWRFdmVudCA9IGZh
bHNlOwogICAgICAgICB1cGRhdGVSZW5kZXJlcigpOwotICAgICAgICBpZiAoaGFzTWVkaWFDb250
cm9scygpKQotICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5idWZmZXJpbmdQcm9ncmVzc2Vk
KCk7CiAgICAgfSBlbHNlIGlmICh0aW1lZGVsdGEgPiAzX3MgJiYgIW1fc2VudFN0YWxsZWRFdmVu
dCkgewogICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5zdGFsbGVkRXZlbnQpOwog
ICAgICAgICBtX3NlbnRTdGFsbGVkRXZlbnQgPSB0cnVlOwpAQCAtMzc0MCw4ICszNjk2LDYgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRNdXRlZChib29sIG11dGVkKQogICAgICAgICBpZiAo
IXByb2Nlc3NpbmdNZWRpYVBsYXllckNhbGxiYWNrKCkpIHsKICAgICAgICAgICAgIGlmIChtX3Bs
YXllcikgewogICAgICAgICAgICAgICAgIG1fcGxheWVyLT5zZXRNdXRlZChlZmZlY3RpdmVNdXRl
ZCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICAg
ICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmNoYW5nZWRNdXRlKCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIApAQCAtMzkwOCw5ICszODYyLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpwbGF5YmFja1Byb2dyZXNzVGltZXJGaXJlZCgpCiAgICAgaWYgKCFyZXF1ZXN0ZWRQbGF5YmFj
a1JhdGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX3BhdXNlZCAmJiBoYXNNZWRp
YUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cGxheWJhY2tQcm9ncmVzc2Vk
KCk7Ci0KICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgdXBkYXRlQWN0aXZlVGV4dFRyYWNr
Q3VlcyhjdXJyZW50TWVkaWFUaW1lKCkpOwogI2VuZGlmCkBAIC00MDM2LDEyICszOTg3LDYgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllckRpZFJlbW92ZVZpZGVvVHJhY2soVmlk
ZW9UcmFja1ByaXZhdGUmIHRyYWNrKQogICAgIHRyYWNrLndpbGxCZVJlbW92ZWQoKTsKIH0KIAot
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjbG9zZUNhcHRpb25UcmFja3NDaGFuZ2VkKCkKLXsKLSAg
ICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmNsb3Nl
ZENhcHRpb25UcmFja3NDaGFuZ2VkKCk7Ci19Ci0KIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6YWRk
QXVkaW9UcmFjayhSZWY8QXVkaW9UcmFjaz4mJiB0cmFjaykKIHsKICNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKQEAgLTQwNjUsOCArNDAxMCw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6YWRk
VGV4dFRyYWNrKFJlZjxUZXh0VHJhY2s+JiYgdHJhY2spCiAgICAgfQogCiAgICAgZW5zdXJlVGV4
dFRyYWNrcygpLmFwcGVuZChXVEZNb3ZlKHRyYWNrKSk7Ci0KLSAgICBjbG9zZUNhcHRpb25UcmFj
a3NDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6YWRkVmlkZW9UcmFjayhS
ZWY8VmlkZW9UcmFjaz4mJiB0cmFjaykKQEAgLTQwOTEsOCArNDAzNCw2IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6cmVtb3ZlVGV4dFRyYWNrKFJlZjxUZXh0VHJhY2s+JiYgdHJhY2ssIGJvb2wg
c2NoZWR1bGVFdmVuCiAgICAgdHJhY2stPmNsZWFyQ2xpZW50KCk7CiAgICAgaWYgKG1fdGV4dFRy
YWNrcykKICAgICAgICAgbV90ZXh0VHJhY2tzLT5yZW1vdmUodHJhY2ssIHNjaGVkdWxlRXZlbnQp
OwotCi0gICAgY2xvc2VDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpOwogfQogCiB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnJlbW92ZVZpZGVvVHJhY2soUmVmPFZpZGVvVHJhY2s+JiYgdHJhY2spCkBAIC00
MTkzLDkgKzQxMzQsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZEFkZFRleHRUcmFjayhI
VE1MVHJhY2tFbGVtZW50JiB0cmFja0VsZW1lbnQpCiAgICAgLy8gaW4gdGhlIG1hcmt1cCBoYXZl
IGJlZW4gYWRkZWQuCiAgICAgaWYgKCFtX3BhcnNpbmdJblByb2dyZXNzKQogICAgICAgICBzY2hl
ZHVsZUNvbmZpZ3VyZVRleHRUcmFja3MoKTsKLQotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkp
Ci0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+Y2xvc2VkQ2FwdGlvblRyYWNrc0NoYW5nZWQoKTsK
IH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRSZW1vdmVUZXh0VHJhY2soSFRNTFRyYWNr
RWxlbWVudCYgdHJhY2tFbGVtZW50KQpAQCAtNDM1OSw3ICs0Mjk3LDkgQEAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb250cm9sbGVySlNWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LAogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmVuc3VyZU1lZGlhQ29udHJvbHNT
aGFkb3dSb290KCkKIHsKLSAgICBBU1NFUlQoIW1fY3JlYXRpbmdDb250cm9scyk7CisgICAgaWYg
KG1fY3JlYXRpbmdDb250cm9scykKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9jcmVhdGluZ0Nv
bnRyb2xzID0gdHJ1ZTsKICAgICBlbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KCk7CiAgICAgbV9j
cmVhdGluZ0NvbnRyb2xzID0gZmFsc2U7CkBAIC00Mzg3LDcgKzQzMjcsNiBAQCBib29sIEhUTUxN
ZWRpYUVsZW1lbnQ6OnNldHVwQW5kQ2FsbEpTKGNvbnN0IEpTU2V0dXBGdW5jdGlvbiYgdGFzaykK
IAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVDYXB0aW9uQ29udGFpbmVyKCkKIHsKLSNp
ZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChtX2hhdmVTZXRVcENhcHRp
b25Db250YWluZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDQzMiwxMyArNDM3MSwxMCBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUNhcHRpb25Db250YWluZXIoKQogCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0pOwotCi0jZW5kaWYKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpsYXlvdXRTaXplQ2hhbmdlZCgpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKICAgICBpZiAoYXV0byBmcmFtZVZpZXcgPSBtYWtlUmVmUHRyKGRvY3VtZW50KCkudmll
dygpKSkgewogICAgICAgICBhdXRvIHRhc2sgPSBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSB7CiAgICAgICAgICAgICBpZiAoYXV0byByb290ID0gdXNlckFnZW50U2hhZG93
Um9vdCgpKQpAQCAtNDQ0Niw3ICs0MzgyLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpsYXlv
dXRTaXplQ2hhbmdlZCgpCiAgICAgICAgIH07CiAgICAgICAgIGZyYW1lVmlldy0+cXVldWVQb3N0
TGF5b3V0Q2FsbGJhY2soV1RGTW92ZSh0YXNrKSk7CiAgICAgfQotI2VuZGlmCiAKICAgICBpZiAo
IW1fcmVjZWl2ZWRMYXlvdXRTaXplQ2hhbmdlZCkgewogICAgICAgICBtX3JlY2VpdmVkTGF5b3V0
U2l6ZUNoYW5nZWQgPSB0cnVlOwpAQCAtNDU4Niw4ICs0NTIxLDYgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50Ojpjb25maWd1cmVUZXh0VHJhY2tzKCkKIAogICAgIHVwZGF0ZUNhcHRpb25Db250YWlu
ZXIoKTsKICAgICBjb25maWd1cmVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0gICAgaWYgKGhhc01lZGlh
Q29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5jbG9zZWRDYXB0aW9uVHJhY2tz
Q2hhbmdlZCgpOwogfQogI2VuZGlmCiAKQEAgLTUxNTQsOCArNTA4Nyw2IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJDaGFyYWN0ZXJpc3RpY0NoYW5nZWQoKQogICAgICAgICBt
ZWRpYVBsYXllclJlbmRlcmluZ01vZGVDaGFuZ2VkKCk7CiAgICAgfQogCi0gICAgaWYgKGhhc01l
ZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5yZXNldCgpOwogICAgIHVw
ZGF0ZVJlbmRlcmVyKCk7CiAKICAgICBpZiAoIXBhdXNlZCgpICYmICFtX21lZGlhU2Vzc2lvbi0+
cGxheWJhY2tQZXJtaXR0ZWQoKSkgewpAQCAtNTM1MCw5ICs1MjgxLDcgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50Ojp1cGRhdGVWb2x1bWUoKQogICAgIGRvY3VtZW50KCkudXBkYXRlSXNQbGF5aW5n
TWVkaWEoKTsKICNlbmRpZgogCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAg
bWVkaWFDb250cm9scygpLT5jaGFuZ2VkVm9sdW1lKCk7Ci0jZW5kaWYKKyNlbmRpZiAvLyBQTEFU
Rk9STShJT1NfRkFNSUxZKQogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNjaGVkdWxlVXBk
YXRlUGxheVN0YXRlKCkKQEAgLTUzODAsOCArNTMwOSw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6dXBkYXRlUGxheVN0YXRlKCkKICAgICAgICAgICAgIG1fcGxheWVyLT5wYXVzZSgpOwogICAg
ICAgICByZWZyZXNoQ2FjaGVkVGltZSgpOwogICAgICAgICBtX3BsYXliYWNrUHJvZ3Jlc3NUaW1l
ci5zdG9wKCk7Ci0gICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBt
ZWRpYUNvbnRyb2xzKCktPnBsYXliYWNrU3RvcHBlZCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC01NDI1LDkgKzUzNTIsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBs
YXlTdGF0ZSgpCiAgICAgICAgICAgICBtX3BsYXllci0+cGxheSgpOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbHMo
KS0+cGxheWJhY2tTdGFydGVkKCk7Ci0KICAgICAgICAgc3RhcnRQbGF5YmFja1Byb2dyZXNzVGlt
ZXIoKTsKICAgICAgICAgc2V0UGxheWluZyh0cnVlKTsKICAgICB9IGVsc2UgewpAQCAtNTQ0NSw5
ICs1MzY5LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUoKQogCiAg
ICAgICAgIGlmIChjb3VsZFBsYXlJZkVub3VnaERhdGEoKSkKICAgICAgICAgICAgIHByZXBhcmVU
b1BsYXkoKTsKLQotICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICAgICAg
bWVkaWFDb250cm9scygpLT5wbGF5YmFja1N0b3BwZWQoKTsKICAgICB9CiAKICAgICB1cGRhdGVN
ZWRpYUNvbnRyb2xsZXIoKTsKQEAgLTYwNzMsOCArNTk5NCw2IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6ZW50ZXJGdWxsc2NyZWVuKFZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKIAogICAgICAg
ICBmdWxsc2NyZWVuTW9kZUNoYW5nZWQobW9kZSk7CiAgICAgICAgIGNvbmZpZ3VyZU1lZGlhQ29u
dHJvbHMoKTsKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1l
ZGlhQ29udHJvbHMoKS0+ZW50ZXJlZEZ1bGxzY3JlZW4oKTsKICAgICAgICAgaWYgKGlzPEhUTUxW
aWRlb0VsZW1lbnQ+KCp0aGlzKSkgewogICAgICAgICAgICAgSFRNTFZpZGVvRWxlbWVudCYgYXNW
aWRlbyA9IGRvd25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KCp0aGlzKTsKICAgICAgICAgICAgIGlm
IChkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuc3VwcG9ydHNWaWRlb0Z1bGxz
Y3JlZW4obV92aWRlb0Z1bGxzY3JlZW5Nb2RlKSkgewpAQCAtNjExMCwxMiArNjAyOSw4IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6ZXhpdEZ1bGxzY3JlZW4oKQogICAgIEFTU0VSVChtX3ZpZGVv
RnVsbHNjcmVlbk1vZGUgIT0gVmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwogICAgIFZpZGVvRnVs
bHNjcmVlbk1vZGUgb2xkVmlkZW9GdWxsc2NyZWVuTW9kZSA9IG1fdmlkZW9GdWxsc2NyZWVuTW9k
ZTsKICAgICBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoVmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwot
I2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgUmVmPEhUTUxNZWRpYUVsZW1l
bnQ+IHByb3RlY3RlZFRoaXMoKnRoaXMpOyAvLyB1cGRhdGVNZWRpYUNvbnRyb2xzQWZ0ZXJQcmVz
ZW50YXRpb25Nb2RlQ2hhbmdlIGNhbGxzIG1ldGhvZHMgdGhhdCBjYW4gdHJpZ2dlciBhcmJpdHJh
cnkgRE9NIG11dGF0aW9ucy4KICAgICB1cGRhdGVNZWRpYUNvbnRyb2xzQWZ0ZXJQcmVzZW50YXRp
b25Nb2RlQ2hhbmdlKCk7Ci0jZW5kaWYKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAg
ICAgICBtZWRpYUNvbnRyb2xzKCktPmV4aXRlZEZ1bGxzY3JlZW4oKTsKIAogICAgIGlmICghZG9j
dW1lbnQoKS5wYWdlKCkgfHwgIWlzPEhUTUxWaWRlb0VsZW1lbnQ+KCp0aGlzKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNjE5OCwxNiArNjExMywxMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRp
ZEJlY29tZUZ1bGxzY3JlZW5FbGVtZW50KCkKIHsKICAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVS
LCAiLCBmdWxsc2NyZWVuIG1vZGUgPSAiLCBmdWxsc2NyZWVuTW9kZSgpKTsKICAgICBtX3dhaXRp
bmdUb0VudGVyRnVsbHNjcmVlbiA9IGZhbHNlOwotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkp
Ci0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+ZW50ZXJlZEZ1bGxzY3JlZW4oKTsKICAgICBzY2hl
ZHVsZVVwZGF0ZVBsYXlTdGF0ZSgpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OndpbGxT
dG9wQmVpbmdGdWxsc2NyZWVuRWxlbWVudCgpCiB7Ci0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMo
KSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5leGl0ZWRGdWxsc2NyZWVuKCk7Ci0KICAgICBp
ZiAoZnVsbHNjcmVlbk1vZGUoKSA9PSBWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpCiAgICAg
ICAgIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CiB9CkBA
IC02MzQ4LDE5ICs2MjU4LDExIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrUmVh
ZHlTdGF0ZUNoYW5nZWQoVGV4dFRyYWNrKiB0cmFjaykKICAgICAgICAgLy8gVGhlIGRpc3BsYXkg
dHJlZXMgZXhpc3QgYXMgbG9uZyBhcyB0aGUgdHJhY2sgaXMgYWN0aXZlLCBpbiB0aGlzIGNhc2Us
CiAgICAgICAgIC8vIGFuZCBpZiB0aGUgc2FtZSB0cmFjayBpcyBsb2FkZWQgYWdhaW4gKGZvciBl
eGFtcGxlIGlmIHRoZSBzcmMgYXR0cmlidXRlIHdhcyBjaGFuZ2VkKSwKICAgICAgICAgLy8gY3Vl
cyBjYW4gYmUgYWNjdW11bGF0ZWQgd2l0aCB0aGUgb2xkIG9uZXMsIHRoYXQncyB3aHkgdGhleSBu
ZWVkcyB0byBiZSBmbHVzaGVkCi0gICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAg
ICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmNsZWFyVGV4dERpc3BsYXlDb250YWluZXIoKTsKICAg
ICAgICAgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwogICAgIH0KICAgICBpZiAobV9wbGF5ZXIg
JiYgbV90ZXh0VHJhY2tzV2hlblJlc291cmNlU2VsZWN0aW9uQmVnYW4uY29udGFpbnModHJhY2sp
KSB7CiAgICAgICAgIGlmICh0cmFjay0+cmVhZGluZXNzU3RhdGUoKSAhPSBUZXh0VHJhY2s6Okxv
YWRpbmcpCiAgICAgICAgICAgICBzZXRSZWFkeVN0YXRlKG1fcGxheWVyLT5yZWFkeVN0YXRlKCkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFRoZSB0cmFjayByZWFkaW5lc3Mgc3RhdGUgbWln
aHQgaGF2ZSBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIHRoZSB1c2VyCi0gICAgICAgIC8vIGNsaWNr
aW5nIHRoZSBjYXB0aW9ucyBidXR0b24uIEluIHRoaXMgY2FzZSwgYSBjaGVjayB3aGV0aGVyIGFs
bCB0aGUKLSAgICAgICAgLy8gcmVzb3VyY2VzIGhhdmUgZmFpbGVkIGxvYWRpbmcgc2hvdWxkIGJl
IGRvbmUgaW4gb3JkZXIgdG8gaGlkZSB0aGUgQ0MgYnV0dG9uLgotICAgICAgICBpZiAoaGFzTWVk
aWFDb250cm9scygpICYmIHRyYWNrLT5yZWFkaW5lc3NTdGF0ZSgpID09IFRleHRUcmFjazo6RmFp
bGVkVG9Mb2FkKQotICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5yZWZyZXNoQ2xvc2VkQ2Fw
dGlvbnNCdXR0b25WaXNpYmlsaXR5KCk7CiAgICAgfQogfQogCkBAIC02MzkxLDUxICs2MjkzLDI3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlVGV4dFRyYWNrRGlzcGxheShUZXh0
VHJhY2tWaXNpYmlsaXR5Q2hlY2tUeXBlIGNoCiAgICAgbV9oYXZlVmlzaWJsZVRleHRUcmFjayA9
IGhhdmVWaXNpYmxlVGV4dFRyYWNrOwogICAgIG1fY2xvc2VkQ2FwdGlvbnNWaXNpYmxlID0gbV9o
YXZlVmlzaWJsZVRleHRUcmFjazsKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQp
CiAgICAgaWYgKCFtX2hhdmVWaXNpYmxlVGV4dFRyYWNrKQogICAgICAgICByZXR1cm47CiAKICAg
ICBlbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpOwogICAgIHVwZGF0ZVRleHRUcmFja0Rp
c3BsYXkoKTsKLSNlbHNlCi0gICAgaWYgKCFtX2hhdmVWaXNpYmxlVGV4dFRyYWNrICYmICFoYXNN
ZWRpYUNvbnRyb2xzKCkgJiYgIWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbWVkaWFDb250cm9scygpLT5jaGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5
KCk7Ci0KLSAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0gICAgdXBkYXRlQWN0aXZlVGV4
dFRyYWNrQ3VlcyhjdXJyZW50TWVkaWFUaW1lKCkpOwotI2VuZGlmCiB9CiAKIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpCiB7Ci0jaWYgRU5BQkxFKE1FRElB
X0NPTlRST0xTX1NDUklQVCkKICAgICBlbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpOwog
ICAgIGlmICghbV9tZWRpYUNvbnRyb2xzSG9zdCkKICAgICAgICAgbV9tZWRpYUNvbnRyb2xzSG9z
dCA9IE1lZGlhQ29udHJvbHNIb3N0OjpjcmVhdGUoKnRoaXMpOwogICAgIG1fbWVkaWFDb250cm9s
c0hvc3QtPnVwZGF0ZVRleHRUcmFja0NvbnRhaW5lcigpOwotI2Vsc2UKLSAgICBpZiAoIWhhc01l
ZGlhQ29udHJvbHMoKSAmJiAhY3JlYXRlTWVkaWFDb250cm9scygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtZWRpYUNvbnRyb2xzKCktPnVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKLSNlbmRp
ZgogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0
aW9uSW1hZ2VJZk5lZWRlZCgpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkK
ICAgICBlbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpOwogICAgIGlmICghbV9tZWRpYUNv
bnRyb2xzSG9zdCkKICAgICAgICAgbV9tZWRpYUNvbnRyb2xzSG9zdCA9IE1lZGlhQ29udHJvbHNI
b3N0OjpjcmVhdGUoKnRoaXMpOwogICAgIG1fbWVkaWFDb250cm9sc0hvc3QtPnVwZGF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgpOwotI2Vsc2UKLSAgICBpZiAoIWhhc01l
ZGlhQ29udHJvbHMoKSAmJiAhY3JlYXRlTWVkaWFDb250cm9scygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtZWRpYUNvbnRyb2xzKCktPnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1h
Z2VJZk5lZWRlZCgpOwotI2VuZGlmCiB9CiAKICNlbmRpZgpAQCAtNjQ1Niw4ICs2MzM0LDYgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCBjbG9z
ZWRDYXB0aW9uVmlzaWJsZSkKICAgICBtYXJrQ2FwdGlvbkFuZFN1YnRpdGxlVHJhY2tzQXNVbmNv
bmZpZ3VyZWQoSW1tZWRpYXRlbHkpOwogICAgIHVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKICNl
bHNlCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygp
LT5jaGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5KCk7CiAjZW5kaWYKIH0KIApAQCAtNjU3
Niw2MiArNjQ1Miw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cHJpdmF0ZUJyb3dzaW5nU3Rh
dGVEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogI2VuZGlmCiB9CiAKLU1lZGlh
Q29udHJvbHMqIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhQ29udHJvbHMoKSBjb25zdAotewotI2lm
IEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0gICAgcmV0dXJuIG51bGxwdHI7Ci0jZWxz
ZQotICAgIGF1dG8gcm9vdCA9IHVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBpZiAoIXJvb3Qp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGNoaWxkcmVuT2ZUeXBlPE1l
ZGlhQ29udHJvbHM+KCpyb290KS5maXJzdCgpOwotI2VuZGlmCi19Ci0KLWJvb2wgSFRNTE1lZGlh
RWxlbWVudDo6aGFzTWVkaWFDb250cm9scygpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKE1FRElBX0NP
TlRST0xTX1NDUklQVCkKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotCi0gICAgaWYgKGF1dG8g
dXNlckFnZW50ID0gdXNlckFnZW50U2hhZG93Um9vdCgpKSB7Ci0gICAgICAgIFJlZlB0cjxOb2Rl
PiBub2RlID0gY2hpbGRyZW5PZlR5cGU8TWVkaWFDb250cm9scz4oKnJvb3QpLmZpcnN0KCk7Ci0g
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlIHx8IG5vZGUtPmlz
TWVkaWFDb250cm9scygpKTsKLSAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wgSFRNTE1lZGlhRWxlbWVudDo6Y3JlYXRlTWVk
aWFDb250cm9scygpCi17Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLSAgICBl
bnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbHNl
Ci0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBhdXRvIG1lZGlhQ29udHJvbHMgPSBNZWRpYUNvbnRyb2xzOjpjcmVhdGUoZG9jdW1lbnQoKSk7
Ci0gICAgaWYgKCFtZWRpYUNvbnRyb2xzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBt
ZWRpYUNvbnRyb2xzLT5zZXRNZWRpYUNvbnRyb2xsZXIobV9tZWRpYUNvbnRyb2xsZXIgPyBtX21l
ZGlhQ29udHJvbGxlci5nZXQoKSA6IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbGxlckludGVyZmFj
ZSo+KHRoaXMpKTsKLSAgICBtZWRpYUNvbnRyb2xzLT5yZXNldCgpOwotICAgIGlmIChpc0Z1bGxz
Y3JlZW4oKSkKLSAgICAgICAgbWVkaWFDb250cm9scy0+ZW50ZXJlZEZ1bGxzY3JlZW4oKTsKLQot
ICAgIGVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKS5hcHBlbmRDaGlsZChtZWRpYUNvbnRyb2xz
KTsKLQotICAgIGlmICghY29udHJvbHMoKSB8fCAhaXNDb25uZWN0ZWQoKSkKLSAgICAgICAgbWVk
aWFDb250cm9scy0+aGlkZSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLX0KLQogYm9v
bCBIVE1MTWVkaWFFbGVtZW50OjpzaG91bGRGb3JjZUNvbnRyb2xzRGlzcGxheSgpIGNvbnN0CiB7
CiAgICAgLy8gQWx3YXlzIGNyZWF0ZSBjb250cm9scyBmb3IgYXV0b3BsYXkgdmlkZW8gdGhhdCBy
ZXF1aXJlcyB1c2VyIGdlc3R1cmUgZHVlIHRvIGJlaW5nIGluIGxvdyBwb3dlciBtb2RlLgpAQCAt
NjY1OCwyMyArNjQ3OCwxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZU1lZGlh
Q29udHJvbHMoKQogICAgICAgICByZXF1aXJlQ29udHJvbHMgPSB0cnVlOwogI2VuZGlmCiAKLSNp
ZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmICghcmVxdWlyZUNvbnRyb2xz
IHx8ICFpc0Nvbm5lY3RlZCgpIHx8ICFpbkFjdGl2ZURvY3VtZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGVuc3VyZU1lZGlhQ29udHJvbHNTaGFkb3dSb290KCk7Ci0jZWxzZQotICAgIGlm
ICghcmVxdWlyZUNvbnRyb2xzIHx8ICFpc0Nvbm5lY3RlZCgpIHx8ICFpbkFjdGl2ZURvY3VtZW50
KCkpIHsKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlh
Q29udHJvbHMoKS0+aGlkZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFo
YXNNZWRpYUNvbnRyb2xzKCkgJiYgIWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbWVkaWFDb250cm9scygpLT5zaG93KCk7Ci0jZW5kaWYKIH0KIAogI2lmIEVO
QUJMRShWSURFT19UUkFDSykKQEAgLTY2ODQsMTMgKzY0OTEsOCBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKQogICAgIGlmICghaXNWaWRlbygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICBt
ZWRpYUNvbnRyb2xzKCktPnRleHRUcmFja1ByZWZlcmVuY2VzQ2hhbmdlZCgpOwotCi0jaWYgRU5B
QkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAobV9tZWRpYUNvbnRyb2xzSG9zdCkK
ICAgICAgICAgbV9tZWRpYUNvbnRyb2xzSG9zdC0+dXBkYXRlQ2FwdGlvbkRpc3BsYXlTaXplcyhN
ZWRpYUNvbnRyb2xzSG9zdDo6Rm9yY2VVcGRhdGU6Olllcyk7Ci0jZW5kaWYKIAogICAgIGlmICht
X3BsYXllcikKICAgICAgICAgbV9wbGF5ZXItPnRyYWNrc0NoYW5nZWQoKTsKQEAgLTY4NjgsOSAr
NjY3MCw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0Q29udHJvbGxlcihSZWZQdHI8TWVk
aWFDb250cm9sbGVyPiYmIGNvbnRyb2xsZXIpCiAKICAgICBpZiAobV9tZWRpYUNvbnRyb2xsZXIp
CiAgICAgICAgIG1fbWVkaWFDb250cm9sbGVyLT5hZGRNZWRpYUVsZW1lbnQoKnRoaXMpOwotCi0g
ICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5zZXRN
ZWRpYUNvbnRyb2xsZXIobV9tZWRpYUNvbnRyb2xsZXIgPyBtX21lZGlhQ29udHJvbGxlci5nZXQo
KSA6IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbGxlckludGVyZmFjZSo+KHRoaXMpKTsKIH0KIAog
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRDb250cm9sbGVyRm9yQmluZGluZ3MoTWVkaWFDb250
cm9sbGVyKiBjb250cm9sbGVyKQpAQCAtNzMxMCw3ICs3MTA5LDYgQEAgUmVmUHRyPFZpZGVvUGxh
eWJhY2tRdWFsaXR5PiBIVE1MTWVkaWFFbGVtZW50OjpnZXRWaWRlb1BsYXliYWNrUXVhbGl0eSgp
CiAgICAgcmV0dXJuIFZpZGVvUGxheWJhY2tRdWFsaXR5OjpjcmVhdGUodGltZXN0YW1wLCBtZXRy
aWNzLnZhbHVlKCkpOwogfQogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKIERP
TVdyYXBwZXJXb3JsZCYgSFRNTE1lZGlhRWxlbWVudDo6ZW5zdXJlSXNvbGF0ZWRXb3JsZCgpCiB7
CiAgICAgaWYgKCFtX2lzb2xhdGVkV29ybGQpCkBAIC03NTY5LDcgKzczNjcsNiBAQCBTdHJpbmcg
SFRNTE1lZGlhRWxlbWVudDo6Z2V0Q3VycmVudE1lZGlhQ29udHJvbHNTdGF0dXMoKQogCiAgICAg
cmV0dXJuIHN0YXR1czsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBU
KQogCiB1bnNpZ25lZCBsb25nIGxvbmcgSFRNTE1lZGlhRWxlbWVudDo6ZmlsZVNpemUoKSBjb25z
dAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCBmY2Q4ZWRmYWJj
Mjg1ODYyNDM5MjAyMjc5MzgzYTA4MzJkZDhkMmNiLi4xYTcyOWY0MDkxYWNkZmNmNzY1YzBiZjU2
OTE2NjI1YzI1YTIzZmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApA
QCAtNDQ3LDggKzQ0Nyw2IEBAIHB1YmxpYzoKICAgICBib29sIGNsb3NlZENhcHRpb25zVmlzaWJs
ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJv
b2wpIG92ZXJyaWRlOwogCi0gICAgTWVkaWFDb250cm9scyogbWVkaWFDb250cm9scygpIGNvbnN0
OwotCiAgICAgdm9pZCBzb3VyY2VXYXNSZW1vdmVkKEhUTUxTb3VyY2VFbGVtZW50Jik7CiAgICAg
dm9pZCBzb3VyY2VXYXNBZGRlZChIVE1MU291cmNlRWxlbWVudCYpOwogCkBAIC01MDgsMTMgKzUw
NiwxMCBAQCBwdWJsaWM6CiAgICAgTWVkaWFQbGF5ZXI6OlByZWxvYWQgcHJlbG9hZFZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV9wcmVsb2FkOyB9CiAgICAgTWVkaWFFbGVtZW50U2Vzc2lvbiYgbWVk
aWFTZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gKm1fbWVkaWFTZXNzaW9uOyB9CiAKLSNpZiBFTkFC
TEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIHZvaWQgcGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZCgpOwogICAgIHZvaWQgdXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkNoYW5nZWQoKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZ2V0Q3VycmVudE1lZGlhQ29udHJvbHNTdGF0dXMoKTsK
LQogICAgIE1lZGlhQ29udHJvbHNIb3N0KiBtZWRpYUNvbnRyb2xzSG9zdCgpIHsgcmV0dXJuIG1f
bWVkaWFDb250cm9sc0hvc3QuZ2V0KCk7IH0KLSNlbmRpZgogCiAgICAgYm9vbCBpc0Rpc2FibGlu
Z1NsZWVwKCkgY29uc3QgeyByZXR1cm4gbV9zbGVlcERpc2FibGVyLmdldCgpOyB9CiAKQEAgLTYx
MywxMSArNjA4LDkgQEAgcHJvdGVjdGVkOgogCiAgICAgU2VjdXJpdHlPcmlnaW5EYXRhIGRvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4oKSBjb25zdCBmaW5hbDsKIAotI2lmIEVOQUJMRShNRURJQV9DT05U
Uk9MU19TQ1JJUFQpCiAgICAgYm9vbCBtZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0
b3IoKSBjb25zdCB7IHJldHVybiBtX21lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3Rv
cjsgfQogICAgIHZvaWQgc2V0TWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKGJv
b2wpOwogICAgIHZvaWQgdXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJlc2VudGF0aW9uTW9kZUNo
YW5nZSgpOwotI2VuZGlmCiAKICAgICB2b2lkIHNjaGVkdWxlRXZlbnQoY29uc3QgQXRvbVN0cmlu
ZyYpOwogCkBAIC04NTIsOCArODQ1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGludmFsaWRhdGVD
YWNoZWRUaW1lKCkgY29uc3Q7CiAgICAgdm9pZCByZWZyZXNoQ2FjaGVkVGltZSgpIGNvbnN0Owog
Ci0gICAgYm9vbCBoYXNNZWRpYUNvbnRyb2xzKCkgY29uc3Q7Ci0gICAgYm9vbCBjcmVhdGVNZWRp
YUNvbnRyb2xzKCk7CiAgICAgdm9pZCBjb25maWd1cmVNZWRpYUNvbnRyb2xzKCk7CiAKICAgICB2
b2lkIHByZXBhcmVNZWRpYUZyYWdtZW50VVJJKCk7CkBAIC04NzMsMTEgKzg2NCw5IEBAIHByaXZh
dGU6CiAgICAgZW51bSBjbGFzcyBTbGVlcFR5cGUgeyBOb25lLCBEaXNwbGF5LCBTeXN0ZW0gfTsK
ICAgICBTbGVlcFR5cGUgc2hvdWxkRGlzYWJsZVNsZWVwKCkgY29uc3Q7CiAKLSNpZiBFTkFCTEUo
TUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9v
dChTaGFkb3dSb290Jikgb3ZlcnJpZGU7CiAgICAgRE9NV3JhcHBlcldvcmxkJiBlbnN1cmVJc29s
YXRlZFdvcmxkKCk7CiAgICAgYm9vbCBlbnN1cmVNZWRpYUNvbnRyb2xzSW5qZWN0ZWRTY3JpcHQo
KTsKLSNlbmRpZgogCiAgICAgUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1lZGlhVHlwZSBtZWRpYVR5
cGUoKSBjb25zdCBvdmVycmlkZTsKICAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBl
IHByZXNlbnRhdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZTsKQEAgLTExMTUsMTAgKzExMDQsOCBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNFdmVySGFkQXVkaW8gOiAxOwogICAgIGJvb2wgbV9o
YXNFdmVySGFkVmlkZW8gOiAxOwogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkK
ICAgICBib29sIG1fbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yIDogMTsKICAg
ICBib29sIG1faGF2ZVNldFVwQ2FwdGlvbkNvbnRhaW5lciA6IDE7Ci0jZW5kaWYKIAogICAgIGJv
b2wgbV9pc1NjcnViYmluZ1JlbW90ZWx5IDogMTsKICAgICBib29sIG1fd2FpdGluZ1RvRW50ZXJG
dWxsc2NyZWVuIDogMTsKQEAgLTExOTIsMTEgKzExNzksOSBAQCBwcml2YXRlOgogICAgIGNvbnN0
IHZvaWQqIG1fbG9nSWRlbnRpZmllcjsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRS
T0xTX1NDUklQVCkKICAgICBmcmllbmQgY2xhc3MgTWVkaWFDb250cm9sc0hvc3Q7CiAgICAgUmVm
UHRyPE1lZGlhQ29udHJvbHNIb3N0PiBtX21lZGlhQ29udHJvbHNIb3N0OwogICAgIFJlZlB0cjxE
T01XcmFwcGVyV29ybGQ+IG1faXNvbGF0ZWRXb3JsZDsKLSNlbmRpZgogCiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKICAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IG1fbWVkaWFTdHJlYW1TcmNPYmpl
Y3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xF
bGVtZW50VHlwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
RWxlbWVudFR5cGVzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FiODJhMTgw
MDEzMjA2OTdiMDJjYWQ5NjJlOGViMTg2NTI0YmFlNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNv
bnRyb2xFbGVtZW50VHlwZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjU1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCi0jaW5jbHVkZSAi
TWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmgiCi0KLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRz
LmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2lu
Y2x1ZGUgIk1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJNZWRpYS5oIgotI2luY2x1ZGUg
IlJlbmRlck1lZGlhQ29udHJvbHMuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKLSNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xEaXZFbGVtZW50KTsKLVdU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQpOwotV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudCk7
Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1l
bnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFNlZWtCdXR0b25F
bGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xWb2x1bWVT
bGlkZXJFbGVtZW50KTsKLQotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotY2xhc3MgRXZl
bnQ7Ci0KLVJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBwYXJlbnRNZWRpYUVsZW1lbnQoY29uc3Qg
Tm9kZSogbm9kZSkKLXsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIFJlZlB0cjxOb2RlPiBtZWRpYU5vZGUgPSBub2RlLT5zaGFkb3dIb3N0KCk7Ci0gICAgaWYg
KCFtZWRpYU5vZGUpCi0gICAgICAgIG1lZGlhTm9kZSA9IGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUp
OwotICAgIGlmICghaXM8SFRNTE1lZGlhRWxlbWVudD4oKm1lZGlhTm9kZSkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiBkb3duY2FzdDxIVE1MTWVkaWFFbGVtZW50PihtZWRp
YU5vZGUuZ2V0KCkpOwotfQotCi1NZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBtZWRpYUNvbnRyb2xF
bGVtZW50VHlwZShOb2RlKiBub2RlKQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKG5vZGUtPmlzTWVkaWFDb250cm9sRWxlbWVudCgpKTsKLSAgICBpZiAoaXM8SFRNTElu
cHV0RWxlbWVudD4oKm5vZGUpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWVkaWFDb250
cm9sSW5wdXRFbGVtZW50Kj4obm9kZSktPmRpc3BsYXlUeXBlKCk7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PE1lZGlhQ29udHJvbERpdkVsZW1lbnQqPihub2RlKS0+ZGlzcGxheVR5cGUoKTsKLX0K
LQotTWVkaWFDb250cm9sRWxlbWVudDo6TWVkaWFDb250cm9sRWxlbWVudChNZWRpYUNvbnRyb2xF
bGVtZW50VHlwZSBkaXNwbGF5VHlwZSwgSFRNTEVsZW1lbnQqIGVsZW1lbnQpCi0gICAgOiBtX21l
ZGlhQ29udHJvbGxlcigwKQotICAgICwgbV9kaXNwbGF5VHlwZShkaXNwbGF5VHlwZSkKLSAgICAs
IG1fZWxlbWVudChlbGVtZW50KQotewotfQotCi12b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6Omhp
ZGUoKQotewotICAgIG1fZWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eURpc3BsYXksIENTU1ZhbHVlTm9uZSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6
c2hvdygpCi17Ci0gICAgbV9lbGVtZW50LT5yZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5RGlzcGxheSk7Ci19Ci0KLWJvb2wgTWVkaWFDb250cm9sRWxlbWVudDo6aXNTaG93aW5n
KCkgY29uc3QKLXsKLSAgICBjb25zdCBTdHlsZVByb3BlcnRpZXMqIHByb3BlcnR5U2V0ID0gbV9l
bGVtZW50LT5pbmxpbmVTdHlsZSgpOwotICAgIC8vIEZvbGxvd2luZyB0aGUgY29kZSBmcm9tIHNo
b3coKSBhbmQgaGlkZSgpIGFib3ZlLCB3ZSBvbmx5IGhhdmUKLSAgICAvLyB0byBjaGVjayBmb3Ig
dGhlIHByZXNlbnNlIG9mIGlubGluZSBkaXNwbGF5LgotICAgIHJldHVybiAoIXByb3BlcnR5U2V0
IHx8ICFwcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eURpc3BsYXkp
KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50OjpzZXREaXNwbGF5VHlwZShNZWRpYUNv
bnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSkKLXsKLSAgICBpZiAoZGlzcGxheVR5cGUgPT0g
bV9kaXNwbGF5VHlwZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kaXNwbGF5VHlwZSA9IGRp
c3BsYXlUeXBlOwotICAgIGlmIChhdXRvIG9iamVjdCA9IG1fZWxlbWVudC0+cmVuZGVyZXIoKSkK
LSAgICAgICAgb2JqZWN0LT5yZXBhaW50KCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotTWVkaWFDb250cm9sRGl2RWxlbWVudDo6TWVkaWFDb250cm9sRGl2RWxlbWVu
dChEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBl
KQotICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBkb2N1bWVudCkKLSAgICAsIE1lZGlhQ29u
dHJvbEVsZW1lbnQoZGlzcGxheVR5cGUsIHRoaXMpCi17Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpNZWRpYUNvbnRyb2xJ
bnB1dEVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBk
aXNwbGF5VHlwZSkKLSAgICA6IEhUTUxJbnB1dEVsZW1lbnQoaW5wdXRUYWcsIGRvY3VtZW50LCAw
LCBmYWxzZSkKLSAgICAsIE1lZGlhQ29udHJvbEVsZW1lbnQoZGlzcGxheVR5cGUsIHRoaXMpCi17
Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sVGlt
ZURpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQm
IGRvY3VtZW50LCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSkKLSAgICA6IE1l
ZGlhQ29udHJvbERpdkVsZW1lbnQoZG9jdW1lbnQsIGRpc3BsYXlUeXBlKQotICAgICwgbV9jdXJy
ZW50VmFsdWUoMCkKLXsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ6
OnNldEN1cnJlbnRWYWx1ZShkb3VibGUgdGltZSkKLXsKLSAgICBtX2N1cnJlbnRWYWx1ZSA9IHRp
bWU7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9s
TXV0ZUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50KERvY3VtZW50
JiBkb2N1bWVudCwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUpCi0gICAgOiBN
ZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIGRpc3BsYXlUeXBlKQotewotfQotCi12
b2lkIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50JiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlj
a0V2ZW50KSB7Ci0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5zZXRNdXRlZCghbWVkaWFDb250
cm9sbGVyKCktPm11dGVkKCkpOwotICAgICAgICBldmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwot
ICAgIH0KLQotICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQp
OwotfQotCi12b2lkIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50OjpjaGFuZ2VkTXV0ZSgp
Ci17Ci0gICAgdXBkYXRlRGlzcGxheVR5cGUoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xNdXRl
QnV0dG9uRWxlbWVudDo6dXBkYXRlRGlzcGxheVR5cGUoKQotewotICAgIHNldERpc3BsYXlUeXBl
KG1lZGlhQ29udHJvbGxlcigpLT5tdXRlZCgpID8gTWVkaWFVbk11dGVCdXR0b24gOiBNZWRpYU11
dGVCdXR0b24pOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlh
Q29udHJvbFNlZWtCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudChE
b2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKQot
ICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KGRvY3VtZW50LCBkaXNwbGF5VHlwZSkKLXsK
LX0KLQotdm9pZCBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgLy8gU2V0IHRoZSBtb3VzZWRvd24gYW5kIG1vdXNl
dXAgZXZlbnRzIGFzIGRlZmF1bHRIYW5kbGVkIHNvIHRoZXkKLSAgICAvLyBkbyBub3QgdHJpZ2dl
ciBkcmFnIHN0YXJ0IG9yIGVuZCBhY3Rpb25zIGluIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudC4K
LSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCB8fCBl
dmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKLSAgICAgICAgZXZlbnQu
c2V0RGVmYXVsdEhhbmRsZWQoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxl
bWVudDo6c2V0QWN0aXZlKGJvb2wgZmxhZywgYm9vbCBwYXVzZSkKLXsKLSAgICBpZiAoZmxhZyA9
PSBhY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGZsYWcpCi0gICAgICAgIG1l
ZGlhQ29udHJvbGxlcigpLT5iZWdpblNjYW5uaW5nKGlzRm9yd2FyZEJ1dHRvbigpID8gTWVkaWFD
b250cm9sbGVySW50ZXJmYWNlOjpGb3J3YXJkIDogTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpC
YWNrd2FyZCk7Ci0gICAgZWxzZQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+ZW5kU2Nhbm5p
bmcoKTsKLQotICAgIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6c2V0QWN0aXZlKGZsYWcsIHBh
dXNlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRy
b2xWb2x1bWVTbGlkZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KERv
Y3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1bWVu
dCwgTWVkaWFWb2x1bWVTbGlkZXIpCi0gICAgLCBtX2NsZWFyTXV0ZWRPblVzZXJJbnRlcmFjdGlv
bihmYWxzZSkKLXsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSAgICAvLyBMZWZ0IGJ1dHRvbiBp
cyAwLiBSZWplY3RzIG1vdXNlIGV2ZW50cyBub3QgZnJvbSBsZWZ0IGJ1dHRvbi4KLSAgICBpZiAo
aXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KS5idXR0
b24oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5kZXJlcigpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZlbnQpOwotCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vv
dmVyRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50IHx8
IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGRvdWJsZSB2b2x1bWUgPSB2YWx1ZSgpLnRvRG91YmxlKCk7Ci0gICAgaWYg
KHZvbHVtZSAhPSBtZWRpYUNvbnRyb2xsZXIoKS0+dm9sdW1lKCkpCi0gICAgICAgIG1lZGlhQ29u
dHJvbGxlcigpLT5zZXRWb2x1bWUodm9sdW1lKTsKLSAgICBpZiAobV9jbGVhck11dGVkT25Vc2Vy
SW50ZXJhY3Rpb24pCi0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5zZXRNdXRlZChmYWxzZSk7
Ci0gICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLX0KLQotYm9vbCBNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXJFbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCkKLXsKLSAg
ICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBN
ZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OndpbGxSZXNwb25kVG9Nb3VzZU1vdmVFdmVudHMoKTsK
LX0KLQotYm9vbCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50Ojp3aWxsUmVzcG9uZFRv
TW91c2VDbGlja0V2ZW50cygpCi17Ci0gICAgaWYgKCFyZW5kZXJlcigpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gTWVkaWFDb250cm9sSW5wdXRFbGVtZW50Ojp3aWxsUmVz
cG9uZFRvTW91c2VDbGlja0V2ZW50cygpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNs
aWRlckVsZW1lbnQ6OnNldFZvbHVtZShkb3VibGUgdm9sdW1lKQotewotICAgIGlmICh2YWx1ZSgp
LnRvRG91YmxlKCkgIT0gdm9sdW1lKQotICAgICAgICBzZXRWYWx1ZShTdHJpbmc6Om51bWJlcih2
b2x1bWUpKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpzZXRD
bGVhck11dGVkT25Vc2VySW50ZXJhY3Rpb24oYm9vbCBjbGVhck11dGUpCi17Ci0gICAgbV9jbGVh
ck11dGVkT25Vc2VySW50ZXJhY3Rpb24gPSBjbGVhck11dGU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDkzMWZjMGUzOTU4M2NhMjdkODFiNzU3N2NlZDgzOTY5MTQ5MTE3
ZWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwyMDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwg
MjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KFZJREVPKQotCi0jaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MSW5w
dXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgotI2luY2x1ZGUgIk1l
ZGlhQ29udHJvbGxlckludGVyZmFjZS5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gTWVkaWFDb250cm9sRWxlbWVudFR5cGUgewotICAg
IE1lZGlhRW50ZXJGdWxsc2NyZWVuQnV0dG9uID0gMCwKLSAgICBNZWRpYU11dGVCdXR0b24sCi0g
ICAgTWVkaWFQbGF5QnV0dG9uLAotICAgIE1lZGlhU2Vla0JhY2tCdXR0b24sCi0gICAgTWVkaWFT
ZWVrRm9yd2FyZEJ1dHRvbiwKLSAgICBNZWRpYVNsaWRlciwKLSAgICBNZWRpYVNsaWRlclRodW1i
LAotICAgIE1lZGlhUmV3aW5kQnV0dG9uLAotICAgIE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRv
biwKLSAgICBNZWRpYVNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbiwKLSAgICBNZWRpYUhpZGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbiwKLSAgICBNZWRpYVVuTXV0ZUJ1dHRvbiwKLSAgICBNZWRpYVBhdXNl
QnV0dG9uLAotICAgIE1lZGlhVGltZWxpbmVDb250YWluZXIsCi0gICAgTWVkaWFDdXJyZW50VGlt
ZURpc3BsYXksCi0gICAgTWVkaWFUaW1lUmVtYWluaW5nRGlzcGxheSwKLSAgICBNZWRpYVN0YXR1
c0Rpc3BsYXksCi0gICAgTWVkaWFDb250cm9sc1BhbmVsLAotICAgIE1lZGlhVm9sdW1lU2xpZGVy
Q29udGFpbmVyLAotICAgIE1lZGlhVm9sdW1lU2xpZGVyLAotICAgIE1lZGlhVm9sdW1lU2xpZGVy
VGh1bWIsCi0gICAgTWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyLAotICAgIE1lZGlhRnVsbFNj
cmVlblZvbHVtZVNsaWRlclRodW1iLAotICAgIE1lZGlhVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbiwK
LSAgICBNZWRpYVRleHRUcmFja0Rpc3BsYXlDb250YWluZXIsCi0gICAgTWVkaWFUZXh0VHJhY2tE
aXNwbGF5LAotICAgIE1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b24sCi0gICAgTWVkaWFPdmVybGF5
UGxheUJ1dHRvbiwKLSAgICBNZWRpYUNsb3NlZENhcHRpb25zQ29udGFpbmVyLAotICAgIE1lZGlh
Q2xvc2VkQ2FwdGlvbnNUcmFja0xpc3QsCi19OwotCi1SZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4g
cGFyZW50TWVkaWFFbGVtZW50KGNvbnN0IE5vZGUqKTsKLWlubGluZSBSZWZQdHI8SFRNTE1lZGlh
RWxlbWVudD4gcGFyZW50TWVkaWFFbGVtZW50KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIp
IHsgcmV0dXJuIHBhcmVudE1lZGlhRWxlbWVudChyZW5kZXJlci5ub2RlKCkpOyB9Ci0KLU1lZGlh
Q29udHJvbEVsZW1lbnRUeXBlIG1lZGlhQ29udHJvbEVsZW1lbnRUeXBlKE5vZGUqKTsKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xFbGVtZW50
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOwotICAgIHZpcnR1YWwgdm9pZCBz
aG93KCk7Ci0gICAgdmlydHVhbCBib29sIGlzU2hvd2luZygpIGNvbnN0OwotCi0gICAgdmlydHVh
bCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSgpIHsgcmV0dXJuIG1fZGlzcGxh
eVR5cGU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzZXRNZWRpYUNvbnRyb2xsZXIoTWVkaWFDb250
cm9sbGVySW50ZXJmYWNlKiBjb250cm9sbGVyKSB7IG1fbWVkaWFDb250cm9sbGVyID0gY29udHJv
bGxlcjsgfQotICAgIHZpcnR1YWwgTWVkaWFDb250cm9sbGVySW50ZXJmYWNlKiBtZWRpYUNvbnRy
b2xsZXIoKSBjb25zdCB7IHJldHVybiBtX21lZGlhQ29udHJvbGxlcjsgfQotCi1wcm90ZWN0ZWQ6
Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sRWxlbWVudChNZWRpYUNvbnRyb2xFbGVtZW50VHlw
ZSwgSFRNTEVsZW1lbnQqKTsKLSAgICB+TWVkaWFDb250cm9sRWxlbWVudCgpID0gZGVmYXVsdDsK
LQotICAgIHZpcnR1YWwgdm9pZCBzZXREaXNwbGF5VHlwZShNZWRpYUNvbnRyb2xFbGVtZW50VHlw
ZSk7Ci0gICAgdmlydHVhbCBib29sIGlzTWVkaWFDb250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KLQotcHJpdmF0ZToKLSAgICBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqIG1f
bWVkaWFDb250cm9sbGVyOwotICAgIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIG1fZGlzcGxheVR5
cGU7Ci0gICAgSFRNTEVsZW1lbnQqIG1fZWxlbWVudDsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sRGl2RWxlbWVudCA6IHB1YmxpYyBI
VE1MRGl2RWxlbWVudCwgcHVibGljIE1lZGlhQ29udHJvbEVsZW1lbnQgewotICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sRGl2RWxlbWVudCk7Ci1wcm90ZWN0ZWQ6Ci0gICAg
ZXhwbGljaXQgTWVkaWFDb250cm9sRGl2RWxlbWVudChEb2N1bWVudCYsIE1lZGlhQ29udHJvbEVs
ZW1lbnRUeXBlKTsKLQotcHJpdmF0ZToKLSAgICBib29sIGlzTWVkaWFDb250cm9sRWxlbWVudCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIE1lZGlhQ29udHJvbEVsZW1lbnQ6OmlzTWVkaWFDb250cm9s
RWxlbWVudCgpOyB9Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNs
YXNzIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCA6IHB1YmxpYyBIVE1MSW5wdXRFbGVtZW50LCBw
dWJsaWMgTWVkaWFDb250cm9sRWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChN
ZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQpOwotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IE1lZGlh
Q29udHJvbElucHV0RWxlbWVudChEb2N1bWVudCYsIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlKTsK
LQotcHJpdmF0ZToKLSAgICBib29sIGlzTWVkaWFDb250cm9sRWxlbWVudCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIE1lZGlhQ29udHJvbEVsZW1lbnQ6OmlzTWVkaWFDb250cm9sRWxlbWVudCgpOyB9
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlUeXBlKCkgeyB9Ci19OwotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5
RWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xEaXZFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudCk7Ci1wdWJsaWM6Ci0g
ICAgdm9pZCBzZXRDdXJyZW50VmFsdWUoZG91YmxlKTsKLSAgICBkb3VibGUgY3VycmVudFZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VmFsdWU7IH0KLQotcHJvdGVjdGVkOgotICAgIGV4
cGxpY2l0IE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudChEb2N1bWVudCYsIE1lZGlhQ29u
dHJvbEVsZW1lbnRUeXBlKTsKLQotcHJpdmF0ZToKLSAgICBkb3VibGUgbV9jdXJyZW50VmFsdWU7
Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29u
dHJvbE11dGVCdXR0b25FbGVtZW50IDogcHVibGljIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCB7
Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVu
dCk7Ci1wdWJsaWM6Ci0gICAgdm9pZCBjaGFuZ2VkTXV0ZSgpOwotCi0gICAgYm9vbCB3aWxsUmVz
cG9uZFRvTW91c2VDbGlja0V2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotcHJv
dGVjdGVkOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50KERvY3Vt
ZW50JiwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVEaXNw
bGF5VHlwZSgpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1jbGFzcyBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250
cm9sU2Vla0J1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01v
dXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLXByb3RlY3RlZDoK
LSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudChEb2N1bWVudCYsIE1l
ZGlhQ29udHJvbEVsZW1lbnRUeXBlKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBpc0ZvcndhcmRCdXR0b24oKSBjb25z
dCA9IDA7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzZXRBY3RpdmUoYm9vbCAvKmZsYWcqLyA9IHRy
dWUsIGJvb2wgLypwYXVzZSovID0gZmFsc2UpIGZpbmFsOwotfTsKLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50
IDogcHVibGljIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRChNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBi
b29sIHdpbGxSZXNwb25kVG9Nb3VzZU1vdmVFdmVudHMoKSBvdmVycmlkZTsKLSAgICBib29sIHdp
bGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRWb2x1
bWUoZG91YmxlKTsKLSAgICB2b2lkIHNldENsZWFyTXV0ZWRPblVzZXJJbnRlcmFjdGlvbihib29s
KTsKLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVs
ZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYp
IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIGJvb2wgbV9jbGVhck11dGVkT25Vc2VySW50ZXJh
Y3Rpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
VklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYjRiNGNiNjRhZWJl
MjE0YjkyODE1YTA2ZDdkYWI5Mzg4MDUwNjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
RWxlbWVudHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTUwMiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCi0KLSNp
ZiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRlICJET01Ub2tlbkxpc3QuaCIKLSNpbmNsdWRlICJF
bGVtZW50Q2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgotI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZ1bGxzY3Jl
ZW5NYW5hZ2VyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRN
TEhlYWRpbmdFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTExJRWxlbWVudC5oIgotI2luY2x1ZGUg
IkhUTUxVTGlzdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCi0jaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5j
bHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbHMuaCIKLSNpbmNsdWRlICJN
b3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUE9ESW50ZXJ2YWwuaCIKLSNpbmNsdWRlICJQYWdlLmgi
Ci0jaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNs
dWRlICJSZW5kZXJNZWRpYUNvbnRyb2xzLmgiCi0jaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCi0j
aW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgotI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNoYWRv
d1Jvb3QuaCIKLSNpbmNsdWRlICJUZXh0VHJhY2tDdWVHZW5lcmljLmgiCi0jaW5jbHVkZSAiVGV4
dFRyYWNrTGlzdC5oIgotI2luY2x1ZGUgIlZUVFJlZ2lvbkxpc3QuaCIKLSNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9MYW5ndWFnZS5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xQ
YW5lbEVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFBh
bmVsRW5jbG9zdXJlRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFD
b250cm9sT3ZlcmxheUVuY2xvc3VyZUVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TVBMKE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09f
QUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudCk7
Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVs
ZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFBhbmVsTXV0
ZUJ1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURf
SU1QTChNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NB
VEVEX0lNUEwoTWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0b25FbGVtZW50KTsKLVdURl9NQUtF
X0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQp
OwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9u
RWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sUmV3aW5k
QnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9s
UmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TVBMKE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudCk7Ci1XVEZf
TUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNDb250YWlu
ZXJFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xDbG9z
ZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBM
KE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudCk7Ci1XVEZf
TUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZVNsaWRl
ckVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbEZ1bGxz
Y3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1Q
TChNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVt
ZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xDdXJyZW50VGlt
ZURpc3BsYXlFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KTsKLQotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKLQotc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGdldE1lZGlhQ29udHJvbEN1cnJlbnRUaW1l
RGlzcGxheUVsZW1lbnRTaGFkb3dQc2V1ZG9JZCgpOwotc3RhdGljIGNvbnN0IEF0b21TdHJpbmcm
IGdldE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudFNoYWRvd1BzZXVkb0lk
KCk7Ci0KLU1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6TWVkaWFDb250cm9sUGFuZWxFbGVtZW50
KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbERpdkVsZW1lbnQoZG9jdW1l
bnQsIE1lZGlhQ29udHJvbHNQYW5lbCkKLSAgICAsIG1fY2FuQmVEcmFnZ2VkKGZhbHNlKQotICAg
ICwgbV9pc0JlaW5nRHJhZ2dlZChmYWxzZSkKLSAgICAsIG1faXNEaXNwbGF5ZWQoZmFsc2UpCi0g
ICAgLCBtX29wYXF1ZSh0cnVlKQotICAgICwgbV90cmFuc2l0aW9uVGltZXIoKnRoaXMsICZNZWRp
YUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnRyYW5zaXRpb25UaW1lckZpcmVkKQotewotICAgIHNldFBz
ZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFBhbmVsRWxl
bWVudD4gTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudChk
b2N1bWVudCkpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6c3RhcnREcmFn
KGNvbnN0IExheW91dFBvaW50JiBldmVudExvY2F0aW9uKQotewotICAgIGlmICghbV9jYW5CZURy
YWdnZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lzQmVpbmdEcmFnZ2VkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAg
ICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBpZiAo
IWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xhc3REcmFnRXZlbnRMb2NhdGlvbiA9
IGV2ZW50TG9jYXRpb247Ci0KLSAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuc2V0Q2FwdHVyaW5n
TW91c2VFdmVudHNFbGVtZW50KHRoaXMpOwotCi0gICAgbV9pc0JlaW5nRHJhZ2dlZCA9IHRydWU7
Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50Ojpjb250aW51ZURyYWcoY29uc3Qg
TGF5b3V0UG9pbnQmIGV2ZW50TG9jYXRpb24pCi17Ci0gICAgaWYgKCFtX2lzQmVpbmdEcmFnZ2Vk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXlvdXRTaXplIGRpc3RhbmNlRHJhZ2dlZCA9IGV2
ZW50TG9jYXRpb24gLSBtX2xhc3REcmFnRXZlbnRMb2NhdGlvbjsKLSAgICBtX2N1bXVsYXRpdmVE
cmFnT2Zmc2V0Lm1vdmUoZGlzdGFuY2VEcmFnZ2VkKTsKLSAgICBtX2xhc3REcmFnRXZlbnRMb2Nh
dGlvbiA9IGV2ZW50TG9jYXRpb247Ci0gICAgc2V0UG9zaXRpb24obV9jdW11bGF0aXZlRHJhZ09m
ZnNldCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjplbmREcmFnKCkKLXsK
LSAgICBpZiAoIW1faXNCZWluZ0RyYWdnZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNC
ZWluZ0RyYWdnZWQgPSBmYWxzZTsKLQotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBkb2N1bWVu
dCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZnJh
bWUtPmV2ZW50SGFuZGxlcigpLnNldENhcHR1cmluZ01vdXNlRXZlbnRzRWxlbWVudChudWxscHRy
KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnN0YXJ0VGltZXIoKQotewot
ICAgIHN0b3BUaW1lcigpOwotCi0gICAgLy8gVGhlIHRpbWVyIGlzIHJlcXVpcmVkIHRvIHNldCB0
aGUgcHJvcGVydHkgZGlzcGxheTonbm9uZScgb24gdGhlIHBhbmVsLAotICAgIC8vIHN1Y2ggdGhh
dCBjYXB0aW9ucyBhcmUgY29ycmVjdGx5IGRpc3BsYXllZCBhdCB0aGUgYm90dG9tIG9mIHRoZSB2
aWRlbwotICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhlIGZhZGVvdXQgdHJhbnNpdGlvbi4KLSAgICBT
ZWNvbmRzIGR1cmF0aW9uID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLm1lZGlhQ29udHJvbHNG
YWRlT3V0RHVyYXRpb24oKTsKLSAgICBtX3RyYW5zaXRpb25UaW1lci5zdGFydE9uZVNob3QoZHVy
YXRpb24pOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6c3RvcFRpbWVyKCkK
LXsKLSAgICBpZiAobV90cmFuc2l0aW9uVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV90cmFu
c2l0aW9uVGltZXIuc3RvcCgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6
dHJhbnNpdGlvblRpbWVyRmlyZWQoKQotewotICAgIGlmICghbV9vcGFxdWUpCi0gICAgICAgIGhp
ZGUoKTsKLQotICAgIHN0b3BUaW1lcigpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxl
bWVudDo6c2V0UG9zaXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIHBvc2l0aW9uKQotewotICAgIGRv
dWJsZSBsZWZ0ID0gcG9zaXRpb24ueCgpOwotICAgIGRvdWJsZSB0b3AgPSBwb3NpdGlvbi55KCk7
Ci0KLSAgICAvLyBTZXQgdGhlIGxlZnQgYW5kIHRvcCB0byBjb250cm9sIHRoZSBwYW5lbCdzIHBv
c2l0aW9uOyB0aGlzIGRlcGVuZHMgb24gaXQgYmVpbmcgYWJzb2x1dGUgcG9zaXRpb25lZC4KLSAg
ICAvLyBTZXQgdGhlIG1hcmdpbiB0byB6ZXJvIHNpbmNlIHRoZSBwb3NpdGlvbiBwYXNzZWQgaW4g
d2lsbCBhbHJlYWR5IGluY2x1ZGUgdGhlIGVmZmVjdCBvZiB0aGUgbWFyZ2luLgotICAgIHNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCBsZWZ0LCBDU1NVbml0VHlwZTo6Q1NT
X1BYKTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wLCB0b3AsIENT
U1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlNYXJnaW5MZWZ0LCAwLjAsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIHNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIDAuMCwgQ1NTVW5pdFR5cGU6OkNTU19Q
WCk7Ci0KLSAgICBjbGFzc0xpc3QoKS5hZGQoImRyYWdnZWQiKTsKLX0KLQotdm9pZCBNZWRpYUNv
bnRyb2xQYW5lbEVsZW1lbnQ6OnJlc2V0UG9zaXRpb24oKQotewotICAgIHJlbW92ZUlubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0KTsKLSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5VG9wKTsKLSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5TWFyZ2luTGVmdCk7Ci0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eU1hcmdpblRvcCk7Ci0KLSAgICBjbGFzc0xpc3QoKS5yZW1vdmUoImRyYWdnZWQiKTsKLQot
ICAgIG1fY3VtdWxhdGl2ZURyYWdPZmZzZXQuc2V0WCgwKTsKLSAgICBtX2N1bXVsYXRpdmVEcmFn
T2Zmc2V0LnNldFkoMCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjptYWtl
T3BhcXVlKCkKLXsKLSAgICBpZiAobV9vcGFxdWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRv
dWJsZSBkdXJhdGlvbiA9IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5tZWRpYUNvbnRyb2xzRmFk
ZUluRHVyYXRpb24oKTsKLQotICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlU
cmFuc2l0aW9uUHJvcGVydHksIENTU1Byb3BlcnR5T3BhY2l0eSk7Ci0gICAgc2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zaXRpb25EdXJhdGlvbiwgZHVyYXRpb24sIENTU1Vu
aXRUeXBlOjpDU1NfUyk7Ci0gICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU9w
YWNpdHksIDEuMCwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotCi0gICAgbV9vcGFxdWUgPSB0
cnVlOwotCi0gICAgaWYgKG1faXNEaXNwbGF5ZWQpCi0gICAgICAgIHNob3coKTsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6Om1ha2VUcmFuc3BhcmVudCgpCi17Ci0gICAgaWYg
KCFtX29wYXF1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2Vjb25kcyBkdXJhdGlvbiA9IFJl
bmRlclRoZW1lOjpzaW5nbGV0b24oKS5tZWRpYUNvbnRyb2xzRmFkZU91dER1cmF0aW9uKCk7Ci0K
LSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNpdGlvblByb3BlcnR5
LCBDU1NQcm9wZXJ0eU9wYWNpdHkpOwotICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlUcmFuc2l0aW9uRHVyYXRpb24sIGR1cmF0aW9uLnZhbHVlKCksIENTU1VuaXRUeXBlOjpD
U1NfUyk7Ci0gICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU9wYWNpdHksIDAu
MCwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotCi0gICAgbV9vcGFxdWUgPSBmYWxzZTsKLSAg
ICBzdGFydFRpbWVyKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSAgICBNZWRpYUNvbnRyb2xEaXZFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgIGlmIChpczxNb3VzZUV2ZW50
PihldmVudCkpIHsKLSAgICAgICAgTGF5b3V0UG9pbnQgbG9jYXRpb24gPSBkb3duY2FzdDxNb3Vz
ZUV2ZW50PihldmVudCkuYWJzb2x1dGVMb2NhdGlvbigpOwotICAgICAgICBpZiAoZXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC50YXJnZXQoKSA9PSB0
aGlzKSB7Ci0gICAgICAgICAgICBzdGFydERyYWcobG9jYXRpb24pOwotICAgICAgICAgICAgZXZl
bnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChldmVudC50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50ICYmIG1faXNCZWluZ0RyYWdnZWQpCi0gICAg
ICAgICAgICBjb250aW51ZURyYWcobG9jYXRpb24pOwotICAgICAgICBlbHNlIGlmIChldmVudC50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiBtX2lzQmVpbmdEcmFnZ2VkKSB7
Ci0gICAgICAgICAgICBjb250aW51ZURyYWcobG9jYXRpb24pOwotICAgICAgICAgICAgZW5kRHJh
ZygpOwotICAgICAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnNldENhbkJlRHJhZ2dl
ZChib29sIGNhbkJlRHJhZ2dlZCkKLXsKLSAgICBpZiAobV9jYW5CZURyYWdnZWQgPT0gY2FuQmVE
cmFnZ2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NhbkJlRHJhZ2dlZCA9IGNhbkJlRHJh
Z2dlZDsKLQotICAgIGlmICghY2FuQmVEcmFnZ2VkKQotICAgICAgICBlbmREcmFnKCk7Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzZXRJc0Rpc3BsYXllZChib29sIGlzRGlz
cGxheWVkKQotewotICAgIG1faXNEaXNwbGF5ZWQgPSBpc0Rpc3BsYXllZDsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVs
ZW1lbnQ6Ok1lZGlhQ29udHJvbFBhbmVsRW5jbG9zdXJlRWxlbWVudChEb2N1bWVudCYgZG9jdW1l
bnQpCi0gICAgLy8gTWFwcGluZyBvbnRvIHNhbWUgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgYXMg
cGFuZWwgZWxlbWVudCwgc2luY2UgaXQgaGFzIHNpbWlsYXIgcHJvcGVydGllcy4KLSAgICA6IE1l
ZGlhQ29udHJvbERpdkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhQ29udHJvbHNQYW5lbCkKLXsKLSAg
ICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1lbmNsb3N1cmUi
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250
cm9sUGFuZWxFbmNsb3N1cmVFbGVtZW50PiBNZWRpYUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVsZW1l
bnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVFbGVtZW50KGRvY3VtZW50KSk7Ci19Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sT3ZlcmxheUVuY2xv
c3VyZUVsZW1lbnQ6Ok1lZGlhQ29udHJvbE92ZXJsYXlFbmNsb3N1cmVFbGVtZW50KERvY3VtZW50
JiBkb2N1bWVudCkKLSAgICAvLyBNYXBwaW5nIG9udG8gc2FtZSBNZWRpYUNvbnRyb2xFbGVtZW50
VHlwZSBhcyBwYW5lbCBlbGVtZW50LCBzaW5jZSBpdCBoYXMgc2ltaWxhciBwcm9wZXJ0aWVzLgot
ICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChkb2N1bWVudCwgTWVkaWFDb250cm9sc1BhbmVs
KQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLW92
ZXJsYXktZW5jbG9zdXJlIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0K
LQotUmVmPE1lZGlhQ29udHJvbE92ZXJsYXlFbmNsb3N1cmVFbGVtZW50PiBNZWRpYUNvbnRyb2xP
dmVybGF5RW5jbG9zdXJlRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xPdmVybGF5RW5jbG9zdXJlRWxlbWVu
dChkb2N1bWVudCkpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1l
ZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6TWVkaWFDb250cm9sVGltZWxpbmVD
b250YWluZXJFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbERp
dkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhVGltZWxpbmVDb250YWluZXIpCi17Ci0gICAgc2V0UHNl
dWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUtY29udGFpbmVy
IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29u
dHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVGltZWxpbmVDb250YWlu
ZXJFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNv
bnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IE1l
ZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCkpOwotICAgIGVsZW1l
bnQtPmhpZGUoKTsKLSAgICByZXR1cm4gZWxlbWVudDsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQ6OnNldFRpbWVEaXNwbGF5c0hpZGRlbihib29sIGhpZGRl
bikKLXsKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxFbGVtZW50Pigq
dGhpcykpIHsKLSAgICAgICAgaWYgKGVsZW1lbnQuc2hhZG93UHNldWRvSWQoKSAhPSBnZXRNZWRp
YUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnRTaGFkb3dQc2V1ZG9JZCgpCi0gICAg
ICAgICAgICAmJiBlbGVtZW50LnNoYWRvd1BzZXVkb0lkKCkgIT0gZ2V0TWVkaWFDb250cm9sQ3Vy
cmVudFRpbWVEaXNwbGF5RWxlbWVudFNoYWRvd1BzZXVkb0lkKCkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQmIHRpbWVEaXNw
bGF5ID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50Jj4oZWxlbWVu
dCk7Ci0gICAgICAgIGlmIChoaWRkZW4pCi0gICAgICAgICAgICB0aW1lRGlzcGxheS5oaWRlKCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRpbWVEaXNwbGF5LnNob3coKTsKLSAgICB9Ci19
Ci0KLVJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5l
ckVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlLCBjb25z
dCBSZW5kZXJUcmVlUG9zaXRpb24mKQotewotICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5k
ZXJNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lcj4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xWb2x1
bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWlu
ZXJFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbERpdkVsZW1l
bnQoZG9jdW1lbnQsIE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKQotewotICAgIHNldFBzZXVk
byhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXItY29udGFp
bmVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlh
Q29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFZvbHVtZVNs
aWRlckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAg
UmVmPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ+IGVsZW1lbnQgPSBh
ZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQoZG9j
dW1lbnQpKTsKLSAgICBlbGVtZW50LT5oaWRlKCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci19Ci0K
LVJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWlu
ZXJFbGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsZSwgY29u
c3QgUmVuZGVyVHJlZVBvc2l0aW9uJikKLXsKLSAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVu
ZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXI+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7Ci19
Ci0KLXZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgLy8gUG9vciBtYW4ncyBtb3VzZWxl
YXZlIGV2ZW50IGRldGVjdGlvbi4KLQotICAgIGlmICghaXM8TW91c2VFdmVudD4oZXZlbnQpIHx8
IGV2ZW50LnR5cGUoKSAhPSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCFpczxOb2RlPihkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkucmVs
YXRlZFRhcmdldCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNvbnRhaW5zSW5jbHVk
aW5nU2hhZG93RE9NKCZkb3duY2FzdDxOb2RlPigqZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQp
LnJlbGF0ZWRUYXJnZXQoKSkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBoaWRlKCk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sU3RhdHVzRGlz
cGxheUVsZW1lbnQ6Ok1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KERvY3VtZW50JiBk
b2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbERpdkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhU3Rh
dHVzRGlzcGxheSkKLSAgICAsIG1fc3RhdGVCZWluZ0Rpc3BsYXllZChOb3RoaW5nKQotewotICAg
IHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXN0YXR1cy1kaXNw
bGF5IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlh
Q29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50PiBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxl
bWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9s
U3RhdHVzRGlzcGxheUVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJv
bFN0YXR1c0Rpc3BsYXlFbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgZWxlbWVudC0+aGlkZSgpOwot
ICAgIHJldHVybiBlbGVtZW50OwotfQotCi12b2lkIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlF
bGVtZW50Ojp1cGRhdGUoKQotewotICAgIC8vIEdldCB0aGUgbmV3IHN0YXRlIHRoYXQgd2UnbGwg
aGF2ZSB0byBkaXNwbGF5LgotICAgIFN0YXRlQmVpbmdEaXNwbGF5ZWQgbmV3U3RhdGVUb0Rpc3Bs
YXkgPSBOb3RoaW5nOwotCi0gICAgaWYgKG1lZGlhQ29udHJvbGxlcigpLT5yZWFkeVN0YXRlKCkg
PD0gTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpIQVZFX01FVEFEQVRBICYmIG1lZGlhQ29udHJv
bGxlcigpLT5oYXNDdXJyZW50U3JjKCkpCi0gICAgICAgIG5ld1N0YXRlVG9EaXNwbGF5ID0gTG9h
ZGluZzsKLSAgICBlbHNlIGlmIChtZWRpYUNvbnRyb2xsZXIoKS0+aXNMaXZlU3RyZWFtKCkpCi0g
ICAgICAgIG5ld1N0YXRlVG9EaXNwbGF5ID0gTGl2ZUJyb2FkY2FzdDsKLQotICAgIGlmIChuZXdT
dGF0ZVRvRGlzcGxheSA9PSBtX3N0YXRlQmVpbmdEaXNwbGF5ZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX3N0YXRlQmVpbmdEaXNwbGF5ZWQgPT0gTm90aGluZykKLSAgICAgICAgc2hv
dygpOwotICAgIGVsc2UgaWYgKG5ld1N0YXRlVG9EaXNwbGF5ID09IE5vdGhpbmcpCi0gICAgICAg
IGhpZGUoKTsKLQotICAgIG1fc3RhdGVCZWluZ0Rpc3BsYXllZCA9IG5ld1N0YXRlVG9EaXNwbGF5
OwotCi0gICAgc3dpdGNoIChtX3N0YXRlQmVpbmdEaXNwbGF5ZWQpIHsKLSAgICBjYXNlIE5vdGhp
bmc6Ci0gICAgICAgIHNldElubmVyVGV4dChlbXB0eVN0cmluZygpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBMb2FkaW5nOgotICAgICAgICBzZXRJbm5lclRleHQobWVkaWFFbGVtZW50TG9h
ZGluZ1N0YXRlVGV4dCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaXZlQnJvYWRjYXN0
OgotICAgICAgICBzZXRJbm5lclRleHQobWVkaWFFbGVtZW50TGl2ZUJyb2FkY2FzdFN0YXRlVGV4
dCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29u
dHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBNZWRpYUNvbnRy
b2xzKiBjb250cm9scykKLSAgICA6IE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50KGRvY3Vt
ZW50LCBNZWRpYU11dGVCdXR0b24pCi0gICAgLCBtX2NvbnRyb2xzKGNvbnRyb2xzKQotewotICAg
IHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLW11dGUtYnV0dG9u
IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29u
dHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVs
ZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhQ29udHJvbHMqIGNvbnRyb2xz
KQotewotICAgIEFTU0VSVChjb250cm9scyk7Ci0KLSAgICBSZWY8TWVkaWFDb250cm9sUGFuZWxN
dXRlQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xQYW5l
bE11dGVCdXR0b25FbGVtZW50KGRvY3VtZW50LCBjb250cm9scykpOwotICAgIGJ1dHRvbi0+ZW5z
dXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7
Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0
b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAo
ZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkKLSAgICAgICAgbV9j
b250cm9scy0+c2hvd1ZvbHVtZVNsaWRlcigpOwotCi0gICAgTWVkaWFDb250cm9sTXV0ZUJ1dHRv
bkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25F
bGVtZW50OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudChEb2N1bWVu
dCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChkb2N1bWVu
dCwgTWVkaWFNdXRlQnV0dG9uKQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0
LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXItbXV0ZS1idXR0b24iLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVy
TXV0ZUJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRp
YUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1
dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgi
YnV0dG9uIik7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9s
UGxheUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9s
SW5wdXRFbGVtZW50KGRvY3VtZW50LCBNZWRpYVBsYXlCdXR0b24pCi17Ci0gICAgc2V0UHNldWRv
KEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGxheS1idXR0b24iLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sUGxheUJ1
dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50OjpjcmVhdGUoRG9jdW1l
bnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudD4g
YnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudChkb2N1
bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1
dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYg
ZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCkgewotICAgICAgICBpZiAobWVkaWFDb250cm9sbGVyKCktPmNhblBsYXkoKSkKLSAgICAgICAg
ICAgIG1lZGlhQ29udHJvbGxlcigpLT5wbGF5KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1lZGlhQ29udHJvbGxlcigpLT5wYXVzZSgpOwotICAgICAgICB1cGRhdGVEaXNwbGF5VHlwZSgp
OwotICAgICAgICBldmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0KLSAgICBIVE1MSW5w
dXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotdm9pZCBNZWRpYUNv
bnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6dXBkYXRlRGlzcGxheVR5cGUoKQotewotICAgIHNldERp
c3BsYXlUeXBlKG1lZGlhQ29udHJvbGxlcigpLT5jYW5QbGF5KCkgPyBNZWRpYVBsYXlCdXR0b24g
OiBNZWRpYVBhdXNlQnV0dG9uKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1NZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbE92
ZXJsYXlQbGF5QnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhT3ZlcmxheVBsYXlCdXR0b24pCi17Ci0g
ICAgc2V0UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtb3ZlcmxheS1w
bGF5LWJ1dHRvbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJl
ZjxNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbE92ZXJs
YXlQbGF5QnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBS
ZWY8TWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJl
ZigqbmV3IE1lZGlhQ29udHJvbE92ZXJsYXlQbGF5QnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwot
ICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0
VHlwZSgiYnV0dG9uIik7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRy
b2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2
ZW50KQotewotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQg
JiYgbWVkaWFDb250cm9sbGVyKCktPmNhblBsYXkoKSkgewotICAgICAgICBtZWRpYUNvbnRyb2xs
ZXIoKS0+cGxheSgpOwotICAgICAgICB1cGRhdGVEaXNwbGF5VHlwZSgpOwotICAgICAgICBldmVu
dC5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0KLSAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xPdmVybGF5UGxh
eUJ1dHRvbkVsZW1lbnQ6OnVwZGF0ZURpc3BsYXlUeXBlKCkKLXsKLSAgICBpZiAobWVkaWFDb250
cm9sbGVyKCktPmNhblBsYXkoKSkgewotICAgICAgICBzaG93KCk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGhpZGUoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRp
YUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFNlZWtGb3J3YXJk
QnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xTZWVr
QnV0dG9uRWxlbWVudChkb2N1bWVudCwgTWVkaWFTZWVrRm9yd2FyZEJ1dHRvbikKLXsKLSAgICBz
ZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWZvcndhcmQt
YnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1l
ZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sU2Vla0Zvcndh
cmRCdXR0b25FbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxN
ZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpu
ZXcgTWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50KGRvY3VtZW50KSk7Ci0gICAg
YnV0dG9uLT5lbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgYnV0dG9uLT5zZXRUeXBl
KCJidXR0b24iKTsKLSAgICByZXR1cm4gYnV0dG9uOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVudDo6TWVkaWFD
b250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1l
ZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50KGRvY3VtZW50LCBNZWRpYVNlZWtCYWNrQnV0dG9u
KQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXNl
ZWstYmFjay1idXR0b24iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQot
Ci1SZWY8TWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50PiBNZWRpYUNvbnRyb2xTZWVr
QmFja0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVm
PE1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5l
dyBNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0
b24tPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1
dHRvbiIpOwotICAgIHJldHVybiBidXR0b247Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotTWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9s
UmV3aW5kQnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRy
b2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhUmV3aW5kQnV0dG9uKQotewotICAgIHNldFBz
ZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXJld2luZC1idXR0b24iLCBB
dG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9s
UmV3aW5kQnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudDo6Y3Jl
YXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sUmV3aW5kQnV0
dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xSZXdpbmRCdXR0
b25FbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgYnV0dG9uLT5lbnN1cmVVc2VyQWdlbnRTaGFkb3dS
b290KCk7Ci0gICAgYnV0dG9uLT5zZXRUeXBlKCJidXR0b24iKTsKLSAgICByZXR1cm4gYnV0dG9u
OwotfQotCi12b2lkIE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPnNldEN1cnJl
bnRUaW1lKHN0ZDo6bWF4PGRvdWJsZT4oMCwgbWVkaWFDb250cm9sbGVyKCktPmN1cnJlbnRUaW1l
KCkgLSAzMCkpOwotICAgICAgICBldmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0KLSAg
ICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0
aW1lQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1l
bnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KGRv
Y3VtZW50LCBNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24pCi17Ci0gICAgc2V0UHNldWRvKEF0
b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtcmV0dXJuLXRvLXJlYWx0aW1lLWJ1dHRv
biIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNv
bnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sUmV0dXJuVG9S
ZWFsdGltZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAg
UmVmPE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50PiBidXR0b24gPSBh
ZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50KGRv
Y3VtZW50KSk7Ci0gICAgYnV0dG9uLT5lbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAg
YnV0dG9uLT5zZXRUeXBlKCJidXR0b24iKTsKLSAgICBidXR0b24tPmhpZGUoKTsKLSAgICByZXR1
cm4gYnV0dG9uOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25F
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoZXZl
bnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7Ci0gICAgICAgIG1lZGlhQ29u
dHJvbGxlcigpLT5yZXR1cm5Ub1JlYWx0aW1lKCk7Ci0gICAgICAgIGV2ZW50LnNldERlZmF1bHRI
YW5kbGVkKCk7Ci0gICAgfQotICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZlbnQpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlh
Q29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sVG9n
Z2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFD
b250cm9scyogY29udHJvbHMpCi0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1l
bnQsIE1lZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uKQotI2lmIFBMQVRGT1JNKENPQ09BKSB8
fCBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKEdUSykKLSAgICAsIG1fY29udHJvbHMoY29udHJv
bHMpCi0jZW5kaWYKLXsKLSNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShXSU4pIHx8
ICFQTEFURk9STShHVEspCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRyb2xzKTsKLSNlbmRpZgotICAg
IHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRvZ2dsZS1jbG9z
ZWQtY2FwdGlvbnMtYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsK
LX0KLQotUmVmPE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudD4g
TWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OjpjcmVhdGUoRG9j
dW1lbnQmIGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzKiBjb250cm9scykKLXsKLSAgICBBU1NFUlQo
Y29udHJvbHMpOwotCi0gICAgUmVmPE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0
dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQoZG9jdW1lbnQsIGNvbnRyb2xzKSk7Ci0gICAgYnV0dG9u
LT5lbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgYnV0dG9uLT5zZXRUeXBlKCJidXR0
b24iKTsKLSAgICBidXR0b24tPmhpZGUoKTsKLSAgICByZXR1cm4gYnV0dG9uOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6dXBkYXRlRGlz
cGxheVR5cGUoKQotewotICAgIGJvb2wgY2FwdGlvbnNWaXNpYmxlID0gbWVkaWFDb250cm9sbGVy
KCktPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpOwotICAgIHNldERpc3BsYXlUeXBlKGNhcHRpb25z
VmlzaWJsZSA/IE1lZGlhSGlkZUNsb3NlZENhcHRpb25zQnV0dG9uIDogTWVkaWFTaG93Q2xvc2Vk
Q2FwdGlvbnNCdXR0b24pOwotICAgIHNldENoZWNrZWQoY2FwdGlvbnNWaXNpYmxlKTsKLX0KLQot
dm9pZCBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OmRlZmF1
bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewotICAgIGlmIChldmVudC50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGdy
ZWF0IHRoYXQgdGhlIHNoYXJlZCBjb2RlIGlzIGRpY3RhdGluZyBiZWhhdmlvciBvZiBwbGF0Zm9y
bS1zcGVjaWZpYwotICAgICAgICAvLyBVSS4gTm90IGFsbCBwb3J0cyBtYXkgd2FudCB0aGUgY2xv
c2VkIGNhcHRpb25zIGJ1dHRvbiB0byB0b2dnbGUgYSBsaXN0IG9mIHRyYWNrcywgc28KLSAgICAg
ICAgLy8gd2UgaGF2ZSB0byB1c2UgI2lmLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODc3Ci0jaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhUExB
VEZPUk0oV0lOKSAmJiAhUExBVEZPUk0oR1RLKQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+
c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKCFtZWRpYUNvbnRyb2xsZXIoKS0+Y2xvc2VkQ2FwdGlv
bnNWaXNpYmxlKCkpOwotICAgICAgICBzZXRDaGVja2VkKG1lZGlhQ29udHJvbGxlcigpLT5jbG9z
ZWRDYXB0aW9uc1Zpc2libGUoKSk7Ci0gICAgICAgIHVwZGF0ZURpc3BsYXlUeXBlKCk7Ci0jZWxz
ZQotICAgICAgICBtX2NvbnRyb2xzLT50b2dnbGVDbG9zZWRDYXB0aW9uVHJhY2tMaXN0KCk7Ci0j
ZW5kaWYKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0KLSAgICBI
VE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc0Nv
bnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVu
dChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3Vt
ZW50LCBNZWRpYUNsb3NlZENhcHRpb25zQ29udGFpbmVyKQotewotICAgIHNldFBzZXVkbyhBdG9t
U3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLWNsb3NlZC1jYXB0aW9ucy1jb250YWluZXIi
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250
cm9sQ2xvc2VkQ2FwdGlvbnNDb250YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0
aW9uc0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAg
UmVmPE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudD4gZWxlbWVudCA9
IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNDb250YWluZXJFbGVtZW50
KGRvY3VtZW50KSk7Ci0gICAgZWxlbWVudC0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihkaXJBdHRyLCBBdG9tU3RyaW5nKCJhdXRvIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpKTsKLSAgICBlbGVtZW50LT5oaWRlKCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sQ2xvc2Vk
Q2FwdGlvbnNUcmFja0xpc3RFbGVtZW50OjpNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNr
TGlzdEVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzKiBjb250cm9scykK
LSAgICA6IE1lZGlhQ29udHJvbERpdkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhQ2xvc2VkQ2FwdGlv
bnNUcmFja0xpc3QpCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgICwgbV9jb250cm9scyhj
b250cm9scykKLSNlbmRpZgotewotI2lmICFFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgVU5VU0VE
X1BBUkFNKGNvbnRyb2xzKTsKLSNlbmRpZgotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLWNsb3NlZC1jYXB0aW9ucy10cmFjay1saXN0IiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbENsb3NlZENh
cHRpb25zVHJhY2tMaXN0RWxlbWVudD4gTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xp
c3RFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzKiBjb250
cm9scykKLXsKLSAgICBBU1NFUlQoY29udHJvbHMpOwotICAgIFJlZjxNZWRpYUNvbnRyb2xDbG9z
ZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IE1lZGlh
Q29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudChkb2N1bWVudCwgY29udHJvbHMp
KTsKLSAgICByZXR1cm4gZWxlbWVudDsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0
aW9uc1RyYWNrTGlzdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQot
ewotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50
TmFtZXMoKS5jbGlja0V2ZW50KSB7Ci0gICAgICAgIGlmICghaXM8RWxlbWVudD4oZXZlbnQudGFy
Z2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFdoZW4gd2UgY3JlYXRl
ZCB0aGUgZWxlbWVudHMgaW4gdGhlIHRyYWNrIGxpc3QsIHdlIGdhdmUgdGhlbSBhIGN1c3RvbQot
ICAgICAgICAvLyBhdHRyaWJ1dGUgcmVwcmVzZW50aW5nIHRoZSBpbmRleCBpbiB0aGUgSFRNTE1l
ZGlhRWxlbWVudCdzIGxpc3Qgb2YgdHJhY2tzLgotICAgICAgICAvLyBDaGVjayBpZiB0aGUgZXZl
bnQgdGFyZ2V0IGhhcyBzdWNoIGEgY3VzdG9tIGVsZW1lbnQgYW5kLCBpZiBzbywKLSAgICAgICAg
Ly8gdGVsbCB0aGUgSFRNTE1lZGlhRWxlbWVudCB0byBlbmFibGUgdGhhdCB0cmFjay4KLQotICAg
ICAgICBhdXRvIHRleHRUcmFjayA9IG1ha2VSZWZQdHIobV9tZW51VG9UcmFja01hcC5nZXQoJmRv
d25jYXN0PEVsZW1lbnQ+KCpldmVudC50YXJnZXQoKSkpKTsKLSAgICAgICAgbV9tZW51VG9UcmFj
a01hcC5jbGVhcigpOwotICAgICAgICBtX2NvbnRyb2xzLT50b2dnbGVDbG9zZWRDYXB0aW9uVHJh
Y2tMaXN0KCk7Ci0gICAgICAgIGlmICghdGV4dFRyYWNrKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHRoaXMpOwot
ICAgICAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBtZWRpYUVsZW1lbnQtPnNldFNlbGVjdGVkVGV4dFRyYWNrKHRleHRUcmFjay5nZXQoKSk7Ci0K
LSAgICAgICAgdXBkYXRlRGlzcGxheSgpOwotICAgIH0KLQotICAgIE1lZGlhQ29udHJvbERpdkVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0oZXZlbnQpOwotI2VuZGlmCi19Ci0KLXZvaWQgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNU
cmFja0xpc3RFbGVtZW50Ojp1cGRhdGVEaXNwbGF5KCkKLXsKLSNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21TdHJpbmc+IHNlbGVjdGVkQ2xhc3NW
YWx1ZSgic2VsZWN0ZWQiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0KLSAg
ICBpZiAoIW1lZGlhQ29udHJvbGxlcigpLT5oYXNDbG9zZWRDYXB0aW9ucygpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Q2FwdGlvbkRpc3BsYXlNb2RlIGRpc3BsYXlNb2Rl
ID0gZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCkuY2FwdGlv
bkRpc3BsYXlNb2RlKCk7Ci0KLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxl
bWVudCh0aGlzKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFtZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKSB8fCAhbWVkaWFFbGVtZW50LT50ZXh0
VHJhY2tzKCktPmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZWJ1aWxkVHJhY2tM
aXN0TWVudSgpOwotCi0gICAgUmVmUHRyPEVsZW1lbnQ+IG9mZk1lbnVJdGVtOwotICAgIGJvb2wg
dHJhY2tNZW51SXRlbVNlbGVjdGVkID0gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIHRyYWNrSXRl
bSA6IG1fbWVudUl0ZW1zKSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0VHJhY2s+IHRleHRUcmFjazsK
LSAgICAgICAgTWVudUl0ZW1Ub1RyYWNrTWFwOjppdGVyYXRvciBpdGVyID0gbV9tZW51VG9UcmFj
a01hcC5maW5kKHRyYWNrSXRlbS5nZXQoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fbWVudVRv
VHJhY2tNYXAuZW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdGV4dFRyYWNr
ID0gaXRlci0+dmFsdWU7Ci0gICAgICAgIGlmICghdGV4dFRyYWNrKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgaWYgKHRleHRUcmFjayA9PSAmVGV4dFRyYWNrOjpjYXB0aW9uTWVu
dU9mZkl0ZW0oKSkgewotICAgICAgICAgICAgb2ZmTWVudUl0ZW0gPSB0cmFja0l0ZW07Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0ZXh0VHJhY2sgPT0g
JlRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkpIHsKLSAgICAgICAgICAgIGlm
IChkaXNwbGF5TW9kZSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpBdXRvbWF0aWMpCi0gICAg
ICAgICAgICAgICAgdHJhY2tJdGVtLT5jbGFzc0xpc3QoKS5hZGQoc2VsZWN0ZWRDbGFzc1ZhbHVl
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0cmFja0l0ZW0tPmNsYXNzTGlz
dCgpLnJlbW92ZShzZWxlY3RlZENsYXNzVmFsdWUpOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoZGlzcGxheU1vZGUgIT0gQ2FwdGlvblVzZXJQcmVmZXJl
bmNlczo6QXV0b21hdGljICYmIHRleHRUcmFjay0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6
U2hvd2luZykgewotICAgICAgICAgICAgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIHRyYWNrSXRlbS0+Y2xhc3NMaXN0KCkuYWRkKHNlbGVjdGVkQ2xhc3NWYWx1ZSk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdHJhY2tJdGVtLT5jbGFzc0xpc3QoKS5yZW1v
dmUoc2VsZWN0ZWRDbGFzc1ZhbHVlKTsKLSAgICB9Ci0KLSAgICBpZiAob2ZmTWVudUl0ZW0pIHsK
LSAgICAgICAgaWYgKGRpc3BsYXlNb2RlID09IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkZvcmNl
ZE9ubHkgJiYgIXRyYWNrTWVudUl0ZW1TZWxlY3RlZCkKLSAgICAgICAgICAgIG9mZk1lbnVJdGVt
LT5jbGFzc0xpc3QoKS5hZGQoc2VsZWN0ZWRDbGFzc1ZhbHVlKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgb2ZmTWVudUl0ZW0tPmNsYXNzTGlzdCgpLnJlbW92ZShzZWxlY3RlZENsYXNzVmFs
dWUpOwotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25z
VHJhY2tMaXN0RWxlbWVudDo6cmVidWlsZFRyYWNrTGlzdE1lbnUoKQotewotI2lmIEVOQUJMRShW
SURFT19UUkFDSykKLSAgICAvLyBSZW1vdmUgYW55IGV4aXN0aW5nIGNvbnRlbnQuCi0gICAgcmVt
b3ZlQ2hpbGRyZW4oKTsKLSAgICBtX21lbnVJdGVtcy5jbGVhcigpOwotICAgIG1fbWVudVRvVHJh
Y2tNYXAuY2xlYXIoKTsKLQotICAgIGlmICghbWVkaWFDb250cm9sbGVyKCktPmhhc0Nsb3NlZENh
cHRpb25zKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gbWVkaWFFbGVtZW50ID0gcGFy
ZW50TWVkaWFFbGVtZW50KHRoaXMpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvKiB0cmFja0xpc3QgPSBtZWRpYUVsZW1lbnQtPnRleHRUcmFja3Mo
KTsKLSAgICBpZiAoIXRyYWNrTGlzdCB8fCAhdHJhY2tMaXN0LT5sZW5ndGgoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IGRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgp
LmNhcHRpb25QcmVmZXJlbmNlcygpOwotICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gdHJh
Y2tzRm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRy
YWNrTGlzdCk7Ci0KLSAgICBhdXRvIGNhcHRpb25zSGVhZGVyID0gSFRNTEhlYWRpbmdFbGVtZW50
OjpjcmVhdGUoaDNUYWcsIGRvY3VtZW50KCkpOwotICAgIGNhcHRpb25zSGVhZGVyLT5hcHBlbmRD
aGlsZChkb2N1bWVudCgpLmNyZWF0ZVRleHROb2RlKHRleHRUcmFja1N1YnRpdGxlc1RleHQoKSkp
OwotICAgIGFwcGVuZENoaWxkKGNhcHRpb25zSGVhZGVyKTsKLSAgICBhdXRvIGNhcHRpb25zTWVu
dUxpc3QgPSBIVE1MVUxpc3RFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7Ci0KLSAgICBmb3Ig
KGF1dG8mIHRleHRUcmFjayA6IHRyYWNrc0Zvck1lbnUpIHsKLSAgICAgICAgYXV0byBtZW51SXRl
bSA9IEhUTUxMSUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKLSAgICAgICAgbWVudUl0ZW0t
PmFwcGVuZENoaWxkKGRvY3VtZW50KCkuY3JlYXRlVGV4dE5vZGUoY2FwdGlvblByZWZlcmVuY2Vz
LmRpc3BsYXlOYW1lRm9yVHJhY2sodGV4dFRyYWNrLmdldCgpKSkpOwotICAgICAgICBjYXB0aW9u
c01lbnVMaXN0LT5hcHBlbmRDaGlsZChtZW51SXRlbSk7Ci0gICAgICAgIG1fbWVudUl0ZW1zLmFw
cGVuZChtZW51SXRlbS5wdHIoKSk7Ci0gICAgICAgIG1fbWVudVRvVHJhY2tNYXAuYWRkKG1lbnVJ
dGVtLnB0cigpLCB0ZXh0VHJhY2spOwotICAgIH0KLQotICAgIGFwcGVuZENoaWxkKGNhcHRpb25z
TWVudUxpc3QpOwotI2VuZGlmCi19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1l
bnQoRG9jdW1lbnQmIGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzKiBjb250cm9scykKLSAgICA6IE1l
ZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1bWVudCwgTWVkaWFTbGlkZXIpCi0gICAgLCBtX2Nv
bnRyb2xzKGNvbnRyb2xzKQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1l
ZGlhLWNvbnRyb2xzLXRpbWVsaW5lIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
KTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudD4gTWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzKiBj
b250cm9scykKLXsKLSAgICBBU1NFUlQoY29udHJvbHMpOwotCi0gICAgUmVmPE1lZGlhQ29udHJv
bFRpbWVsaW5lRWxlbWVudD4gdGltZWxpbmUgPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFRp
bWVsaW5lRWxlbWVudChkb2N1bWVudCwgY29udHJvbHMpKTsKLSAgICB0aW1lbGluZS0+ZW5zdXJl
VXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIHRpbWVsaW5lLT5zZXRUeXBlKCJyYW5nZSIpOwot
ICAgIHRpbWVsaW5lLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHByZWNpc2lv
bkF0dHIsIEF0b21TdHJpbmcoImZsb2F0IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpKTsKLSAgICByZXR1cm4gdGltZWxpbmU7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGltZWxp
bmVFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSAgICAvLyBM
ZWZ0IGJ1dHRvbiBpcyAwLiBSZWplY3RzIG1vdXNlIGV2ZW50cyBub3QgZnJvbSBsZWZ0IGJ1dHRv
bi4KLSAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+
KGV2ZW50KS5idXR0b24oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5kZXJlcigp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZWRvd25FdmVudCkKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPmJlZ2luU2NydWJi
aW5nKCk7Ci0KLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZl
bnQpCi0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5lbmRTY3J1YmJpbmcoKTsKLQotICAgIE1l
ZGlhQ29udHJvbElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAg
ICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCB8fCBldmVu
dC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQgfHwgZXZlbnQudHlwZSgpID09
IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZG91
YmxlIHRpbWUgPSB2YWx1ZSgpLnRvRG91YmxlKCk7Ci0gICAgaWYgKChldmVudC5pc0lucHV0RXZl
bnQoKSB8fCBldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmlucHV0RXZlbnQpICYmIHRpbWUg
IT0gbWVkaWFDb250cm9sbGVyKCktPmN1cnJlbnRUaW1lKCkpCi0gICAgICAgIG1lZGlhQ29udHJv
bGxlcigpLT5zZXRDdXJyZW50VGltZSh0aW1lKTsKLQotICAgIFJlbmRlclNsaWRlciYgc2xpZGVy
ID0gZG93bmNhc3Q8UmVuZGVyU2xpZGVyPigqcmVuZGVyZXIoKSk7Ci0gICAgaWYgKHNsaWRlci5p
bkRyYWdNb2RlKCkpCi0gICAgICAgIG1fY29udHJvbHMtPnVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxh
eSgpOwotfQotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi1ib29sIE1lZGlhQ29udHJvbFRp
bWVsaW5lRWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKQotewotICAgIGlm
ICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPU19GQU1JTFkpCi0KLXZvaWQgTWVkaWFDb250cm9s
VGltZWxpbmVFbGVtZW50OjpzZXRQb3NpdGlvbihkb3VibGUgY3VycmVudFRpbWUpCi17Ci0gICAg
c2V0VmFsdWUoU3RyaW5nOjpudW1iZXIoY3VycmVudFRpbWUpKTsKLX0KLQotdm9pZCBNZWRpYUNv
bnRyb2xUaW1lbGluZUVsZW1lbnQ6OnNldER1cmF0aW9uKGRvdWJsZSBkdXJhdGlvbikKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUobWF4QXR0ciwgQXRvbVN0cmluZzo6bnVtYmVyKGR1cmF0aW9uKSk7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sUGFuZWxW
b2x1bWVTbGlkZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQo
RG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVu
dChkb2N1bWVudCkKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1j
b250cm9scy12b2x1bWUtc2xpZGVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
KTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudD4gTWVkaWFD
b250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50
KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQ+IHNsaWRl
ciA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50KGRv
Y3VtZW50KSk7Ci0gICAgc2xpZGVyLT5lbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAg
c2xpZGVyLT5zZXRUeXBlKCJyYW5nZSIpOwotICAgIHNsaWRlci0+c2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihwcmVjaXNpb25BdHRyLCBBdG9tU3RyaW5nKCJmbG9hdCIsIEF0b21T
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgc2xpZGVyLT5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKG1heEF0dHIsIEF0b21TdHJpbmcoIjEiLCBBdG9tU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBzbGlkZXI7Ci19Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVt
ZVNsaWRlckVsZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50
KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1l
bnQoZG9jdW1lbnQpCi17Ci0gICAgc2V0UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEt
Y29udHJvbHMtZnVsbHNjcmVlbi12b2x1bWUtc2xpZGVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlk
ZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudDo6Y3Jl
YXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sRnVsbHNjcmVl
blZvbHVtZVNsaWRlckVsZW1lbnQ+IHNsaWRlciA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9s
RnVsbHNjcmVlblZvbHVtZVNsaWRlckVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBzbGlkZXItPmVu
c3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBzbGlkZXItPnNldFR5cGUoInJhbmdlIik7
Ci0gICAgc2xpZGVyLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHByZWNpc2lv
bkF0dHIsIEF0b21TdHJpbmcoImZsb2F0IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpKTsKLSAgICBzbGlkZXItPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4
QXR0ciwgQXRvbVN0cmluZygiMSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7
Ci0gICAgcmV0dXJuIHNsaWRlcjsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1NZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sRnVs
bHNjcmVlbkJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250
cm9sSW5wdXRFbGVtZW50KGRvY3VtZW50LCBNZWRpYUVudGVyRnVsbHNjcmVlbkJ1dHRvbikKLXsK
LSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2Ny
ZWVuLWJ1dHRvbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJl
ZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sRnVsbHNj
cmVlbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVm
PE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJlZigq
bmV3IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50KGRvY3VtZW50KSk7Ci0gICAg
YnV0dG9uLT5lbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgYnV0dG9uLT5zZXRUeXBl
KCJidXR0b24iKTsKLSAgICBidXR0b24tPmhpZGUoKTsKLSAgICByZXR1cm4gYnV0dG9uOwotfQot
Ci12b2lkIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5jbGlja0V2ZW50KSB7Ci0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgICAgICAv
LyBPbmx5IHVzZSB0aGUgbmV3IGZ1bGwgc2NyZWVuIEFQSSBpZiB0aGUgZnVsbFNjcmVlbkVuYWJs
ZWQgc2V0dGluZyBoYXMKLSAgICAgICAgLy8gYmVlbiBleHBsaWNpdGx5IGVuYWJsZWQuIE90aGVy
d2lzZSwgdXNlIHRoZSBvbGQgZnVsbHNjcmVlbiBBUEkuIFRoaXMKLSAgICAgICAgLy8gYWxsb3dz
IGFwcHMgd2hpY2ggZW1iZWQgYSBXZWJWaWV3IHRvIHJldGFpbiB0aGUgZXhpc3RpbmcgZnVsbCBz
Y3JlZW4KLSAgICAgICAgLy8gdmlkZW8gaW1wbGVtZW50YXRpb24gd2l0aG91dCByZXF1aXJpbmcg
dGhlbSB0byBpbXBsZW1lbnQgdGhlaXIgb3duIGZ1bGwKLSAgICAgICAgLy8gc2NyZWVuIGJlaGF2
aW9yLgotICAgICAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmZ1bGxTY3JlZW5FbmFibGVk
KCkpIHsKLSAgICAgICAgICAgIGlmIChkb2N1bWVudCgpLmZ1bGxzY3JlZW5NYW5hZ2VyKCkuaXNG
dWxsc2NyZWVuKCkgJiYgZG9jdW1lbnQoKS5mdWxsc2NyZWVuTWFuYWdlcigpLmN1cnJlbnRGdWxs
c2NyZWVuRWxlbWVudCgpID09IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKSkKLSAgICAgICAgICAg
ICAgICBkb2N1bWVudCgpLmZ1bGxzY3JlZW5NYW5hZ2VyKCkuY2FuY2VsRnVsbHNjcmVlbigpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCkuZnVsbHNjcmVlbk1h
bmFnZXIoKS5yZXF1ZXN0RnVsbHNjcmVlbkZvckVsZW1lbnQocGFyZW50TWVkaWFFbGVtZW50KHRo
aXMpLmdldCgpLCBGdWxsc2NyZWVuTWFuYWdlcjo6RXhlbXB0SUZyYW1lQWxsb3dGdWxsc2NyZWVu
UmVxdWlyZW1lbnQpOwotICAgICAgICB9IGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgbWVkaWFD
b250cm9sbGVyKCktPmVudGVyRnVsbHNjcmVlbigpOwotICAgICAgICBldmVudC5zZXREZWZhdWx0
SGFuZGxlZCgpOwotICAgIH0KLSAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKGV2ZW50KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVu
dDo6c2V0SXNGdWxsc2NyZWVuKGJvb2wgaXNGdWxsc2NyZWVuKQotewotICAgIHNldERpc3BsYXlU
eXBlKGlzRnVsbHNjcmVlbiA/IE1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b24gOiBNZWRpYUVudGVy
RnVsbHNjcmVlbkJ1dHRvbik7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkK
LSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1bWVudCwgTWVkaWFVbk11dGVCdXR0
b24pCi17Ci0gICAgc2V0UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMt
ZnVsbHNjcmVlbi12b2x1bWUtbWluLWJ1dHRvbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9u
RWxlbWVudD4gTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1dHRvbkVsZW1lbnQ6OmNy
ZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbEZ1bGxzY3Jl
ZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgYnV0
dG9uLT5lbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgYnV0dG9uLT5zZXRUeXBlKCJi
dXR0b24iKTsKLSAgICByZXR1cm4gYnV0dG9uOwotfQotCi12b2lkIE1lZGlhQ29udHJvbEZ1bGxz
Y3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBl
dmVudCkKLXsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50
KSB7Ci0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5zZXRWb2x1bWUoMCk7Ci0gICAgICAgIGV2
ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfQotICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLU1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVtZW50OjpN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9j
dW1lbnQpCi06IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1bWVudCwgTWVkaWFNdXRlQnV0
dG9uKQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xz
LWZ1bGxzY3JlZW4tdm9sdW1lLW1heC1idXR0b24iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRv
bkVsZW1lbnQ+IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVtZW50Ojpj
cmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xGdWxsc2Ny
ZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1
dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgi
YnV0dG9uIik7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYg
ZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCkgewotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0Vm9sdW1lKDEpOwotICAgICAgICBl
dmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0KLSAgICBIVE1MSW5wdXRFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1NZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQ6Ok1lZGlh
Q29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0g
ICAgOiBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhVGltZVJl
bWFpbmluZ0Rpc3BsYXkpCi17Ci0gICAgc2V0UHNldWRvKGdldE1lZGlhQ29udHJvbFRpbWVSZW1h
aW5pbmdEaXNwbGF5RWxlbWVudFNoYWRvd1BzZXVkb0lkKCkpOwotfQotCi1SZWY8TWVkaWFDb250
cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50PiBNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5n
RGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50KGRv
Y3VtZW50KSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBnZXRNZWRpYUNvbnRyb2xU
aW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnRTaGFkb3dQc2V1ZG9JZCgpCi17Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEF0b21TdHJpbmc+IGlkKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRp
bWUtcmVtYWluaW5nLWRpc3BsYXkiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
Ci0gICAgcmV0dXJuIGlkOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LU1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ6Ok1lZGlhQ29udHJvbEN1cnJl
bnRUaW1lRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250
cm9sVGltZURpc3BsYXlFbGVtZW50KGRvY3VtZW50LCBNZWRpYUN1cnJlbnRUaW1lRGlzcGxheSkK
LXsKLSAgICBzZXRQc2V1ZG8oZ2V0TWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVu
dFNoYWRvd1BzZXVkb0lkKCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNw
bGF5RWxlbWVudD4gTWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudDo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYUNv
bnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50KGRvY3VtZW50KSk7Ci19Ci0KLXN0YXRpYyBj
b25zdCBBdG9tU3RyaW5nJiBnZXRNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50
U2hhZG93UHNldWRvSWQoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5n
PiBpZCgiLXdlYmtpdC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxheSIsIEF0b21T
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLQot
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6TWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRy
b2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYVRleHRUcmFja0Rpc3BsYXlDb250YWluZXIpCi17
Ci0gICAgc2V0UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250
YWluZXIiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBhdXRv
IGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBlbGVtZW50LT5oaWRlKCk7Ci0gICAgcmV0dXJuIGVsZW1l
bnQ7Ci19Ci0KLVJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHls
ZSwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikKLXsKLSAgICByZXR1cm4gY3JlYXRlUmVuZGVy
ZXI8UmVuZGVyQmxvY2tGbG93PigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwotfQotCi1zdGF0aWMg
Ym9vbCBjb21wYXJlQ3VlSW50ZXJ2YWxGb3JEaXNwbGF5KGNvbnN0IEN1ZUludGVydmFsJiBvbmUs
IGNvbnN0IEN1ZUludGVydmFsJiB0d28pCi17Ci0gICAgcmV0dXJuIG9uZS5kYXRhKCktPmlzUG9z
aXRpb25lZEFib3ZlKHR3by5kYXRhKCkpOwotfTsKLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVEaXNwbGF5KCkKLXsKLSAgICBpZiAoIW1lZGlhQ29u
dHJvbGxlcigpLT5jbG9zZWRDYXB0aW9uc1Zpc2libGUoKSkKLSAgICAgICAgcmVtb3ZlQ2hpbGRy
ZW4oKTsKLQotICAgIGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHRoaXMp
OwotICAgIC8vIDEuIElmIHRoZSBtZWRpYSBlbGVtZW50IGlzIGFuIGF1ZGlvIGVsZW1lbnQsIG9y
IGlzIGFub3RoZXIgcGxheWJhY2sKLSAgICAvLyBtZWNoYW5pc20gd2l0aCBubyByZW5kZXJpbmcg
YXJlYSwgYWJvcnQgdGhlc2Ugc3RlcHMuIFRoZXJlIGlzIG5vdGhpbmcgdG8KLSAgICAvLyByZW5k
ZXIuCi0gICAgaWYgKCFtZWRpYUVsZW1lbnQgfHwgIW1lZGlhRWxlbWVudC0+aXNWaWRlbygpIHx8
IG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyAyLiBMZXQgdmlkZW8gYmUgdGhlIG1lZGlhIGVsZW1lbnQgb3Igb3RoZXIgcGxheWJh
Y2sgbWVjaGFuaXNtLgotICAgIEhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvID0gZG93bmNhc3Q8SFRN
TFZpZGVvRWxlbWVudD4oKm1lZGlhRWxlbWVudCk7Ci0KLSAgICAvLyAzLiBMZXQgb3V0cHV0IGJl
IGFuIGVtcHR5IGxpc3Qgb2YgYWJzb2x1dGVseSBwb3NpdGlvbmVkIENTUyBibG9jayBib3hlcy4K
LQotICAgIC8vIDQuIElmIHRoZSB1c2VyIGFnZW50IGlzIGV4cG9zaW5nIGEgdXNlciBpbnRlcmZh
Y2UgZm9yIHZpZGVvLCBhZGQgdG8KLSAgICAvLyBvdXRwdXQgb25lIG9yIG1vcmUgY29tcGxldGVs
eSB0cmFuc3BhcmVudCBwb3NpdGlvbmVkIENTUyBibG9jayBib3hlcyB0aGF0Ci0gICAgLy8gY292
ZXIgdGhlIHNhbWUgcmVnaW9uIGFzIHRoZSB1c2VyIGludGVyZmFjZS4KLQotICAgIC8vIDUuIElm
IHRoZSBsYXN0IHRpbWUgdGhlc2UgcnVsZXMgd2VyZSBydW4sIHRoZSB1c2VyIGFnZW50IHdhcyBu
b3QgZXhwb3NpbmcKLSAgICAvLyBhIHVzZXIgaW50ZXJmYWNlIGZvciB2aWRlbywgYnV0IG5vdyBp
dCBpcywgbGV0IHJlc2V0IGJlIHRydWUuIE90aGVyd2lzZSwKLSAgICAvLyBsZXQgcmVzZXQgYmUg
ZmFsc2UuCi0KLSAgICAvLyBUaGVyZSBpcyBub3RoaW5nIHRvIGJlIGRvbmUgZXhwbGljaXRseSBm
b3IgNHRoIGFuZCA1dGggc3RlcHMsIGFzCi0gICAgLy8gZXZlcnl0aGluZyBpcyBoYW5kbGVkIHRo
cm91Z2ggQ1NTLiBUaGUgY2FwdGlvbiBib3ggaXMgb24gdG9wIG9mIHRoZQotICAgIC8vIGNvbnRy
b2xzIGJveCwgaW4gYSBjb250YWluZXIgc2V0IHdpdGggdGhlIC13ZWJraXQtYm94IGRpc3BsYXkg
cHJvcGVydHkuCi0KLSAgICAvLyA2LiBMZXQgdHJhY2tzIGJlIHRoZSBzdWJzZXQgb2YgdmlkZW8n
cyBsaXN0IG9mIHRleHQgdHJhY2tzIHRoYXQgaGF2ZSBhcwotICAgIC8vIHRoZWlyIHJ1bGVzIGZv
ciB1cGRhdGluZyB0aGUgdGV4dCB0cmFjayByZW5kZXJpbmcgdGhlc2UgcnVsZXMgZm9yCi0gICAg
Ly8gdXBkYXRpbmcgdGhlIGRpc3BsYXkgb2YgV2ViVlRUIHRleHQgdHJhY2tzLCBhbmQgd2hvc2Ug
dGV4dCB0cmFjayBtb2RlIGlzCi0gICAgLy8gc2hvd2luZyBvciBzaG93aW5nIGJ5IGRlZmF1bHQu
Ci0gICAgLy8gNy4gTGV0IGN1ZXMgYmUgYW4gZW1wdHkgbGlzdCBvZiB0ZXh0IHRyYWNrIGN1ZXMu
Ci0gICAgLy8gOC4gRm9yIGVhY2ggdHJhY2sgdHJhY2sgaW4gdHJhY2tzLCBhcHBlbmQgdG8gY3Vl
cyBhbGwgdGhlIGN1ZXMgZnJvbQotICAgIC8vIHRyYWNrJ3MgbGlzdCBvZiBjdWVzIHRoYXQgaGF2
ZSB0aGVpciB0ZXh0IHRyYWNrIGN1ZSBhY3RpdmUgZmxhZyBzZXQuCi0gICAgQ3VlTGlzdCBhY3Rp
dmVDdWVzID0gdmlkZW8uY3VycmVudGx5QWN0aXZlQ3VlcygpOwotCi0gICAgLy8gOS4gSWYgcmVz
ZXQgaXMgZmFsc2UsIHRoZW4sIGZvciBlYWNoIHRleHQgdHJhY2sgY3VlIGN1ZSBpbiBjdWVzOiBp
ZiBjdWUncwotICAgIC8vIHRleHQgdHJhY2sgY3VlIGRpc3BsYXkgc3RhdGUgaGFzIGEgc2V0IG9m
IENTUyBib3hlcywgdGhlbiBhZGQgdGhvc2UgYm94ZXMKLSAgICAvLyB0byBvdXRwdXQsIGFuZCBy
ZW1vdmUgY3VlIGZyb20gY3Vlcy4KLQotICAgIC8vIFRoZXJlIGlzIG5vdGhpbmcgZXhwbGljaXRs
eSB0byBiZSBkb25lIGhlcmUsIGFzIGFsbCB0aGUgY2FjaGluZyBvY2N1cnMKLSAgICAvLyB3aXRo
aW4gdGhlIFRleHRUcmFja0N1ZSBpbnN0YW5jZSBpdHNlbGYuIElmIHBhcmFtZXRlcnMgb2YgdGhl
IGN1ZSBjaGFuZ2UsCi0gICAgLy8gdGhlIGRpc3BsYXkgdHJlZSBpcyBjbGVhcmVkLgotCi0gICAg
Ly8gSWYgdGhlIG51bWJlciBvZiBDU1MgYm94ZXMgaW4gdGhlIG91dHB1dCBpcyBsZXNzIHRoYW4g
dGhlIG51bWJlciBvZiBjdWVzCi0gICAgLy8gd2Ugd2lzaCB0byByZW5kZXIgKGUuZy4sIHdlIGFy
ZSBhZGRpbmcgYW5vdGhlciBjdWUgaW4gYSBzZXQgb2Ygcm9sbC11cAotICAgIC8vIGN1ZXMpLCBy
ZW1vdmUgYWxsIHRoZSBleGlzdGluZyBDU1MgYm94ZXMgcmVwcmVzZW50aW5nIHRoZSBjdWVzIGFu
ZCByZS1hZGQKLSAgICAvLyB0aGVtIHNvIHRoYXQgdGhlIG5ldyBjdWUgaXMgYXQgdGhlIGJvdHRv
bS4KLSAgICAvLyBGSVhNRTogQ2FsbGluZyBjb3VudENoaWxkTm9kZXMoKSBoZXJlIGlzIGluZWZm
aWNpZW50LiBXZSBkb24ndCBuZWVkIHRvCi0gICAgLy8gdHJhdmVyc2UgYWxsIGNoaWxkcmVuIGp1
c3QgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGxlc3MgY2hpbGRyZW4gdGhhbiBjdWVzLgotICAgIGlm
IChjb3VudENoaWxkTm9kZXMoKSA8IGFjdGl2ZUN1ZXMuc2l6ZSgpKQotICAgICAgICByZW1vdmVD
aGlsZHJlbigpOwotCi0gICAgYWN0aXZlQ3Vlcy5yZW1vdmVBbGxNYXRjaGluZyhbXSAoQ3VlSW50
ZXJ2YWwmIGN1ZUludGVydmFsKSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9
IGN1ZUludGVydmFsLmRhdGEoKTsKLSAgICAgICAgcmV0dXJuICFjdWUtPnRyYWNrKCkKLSAgICAg
ICAgICAgIHx8ICFjdWUtPnRyYWNrKCktPmlzUmVuZGVyZWQoKQotICAgICAgICAgICAgfHwgY3Vl
LT50cmFjaygpLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpEaXNhYmxlZAotICAgICAgICAg
ICAgfHwgIWN1ZS0+aXNBY3RpdmUoKQotICAgICAgICAgICAgfHwgIWN1ZS0+aXNSZW5kZXJhYmxl
KCk7Ci0gICAgfSk7Ci0KLSAgICAvLyBTb3J0IHRoZSBhY3RpdmUgY3VlcyBmb3IgdGhlIGFwcHJv
cHJpYXRlIGRpc3BsYXkgb3JkZXIuIEZvciBleGFtcGxlLCBmb3Igcm9sbC11cAotICAgIC8vIG9y
IHBhaW50LW9uIGNhcHRpb25zLCB3ZSBuZWVkIHRvIGFkZCB0aGUgY3VlcyBpbiByZXZlcnNlIGNo
cm9ub2xvZ2ljYWwgb3JkZXIsCi0gICAgLy8gc28gdGhhdCB0aGUgbmV3ZXN0IGNhcHRpb25zIGFw
cGVhciBhdCB0aGUgYm90dG9tLgotICAgIHN0ZDo6c29ydChhY3RpdmVDdWVzLmJlZ2luKCksIGFj
dGl2ZUN1ZXMuZW5kKCksICZjb21wYXJlQ3VlSW50ZXJ2YWxGb3JEaXNwbGF5KTsKLQotICAgIGlm
IChtZWRpYUNvbnRyb2xsZXIoKS0+Y2xvc2VkQ2FwdGlvbnNWaXNpYmxlKCkpIHsKLSAgICAgICAg
Ly8gMTAuIEZvciBlYWNoIHRleHQgdHJhY2sgY3VlIGluIGN1ZXMgdGhhdCBoYXMgbm90IHlldCBo
YWQKLSAgICAgICAgLy8gY29ycmVzcG9uZGluZyBDU1MgYm94ZXMgYWRkZWQgdG8gb3V0cHV0LCBp
biB0ZXh0IHRyYWNrIGN1ZSBvcmRlciwgcnVuIHRoZQotICAgICAgICAvLyBmb2xsb3dpbmcgc3Vi
c3RlcHM6Ci0gICAgICAgIGZvciAoYXV0byYgaW50ZXJ2YWwgOiBhY3RpdmVDdWVzKSB7Ci0gICAg
ICAgICAgICBhdXRvIGN1ZSA9IGludGVydmFsLmRhdGEoKTsKLSAgICAgICAgICAgIGN1ZS0+c2V0
Rm9udFNpemUobV9mb250U2l6ZSwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKSwgbV9mb250U2l6
ZUlzSW1wb3J0YW50KTsKLSAgICAgICAgICAgIGlmIChpczxWVFRDdWU+KCpjdWUpKQotICAgICAg
ICAgICAgICAgIHByb2Nlc3NBY3RpdmVWVFRDdWUoZG93bmNhc3Q8VlRUQ3VlPigqY3VlKSk7Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBhdXRvIGRpc3BsYXlCb3ggPSBjdWUt
PmdldERpc3BsYXlUcmVlKG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCksIG1fZm9udFNpemUpOwot
ICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5Qm94LT5oYXNDaGlsZE5vZGVzKCkgJiYgIWNvbnRh
aW5zKGRpc3BsYXlCb3guZ2V0KCkpKQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRDaGlsZCgq
ZGlzcGxheUJveCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyAx
MS4gUmV0dXJuIG91dHB1dC4KLSAgICBpZiAoaGFzQ2hpbGROb2RlcygpKQotICAgICAgICBzaG93
KCk7Ci0gICAgZWxzZQotICAgICAgICBoaWRlKCk7Ci0KLSAgICB1cGRhdGVUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbklmTmVlZGVkKCk7Ci0gICAgdXBkYXRlVGV4dFRyYWNrU3R5bGUoKTsKLSAgICBt
X25lZWRzR2VuZXJhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IHRydWU7Ci19Ci0KLXZvaWQg
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrUmVw
cmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fbmVlZHNHZW5lcmF0ZVRl
eHRUcmFja1JlcHJlc2VudGF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25lZWRzR2Vu
ZXJhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IGZhbHNlOwotCi0gICAgLy8gV2Ugc2hvdWxk
IGNhbGwgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi0+dXBkYXRlKCkgdG8gcGFpbnQgdGhlIHN1
YnRyZWUgb2YKLSAgICAvLyB0aGUgUmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCBhZnRl
ciB0aGUgbGF5b3V0IGlzIGNsZWFuLgotICAgIGlmIChtX3RleHRUcmFja1JlcHJlc2VudGF0aW9u
KQotICAgICAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT51cGRhdGUoKTsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojpwcm9jZXNzQWN0aXZlVlRU
Q3VlKFZUVEN1ZSYgY3VlKQotewotICAgIERFQlVHX0xPRyhMT0dJREVOVElGSUVSLCAiYWRkaW5n
IGFuZCBwb3NpdGlvbmluZyBjdWU6IFwiIiwgY3VlLnRleHQoKSwgIlwiLCBzdGFydD0iLCBjdWUu
c3RhcnRUaW1lKCksICIsIGVuZD0iLCBjdWUuZW5kVGltZSgpLCAiLCBsaW5lPSIsIGN1ZS5saW5l
KCkpOwotICAgIFJlZjxUZXh0VHJhY2tDdWVCb3g+IGRpc3BsYXlCb3ggPSAqY3VlLmdldERpc3Bs
YXlUcmVlKG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCksIG1fZm9udFNpemUpOwotCi0gICAgaWYg
KGF1dG8gcmVnaW9uID0gY3VlLnRyYWNrKCktPnJlZ2lvbnMoKS0+Z2V0UmVnaW9uQnlJZChjdWUu
cmVnaW9uSWQoKSkpIHsKLSAgICAgICAgLy8gTGV0IHJlZ2lvbiBiZSB0aGUgV2ViVlRUIHJlZ2lv
biB3aG9zZSByZWdpb24gaWRlbnRpZmllcgotICAgICAgICAvLyBtYXRjaGVzIHRoZSB0ZXh0IHRy
YWNrIGN1ZSByZWdpb24gaWRlbnRpZmllciBvZiBjdWUuCi0gICAgICAgIFJlZjxIVE1MRGl2RWxl
bWVudD4gcmVnaW9uTm9kZSA9IHJlZ2lvbi0+Z2V0RGlzcGxheVRyZWUoKTsKLQotICAgICAgICBp
ZiAoIWNvbnRhaW5zKHJlZ2lvbk5vZGUucHRyKCkpKQotICAgICAgICAgICAgYXBwZW5kQ2hpbGQo
cmVnaW9uLT5nZXREaXNwbGF5VHJlZSgpKTsKLQotICAgICAgICByZWdpb24tPmFwcGVuZFRleHRU
cmFja0N1ZUJveChXVEZNb3ZlKGRpc3BsYXlCb3gpKTsKLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBJZiBjdWUgaGFzIGFuIGVtcHR5IHRleHQgdHJhY2sgY3VlIHJlZ2lvbiBpZGVudGlmaWVyIG9y
IHRoZXJlIGlzIG5vCi0gICAgICAgIC8vIFdlYlZUVCByZWdpb24gd2hvc2UgcmVnaW9uIGlkZW50
aWZpZXIgaXMgaWRlbnRpY2FsIHRvIGN1ZSdzIHRleHQKLSAgICAgICAgLy8gdHJhY2sgY3VlIHJl
Z2lvbiBpZGVudGlmaWVyLCBydW4gdGhlIGZvbGxvd2luZyBzdWJzdGVwczoKLSAgICAgICAgaWYg
KGRpc3BsYXlCb3gtPmhhc0NoaWxkTm9kZXMoKSAmJiAhY29udGFpbnMoZGlzcGxheUJveC5wdHIo
KSkpIHsKLSAgICAgICAgICAgIC8vIE5vdGU6IHRoZSBkaXNwbGF5IHRyZWUgb2YgYSBjdWUgaXMg
cmVtb3ZlZCB3aGVuIHRoZSBhY3RpdmUgZmxhZyBvZiB0aGUgY3VlIGlzIHVuc2V0LgotICAgICAg
ICAgICAgYXBwZW5kQ2hpbGQoZGlzcGxheUJveCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlQWN0aXZlQ3Vl
c0ZvbnRTaXplKCkKLXsKLSAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsK
LSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgc21h
bGxlc3REaW1lbnNpb24gPSBzdGQ6Om1pbihtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLmhlaWdo
dCgpLCBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLndpZHRoKCkpOwotICAgIGZsb2F0IGZvbnRT
Y2FsZSA9IGRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLmNh
cHRpb25Gb250U2l6ZVNjYWxlQW5kSW1wb3J0YW5jZShtX2ZvbnRTaXplSXNJbXBvcnRhbnQpOwot
ICAgIG1fZm9udFNpemUgPSBscm91bmRmKHNtYWxsZXN0RGltZW5zaW9uICogZm9udFNjYWxlKTsK
LQotICAgIGZvciAoYXV0byYgYWN0aXZlQ3VlIDogbWVkaWFFbGVtZW50LT5jdXJyZW50bHlBY3Rp
dmVDdWVzKCkpIHsKLSAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gYWN0aXZlQ3Vl
LmRhdGEoKTsKLSAgICAgICAgaWYgKGN1ZS0+aXNSZW5kZXJhYmxlKCkpCi0gICAgICAgICAgICBj
dWUtPnNldEZvbnRTaXplKG1fZm9udFNpemUsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCksIG1f
Zm9udFNpemVJc0ltcG9ydGFudCk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVRleHRTdHJva2VTdHlsZSgpCi17Ci0gICAgaWYg
KCFkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBtZWRpYUVs
ZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBTdHJpbmcgbGFuZ3VhZ2U7Ci0KLSAgICAvLyBG
SVhNRTogU2luY2UgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBtb3JlIHRoYW4gb25lIHRleHQgdHJh
Y2sgZW5hYmxlZCwgdGhlIGZvbGxvd2luZyBjb2RlIG1heSBub3QgZmluZCB0aGUgY29ycmVjdCBs
YW5ndWFnZS4KLSAgICAvLyBUaGUgZGVmYXVsdCBVSSBvbmx5IGFsbG93cyBhIHVzZXIgdG8gZW5h
YmxlIG9uZSB0cmFjayBhdCBhIHRpbWUsIHNvIGl0IHNob3VsZCBiZSBPSyBmb3Igbm93LCBidXQg
d2Ugc2hvdWxkIGNvbnNpZGVyIGRvaW5nCi0gICAgLy8gdGhpcyBkaWZmZXJlbnRseSwgc2VlIDxo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5ODc1Pi4KLSAgICBpZiAo
YXV0byogdHJhY2tzID0gbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCkpIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRyYWNrcy0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAg
ICAgYXV0byB0cmFjayA9IHRyYWNrcy0+aXRlbShpKTsKLSAgICAgICAgICAgIGlmICh0cmFjayAm
JiB0cmFjay0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZykgewotICAgICAgICAg
ICAgICAgIGxhbmd1YWdlID0gdHJhY2stPnZhbGlkQkNQNDdMYW5ndWFnZSgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmxv
YXQgc3Ryb2tlV2lkdGg7Ci0gICAgYm9vbCBpbXBvcnRhbnQ7Ci0KLSAgICAvLyBGSVhNRTogZmlu
ZCBhIHdheSB0byBzZXQgdGhpcyBwcm9wZXJ0eSBpbiB0aGUgc3R5bGVzaGVldCBsaWtlIHRoZSBv
dGhlciB1c2VyIHN0eWxlIHByZWZlcmVuY2VzLCBzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjk4NzQ+LgotICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKS0+Z3Jv
dXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5jYXB0aW9uU3Ryb2tlV2lkdGhGb3JGb250KG1fZm9u
dFNpemUsIGxhbmd1YWdlLCBzdHJva2VXaWR0aCwgaW1wb3J0YW50KSkKLSAgICAgICAgc2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVN0cm9rZVdpZHRoLCBzdHJva2VXaWR0aCwgQ1NT
VW5pdFR5cGU6OkNTU19QWCwgaW1wb3J0YW50KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklmTmVl
ZGVkKCkKLXsKLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlz
KTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBy
ZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uID0gbWVkaWFFbGVtZW50LT5yZXF1aXJlc1Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uKCk7Ci0gICAgaWYgKCFoYXNDaGlsZE5vZGVzKCkgfHwgIXJl
cXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24pIHsKLSAgICAgICAgaWYgKG1fdGV4dFRyYWNr
UmVwcmVzZW50YXRpb24pIHsKLSAgICAgICAgICAgIGlmICghcmVxdWlyZXNUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbikKLSAgICAgICAgICAgICAgICBjbGVhclRleHRUcmFja1JlcHJlc2VudGF0aW9u
KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV90ZXh0VHJhY2tSZXByZXNl
bnRhdGlvbi0+c2V0SGlkZGVuKHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoIW1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24pIHsKLSAgICAgICAgQUxX
QVlTX0xPRyhMT0dJREVOVElGSUVSKTsKLQotICAgICAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0
aW9uID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb246OmNyZWF0ZSgqdGhpcyk7Ci0gICAgICAgIGlm
IChkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRp
b24tPnNldENvbnRlbnRTY2FsZShkb2N1bWVudCgpLnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3Io
KSk7Ci0gICAgICAgIG1lZGlhRWxlbWVudC0+c2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb24obV90
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5nZXQoKSk7Ci0gICAgfQotCi0gICAgbV90ZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbi0+c2V0SGlkZGVuKGZhbHNlKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjbGVhclRleHRUcmFja1JlcHJlc2VudGF0aW9uKCkK
LXsKLSAgICBpZiAoIW1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7Ci0KLSAgICBtX3RleHRUcmFja1JlcHJl
c2VudGF0aW9uID0gbnVsbHB0cjsKLSAgICBpZiAoYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRN
ZWRpYUVsZW1lbnQodGhpcykpCi0gICAgICAgIG1lZGlhRWxlbWVudC0+c2V0VGV4dFRyYWNrUmVw
cmVzZW50YXRpb24obnVsbHB0cik7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29u
dGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrU3R5bGUoKQotewotICAgIGlmIChtX3RleHRU
cmFja1JlcHJlc2VudGF0aW9uKSB7Ci0gICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVBYnNvbHV0ZSk7Ci0gICAgICAgIHNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS53
aWR0aCgpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWlnaHQo
KSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlMZWZ0LCAwLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgc2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgMCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5UG9zaXRpb24pOwotICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlXaWR0aCk7Ci0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eUhlaWdodCk7Ci0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQp
OwotICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3ApOwotfQotCi12
b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmVudGVyZWRGdWxsc2Ny
ZWVuKCkKLXsKLSAgICB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklmTmVlZGVkKCk7Ci0g
ICAgdXBkYXRlU2l6ZXMoRm9yY2VVcGRhdGU6Olllcyk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6ZXhpdGVkRnVsbHNjcmVlbigpCi17Ci0gICAgY2xl
YXJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpOwotICAgIHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRl
OjpZZXMpOwotfQotCi1ib29sIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6
OnVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKQotewotICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50
TWVkaWFFbGVtZW50KHRoaXMpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBJbnRSZWN0IHZpZGVvQm94OwotICAgIGlmIChtX3RleHRUcmFja1Jl
cHJlc2VudGF0aW9uKSB7Ci0gICAgICAgIHZpZGVvQm94ID0gbV90ZXh0VHJhY2tSZXByZXNlbnRh
dGlvbi0+Ym91bmRzKCk7Ci0gICAgICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gZG9jdW1l
bnQoKS5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgICAgIHZpZGVvQm94LnNldFdp
ZHRoKHZpZGVvQm94LndpZHRoKCkgKiBkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgIHZpZGVv
Qm94LnNldEhlaWdodCh2aWRlb0JveC5oZWlnaHQoKSAqIGRldmljZVNjYWxlRmFjdG9yKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoIWlzPFJlbmRlclZpZGVvPihtZWRpYUVsZW1lbnQtPnJl
bmRlcmVyKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2aWRlb0JveCA9
IGRvd25jYXN0PFJlbmRlclZpZGVvPigqbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKS52aWRlb0Jv
eCgpOwotICAgIH0KLQotICAgIGlmIChtX3ZpZGVvRGlzcGxheVNpemUgPT0gdmlkZW9Cb3gpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fdmlkZW9EaXNwbGF5U2l6ZSA9IHZpZGVvQm94
OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQ6OnVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlIGZvcmNlKQotewotICAgIGlmICgh
dXBkYXRlVmlkZW9EaXNwbGF5U2l6ZSgpICYmIGZvcmNlICE9IEZvcmNlVXBkYXRlOjpZZXMpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHRoaXMp
OwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtZWRpYUVs
ZW1lbnQtPnN5bmNUZXh0VHJhY2tCb3VuZHMoKTsKLQotICAgIHVwZGF0ZUFjdGl2ZUN1ZXNGb250
U2l6ZSgpOwotICAgIHVwZGF0ZVRleHRTdHJva2VTdHlsZSgpOwotICAgIGZvciAoYXV0byYgYWN0
aXZlQ3VlIDogbWVkaWFFbGVtZW50LT5jdXJyZW50bHlBY3RpdmVDdWVzKCkpCi0gICAgICAgIGFj
dGl2ZUN1ZS5kYXRhKCktPnJlY2FsY3VsYXRlU3R5bGVzKCk7Ci0KLSAgICBtX3Rhc2tRdWV1ZS5l
bnF1ZXVlVGFzayhbdGhpc10gKCkgewotICAgICAgICB1cGRhdGVEaXNwbGF5KCk7Ci0gICAgfSk7
Ci19Ci0KLVJlZlB0cjxJbWFnZT4gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSgpCi17Ci0gICAgaWYgKCFoYXND
aGlsZE5vZGVzKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVmUHRyPEZyYW1l
PiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7Ci0KLSAgICBh
dXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIXJlbmRlcmVyLT5oYXNMYXllcigpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGRvd25j
YXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5ZXIoKTsKLQotICAgIGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yID0gMTsKLSAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50
KCkucGFnZSgpKQotICAgICAgICBkZXZpY2VTY2FsZUZhY3RvciA9IHBhZ2UtPmRldmljZVNjYWxl
RmFjdG9yKCk7Ci0KLSAgICBJbnRSZWN0IHBhaW50aW5nUmVjdCA9IEludFJlY3QoSW50UG9pbnQo
KSwgbGF5ZXItPnNpemUoKSk7Ci0KLSAgICAvLyBGSVhNRSAoMTQ5NDIyKTogVGhpcyBidWZmZXIg
c2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5n
UmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFj
dG9yKSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
YXV0byBwYWludEZsYWdzID0gUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0
aW5nQWxsUGhhc2VzRmxhZ3MoKTsKLSAgICBwYWludEZsYWdzLmFkZChSZW5kZXJMYXllcjo6UGFp
bnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cyk7Ci0gICAgbGF5ZXItPnBhaW50KGJ1ZmZlci0+Y29u
dGV4dCgpLCBwYWludGluZ1JlY3QsIExheW91dFNpemUoKSwgeyBQYWludEJlaGF2aW9yOjpGbGF0
dGVuQ29tcG9zaXRpbmdMYXllcnMsIFBhaW50QmVoYXZpb3I6OlNuYXBzaG90dGluZyB9LCBudWxs
cHRyLCBwYWludEZsYWdzKTsKLQotICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFn
ZShXVEZNb3ZlKGJ1ZmZlcikpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQ6OnRleHRUcmFja1JlcHJlc2VudGF0aW9uQm91bmRzQ2hhbmdlZChjb25zdCBJ
bnRSZWN0JikKLXsKLSAgICB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklmTmVlZGVkKCk7
Ci0gICAgdXBkYXRlU2l6ZXMoKTsKLX0KLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotY29u
c3QgTG9nZ2VyJiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojpsb2dnZXIo
KSBjb25zdAotewotICAgIGlmICghbV9sb2dnZXIpCi0gICAgICAgIG1fbG9nZ2VyID0gJmRvY3Vt
ZW50KCkubG9nZ2VyKCk7Ci0KLSAgICByZXR1cm4gKm1fbG9nZ2VyOwotfQotCi1jb25zdCB2b2lk
KiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojpsb2dJZGVudGlmaWVyKCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fbG9nSWRlbnRpZmllcikgewotICAgICAgICBpZiAoYXV0byBt
ZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcykpCi0gICAgICAgICAgICBtX2xv
Z0lkZW50aWZpZXIgPSBtZWRpYUVsZW1lbnQtPmxvZ0lkZW50aWZpZXIoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbV9sb2dJZGVudGlmaWVyOwotfQotCi1XVEZMb2dDaGFubmVsJiBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojpsb2dDaGFubmVsKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gTG9nTWVkaWE7Ci19Ci0jZW5kaWYgLy8gIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0KLSNl
bmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVP
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxl
bWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YjE0ZDZmNTJiZTZhMGU3MzgxOTE3
MjkzZDUzNzc5YmNmOTFkOTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMu
aAorKysgL2Rldi9udWxsCkBAIC0xLDUzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShW
SURFTykKLQotI2luY2x1ZGUgIkdlbmVyaWNUYXNrUXVldWUuaCIKLSNpbmNsdWRlICJNZWRpYUNv
bnRyb2xFbGVtZW50VHlwZXMuaCIKLSNpbmNsdWRlICJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5o
IgotI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFBh
bmVsRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xEaXZFbGVtZW50IHsKLSAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudCk7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVu
dCYpOwotCi0gICAgdm9pZCBzZXRDYW5CZURyYWdnZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRJc0Rp
c3BsYXllZChib29sKTsKLQotICAgIHZvaWQgcmVzZXRQb3NpdGlvbigpOwotICAgIHZvaWQgbWFr
ZU9wYXF1ZSgpOwotICAgIHZvaWQgbWFrZVRyYW5zcGFyZW50KCk7Ci0KLSNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZU1vdmVFdmVudHMoKSBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2
ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAg
IGV4cGxpY2l0IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9p
ZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHN0YXJ0
RHJhZyhjb25zdCBMYXlvdXRQb2ludCYgZXZlbnRMb2NhdGlvbik7Ci0gICAgdm9pZCBjb250aW51
ZURyYWcoY29uc3QgTGF5b3V0UG9pbnQmIGV2ZW50TG9jYXRpb24pOwotICAgIHZvaWQgZW5kRHJh
ZygpOwotCi0gICAgdm9pZCBzdGFydFRpbWVyKCk7Ci0gICAgdm9pZCBzdG9wVGltZXIoKTsKLSAg
ICB2b2lkIHRyYW5zaXRpb25UaW1lckZpcmVkKCk7Ci0KLSAgICB2b2lkIHNldFBvc2l0aW9uKGNv
bnN0IExheW91dFBvaW50Jik7Ci0KLSAgICBib29sIG1fY2FuQmVEcmFnZ2VkOwotICAgIGJvb2wg
bV9pc0JlaW5nRHJhZ2dlZDsKLSAgICBib29sIG1faXNEaXNwbGF5ZWQ7Ci0gICAgYm9vbCBtX29w
YXF1ZTsKLSAgICBMYXlvdXRQb2ludCBtX2xhc3REcmFnRXZlbnRMb2NhdGlvbjsKLSAgICBMYXlv
dXRQb2ludCBtX2N1bXVsYXRpdmVEcmFnT2Zmc2V0OwotCi0gICAgVGltZXIgbV90cmFuc2l0aW9u
VGltZXI7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1l
ZGlhQ29udHJvbFBhbmVsRW5jbG9zdXJlRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRy
b2xEaXZFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFBh
bmVsRW5jbG9zdXJlRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRy
b2xQYW5lbEVuY2xvc3VyZUVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgot
ICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbFBhbmVsRW5jbG9zdXJlRWxlbWVudChEb2N1bWVudCYp
OwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNv
bnRyb2xPdmVybGF5RW5jbG9zdXJlRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xE
aXZFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbE92ZXJs
YXlFbmNsb3N1cmVFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJv
bE92ZXJsYXlFbmNsb3N1cmVFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotcHJpdmF0ZToK
LSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xPdmVybGF5RW5jbG9zdXJlRWxlbWVudChEb2N1bWVu
dCYpOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRp
YUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250
cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFD
b250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotICAg
IHZvaWQgc2V0VGltZURpc3BsYXlzSGlkZGVuKGJvb2wpOwotCi1wcml2YXRlOgotICAgIGV4cGxp
Y2l0IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCYpOwotCi0g
ICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJT
dHlsZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBvdmVycmlkZTsKLX07Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sVm9sdW1lU2xp
ZGVyQ29udGFpbmVyRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xEaXZFbGVtZW50
IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNv
bnRhaW5lckVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sVm9s
dW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZU1vdmVFdmVudHMo
KSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBleHBs
aWNpdCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KERvY3VtZW50Jik7
Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotICAg
IFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5
bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3Bs
YXlFbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgewotICAgIFdU
Rl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQpOwot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ+
IGNyZWF0ZShEb2N1bWVudCYpOwotCi0gICAgdm9pZCB1cGRhdGUoKTsKLQotcHJpdmF0ZToKLSAg
ICBleHBsaWNpdCBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudChEb2N1bWVudCYpOwot
Ci0gICAgZW51bSBTdGF0ZUJlaW5nRGlzcGxheWVkIHsgTm90aGluZywgTG9hZGluZywgTGl2ZUJy
b2FkY2FzdCB9OwotICAgIFN0YXRlQmVpbmdEaXNwbGF5ZWQgbV9zdGF0ZUJlaW5nRGlzcGxheWVk
OwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNv
bnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbE11
dGVCdXR0b25FbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJv
bFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFD
b250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50JiwgTWVkaWFDb250
cm9scyopOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9u
ZFRvTW91c2VNb3ZlRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0K
LXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVu
dChEb2N1bWVudCYsIE1lZGlhQ29udHJvbHMqKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCYpIG92ZXJyaWRlOwotCi0gICAgTWVkaWFDb250cm9scyogbV9jb250cm9sczsK
LX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250
cm9sTXV0ZUJ1dHRvbkVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShE
b2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbFZvbHVtZVNs
aWRlck11dGVCdXR0b25FbGVtZW50KERvY3VtZW50Jik7Ci19OwotCi0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQg
ZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50KTsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1l
bnQmKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRU
b01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQot
ICAgIHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBl
eHBsaWNpdCBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAg
dm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbE92ZXJsYXlQbGF5
QnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgewot
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0b25F
bGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbE92ZXJsYXlQbGF5
QnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIHVwZGF0ZURpc3Bs
YXlUeXBlKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9s
T3ZlcmxheVBsYXlCdXR0b25FbGVtZW50KERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIGRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50
IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudCk7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVs
ZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlh
Q29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgYm9vbCBp
c0ZvcndhcmRCdXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci19OwotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFNlZWtC
YWNrQnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxl
bWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xTZWVrQmFja0J1
dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sU2Vla0Jh
Y2tCdXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICBleHBs
aWNpdCBNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAg
IGJvb2wgaXNGb3J3YXJkQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
LX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250
cm9sUmV3aW5kQnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVs
ZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sUmV3aW5kQnV0
dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xSZXdpbmRC
dXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNv
bnRyb2xSZXdpbmRCdXR0b25FbGVtZW50KERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIGRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVt
ZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRp
bWVCdXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotI2lmICFQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRp
YUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAg
dm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFRvZ2dsZUNsb3Nl
ZENhcHRpb25zQnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVs
ZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sVG9nZ2xlQ2xv
c2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlh
Q29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50
JiwgTWVkaWFDb250cm9scyopOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9v
bCB3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KLSNlbmRpZgotCi0gICAgdm9pZCB1cGRhdGVEaXNwbGF5VHlwZSgpIG92ZXJyaWRlOwotCi1w
cml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0
dG9uRWxlbWVudChEb2N1bWVudCYsIE1lZGlhQ29udHJvbHMqKTsKLQotICAgIHZvaWQgZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpIHx8
IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oR1RLKQotICAgIE1lZGlhQ29udHJvbHMqIG1fY29u
dHJvbHM7Ci0jZW5kaWYKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
Y2xhc3MgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNDb250YWluZXJFbGVtZW50IGZpbmFsIDog
cHVibGljIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FU
RUQoTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNDb250YWluZXJFbGVtZW50KTsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVu
dD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBi
b29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnND
b250YWluZXJFbGVtZW50KERvY3VtZW50Jik7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxl
bWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xEaXZFbGVtZW50IHsKLSAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVu
dCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1Ry
YWNrTGlzdEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYsIE1lZGlhQ29udHJvbHMqKTsKLQotI2lm
ICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tF
dmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotICAgIHZvaWQgdXBk
YXRlRGlzcGxheSgpOwotCi1wcml2YXRlOgotICAgIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25z
VHJhY2tMaXN0RWxlbWVudChEb2N1bWVudCYsIE1lZGlhQ29udHJvbHMqKTsKLQotICAgIHZvaWQg
cmVidWlsZFRyYWNrTGlzdE1lbnUoKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCYpIG92ZXJyaWRlOwotCi0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEVsZW1lbnQ+PiBU
cmFja01lbnVJdGVtczsKLSAgICBUcmFja01lbnVJdGVtcyBtX21lbnVJdGVtczsKLSNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxFbGVtZW50PiwgUmVm
UHRyPFRleHRUcmFjaz4+IE1lbnVJdGVtVG9UcmFja01hcDsKLSAgICBNZW51SXRlbVRvVHJhY2tN
YXAgbV9tZW51VG9UcmFja01hcDsKLSNlbmRpZgotICAgIE1lZGlhQ29udHJvbHMqIG1fY29udHJv
bHM7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlh
Q29udHJvbFRpbWVsaW5lRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVs
ZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sVGltZWxpbmVF
bGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxl
bWVudD4gY3JlYXRlKERvY3VtZW50JiwgTWVkaWFDb250cm9scyopOwotCi0jaWYgIVBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50cygpIG92
ZXJyaWRlOwotI2VuZGlmCi0KLSAgICB2b2lkIHNldFBvc2l0aW9uKGRvdWJsZSk7Ci0gICAgdm9p
ZCBzZXREdXJhdGlvbihkb3VibGUpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29u
dHJvbFRpbWVsaW5lRWxlbWVudChEb2N1bWVudCYsIE1lZGlhQ29udHJvbHMqKTsKLQotICAgIHZv
aWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotCi0gICAgTWVkaWFDb250
cm9scyogbV9jb250cm9sczsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotY2xhc3MgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQgZmluYWwgOiBwdWJs
aWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1l
bnQmKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRU
b01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQot
ICAgIHZvaWQgc2V0SXNGdWxsc2NyZWVuKGJvb2wpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0
IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50KERvY3VtZW50Jik7Ci0KLSAgICB2
b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLX07Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sUGFuZWxWb2x1bWVT
bGlkZXJFbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1l
bnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sUGFuZWxWb2x1bWVT
bGlkZXJFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFBhbmVs
Vm9sdW1lU2xpZGVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAg
ZXhwbGljaXQgTWVkaWFDb250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50KERvY3VtZW50Jik7
Ci19OwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRy
b2xWb2x1bWVTbGlkZXJFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlh
Q29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50PiBjcmVhdGUo
RG9jdW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xGdWxsc2Ny
ZWVuVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYpOwotfTsKLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWlu
QnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgewot
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1p
bkJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sRnVs
bHNjcmVlblZvbHVtZU1pbkJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi0jaWYg
IVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2
ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAg
IGV4cGxpY2l0IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50KERv
Y3VtZW50Jik7Ci0gICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7
Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlh
Q29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudD4gY3Jl
YXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdp
bGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQot
I2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sRnVsbHNjcmVlblZv
bHVtZU1heEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotfTsKLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVu
dCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQgewotICAgIFdU
Rl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVt
ZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdE
aXNwbGF5RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgTWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50KERvY3VtZW50Jik7Ci19
OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJv
bEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sVGlt
ZURpc3BsYXlFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJv
bEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVk
aWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0K
LXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxl
bWVudChEb2N1bWVudCYpOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotCi1jbGFzcyBWVFRDdWU7Ci0KLWNsYXNzIE1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQgZmluYWwKLSAgICA6IHB1YmxpYyBNZWRp
YUNvbnRyb2xEaXZFbGVtZW50Ci0gICAgLCBwdWJsaWMgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
bGllbnQKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICAsIHByaXZhdGUgTG9nZ2VySGVs
cGVyCi0jZW5kaWYKLXsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSAg
ICBlbnVtIGNsYXNzIEZvcmNlVXBkYXRlIHsgWWVzLCBObyB9OwotICAgIHZvaWQgdXBkYXRlU2l6
ZXMoRm9yY2VVcGRhdGUgZm9yY2UgPSBGb3JjZVVwZGF0ZTo6Tm8pOwotICAgIHZvaWQgdXBkYXRl
RGlzcGxheSgpOwotCi0gICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdl
SWZOZWVkZWQoKTsKLQotICAgIHZvaWQgZW50ZXJlZEZ1bGxzY3JlZW4oKTsKLSAgICB2b2lkIGV4
aXRlZEZ1bGxzY3JlZW4oKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50KERvY3VtZW50Jik7Ci0KLSAgICAvLyBFbGVtZW50Ci0g
ICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJT
dHlsZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBvdmVycmlkZTsKLQotICAgIC8vIFRl
eHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50Ci0gICAgUmVmUHRyPEltYWdlPiBjcmVhdGVUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0ZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQoY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotCi0g
ICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklmTmVlZGVkKCk7Ci0gICAgdm9p
ZCBjbGVhclRleHRUcmFja1JlcHJlc2VudGF0aW9uKCk7Ci0KLSAgICBib29sIHVwZGF0ZVZpZGVv
RGlzcGxheVNpemUoKTsKLSAgICB2b2lkIHVwZGF0ZUFjdGl2ZUN1ZXNGb250U2l6ZSgpOwotICAg
IHZvaWQgdXBkYXRlVGV4dFN0cm9rZVN0eWxlKCk7Ci0gICAgdm9pZCBwcm9jZXNzQWN0aXZlVlRU
Q3VlKFZUVEN1ZSYpOwotICAgIHZvaWQgdXBkYXRlVGV4dFRyYWNrU3R5bGUoKTsKLQotI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGNvbnN0IExvZ2dlciYgbG9nZ2VyKCkgY29uc3QgZmlu
YWw7Ci0gICAgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcigpIGNvbnN0IGZpbmFsOwotICAgIFdU
RkxvZ0NoYW5uZWwmIGxvZ0NoYW5uZWwoKSBjb25zdCBmaW5hbDsKLSAgICBjb25zdCBjaGFyKiBs
b2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudCI7IH0KLSAgICBtdXRhYmxlIFJlZlB0cjxMb2dnZXI+IG1fbG9nZ2Vy
OwotICAgIG11dGFibGUgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyIHsgbnVsbHB0ciB9Owot
I2VuZGlmCi0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dFRyYWNrUmVwcmVzZW50YXRpb24+IG1f
dGV4dFRyYWNrUmVwcmVzZW50YXRpb247Ci0KLSAgICBHZW5lcmljVGFza1F1ZXVlPFRpbWVyPiBt
X3Rhc2tRdWV1ZTsKLSAgICBJbnRSZWN0IG1fdmlkZW9EaXNwbGF5U2l6ZTsKLSAgICBpbnQgbV9m
b250U2l6ZSB7IDAgfTsKLSAgICBib29sIG1fZm9udFNpemVJc0ltcG9ydGFudCB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX25lZWRzR2VuZXJhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiB7IGZhbHNl
IH07Ci19OwotCi0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mYzFkZWJjZWUyZjYzZGY2N2QxNDM0NjI3MjI3NTMyZDYwNjVjYjc4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudC5jcHAKQEAgLTAsMCArMSw0ODcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmgiCisKKyNp
ZiBFTkFCTEUoVklERU8pCisKKyNpbmNsdWRlICJET01Ub2tlbkxpc3QuaCIKKyNpbmNsdWRlICJF
bGVtZW50Q2hpbGRJdGVyYXRvci5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZ1bGxzY3Jl
ZW5NYW5hZ2VyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRN
TFZpZGVvRWxlbWVudC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiTG9j
YWxpemVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQT0RJbnRl
cnZhbC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCisjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2hhZG93Um9v
dC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgorI2luY2x1ZGUgIlRleHRUcmFja0N1
ZUdlbmVyaWMuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tMaXN0LmgiCisjaW5jbHVkZSAiVlRUUmVn
aW9uTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisjaW5jbHVkZSA8
d3RmL0xhbmd1YWdlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQpOworCit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCitS
ZWY8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgSFRNTE1l
ZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQoreworICAgIGF1dG8gZWxlbWVudCA9IGFkb3B0UmVm
KCpuZXcgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCwgbWVk
aWFFbGVtZW50KSk7CisgICAgZWxlbWVudC0+aGlkZSgpOworICAgIHJldHVybiBlbGVtZW50Owor
fQorCitNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgSFRNTE1lZGlhRWxl
bWVudCYgZWxlbWVudCkKKyAgICA6IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgZG9jdW1lbnQpCisg
ICAgLCBtX21lZGlhRWxlbWVudChtYWtlV2Vha1B0cigmZWxlbWVudCkpCit7CisgICAgc2V0UHNl
dWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250YWluZXIiLCBBdG9t
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworfQorCitSZW5kZXJQdHI8UmVuZGVyRWxl
bWVudD4gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlRWxlbWVu
dFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYp
Cit7CisgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxvdz4oKnRoaXMsIFdU
Rk1vdmUoc3R5bGUpKTsKK30KKworc3RhdGljIGJvb2wgY29tcGFyZUN1ZUludGVydmFsRm9yRGlz
cGxheShjb25zdCBDdWVJbnRlcnZhbCYgb25lLCBjb25zdCBDdWVJbnRlcnZhbCYgdHdvKQorewor
ICAgIHJldHVybiBvbmUuZGF0YSgpLT5pc1Bvc2l0aW9uZWRBYm92ZSh0d28uZGF0YSgpKTsKK307
CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlz
cGxheSgpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50ICYmICFtX21lZGlhRWxlbWVudC0+Y2xv
c2VkQ2FwdGlvbnNWaXNpYmxlKCkpCisgICAgICAgIHJlbW92ZUNoaWxkcmVuKCk7CisKKyAgICAv
LyAxLiBJZiB0aGUgbWVkaWEgZWxlbWVudCBpcyBhbiBhdWRpbyBlbGVtZW50LCBvciBpcyBhbm90
aGVyIHBsYXliYWNrCisgICAgLy8gbWVjaGFuaXNtIHdpdGggbm8gcmVuZGVyaW5nIGFyZWEsIGFi
b3J0IHRoZXNlIHN0ZXBzLiBUaGVyZSBpcyBub3RoaW5nIHRvCisgICAgLy8gcmVuZGVyLgorICAg
IGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5pc1ZpZGVvKCkgfHwgbV92
aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIDIuIExldCB2aWRlbyBiZSB0aGUgbWVkaWEgZWxlbWVudCBvciBvdGhlciBwbGF5YmFjayBt
ZWNoYW5pc20uCisgICAgSFRNTFZpZGVvRWxlbWVudCYgdmlkZW8gPSBkb3duY2FzdDxIVE1MVmlk
ZW9FbGVtZW50PigqbV9tZWRpYUVsZW1lbnQpOworCisgICAgLy8gMy4gTGV0IG91dHB1dCBiZSBh
biBlbXB0eSBsaXN0IG9mIGFic29sdXRlbHkgcG9zaXRpb25lZCBDU1MgYmxvY2sgYm94ZXMuCisK
KyAgICAvLyA0LiBJZiB0aGUgdXNlciBhZ2VudCBpcyBleHBvc2luZyBhIHVzZXIgaW50ZXJmYWNl
IGZvciB2aWRlbywgYWRkIHRvCisgICAgLy8gb3V0cHV0IG9uZSBvciBtb3JlIGNvbXBsZXRlbHkg
dHJhbnNwYXJlbnQgcG9zaXRpb25lZCBDU1MgYmxvY2sgYm94ZXMgdGhhdAorICAgIC8vIGNvdmVy
IHRoZSBzYW1lIHJlZ2lvbiBhcyB0aGUgdXNlciBpbnRlcmZhY2UuCisKKyAgICAvLyA1LiBJZiB0
aGUgbGFzdCB0aW1lIHRoZXNlIHJ1bGVzIHdlcmUgcnVuLCB0aGUgdXNlciBhZ2VudCB3YXMgbm90
IGV4cG9zaW5nCisgICAgLy8gYSB1c2VyIGludGVyZmFjZSBmb3IgdmlkZW8sIGJ1dCBub3cgaXQg
aXMsIGxldCByZXNldCBiZSB0cnVlLiBPdGhlcndpc2UsCisgICAgLy8gbGV0IHJlc2V0IGJlIGZh
bHNlLgorCisgICAgLy8gVGhlcmUgaXMgbm90aGluZyB0byBiZSBkb25lIGV4cGxpY2l0bHkgZm9y
IDR0aCBhbmQgNXRoIHN0ZXBzLCBhcworICAgIC8vIGV2ZXJ5dGhpbmcgaXMgaGFuZGxlZCB0aHJv
dWdoIENTUy4gVGhlIGNhcHRpb24gYm94IGlzIG9uIHRvcCBvZiB0aGUKKyAgICAvLyBjb250cm9s
cyBib3gsIGluIGEgY29udGFpbmVyIHNldCB3aXRoIHRoZSAtd2Via2l0LWJveCBkaXNwbGF5IHBy
b3BlcnR5LgorCisgICAgLy8gNi4gTGV0IHRyYWNrcyBiZSB0aGUgc3Vic2V0IG9mIHZpZGVvJ3Mg
bGlzdCBvZiB0ZXh0IHRyYWNrcyB0aGF0IGhhdmUgYXMKKyAgICAvLyB0aGVpciBydWxlcyBmb3Ig
dXBkYXRpbmcgdGhlIHRleHQgdHJhY2sgcmVuZGVyaW5nIHRoZXNlIHJ1bGVzIGZvcgorICAgIC8v
IHVwZGF0aW5nIHRoZSBkaXNwbGF5IG9mIFdlYlZUVCB0ZXh0IHRyYWNrcywgYW5kIHdob3NlIHRl
eHQgdHJhY2sgbW9kZSBpcworICAgIC8vIHNob3dpbmcgb3Igc2hvd2luZyBieSBkZWZhdWx0Lgor
ICAgIC8vIDcuIExldCBjdWVzIGJlIGFuIGVtcHR5IGxpc3Qgb2YgdGV4dCB0cmFjayBjdWVzLgor
ICAgIC8vIDguIEZvciBlYWNoIHRyYWNrIHRyYWNrIGluIHRyYWNrcywgYXBwZW5kIHRvIGN1ZXMg
YWxsIHRoZSBjdWVzIGZyb20KKyAgICAvLyB0cmFjaydzIGxpc3Qgb2YgY3VlcyB0aGF0IGhhdmUg
dGhlaXIgdGV4dCB0cmFjayBjdWUgYWN0aXZlIGZsYWcgc2V0LgorICAgIEN1ZUxpc3QgYWN0aXZl
Q3VlcyA9IHZpZGVvLmN1cnJlbnRseUFjdGl2ZUN1ZXMoKTsKKworICAgIC8vIDkuIElmIHJlc2V0
IGlzIGZhbHNlLCB0aGVuLCBmb3IgZWFjaCB0ZXh0IHRyYWNrIGN1ZSBjdWUgaW4gY3VlczogaWYg
Y3VlJ3MKKyAgICAvLyB0ZXh0IHRyYWNrIGN1ZSBkaXNwbGF5IHN0YXRlIGhhcyBhIHNldCBvZiBD
U1MgYm94ZXMsIHRoZW4gYWRkIHRob3NlIGJveGVzCisgICAgLy8gdG8gb3V0cHV0LCBhbmQgcmVt
b3ZlIGN1ZSBmcm9tIGN1ZXMuCisKKyAgICAvLyBUaGVyZSBpcyBub3RoaW5nIGV4cGxpY2l0bHkg
dG8gYmUgZG9uZSBoZXJlLCBhcyBhbGwgdGhlIGNhY2hpbmcgb2NjdXJzCisgICAgLy8gd2l0aGlu
IHRoZSBUZXh0VHJhY2tDdWUgaW5zdGFuY2UgaXRzZWxmLiBJZiBwYXJhbWV0ZXJzIG9mIHRoZSBj
dWUgY2hhbmdlLAorICAgIC8vIHRoZSBkaXNwbGF5IHRyZWUgaXMgY2xlYXJlZC4KKworICAgIC8v
IElmIHRoZSBudW1iZXIgb2YgQ1NTIGJveGVzIGluIHRoZSBvdXRwdXQgaXMgbGVzcyB0aGFuIHRo
ZSBudW1iZXIgb2YgY3VlcworICAgIC8vIHdlIHdpc2ggdG8gcmVuZGVyIChlLmcuLCB3ZSBhcmUg
YWRkaW5nIGFub3RoZXIgY3VlIGluIGEgc2V0IG9mIHJvbGwtdXAKKyAgICAvLyBjdWVzKSwgcmVt
b3ZlIGFsbCB0aGUgZXhpc3RpbmcgQ1NTIGJveGVzIHJlcHJlc2VudGluZyB0aGUgY3VlcyBhbmQg
cmUtYWRkCisgICAgLy8gdGhlbSBzbyB0aGF0IHRoZSBuZXcgY3VlIGlzIGF0IHRoZSBib3R0b20u
CisgICAgLy8gRklYTUU6IENhbGxpbmcgY291bnRDaGlsZE5vZGVzKCkgaGVyZSBpcyBpbmVmZmlj
aWVudC4gV2UgZG9uJ3QgbmVlZCB0bworICAgIC8vIHRyYXZlcnNlIGFsbCBjaGlsZHJlbiBqdXN0
IHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBsZXNzIGNoaWxkcmVuIHRoYW4gY3Vlcy4KKyAgICBpZiAo
Y291bnRDaGlsZE5vZGVzKCkgPCBhY3RpdmVDdWVzLnNpemUoKSkKKyAgICAgICAgcmVtb3ZlQ2hp
bGRyZW4oKTsKKworICAgIGFjdGl2ZUN1ZXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10gKEN1ZUludGVy
dmFsJiBjdWVJbnRlcnZhbCkgeworICAgICAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBj
dWVJbnRlcnZhbC5kYXRhKCk7CisgICAgICAgIHJldHVybiAhY3VlLT50cmFjaygpCisgICAgICAg
ICAgICB8fCAhY3VlLT50cmFjaygpLT5pc1JlbmRlcmVkKCkKKyAgICAgICAgICAgIHx8IGN1ZS0+
dHJhY2soKS0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6RGlzYWJsZWQKKyAgICAgICAgICAg
IHx8ICFjdWUtPmlzQWN0aXZlKCkKKyAgICAgICAgICAgIHx8ICFjdWUtPmlzUmVuZGVyYWJsZSgp
OworICAgIH0pOworCisgICAgLy8gU29ydCB0aGUgYWN0aXZlIGN1ZXMgZm9yIHRoZSBhcHByb3By
aWF0ZSBkaXNwbGF5IG9yZGVyLiBGb3IgZXhhbXBsZSwgZm9yIHJvbGwtdXAKKyAgICAvLyBvciBw
YWludC1vbiBjYXB0aW9ucywgd2UgbmVlZCB0byBhZGQgdGhlIGN1ZXMgaW4gcmV2ZXJzZSBjaHJv
bm9sb2dpY2FsIG9yZGVyLAorICAgIC8vIHNvIHRoYXQgdGhlIG5ld2VzdCBjYXB0aW9ucyBhcHBl
YXIgYXQgdGhlIGJvdHRvbS4KKyAgICBzdGQ6OnNvcnQoYWN0aXZlQ3Vlcy5iZWdpbigpLCBhY3Rp
dmVDdWVzLmVuZCgpLCAmY29tcGFyZUN1ZUludGVydmFsRm9yRGlzcGxheSk7CisKKyAgICBpZiAo
bV9tZWRpYUVsZW1lbnQtPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpKSB7CisgICAgICAgIC8vIDEw
LiBGb3IgZWFjaCB0ZXh0IHRyYWNrIGN1ZSBpbiBjdWVzIHRoYXQgaGFzIG5vdCB5ZXQgaGFkCisg
ICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgQ1NTIGJveGVzIGFkZGVkIHRvIG91dHB1dCwgaW4gdGV4
dCB0cmFjayBjdWUgb3JkZXIsIHJ1biB0aGUKKyAgICAgICAgLy8gZm9sbG93aW5nIHN1YnN0ZXBz
OgorICAgICAgICBmb3IgKGF1dG8mIGludGVydmFsIDogYWN0aXZlQ3VlcykgeworICAgICAgICAg
ICAgYXV0byBjdWUgPSBpbnRlcnZhbC5kYXRhKCk7CisgICAgICAgICAgICBjdWUtPnNldEZvbnRT
aXplKG1fZm9udFNpemUsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCksIG1fZm9udFNpemVJc0lt
cG9ydGFudCk7CisgICAgICAgICAgICBpZiAoaXM8VlRUQ3VlPigqY3VlKSkKKyAgICAgICAgICAg
ICAgICBwcm9jZXNzQWN0aXZlVlRUQ3VlKGRvd25jYXN0PFZUVEN1ZT4oKmN1ZSkpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBkaXNwbGF5Qm94ID0gY3VlLT5nZXRE
aXNwbGF5VHJlZShtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZGlzcGxheUJveC0+aGFzQ2hpbGROb2RlcygpICYmICFjb250YWlucyhk
aXNwbGF5Qm94LmdldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ2hpbGQoKmRpc3Bs
YXlCb3gpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gMTEuIFJl
dHVybiBvdXRwdXQuCisgICAgaWYgKGhhc0NoaWxkTm9kZXMoKSkKKyAgICAgICAgc2hvdygpOwor
ICAgIGVsc2UKKyAgICAgICAgaGlkZSgpOworCisgICAgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25JZk5lZWRlZCgpOworICAgIHVwZGF0ZVRleHRUcmFja1N0eWxlKCk7CisgICAgbV9uZWVk
c0dlbmVyYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24gPSB0cnVlOworfQorCit2b2lkIE1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uSW1hZ2VJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX25lZWRzR2VuZXJhdGVUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9uZWVkc0dlbmVyYXRl
VGV4dFRyYWNrUmVwcmVzZW50YXRpb24gPSBmYWxzZTsKKworICAgIC8vIFdlIHNob3VsZCBjYWxs
IG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpIHRvIHBhaW50IHRoZSBzdWJ0cmVl
IG9mCisgICAgLy8gdGhlIFJlbmRlclRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQgYWZ0ZXIgdGhl
IGxheW91dCBpcyBjbGVhbi4KKyAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikKKyAg
ICAgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi0+dXBkYXRlKCk7Cit9CisKK3ZvaWQgTWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6cHJvY2Vzc0FjdGl2ZVZUVEN1ZShW
VFRDdWUmIGN1ZSkKK3sKKyAgICBERUJVR19MT0coTE9HSURFTlRJRklFUiwgImFkZGluZyBhbmQg
cG9zaXRpb25pbmcgY3VlOiBcIiIsIGN1ZS50ZXh0KCksICJcIiwgc3RhcnQ9IiwgY3VlLnN0YXJ0
VGltZSgpLCAiLCBlbmQ9IiwgY3VlLmVuZFRpbWUoKSwgIiwgbGluZT0iLCBjdWUubGluZSgpKTsK
KyAgICBSZWY8VGV4dFRyYWNrQ3VlQm94PiBkaXNwbGF5Qm94ID0gKmN1ZS5nZXREaXNwbGF5VHJl
ZShtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplKTsKKworICAgIGlmIChhdXRv
IHJlZ2lvbiA9IGN1ZS50cmFjaygpLT5yZWdpb25zKCktPmdldFJlZ2lvbkJ5SWQoY3VlLnJlZ2lv
bklkKCkpKSB7CisgICAgICAgIC8vIExldCByZWdpb24gYmUgdGhlIFdlYlZUVCByZWdpb24gd2hv
c2UgcmVnaW9uIGlkZW50aWZpZXIKKyAgICAgICAgLy8gbWF0Y2hlcyB0aGUgdGV4dCB0cmFjayBj
dWUgcmVnaW9uIGlkZW50aWZpZXIgb2YgY3VlLgorICAgICAgICBSZWY8SFRNTERpdkVsZW1lbnQ+
IHJlZ2lvbk5vZGUgPSByZWdpb24tPmdldERpc3BsYXlUcmVlKCk7CisKKyAgICAgICAgaWYgKCFj
b250YWlucyhyZWdpb25Ob2RlLnB0cigpKSkKKyAgICAgICAgICAgIGFwcGVuZENoaWxkKHJlZ2lv
bi0+Z2V0RGlzcGxheVRyZWUoKSk7CisKKyAgICAgICAgcmVnaW9uLT5hcHBlbmRUZXh0VHJhY2tD
dWVCb3goV1RGTW92ZShkaXNwbGF5Qm94KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYg
Y3VlIGhhcyBhbiBlbXB0eSB0ZXh0IHRyYWNrIGN1ZSByZWdpb24gaWRlbnRpZmllciBvciB0aGVy
ZSBpcyBubworICAgICAgICAvLyBXZWJWVFQgcmVnaW9uIHdob3NlIHJlZ2lvbiBpZGVudGlmaWVy
IGlzIGlkZW50aWNhbCB0byBjdWUncyB0ZXh0CisgICAgICAgIC8vIHRyYWNrIGN1ZSByZWdpb24g
aWRlbnRpZmllciwgcnVuIHRoZSBmb2xsb3dpbmcgc3Vic3RlcHM6CisgICAgICAgIGlmIChkaXNw
bGF5Qm94LT5oYXNDaGlsZE5vZGVzKCkgJiYgIWNvbnRhaW5zKGRpc3BsYXlCb3gucHRyKCkpKSB7
CisgICAgICAgICAgICAvLyBOb3RlOiB0aGUgZGlzcGxheSB0cmVlIG9mIGEgY3VlIGlzIHJlbW92
ZWQgd2hlbiB0aGUgYWN0aXZlIGZsYWcgb2YgdGhlIGN1ZSBpcyB1bnNldC4KKyAgICAgICAgICAg
IGFwcGVuZENoaWxkKGRpc3BsYXlCb3gpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZUFjdGl2ZUN1ZXNGb250
U2l6ZSgpCit7CisgICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQg
c21hbGxlc3REaW1lbnNpb24gPSBzdGQ6Om1pbihtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLmhl
aWdodCgpLCBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLndpZHRoKCkpOworICAgIGZsb2F0IGZv
bnRTY2FsZSA9IGRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygp
LmNhcHRpb25Gb250U2l6ZVNjYWxlQW5kSW1wb3J0YW5jZShtX2ZvbnRTaXplSXNJbXBvcnRhbnQp
OworICAgIG1fZm9udFNpemUgPSBscm91bmRmKHNtYWxsZXN0RGltZW5zaW9uICogZm9udFNjYWxl
KTsKKworICAgIGZvciAoYXV0byYgYWN0aXZlQ3VlIDogbV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRs
eUFjdGl2ZUN1ZXMoKSkgeworICAgICAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBhY3Rp
dmVDdWUuZGF0YSgpOworICAgICAgICBpZiAoY3VlLT5pc1JlbmRlcmFibGUoKSkKKyAgICAgICAg
ICAgIGN1ZS0+c2V0Rm9udFNpemUobV9mb250U2l6ZSwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUo
KSwgbV9mb250U2l6ZUlzSW1wb3J0YW50KTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFN0cm9rZVN0eWxlKCkKK3sKKyAg
ICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1f
bWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU3RyaW5nIGxhbmd1YWdl
OworCisgICAgLy8gRklYTUU6IFNpbmNlIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbW9yZSB0aGFu
IG9uZSB0ZXh0IHRyYWNrIGVuYWJsZWQsIHRoZSBmb2xsb3dpbmcgY29kZSBtYXkgbm90IGZpbmQg
dGhlIGNvcnJlY3QgbGFuZ3VhZ2UuCisgICAgLy8gVGhlIGRlZmF1bHQgVUkgb25seSBhbGxvd3Mg
YSB1c2VyIHRvIGVuYWJsZSBvbmUgdHJhY2sgYXQgYSB0aW1lLCBzbyBpdCBzaG91bGQgYmUgT0sg
Zm9yIG5vdywgYnV0IHdlIHNob3VsZCBjb25zaWRlciBkb2luZworICAgIC8vIHRoaXMgZGlmZmVy
ZW50bHksIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTg3
NT4uCisgICAgaWYgKGF1dG8qIHRyYWNrcyA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCkp
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRyYWNrcy0+bGVuZ3RoKCk7ICsr
aSkgeworICAgICAgICAgICAgYXV0byB0cmFjayA9IHRyYWNrcy0+aXRlbShpKTsKKyAgICAgICAg
ICAgIGlmICh0cmFjayAmJiB0cmFjay0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2lu
ZykgeworICAgICAgICAgICAgICAgIGxhbmd1YWdlID0gdHJhY2stPnZhbGlkQkNQNDdMYW5ndWFn
ZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgZmxvYXQgc3Ryb2tlV2lkdGg7CisgICAgYm9vbCBpbXBvcnRhbnQ7CisKKyAg
ICAvLyBGSVhNRTogZmluZCBhIHdheSB0byBzZXQgdGhpcyBwcm9wZXJ0eSBpbiB0aGUgc3R5bGVz
aGVldCBsaWtlIHRoZSBvdGhlciB1c2VyIHN0eWxlIHByZWZlcmVuY2VzLCBzZWUgPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4NzQ+LgorICAgIGlmIChkb2N1bWVu
dCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5jYXB0aW9uU3Ryb2tlV2lk
dGhGb3JGb250KG1fZm9udFNpemUsIGxhbmd1YWdlLCBzdHJva2VXaWR0aCwgaW1wb3J0YW50KSkK
KyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVN0cm9rZVdpZHRoLCBz
dHJva2VXaWR0aCwgQ1NTVW5pdFR5cGU6OkNTU19QWCwgaW1wb3J0YW50KTsKK30KKwordm9pZCBN
ZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBhdXRvIHJlcXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24gPSBt
X21lZGlhRWxlbWVudC0+cmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpOworICAgIGlm
ICghaGFzQ2hpbGROb2RlcygpIHx8ICFyZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKSB7
CisgICAgICAgIGlmIChtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uKSB7CisgICAgICAgICAgICBp
ZiAoIXJlcXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCisgICAgICAgICAgICAgICAgY2xl
YXJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNldEhpZGRlbih0cnVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3RleHRUcmFja1JlcHJl
c2VudGF0aW9uKSB7CisgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CisKKyAgICAg
ICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IFRleHRUcmFja1JlcHJlc2VudGF0aW9uOjpj
cmVhdGUoKnRoaXMpOworICAgICAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgICAg
ICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT5zZXRDb250ZW50U2NhbGUoZG9jdW1lbnQoKS5w
YWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0
VGV4dFRyYWNrUmVwcmVzZW50YXRpb24obV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5nZXQoKSk7
CisgICAgfQorCisgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi0+c2V0SGlkZGVuKGZhbHNl
KTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjbGVh
clRleHRUcmFja1JlcHJlc2VudGF0aW9uKCkKK3sKKyAgICBpZiAoIW1fdGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklF
Uik7CisKKyAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uID0gbnVsbHB0cjsKKyAgICBpZiAo
bV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbihudWxscHRyKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tTdHlsZSgpCit7CisgICAgaWYgKG1fdGV4dFRy
YWNrUmVwcmVzZW50YXRpb24pIHsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVBvc2l0aW9uLCBDU1NWYWx1ZUFic29sdXRlKTsKKyAgICAgICAgc2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLndp
ZHRoKCksIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLmhlaWdodCgp
LCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eUxlZnQsIDAsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICBzZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wLCAwLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlQb3NpdGlvbik7CisgICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdpZHRoKTsKKyAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
SGVpZ2h0KTsKKyAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCk7
CisgICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCk7Cit9CisKK3Zv
aWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6ZW50ZXJlZEZ1bGxzY3Jl
ZW4oKQoreworICAgIHVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQoKTsKKyAg
ICB1cGRhdGVTaXplcyhGb3JjZVVwZGF0ZTo6WWVzKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpleGl0ZWRGdWxsc2NyZWVuKCkKK3sKKyAgICBjbGVh
clRleHRUcmFja1JlcHJlc2VudGF0aW9uKCk7CisgICAgdXBkYXRlU2l6ZXMoRm9yY2VVcGRhdGU6
Olllcyk7Cit9CisKK2Jvb2wgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6
dXBkYXRlVmlkZW9EaXNwbGF5U2l6ZSgpCit7CisgICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50UmVjdCB2aWRlb0JveDsKKyAgICBpZiAobV90ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbikgeworICAgICAgICB2aWRlb0JveCA9IG1fdGV4dFRyYWNrUmVw
cmVzZW50YXRpb24tPmJvdW5kcygpOworICAgICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9
IGRvY3VtZW50KCkucGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAgICB2aWRlb0Jv
eC5zZXRXaWR0aCh2aWRlb0JveC53aWR0aCgpICogZGV2aWNlU2NhbGVGYWN0b3IpOworICAgICAg
ICB2aWRlb0JveC5zZXRIZWlnaHQodmlkZW9Cb3guaGVpZ2h0KCkgKiBkZXZpY2VTY2FsZUZhY3Rv
cik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFpczxSZW5kZXJWaWRlbz4obV9tZWRpYUVs
ZW1lbnQtPnJlbmRlcmVyKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB2
aWRlb0JveCA9IGRvd25jYXN0PFJlbmRlclZpZGVvPigqbV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVy
KCkpLnZpZGVvQm94KCk7CisgICAgfQorCisgICAgaWYgKG1fdmlkZW9EaXNwbGF5U2l6ZSA9PSB2
aWRlb0JveCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV92aWRlb0Rpc3BsYXlTaXpl
ID0gdmlkZW9Cb3g7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlU2l6ZXMoRm9yY2VVcGRhdGUgZm9yY2UpCit7
CisgICAgaWYgKCF1cGRhdGVWaWRlb0Rpc3BsYXlTaXplKCkgJiYgZm9yY2UgIT0gRm9yY2VVcGRh
dGU6OlllcykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKSB8
fCAhbV9tZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbWVkaWFFbGVtZW50
LT5zeW5jVGV4dFRyYWNrQm91bmRzKCk7CisKKyAgICB1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUo
KTsKKyAgICB1cGRhdGVUZXh0U3Ryb2tlU3R5bGUoKTsKKyAgICBmb3IgKGF1dG8mIGFjdGl2ZUN1
ZSA6IG1fbWVkaWFFbGVtZW50LT5jdXJyZW50bHlBY3RpdmVDdWVzKCkpCisgICAgICAgIGFjdGl2
ZUN1ZS5kYXRhKCktPnJlY2FsY3VsYXRlU3R5bGVzKCk7CisKKyAgICBtX3Rhc2tRdWV1ZS5lbnF1
ZXVlVGFzayhbdGhpc10gKCkgeworICAgICAgICB1cGRhdGVEaXNwbGF5KCk7CisgICAgfSk7Cit9
CisKK1JlZlB0cjxJbWFnZT4gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6
Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSgpCit7CisgICAgaWYgKCFoYXNDaGls
ZE5vZGVzKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPEZyYW1lPiBm
cmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisKKyAgICBhdXRv
KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIXJlbmRlcmVyLT5oYXNMYXllcigpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlbmRlckxheWVyKiBsYXllciA9IGRvd25jYXN0
PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5ZXIoKTsKKworICAgIGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yID0gMTsKKyAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCku
cGFnZSgpKQorICAgICAgICBkZXZpY2VTY2FsZUZhY3RvciA9IHBhZ2UtPmRldmljZVNjYWxlRmFj
dG9yKCk7CisKKyAgICBJbnRSZWN0IHBhaW50aW5nUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwg
bGF5ZXItPnNpemUoKSk7CisKKyAgICAvLyBGSVhNRSAoMTQ5NDIyKTogVGhpcyBidWZmZXIgc2hv
dWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVj
dC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9y
KSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0
byBwYWludEZsYWdzID0gUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5n
QWxsUGhhc2VzRmxhZ3MoKTsKKyAgICBwYWludEZsYWdzLmFkZChSZW5kZXJMYXllcjo6UGFpbnRM
YXllclRlbXBvcmFyeUNsaXBSZWN0cyk7CisgICAgbGF5ZXItPnBhaW50KGJ1ZmZlci0+Y29udGV4
dCgpLCBwYWludGluZ1JlY3QsIExheW91dFNpemUoKSwgeyBQYWludEJlaGF2aW9yOjpGbGF0dGVu
Q29tcG9zaXRpbmdMYXllcnMsIFBhaW50QmVoYXZpb3I6OlNuYXBzaG90dGluZyB9LCBudWxscHRy
LCBwYWludEZsYWdzKTsKKworICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShX
VEZNb3ZlKGJ1ZmZlcikpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OnRleHRUcmFja1JlcHJlc2VudGF0aW9uQm91bmRzQ2hhbmdlZChjb25zdCBJbnRS
ZWN0JikKK3sKKyAgICB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklmTmVlZGVkKCk7Cisg
ICAgdXBkYXRlU2l6ZXMoKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50OjpoaWRlKCkKK3sKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5RGlzcGxheSwgQ1NTVmFsdWVOb25lKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50OjpzaG93KCkKK3sKKyAgICByZW1vdmVJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5RGlzcGxheSk7Cit9CisKK2Jvb2wgTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6aXNTaG93aW5nKCkgY29uc3QKK3sKKyAgICBjb25zdCBTdHlsZVBy
b3BlcnRpZXMqIHByb3BlcnR5U2V0ID0gaW5saW5lU3R5bGUoKTsKKworICAgIC8vIEZvbGxvd2lu
ZyB0aGUgY29kZSBmcm9tIHNob3coKSBhbmQgaGlkZSgpIGFib3ZlLCB3ZSBvbmx5IGhhdmUKKyAg
ICAvLyB0byBjaGVjayBmb3IgdGhlIHByZXNlbnNlIG9mIGlubGluZSBkaXNwbGF5LgorICAgIHJl
dHVybiAoIXByb3BlcnR5U2V0IHx8ICFwcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0eURpc3BsYXkpKTsKK30KKworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECitj
b25zdCBMb2dnZXImIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmxvZ2dl
cigpIGNvbnN0Cit7CisgICAgaWYgKCFtX2xvZ2dlcikKKyAgICAgICAgbV9sb2dnZXIgPSAmZG9j
dW1lbnQoKS5sb2dnZXIoKTsKKworICAgIHJldHVybiAqbV9sb2dnZXI7Cit9CisKK2NvbnN0IHZv
aWQqIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmxvZ0lkZW50aWZpZXIo
KSBjb25zdAoreworICAgIGlmICghbV9sb2dJZGVudGlmaWVyICYmIG1fbWVkaWFFbGVtZW50KQor
ICAgICAgICBtX2xvZ0lkZW50aWZpZXIgPSBtX21lZGlhRWxlbWVudC0+bG9nSWRlbnRpZmllcigp
OworCisgICAgcmV0dXJuIG1fbG9nSWRlbnRpZmllcjsKK30KKworV1RGTG9nQ2hhbm5lbCYgTWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nQ2hhbm5lbCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIExvZ01lZGlhOworfQorI2VuZGlmIC8vICFSRUxFQVNFX0xPR19ESVNBQkxF
RAorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorCisvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShWSURFTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
M2U5ZWU1NzQzZmI5MmY4ZDg1OWYzMTdjMjBmNzhjM2U2ZGUyOWQxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudC5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShWSURF
TykKKworI2luY2x1ZGUgIkdlbmVyaWNUYXNrUXVldWUuaCIKKyNpbmNsdWRlICJIVE1MRGl2RWxl
bWVudC5oIgorI2luY2x1ZGUgIk1lZGlhQ29udHJvbGxlckludGVyZmFjZS5oIgorI2luY2x1ZGUg
IlRleHRUcmFja1JlcHJlc2VudGF0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0xvZ2dlckhlbHBlci5o
PgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lm
IEVOQUJMRShWSURFT19UUkFDSykKKworY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKK2NsYXNzIFZU
VEN1ZTsKKworY2xhc3MgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCBmaW5h
bAorICAgIDogcHVibGljIEhUTUxEaXZFbGVtZW50CisgICAgLCBwdWJsaWMgVGV4dFRyYWNrUmVw
cmVzZW50YXRpb25DbGllbnQKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAsIHByaXZh
dGUgTG9nZ2VySGVscGVyCisjZW5kaWYKK3sKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQpOworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4gY3JlYXRlKERvY3Vt
ZW50JiwgSFRNTE1lZGlhRWxlbWVudCYpOworCisgICAgZW51bSBjbGFzcyBGb3JjZVVwZGF0ZSB7
IFllcywgTm8gfTsKKyAgICB2b2lkIHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlIGZvcmNlID0gRm9y
Y2VVcGRhdGU6Ok5vKTsKKyAgICB2b2lkIHVwZGF0ZURpc3BsYXkoKTsKKworICAgIHZvaWQgdXBk
YXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKCk7CisKKyAgICB2b2lkIGVu
dGVyZWRGdWxsc2NyZWVuKCk7CisgICAgdm9pZCBleGl0ZWRGdWxsc2NyZWVuKCk7CisKK3ByaXZh
dGU6CisgICAgZXhwbGljaXQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudChE
b2N1bWVudCYsIEhUTUxNZWRpYUVsZW1lbnQmKTsKKworICAgIC8vIEVsZW1lbnQKKyAgICBSZW5k
ZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYs
IGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOworCisgICAgLy8gVGV4dFRyYWNr
UmVwcmVzZW50YXRpb25DbGllbnQKKyAgICBSZWZQdHI8SW1hZ2U+IGNyZWF0ZVRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSW1hZ2UoKSBvdmVycmlkZTsKKyAgICB2b2lkIHRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uQm91bmRzQ2hhbmdlZChjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lk
IHVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQoKTsKKyAgICB2b2lkIGNsZWFy
VGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKTsKKworICAgIGJvb2wgdXBkYXRlVmlkZW9EaXNwbGF5
U2l6ZSgpOworICAgIHZvaWQgdXBkYXRlQWN0aXZlQ3Vlc0ZvbnRTaXplKCk7CisgICAgdm9pZCB1
cGRhdGVUZXh0U3Ryb2tlU3R5bGUoKTsKKyAgICB2b2lkIHByb2Nlc3NBY3RpdmVWVFRDdWUoVlRU
Q3VlJik7CisgICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tTdHlsZSgpOworCisgICAgdm9pZCBoaWRl
KCk7CisgICAgdm9pZCBzaG93KCk7CisgICAgYm9vbCBpc1Nob3dpbmcoKSBjb25zdDsKKworI2lm
ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGNvbnN0IExvZ2dlciYgbG9nZ2VyKCkgY29uc3Qg
ZmluYWw7CisgICAgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcigpIGNvbnN0IGZpbmFsOworICAg
IFdURkxvZ0NoYW5uZWwmIGxvZ0NoYW5uZWwoKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBjaGFy
KiBsb2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudCI7IH0KKyAgICBtdXRhYmxlIFJlZlB0cjxMb2dnZXI+IG1fbG9n
Z2VyOworICAgIG11dGFibGUgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyIHsgbnVsbHB0ciB9
OworI2VuZGlmCisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dFRyYWNrUmVwcmVzZW50YXRpb24+
IG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb247CisKKyAgICBHZW5lcmljVGFza1F1ZXVlPFRpbWVy
PiBtX3Rhc2tRdWV1ZTsKKyAgICBXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVt
ZW50OworICAgIEludFJlY3QgbV92aWRlb0Rpc3BsYXlTaXplOworICAgIGludCBtX2ZvbnRTaXpl
IHsgMCB9OworICAgIGJvb2wgbV9mb250U2l6ZUlzSW1wb3J0YW50IHsgZmFsc2UgfTsKKyAgICBi
b29sIG1fbmVlZHNHZW5lcmF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uIHsgZmFsc2UgfTsKK307
CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
VklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTkyN2I5N2JmZTZkMjllOWU0Zjg0NzQ3NDY3
ZDJiNDI1NGMzNjNlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJM
RShWSURFTykKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzLmgiCi0KLSNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCi0jaW5jbHVkZSAiTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJSZW5kZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLSNpbmNsdWRl
ICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJv
bHMpOwotCi1NZWRpYUNvbnRyb2xzOjpNZWRpYUNvbnRyb2xzKERvY3VtZW50JiBkb2N1bWVudCkK
LSAgICA6IEhUTUxEaXZFbGVtZW50KEhUTUxOYW1lczo6ZGl2VGFnLCBkb2N1bWVudCkKLSAgICAs
IG1fbWVkaWFDb250cm9sbGVyKDApCi0gICAgLCBtX3BhbmVsKDApCi0jaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQotICAgICwgbV90ZXh0RGlzcGxheUNvbnRhaW5lcigwKQotI2VuZGlmCi0gICAgLCBt
X3BsYXlCdXR0b24oMCkKLSAgICAsIG1fY3VycmVudFRpbWVEaXNwbGF5KDApCi0gICAgLCBtX3Rp
bWVsaW5lKDApCi0gICAgLCBtX3BhbmVsTXV0ZUJ1dHRvbigwKQotICAgICwgbV92b2x1bWVTbGlk
ZXIoMCkKLSAgICAsIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24oMCkKLSAgICAsIG1fZnVs
bFNjcmVlbkJ1dHRvbigwKQotICAgICwgbV9oaWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXIoKnRo
aXMsICZNZWRpYUNvbnRyb2xzOjpoaWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXJGaXJlZCkKLSAg
ICAsIG1faXNGdWxsc2NyZWVuKGZhbHNlKQotICAgICwgbV9pc01vdXNlT3ZlckNvbnRyb2xzKGZh
bHNlKQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xz
IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotdm9pZCBNZWRpYUNv
bnRyb2xzOjpzZXRNZWRpYUNvbnRyb2xsZXIoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlKiBjb250
cm9sbGVyKQotewotICAgIGlmIChtX21lZGlhQ29udHJvbGxlciA9PSBjb250cm9sbGVyKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9tZWRpYUNvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotCi0gICAg
aWYgKG1fcGFuZWwpCi0gICAgICAgIG1fcGFuZWwtPnNldE1lZGlhQ29udHJvbGxlcihjb250cm9s
bGVyKTsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgaWYgKG1fdGV4dERpc3BsYXlDb250
YWluZXIpCi0gICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPnNldE1lZGlhQ29udHJvbGxl
cihjb250cm9sbGVyKTsKLSNlbmRpZgotICAgIGlmIChtX3BsYXlCdXR0b24pCi0gICAgICAgIG1f
cGxheUJ1dHRvbi0+c2V0TWVkaWFDb250cm9sbGVyKGNvbnRyb2xsZXIpOwotICAgIGlmIChtX2N1
cnJlbnRUaW1lRGlzcGxheSkKLSAgICAgICAgbV9jdXJyZW50VGltZURpc3BsYXktPnNldE1lZGlh
Q29udHJvbGxlcihjb250cm9sbGVyKTsKLSAgICBpZiAobV90aW1lbGluZSkKLSAgICAgICAgbV90
aW1lbGluZS0+c2V0TWVkaWFDb250cm9sbGVyKGNvbnRyb2xsZXIpOwotICAgIGlmIChtX3BhbmVs
TXV0ZUJ1dHRvbikKLSAgICAgICAgbV9wYW5lbE11dGVCdXR0b24tPnNldE1lZGlhQ29udHJvbGxl
cihjb250cm9sbGVyKTsKLSAgICBpZiAobV92b2x1bWVTbGlkZXIpCi0gICAgICAgIG1fdm9sdW1l
U2xpZGVyLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0gICAgaWYgKG1fdG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b24pCi0gICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0
b24tPnNldE1lZGlhQ29udHJvbGxlcihjb250cm9sbGVyKTsKLSAgICBpZiAobV9mdWxsU2NyZWVu
QnV0dG9uKQotICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPnNldE1lZGlhQ29udHJvbGxlcihj
b250cm9sbGVyKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpyZXNldCgpCi17Ci0gICAgbV9w
bGF5QnV0dG9uLT51cGRhdGVEaXNwbGF5VHlwZSgpOwotCi0gICAgdXBkYXRlQ3VycmVudFRpbWVE
aXNwbGF5KCk7Ci0KLSAgICBkb3VibGUgZHVyYXRpb24gPSBtX21lZGlhQ29udHJvbGxlci0+ZHVy
YXRpb24oKTsKLSAgICBpZiAoc3RkOjppc2Zpbml0ZShkdXJhdGlvbikgfHwgUmVuZGVyVGhlbWU6
OnNpbmdsZXRvbigpLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYVNsaWRlclBh
cnQpKSB7Ci0gICAgICAgIG1fdGltZWxpbmUtPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKLSAgICAg
ICAgbV90aW1lbGluZS0+c2V0UG9zaXRpb24obV9tZWRpYUNvbnRyb2xsZXItPmN1cnJlbnRUaW1l
KCkpOwotICAgIH0KLQotICAgIGlmIChtX21lZGlhQ29udHJvbGxlci0+aGFzQXVkaW8oKSB8fCBS
ZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKE1l
ZGlhTXV0ZUJ1dHRvblBhcnQpKQotICAgICAgICBtX3BhbmVsTXV0ZUJ1dHRvbi0+c2hvdygpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9wYW5lbE11dGVCdXR0b24tPmhpZGUoKTsKLQotICAgIGlmICht
X3ZvbHVtZVNsaWRlcikgewotICAgICAgICBpZiAoIW1fbWVkaWFDb250cm9sbGVyLT5oYXNBdWRp
bygpKQotICAgICAgICAgICAgbV92b2x1bWVTbGlkZXItPmhpZGUoKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBtX3ZvbHVtZVNsaWRlci0+c2hvdygpOwotICAgICAgICAgICAgc2V0U2xp
ZGVyVm9sdW1lKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZWZyZXNoQ2xvc2VkQ2FwdGlv
bnNCdXR0b25WaXNpYmlsaXR5KCk7Ci0KLSAgICBpZiAobV9mdWxsU2NyZWVuQnV0dG9uKSB7Ci0g
ICAgICAgIGlmIChtX21lZGlhQ29udHJvbGxlci0+c3VwcG9ydHNGdWxsc2NyZWVuKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSAmJiBtX21lZGlhQ29u
dHJvbGxlci0+aGFzVmlkZW8oKSkKLSAgICAgICAgICAgIG1fZnVsbFNjcmVlbkJ1dHRvbi0+c2hv
dygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPmhpZGUo
KTsKLSAgICB9Ci0KLSAgICBtYWtlT3BhcXVlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6
cmVwb3J0ZWRFcnJvcigpCi17Ci0gICAgYXV0byYgdGhlbWUgPSBSZW5kZXJUaGVtZTo6c2luZ2xl
dG9uKCk7Ci0gICAgaWYgKCF0aGVtZS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoTWVk
aWFNdXRlQnV0dG9uUGFydCkpIHsKLSAgICAgICAgbV9wYW5lbE11dGVCdXR0b24tPmhpZGUoKTsK
LSAgICAgICAgbV92b2x1bWVTbGlkZXItPmhpZGUoKTsKLSAgICB9Ci0KLSAgICBpZiAobV90b2dn
bGVDbG9zZWRDYXB0aW9uc0J1dHRvbiAmJiAhdGhlbWUuaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRs
aW5nRm9yKE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25QYXJ0KSkKLSAgICAgICAgbV90
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+aGlkZSgpOwotCi0gICAgaWYgKG1fZnVsbFNjcmVl
bkJ1dHRvbiAmJiAhdGhlbWUuaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKE1lZGlhRW50
ZXJGdWxsc2NyZWVuQnV0dG9uUGFydCkpCi0gICAgICAgIG1fZnVsbFNjcmVlbkJ1dHRvbi0+aGlk
ZSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmxvYWRlZE1ldGFkYXRhKCkKLXsKLSAgICBy
ZXNldCgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnNob3coKQotewotICAgIG1ha2VPcGFx
dWUoKTsKLSAgICBtX3BhbmVsLT5zZXRJc0Rpc3BsYXllZCh0cnVlKTsKLSAgICBtX3BhbmVsLT5z
aG93KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6aGlkZSgpCi17Ci0gICAgbV9wYW5lbC0+
c2V0SXNEaXNwbGF5ZWQoZmFsc2UpOwotICAgIG1fcGFuZWwtPmhpZGUoKTsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xzOjptYWtlT3BhcXVlKCkKLXsKLSAgICBtX3BhbmVsLT5tYWtlT3BhcXVlKCk7
Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6bWFrZVRyYW5zcGFyZW50KCkKLXsKLSAgICBtX3Bh
bmVsLT5tYWtlVHJhbnNwYXJlbnQoKTsKLX0KLQotYm9vbCBNZWRpYUNvbnRyb2xzOjpzaG91bGRI
aWRlQ29udHJvbHMoKQotewotICAgIHJldHVybiAhbV9wYW5lbC0+aG92ZXJlZCgpOwotfQotCi12
b2lkIE1lZGlhQ29udHJvbHM6OmJ1ZmZlcmluZ1Byb2dyZXNzZWQoKQotewotICAgIC8vIFdlIG9u
bHkgbmVlZCB0byB1cGRhdGUgYnVmZmVyaW5nIHByb2dyZXNzIHdoZW4gcGF1c2VkLCBkdXJpbmcg
bm9ybWFsCi0gICAgLy8gcGxheWJhY2sgcGxheWJhY2tQcm9ncmVzc2VkKCkgd2lsbCB0YWtlIGNh
cmUgb2YgaXQuCi0gICAgaWYgKG1fbWVkaWFDb250cm9sbGVyLT5wYXVzZWQoKSkKLSAgICAgICAg
bV90aW1lbGluZS0+c2V0UG9zaXRpb24obV9tZWRpYUNvbnRyb2xsZXItPmN1cnJlbnRUaW1lKCkp
OwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnBsYXliYWNrU3RhcnRlZCgpCi17Ci0gICAgbV9w
bGF5QnV0dG9uLT51cGRhdGVEaXNwbGF5VHlwZSgpOwotICAgIG1fdGltZWxpbmUtPnNldFBvc2l0
aW9uKG1fbWVkaWFDb250cm9sbGVyLT5jdXJyZW50VGltZSgpKTsKLSAgICB1cGRhdGVDdXJyZW50
VGltZURpc3BsYXkoKTsKLQotICAgIGlmIChtX2lzRnVsbHNjcmVlbikKLSAgICAgICAgc3RhcnRI
aWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXIoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpw
bGF5YmFja1Byb2dyZXNzZWQoKQotewotICAgIG1fdGltZWxpbmUtPnNldFBvc2l0aW9uKG1fbWVk
aWFDb250cm9sbGVyLT5jdXJyZW50VGltZSgpKTsKLSAgICB1cGRhdGVDdXJyZW50VGltZURpc3Bs
YXkoKTsKLQotICAgIGlmICghbV9pc01vdXNlT3ZlckNvbnRyb2xzICYmIG1fbWVkaWFDb250cm9s
bGVyLT5oYXNWaWRlbygpKQotICAgICAgICBtYWtlVHJhbnNwYXJlbnQoKTsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xzOjpwbGF5YmFja1N0b3BwZWQoKQotewotICAgIG1fcGxheUJ1dHRvbi0+dXBk
YXRlRGlzcGxheVR5cGUoKTsKLSAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlvbihtX21lZGlhQ29u
dHJvbGxlci0+Y3VycmVudFRpbWUoKSk7Ci0gICAgdXBkYXRlQ3VycmVudFRpbWVEaXNwbGF5KCk7
Ci0gICAgbWFrZU9wYXF1ZSgpOwotCi0gICAgc3RvcEhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1l
cigpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxheSgp
Ci17Ci0gICAgZG91YmxlIG5vdyA9IG1fbWVkaWFDb250cm9sbGVyLT5jdXJyZW50VGltZSgpOwot
ICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5zZXRJbm5lclRleHQoUmVuZGVyVGhlbWU6OnNpbmds
ZXRvbigpLmZvcm1hdE1lZGlhQ29udHJvbHNUaW1lKG5vdykpOwotICAgIG1fY3VycmVudFRpbWVE
aXNwbGF5LT5zZXRDdXJyZW50VmFsdWUobm93KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpz
aG93Vm9sdW1lU2xpZGVyKCkKLXsKLSAgICBpZiAoIW1fbWVkaWFDb250cm9sbGVyLT5oYXNBdWRp
bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ZvbHVtZVNsaWRlci0+c2hvdygpOwotfQot
Ci12b2lkIE1lZGlhQ29udHJvbHM6OmNoYW5nZWRNdXRlKCkKLXsKLSAgICBtX3BhbmVsTXV0ZUJ1
dHRvbi0+Y2hhbmdlZE11dGUoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpjaGFuZ2VkVm9s
dW1lKCkKLXsKLSAgICBpZiAobV92b2x1bWVTbGlkZXIpCi0gICAgICAgIHNldFNsaWRlclZvbHVt
ZSgpOwotICAgIGlmIChtX3BhbmVsTXV0ZUJ1dHRvbiAmJiBtX3BhbmVsTXV0ZUJ1dHRvbi0+cmVu
ZGVyZXIoKSkKLSAgICAgICAgbV9wYW5lbE11dGVCdXR0b24tPnJlbmRlcmVyKCktPnJlcGFpbnQo
KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpjaGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmls
aXR5KCkKLXsKLSAgICBpZiAobV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbikKLSAgICAgICAg
bV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+dXBkYXRlRGlzcGxheVR5cGUoKTsKLX0KLQot
dm9pZCBNZWRpYUNvbnRyb2xzOjpyZWZyZXNoQ2xvc2VkQ2FwdGlvbnNCdXR0b25WaXNpYmlsaXR5
KCkKLXsKLSAgICBpZiAoIW1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX21lZGlhQ29udHJvbGxlci0+aGFzQ2xvc2VkQ2FwdGlvbnMoKSkK
LSAgICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+c2hvdygpOwotICAgIGVsc2UK
LSAgICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+aGlkZSgpOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbHM6OmNsb3NlZENhcHRpb25UcmFja3NDaGFuZ2VkKCkKLXsKLSAgICByZWZy
ZXNoQ2xvc2VkQ2FwdGlvbnNCdXR0b25WaXNpYmlsaXR5KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250
cm9sczo6ZW50ZXJlZEZ1bGxzY3JlZW4oKQotewotICAgIG1faXNGdWxsc2NyZWVuID0gdHJ1ZTsK
LSAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPnNldElzRnVsbHNjcmVlbih0cnVlKTsKLQotICAgIGlm
IChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgp
LnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyh0cnVlKTsKLQotICAgIHN0YXJ0SGlkZUZ1
bGxzY3JlZW5Db250cm9sc1RpbWVyKCk7Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIGlm
IChtX3RleHREaXNwbGF5Q29udGFpbmVyKQotICAgICAgICBtX3RleHREaXNwbGF5Q29udGFpbmVy
LT5lbnRlcmVkRnVsbHNjcmVlbigpOwotI2VuZGlmCi19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6
ZXhpdGVkRnVsbHNjcmVlbigpCi17Ci0gICAgbV9pc0Z1bGxzY3JlZW4gPSBmYWxzZTsKLSAgICBt
X2Z1bGxTY3JlZW5CdXR0b24tPnNldElzRnVsbHNjcmVlbihmYWxzZSk7Ci0gICAgc3RvcEhpZGVG
dWxsc2NyZWVuQ29udHJvbHNUaW1lcigpOwotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBp
ZiAobV90ZXh0RGlzcGxheUNvbnRhaW5lcikKLSAgICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5l
ci0+ZXhpdGVkRnVsbHNjcmVlbigpOwotI2VuZGlmCi19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgSFRNTERpdkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKLSAgICAgICAgaWYgKCFjb250YWluc1JlbGF0
ZWRUYXJnZXQoZXZlbnQpKSB7Ci0gICAgICAgICAgICBtX2lzTW91c2VPdmVyQ29udHJvbHMgPSB0
cnVlOwotICAgICAgICAgICAgaWYgKCFtX21lZGlhQ29udHJvbGxlci0+Y2FuUGxheSgpKSB7Ci0g
ICAgICAgICAgICAgICAgbWFrZU9wYXF1ZSgpOwotICAgICAgICAgICAgICAgIGlmIChzaG91bGRI
aWRlQ29udHJvbHMoKSkKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRIaWRlRnVsbHNjcmVlbkNv
bnRyb2xzVGltZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRF
dmVudCkgewotICAgICAgICBpZiAoIWNvbnRhaW5zUmVsYXRlZFRhcmdldChldmVudCkpIHsKLSAg
ICAgICAgICAgIG1faXNNb3VzZU92ZXJDb250cm9scyA9IGZhbHNlOwotICAgICAgICAgICAgc3Rv
cEhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcigpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1v
dmVFdmVudCkgewotICAgICAgICBpZiAobV9pc0Z1bGxzY3JlZW4pIHsKLSAgICAgICAgICAgIC8v
IFdoZW4gd2UgZ2V0IGEgbW91c2UgbW92ZSBpbiBmdWxsc2NyZWVuIG1vZGUsIHNob3cgdGhlIG1l
ZGlhIGNvbnRyb2xzLCBhbmQgc3RhcnQgYSB0aW1lcgotICAgICAgICAgICAgLy8gdGhhdCB3aWxs
IGhpZGUgdGhlIG1lZGlhIGNvbnRyb2xzIGFmdGVyIGEgMyBzZWNvbmRzIHdpdGhvdXQgYSBtb3Vz
ZSBtb3ZlLgotICAgICAgICAgICAgbWFrZU9wYXF1ZSgpOwotICAgICAgICAgICAgaWYgKHNob3Vs
ZEhpZGVDb250cm9scygpKQotICAgICAgICAgICAgICAgIHN0YXJ0SGlkZUZ1bGxzY3JlZW5Db250
cm9sc1RpbWVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xzOjpoaWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXJGaXJlZCgpCi17Ci0g
ICAgaWYgKG1fbWVkaWFDb250cm9sbGVyLT5wYXVzZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFtX2lzRnVsbHNjcmVlbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFzaG91
bGRIaWRlQ29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+Y2hyb21lKCkuc2V0Q3Vyc29ySGlk
ZGVuVW50aWxNb3VzZU1vdmVzKHRydWUpOwotCi0gICAgbWFrZVRyYW5zcGFyZW50KCk7Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sczo6c3RhcnRIaWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXIoKQot
ewotICAgIGlmICghbV9pc0Z1bGxzY3JlZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhZ2Uq
IHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1faGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyLnN0YXJ0T25lU2hvdChwYWdl
LT5zZXR0aW5ncygpLnRpbWVXaXRob3V0TW91c2VNb3ZlbWVudEJlZm9yZUhpZGluZ0NvbnRyb2xz
KCkpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnN0b3BIaWRlRnVsbHNjcmVlbkNvbnRyb2xz
VGltZXIoKQotewotICAgIG1faGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyLnN0b3AoKTsKLX0K
LQotYm9vbCBNZWRpYUNvbnRyb2xzOjpjb250YWluc1JlbGF0ZWRUYXJnZXQoRXZlbnQmIGV2ZW50
KQotewotICAgIGlmICghaXM8TW91c2VFdmVudD4oZXZlbnQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgYXV0byByZWxhdGVkVGFyZ2V0ID0gZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQp
LnJlbGF0ZWRUYXJnZXQoKTsKLSAgICByZXR1cm4gaXM8Tm9kZT4ocmVsYXRlZFRhcmdldCkgJiYg
Y29udGFpbnMoJmRvd25jYXN0PE5vZGU+KCpyZWxhdGVkVGFyZ2V0KSk7Ci19Ci0KLSNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCi0KLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlVGV4dFRyYWNrRGlz
cGxheSgpCi17Ci0gICAgaWYgKG1fdGV4dERpc3BsYXlDb250YWluZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGF1dG8gdGV4dERpc3BsYXlDb250YWluZXIgPSBNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7Ci0gICAgbV90ZXh0RGlzcGxh
eUNvbnRhaW5lciA9IHRleHREaXNwbGF5Q29udGFpbmVyLnB0cigpOwotCi0gICAgaWYgKG1fbWVk
aWFDb250cm9sbGVyKQotICAgICAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5zZXRNZWRpYUNv
bnRyb2xsZXIobV9tZWRpYUNvbnRyb2xsZXIpOwotCi0gICAgLy8gSW5zZXJ0IGl0IGJlZm9yZSB0
aGUgZmlyc3QgY29udHJvbGxlciBlbGVtZW50IHNvIGl0IGFsd2F5cyBkaXNwbGF5cyBiZWhpbmQg
dGhlIGNvbnRyb2xzLgotICAgIGluc2VydEJlZm9yZSh0ZXh0RGlzcGxheUNvbnRhaW5lciwgbV9w
YW5lbCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6c2hvd1RleHRUcmFja0Rpc3BsYXkoKQot
ewotICAgIGlmICghbV90ZXh0RGlzcGxheUNvbnRhaW5lcikKLSAgICAgICAgY3JlYXRlVGV4dFRy
YWNrRGlzcGxheSgpOwotICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPnNob3coKTsKLX0KLQot
dm9pZCBNZWRpYUNvbnRyb2xzOjpoaWRlVGV4dFRyYWNrRGlzcGxheSgpCi17Ci0gICAgaWYgKCFt
X3RleHREaXNwbGF5Q29udGFpbmVyKQotICAgICAgICBjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCk7
Ci0gICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+aGlkZSgpOwotfQotCi12b2lkIE1lZGlhQ29u
dHJvbHM6OnVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKQotewotICAgIGlmICghbV90ZXh0RGlzcGxh
eUNvbnRhaW5lcikKLSAgICAgICAgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotCi0gICAgbV90
ZXh0RGlzcGxheUNvbnRhaW5lci0+dXBkYXRlRGlzcGxheSgpOwotfQotCi12b2lkIE1lZGlhQ29u
dHJvbHM6OnRleHRUcmFja1ByZWZlcmVuY2VzQ2hhbmdlZCgpCi17Ci0gICAgY2xvc2VkQ2FwdGlv
blRyYWNrc0NoYW5nZWQoKTsKLSAgICBpZiAobV90ZXh0RGlzcGxheUNvbnRhaW5lcikKLSAgICAg
ICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+dXBkYXRlU2l6ZXMoTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudDo6Rm9yY2VVcGRhdGU6Olllcyk7Ci19Ci0KLXZvaWQgTWVkaWFD
b250cm9sczo6Y2xlYXJUZXh0RGlzcGxheUNvbnRhaW5lcigpCi17Ci0gICAgaWYgKG1fdGV4dERp
c3BsYXlDb250YWluZXIpCi0gICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPnJlbW92ZUNo
aWxkcmVuKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6dXBkYXRlVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb25JbWFnZUlmTmVlZGVkKCkKLXsKLSAgICBpZiAobV90ZXh0RGlzcGxheUNvbnRhaW5l
cikKLSAgICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+dXBkYXRlVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb25JbWFnZUlmTmVlZGVkKCk7Ci19Ci0KLSNlbmRpZgotCi12b2lkIE1lZGlhQ29udHJv
bHM6OnNldFNsaWRlclZvbHVtZSgpCi17Ci0gICAgbV92b2x1bWVTbGlkZXItPnNldFZvbHVtZSht
X21lZGlhQ29udHJvbGxlci0+bXV0ZWQoKSA/IDAuMCA6IG1fbWVkaWFDb250cm9sbGVyLT52b2x1
bWUoKSk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xzLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRp
YUNvbnRyb2xzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiYmNiNTc0YjJmMGEy
MzkyOGVlOGMxNzk4NjU3OTk1Y2Y3YmQ5NTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYg
RU5BQkxFKFZJREVPKQotCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiSFRNTERpdkVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEb2N1bWVudDsKLWNs
YXNzIEV2ZW50OwotY2xhc3MgTWVkaWFQbGF5ZXI7Ci1jbGFzcyBSZW5kZXJCb3g7Ci1jbGFzcyBS
ZW5kZXJNZWRpYTsKLQotLy8gQW4gYWJzdHJhY3QgY2xhc3Mgd2l0aCB0aGUgbWVkaWEgY29udHJv
bCBlbGVtZW50cyB0aGF0IGFsbCBwb3J0cyBzdXBwb3J0LgotY2xhc3MgTWVkaWFDb250cm9scyA6
IHB1YmxpYyBIVE1MRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRp
YUNvbnRyb2xzKTsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5NZWRpYUNvbnRyb2xzKCkgPSBkZWZh
dWx0OwotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB0byBiZSBpbXBsZW1lbnRlZCBpbiB5b3Vy
IHBvcnQtc3BlY2lmaWMgbWVkaWEKLSAgICAvLyBjb250cm9scyBpbXBsZW1lbnRhdGlvbiBzaW5j
ZSBpdCB3aWxsIHJldHVybiBhIGNoaWxkIGluc3RhbmNlLgotICAgIHN0YXRpYyBSZWZQdHI8TWVk
aWFDb250cm9scz4gdHJ5Q3JlYXRlKERvY3VtZW50Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
TWVkaWFDb250cm9sbGVyKE1lZGlhQ29udHJvbGxlckludGVyZmFjZSopOwotCi0gICAgdmlydHVh
bCB2b2lkIHJlc2V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlcG9ydGVkRXJyb3IoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgbG9hZGVkTWV0YWRhdGEoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzaG93KCk7
Ci0gICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgbWFrZU9wYXF1ZSgp
OwotICAgIHZpcnR1YWwgdm9pZCBtYWtlVHJhbnNwYXJlbnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkSGlkZUNvbnRyb2xzKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyaW5nUHJvZ3Jl
c3NlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBwbGF5YmFja1N0YXJ0ZWQoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcGxheWJhY2tQcm9ncmVzc2VkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHBsYXliYWNrU3Rv
cHBlZCgpOwotCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0YXR1c0Rpc3BsYXkoKSB7IH07Ci0g
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwotICAgIHZpcnR1YWwg
dm9pZCBzaG93Vm9sdW1lU2xpZGVyKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlZE11dGUo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlZFZvbHVtZSgpOwotCi0gICAgdmlydHVhbCB2b2lk
IGNoYW5nZWRDbG9zZWRDYXB0aW9uc1Zpc2liaWxpdHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVm
cmVzaENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJpbGl0eSgpOwotICAgIHZpcnR1YWwgdm9pZCB0
b2dnbGVDbG9zZWRDYXB0aW9uVHJhY2tMaXN0KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsb3Nl
ZENhcHRpb25UcmFja3NDaGFuZ2VkKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJlZEZ1bGxz
Y3JlZW4oKTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhpdGVkRnVsbHNjcmVlbigpOwotCi0jaWYgIVBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRz
KCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQg
aGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyRmlyZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3Rh
cnRIaWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXIoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcEhp
ZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcigpOwotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQot
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0gICAgdmlydHVhbCB2
b2lkIHNob3dUZXh0VHJhY2tEaXNwbGF5KCk7Ci0gICAgdmlydHVhbCB2b2lkIGhpZGVUZXh0VHJh
Y2tEaXNwbGF5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgdGV4dFRyYWNrUHJlZmVyZW5jZXNDaGFuZ2VkKCk7Ci0gICAgdmly
dHVhbCB2b2lkIGNsZWFyVGV4dERpc3BsYXlDb250YWluZXIoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKCk7Ci0jZW5kaWYKLQot
cHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbHMoRG9jdW1lbnQmKTsKLQotICAg
IHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVh
bCBib29sIGNvbnRhaW5zUmVsYXRlZFRhcmdldChFdmVudCYpOwotCi0gICAgdm9pZCBzZXRTbGlk
ZXJWb2x1bWUoKTsKLQotICAgIE1lZGlhQ29udHJvbGxlckludGVyZmFjZSogbV9tZWRpYUNvbnRy
b2xsZXI7Ci0KLSAgICAvLyBDb250YWluZXIgZm9yIHRoZSBtZWRpYSBjb250cm9sIGVsZW1lbnRz
LgotICAgIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudCogbV9wYW5lbDsKLQotICAgIC8vIENvbnRh
aW5lciBmb3IgdGhlIHRleHQgdHJhY2sgY3Vlcy4KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0g
ICAgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCogbV90ZXh0RGlzcGxheUNv
bnRhaW5lcjsKLSNlbmRpZgotCi0gICAgLy8gTWVkaWEgY29udHJvbCBlbGVtZW50cy4KLSAgICBN
ZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCogbV9wbGF5QnV0dG9uOwotICAgIE1lZGlhQ29u
dHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQqIG1fY3VycmVudFRpbWVEaXNwbGF5OwotICAg
IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudCogbV90aW1lbGluZTsKLSAgICBNZWRpYUNvbnRy
b2xQYW5lbE11dGVCdXR0b25FbGVtZW50KiBtX3BhbmVsTXV0ZUJ1dHRvbjsKLSAgICBNZWRpYUNv
bnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQqIG1fdm9sdW1lU2xpZGVyOwotICAgIE1lZGlh
Q29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudCogbV90b2dnbGVDbG9zZWRD
YXB0aW9uc0J1dHRvbjsKLSAgICBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudCog
bV9mdWxsU2NyZWVuQnV0dG9uOwotCi0gICAgVGltZXIgbV9oaWRlRnVsbHNjcmVlbkNvbnRyb2xz
VGltZXI7Ci0gICAgYm9vbCBtX2lzRnVsbHNjcmVlbjsKLSAgICBib29sIG1faXNNb3VzZU92ZXJD
b250cm9sczsKLQotcHJpdmF0ZToKLSAgICBib29sIGlzTWVkaWFDb250cm9scygpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIHRydWU7IH0KLX07Ci0KLWlubGluZSBNZWRpYUNvbnRyb2xzKiB0b01lZGlh
Q29udHJvbHMoTm9kZSogbm9kZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTighbm9kZSB8fCBub2RlLT5pc01lZGlhQ29udHJvbHMoKSk7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PE1lZGlhQ29udHJvbHMqPihub2RlKTsKLX0KLQotLy8gVGhpcyB3aWxsIGNhdGNoIGFu
eW9uZSBkb2luZyBhbiB1bm5lY2Nlc3NhcnkgY2FzdC4KLXZvaWQgdG9NZWRpYUNvbnRyb2xzKGNv
bnN0IE1lZGlhQ29udHJvbHMqKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9u
VXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25V
c2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAppbmRleCAzZDhjZjRmYjhmNzdmZTgwYjNmYjQ0Y2Q3
ZWU5ZDc5YTg1MjQ1YzEyLi4yYjUyNDI3ZDc4MDI4ZDRkY2M2NTg0YWM3OTlkNzdjMTk5ZjI2ODBi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
ZWRpYUFGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGLmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1l
bnQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiVGV4dFRyYWNr
TGlzdC5oIgogI2luY2x1ZGUgIlVzZXJTdHlsZVNoZWV0VHlwZXMuaCIKICNpbmNsdWRlIDxhbGdv
cml0aG0+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCBmY2RlZWI4NDI1OWRkYzdhNDg1NTU4MmFiODli
Yzc4ZmE1MjZhZjY2Li4zNzU0NjFjMzE5OWNkZGFlMjhkNTI2OGYyMTg5YTEzMzRlMmNhZjZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTEwNzcsMTUgKzEwNzcsMTEgQEAgdm9pZCBQYWdlOjpzZXRQ
YWdlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGUsIGNvbnN0IEludFBvaW50JiBvcmlnaW4sIGJvb2wg
aW5TdGFibGUKICNlbmRpZgogICAgIH0KIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJ
UFQpCiAgICAgaWYgKGluU3RhYmxlU3RhdGUpIHsKICAgICAgICAgZm9yRWFjaE1lZGlhRWxlbWVu
dChbXSAoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkgewogICAgICAgICAgICAgZWxlbWVudC5w
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAgICAgICAgIH0pOwogICAgIH0KLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKGluU3RhYmxlU3RhdGUpOwotI2VuZGlmCiB9CiAKIHZvaWQgUGFnZTo6c2V0
RGVsZWdhdGVzU2NhbGluZyhib29sIGRlbGVnYXRlc1NjYWxpbmcpCkBAIC0xMTMyLDExICsxMTI4
LDkgQEAgdm9pZCBQYWdlOjpzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKFVzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb24gdXNlckludGUKIAogICAgIG1fdXNlckludGVyZmFjZUxheW91
dERpcmVjdGlvbiA9IHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb247CiAKLSNpZiBFTkFCTEUo
TUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGZvckVhY2hNZWRpYUVsZW1lbnQoW10gKEhUTUxN
ZWRpYUVsZW1lbnQmIGVsZW1lbnQpIHsKICAgICAgICAgZWxlbWVudC51c2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uQ2hhbmdlZCgpOwogICAgIH0pOwotI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUo
VklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFD
b250cm9scy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9s
cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2OTY2MzYwZGI5YTllOGYxOTdi
MjFmNjA5MzFjODY1YWRiNjgwOWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJNZWRpYUNvbnRyb2xzLmgiCi0KLSNpZiBFTkFCTEUo
VklERU8pCi0KLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgotI2luY2x1ZGUgIlJl
bmRlckxheW91dFN0YXRlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLSNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUmVuZGVyTWVkaWFW
b2x1bWVTbGlkZXJDb250YWluZXIpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRl
ck1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyKTsKLQotUmVuZGVyTWVkaWFWb2x1bWVTbGlk
ZXJDb250YWluZXI6OlJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKEVsZW1lbnQmIGVs
ZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCi0gICAgOiBSZW5kZXJCbG9ja0Zsb3coZWxlbWVu
dCwgV1RGTW92ZShzdHlsZSkpCi17Ci19Ci0KLXZvaWQgUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJD
b250YWluZXI6OmxheW91dCgpCi17Ci0gICAgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXQoKTsKLQot
ICAgIGlmIChzdHlsZSgpLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6Tm9uZSB8fCAhaXM8UmVu
ZGVyQm94PihuZXh0U2libGluZygpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyQm94
JiBidXR0b25Cb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpuZXh0U2libGluZygpKTsKLSAgICBp
bnQgYWJzb2x1dGVPZmZzZXRUb3AgPSBidXR0b25Cb3gubG9jYWxUb0Fic29sdXRlKEZsb2F0UG9p
bnQoMCwgLXNpemUoKS5oZWlnaHQoKSkpLnkoKTsKLQotICAgIExheW91dFN0YXRlRGlzYWJsZXIg
bGF5b3V0U3RhdGVEaXNhYmxlcih2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpKTsK
LQotICAgIC8vIElmIHRoZSBzbGlkZXIgd291bGQgYmUgcmVuZGVyZWQgb3V0c2lkZSB0aGUgcGFn
ZSwgaXQgc2hvdWxkIGJlIG1vdmVkIGJlbG93IHRoZSBjb250cm9scy4KLSAgICBpZiAoVU5MSUtF
TFkoYWJzb2x1dGVPZmZzZXRUb3AgPCAwKSkKLSAgICAgICAgc2V0WShidXR0b25Cb3gub2Zmc2V0
VG9wKCkgKyB0aGVtZSgpLnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKGJ1dHRvbkJv
eCwgc2l6ZSgpKS55KCkpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LVJlbmRlck1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyOjpSZW5kZXJNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lcihFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQot
ICAgIDogUmVuZGVyRmxleGlibGVCb3goZWxlbWVudCwgV1RGTW92ZShzdHlsZSkpCi17Ci19Ci0K
LS8vIFdlIHdhbnQgdGhlIHRpbWVsaW5lIHNsaWRlciB0byBiZSBhdCBsZWFzdCAxMDAgcGl4ZWxz
IHdpZGUuCi0vLyBGSVhNRTogRWxpbWluYXRlIGhhcmQtY29kZWQgd2lkdGhzIGFsdG9nZXRoZXIu
Ci1zdGF0aWMgY29uc3QgaW50IG1pbldpZHRoVG9EaXNwbGF5VGltZURpc3BsYXlzID0gNDUgKyAx
MDAgKyA0NTsKLQotdm9pZCBSZW5kZXJNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lcjo6bGF5
b3V0KCkKLXsKLSAgICBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0KCk7Ci0KLSAgICBMYXlvdXRT
dGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJsZXIodmlldygpLmZyYW1lVmlldygpLmxheW91
dENvbnRleHQoKSk7Ci0gICAgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50KiBj
b250YWluZXIgPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1l
bnQqPihlbGVtZW50KCkpOwotICAgIGNvbnRhaW5lci0+c2V0VGltZURpc3BsYXlzSGlkZGVuKHdp
ZHRoKCkudG9JbnQoKSA8IG1pbldpZHRoVG9EaXNwbGF5VGltZURpc3BsYXlzKTsKLX0KLQotI2lm
IFBMQVRGT1JNKFdJTikgJiYgVVNFKENHKQotCi12b2lkIFJlbmRlck1lZGlhQ29udHJvbHM6OmFk
anVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkKLXsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikgJiYgVVNFKENH
KQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xz
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjYxMTM2MDE3ZDA5MjE3YWQ4NGM1MjRhNmMyY2Iw
ZWE2YzFjOWZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAy
MDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFC
TEUoVklERU8pCi0KLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5k
ZXJGbGV4aWJsZUJveC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlck1l
ZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyIGZpbmFsIDogcHVibGljIFJlbmRlckJsb2NrRmxvdyB7
Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChSZW5kZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRh
aW5lcik7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoRWxl
bWVudCYsIFJlbmRlclN0eWxlJiYpOwotCi1wcml2YXRlOgotICAgIHZvaWQgbGF5b3V0KCkgb3Zl
cnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIFJl
bmRlck1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyIGZpbmFsIDogcHVibGljIFJlbmRlckZs
ZXhpYmxlQm94IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFJlbmRlck1lZGlhQ29udHJv
bFRpbWVsaW5lQ29udGFpbmVyKTsKLXB1YmxpYzoKLSAgICBSZW5kZXJNZWRpYUNvbnRyb2xUaW1l
bGluZUNvbnRhaW5lcihFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7Ci0KLXByaXZhdGU6Ci0gICAg
dm9pZCBsYXlvdXQoKSBvdmVycmlkZTsKLSAgICBib29sIGlzRmxleGlibGVCb3hJbXBsKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQotI2lmIFBMQVRGT1JNKFdJTikgJiYg
VVNFKENHKQotCi1jbGFzcyBSZW5kZXJNZWRpYUNvbnRyb2xzIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgdm9pZCBhZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYpOwotfTsKLQot
I2VuZGlmIC8vIFBMQVRGT1JNKFdJTikgJiYgVVNFKENHKQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTbGlkZXIuY3BwCmluZGV4IDM3ZWM4ZjU0OTcwNGE5YjJjZWVmNDNmMmE5OGZkYTgwNjNj
ZmFkMGQuLjE2ODFmOWQxZmMwYjk5MjI3MDFhZmIzMzlkMWIzYjZmMTcwYzY5OTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAj
aW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50
cy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3Bw
CmluZGV4IDc4MDkyNWMyOWNlZjA2NDRlMDNjYTJiNWMyZTViNzFmZTFlYzJhNjcuLmU5ZGQxNDk0
NTg2NGJhOWJkOGU4NWE0NTA4NDdlMmU2MjUyZDE2NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmNwcApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRT
dHJpbmdzLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUFkd2FpdGEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHAKaW5k
ZXggYjE4YzRkMDVkNTFlODBkNGYyZWE2MTBmNjZhNzJjMjc1Njg3ZDY3Ni4uMzEwNjZhNDllNzUx
OWU2MmZiZDE2ZDdiYWE3YTZiYzRhM2IzNDFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRz
LmgiCisjaW5jbHVkZSAiTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oIgog
I2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgpAQCAtNDkyLDkgKzQ5MiwyMSBAQCBib29sIFJlbmRlclRoZW1lQWR3
YWl0YTo6cGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwg
Y29ucwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQorc3RhdGljIFJlZlB0cjxIVE1MTWVkaWFFbGVt
ZW50PiBwYXJlbnRNZWRpYUVsZW1lbnQoY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5v
ZGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxOb2RlPiBtZWRpYU5vZGUg
PSBub2RlLT5zaGFkb3dIb3N0KCk7CisgICAgaWYgKCFtZWRpYU5vZGUpCisgICAgICAgIG1lZGlh
Tm9kZSA9IGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpOworICAgIGlmICghaXM8SFRNTE1lZGlhRWxl
bWVudD4oKm1lZGlhTm9kZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBk
b3duY2FzdDxIVE1MTWVkaWFFbGVtZW50PihtZWRpYU5vZGUuZ2V0KCkpOworfQorCiBib29sIFJl
bmRlclRoZW1lQWR3YWl0YTo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVj
dCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudChy
ZW5kZXJPYmplY3QpOworICAgIGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50
KHJlbmRlck9iamVjdC5ub2RlKCkpOwogICAgIGlmICghbWVkaWFFbGVtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKQEAgLTU0Miw3ICs1NTQsNyBAQCBib29sIFJlbmRlclRoZW1lQWR3YWl0
YTo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0
LAogCiBib29sIFJlbmRlclRoZW1lQWR3YWl0YTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNr
KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBh
cmVudE1lZGlhRWxlbWVudChyZW5kZXJPYmplY3QpOworICAgIGF1dG8gbWVkaWFFbGVtZW50ID0g
cGFyZW50TWVkaWFFbGVtZW50KHJlbmRlck9iamVjdC5ub2RlKCkpOwogICAgIGlmICghbWVkaWFF
bGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDb2NvYS5oCmluZGV4IDNiMmI1MGRkZDU5NTJkYzFlZjVkOGIwMzA0MWQ5
MzNjOGIzNzllOWEuLjE5YmMzOTJlZTMxZjY5NTM0OTUyMmQyMTVkZjk5NWZkNWZhODEyNGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ29jb2EuaApAQCAtMjgsOSAr
MjgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKIE9CSkNfQ0xBU1MgTlNE
YXRlQ29tcG9uZW50c0Zvcm1hdHRlcjsKLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQ0LDEyICs0Miw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotI2lmIEVO
QUJMRShWSURFTykKICAgICBTdHJpbmcgbWVkaWFDb250cm9sc0Zvcm1hdHRlZFN0cmluZ0ZvckR1
cmF0aW9uKGRvdWJsZSkgb3ZlcnJpZGU7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJP
TFNfU0NSSVBUKQogICAgIFJldGFpblB0cjxOU0RhdGVDb21wb25lbnRzRm9ybWF0dGVyPiBtX2R1
cmF0aW9uRm9ybWF0dGVyOwotI2VuZGlmCiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNvY29hLm1tCmluZGV4IDhiNmM1ZWRiMzg0MjFjYzdiZWVkYzFjOTZl
ZmE0MjNkYjdhMjFjNTMuLjYzYTA1ZjY2NTI5MTBmMGFjMmM4ODg2OTVmMmI3ODAwZmZhN2Q3OGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLm1tCkBAIC0x
MjcsMTEgKzEyNyw4IEBAIGJvb2wgUmVuZGVyVGhlbWVDb2NvYTo6cGFpbnRBcHBsZVBheUJ1dHRv
bihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQCiAKICNlbmRpZiAvLyBFTkFC
TEUoQVBQTEVfUEFZKQogCi0jaWYgRU5BQkxFKFZJREVPKQotCiBTdHJpbmcgUmVuZGVyVGhlbWVD
b2NvYTo6bWVkaWFDb250cm9sc0Zvcm1hdHRlZFN0cmluZ0ZvckR1cmF0aW9uKGNvbnN0IGRvdWJs
ZSBkdXJhdGlvbkluU2Vjb25kcykKIHsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBU
KQogICAgIGlmICghc3RkOjppc2Zpbml0ZShkdXJhdGlvbkluU2Vjb25kcykpCiAgICAgICAgIHJl
dHVybiBXRUJfVUlfU1RSSU5HKCJpbmRlZmluaXRlIHRpbWUiLCAiYWNjZXNzaWJpbGl0eSBoZWxw
IHRleHQgZm9yIGFuIGluZGVmaW5pdGUgbWVkaWEgY29udHJvbGxlciB0aW1lIHZhbHVlIik7CiAK
QEAgLTE0NSwxMSArMTQyLDYgQEAgU3RyaW5nIFJlbmRlclRoZW1lQ29jb2E6Om1lZGlhQ29udHJv
bHNGb3JtYXR0ZWRTdHJpbmdGb3JEdXJhdGlvbihjb25zdCBkb3VibGUgZHUKICAgICB9CiAgICAg
cmV0dXJuIFttX2R1cmF0aW9uRm9ybWF0dGVyLmdldCgpIHN0cmluZ0Zyb21UaW1lSW50ZXJ2YWw6
ZHVyYXRpb25JblNlY29uZHNdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0jZWxz
ZQotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotI2VuZGlmCiB9CiAKLSNlbmRpZiAvLyBFTkFC
TEUoVklERU8pCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5t
bQppbmRleCAwOWExMmRjNWRhYzFhMWIyNDllMDAxN2NiNGM2MGYyZGU5YmRmZDVhLi4xMmZkN2Zm
ZjJmZDkyN2EyZjBlMjdhOGMwZTdiM2RjNGY5MGJjNzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCkBAIC0xMzU4LDMwICsxMzU4LDIxIEBAIHZvaWQgUmVu
ZGVyVGhlbWVJT1M6OnVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlE
IHZhbHVlSUQsIEZvbnRDCiAgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhub3JtYWxJdGFs
aWNWYWx1ZSgpKTsKIH0KIAotI2lmIEVOQUJMRShWSURFTykKIFN0cmluZyBSZW5kZXJUaGVtZUlP
Uzo6bWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9M
U19TQ1JJUFQpCiAgICAgaWYgKG1fbGVnYWN5TWVkaWFDb250cm9sc1N0eWxlU2hlZXQuaXNFbXB0
eSgpKQogICAgICAgICBtX2xlZ2FjeU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0ID0gW05TU3RyaW5n
IHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTpbW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltXZWJD
b3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xhc3NdXSBwYXRoRm9yUmVzb3VyY2U6QCJtZWRpYUNvbnRy
b2xzaU9TIiBvZlR5cGU6QCJjc3MiXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJv
cjpuaWxdOwogICAgIHJldHVybiBtX2xlZ2FjeU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0OwotI2Vs
c2UKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgogfQogCiBTdHJpbmcgUmVuZGVy
VGhlbWVJT1M6Om1vZGVybk1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkKIHsKLSNpZiBFTkFCTEUo
TUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLm1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKCkpIHsKICAgICAgICAg
aWYgKG1fbWVkaWFDb250cm9sc1N0eWxlU2hlZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9t
ZWRpYUNvbnRyb2xzU3R5bGVTaGVldCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZp
bGU6W1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViQ29yZVJlbmRlclRoZW1lQnVuZGxlIGNs
YXNzXV0gcGF0aEZvclJlc291cmNlOkAibW9kZXJuLW1lZGlhLWNvbnRyb2xzIiBvZlR5cGU6QCJj
c3MiIGluRGlyZWN0b3J5OkAibW9kZXJuLW1lZGlhLWNvbnRyb2xzIl0gZW5jb2Rpbmc6TlNVVEY4
U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKICAgICAgICAgcmV0dXJuIG1fbWVkaWFDb250cm9s
c1N0eWxlU2hlZXQ7CiAgICAgfQogICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotI2Vsc2UKLSAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgogfQogCiB2b2lkIFJlbmRlclRoZW1lSU9T
OjpwdXJnZUNhY2hlcygpCkBAIC0xMzk0LDcgKzEzODUsNiBAQCB2b2lkIFJlbmRlclRoZW1lSU9T
OjpwdXJnZUNhY2hlcygpCiAKIFN0cmluZyBSZW5kZXJUaGVtZUlPUzo6bWVkaWFDb250cm9sc1Nj
cmlwdCgpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5tb2Rlcm5NZWRpYUNvbnRyb2xz
RW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChtX21lZGlhQ29udHJvbHNTY3JpcHQuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNs
YXNzOltXZWJDb3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xhc3NdXTsKQEAgLTE0MTksMjcgKzE0MDks
MTggQEAgU3RyaW5nIFJlbmRlclRoZW1lSU9TOjptZWRpYUNvbnRyb2xzU2NyaXB0KCkKICAgICAg
ICAgbV9sZWdhY3lNZWRpYUNvbnRyb2xzU2NyaXB0ID0gc2NyaXB0QnVpbGRlci50b1N0cmluZygp
OwogICAgIH0KICAgICByZXR1cm4gbV9sZWdhY3lNZWRpYUNvbnRyb2xzU2NyaXB0OwotI2Vsc2UK
LSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgogfQogCiBTdHJpbmcgUmVuZGVyVGhl
bWVJT1M6Om1lZGlhQ29udHJvbHNCYXNlNjRTdHJpbmdGb3JJY29uTmFtZUFuZFR5cGUoY29uc3Qg
U3RyaW5nJiBpY29uTmFtZSwgY29uc3QgU3RyaW5nJiBpY29uVHlwZSkKIHsKLSNpZiBFTkFCTEUo
TUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS5tb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCgpKQogICAgICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIFN0cmluZyBkaXJlY3RvcnkgPSAibW9kZXJuLW1l
ZGlhLWNvbnRyb2xzL2ltYWdlcyI7CiAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBi
dW5kbGVGb3JDbGFzczpbV2ViQ29yZVJlbmRlclRoZW1lQnVuZGxlIGNsYXNzXV07CiAgICAgcmV0
dXJuIFtbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZkZpbGU6W2J1bmRsZSBwYXRoRm9yUmVzb3Vy
Y2U6aWNvbk5hbWUgb2ZUeXBlOmljb25UeXBlIGluRGlyZWN0b3J5OmRpcmVjdG9yeV1dIGJhc2U2
NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9uczowXTsKLSNlbHNlCi0gICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7Ci0jZW5kaWYKIH0KIAotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKLQogc3RydWN0IENT
U1ZhbHVlSURBbmRTZWxlY3RvciB7CiAgICAgQ1NTVmFsdWVJRCBjc3NWYWx1ZUlEOwogICAgIFNF
TCBzZWxlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpp
bmRleCAzMThlYjgyZDlhZDU3ZDdkNDM1YTVjMTc5Nzk2OGQzZWU3NmI5ZmRjLi4wZTM3MTg4NjIy
OGMxYjE2YjI2MmU4ZDZhMDYyOTQyY2I4MmM1OWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC00OCwxNCArNDgsMTIgQEAKICNpbXBvcnQgIkxvY2Fs
Q3VycmVudEdyYXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAiTG9jYWxEZWZhdWx0U3lzdGVtQXBw
ZWFyYW5jZS5oIgogI2ltcG9ydCAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2ltcG9ydCAiTWVkaWFD
b250cm9sRWxlbWVudHMuaCIKICNpbXBvcnQgIlBhZ2UuaCIKICNpbXBvcnQgIlBhaW50SW5mby5o
IgogI2ltcG9ydCAiUGF0aFV0aWxpdGllcy5oIgogI2ltcG9ydCAiUmVuZGVyQXR0YWNobWVudC5o
IgogI2ltcG9ydCAiUmVuZGVyTGF5ZXIuaCIKICNpbXBvcnQgIlJlbmRlck1lZGlhLmgiCi0jaW1w
b3J0ICJSZW5kZXJNZWRpYUNvbnRyb2xzLmgiCiAjaW1wb3J0ICJSZW5kZXJQcm9ncmVzcy5oIgog
I2ltcG9ydCAiUmVuZGVyU2xpZGVyLmgiCiAjaW1wb3J0ICJSZW5kZXJTbmFwc2hvdHRlZFBsdWdJ
bi5oIgpAQCAtMjk2LDMxICsyOTQsMjEgQEAgTlNWaWV3ICpSZW5kZXJUaGVtZU1hYzo6ZG9jdW1l
bnRWaWV3Rm9yKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKICAgICByZXR1cm4gVGhlbWVN
YWM6OmVuc3VyZWRWaWV3KCZvLnZpZXcoKS5mcmFtZVZpZXcoKSwgc3RhdGVzKTsKIH0KIAotI2lm
IEVOQUJMRShWSURFTykKLQogU3RyaW5nIFJlbmRlclRoZW1lTWFjOjptZWRpYUNvbnRyb2xzU3R5
bGVTaGVldCgpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAo
bV9sZWdhY3lNZWRpYUNvbnRyb2xzU3R5bGVTaGVldC5pc0VtcHR5KCkpCiAgICAgICAgIG1fbGVn
YWN5TWVkaWFDb250cm9sc1N0eWxlU2hlZXQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRz
T2ZGaWxlOltbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dlYkNvcmVSZW5kZXJUaGVtZUJ1bmRs
ZSBjbGFzc11dIHBhdGhGb3JSZXNvdXJjZTpAIm1lZGlhQ29udHJvbHNBcHBsZSIgb2ZUeXBlOkAi
Y3NzIl0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKICAgICByZXR1
cm4gbV9sZWdhY3lNZWRpYUNvbnRyb2xzU3R5bGVTaGVldDsKLSNlbHNlCi0gICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAogU3RyaW5nIFJlbmRlclRoZW1lTWFjOjptb2Rlcm5N
ZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5t
b2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChtX21lZGlhQ29udHJv
bHNTdHlsZVNoZWV0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fbWVkaWFDb250cm9sc1N0eWxl
U2hlZXQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlOltbTlNCdW5kbGUgYnVu
ZGxlRm9yQ2xhc3M6W1dlYkNvcmVSZW5kZXJUaGVtZUJ1bmRsZSBjbGFzc11dIHBhdGhGb3JSZXNv
dXJjZTpAIm1vZGVybi1tZWRpYS1jb250cm9scyIgb2ZUeXBlOkAiY3NzIiBpbkRpcmVjdG9yeTpA
Im1vZGVybi1tZWRpYS1jb250cm9scyJdIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVy
cm9yOm5pbF07CiAgICAgICAgIHJldHVybiBtX21lZGlhQ29udHJvbHNTdHlsZVNoZWV0OwogICAg
IH0KICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbHNlCi0gICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJUaGVtZU1hYzo6cHVyZ2VDYWNoZXMoKQpA
QCAtMzM1LDcgKzMyMyw2IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnB1cmdlQ2FjaGVzKCkKIAog
U3RyaW5nIFJlbmRlclRoZW1lTWFjOjptZWRpYUNvbnRyb2xzU2NyaXB0KCkKIHsKLSNpZiBFTkFC
TEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLm1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKCkpIHsKICAgICAg
ICAgaWYgKG1fbWVkaWFDb250cm9sc1NjcmlwdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIE5T
QnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dlYkNvcmVSZW5kZXJU
aGVtZUJ1bmRsZSBjbGFzc11dOwpAQCAtMzUzLDI3ICszNDAsMTggQEAgU3RyaW5nIFJlbmRlclRo
ZW1lTWFjOjptZWRpYUNvbnRyb2xzU2NyaXB0KCkKICAgICAgICAgbV9sZWdhY3lNZWRpYUNvbnRy
b2xzU2NyaXB0ID0gbWFrZVN0cmluZyhTdHJpbmcgeyBsb2NhbGl6ZWRTdHJpbmdzIH0sIFN0cmlu
ZyB7IHNjcmlwdCB9KTsKICAgICB9CiAgICAgcmV0dXJuIG1fbGVnYWN5TWVkaWFDb250cm9sc1Nj
cmlwdDsKLSNlbHNlCi0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAogU3Ry
aW5nIFJlbmRlclRoZW1lTWFjOjptZWRpYUNvbnRyb2xzQmFzZTY0U3RyaW5nRm9ySWNvbk5hbWVB
bmRUeXBlKGNvbnN0IFN0cmluZyYgaWNvbk5hbWUsIGNvbnN0IFN0cmluZyYgaWNvblR5cGUpCiB7
Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAoIVJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICBOU1N0cmluZyAqZGlyZWN0
b3J5ID0gQCJtb2Rlcm4tbWVkaWEtY29udHJvbHMvaW1hZ2VzIjsKICAgICBOU0J1bmRsZSAqYnVu
ZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltXZWJDb3JlUmVuZGVyVGhlbWVCdW5kbGUg
Y2xhc3NdXTsKICAgICByZXR1cm4gW1tOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mRmlsZTpbYnVu
ZGxlIHBhdGhGb3JSZXNvdXJjZTppY29uTmFtZSBvZlR5cGU6aWNvblR5cGUgaW5EaXJlY3Rvcnk6
ZGlyZWN0b3J5XV0gYmFzZTY0RW5jb2RlZFN0cmluZ1dpdGhPcHRpb25zOjBdOwotI2Vsc2UKLSAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgogfQogCi0jZW5kaWYgLy8gRU5BQkxFKFZJ
REVPKQotCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAKIFN0cmluZyBSZW5kZXJUaGVt
ZU1hYzo6aW1hZ2VDb250cm9sc1N0eWxlU2hlZXQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKaW5kZXggY2ZkOWYyNWMzNjI2ZDUwZWJhZDMyZjJl
NWNhMDA5NzJlODVlZjYxZS4uOTQyMmYyZWMxYTVjNTNlNTNiYjlkNTdkNDYxOTk5YTZmOWI4YmQ4
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCkBAIC00
MiwxMCArNDIsNiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNs
dWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgogCi0jaWYgRU5BQkxFKFZJREVPKQotI2luY2x1ZGUg
IlJlbmRlck1lZGlhQ29udHJvbHMuaCIKLSNlbmRpZgotCiAjaW5jbHVkZSA8dGNoYXIuaD4KIAog
LyogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggOTQ1ZGRmZDU3NmQyNmZl
M2I4Mjc4Y2QyNjkwZWMwZmE0ZThmNWVmNi4uN2EyNWVhYjM1MWNhMzkxM2E5NzBkNDA4MmFmNGIx
N2I0NTJlMzAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNDUzMSwx
MiArNDUzMSw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjpwYXRoU3RyaW5nV2l0
aFNocmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8ZG91CiAKIFN0cmluZyBJbnRlcm5hbHM6
OmdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzRm9yRWxlbWVudChIVE1MTWVkaWFFbGVtZW50
JiBtZWRpYUVsZW1lbnQpCiB7Ci0jaWYgIUVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0g
ICAgVU5VU0VEX1BBUkFNKG1lZGlhRWxlbWVudCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotI2Vs
c2UKICAgICByZXR1cm4gbWVkaWFFbGVtZW50LmdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVz
KCk7Ci0jZW5kaWYKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395307</attachid>
            <date>2020-04-02 15:05:55 -0700</date>
            <delta_ts>2020-04-02 17:37:08 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-209875-20200402150555.patch</filename>
            <type>text/plain</type>
            <size>216015</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5MzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmRjMzc2NGI5NjMwYzlk
Nzc0ZjczM2FmNGEyNGU4YWRhNzA4ODZhMi4uZjM1ZTFlMDI5MjI5YTg2NmRlYWY5MjU1NTY2NjBl
NjMwZGI4ZWMwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAyMC0wNC0wMSAgRXJp
YyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdW51
c2VkIG1lZGlhIGNvbnRyb2xzIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwOTg3NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjExNzI3Mzg+
CisKKyAgICAgICAgUmVtb3ZlIGNvZGUgZm9yIHRoZSwgbm93IHVudXNlZCwgQysrIGJhc2VkIG1l
ZGlhIGNvbnRyb2xzLgorCisgICAgICAgIFJldmlld2VkIGJ5IERhbmllbCBCYXRlcy4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLgorCisgICAgICAgICogTW9k
dWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29udHJvbHNIb3N0Ojp0ZXh0VHJhY2tDb250YWluZXIpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oOgorICAgICAgICAqIE1vZHVs
ZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbToKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUZyb21SZW5kZXJlcik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5TWVkaWFDb250cm9scy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oOiBSZW1vdmVkLgorICAgICAgICAqIGRvbS9O
b2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc01lZGlhQ29udHJvbEVsZW1lbnQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNNZWRpYUNvbnRyb2xzIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp+SFRNTE1lZGlhRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlQWZ0ZXJE
ZXRhY2hlZFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRl
UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TWVk
aWFSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYUxv
YWRpbmdGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0TmV0
d29ya1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNoYW5nZU5l
dHdvcmtTdGF0ZUZyb21Mb2FkaW5nVG9JZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6cHJvZ3Jlc3NFdmVudFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6cGxheWJhY2tQcm9ncmVzc1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6YWRkVGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnJlbW92ZVRleHRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpkaWRBZGRUZXh0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6ZW5zdXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6dXBkYXRlQ2FwdGlvbkNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjpsYXlvdXRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhY2tzKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyQ2hhcmFjdGVyaXN0aWNDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVZvbHVtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmRpZEJlY29tZUZ1bGxzY3JlZW5FbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OndpbGxTdG9wQmVpbmdGdWxsc2NyZWVu
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tS
ZWFkeVN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpj
b25maWd1cmVUZXh0VHJhY2tEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZVRleHRUcmFja0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNldENsb3NlZENhcHRpb25zVmlz
aWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVNZWRp
YUNvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
c2V0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpnZXRD
dXJyZW50TWVkaWFDb250cm9sc1N0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjpjbG9zZUNhcHRpb25UcmFja3NDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhQ29udHJvbHMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6aGFzTWVkaWFDb250cm9scyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVN
ZWRpYUNvbnRyb2xzKTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhQ29udHJvbHNIb3N0
KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5o
OiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5o
OiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wYXJlQ3VlSW50ZXJ2YWxGb3JEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZURpc3BsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6
dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnByb2Nlc3NBY3Rp
dmVWVFRDdWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudDo6dXBkYXRlQWN0aXZlQ3Vlc0ZvbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVRleHRTdHJva2VT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNsZWFyVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6ZW50ZXJlZEZ1
bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudDo6ZXhpdGVkRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVWaWRlb0Rpc3BsYXlTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6
OnVwZGF0ZVNpemVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dGV4
dFRyYWNrUmVwcmVzZW50YXRpb25Cb3VuZHNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmhpZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6c2hvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojppc1No
b3dpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29u
dGFpbmVyRWxlbWVudDo6bG9nZ2VyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmxvZ0lkZW50aWZpZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9n
Q2hhbm5lbCBjb25zdCk6CisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRp
YUNvbnRyb2xzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xzLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVk
aWFBRi5jcHA6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2U6OnNldFBhZ2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRVc2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVk
aWFDb250cm9scy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlh
Q29udHJvbHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZUFkd2FpdGEuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZUNvY29hLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ29jb2EubW06Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNvY29hOjptZWRpYUNvbnRyb2xzRm9ybWF0dGVk
U3RyaW5nRm9yRHVyYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjptZWRpYUNvbnRyb2xzU3R5bGVT
aGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6bW9kZXJuTWVkaWFDb250
cm9sc1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6Om1lZGlh
Q29udHJvbHNTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6Om1lZGlh
Q29udHJvbHNCYXNlNjRTdHJpbmdGb3JJY29uTmFtZUFuZFR5cGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
OjptZWRpYUNvbnRyb2xzU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6bW9kZXJuTWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVNYWM6Om1lZGlhQ29udHJvbHNTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVNYWM6Om1lZGlhQ29udHJvbHNCYXNlNjRTdHJpbmdGb3JJY29uTmFtZUFuZFR5
cGUpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6Z2V0Q3VycmVudE1lZGlhQ29udHJvbHNTdGF0dXNGb3JFbGVtZW50KToKKwog
MjAyMC0wMy0zMSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbaVBhZF0gVXNlIEFWQXVkaW9TZXNzaW9uIHRvIGRldGVjdCBBaXJQbGF5IHJvdXRlIGNo
YW5nZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9N
ZWRpYUNvbnRyb2xzSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJv
bHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCmluZGV4IDUwOGI5YTE4ZWVmMjM4M2FiNjFiOTljZjY1
ZjU2NTJiY2I5NTc2NzcuLjYwZWE2ZTdkMTA1NjNlZTE3OTQwZmM1OTMzZTgzM2U5YTBjZmFkMWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNv
bnRyb2xzSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xz
L01lZGlhQ29udHJvbHNIb3N0LmNwcApAQCAtMjUsMTQgKzI1LDEyIEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0KICNpbmNsdWRl
ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgogCiAjaW5jbHVkZSAiQ2FwdGlvblVzZXJQcmVmZXJlbmNl
cy5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
Ci0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKKyNpbmNsdWRlICJNZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0xNTksMTAgKzE1
Nyw5IEBAIHZvaWQgTWVkaWFDb250cm9sc0hvc3Q6OnNldFNlbGVjdGVkVGV4dFRyYWNrKFRleHRU
cmFjayogdHJhY2spCiAKIEVsZW1lbnQqIE1lZGlhQ29udHJvbHNIb3N0Ojp0ZXh0VHJhY2tDb250
YWluZXIoKQogewotICAgIGlmICghbV90ZXh0VHJhY2tDb250YWluZXIgJiYgbV9tZWRpYUVsZW1l
bnQpIHsKLSAgICAgICAgbV90ZXh0VHJhY2tDb250YWluZXIgPSBNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkpOwot
ICAgICAgICBtX3RleHRUcmFja0NvbnRhaW5lci0+c2V0TWVkaWFDb250cm9sbGVyKG1fbWVkaWFF
bGVtZW50LmdldCgpKTsKLSAgICB9CisgICAgaWYgKCFtX3RleHRUcmFja0NvbnRhaW5lciAmJiBt
X21lZGlhRWxlbWVudCkKKyAgICAgICAgbV90ZXh0VHJhY2tDb250YWluZXIgPSBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQtPmRvY3Vt
ZW50KCksICptX21lZGlhRWxlbWVudCk7CisKICAgICByZXR1cm4gbV90ZXh0VHJhY2tDb250YWlu
ZXIuZ2V0KCk7CiB9CiAKQEAgLTMyMSw1ICszMTgsMyBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0
Ojpjb21wYWN0TW9kZSgpIGNvbnN0CiB9CiAKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCmlu
ZGV4IGU0MGY1MWYzM2NmMThkZmJlNTI2OGZlYTExYzc1MDkyZDU3MWFiOGIuLjQxNGNiMGNiNTZh
MmYyODVhZDI0YzljNTIxOWY0ODlmZjRlZTBhZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCkBAIC0yNSw4
ICsyNSw2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKLQogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CkBAIC0xMDQsNCArMTAyLDMgQEAgcHJpdmF0
ZToKIAogfQogCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1
Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQppbmRleCA1Y2VhNWUxYzVl
YmIwMDU1Yzg0MzMzZmJmNGViMWM4NmQyZWM2YjY4Li41MzdlZWU3ZGFjYzdkYzQ0NmQ5ODk5NmQ4
NGRiNWQxZGEzNGYxZWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdp
bnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCkBAIC0yNSw4ICsyNSw2
IEBACiAKICNpbXBvcnQgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKLQogI2ltcG9ydCAiUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKIAogI2ltcG9y
dCAiQ29tbW9uVk0uaCIKQEAgLTQzNyw0ICs0MzUsMyBAQCBKU0M6OkpTVmFsdWUgSlNRdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudDo6ZXJyb3JMb2coSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUp
CiAKIH0KIAotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNkZTI1YzQwYTZlOTVkM2RiZDU3Mzg3
NmJiNGZhMTYyZWZmZTcyZDUuLjNiYTI0ZDcxYzUyZjk0OGNkY2ZhYjhhZjkwYzNjY2E4M2E5ODBm
ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC00NDcsNyArNDQ3LDYgQEAgYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5TGlzdC5jcHAKIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3Bw
CiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5jcHAKLWFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51
TGlzdC5jcHAKIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNwcAog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAKQEAgLTEzNjgsOSAr
MTM2Nyw3IEBAIGh0bWwvcGFyc2VyL1hTU0F1ZGl0b3JEZWxlZ2F0ZS5jcHAKIGh0bWwvc2hhZG93
L0F1dG9GaWxsQnV0dG9uRWxlbWVudC5jcHAKIGh0bWwvc2hhZG93L0RhdGFMaXN0QnV0dG9uRWxl
bWVudC5jcHAKIGh0bWwvc2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcAotaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcAotaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
RWxlbWVudHMuY3BwCi1odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAoraHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5jcHAKIGh0bWwvc2hhZG93L1By
b2dyZXNzU2hhZG93RWxlbWVudC5jcHAKIGh0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5j
cHAKIGh0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNwcApAQCAtMjE5MCw3ICsyMTg3LDYg
QEAgcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJr
ZXIuY3BwCiByZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKIHJlbmRlcmluZy9SZW5kZXJNZWRp
YS5jcHAKLXJlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAogcmVuZGVyaW5nL1JlbmRl
ck1lbnVMaXN0LmNwcAogcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAogcmVuZGVyaW5nL1JlbmRl
ck11bHRpQ29sdW1uRmxvdy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5ZWNlYTYwYmVkY2Y4YzMzOGI0ZDg3NDc1ZDNhZGYx
NTk4YWRiZTljLi5mYWY0MzY3YWRiMGU1YWRmZGU3MGEyMGNlZjJhYjllNTdkNTQ4N2E1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC02MzgsNyArNjM4LDYgQEAKIAkJMUQ5RjBGQzEyMTIyMDI5QjAwNUQ4RkQ0IC8qIFNoYXJlRGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMURDNTU0
MDAyMTFCQThDODAwNEI3ODBFIC8qIFNoYXJlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFEQkMxQjU2MjM0N0IzRDIwMEI5MDFBRiAvKiBQ
aWN0dXJlSW5QaWN0dXJlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFEQkMxQjU1MjM0N0IzRDIwMEI5MDFBRiAvKiBQaWN0dXJlSW5QaWN0
dXJlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxRjM2RUE5QzFFMjFCQTE3MDA2MjFFMjUgLyogV2ViQmFja2dyb3VuZFRhc2tDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
RjM2RUE5QTFFMjFCQTE3MDA2MjFFMjUgLyogV2ViQmFja2dyb3VuZFRhc2tDb250cm9sbGVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUYzQzNC
RUIxMzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGM0MzQkU5MTM1Q0FGM0MwMEI4QzFBQyAvKiBN
ZWRpYUNvbnRyb2xzLmggKi87IH07CiAJCTFGNzJCRjBCMTg3RkQ0NUMwMDA5QkNCMyAvKiBUaWxl
Q29udHJvbGxlck1lbW9yeUhhbmRsZXJJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFGNzJCRjA5MTg3RkQ0MjcwMDA5QkNCMyAvKiBUaWxlQ29udHJv
bGxlck1lbW9yeUhhbmRsZXJJT1MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxRjg3NTZCMjFFMjJDMzM1MDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0
YWJhc2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxRjg3NTZCMTFFMjJCRUVGMDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VU
cmFja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMUZBRkJGMTkxNUE1RkE3NDAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUZBRkJGMTYxNUE1RkE1
MjAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xMDg2LDcgKzEwODUsNyBAQAogCQk0MTZFNkZFOTFCQkQx
MkU1MDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEQ4IC8q
IFJlYWRhYmxlU3RyZWFtQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk0MTZFNkZFOTFCQkQxMkU1MDAwQTYwNTMgLyogV3JpdGFibGVT
dHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEU4IC8qIFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTZG
RDI1RjI0MEZBNEU1MDA2NjYxRDggLyogTm93UGxheWluZ0luZm8uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkZEMjVEMjQwRUUxQUUwMDY2NjFEOCAv
KiBOb3dQbGF5aW5nSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTQxNzI1M0FCMTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xFbGVt
ZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE3
MjUzQTkxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmggKi87IH07CisJ
CTQxNzI1M0FCMTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MTcyNTNBOTEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudC5oICovOyB9OwogCQk0MTc2MTJBRjFFM0E5OTQwMDBDM0Q4MUQgLyogTGliV2Vi
UlRDTWVkaWFFbmRwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTc2MTJBQjFFM0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRw
b2ludC5jcHAgKi87IH07CiAJCTQxNzYxMkIwMUUzQTk5NDAwMEMzRDgxRCAvKiBMaWJXZWJSVENN
ZWRpYUVuZHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MTc2MTJBQzFFM0E5OTNCMDBDM0Q4MUQgLyogTGliV2ViUlRDTWVkaWFFbmRwb2ludC5o
ICovOyB9OwogCQk0MTc2MTJCMTFFM0E5OTQwMDBDM0Q4MUQgLyogTGliV2ViUlRDUGVlckNvbm5l
Y3Rpb25CYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxNzYxMkFEMUUzQTk5M0IwMEMzRDgxRCAvKiBMaWJXZWJSVENQZWVyQ29ubmVjdGlv
bkJhY2tlbmQuY3BwICovOyB9OwpAQCAtNDU2Niw3ICs0NTY1LDYgQEAKIAkJREU1Rjg2NTkxRkEy
QUYyNDAwNkRCNjNCIC8qIFVuaWZpZWRTb3VyY2U2MS1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERFNUY4NjNBMUZBMkFGMDcwMDZEQjYzQiAvKiBV
bmlmaWVkU291cmNlNjEtbW0ubW0gKi87IH07CiAJCURFNzcxMDg2MUZBMkYwRDYwMDQ2MDAxNiAv
KiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMTc2M0YzQzFFMjA1MjM0MDAxRDU4REUgLyogV2ViQXJjaGl2ZUR1
bXBTdXBwb3J0Lm1tICovOyB9OwogCQlERUJDQ0REMjE2NjQ2RTgyMDBBNDUyRTEgLyogUmVuZGVy
TWVkaWFDb250cm9scy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gREU0OUIzMDgxNjVGMkZFMTAwMTAzMzhEIC8qIFJlbmRlck1lZGlhQ29udHJvbHMuaCAq
LzsgfTsKLQkJREVCQ0NERDQxNjY0NkVBRjAwQTQ1MkUxIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRU
eXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU0
OUIzMDAxNjVGMkZDNjAwMTAzMzhEIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oICovOyB9
OwogCQlERUNBN0Q5MzFGOUU2N0I1MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTEzMS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERUNBN0Q2RDFGOUU2
MUNGMDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTEzMS5jcHAgKi87IH07CiAJCURFQ0E3RDk0MUY5
RTY3QjUwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMTMyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERFQ0E3RDdFMUY5RTYxRTMwMEUzQjY2MSAvKiBV
bmlmaWVkU291cmNlMTMyLmNwcCAqLzsgfTsKIAkJREVDQTdEOTUxRjlFNjdCNTAwRTNCNjYxIC8q
IFVuaWZpZWRTb3VyY2UxMzMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gREVDQTdEODAxRjlFNjFFNTAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxMzMu
Y3BwICovOyB9OwpAQCAtNjYzNCw4ICs2NjMyLDYgQEAKIAkJMURFRjA2REUyMzNEMkUxQzAwRUUy
MjhEIC8qIERvY3VtZW50UGljdHVyZUluUGljdHVyZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gRG9jdW1lbnRQaWN0dXJlSW5QaWN0dXJlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUYzNkVBOUExRTIxQkExNzAwNjIxRTI1IC8qIFdlYkJhY2tncm91bmRUYXNrQ29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJCYWNrZ3JvdW5kVGFz
a0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUYzNkVBOUIxRTIx
QkExNzAwNjIxRTI1IC8qIFdlYkJhY2tncm91bmRUYXNrQ29udHJvbGxlci5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkJhY2tncm91bmRUYXNrQ29udHJvbGxl
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUYzQzNCRTgxMzVDQUYzQzAwQjhD
MUFDIC8qIE1lZGlhQ29udHJvbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTWVkaWFDb250cm9scy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFG
M0MzQkU5MTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhQ29udHJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUY3MkJGMDgxODdGRDQyNzAwMDlCQ0IzIC8qIFRpbGVDb250cm9sbGVyTWVtb3J5
SGFuZGxlcklPUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaWxl
Q29udHJvbGxlck1lbW9yeUhhbmRsZXJJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxRjcyQkYwOTE4N0ZENDI3MDAwOUJDQjMgLyogVGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5k
bGVySU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbGVDb250cm9sbGVy
TWVtb3J5SGFuZGxlcklPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRjg3NTZC
MDFFMjJCRUVGMDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU1FMaXRlRGF0YWJhc2VU
cmFja2VyQ2xpZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzQ0OCw4ICs3
NDQ0LDggQEAKIAkJNDE2RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtlclJlcG9ydGluZ1By
b3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlclJlcG9ydGluZ1By
b3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNkZEMjVEMjQwRUUxQUUwMDY2
NjFEOCAvKiBOb3dQbGF5aW5nSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBOb3dQbGF5aW5nSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTcwQTJF
OTFEOEMwQ0MwMDAzMTg0NTIgLyogSlNET01XcmFwcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NV3JhcHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQxNzI1M0E4MTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxNzI1M0E5MTM1NEJC
QkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNZWRpYUNvbnRyb2xFbGVtZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0MTcyNTNBODEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE3MjUzQTkxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MTc2MTJBQjFFM0E5OTNCMDBDM0Q4MUQgLyogTGliV2Vi
UlRDTWVkaWFFbmRwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBMaWJXZWJSVENNZWRpYUVuZHBvaW50LmNwcDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENN
ZWRpYUVuZHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE3NjEyQUMx
RTNBOTkzQjAwQzNEODFEIC8qIExpYldlYlJUQ01lZGlhRW5kcG9pbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gTGliV2ViUlRDTWVkaWFFbmRwb2ludC5oOyBwYXRoID0gbGli
d2VicnRjL0xpYldlYlJUQ01lZGlhRW5kcG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDE3NjEyQUQxRTNBOTkzQjAwQzNEODFEIC8qIExpYldlYlJUQ1BlZXJDb25uZWN0aW9u
QmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMaWJXZWJS
VENQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJUQ1Bl
ZXJDb25uZWN0aW9uQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NDU3Miw4ICsxNDU2OCw2IEBACiAJCURCRkNCMEVCRkY1Q0Q3N0VCRUIzNTk1RiAvKiBSZW5kZXJN
YXRoTUxQYWRkZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVu
ZGVyTWF0aE1MUGFkZGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREQwNUZF
MEIwQjhCQTNDNjAwOUFDREZFIC8qIFdlYkNvcmVPYmpDRXh0cmFzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlT2JqQ0V4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlERDc2M0JCMTA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5keWxpYiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxl
ZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGlieG1sMi5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xp
YnhtbDIuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07Ci0JCURFNDlCMkZGMTY1
RjJGQzYwMDEwMzM4RCAvKiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJREU0OUIzMDAxNjVGMkZDNjAwMTAzMzhEIC8q
IE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJREU0OUIzMDcxNjVGMkZFMTAwMTAzMzhEIC8qIFJlbmRlck1lZGlhQ29udHJvbHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWVkaWFDb250cm9s
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFNDlCMzA4MTY1RjJGRTEwMDEw
MzM4RCAvKiBSZW5kZXJNZWRpYUNvbnRyb2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbmRlck1lZGlhQ29udHJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJREU1RjgzQjIxRkExODY3NjAwNkRCNjNBIC8qIFVuaWZpZWRTb3VyY2UzMDEuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVW5pZmllZFNvdXJjZTMwMS5jcHA7IHBh
dGggPSAiRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJj
ZTMwMS5jcHAiOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTgyNTAs
MTIgKzE4MjQ0LDggQEAKIAkJCQlBN0M5QUJGNzEzNTdBM0JGMDBGNTUwM0YgLyogRGV0YWlsc01h
cmtlckNvbnRyb2wuaCAqLywKIAkJCQk1MTAxOTJEMzE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VD
b250cm9sc1Jvb3RFbGVtZW50LmNwcCAqLywKIAkJCQk1MTAxOTJENDE4QjZCOUI3MDA3RkM3QTEg
LyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggKi8sCi0JCQkJNDE3MjUzQTgxMzU0QkJCQzAw
MzYwRjJBIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCAqLywKLQkJCQk0MTcyNTNBOTEzNTRC
QkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sRWxlbWVudHMuaCAqLywKLQkJCQlERTQ5QjJGRjE2
NUYyRkM2MDAxMDMzOEQgLyogTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcCAqLywKLQkJCQlE
RTQ5QjMwMDE2NUYyRkM2MDAxMDMzOEQgLyogTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmggKi8s
Ci0JCQkJMUYzQzNCRTgxMzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMuY3BwICovLAot
CQkJCTFGM0MzQkU5MTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggKi8sCisJCQkJ
NDE3MjUzQTgxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQuY3BwICovLAorCQkJCTQxNzI1M0E5MTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmggKi8sCiAJCQkJRTRFMjQzODIxREFCOTUz
RTAwQzI2RTRCIC8qIG1ldGVyRWxlbWVudFNoYWRvdy5jc3MgKi8sCiAJCQkJQTcxNUU2NTAxMzRC
QkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHAgKi8sCiAJCQkJQTcxNUU2
NTExMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5oICovLApAQCAtMzE4
MTgsMTIgKzMxODA4LDEwIEBACiAJCQkJQ0RDQzlCQ0YyMjM4N0U5QTAwRkZCNTFDIC8qIE1lZGlh
Q2FwYWJpbGl0aWVzRGVjb2RpbmdJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRENDOUJEMTIy
Mzg3RUFBMDBGRkI1MUMgLyogTWVkaWFDYXBhYmlsaXRpZXNFbmNvZGluZ0luZm8uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA3OEUwOTNBMTdEMTZFMUMwMDQyMEFBMSAvKiBNZWRpYUNvbnN0cmFpbnRz
LmggaW4gSGVhZGVycyAqLywKLQkJCQk0MTcyNTNBQjEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFD
b250cm9sRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAotCQkJCURFQkNDREQ0MTY2NDZFQUYwMEE0
NTJFMSAvKiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUNE
RjY1Q0M4MTQ1QjFFNzUwMEM0QzdBQSAvKiBNZWRpYUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUNERjY1Q0NBMTQ1QjQ0ODgwMEM0QzdBQSAvKiBNZWRpYUNvbnRyb2xsZXJJbnRlcmZh
Y2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTFGM0MzQkVCMTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRp
YUNvbnRyb2xzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREFCNkQyOTE3QzdERTZDMDBDNjBCMzQg
LyogTWVkaWFDb250cm9sc0hvc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNzI1M0FCMTM1NEJC
QkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlDREYyQjAwNDE4MUYwNTlDMDBGMkI0MjQgLyogTWVkaWFEZXNjcmlw
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTUxNDVCOTAxQjNBMUNFMDAwNjYyQkY3IC8qIE1l
ZGlhRGV2aWNlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUVBNzI1RDMxQUNBQkQ0NzAwRUFE
MTdCIC8qIE1lZGlhRGV2aWNlcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCBkN2Y1YzRjOGYzOTc5MGMxMDZl
OGJmZDY1YzRlODU1NzE4ZDg5MzZkLi4zYTE5ODI3OTBhZWJhZTg5MjIyZDY5ODY3MWMyMGM0MGEw
ZTc5OGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJveC5o
IgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmgiCiAjaW5jbHVkZSAiQWNj
ZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TWVkaWFD
b250cm9scy5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdC5oIgogI2luY2x1
ZGUgIkFjY2Vzc2liaWxpdHlNZW51TGlzdC5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZW51
TGlzdE9wdGlvbi5oIgpAQCAtNzUsNiArNzQsNyBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTExhYmVs
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TWV0ZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBh
cnNlcklkaW9tcy5oIgpAQCAtMTEyLDEwICsxMTIsNiBAQAogI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+CiAjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CiAKLSNpZiBFTkFCTEUoVklERU8pCi0j
aW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNlbmRpZgotCiAjaWYgQ09NUElMRVIo
TVNWQykKIC8vIFNlZSBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzF3
ZWE1endlLmFzcHgKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQpAQCAtNTI5LDEyICs1
MjUsNiBAQCBzdGF0aWMgUmVmPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNyZWF0ZUZyb21SZW5kZXJl
cihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1l
ZGlhT2JqZWN0OjpjcmVhdGUocmVuZGVyZXIpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoVklERU8p
Ci0gICAgLy8gbWVkaWEgY29udHJvbHMKLSAgICBpZiAobm9kZSAmJiBub2RlLT5pc01lZGlhQ29u
dHJvbEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6
OmNyZWF0ZShyZW5kZXJlcik7Ci0jZW5kaWYKLQogICAgIGlmIChpczxSZW5kZXJTVkdSb290Pigq
cmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVNWR1Jvb3Q6OmNyZWF0ZShy
ZW5kZXJlcik7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlYTJkODQwM2IzNGJiZjdlMThmNDAxYzM4OTMzOWY2YTYxNGRhZGZhLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMzM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0g
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShWSURF
TykKLQotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmgiCi0KLSNpbmNsdWRl
ICJBWE9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1
ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRl
ICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIK
LSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKLSNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi0KLUFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6
OkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2woUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLSAgICA6
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QocmVuZGVyZXIpCi17Ci19Ci0KLVJlZjxBY2Nlc3Np
YmlsaXR5T2JqZWN0PiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpjcmVhdGUoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKLXsKLSAgICBBU1NFUlQocmVuZGVyZXItPm5vZGUoKSk7Ci0KLSAgICBz
d2l0Y2ggKG1lZGlhQ29udHJvbEVsZW1lbnRUeXBlKHJlbmRlcmVyLT5ub2RlKCkpKSB7Ci0gICAg
Y2FzZSBNZWRpYVNsaWRlcjoKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVs
aW5lOjpjcmVhdGUocmVuZGVyZXIpOwotCi0gICAgY2FzZSBNZWRpYUN1cnJlbnRUaW1lRGlzcGxh
eToKLSAgICBjYXNlIE1lZGlhVGltZVJlbWFpbmluZ0Rpc3BsYXk6Ci0gICAgICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6Y3JlYXRlKHJlbmRlcmVyKTsKLQotICAgIGNh
c2UgTWVkaWFDb250cm9sc1BhbmVsOgotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1lZGlh
Q29udHJvbHNDb250YWluZXI6OmNyZWF0ZShyZW5kZXJlcik7Ci0KLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sKHJlbmRl
cmVyKSk7Ci0gICAgfQotfQotCi1NZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBBY2Nlc3NpYmlsaXR5
TWVkaWFDb250cm9sOjpjb250cm9sVHlwZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlcigp
IHx8ICFyZW5kZXJlcigpLT5ub2RlKCkpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWVsaW5lQ29u
dGFpbmVyOyAvLyBUaW1lbGluZSBjb250YWluZXIgaXMgbm90IGFjY2Vzc2libGUuCi0KLSAgICBy
ZXR1cm4gbWVkaWFDb250cm9sRWxlbWVudFR5cGUocmVuZGVyZXIoKS0+bm9kZSgpKTsKLX0KLQot
Y29uc3QgU3RyaW5nJiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpjb250cm9sVHlwZU5hbWUo
KSBjb25zdAotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlh
RW50ZXJGdWxsc2NyZWVuQnV0dG9uTmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiRW50ZXJG
dWxsc2NyZWVuQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJp
bmc+IG1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBM
KCJFeGl0RnVsbHNjcmVlbkJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgU3RyaW5nPiBtZWRpYU11dGVCdXR0b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJN
dXRlQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1l
ZGlhUGxheUJ1dHRvbk5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlBsYXlCdXR0b24iKSk7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFTZWVrQmFja0J1
dHRvbk5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlNlZWtCYWNrQnV0dG9uIikpOwotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhU2Vla0ZvcndhcmRCdXR0
b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJTZWVrRm9yd2FyZEJ1dHRvbiIpKTsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVJld2luZEJ1dHRvbk5h
bWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlJld2luZEJ1dHRvbiIpKTsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b25O
YW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uIikpOwot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhVW5NdXRlQnV0dG9u
TmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVW5NdXRlQnV0dG9uIikpOwotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhUGF1c2VCdXR0b25OYW1lKE1BS0Vf
U1RBVElDX1NUUklOR19JTVBMKCJQYXVzZUJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVN0YXR1c0Rpc3BsYXlOYW1lKE1BS0VfU1RBVElDX1NU
UklOR19JTVBMKCJTdGF0dXNEaXNwbGF5IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxj
b25zdCBTdHJpbmc+IG1lZGlhQ3VycmVudFRpbWVEaXNwbGF5KE1BS0VfU1RBVElDX1NUUklOR19J
TVBMKCJDdXJyZW50VGltZURpc3BsYXkiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNv
bnN0IFN0cmluZz4gbWVkaWFUaW1lUmVtYWluaW5nRGlzcGxheShNQUtFX1NUQVRJQ19TVFJJTkdf
SU1QTCgiVGltZVJlbWFpbmluZ0Rpc3BsYXkiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IFN0cmluZz4gbWVkaWFTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b25OYW1lKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCJTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b24iKSk7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0
b25OYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24i
KSk7Ci0KLSAgICBzd2l0Y2ggKGNvbnRyb2xUeXBlKCkpIHsKLSAgICBjYXNlIE1lZGlhRW50ZXJG
dWxsc2NyZWVuQnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0
b25OYW1lOwotICAgIGNhc2UgTWVkaWFFeGl0RnVsbHNjcmVlbkJ1dHRvbjoKLSAgICAgICAgcmV0
dXJuIG1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b25OYW1lOwotICAgIGNhc2UgTWVkaWFNdXRlQnV0
dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFNdXRlQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlh
UGxheUJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhUGxheUJ1dHRvbk5hbWU7Ci0gICAgY2Fz
ZSBNZWRpYVNlZWtCYWNrQnV0dG9uOgotICAgICAgICByZXR1cm4gbWVkaWFTZWVrQmFja0J1dHRv
bk5hbWU7Ci0gICAgY2FzZSBNZWRpYVNlZWtGb3J3YXJkQnV0dG9uOgotICAgICAgICByZXR1cm4g
bWVkaWFTZWVrRm9yd2FyZEJ1dHRvbk5hbWU7Ci0gICAgY2FzZSBNZWRpYVJld2luZEJ1dHRvbjoK
LSAgICAgICAgcmV0dXJuIG1lZGlhUmV3aW5kQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhUmV0
dXJuVG9SZWFsdGltZUJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhUmV0dXJuVG9SZWFsdGlt
ZUJ1dHRvbk5hbWU7Ci0gICAgY2FzZSBNZWRpYVVuTXV0ZUJ1dHRvbjoKLSAgICAgICAgcmV0dXJu
IG1lZGlhVW5NdXRlQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhUGF1c2VCdXR0b246Ci0gICAg
ICAgIHJldHVybiBtZWRpYVBhdXNlQnV0dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhU3RhdHVzRGlz
cGxheToKLSAgICAgICAgcmV0dXJuIG1lZGlhU3RhdHVzRGlzcGxheU5hbWU7Ci0gICAgY2FzZSBN
ZWRpYUN1cnJlbnRUaW1lRGlzcGxheToKLSAgICAgICAgcmV0dXJuIG1lZGlhQ3VycmVudFRpbWVE
aXNwbGF5OwotICAgIGNhc2UgTWVkaWFUaW1lUmVtYWluaW5nRGlzcGxheToKLSAgICAgICAgcmV0
dXJuIG1lZGlhVGltZVJlbWFpbmluZ0Rpc3BsYXk7Ci0gICAgY2FzZSBNZWRpYVNob3dDbG9zZWRD
YXB0aW9uc0J1dHRvbjoKLSAgICAgICAgcmV0dXJuIG1lZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0
dG9uTmFtZTsKLSAgICBjYXNlIE1lZGlhSGlkZUNsb3NlZENhcHRpb25zQnV0dG9uOgotICAgICAg
ICByZXR1cm4gbWVkaWFIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b25OYW1lOwotCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6YWNjZXNzaWJpbGl0eVRleHQoVmVjdG9y
PEFjY2Vzc2liaWxpdHlUZXh0PiYgdGV4dE9yZGVyKSBjb25zdAotewotICAgIFN0cmluZyBkZXNj
cmlwdGlvbiA9IGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpOwotICAgIGlmICghZGVzY3JpcHRp
b24uaXNFbXB0eSgpKQotICAgICAgICB0ZXh0T3JkZXIuYXBwZW5kKEFjY2Vzc2liaWxpdHlUZXh0
KGRlc2NyaXB0aW9uLCBBY2Nlc3NpYmlsaXR5VGV4dFNvdXJjZTo6QWx0ZXJuYXRpdmUpKTsKLQot
ICAgIFN0cmluZyB0aXRsZSA9IHRoaXMtPnRpdGxlKCk7Ci0gICAgaWYgKCF0aXRsZS5pc0VtcHR5
KCkpCi0gICAgICAgIHRleHRPcmRlci5hcHBlbmQoQWNjZXNzaWJpbGl0eVRleHQodGl0bGUsIEFj
Y2Vzc2liaWxpdHlUZXh0U291cmNlOjpBbHRlcm5hdGl2ZSkpOwotCi0gICAgU3RyaW5nIGhlbHB0
ZXh0ID0gaGVscFRleHQoKTsKLSAgICBpZiAoIWhlbHB0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAg
dGV4dE9yZGVyLmFwcGVuZChBY2Nlc3NpYmlsaXR5VGV4dChoZWxwdGV4dCwgQWNjZXNzaWJpbGl0
eVRleHRTb3VyY2U6OkhlbHApKTsKLX0KLSAgICAKLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRp
YUNvbnRyb2w6OnRpdGxlKCkgY29uc3QKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgU3RyaW5nPiBjb250cm9sc1BhbmVsKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJDb250cm9s
c1BhbmVsIikpOwotCi0gICAgaWYgKGNvbnRyb2xUeXBlKCkgPT0gTWVkaWFDb250cm9sc1BhbmVs
KQotICAgICAgICByZXR1cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmluZyhjb250
cm9sc1BhbmVsKTsKLQotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0aXRs
ZSgpOwotfQotCi1TdHJpbmcgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6YWNjZXNzaWJpbGl0
eURlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbG9jYWxpemVkTWVkaWFDb250cm9s
RWxlbWVudFN0cmluZyhjb250cm9sVHlwZU5hbWUoKSk7Ci19Ci0KLVN0cmluZyBBY2Nlc3NpYmls
aXR5TWVkaWFDb250cm9sOjpoZWxwVGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxvY2FsaXpl
ZE1lZGlhQ29udHJvbEVsZW1lbnRIZWxwVGV4dChjb250cm9sVHlwZU5hbWUoKSk7Ci19Ci0KLWJv
b2wgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9y
ZWQoKSBjb25zdAotewotICAgIGlmICghbV9yZW5kZXJlciB8fCBtX3JlbmRlcmVyLT5zdHlsZSgp
LnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlIHx8IGNvbnRyb2xUeXBlKCkgPT0g
TWVkaWFUaW1lbGluZUNvbnRhaW5lcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1
cm4gYWNjZXNzaWJpbGl0eUlzSWdub3JlZEJ5RGVmYXVsdCgpOwotfQotCi1BY2Nlc3NpYmlsaXR5
Um9sZSBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjpyb2xlVmFsdWUoKSBjb25zdAotewotICAg
IHN3aXRjaCAoY29udHJvbFR5cGUoKSkgewotICAgIGNhc2UgTWVkaWFFbnRlckZ1bGxzY3JlZW5C
dXR0b246Ci0gICAgY2FzZSBNZWRpYUV4aXRGdWxsc2NyZWVuQnV0dG9uOgotICAgIGNhc2UgTWVk
aWFNdXRlQnV0dG9uOgotICAgIGNhc2UgTWVkaWFQbGF5QnV0dG9uOgotICAgIGNhc2UgTWVkaWFT
ZWVrQmFja0J1dHRvbjoKLSAgICBjYXNlIE1lZGlhU2Vla0ZvcndhcmRCdXR0b246Ci0gICAgY2Fz
ZSBNZWRpYVJld2luZEJ1dHRvbjoKLSAgICBjYXNlIE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRv
bjoKLSAgICBjYXNlIE1lZGlhVW5NdXRlQnV0dG9uOgotICAgIGNhc2UgTWVkaWFQYXVzZUJ1dHRv
bjoKLSAgICBjYXNlIE1lZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uOgotICAgIGNhc2UgTWVk
aWFIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b246Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5
Um9sZTo6QnV0dG9uOwotCi0gICAgY2FzZSBNZWRpYVN0YXR1c0Rpc3BsYXk6Ci0gICAgICAgIHJl
dHVybiBBY2Nlc3NpYmlsaXR5Um9sZTo6U3RhdGljVGV4dDsKLQotICAgIGNhc2UgTWVkaWFUaW1l
bGluZUNvbnRhaW5lcjoKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSb2xlOjpHcm91cDsK
LQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5Um9sZTo6VW5rbm93bjsKLX0KLQotCi0vLwotLy8gQWNjZXNzaWJpbGl0eU1lZGlh
Q29udHJvbHNDb250YWluZXIKLQotQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXI6
OkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIpCi0gICAgOiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sKHJlbmRlcmVyKQotewotfQotCi1S
ZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWlu
ZXI6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQotewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyKHJlbmRlcmVyKSk7Ci19
Ci0KLVN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6YWNjZXNzaWJp
bGl0eURlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbG9jYWxpemVkTWVkaWFDb250
cm9sRWxlbWVudFN0cmluZyhlbGVtZW50VHlwZU5hbWUoKSk7Ci19Ci0KLVN0cmluZyBBY2Nlc3Np
YmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6aGVscFRleHQoKSBjb25zdAotewotICAgIHJl
dHVybiBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50SGVscFRleHQoZWxlbWVudFR5cGVOYW1l
KCkpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpjb250
cm9sbGluZ1ZpZGVvRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgYXV0byBlbGVtZW50ID0gcGFyZW50
TWVkaWFFbGVtZW50KCptX3JlbmRlcmVyKTsKLSAgICByZXR1cm4gIWVsZW1lbnQgfHwgZWxlbWVu
dC0+aXNWaWRlbygpOwotfQotCi1jb25zdCBTdHJpbmcmIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRy
b2xzQ29udGFpbmVyOjplbGVtZW50VHlwZU5hbWUoKSBjb25zdAotewotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZpZGVvRWxlbWVudChNQUtFX1NUQVRJQ19TVFJJTkdf
SU1QTCgiVmlkZW9FbGVtZW50IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBT
dHJpbmc+IGF1ZGlvRWxlbWVudChNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQXVkaW9FbGVtZW50
IikpOwotCi0gICAgaWYgKGNvbnRyb2xsaW5nVmlkZW9FbGVtZW50KCkpCi0gICAgICAgIHJldHVy
biB2aWRlb0VsZW1lbnQ7Ci0gICAgcmV0dXJuIGF1ZGlvRWxlbWVudDsKLX0KLQotYm9vbCBBY2Nl
c3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0ln
bm9yZWQoKSBjb25zdAotewotICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZh
dWx0KCk7Ci19Ci0KLS8vCi0vLyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZQotCi1BY2Nlc3Np
YmlsaXR5TWVkaWFUaW1lbGluZTo6QWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKLSAgICA6IEFjY2Vzc2liaWxpdHlTbGlkZXIocmVuZGVyZXIpCi17Ci19
Ci0KLVJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6
Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgQWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUocmVuZGVyZXIpKTsKLX0KLQotU3RyaW5nIEFj
Y2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lOjp2YWx1ZURlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAg
ICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICghaXM8SFRNTElucHV0
RWxlbWVudD4oKm5vZGUpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBmbG9hdCB0
aW1lID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLnZhbHVlKCkudG9GbG9hdCgp
OwotICAgIHJldHVybiBsb2NhbGl6ZWRNZWRpYVRpbWVEZXNjcmlwdGlvbih0aW1lKTsKLX0KLQot
U3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lOjpoZWxwVGV4dCgpIGNvbnN0Ci17Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gc2xpZGVyKE1BS0VfU1RBVElD
X1NUUklOR19JTVBMKCJTbGlkZXIiKSk7Ci0gICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJv
bEVsZW1lbnRIZWxwVGV4dChzbGlkZXIpOwotfQotCi0KLS8vCi0vLyBBY2Nlc3NpYmlsaXR5TWVk
aWFUaW1lRGlzcGxheQotCi1BY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6QWNjZXNzaWJp
bGl0eU1lZGlhVGltZURpc3BsYXkoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLSAgICA6IEFjY2Vz
c2liaWxpdHlNZWRpYUNvbnRyb2wocmVuZGVyZXIpCi17Ci19Ci0KLVJlZjxBY2Nlc3NpYmlsaXR5
T2JqZWN0PiBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6Y3JlYXRlKFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQWNjZXNzaWJpbGl0eU1l
ZGlhVGltZURpc3BsYXkocmVuZGVyZXIpKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5TWVkaWFU
aW1lRGlzcGxheTo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAotewotICAg
IGlmICghbV9yZW5kZXJlciB8fCBtX3JlbmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBW
aXNpYmlsaXR5OjpWaXNpYmxlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghbV9y
ZW5kZXJlci0+c3R5bGUoKS53aWR0aCgpLnZhbHVlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIAotICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZhdWx0KCk7Ci19Ci0K
LVN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6YWNjZXNzaWJpbGl0eURlc2Ny
aXB0aW9uKCkgY29uc3QKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5n
PiBjdXJyZW50VGltZURpc3BsYXkoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkN1cnJlbnRUaW1l
RGlzcGxheSIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0aW1l
UmVtYWluaW5nRGlzcGxheShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVGltZVJlbWFpbmluZ0Rp
c3BsYXkiKSk7Ci0KLSAgICBpZiAoY29udHJvbFR5cGUoKSA9PSBNZWRpYUN1cnJlbnRUaW1lRGlz
cGxheSkKLSAgICAgICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRTdHJpbmco
Y3VycmVudFRpbWVEaXNwbGF5KTsKLQotICAgIHJldHVybiBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xF
bGVtZW50U3RyaW5nKHRpbWVSZW1haW5pbmdEaXNwbGF5KTsKLX0KLQotU3RyaW5nIEFjY2Vzc2li
aWxpdHlNZWRpYVRpbWVEaXNwbGF5OjpzdHJpbmdWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X3JlbmRlcmVyIHx8ICFtX3JlbmRlcmVyLT5ub2RlKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKLQotICAgIGZsb2F0IHRpbWUgPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xUaW1lRGlzcGxh
eUVsZW1lbnQqPihtX3JlbmRlcmVyLT5ub2RlKCkpLT5jdXJyZW50VmFsdWUoKTsKLSAgICByZXR1
cm4gbG9jYWxpemVkTWVkaWFUaW1lRGVzY3JpcHRpb24oc3RkOjphYnModGltZSkpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRy
b2xzLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNv
bnRyb2xzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYWQ2ZDk2ZTM2Zjg1YjM3
OWU1Y2Y5NWNlNGI0NWNiM2Q2ZjdjZDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVkaWFDb250cm9scy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5U2xpZGVyLmgiCi0jaW5j
bHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sIDogcHVibGljIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4g
Y3JlYXRlKFJlbmRlck9iamVjdCopOwotICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNZWRpYUNv
bnRyb2woKSA9IGRlZmF1bHQ7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlVmFsdWUoKSBj
b25zdCBvdmVycmlkZTsKLQotICAgIFN0cmluZyB0aXRsZSgpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBT
dHJpbmcgaGVscFRleHQoKSBjb25zdCBvdmVycmlkZTsKLQotcHJvdGVjdGVkOgotICAgIGV4cGxp
Y2l0IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2woUmVuZGVyT2JqZWN0Kik7Ci0gICAgTWVkaWFD
b250cm9sRWxlbWVudFR5cGUgY29udHJvbFR5cGUoKSBjb25zdDsKLSAgICBjb25zdCBTdHJpbmcm
IGNvbnRyb2xUeXBlTmFtZSgpIGNvbnN0OwotICAgIGJvb2wgY29tcHV0ZUFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWQoKSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGFjY2Vzc2li
aWxpdHlUZXh0KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4mKSBjb25zdCBvdmVycmlkZTsKLX07
Ci0KLQotY2xhc3MgQWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUgZmluYWwgOiBwdWJsaWMgQWNj
ZXNzaWJpbGl0eVNsaWRlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBY2Nlc3NpYmlsaXR5
T2JqZWN0PiBjcmVhdGUoUmVuZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVhbCB+QWNjZXNzaWJpbGl0
eU1lZGlhVGltZWxpbmUoKSA9IGRlZmF1bHQ7Ci0KLSAgICBTdHJpbmcgaGVscFRleHQoKSBjb25z
dCBvdmVycmlkZTsKLSAgICBTdHJpbmcgdmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRl
OwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lKFJl
bmRlck9iamVjdCopOwotCi0gICAgYm9vbCBpc01lZGlhVGltZWxpbmUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9Ci19OwotCi0KLWNsYXNzIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRy
b2xzQ29udGFpbmVyIGZpbmFsIDogcHVibGljIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wgewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlKFJlbmRl
ck9iamVjdCopOwotICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFp
bmVyKCkgPSBkZWZhdWx0OwotCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gQWNjZXNzaWJpbGl0eVJvbGU6OlRvb2xiYXI7IH0KLQotICAg
IFN0cmluZyBoZWxwVGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBhY2Nlc3NpYmls
aXR5RGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNp
dCBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcihSZW5kZXJPYmplY3QqKTsKLSAg
ICBib29sIGNvbnRyb2xsaW5nVmlkZW9FbGVtZW50KCkgY29uc3Q7Ci0gICAgY29uc3QgU3RyaW5n
JiBlbGVtZW50VHlwZU5hbWUoKSBjb25zdDsKLSAgICBib29sIGNvbXB1dGVBY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci19OwotCi0KLWNsYXNzIEFjY2Vzc2liaWxpdHlN
ZWRpYVRpbWVEaXNwbGF5IGZpbmFsIDogcHVibGljIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wg
ewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlKFJl
bmRlck9iamVjdCopOwotICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5
KCkgPSBkZWZhdWx0OwotCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uVGltZXI7IH0K
LQotICAgIFN0cmluZyBzdHJpbmdWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBh
Y2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAg
ICBleHBsaWNpdCBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheShSZW5kZXJPYmplY3QqKTsK
LSAgICBib29sIGlzTWVkaWFDb250cm9sTGFiZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9Ci0gICAgYm9vbCBjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IG92
ZXJyaWRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggNmQ5NzZlOWRmYmRkZDg4YjU3Yzc5YjFlMzE4YjIwYWY5
YmYwZjNmMi4uZDIwOGM3MTc5NjkxNzJhYzQxMTM3ODAyMmQ0OGNhODdlYWMwZWYzNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCkBAIC0xOTgsOCArMTk4LDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNBZnRlclBzZXVk
b0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBwc2V1ZG9JZCgpID09IFBzZXVkb0lkOjpBZnRlcjsg
fQogICAgIFBzZXVkb0lkIHBzZXVkb0lkKCkgY29uc3QgeyByZXR1cm4gKGlzRWxlbWVudE5vZGUo
KSAmJiBoYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSkgPyBjdXN0b21Qc2V1ZG9JZCgp
IDogUHNldWRvSWQ6Ok5vbmU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhQ29udHJvbEVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc01lZGlh
Q29udHJvbHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2lmIEVOQUJMRShWSURFT19UUkFD
SykKICAgICB2aXJ0dWFsIGJvb2wgaXNXZWJWVFRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5k
ZXggNzE1MTdhNzc5YWQ2ZjVkNzU5MTcwOWU4YmYwODQ2MmE2Yjc3NDRlMi4uMDI5YjhhNzE1MzI5
OWFmMmViMGQ0NzU3YjhlMzdmNDQ4NWNkMjdmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQmxvYi5oIgogI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgi
CisjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb250ZW50UnVsZUxpc3RSZXN1bHRzLmgiCkBAIC02
MCwxMCArNjEsMTEgQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpT
RE9NUHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNIVE1MTWVkaWFFbGVtZW50LmgiCisj
aW5jbHVkZSAiSlNNZWRpYUNvbnRyb2xzSG9zdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sbGVyLmgi
Ci0jaW5jbHVkZSAiTWVkaWFDb250cm9scy5oIgorI2luY2x1ZGUgIk1lZGlhQ29udHJvbHNIb3N0
LmgiCiAjaW5jbHVkZSAiTWVkaWFEb2N1bWVudC5oIgogI2luY2x1ZGUgIk1lZGlhRXJyb3IuaCIK
ICNpbmNsdWRlICJNZWRpYUZyYWdtZW50VVJJUGFyc2VyLmgiCkBAIC05Nyw2ICs5OSw3IEBACiAj
aW5jbHVkZSAiVXNlckNvbnRlbnRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVXNlckdlc3R1cmVJ
bmRpY2F0b3IuaCIKICNpbmNsdWRlICJWaWRlb1BsYXliYWNrUXVhbGl0eS5oIgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1NjcmlwdE9iamVjdC5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1VpbnQ4QXJyYXkuaD4KICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25J
RC5oPgpAQCAtMTU5LDEyICsxNjIsNiBAQAogI2luY2x1ZGUgIk1lZGlhS2V5cy5oIgogI2VuZGlm
CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotI2luY2x1ZGUgIkpTTWVkaWFD
b250cm9sc0hvc3QuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzSG9zdC5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1NjcmlwdE9iamVjdC5oPgotI2VuZGlmCi0KICNpZiBFTkFCTEUoRU5D
UllQVEVEX01FRElBKQogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjZW5kaWYKQEAgLTQ0
NywxMCArNDQ0LDggQEAgSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCYgZG9jdW0KICAgICAsIG1faGFzRXZlck5v
dGlmaWVkQWJvdXRQbGF5aW5nKGZhbHNlKQogICAgICwgbV9oYXNFdmVySGFkQXVkaW8oZmFsc2Up
CiAgICAgLCBtX2hhc0V2ZXJIYWRWaWRlbyhmYWxzZSkKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJP
TFNfU0NSSVBUKQogICAgICwgbV9tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3Io
ZmFsc2UpCiAgICAgLCBtX2hhdmVTZXRVcENhcHRpb25Db250YWluZXIoZmFsc2UpCi0jZW5kaWYK
ICAgICAsIG1faXNTY3J1YmJpbmdSZW1vdGVseShmYWxzZSkKICNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCiAgICAgLCBtX3RyYWNrc0FyZVJlYWR5KHRydWUpCkBAIC02MDAsMTAgKzU5NSw4IEBAIEhU
TUxNZWRpYUVsZW1lbnQ6On5IVE1MTWVkaWFFbGVtZW50KCkKICAgICB9CiAjZW5kaWYKIAotI2lm
IEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKG1faXNvbGF0ZWRXb3JsZCkK
ICAgICAgICAgbV9pc29sYXRlZFdvcmxkLT5jbGVhcldyYXBwZXJzKCk7Ci0jZW5kaWYKIAogI2lm
IEVOQUJMRShNRURJQV9TRVNTSU9OKQogICAgIGlmIChtX3Nlc3Npb24pIHsKQEAgLTgyMiwxOSAr
ODE1LDcgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0
ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHMKIAogYm9vbCBIVE1MTWVkaWFFbGVtZW50
OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNvbnN0IE5vZGUmIGNoaWxkKSBjb25zdAogewot
I2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgcmV0dXJuIGhhc1NoYWRvd1Jv
b3RQYXJlbnQoY2hpbGQpICYmIEhUTUxFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVy
KGNoaWxkKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAvLyA8bWVkaWE+IGRvZXNuJ3QgYWxsb3cgaXRzIGNvbnRlbnQsIGlu
Y2x1ZGluZyBzaGFkb3cgc3VidHJlZSwgdG8KLSAgICAvLyBiZSByZW5kZXJlZC4gU28gdGhpcyBz
aG91bGQgcmV0dXJuIGZhbHNlIGZvciBtb3N0IG9mIHRoZSBjaGlsZHJlbi4KLSAgICAvLyBPbmUg
ZXhjZXB0aW9uIGlzIGEgc2hhZG93IHRyZWUgYnVpbHQgZm9yIHJlbmRlcmluZyBjb250cm9scyB3
aGljaCBzaG91bGQgYmUgdmlzaWJsZS4KLSAgICAvLyBTbyB3ZSBsZXQgdGhlbSBnbyBoZXJlIGJ5
IGNvbXBhcmluZyBpdHMgc3VidHJlZSByb290IHdpdGggb25lIG9mIHRoZSBjb250cm9scy4KLSAg
ICByZXR1cm4gJm1lZGlhQ29udHJvbHMoKS0+dHJlZVNjb3BlKCkgPT0gJmNoaWxkLnRyZWVTY29w
ZSgpCi0gICAgICAgICYmIGhhc1NoYWRvd1Jvb3RQYXJlbnQoY2hpbGQpCi0gICAgICAgICYmIEhU
TUxFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNoaWxkKTsKLSNlbmRpZgogfQog
CiBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3RvclJlc3VsdCBIVE1MTWVkaWFFbGVtZW50OjppbnNl
cnRlZEludG9BbmNlc3RvcihJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5v
ZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQpAQCAtODcyLDggKzg1Myw2IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6cGF1c2VBZnRlckRldGFjaGVkVGFzaygpCiAgICAgaWYgKG1faW5BY3RpdmVE
b2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkK
LSAgICAgICAgbWVkaWFDb250cm9scygpLT5oaWRlKCk7CiAgICAgaWYgKG1fbmV0d29ya1N0YXRl
ID4gTkVUV09SS19FTVBUWSkKICAgICAgICAgcGF1c2UoKTsKICAgICBpZiAobV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlICE9IFZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKQpAQCAtOTIxLDEwICs5MDAsOCBA
QCBpbmxpbmUgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVSZW5kZXJlcigpCiAgICAgaWYg
KGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXItPnVw
ZGF0ZUZyb21FbGVtZW50KCk7CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQog
ICAgIGlmIChtX21lZGlhQ29udHJvbHNIb3N0KQogICAgICAgICBtX21lZGlhQ29udHJvbHNIb3N0
LT51cGRhdGVDYXB0aW9uRGlzcGxheVNpemVzKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjpkaWRBdHRhY2hSZW5kZXJlcnMoKQpAQCAtMTMwNCw5ICsxMjgxLDYgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291cmNlKCkKIAogICAgICAgICAvLyA1
LiBJZiB0aGUgbWVkaWEgZWxlbWVudOKAmXMgYmxvY2tlZC1vbi1wYXJzZXIgZmxhZyBpcyBmYWxz
ZSwgdGhlbiBwb3B1bGF0ZSB0aGUgbGlzdCBvZiBwZW5kaW5nIHRleHQgdHJhY2tzLgogI2lmIEVO
QUJMRShWSURFT19UUkFDSykKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAg
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgp
OwotCiAgICAgICAgIC8vIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja3NBcmVSZWFkeSB3aWxs
IG5lZWQgIi4uLiB0aGUgdGV4dCB0cmFja3Mgd2hvc2UgbW9kZSB3YXMgbm90IGluIHRoZQogICAg
ICAgICAvLyBkaXNhYmxlZCBzdGF0ZSB3aGVuIHRoZSBlbGVtZW50J3MgcmVzb3VyY2Ugc2VsZWN0
aW9uIGFsZ29yaXRobSBsYXN0IHN0YXJ0ZWQiLgogICAgICAgICAvLyBGSVhNRTogVXBkYXRlIHRo
aXMgdG8gbWF0Y2ggInBvcHVsYXRlIHRoZSBsaXN0IG9mIHBlbmRpbmcgdGV4dCB0cmFja3MiIHN0
ZXAuCkBAIC0yMjM1LDEwICsyMjA5LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUxv
YWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKICAgICAgICAgbm9u
ZVN1cHBvcnRlZCgpOwogCiAgICAgdXBkYXRlRGlzcGxheVN0YXRlKCk7Ci0gICAgaWYgKGhhc01l
ZGlhQ29udHJvbHMoKSkgewotICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnJlc2V0KCk7Ci0gICAg
ICAgIG1lZGlhQ29udHJvbHMoKS0+cmVwb3J0ZWRFcnJvcigpOwotICAgIH0KIAogICAgIEVSUk9S
X0xPRyhMT0dJREVOVElGSUVSLCAiZXJyb3IgPSAiLCBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSk7
CiAKQEAgLTIyODMsMTYgKzIyNTMsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXROZXR3
b3JrU3RhdGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBzdGF0ZSkKICAgICAgICAgICAgIGNo
YW5nZU5ldHdvcmtTdGF0ZUZyb21Mb2FkaW5nVG9JZGxlKCk7CiAgICAgICAgIG1fY29tcGxldGVs
eUxvYWRlZCA9IHRydWU7CiAgICAgfQotCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAg
ICAgICAgbWVkaWFDb250cm9scygpLT51cGRhdGVTdGF0dXNEaXNwbGF5KCk7CiB9CiAKIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6Y2hhbmdlTmV0d29ya1N0YXRlRnJvbUxvYWRpbmdUb0lkbGUoKQog
ewogICAgIG1fcHJvZ3Jlc3NFdmVudFRpbWVyLnN0b3AoKTsKLSAgICBpZiAoaGFzTWVkaWFDb250
cm9scygpICYmIG1fcGxheWVyLT5kaWRMb2FkaW5nUHJvZ3Jlc3MoKSkKLSAgICAgICAgbWVkaWFD
b250cm9scygpLT5idWZmZXJpbmdQcm9ncmVzc2VkKCk7CiAKICAgICAvLyBTY2hlZHVsZSBvbmUg
bGFzdCBwcm9ncmVzcyBldmVudCBzbyB3ZSBndWFyYW50ZWUgdGhhdCBhdCBsZWFzdCBvbmUgaXMg
ZmlyZWQKICAgICAvLyBmb3IgZmlsZXMgdGhhdCBsb2FkIHZlcnkgcXVpY2tseS4KQEAgLTI0Mzcs
OCArMjQwMiw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWRpYVBs
YXllcjo6UmVhZHlTdGF0ZSBzdGF0ZSkKICNlbmRpZgogICAgICAgICBtX2luaXRpYWxseU11dGVk
ID0gbV92b2x1bWUgPCAwLjA1IHx8IG11dGVkKCk7CiAKLSAgICAgICAgaWYgKGhhc01lZGlhQ29u
dHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+bG9hZGVkTWV0YWRhdGEoKTsK
ICAgICAgICAgdXBkYXRlUmVuZGVyZXIoKTsKIAogICAgICAgICBpZiAoaXM8TWVkaWFEb2N1bWVu
dD4oZG9jdW1lbnQoKSkpCkBAIC0yNTA1LDEzICsyNDY4LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0YXRlKQogICAgICAg
ICBzZXRBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0
ZTo6UHJldmVudGVkQXV0b3BsYXkpOwogICAgIH0KIAotICAgIGlmIChzaG91bGRVcGRhdGVEaXNw
bGF5U3RhdGUpIHsKKyAgICBpZiAoc2hvdWxkVXBkYXRlRGlzcGxheVN0YXRlKQogICAgICAgICB1
cGRhdGVEaXNwbGF5U3RhdGUoKTsKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkgewot
ICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5yZWZyZXNoQ2xvc2VkQ2FwdGlvbnNCdXR0b25W
aXNpYmlsaXR5KCk7Ci0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnVwZGF0ZVN0YXR1c0Rp
c3BsYXkoKTsKLSAgICAgICAgfQotICAgIH0KIAogICAgIHVwZGF0ZVBsYXlTdGF0ZSgpOwogICAg
IHVwZGF0ZU1lZGlhQ29udHJvbGxlcigpOwpAQCAtMjg1NSw4ICsyODEzLDYgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojpwcm9ncmVzc0V2ZW50VGltZXJGaXJlZCgpCiAgICAgICAgIG1fcHJldmlv
dXNQcm9ncmVzc1RpbWUgPSB0aW1lOwogICAgICAgICBtX3NlbnRTdGFsbGVkRXZlbnQgPSBmYWxz
ZTsKICAgICAgICAgdXBkYXRlUmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJv
bHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+YnVmZmVyaW5nUHJvZ3Jlc3NlZCgp
OwogICAgIH0gZWxzZSBpZiAodGltZWRlbHRhID4gM19zICYmICFtX3NlbnRTdGFsbGVkRXZlbnQp
IHsKICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuc3RhbGxlZEV2ZW50KTsKICAg
ICAgICAgbV9zZW50U3RhbGxlZEV2ZW50ID0gdHJ1ZTsKQEAgLTM3NDAsOCArMzY5Niw2IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKICAgICAgICAgaWYgKCFw
cm9jZXNzaW5nTWVkaWFQbGF5ZXJDYWxsYmFjaygpKSB7CiAgICAgICAgICAgICBpZiAobV9wbGF5
ZXIpIHsKICAgICAgICAgICAgICAgICBtX3BsYXllci0+c2V0TXV0ZWQoZWZmZWN0aXZlTXV0ZWQo
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAg
ICAgICAgICAgbWVkaWFDb250cm9scygpLT5jaGFuZ2VkTXV0ZSgpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKQEAgLTM5MDgsOSArMzg2Miw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
cGxheWJhY2tQcm9ncmVzc1RpbWVyRmlyZWQoKQogICAgIGlmICghcmVxdWVzdGVkUGxheWJhY2tS
YXRlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9wYXVzZWQgJiYgaGFzTWVkaWFD
b250cm9scygpKQotICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnBsYXliYWNrUHJvZ3Jlc3NlZCgp
OwotCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIHVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1
ZXMoY3VycmVudE1lZGlhVGltZSgpKTsKICNlbmRpZgpAQCAtNDAzNiwxMiArMzk4Nyw2IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJEaWRSZW1vdmVWaWRlb1RyYWNrKFZpZGVv
VHJhY2tQcml2YXRlJiB0cmFjaykKICAgICB0cmFjay53aWxsQmVSZW1vdmVkKCk7CiB9CiAKLXZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6Y2xvc2VDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpCi17Ci0gICAg
aWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5jbG9zZWRD
YXB0aW9uVHJhY2tzQ2hhbmdlZCgpOwotfQotCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZEF1
ZGlvVHJhY2soUmVmPEF1ZGlvVHJhY2s+JiYgdHJhY2spCiB7CiAjaWYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECkBAIC00MDY1LDggKzQwMTAsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRl
eHRUcmFjayhSZWY8VGV4dFRyYWNrPiYmIHRyYWNrKQogICAgIH0KIAogICAgIGVuc3VyZVRleHRU
cmFja3MoKS5hcHBlbmQoV1RGTW92ZSh0cmFjaykpOwotCi0gICAgY2xvc2VDYXB0aW9uVHJhY2tz
Q2hhbmdlZCgpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFZpZGVvVHJhY2soUmVm
PFZpZGVvVHJhY2s+JiYgdHJhY2spCkBAIC00MDkxLDggKzQwMzQsNiBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnJlbW92ZVRleHRUcmFjayhSZWY8VGV4dFRyYWNrPiYmIHRyYWNrLCBib29sIHNj
aGVkdWxlRXZlbgogICAgIHRyYWNrLT5jbGVhckNsaWVudCgpOwogICAgIGlmIChtX3RleHRUcmFj
a3MpCiAgICAgICAgIG1fdGV4dFRyYWNrcy0+cmVtb3ZlKHRyYWNrLCBzY2hlZHVsZUV2ZW50KTsK
LQotICAgIGNsb3NlQ2FwdGlvblRyYWNrc0NoYW5nZWQoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpyZW1vdmVWaWRlb1RyYWNrKFJlZjxWaWRlb1RyYWNrPiYmIHRyYWNrKQpAQCAtNDE5
Myw5ICs0MTM0LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRUZXh0VHJhY2soSFRN
TFRyYWNrRWxlbWVudCYgdHJhY2tFbGVtZW50KQogICAgIC8vIGluIHRoZSBtYXJrdXAgaGF2ZSBi
ZWVuIGFkZGVkLgogICAgIGlmICghbV9wYXJzaW5nSW5Qcm9ncmVzcykKICAgICAgICAgc2NoZWR1
bGVDb25maWd1cmVUZXh0VHJhY2tzKCk7Ci0KLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQot
ICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmNsb3NlZENhcHRpb25UcmFja3NDaGFuZ2VkKCk7CiB9
CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkUmVtb3ZlVGV4dFRyYWNrKEhUTUxUcmFja0Vs
ZW1lbnQmIHRyYWNrRWxlbWVudCkKQEAgLTQzNTksNyArNDI5Nyw5IEBAIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udHJvbGxlckpTVmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwKIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRyb2xzU2hh
ZG93Um9vdCgpCiB7Ci0gICAgQVNTRVJUKCFtX2NyZWF0aW5nQ29udHJvbHMpOworICAgIGlmICht
X2NyZWF0aW5nQ29udHJvbHMpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fY3JlYXRpbmdDb250
cm9scyA9IHRydWU7CiAgICAgZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwogICAgIG1fY3Jl
YXRpbmdDb250cm9scyA9IGZhbHNlOwpAQCAtNDM4Nyw3ICs0MzI3LDYgQEAgYm9vbCBIVE1MTWVk
aWFFbGVtZW50OjpzZXR1cEFuZENhbGxKUyhjb25zdCBKU1NldHVwRnVuY3Rpb24mIHRhc2spCiAK
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlQ2FwdGlvbkNvbnRhaW5lcigpCiB7Ci0jaWYg
RU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAobV9oYXZlU2V0VXBDYXB0aW9u
Q29udGFpbmVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ0MzIsMTMgKzQzNzEsMTAgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVDYXB0aW9uQ29udGFpbmVyKCkKIAogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9KTsKLQotI2VuZGlmCiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6bGF5b3V0U2l6ZUNoYW5nZWQoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJ
UFQpCiAgICAgaWYgKGF1dG8gZnJhbWVWaWV3ID0gbWFrZVJlZlB0cihkb2N1bWVudCgpLnZpZXco
KSkpIHsKICAgICAgICAgYXV0byB0YXNrID0gW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKV0gewogICAgICAgICAgICAgaWYgKGF1dG8gcm9vdCA9IHVzZXJBZ2VudFNoYWRvd1Jv
b3QoKSkKQEAgLTQ0NDYsNyArNDM4Miw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bGF5b3V0
U2l6ZUNoYW5nZWQoKQogICAgICAgICB9OwogICAgICAgICBmcmFtZVZpZXctPnF1ZXVlUG9zdExh
eW91dENhbGxiYWNrKFdURk1vdmUodGFzaykpOwogICAgIH0KLSNlbmRpZgogCiAgICAgaWYgKCFt
X3JlY2VpdmVkTGF5b3V0U2l6ZUNoYW5nZWQpIHsKICAgICAgICAgbV9yZWNlaXZlZExheW91dFNp
emVDaGFuZ2VkID0gdHJ1ZTsKQEAgLTQ1ODYsOCArNDUyMSw2IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6Y29uZmlndXJlVGV4dFRyYWNrcygpCiAKICAgICB1cGRhdGVDYXB0aW9uQ29udGFpbmVy
KCk7CiAgICAgY29uZmlndXJlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIGlmIChoYXNNZWRpYUNv
bnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+Y2xvc2VkQ2FwdGlvblRyYWNrc0No
YW5nZWQoKTsKIH0KICNlbmRpZgogCkBAIC01MTU0LDggKzUwODcsNiBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6Om1lZGlhUGxheWVyQ2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCkKICAgICAgICAgbWVk
aWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZCgpOwogICAgIH0KIAotICAgIGlmIChoYXNNZWRp
YUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVzZXQoKTsKICAgICB1cGRh
dGVSZW5kZXJlcigpOwogCiAgICAgaWYgKCFwYXVzZWQoKSAmJiAhbV9tZWRpYVNlc3Npb24tPnBs
YXliYWNrUGVybWl0dGVkKCkpIHsKQEAgLTUzNTAsOSArNTI4MSw3IEBAIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6dXBkYXRlVm9sdW1lKCkKICAgICBkb2N1bWVudCgpLnVwZGF0ZUlzUGxheWluZ01l
ZGlhKCk7CiAjZW5kaWYKIAotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1l
ZGlhQ29udHJvbHMoKS0+Y2hhbmdlZFZvbHVtZSgpOwotI2VuZGlmCisjZW5kaWYgLy8gUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzY2hlZHVsZVVwZGF0
ZVBsYXlTdGF0ZSgpCkBAIC01MzgwLDggKzUzMDksNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OnVwZGF0ZVBsYXlTdGF0ZSgpCiAgICAgICAgICAgICBtX3BsYXllci0+cGF1c2UoKTsKICAgICAg
ICAgcmVmcmVzaENhY2hlZFRpbWUoKTsKICAgICAgICAgbV9wbGF5YmFja1Byb2dyZXNzVGltZXIu
c3RvcCgpOwotICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICAgICAgbWVk
aWFDb250cm9scygpLT5wbGF5YmFja1N0b3BwZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtNTQyNSw5ICs1MzUyLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5
U3RhdGUoKQogICAgICAgICAgICAgbV9wbGF5ZXItPnBsYXkoKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCkt
PnBsYXliYWNrU3RhcnRlZCgpOwotCiAgICAgICAgIHN0YXJ0UGxheWJhY2tQcm9ncmVzc1RpbWVy
KCk7CiAgICAgICAgIHNldFBsYXlpbmcodHJ1ZSk7CiAgICAgfSBlbHNlIHsKQEAgLTU0NDUsOSAr
NTM2OSw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUGxheVN0YXRlKCkKIAogICAg
ICAgICBpZiAoY291bGRQbGF5SWZFbm91Z2hEYXRhKCkpCiAgICAgICAgICAgICBwcmVwYXJlVG9Q
bGF5KCk7Ci0KLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1l
ZGlhQ29udHJvbHMoKS0+cGxheWJhY2tTdG9wcGVkKCk7CiAgICAgfQogCiAgICAgdXBkYXRlTWVk
aWFDb250cm9sbGVyKCk7CkBAIC02MDczLDggKzU5OTQsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OmVudGVyRnVsbHNjcmVlbihWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCiAKICAgICAgICAg
ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1vZGUpOwogICAgICAgICBjb25maWd1cmVNZWRpYUNvbnRy
b2xzKCk7Ci0gICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRp
YUNvbnRyb2xzKCktPmVudGVyZWRGdWxsc2NyZWVuKCk7CiAgICAgICAgIGlmIChpczxIVE1MVmlk
ZW9FbGVtZW50PigqdGhpcykpIHsKICAgICAgICAgICAgIEhUTUxWaWRlb0VsZW1lbnQmIGFzVmlk
ZW8gPSBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50PigqdGhpcyk7CiAgICAgICAgICAgICBpZiAo
ZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLnN1cHBvcnRzVmlkZW9GdWxsc2Ny
ZWVuKG1fdmlkZW9GdWxsc2NyZWVuTW9kZSkpIHsKQEAgLTYxMTAsMTIgKzYwMjksOCBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OmV4aXRGdWxsc2NyZWVuKCkKICAgICBBU1NFUlQobV92aWRlb0Z1
bGxzY3JlZW5Nb2RlICE9IFZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKICAgICBWaWRlb0Z1bGxz
Y3JlZW5Nb2RlIG9sZFZpZGVvRnVsbHNjcmVlbk1vZGUgPSBtX3ZpZGVvRnVsbHNjcmVlbk1vZGU7
CiAgICAgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSNp
ZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIFJlZjxIVE1MTWVkaWFFbGVtZW50
PiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsgLy8gdXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJlc2Vu
dGF0aW9uTW9kZUNoYW5nZSBjYWxscyBtZXRob2RzIHRoYXQgY2FuIHRyaWdnZXIgYXJiaXRyYXJ5
IERPTSBtdXRhdGlvbnMuCiAgICAgdXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJlc2VudGF0aW9u
TW9kZUNoYW5nZSgpOwotI2VuZGlmCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAg
ICAgbWVkaWFDb250cm9scygpLT5leGl0ZWRGdWxsc2NyZWVuKCk7CiAKICAgICBpZiAoIWRvY3Vt
ZW50KCkucGFnZSgpIHx8ICFpczxIVE1MVmlkZW9FbGVtZW50PigqdGhpcykpCiAgICAgICAgIHJl
dHVybjsKQEAgLTYxOTgsMTYgKzYxMTMsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRC
ZWNvbWVGdWxsc2NyZWVuRWxlbWVudCgpCiB7CiAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwg
IiwgZnVsbHNjcmVlbiBtb2RlID0gIiwgZnVsbHNjcmVlbk1vZGUoKSk7CiAgICAgbV93YWl0aW5n
VG9FbnRlckZ1bGxzY3JlZW4gPSBmYWxzZTsKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQot
ICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmVudGVyZWRGdWxsc2NyZWVuKCk7CiAgICAgc2NoZWR1
bGVVcGRhdGVQbGF5U3RhdGUoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp3aWxsU3Rv
cEJlaW5nRnVsbHNjcmVlbkVsZW1lbnQoKQogewotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkp
Ci0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+ZXhpdGVkRnVsbHNjcmVlbigpOwotCiAgICAgaWYg
KGZ1bGxzY3JlZW5Nb2RlKCkgPT0gVmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKQogICAgICAg
ICBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoVmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwogfQpAQCAt
NjM0OCwxOSArNjI1OCwxMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja1JlYWR5
U3RhdGVDaGFuZ2VkKFRleHRUcmFjayogdHJhY2spCiAgICAgICAgIC8vIFRoZSBkaXNwbGF5IHRy
ZWVzIGV4aXN0IGFzIGxvbmcgYXMgdGhlIHRyYWNrIGlzIGFjdGl2ZSwgaW4gdGhpcyBjYXNlLAog
ICAgICAgICAvLyBhbmQgaWYgdGhlIHNhbWUgdHJhY2sgaXMgbG9hZGVkIGFnYWluIChmb3IgZXhh
bXBsZSBpZiB0aGUgc3JjIGF0dHJpYnV0ZSB3YXMgY2hhbmdlZCksCiAgICAgICAgIC8vIGN1ZXMg
Y2FuIGJlIGFjY3VtdWxhdGVkIHdpdGggdGhlIG9sZCBvbmVzLCB0aGF0J3Mgd2h5IHRoZXkgbmVl
ZHMgdG8gYmUgZmx1c2hlZAotICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAg
ICAgICAgbWVkaWFDb250cm9scygpLT5jbGVhclRleHREaXNwbGF5Q29udGFpbmVyKCk7CiAgICAg
ICAgIHVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKICAgICB9CiAgICAgaWYgKG1fcGxheWVyICYm
IG1fdGV4dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuLmNvbnRhaW5zKHRyYWNrKSkg
ewogICAgICAgICBpZiAodHJhY2stPnJlYWRpbmVzc1N0YXRlKCkgIT0gVGV4dFRyYWNrOjpMb2Fk
aW5nKQogICAgICAgICAgICAgc2V0UmVhZHlTdGF0ZShtX3BsYXllci0+cmVhZHlTdGF0ZSgpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICAvLyBUaGUgdHJhY2sgcmVhZGluZXNzIHN0YXRlIG1pZ2h0
IGhhdmUgY2hhbmdlZCBhcyBhIHJlc3VsdCBvZiB0aGUgdXNlcgotICAgICAgICAvLyBjbGlja2lu
ZyB0aGUgY2FwdGlvbnMgYnV0dG9uLiBJbiB0aGlzIGNhc2UsIGEgY2hlY2sgd2hldGhlciBhbGwg
dGhlCi0gICAgICAgIC8vIHJlc291cmNlcyBoYXZlIGZhaWxlZCBsb2FkaW5nIHNob3VsZCBiZSBk
b25lIGluIG9yZGVyIHRvIGhpZGUgdGhlIENDIGJ1dHRvbi4KLSAgICAgICAgaWYgKGhhc01lZGlh
Q29udHJvbHMoKSAmJiB0cmFjay0+cmVhZGluZXNzU3RhdGUoKSA9PSBUZXh0VHJhY2s6OkZhaWxl
ZFRvTG9hZCkKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVmcmVzaENsb3NlZENhcHRp
b25zQnV0dG9uVmlzaWJpbGl0eSgpOwogICAgIH0KIH0KIApAQCAtNjM5MSw1MSArNjI5MywyNyBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkoVGV4dFRy
YWNrVmlzaWJpbGl0eUNoZWNrVHlwZSBjaAogICAgIG1faGF2ZVZpc2libGVUZXh0VHJhY2sgPSBo
YXZlVmlzaWJsZVRleHRUcmFjazsKICAgICBtX2Nsb3NlZENhcHRpb25zVmlzaWJsZSA9IG1faGF2
ZVZpc2libGVUZXh0VHJhY2s7CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQog
ICAgIGlmICghbV9oYXZlVmlzaWJsZVRleHRUcmFjaykKICAgICAgICAgcmV0dXJuOwogCiAgICAg
ZW5zdXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QoKTsKICAgICB1cGRhdGVUZXh0VHJhY2tEaXNw
bGF5KCk7Ci0jZWxzZQotICAgIGlmICghbV9oYXZlVmlzaWJsZVRleHRUcmFjayAmJiAhaGFzTWVk
aWFDb250cm9scygpICYmICFjcmVhdGVNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1lZGlhQ29udHJvbHMoKS0+Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgp
OwotCi0gICAgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIHVwZGF0ZUFjdGl2ZVRleHRU
cmFja0N1ZXMoY3VycmVudE1lZGlhVGltZSgpKTsKLSNlbmRpZgogfQogCiB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKQogewotI2lmIEVOQUJMRShNRURJQV9D
T05UUk9MU19TQ1JJUFQpCiAgICAgZW5zdXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QoKTsKICAg
ICBpZiAoIW1fbWVkaWFDb250cm9sc0hvc3QpCiAgICAgICAgIG1fbWVkaWFDb250cm9sc0hvc3Qg
PSBNZWRpYUNvbnRyb2xzSG9zdDo6Y3JlYXRlKCp0aGlzKTsKICAgICBtX21lZGlhQ29udHJvbHNI
b3N0LT51cGRhdGVUZXh0VHJhY2tDb250YWluZXIoKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNNZWRp
YUNvbnRyb2xzKCkgJiYgIWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbWVkaWFDb250cm9scygpLT51cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0jZW5kaWYK
IH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkltYWdlSWZOZWVkZWQoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAg
ICAgZW5zdXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QoKTsKICAgICBpZiAoIW1fbWVkaWFDb250
cm9sc0hvc3QpCiAgICAgICAgIG1fbWVkaWFDb250cm9sc0hvc3QgPSBNZWRpYUNvbnRyb2xzSG9z
dDo6Y3JlYXRlKCp0aGlzKTsKICAgICBtX21lZGlhQ29udHJvbHNIb3N0LT51cGRhdGVUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQoKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNNZWRp
YUNvbnRyb2xzKCkgJiYgIWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbWVkaWFDb250cm9scygpLT51cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdl
SWZOZWVkZWQoKTsKLSNlbmRpZgogfQogCiAjZW5kaWYKQEAgLTY0NTYsOCArNjMzNCw2IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgY2xvc2Vk
Q2FwdGlvblZpc2libGUpCiAgICAgbWFya0NhcHRpb25BbmRTdWJ0aXRsZVRyYWNrc0FzVW5jb25m
aWd1cmVkKEltbWVkaWF0ZWx5KTsKICAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CiAjZWxz
ZQotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+
Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgpOwogI2VuZGlmCiB9CiAKQEAgLTY1NzYs
NjIgKzY0NTIsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByaXZhdGVCcm93c2luZ1N0YXRl
RGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICNlbmRpZgogfQogCi1NZWRpYUNv
bnRyb2xzKiBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUNvbnRyb2xzKCkgY29uc3QKLXsKLSNpZiBF
TkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAgIHJldHVybiBudWxscHRyOwotI2Vsc2UK
LSAgICBhdXRvIHJvb3QgPSB1c2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgaWYgKCFyb290KQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBjaGlsZHJlbk9mVHlwZTxNZWRp
YUNvbnRyb2xzPigqcm9vdCkuZmlyc3QoKTsKLSNlbmRpZgotfQotCi1ib29sIEhUTUxNZWRpYUVs
ZW1lbnQ6Omhhc01lZGlhQ29udHJvbHMoKSBjb25zdAotewotI2lmIEVOQUJMRShNRURJQV9DT05U
Uk9MU19TQ1JJUFQpCi0gICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKLQotICAgIGlmIChhdXRvIHVz
ZXJBZ2VudCA9IHVzZXJBZ2VudFNoYWRvd1Jvb3QoKSkgewotICAgICAgICBSZWZQdHI8Tm9kZT4g
bm9kZSA9IGNoaWxkcmVuT2ZUeXBlPE1lZGlhQ29udHJvbHM+KCpyb290KS5maXJzdCgpOwotICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8fCBub2RlLT5pc01l
ZGlhQ29udHJvbHMoKSk7Ci0gICAgICAgIHJldHVybiBub2RlOwotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLSNlbmRpZgotfQotCi1ib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlh
Q29udHJvbHMoKQotewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0gICAgZW5z
dXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQot
ICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
YXV0byBtZWRpYUNvbnRyb2xzID0gTWVkaWFDb250cm9sczo6Y3JlYXRlKGRvY3VtZW50KCkpOwot
ICAgIGlmICghbWVkaWFDb250cm9scykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbWVk
aWFDb250cm9scy0+c2V0TWVkaWFDb250cm9sbGVyKG1fbWVkaWFDb250cm9sbGVyID8gbV9tZWRp
YUNvbnRyb2xsZXIuZ2V0KCkgOiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2Uq
Pih0aGlzKSk7Ci0gICAgbWVkaWFDb250cm9scy0+cmVzZXQoKTsKLSAgICBpZiAoaXNGdWxsc2Ny
ZWVuKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMtPmVudGVyZWRGdWxsc2NyZWVuKCk7Ci0KLSAg
ICBlbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KCkuYXBwZW5kQ2hpbGQobWVkaWFDb250cm9scyk7
Ci0KLSAgICBpZiAoIWNvbnRyb2xzKCkgfHwgIWlzQ29ubmVjdGVkKCkpCi0gICAgICAgIG1lZGlh
Q29udHJvbHMtPmhpZGUoKTsKLQotICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi19Ci0KIGJvb2wg
SFRNTE1lZGlhRWxlbWVudDo6c2hvdWxkRm9yY2VDb250cm9sc0Rpc3BsYXkoKSBjb25zdAogewog
ICAgIC8vIEFsd2F5cyBjcmVhdGUgY29udHJvbHMgZm9yIGF1dG9wbGF5IHZpZGVvIHRoYXQgcmVx
dWlyZXMgdXNlciBnZXN0dXJlIGR1ZSB0byBiZWluZyBpbiBsb3cgcG93ZXIgbW9kZS4KQEAgLTY2
NTgsMjMgKzY0NzgsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVNZWRpYUNv
bnRyb2xzKCkKICAgICAgICAgcmVxdWlyZUNvbnRyb2xzID0gdHJ1ZTsKICNlbmRpZgogCi0jaWYg
RU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAoIXJlcXVpcmVDb250cm9scyB8
fCAhaXNDb25uZWN0ZWQoKSB8fCAhaW5BY3RpdmVEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBlbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpOwotI2Vsc2UKLSAgICBpZiAo
IXJlcXVpcmVDb250cm9scyB8fCAhaXNDb25uZWN0ZWQoKSB8fCAhaW5BY3RpdmVEb2N1bWVudCgp
KSB7Ci0gICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNv
bnRyb2xzKCktPmhpZGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaGFz
TWVkaWFDb250cm9scygpICYmICFjcmVhdGVNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1lZGlhQ29udHJvbHMoKS0+c2hvdygpOwotI2VuZGlmCiB9CiAKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCkBAIC02Njg0LDEzICs2NDkxLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKICAgICBpZiAoIWlzVmlkZW8oKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVk
aWFDb250cm9scygpLT50ZXh0VHJhY2tQcmVmZXJlbmNlc0NoYW5nZWQoKTsKLQotI2lmIEVOQUJM
RShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKG1fbWVkaWFDb250cm9sc0hvc3QpCiAg
ICAgICAgIG1fbWVkaWFDb250cm9sc0hvc3QtPnVwZGF0ZUNhcHRpb25EaXNwbGF5U2l6ZXMoTWVk
aWFDb250cm9sc0hvc3Q6OkZvcmNlVXBkYXRlOjpZZXMpOwotI2VuZGlmCiAKICAgICBpZiAobV9w
bGF5ZXIpCiAgICAgICAgIG1fcGxheWVyLT50cmFja3NDaGFuZ2VkKCk7CkBAIC02ODY4LDkgKzY2
NzAsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldENvbnRyb2xsZXIoUmVmUHRyPE1lZGlh
Q29udHJvbGxlcj4mJiBjb250cm9sbGVyKQogCiAgICAgaWYgKG1fbWVkaWFDb250cm9sbGVyKQog
ICAgICAgICBtX21lZGlhQ29udHJvbGxlci0+YWRkTWVkaWFFbGVtZW50KCp0aGlzKTsKLQotICAg
IGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+c2V0TWVk
aWFDb250cm9sbGVyKG1fbWVkaWFDb250cm9sbGVyID8gbV9tZWRpYUNvbnRyb2xsZXIuZ2V0KCkg
OiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqPih0aGlzKSk7CiB9CiAKIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0Q29udHJvbGxlckZvckJpbmRpbmdzKE1lZGlhQ29udHJv
bGxlciogY29udHJvbGxlcikKQEAgLTczMTAsNyArNzEwOSw2IEBAIFJlZlB0cjxWaWRlb1BsYXli
YWNrUXVhbGl0eT4gSFRNTE1lZGlhRWxlbWVudDo6Z2V0VmlkZW9QbGF5YmFja1F1YWxpdHkoKQog
ICAgIHJldHVybiBWaWRlb1BsYXliYWNrUXVhbGl0eTo6Y3JlYXRlKHRpbWVzdGFtcCwgbWV0cmlj
cy52YWx1ZSgpKTsKIH0KIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiBET01X
cmFwcGVyV29ybGQmIEhUTUxNZWRpYUVsZW1lbnQ6OmVuc3VyZUlzb2xhdGVkV29ybGQoKQogewog
ICAgIGlmICghbV9pc29sYXRlZFdvcmxkKQpAQCAtNzU2OSw3ICs3MzY3LDYgQEAgU3RyaW5nIEhU
TUxNZWRpYUVsZW1lbnQ6OmdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKCkKIAogICAgIHJl
dHVybiBzdGF0dXM7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkK
IAogdW5zaWduZWQgbG9uZyBsb25nIEhUTUxNZWRpYUVsZW1lbnQ6OmZpbGVTaXplKCkgY29uc3QK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggZmNkOGVkZmFiYzI4
NTg2MjQzOTIwMjI3OTM4M2EwODMyZGQ4ZDJjYi4uMWE3MjlmNDA5MWFjZGZjZjc2NWMwYmY1Njkx
NjYyNWMyNWEyM2ZkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAg
LTQ0Nyw4ICs0NDcsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBjbG9zZWRDYXB0aW9uc1Zpc2libGUo
KSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29s
KSBvdmVycmlkZTsKIAotICAgIE1lZGlhQ29udHJvbHMqIG1lZGlhQ29udHJvbHMoKSBjb25zdDsK
LQogICAgIHZvaWQgc291cmNlV2FzUmVtb3ZlZChIVE1MU291cmNlRWxlbWVudCYpOwogICAgIHZv
aWQgc291cmNlV2FzQWRkZWQoSFRNTFNvdXJjZUVsZW1lbnQmKTsKIApAQCAtNTA4LDEzICs1MDYs
MTAgQEAgcHVibGljOgogICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIHByZWxvYWRWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJlbG9hZDsgfQogICAgIE1lZGlhRWxlbWVudFNlc3Npb24mIG1lZGlh
U2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuICptX21lZGlhU2Vzc2lvbjsgfQogCi0jaWYgRU5BQkxF
KE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICB2b2lkIHBhZ2VTY2FsZUZhY3RvckNoYW5nZWQo
KTsKICAgICB2b2lkIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkKCk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIGdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKCk7Ci0K
ICAgICBNZWRpYUNvbnRyb2xzSG9zdCogbWVkaWFDb250cm9sc0hvc3QoKSB7IHJldHVybiBtX21l
ZGlhQ29udHJvbHNIb3N0LmdldCgpOyB9Ci0jZW5kaWYKIAogICAgIGJvb2wgaXNEaXNhYmxpbmdT
bGVlcCgpIGNvbnN0IHsgcmV0dXJuIG1fc2xlZXBEaXNhYmxlci5nZXQoKTsgfQogCkBAIC02MTMs
MTEgKzYwOCw5IEBAIHByb3RlY3RlZDoKIAogICAgIFNlY3VyaXR5T3JpZ2luRGF0YSBkb2N1bWVu
dFNlY3VyaXR5T3JpZ2luKCkgY29uc3QgZmluYWw7CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJP
TFNfU0NSSVBUKQogICAgIGJvb2wgbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3I7
IH0KICAgICB2b2lkIHNldE1lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3Rvcihib29s
KTsKICAgICB2b2lkIHVwZGF0ZU1lZGlhQ29udHJvbHNBZnRlclByZXNlbnRhdGlvbk1vZGVDaGFu
Z2UoKTsKLSNlbmRpZgogCiAgICAgdm9pZCBzY2hlZHVsZUV2ZW50KGNvbnN0IEF0b21TdHJpbmcm
KTsKIApAQCAtODUyLDggKzg0NSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2Fj
aGVkVGltZSgpIGNvbnN0OwogICAgIHZvaWQgcmVmcmVzaENhY2hlZFRpbWUoKSBjb25zdDsKIAot
ICAgIGJvb2wgaGFzTWVkaWFDb250cm9scygpIGNvbnN0OwotICAgIGJvb2wgY3JlYXRlTWVkaWFD
b250cm9scygpOwogICAgIHZvaWQgY29uZmlndXJlTWVkaWFDb250cm9scygpOwogCiAgICAgdm9p
ZCBwcmVwYXJlTWVkaWFGcmFnbWVudFVSSSgpOwpAQCAtODczLDExICs4NjQsOSBAQCBwcml2YXRl
OgogICAgIGVudW0gY2xhc3MgU2xlZXBUeXBlIHsgTm9uZSwgRGlzcGxheSwgU3lzdGVtIH07CiAg
ICAgU2xlZXBUeXBlIHNob3VsZERpc2FibGVTbGVlcCgpIGNvbnN0OwogCi0jaWYgRU5BQkxFKE1F
RElBX0NPTlRST0xTX1NDUklQVCkKICAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3Qo
U2hhZG93Um9vdCYpIG92ZXJyaWRlOwogICAgIERPTVdyYXBwZXJXb3JsZCYgZW5zdXJlSXNvbGF0
ZWRXb3JsZCgpOwogICAgIGJvb2wgZW5zdXJlTWVkaWFDb250cm9sc0luamVjdGVkU2NyaXB0KCk7
Ci0jZW5kaWYKIAogICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUgbWVkaWFUeXBl
KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1lZGlhVHlwZSBw
cmVzZW50YXRpb25UeXBlKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMTE1LDEwICsxMTA0LDggQEAg
cHJpdmF0ZToKICAgICBib29sIG1faGFzRXZlckhhZEF1ZGlvIDogMTsKICAgICBib29sIG1faGFz
RXZlckhhZFZpZGVvIDogMTsKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAg
ICAgYm9vbCBtX21lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvciA6IDE7CiAgICAg
Ym9vbCBtX2hhdmVTZXRVcENhcHRpb25Db250YWluZXIgOiAxOwotI2VuZGlmCiAKICAgICBib29s
IG1faXNTY3J1YmJpbmdSZW1vdGVseSA6IDE7CiAgICAgYm9vbCBtX3dhaXRpbmdUb0VudGVyRnVs
bHNjcmVlbiA6IDE7CkBAIC0xMTkyLDExICsxMTc5LDkgQEAgcHJpdmF0ZToKICAgICBjb25zdCB2
b2lkKiBtX2xvZ0lkZW50aWZpZXI7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9M
U19TQ1JJUFQpCiAgICAgZnJpZW5kIGNsYXNzIE1lZGlhQ29udHJvbHNIb3N0OwogICAgIFJlZlB0
cjxNZWRpYUNvbnRyb2xzSG9zdD4gbV9tZWRpYUNvbnRyb2xzSG9zdDsKICAgICBSZWZQdHI8RE9N
V3JhcHBlcldvcmxkPiBtX2lzb2xhdGVkV29ybGQ7Ci0jZW5kaWYKIAogI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBtX21lZGlhU3RyZWFtU3JjT2JqZWN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxl
bWVudFR5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVs
ZW1lbnRUeXBlcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhYjgyYTE4MDAx
MzIwNjk3YjAyY2FkOTYyZThlYjE4NjUyNGJhZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9sRWxlbWVudFR5cGVzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKQotI2luY2x1ZGUgIk1l
ZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oIgotCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNs
dWRlICJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyTWVkaWEuaCIKLSNpbmNsdWRlICJS
ZW5kZXJNZWRpYUNvbnRyb2xzLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCi0jaW5j
bHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1X
VEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sRGl2RWxlbWVudCk7Ci1XVEZf
TUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KTsKLVdURl9N
QUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQpOwot
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50
KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxl
bWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sVm9sdW1lU2xp
ZGVyRWxlbWVudCk7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLWNsYXNzIEV2ZW50
OwotCi1SZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gcGFyZW50TWVkaWFFbGVtZW50KGNvbnN0IE5v
ZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBSZWZQdHI8Tm9kZT4gbWVkaWFOb2RlID0gbm9kZS0+c2hhZG93SG9zdCgpOwotICAgIGlmICgh
bWVkaWFOb2RlKQotICAgICAgICBtZWRpYU5vZGUgPSBjb25zdF9jYXN0PE5vZGUqPihub2RlKTsK
LSAgICBpZiAoIWlzPEhUTUxNZWRpYUVsZW1lbnQ+KCptZWRpYU5vZGUpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE1lZGlhRWxlbWVudD4obWVkaWFO
b2RlLmdldCgpKTsKLX0KLQotTWVkaWFDb250cm9sRWxlbWVudFR5cGUgbWVkaWFDb250cm9sRWxl
bWVudFR5cGUoTm9kZSogbm9kZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihub2RlLT5pc01lZGlhQ29udHJvbEVsZW1lbnQoKSk7Ci0gICAgaWYgKGlzPEhUTUxJbnB1
dEVsZW1lbnQ+KCpub2RlKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhQ29udHJv
bElucHV0RWxlbWVudCo+KG5vZGUpLT5kaXNwbGF5VHlwZSgpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxNZWRpYUNvbnRyb2xEaXZFbGVtZW50Kj4obm9kZSktPmRpc3BsYXlUeXBlKCk7Ci19Ci0K
LU1lZGlhQ29udHJvbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbEVsZW1lbnQoTWVkaWFDb250cm9sRWxl
bWVudFR5cGUgZGlzcGxheVR5cGUsIEhUTUxFbGVtZW50KiBlbGVtZW50KQotICAgIDogbV9tZWRp
YUNvbnRyb2xsZXIoMCkKLSAgICAsIG1fZGlzcGxheVR5cGUoZGlzcGxheVR5cGUpCi0gICAgLCBt
X2VsZW1lbnQoZWxlbWVudCkKLXsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50OjpoaWRl
KCkKLXsKLSAgICBtX2VsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlE
aXNwbGF5LCBDU1NWYWx1ZU5vbmUpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnNo
b3coKQotewotICAgIG1fZWxlbWVudC0+cmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eURpc3BsYXkpOwotfQotCi1ib29sIE1lZGlhQ29udHJvbEVsZW1lbnQ6OmlzU2hvd2luZygp
IGNvbnN0Ci17Ci0gICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBwcm9wZXJ0eVNldCA9IG1fZWxl
bWVudC0+aW5saW5lU3R5bGUoKTsKLSAgICAvLyBGb2xsb3dpbmcgdGhlIGNvZGUgZnJvbSBzaG93
KCkgYW5kIGhpZGUoKSBhYm92ZSwgd2Ugb25seSBoYXZlCi0gICAgLy8gdG8gY2hlY2sgZm9yIHRo
ZSBwcmVzZW5zZSBvZiBpbmxpbmUgZGlzcGxheS4KLSAgICByZXR1cm4gKCFwcm9wZXJ0eVNldCB8
fCAhcHJvcGVydHlTZXQtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXNwbGF5KSk7
Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6c2V0RGlzcGxheVR5cGUoTWVkaWFDb250
cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUpCi17Ci0gICAgaWYgKGRpc3BsYXlUeXBlID09IG1f
ZGlzcGxheVR5cGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGlzcGxheVR5cGUgPSBkaXNw
bGF5VHlwZTsKLSAgICBpZiAoYXV0byBvYmplY3QgPSBtX2VsZW1lbnQtPnJlbmRlcmVyKCkpCi0g
ICAgICAgIG9iamVjdC0+cmVwYWludCgpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLU1lZGlhQ29udHJvbERpdkVsZW1lbnQ6Ok1lZGlhQ29udHJvbERpdkVsZW1lbnQo
RG9jdW1lbnQmIGRvY3VtZW50LCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSkK
LSAgICA6IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgZG9jdW1lbnQpCi0gICAgLCBNZWRpYUNvbnRy
b2xFbGVtZW50KGRpc3BsYXlUeXBlLCB0aGlzKQotewotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6TWVkaWFDb250cm9sSW5w
dXRFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlz
cGxheVR5cGUpCi0gICAgOiBIVE1MSW5wdXRFbGVtZW50KGlucHV0VGFnLCBkb2N1bWVudCwgMCwg
ZmFsc2UpCi0gICAgLCBNZWRpYUNvbnRyb2xFbGVtZW50KGRpc3BsYXlUeXBlLCB0aGlzKQotewot
fQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFRpbWVE
aXNwbGF5RWxlbWVudDo6TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50KERvY3VtZW50JiBk
b2N1bWVudCwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUpCi0gICAgOiBNZWRp
YUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBkaXNwbGF5VHlwZSkKLSAgICAsIG1fY3VycmVu
dFZhbHVlKDApCi17Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50Ojpz
ZXRDdXJyZW50VmFsdWUoZG91YmxlIHRpbWUpCi17Ci0gICAgbV9jdXJyZW50VmFsdWUgPSB0aW1l
OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbE11
dGVCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChEb2N1bWVudCYg
ZG9jdW1lbnQsIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKQotICAgIDogTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50KGRvY3VtZW50LCBkaXNwbGF5VHlwZSkKLXsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCYgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tF
dmVudCkgewotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0TXV0ZWQoIW1lZGlhQ29udHJv
bGxlcigpLT5tdXRlZCgpKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAg
ICB9Ci0KLSAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsK
LX0KLQotdm9pZCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6Y2hhbmdlZE11dGUoKQot
ewotICAgIHVwZGF0ZURpc3BsYXlUeXBlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sTXV0ZUJ1
dHRvbkVsZW1lbnQ6OnVwZGF0ZURpc3BsYXlUeXBlKCkKLXsKLSAgICBzZXREaXNwbGF5VHlwZSht
ZWRpYUNvbnRyb2xsZXIoKS0+bXV0ZWQoKSA/IE1lZGlhVW5NdXRlQnV0dG9uIDogTWVkaWFNdXRl
QnV0dG9uKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNv
bnRyb2xTZWVrQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQoRG9j
dW1lbnQmIGRvY3VtZW50LCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSkKLSAg
ICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1bWVudCwgZGlzcGxheVR5cGUpCi17Ci19
Ci0KLXZvaWQgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQmIGV2ZW50KQotewotICAgIC8vIFNldCB0aGUgbW91c2Vkb3duIGFuZCBtb3VzZXVw
IGV2ZW50cyBhcyBkZWZhdWx0SGFuZGxlZCBzbyB0aGV5Ci0gICAgLy8gZG8gbm90IHRyaWdnZXIg
ZHJhZyBzdGFydCBvciBlbmQgYWN0aW9ucyBpbiBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQuCi0g
ICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgfHwgZXZl
bnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpCi0gICAgICAgIGV2ZW50LnNl
dERlZmF1bHRIYW5kbGVkKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1l
bnQ6OnNldEFjdGl2ZShib29sIGZsYWcsIGJvb2wgcGF1c2UpCi17Ci0gICAgaWYgKGZsYWcgPT0g
YWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChmbGFnKQotICAgICAgICBtZWRp
YUNvbnRyb2xsZXIoKS0+YmVnaW5TY2FubmluZyhpc0ZvcndhcmRCdXR0b24oKSA/IE1lZGlhQ29u
dHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCA6IE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6QmFj
a3dhcmQpOwotICAgIGVsc2UKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPmVuZFNjYW5uaW5n
KCk7Ci0KLSAgICBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnNldEFjdGl2ZShmbGFnLCBwYXVz
ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyRWxlbWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1
bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQs
IE1lZGlhVm9sdW1lU2xpZGVyKQotICAgICwgbV9jbGVhck11dGVkT25Vc2VySW50ZXJhY3Rpb24o
ZmFsc2UpCi17Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgLy8gTGVmdCBidXR0b24gaXMg
MC4gUmVqZWN0cyBtb3VzZSBldmVudHMgbm90IGZyb20gbGVmdCBidXR0b24uCi0gICAgaWYgKGlz
PE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkuYnV0dG9u
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKLQotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3Zl
ckV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCBl
dmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBkb3VibGUgdm9sdW1lID0gdmFsdWUoKS50b0RvdWJsZSgpOwotICAgIGlmICh2
b2x1bWUgIT0gbWVkaWFDb250cm9sbGVyKCktPnZvbHVtZSgpKQotICAgICAgICBtZWRpYUNvbnRy
b2xsZXIoKS0+c2V0Vm9sdW1lKHZvbHVtZSk7Ci0gICAgaWYgKG1fY2xlYXJNdXRlZE9uVXNlcklu
dGVyYWN0aW9uKQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0TXV0ZWQoZmFsc2UpOwot
ICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7Ci19Ci0KLWJvb2wgTWVkaWFDb250cm9sVm9s
dW1lU2xpZGVyRWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50cygpCi17Ci0gICAg
aWYgKCFyZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCk7Ci19
Ci0KLWJvb2wgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6d2lsbFJlc3BvbmRUb01v
dXNlQ2xpY2tFdmVudHMoKQotewotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6d2lsbFJlc3Bv
bmRUb01vdXNlQ2xpY2tFdmVudHMoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlk
ZXJFbGVtZW50OjpzZXRWb2x1bWUoZG91YmxlIHZvbHVtZSkKLXsKLSAgICBpZiAodmFsdWUoKS50
b0RvdWJsZSgpICE9IHZvbHVtZSkKLSAgICAgICAgc2V0VmFsdWUoU3RyaW5nOjpudW1iZXIodm9s
dW1lKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6c2V0Q2xl
YXJNdXRlZE9uVXNlckludGVyYWN0aW9uKGJvb2wgY2xlYXJNdXRlKQotewotICAgIG1fY2xlYXJN
dXRlZE9uVXNlckludGVyYWN0aW9uID0gY2xlYXJNdXRlOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5MzFmYzBlMzk1ODNjYTI3ZDgxYjc1NzdjZWQ4Mzk2OTE0OTExN2Vh
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oCisrKyAvZGV2L251
bGwKQEAgLTEsMjAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIw
MTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShW
SURFTykKLQotI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJNZWRp
YUNvbnRyb2xsZXJJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIHsKLSAgICBN
ZWRpYUVudGVyRnVsbHNjcmVlbkJ1dHRvbiA9IDAsCi0gICAgTWVkaWFNdXRlQnV0dG9uLAotICAg
IE1lZGlhUGxheUJ1dHRvbiwKLSAgICBNZWRpYVNlZWtCYWNrQnV0dG9uLAotICAgIE1lZGlhU2Vl
a0ZvcndhcmRCdXR0b24sCi0gICAgTWVkaWFTbGlkZXIsCi0gICAgTWVkaWFTbGlkZXJUaHVtYiwK
LSAgICBNZWRpYVJld2luZEJ1dHRvbiwKLSAgICBNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24s
Ci0gICAgTWVkaWFTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b24sCi0gICAgTWVkaWFIaWRlQ2xvc2Vk
Q2FwdGlvbnNCdXR0b24sCi0gICAgTWVkaWFVbk11dGVCdXR0b24sCi0gICAgTWVkaWFQYXVzZUJ1
dHRvbiwKLSAgICBNZWRpYVRpbWVsaW5lQ29udGFpbmVyLAotICAgIE1lZGlhQ3VycmVudFRpbWVE
aXNwbGF5LAotICAgIE1lZGlhVGltZVJlbWFpbmluZ0Rpc3BsYXksCi0gICAgTWVkaWFTdGF0dXNE
aXNwbGF5LAotICAgIE1lZGlhQ29udHJvbHNQYW5lbCwKLSAgICBNZWRpYVZvbHVtZVNsaWRlckNv
bnRhaW5lciwKLSAgICBNZWRpYVZvbHVtZVNsaWRlciwKLSAgICBNZWRpYVZvbHVtZVNsaWRlclRo
dW1iLAotICAgIE1lZGlhRnVsbFNjcmVlblZvbHVtZVNsaWRlciwKLSAgICBNZWRpYUZ1bGxTY3Jl
ZW5Wb2x1bWVTbGlkZXJUaHVtYiwKLSAgICBNZWRpYVZvbHVtZVNsaWRlck11dGVCdXR0b24sCi0g
ICAgTWVkaWFUZXh0VHJhY2tEaXNwbGF5Q29udGFpbmVyLAotICAgIE1lZGlhVGV4dFRyYWNrRGlz
cGxheSwKLSAgICBNZWRpYUV4aXRGdWxsc2NyZWVuQnV0dG9uLAotICAgIE1lZGlhT3ZlcmxheVBs
YXlCdXR0b24sCi0gICAgTWVkaWFDbG9zZWRDYXB0aW9uc0NvbnRhaW5lciwKLSAgICBNZWRpYUNs
b3NlZENhcHRpb25zVHJhY2tMaXN0LAotfTsKLQotUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IHBh
cmVudE1lZGlhRWxlbWVudChjb25zdCBOb2RlKik7Ci1pbmxpbmUgUmVmUHRyPEhUTUxNZWRpYUVs
ZW1lbnQ+IHBhcmVudE1lZGlhRWxlbWVudChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSB7
IHJldHVybiBwYXJlbnRNZWRpYUVsZW1lbnQocmVuZGVyZXIubm9kZSgpKTsgfQotCi1NZWRpYUNv
bnRyb2xFbGVtZW50VHlwZSBtZWRpYUNvbnRyb2xFbGVtZW50VHlwZShOb2RlKik7Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sRWxlbWVudCB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hv
dygpOwotICAgIHZpcnR1YWwgYm9vbCBpc1Nob3dpbmcoKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
TWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSB7IHJldHVybiBtX2Rpc3BsYXlU
eXBlOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWVkaWFDb250cm9sbGVyKE1lZGlhQ29udHJv
bGxlckludGVyZmFjZSogY29udHJvbGxlcikgeyBtX21lZGlhQ29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7IH0KLSAgICB2aXJ0dWFsIE1lZGlhQ29udHJvbGxlckludGVyZmFjZSogbWVkaWFDb250cm9s
bGVyKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYUNvbnRyb2xsZXI7IH0KLQotcHJvdGVjdGVkOgot
ICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbEVsZW1lbnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUs
IEhUTUxFbGVtZW50Kik7Ci0gICAgfk1lZGlhQ29udHJvbEVsZW1lbnQoKSA9IGRlZmF1bHQ7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0RGlzcGxheVR5cGUoTWVkaWFDb250cm9sRWxlbWVudFR5cGUp
OwotICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9Ci0KLXByaXZhdGU6Ci0gICAgTWVkaWFDb250cm9sbGVySW50ZXJmYWNlKiBtX21l
ZGlhQ29udHJvbGxlcjsKLSAgICBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBtX2Rpc3BsYXlUeXBl
OwotICAgIEhUTUxFbGVtZW50KiBtX2VsZW1lbnQ7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgOiBwdWJsaWMgSFRN
TERpdkVsZW1lbnQsIHB1YmxpYyBNZWRpYUNvbnRyb2xFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbERpdkVsZW1lbnQpOwotcHJvdGVjdGVkOgotICAgIGV4
cGxpY2l0IE1lZGlhQ29udHJvbERpdkVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVt
ZW50VHlwZSk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBNZWRpYUNvbnRyb2xFbGVtZW50Ojppc01lZGlhQ29udHJvbEVs
ZW1lbnQoKTsgfQotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFz
cyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgOiBwdWJsaWMgSFRNTElucHV0RWxlbWVudCwgcHVi
bGljIE1lZGlhQ29udHJvbEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50KTsKLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSk7Ci0K
LXByaXZhdGU6Ci0gICAgYm9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBNZWRpYUNvbnRyb2xFbGVtZW50Ojppc01lZGlhQ29udHJvbEVsZW1lbnQoKTsgfQot
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVEaXNwbGF5VHlwZSgpIHsgfQotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVs
ZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQpOwotcHVibGljOgotICAg
IHZvaWQgc2V0Q3VycmVudFZhbHVlKGRvdWJsZSk7Ci0gICAgZG91YmxlIGN1cnJlbnRWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFZhbHVlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBleHBs
aWNpdCBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRy
b2xFbGVtZW50VHlwZSk7Ci0KLXByaXZhdGU6Ci0gICAgZG91YmxlIG1fY3VycmVudFZhbHVlOwot
fTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRy
b2xNdXRlQnV0dG9uRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgewot
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQp
OwotcHVibGljOgotICAgIHZvaWQgY2hhbmdlZE11dGUoKTsKLQotICAgIGJvb2wgd2lsbFJlc3Bv
bmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLXByb3Rl
Y3RlZDoKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChEb2N1bWVu
dCYsIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlKTsKLQotICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCYpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHZvaWQgdXBkYXRlRGlzcGxh
eVR5cGUoKSBvdmVycmlkZTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotY2xhc3MgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250
cm9sSW5wdXRFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJv
bFNlZWtCdXR0b25FbGVtZW50KTsKLXB1YmxpYzoKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3Vz
ZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0g
ICAgZXhwbGljaXQgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQoRG9jdW1lbnQmLCBNZWRp
YUNvbnRyb2xFbGVtZW50VHlwZSk7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb3J3YXJkQnV0dG9uKCkgY29uc3Qg
PSAwOwotCi1wcml2YXRlOgotICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wgLypmbGFnKi8gPSB0cnVl
LCBib29sIC8qcGF1c2UqLyA9IGZhbHNlKSBmaW5hbDsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudCA6
IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgYm9v
bCB3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCB3aWxs
UmVzcG9uZFRvTW91c2VDbGlja0V2ZW50cygpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Vm9sdW1l
KGRvdWJsZSk7Ci0gICAgdm9pZCBzZXRDbGVhck11dGVkT25Vc2VySW50ZXJhY3Rpb24oYm9vbCk7
Ci0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVt
ZW50KERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBv
dmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBib29sIG1fY2xlYXJNdXRlZE9uVXNlckludGVyYWN0
aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJ
REVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
RWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxl
bWVudHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmI0YjRjYjY0YWViZTIx
NGI5MjgxNWEwNmQ3ZGFiOTM4ODA1MDY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVs
ZW1lbnRzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1MDIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgotCi0jaWYg
RU5BQkxFKFZJREVPKQotCi0jaW5jbHVkZSAiRE9NVG9rZW5MaXN0LmgiCi0jaW5jbHVkZSAiRWxl
bWVudENoaWxkSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKLSNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGdWxsc2NyZWVu
TWFuYWdlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxI
ZWFkaW5nRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxMSUVsZW1lbnQuaCIKLSNpbmNsdWRlICJI
VE1MVUxpc3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzLmgiCi0jaW5jbHVkZSAiTW91
c2VFdmVudC5oIgotI2luY2x1ZGUgIlBPREludGVydmFsLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgot
I2luY2x1ZGUgIlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyTWVkaWFDb250cm9scy5oIgotI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgotI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKLSNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaGFkb3dS
b290LmgiCi0jaW5jbHVkZSAiVGV4dFRyYWNrQ3VlR2VuZXJpYy5oIgotI2luY2x1ZGUgIlRleHRU
cmFja0xpc3QuaCIKLSNpbmNsdWRlICJWVFRSZWdpb25MaXN0LmgiCi0jaW5jbHVkZSA8d3RmL0lz
b01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvTGFuZ3VhZ2UuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sUGFu
ZWxFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xQYW5l
bEVuY2xvc3VyZUVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29u
dHJvbE92ZXJsYXlFbmNsb3N1cmVFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1Q
TChNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQpOwot
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVt
ZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xQYW5lbE11dGVC
dXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKE1lZGlhQ29udHJvbE92ZXJsYXlQbGF5QnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50KTsK
LVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVs
ZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFJld2luZEJ1
dHRvbkVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFJl
dHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1Q
TChNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQpOwotV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVy
RWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sQ2xvc2Vk
Q2FwdGlvbnNUcmFja0xpc3RFbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChN
ZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQpOwotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBM
KE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExP
Q0FURURfSU1QTChNZWRpYUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQpOwotV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJF
bGVtZW50KTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xGdWxsc2Ny
ZWVuVm9sdW1lTWluQnV0dG9uRWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQpOwotV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVu
dCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9sQ3VycmVudFRpbWVE
aXNwbGF5RWxlbWVudCk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCk7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
Ci0KLXN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBnZXRNZWRpYUNvbnRyb2xDdXJyZW50VGltZURp
c3BsYXlFbGVtZW50U2hhZG93UHNldWRvSWQoKTsKLXN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBn
ZXRNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnRTaGFkb3dQc2V1ZG9JZCgp
OwotCi1NZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudChE
b2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50
LCBNZWRpYUNvbnRyb2xzUGFuZWwpCi0gICAgLCBtX2NhbkJlRHJhZ2dlZChmYWxzZSkKLSAgICAs
IG1faXNCZWluZ0RyYWdnZWQoZmFsc2UpCi0gICAgLCBtX2lzRGlzcGxheWVkKGZhbHNlKQotICAg
ICwgbV9vcGFxdWUodHJ1ZSkKLSAgICAsIG1fdHJhbnNpdGlvblRpbWVyKCp0aGlzLCAmTWVkaWFD
b250cm9sUGFuZWxFbGVtZW50Ojp0cmFuc2l0aW9uVGltZXJGaXJlZCkKLXsKLSAgICBzZXRQc2V1
ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xQYW5lbEVsZW1l
bnQ+IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQoZG9j
dW1lbnQpKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnN0YXJ0RHJhZyhj
b25zdCBMYXlvdXRQb2ludCYgZXZlbnRMb2NhdGlvbikKLXsKLSAgICBpZiAoIW1fY2FuQmVEcmFn
Z2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pc0JlaW5nRHJhZ2dlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAg
aWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzQm94KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXN0RHJhZ0V2ZW50TG9jYXRpb24gPSBl
dmVudExvY2F0aW9uOwotCi0gICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLnNldENhcHR1cmluZ01v
dXNlRXZlbnRzRWxlbWVudCh0aGlzKTsKLQotICAgIG1faXNCZWluZ0RyYWdnZWQgPSB0cnVlOwot
fQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6Y29udGludWVEcmFnKGNvbnN0IExh
eW91dFBvaW50JiBldmVudExvY2F0aW9uKQotewotICAgIGlmICghbV9pc0JlaW5nRHJhZ2dlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5b3V0U2l6ZSBkaXN0YW5jZURyYWdnZWQgPSBldmVu
dExvY2F0aW9uIC0gbV9sYXN0RHJhZ0V2ZW50TG9jYXRpb247Ci0gICAgbV9jdW11bGF0aXZlRHJh
Z09mZnNldC5tb3ZlKGRpc3RhbmNlRHJhZ2dlZCk7Ci0gICAgbV9sYXN0RHJhZ0V2ZW50TG9jYXRp
b24gPSBldmVudExvY2F0aW9uOwotICAgIHNldFBvc2l0aW9uKG1fY3VtdWxhdGl2ZURyYWdPZmZz
ZXQpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZW5kRHJhZygpCi17Ci0g
ICAgaWYgKCFtX2lzQmVpbmdEcmFnZ2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzQmVp
bmdEcmFnZ2VkID0gZmFsc2U7Ci0KLSAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZG9jdW1lbnQo
KS5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQobnVsbHB0cik7
Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzdGFydFRpbWVyKCkKLXsKLSAg
ICBzdG9wVGltZXIoKTsKLQotICAgIC8vIFRoZSB0aW1lciBpcyByZXF1aXJlZCB0byBzZXQgdGhl
IHByb3BlcnR5IGRpc3BsYXk6J25vbmUnIG9uIHRoZSBwYW5lbCwKLSAgICAvLyBzdWNoIHRoYXQg
Y2FwdGlvbnMgYXJlIGNvcnJlY3RseSBkaXNwbGF5ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdmlk
ZW8KLSAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBmYWRlb3V0IHRyYW5zaXRpb24uCi0gICAgU2Vj
b25kcyBkdXJhdGlvbiA9IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5tZWRpYUNvbnRyb2xzRmFk
ZU91dER1cmF0aW9uKCk7Ci0gICAgbV90cmFuc2l0aW9uVGltZXIuc3RhcnRPbmVTaG90KGR1cmF0
aW9uKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnN0b3BUaW1lcigpCi17
Ci0gICAgaWYgKG1fdHJhbnNpdGlvblRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdHJhbnNp
dGlvblRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnRy
YW5zaXRpb25UaW1lckZpcmVkKCkKLXsKLSAgICBpZiAoIW1fb3BhcXVlKQotICAgICAgICBoaWRl
KCk7Ci0KLSAgICBzdG9wVGltZXIoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1l
bnQ6OnNldFBvc2l0aW9uKGNvbnN0IExheW91dFBvaW50JiBwb3NpdGlvbikKLXsKLSAgICBkb3Vi
bGUgbGVmdCA9IHBvc2l0aW9uLngoKTsKLSAgICBkb3VibGUgdG9wID0gcG9zaXRpb24ueSgpOwot
Ci0gICAgLy8gU2V0IHRoZSBsZWZ0IGFuZCB0b3AgdG8gY29udHJvbCB0aGUgcGFuZWwncyBwb3Np
dGlvbjsgdGhpcyBkZXBlbmRzIG9uIGl0IGJlaW5nIGFic29sdXRlIHBvc2l0aW9uZWQuCi0gICAg
Ly8gU2V0IHRoZSBtYXJnaW4gdG8gemVybyBzaW5jZSB0aGUgcG9zaXRpb24gcGFzc2VkIGluIHdp
bGwgYWxyZWFkeSBpbmNsdWRlIHRoZSBlZmZlY3Qgb2YgdGhlIG1hcmdpbi4KLSAgICBzZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwgbGVmdCwgQ1NTVW5pdFR5cGU6OkNTU19Q
WCk7Ci0gICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgdG9wLCBDU1NV
bml0VHlwZTo6Q1NTX1BYKTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
TWFyZ2luTGVmdCwgMC4wLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICBzZXRJbmxpbmVTdHls
ZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCAwLjAsIENTU1VuaXRUeXBlOjpDU1NfUFgp
OwotCi0gICAgY2xhc3NMaXN0KCkuYWRkKCJkcmFnZ2VkIik7Ci19Ci0KLXZvaWQgTWVkaWFDb250
cm9sUGFuZWxFbGVtZW50OjpyZXNldFBvc2l0aW9uKCkKLXsKLSAgICByZW1vdmVJbmxpbmVTdHls
ZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCk7Ci0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVRvcCk7Ci0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eU1hcmdpbkxlZnQpOwotICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlNYXJnaW5Ub3ApOwotCi0gICAgY2xhc3NMaXN0KCkucmVtb3ZlKCJkcmFnZ2VkIik7Ci0KLSAg
ICBtX2N1bXVsYXRpdmVEcmFnT2Zmc2V0LnNldFgoMCk7Ci0gICAgbV9jdW11bGF0aXZlRHJhZ09m
ZnNldC5zZXRZKDApOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6bWFrZU9w
YXF1ZSgpCi17Ci0gICAgaWYgKG1fb3BhcXVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3Vi
bGUgZHVyYXRpb24gPSBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkubWVkaWFDb250cm9sc0ZhZGVJ
bkR1cmF0aW9uKCk7Ci0KLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJh
bnNpdGlvblByb3BlcnR5LCBDU1NQcm9wZXJ0eU9wYWNpdHkpOwotICAgIHNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2l0aW9uRHVyYXRpb24sIGR1cmF0aW9uLCBDU1NVbml0
VHlwZTo6Q1NTX1MpOwotICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlPcGFj
aXR5LCAxLjAsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKLQotICAgIG1fb3BhcXVlID0gdHJ1
ZTsKLQotICAgIGlmIChtX2lzRGlzcGxheWVkKQotICAgICAgICBzaG93KCk7Ci19Ci0KLXZvaWQg
TWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjptYWtlVHJhbnNwYXJlbnQoKQotewotICAgIGlmICgh
bV9vcGFxdWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNlY29uZHMgZHVyYXRpb24gPSBSZW5k
ZXJUaGVtZTo6c2luZ2xldG9uKCkubWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpOwotCi0g
ICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zaXRpb25Qcm9wZXJ0eSwg
Q1NTUHJvcGVydHlPcGFjaXR5KTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5VHJhbnNpdGlvbkR1cmF0aW9uLCBkdXJhdGlvbi52YWx1ZSgpLCBDU1NVbml0VHlwZTo6Q1NT
X1MpOwotICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlPcGFjaXR5LCAwLjAs
IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKLQotICAgIG1fb3BhcXVlID0gZmFsc2U7Ci0gICAg
c3RhcnRUaW1lcigpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgTWVkaWFDb250cm9sRGl2RWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAgICBpZiAoaXM8TW91c2VFdmVudD4o
ZXZlbnQpKSB7Ci0gICAgICAgIExheW91dFBvaW50IGxvY2F0aW9uID0gZG93bmNhc3Q8TW91c2VF
dmVudD4oZXZlbnQpLmFic29sdXRlTG9jYXRpb24oKTsKLSAgICAgICAgaWYgKGV2ZW50LnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQudGFyZ2V0KCkgPT0gdGhp
cykgewotICAgICAgICAgICAgc3RhcnREcmFnKGxvY2F0aW9uKTsKLSAgICAgICAgICAgIGV2ZW50
LnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSgpID09
IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCAmJiBtX2lzQmVpbmdEcmFnZ2VkKQotICAgICAg
ICAgICAgY29udGludWVEcmFnKGxvY2F0aW9uKTsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgbV9pc0JlaW5nRHJhZ2dlZCkgewot
ICAgICAgICAgICAgY29udGludWVEcmFnKGxvY2F0aW9uKTsKLSAgICAgICAgICAgIGVuZERyYWco
KTsKLSAgICAgICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzZXRDYW5CZURyYWdnZWQo
Ym9vbCBjYW5CZURyYWdnZWQpCi17Ci0gICAgaWYgKG1fY2FuQmVEcmFnZ2VkID09IGNhbkJlRHJh
Z2dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jYW5CZURyYWdnZWQgPSBjYW5CZURyYWdn
ZWQ7Ci0KLSAgICBpZiAoIWNhbkJlRHJhZ2dlZCkKLSAgICAgICAgZW5kRHJhZygpOwotfQotCi12
b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6c2V0SXNEaXNwbGF5ZWQoYm9vbCBpc0Rpc3Bs
YXllZCkKLXsKLSAgICBtX2lzRGlzcGxheWVkID0gaXNEaXNwbGF5ZWQ7Ci19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVFbGVt
ZW50OjpNZWRpYUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50
KQotICAgIC8vIE1hcHBpbmcgb250byBzYW1lIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGFzIHBh
bmVsIGVsZW1lbnQsIHNpbmNlIGl0IGhhcyBzaW1pbGFyIHByb3BlcnRpZXMuCi0gICAgOiBNZWRp
YUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzUGFuZWwpCi17Ci0gICAg
c2V0UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtZW5jbG9zdXJlIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJv
bFBhbmVsRW5jbG9zdXJlRWxlbWVudD4gTWVkaWFDb250cm9sUGFuZWxFbmNsb3N1cmVFbGVtZW50
OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IE1lZGlhQ29udHJvbFBhbmVsRW5jbG9zdXJlRWxlbWVudChkb2N1bWVudCkpOwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbE92ZXJsYXlFbmNsb3N1
cmVFbGVtZW50OjpNZWRpYUNvbnRyb2xPdmVybGF5RW5jbG9zdXJlRWxlbWVudChEb2N1bWVudCYg
ZG9jdW1lbnQpCi0gICAgLy8gTWFwcGluZyBvbnRvIHNhbWUgTWVkaWFDb250cm9sRWxlbWVudFR5
cGUgYXMgcGFuZWwgZWxlbWVudCwgc2luY2UgaXQgaGFzIHNpbWlsYXIgcHJvcGVydGllcy4KLSAg
ICA6IE1lZGlhQ29udHJvbERpdkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhQ29udHJvbHNQYW5lbCkK
LXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1vdmVy
bGF5LWVuY2xvc3VyZSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0K
LVJlZjxNZWRpYUNvbnRyb2xPdmVybGF5RW5jbG9zdXJlRWxlbWVudD4gTWVkaWFDb250cm9sT3Zl
cmxheUVuY2xvc3VyZUVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sT3ZlcmxheUVuY2xvc3VyZUVsZW1lbnQo
ZG9jdW1lbnQpKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRp
YUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRpbWVsaW5lQ29u
dGFpbmVyRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZF
bGVtZW50KGRvY3VtZW50LCBNZWRpYVRpbWVsaW5lQ29udGFpbmVyKQotewotICAgIHNldFBzZXVk
byhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLWNvbnRhaW5lciIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRy
b2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVy
RWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250
cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRp
YUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBlbGVtZW50
LT5oaWRlKCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGlt
ZWxpbmVDb250YWluZXJFbGVtZW50OjpzZXRUaW1lRGlzcGxheXNIaWRkZW4oYm9vbCBoaWRkZW4p
Ci17Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4oKnRo
aXMpKSB7Ci0gICAgICAgIGlmIChlbGVtZW50LnNoYWRvd1BzZXVkb0lkKCkgIT0gZ2V0TWVkaWFD
b250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50U2hhZG93UHNldWRvSWQoKQotICAgICAg
ICAgICAgJiYgZWxlbWVudC5zaGFkb3dQc2V1ZG9JZCgpICE9IGdldE1lZGlhQ29udHJvbEN1cnJl
bnRUaW1lRGlzcGxheUVsZW1lbnRTaGFkb3dQc2V1ZG9JZCgpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgTWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50JiB0aW1lRGlzcGxh
eSA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudCY+KGVsZW1lbnQp
OwotICAgICAgICBpZiAoaGlkZGVuKQotICAgICAgICAgICAgdGltZURpc3BsYXkuaGlkZSgpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aW1lRGlzcGxheS5zaG93KCk7Ci0gICAgfQotfQot
Ci1SZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJF
bGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsZSwgY29uc3Qg
UmVuZGVyVHJlZVBvc2l0aW9uJikKLXsKLSAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVy
TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXI+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sVm9sdW1l
U2xpZGVyQ29udGFpbmVyRWxlbWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVy
RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50
KGRvY3VtZW50LCBNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcikKLXsKLSAgICBzZXRQc2V1ZG8o
QXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5l
ciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNv
bnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlk
ZXJDb250YWluZXJFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJl
ZjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBlbGVtZW50ID0gYWRv
cHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KGRvY3Vt
ZW50KSk7Ci0gICAgZWxlbWVudC0+aGlkZSgpOwotICAgIHJldHVybiBlbGVtZW50OwotfQotCi1S
ZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVy
RWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0
IFJlbmRlclRyZWVQb3NpdGlvbiYpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRl
ck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwotfQot
Ci12b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewotICAgIC8vIFBvb3IgbWFuJ3MgbW91c2VsZWF2
ZSBldmVudCBkZXRlY3Rpb24uCi0KLSAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSB8fCBl
dmVudC50eXBlKCkgIT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghaXM8Tm9kZT4oZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQpLnJlbGF0
ZWRUYXJnZXQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChjb250YWluc0luY2x1ZGlu
Z1NoYWRvd0RPTSgmZG93bmNhc3Q8Tm9kZT4oKmRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KS5y
ZWxhdGVkVGFyZ2V0KCkpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaGlkZSgpOwotfQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFN0YXR1c0Rpc3Bs
YXlFbGVtZW50OjpNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudChEb2N1bWVudCYgZG9j
dW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYVN0YXR1
c0Rpc3BsYXkpCi0gICAgLCBtX3N0YXRlQmVpbmdEaXNwbGF5ZWQoTm90aGluZykKLXsKLSAgICBz
ZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1zdGF0dXMtZGlzcGxh
eSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNv
bnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudD4gTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1l
bnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbFN0
YXR1c0Rpc3BsYXlFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xT
dGF0dXNEaXNwbGF5RWxlbWVudChkb2N1bWVudCkpOwotICAgIGVsZW1lbnQtPmhpZGUoKTsKLSAg
ICByZXR1cm4gZWxlbWVudDsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxl
bWVudDo6dXBkYXRlKCkKLXsKLSAgICAvLyBHZXQgdGhlIG5ldyBzdGF0ZSB0aGF0IHdlJ2xsIGhh
dmUgdG8gZGlzcGxheS4KLSAgICBTdGF0ZUJlaW5nRGlzcGxheWVkIG5ld1N0YXRlVG9EaXNwbGF5
ID0gTm90aGluZzsKLQotICAgIGlmIChtZWRpYUNvbnRyb2xsZXIoKS0+cmVhZHlTdGF0ZSgpIDw9
IE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6SEFWRV9NRVRBREFUQSAmJiBtZWRpYUNvbnRyb2xs
ZXIoKS0+aGFzQ3VycmVudFNyYygpKQotICAgICAgICBuZXdTdGF0ZVRvRGlzcGxheSA9IExvYWRp
bmc7Ci0gICAgZWxzZSBpZiAobWVkaWFDb250cm9sbGVyKCktPmlzTGl2ZVN0cmVhbSgpKQotICAg
ICAgICBuZXdTdGF0ZVRvRGlzcGxheSA9IExpdmVCcm9hZGNhc3Q7Ci0KLSAgICBpZiAobmV3U3Rh
dGVUb0Rpc3BsYXkgPT0gbV9zdGF0ZUJlaW5nRGlzcGxheWVkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9zdGF0ZUJlaW5nRGlzcGxheWVkID09IE5vdGhpbmcpCi0gICAgICAgIHNob3co
KTsKLSAgICBlbHNlIGlmIChuZXdTdGF0ZVRvRGlzcGxheSA9PSBOb3RoaW5nKQotICAgICAgICBo
aWRlKCk7Ci0KLSAgICBtX3N0YXRlQmVpbmdEaXNwbGF5ZWQgPSBuZXdTdGF0ZVRvRGlzcGxheTsK
LQotICAgIHN3aXRjaCAobV9zdGF0ZUJlaW5nRGlzcGxheWVkKSB7Ci0gICAgY2FzZSBOb3RoaW5n
OgotICAgICAgICBzZXRJbm5lclRleHQoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgTG9hZGluZzoKLSAgICAgICAgc2V0SW5uZXJUZXh0KG1lZGlhRWxlbWVudExvYWRp
bmdTdGF0ZVRleHQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGl2ZUJyb2FkY2FzdDoK
LSAgICAgICAgc2V0SW5uZXJUZXh0KG1lZGlhRWxlbWVudExpdmVCcm9hZGNhc3RTdGF0ZVRleHQo
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1NZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRy
b2xQYW5lbE11dGVCdXR0b25FbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9s
cyogY29udHJvbHMpCi0gICAgOiBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChkb2N1bWVu
dCwgTWVkaWFNdXRlQnV0dG9uKQotICAgICwgbV9jb250cm9scyhjb250cm9scykKLXsKLSAgICBz
ZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1tdXRlLWJ1dHRvbiIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRy
b2xQYW5lbE11dGVCdXR0b25FbGVtZW50PiBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzKiBjb250cm9scykK
LXsKLSAgICBBU1NFUlQoY29udHJvbHMpOwotCi0gICAgUmVmPE1lZGlhQ29udHJvbFBhbmVsTXV0
ZUJ1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sUGFuZWxN
dXRlQnV0dG9uRWxlbWVudChkb2N1bWVudCwgY29udHJvbHMpKTsKLSAgICBidXR0b24tPmVuc3Vy
ZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwot
ICAgIHJldHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9u
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKGV2
ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpCi0gICAgICAgIG1fY29u
dHJvbHMtPnNob3dWb2x1bWVTbGlkZXIoKTsKLQotICAgIE1lZGlhQ29udHJvbE11dGVCdXR0b25F
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxl
bWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQm
IGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQs
IE1lZGlhTXV0ZUJ1dHRvbikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1t
ZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLW11dGUtYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11
dGVCdXR0b25FbGVtZW50PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVu
dDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sVm9s
dW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0
b24tPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1
dHRvbiIpOwotICAgIHJldHVybiBidXR0b247Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFBs
YXlCdXR0b25FbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElu
cHV0RWxlbWVudChkb2N1bWVudCwgTWVkaWFQbGF5QnV0dG9uKQotewotICAgIHNldFBzZXVkbyhB
dG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFBsYXlCdXR0
b25FbGVtZW50PiBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50
JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ+IGJ1
dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQoZG9jdW1l
bnQpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0
b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIHJldHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2
ZW50KQotewotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQp
IHsKLSAgICAgICAgaWYgKG1lZGlhQ29udHJvbGxlcigpLT5jYW5QbGF5KCkpCi0gICAgICAgICAg
ICBtZWRpYUNvbnRyb2xsZXIoKS0+cGxheSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
ZWRpYUNvbnRyb2xsZXIoKS0+cGF1c2UoKTsKLSAgICAgICAgdXBkYXRlRGlzcGxheVR5cGUoKTsK
LSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250
cm9sUGxheUJ1dHRvbkVsZW1lbnQ6OnVwZGF0ZURpc3BsYXlUeXBlKCkKLXsKLSAgICBzZXREaXNw
bGF5VHlwZShtZWRpYUNvbnRyb2xsZXIoKS0+Y2FuUGxheSgpID8gTWVkaWFQbGF5QnV0dG9uIDog
TWVkaWFQYXVzZUJ1dHRvbik7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotTWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xPdmVy
bGF5UGxheUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250
cm9sSW5wdXRFbGVtZW50KGRvY3VtZW50LCBNZWRpYU92ZXJsYXlQbGF5QnV0dG9uKQotewotICAg
IHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLW92ZXJsYXktcGxh
eS1idXR0b24iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8
TWVkaWFDb250cm9sT3ZlcmxheVBsYXlCdXR0b25FbGVtZW50PiBNZWRpYUNvbnRyb2xPdmVybGF5
UGxheUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVm
PE1lZGlhQ29udHJvbE92ZXJsYXlQbGF5QnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYo
Km5ldyBNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAg
ICBidXR0b24tPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5
cGUoImJ1dHRvbiIpOwotICAgIHJldHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
T3ZlcmxheVBsYXlCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVu
dCkKLXsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYm
IG1lZGlhQ29udHJvbGxlcigpLT5jYW5QbGF5KCkpIHsKLSAgICAgICAgbWVkaWFDb250cm9sbGVy
KCktPnBsYXkoKTsKLSAgICAgICAgdXBkYXRlRGlzcGxheVR5cGUoKTsKLSAgICAgICAgZXZlbnQu
c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sT3ZlcmxheVBsYXlC
dXR0b25FbGVtZW50Ojp1cGRhdGVEaXNwbGF5VHlwZSgpCi17Ci0gICAgaWYgKG1lZGlhQ29udHJv
bGxlcigpLT5jYW5QbGF5KCkpIHsKLSAgICAgICAgc2hvdygpOwotICAgIH0gZWxzZQotICAgICAg
ICBoaWRlKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFD
b250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1
dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sU2Vla0J1
dHRvbkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhU2Vla0ZvcndhcmRCdXR0b24pCi17Ci0gICAgc2V0
UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtc2Vlay1mb3J3YXJkLWJ1
dHRvbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRp
YUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFNlZWtGb3J3YXJk
QnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVk
aWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJlZigqbmV3
IE1lZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1
dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgi
YnV0dG9uIik7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1NZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29u
dHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRp
YUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudChkb2N1bWVudCwgTWVkaWFTZWVrQmFja0J1dHRvbikK
LXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVr
LWJhY2stYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQot
UmVmPE1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sU2Vla0Jh
Y2tCdXR0b25FbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxN
ZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcg
TWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgYnV0dG9u
LT5lbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgYnV0dG9uLT5zZXRUeXBlKCJidXR0
b24iKTsKLSAgICByZXR1cm4gYnV0dG9uOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLU1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFJl
d2luZEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9s
SW5wdXRFbGVtZW50KGRvY3VtZW50LCBNZWRpYVJld2luZEJ1dHRvbikKLXsKLSAgICBzZXRQc2V1
ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1yZXdpbmQtYnV0dG9uIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbFJl
d2luZEJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0
ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbFJld2luZEJ1dHRv
bkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sUmV3aW5kQnV0dG9u
RWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9v
dCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgcmV0dXJuIGJ1dHRvbjsK
LX0KLQotdm9pZCBNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5jbGlja0V2ZW50KSB7Ci0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5zZXRDdXJyZW50
VGltZShzdGQ6Om1heDxkb3VibGU+KDAsIG1lZGlhQ29udHJvbGxlcigpLT5jdXJyZW50VGltZSgp
IC0gMzApKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0gICAg
SFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGlt
ZUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50
KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1
bWVudCwgTWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKQotewotICAgIHNldFBzZXVkbyhBdG9t
U3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXJldHVybi10by1yZWFsdGltZS1idXR0b24i
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250
cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFJldHVyblRvUmVh
bHRpbWVCdXR0b25FbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJl
ZjxNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRv
cHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudChkb2N1
bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1
dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgYnV0dG9uLT5oaWRlKCk7Ci0gICAgcmV0dXJu
IGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewotICAgICAgICBtZWRpYUNvbnRy
b2xsZXIoKS0+cmV0dXJuVG9SZWFsdGltZSgpOwotICAgICAgICBldmVudC5zZXREZWZhdWx0SGFu
ZGxlZCgpOwotICAgIH0KLSAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZWRpYUNv
bnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhQ29u
dHJvbHMqIGNvbnRyb2xzKQotICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KGRvY3VtZW50
LCBNZWRpYVNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbikKLSNpZiBQTEFURk9STShDT0NPQSkgfHwg
UExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShHVEspCi0gICAgLCBtX2NvbnRyb2xzKGNvbnRyb2xz
KQotI2VuZGlmCi17Ci0jaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oV0lOKSB8fCAh
UExBVEZPUk0oR1RLKQotICAgIFVOVVNFRF9QQVJBTShjb250cm9scyk7Ci0jZW5kaWYKLSAgICBz
ZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy10b2dnbGUtY2xvc2Vk
LWNhcHRpb25zLWJ1dHRvbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19
Ci0KLVJlZjxNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IE1l
ZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3Vt
ZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi17Ci0gICAgQVNTRVJUKGNv
bnRyb2xzKTsKLQotICAgIFJlZjxNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRv
bkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2Vk
Q2FwdGlvbnNCdXR0b25FbGVtZW50KGRvY3VtZW50LCBjb250cm9scykpOwotICAgIGJ1dHRvbi0+
ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9u
Iik7Ci0gICAgYnV0dG9uLT5oaWRlKCk7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OnVwZGF0ZURpc3Bs
YXlUeXBlKCkKLXsKLSAgICBib29sIGNhcHRpb25zVmlzaWJsZSA9IG1lZGlhQ29udHJvbGxlcigp
LT5jbG9zZWRDYXB0aW9uc1Zpc2libGUoKTsKLSAgICBzZXREaXNwbGF5VHlwZShjYXB0aW9uc1Zp
c2libGUgPyBNZWRpYUhpZGVDbG9zZWRDYXB0aW9uc0J1dHRvbiA6IE1lZGlhU2hvd0Nsb3NlZENh
cHRpb25zQnV0dG9uKTsKLSAgICBzZXRDaGVja2VkKGNhcHRpb25zVmlzaWJsZSk7Ci19Ci0KLXZv
aWQgTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBncmVh
dCB0aGF0IHRoZSBzaGFyZWQgY29kZSBpcyBkaWN0YXRpbmcgYmVoYXZpb3Igb2YgcGxhdGZvcm0t
c3BlY2lmaWMKLSAgICAgICAgLy8gVUkuIE5vdCBhbGwgcG9ydHMgbWF5IHdhbnQgdGhlIGNsb3Nl
ZCBjYXB0aW9ucyBidXR0b24gdG8gdG9nZ2xlIGEgbGlzdCBvZiB0cmFja3MsIHNvCi0gICAgICAg
IC8vIHdlIGhhdmUgdG8gdXNlICNpZi4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMTg3NwotI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVBMQVRG
T1JNKFdJTikgJiYgIVBMQVRGT1JNKEdUSykKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPnNl
dENsb3NlZENhcHRpb25zVmlzaWJsZSghbWVkaWFDb250cm9sbGVyKCktPmNsb3NlZENhcHRpb25z
VmlzaWJsZSgpKTsKLSAgICAgICAgc2V0Q2hlY2tlZChtZWRpYUNvbnRyb2xsZXIoKS0+Y2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlKCkpOwotICAgICAgICB1cGRhdGVEaXNwbGF5VHlwZSgpOwotI2Vsc2UK
LSAgICAgICAgbV9jb250cm9scy0+dG9nZ2xlQ2xvc2VkQ2FwdGlvblRyYWNrTGlzdCgpOwotI2Vu
ZGlmCi0gICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfQotCi0gICAgSFRN
TElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNDb250
YWluZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQo
RG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChkb2N1bWVu
dCwgTWVkaWFDbG9zZWRDYXB0aW9uc0NvbnRhaW5lcikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0
cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1jbG9zZWQtY2FwdGlvbnMtY29udGFpbmVyIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJv
bENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlv
bnNDb250YWluZXJFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJl
ZjxNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQ+IGVsZW1lbnQgPSBh
ZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudChk
b2N1bWVudCkpOwotICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oZGlyQXR0ciwgQXRvbVN0cmluZygiYXV0byIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7Ci0gICAgZWxlbWVudC0+aGlkZSgpOwotICAgIHJldHVybiBlbGVtZW50OwotfQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbENsb3NlZENh
cHRpb25zVHJhY2tMaXN0RWxlbWVudDo6TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xp
c3RFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi0g
ICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYUNsb3NlZENhcHRpb25z
VHJhY2tMaXN0KQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICAsIG1fY29udHJvbHMoY29u
dHJvbHMpCi0jZW5kaWYKLXsKLSNpZiAhRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIFVOVVNFRF9Q
QVJBTShjb250cm9scyk7Ci0jZW5kaWYKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtp
dC1tZWRpYS1jb250cm9scy1jbG9zZWQtY2FwdGlvbnMtdHJhY2stbGlzdCIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xDbG9zZWRDYXB0
aW9uc1RyYWNrTGlzdEVsZW1lbnQ+IE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0
RWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJv
bHMpCi17Ci0gICAgQVNTRVJUKGNvbnRyb2xzKTsKLSAgICBSZWY8TWVkaWFDb250cm9sQ2xvc2Vk
Q2FwdGlvbnNUcmFja0xpc3RFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNv
bnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQoZG9jdW1lbnQsIGNvbnRyb2xzKSk7
Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlv
bnNUcmFja0xpc3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKLXsK
LSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuY2xpY2tFdmVudCkgewotICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KGV2ZW50LnRhcmdl
dCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBXaGVuIHdlIGNyZWF0ZWQg
dGhlIGVsZW1lbnRzIGluIHRoZSB0cmFjayBsaXN0LCB3ZSBnYXZlIHRoZW0gYSBjdXN0b20KLSAg
ICAgICAgLy8gYXR0cmlidXRlIHJlcHJlc2VudGluZyB0aGUgaW5kZXggaW4gdGhlIEhUTUxNZWRp
YUVsZW1lbnQncyBsaXN0IG9mIHRyYWNrcy4KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50
IHRhcmdldCBoYXMgc3VjaCBhIGN1c3RvbSBlbGVtZW50IGFuZCwgaWYgc28sCi0gICAgICAgIC8v
IHRlbGwgdGhlIEhUTUxNZWRpYUVsZW1lbnQgdG8gZW5hYmxlIHRoYXQgdHJhY2suCi0KLSAgICAg
ICAgYXV0byB0ZXh0VHJhY2sgPSBtYWtlUmVmUHRyKG1fbWVudVRvVHJhY2tNYXAuZ2V0KCZkb3du
Y2FzdDxFbGVtZW50PigqZXZlbnQudGFyZ2V0KCkpKSk7Ci0gICAgICAgIG1fbWVudVRvVHJhY2tN
YXAuY2xlYXIoKTsKLSAgICAgICAgbV9jb250cm9scy0+dG9nZ2xlQ2xvc2VkQ2FwdGlvblRyYWNr
TGlzdCgpOwotICAgICAgICBpZiAoIXRleHRUcmFjaykKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKLSAg
ICAgICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
bWVkaWFFbGVtZW50LT5zZXRTZWxlY3RlZFRleHRUcmFjayh0ZXh0VHJhY2suZ2V0KCkpOwotCi0g
ICAgICAgIHVwZGF0ZURpc3BsYXkoKTsKLSAgICB9Ci0KLSAgICBNZWRpYUNvbnRyb2xEaXZFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KGV2ZW50KTsKLSNlbmRpZgotfQotCi12b2lkIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJh
Y2tMaXN0RWxlbWVudDo6dXBkYXRlRGlzcGxheSgpCi17Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5nPiBzZWxlY3RlZENsYXNzVmFs
dWUoInNlbGVjdGVkIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAg
aWYgKCFtZWRpYUNvbnRyb2xsZXIoKS0+aGFzQ2xvc2VkQ2FwdGlvbnMoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkNhcHRpb25EaXNwbGF5TW9kZSBkaXNwbGF5TW9kZSA9
IGRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLmNhcHRpb25E
aXNwbGF5TW9kZSgpOwotCi0gICAgYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1l
bnQodGhpcyk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCkgfHwgIW1lZGlhRWxlbWVudC0+dGV4dFRy
YWNrcygpLT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVidWlsZFRyYWNrTGlz
dE1lbnUoKTsKLQotICAgIFJlZlB0cjxFbGVtZW50PiBvZmZNZW51SXRlbTsKLSAgICBib29sIHRy
YWNrTWVudUl0ZW1TZWxlY3RlZCA9IGZhbHNlOwotCi0gICAgZm9yIChhdXRvJiB0cmFja0l0ZW0g
OiBtX21lbnVJdGVtcykgewotICAgICAgICBSZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2s7Ci0g
ICAgICAgIE1lbnVJdGVtVG9UcmFja01hcDo6aXRlcmF0b3IgaXRlciA9IG1fbWVudVRvVHJhY2tN
YXAuZmluZCh0cmFja0l0ZW0uZ2V0KCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX21lbnVUb1Ry
YWNrTWFwLmVuZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHRleHRUcmFjayA9
IGl0ZXItPnZhbHVlOwotICAgICAgICBpZiAoIXRleHRUcmFjaykKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGlmICh0ZXh0VHJhY2sgPT0gJlRleHRUcmFjazo6Y2FwdGlvbk1lbnVP
ZmZJdGVtKCkpIHsKLSAgICAgICAgICAgIG9mZk1lbnVJdGVtID0gdHJhY2tJdGVtOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGV4dFRyYWNrID09ICZU
ZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpKSB7Ci0gICAgICAgICAgICBpZiAo
ZGlzcGxheU1vZGUgPT0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6QXV0b21hdGljKQotICAgICAg
ICAgICAgICAgIHRyYWNrSXRlbS0+Y2xhc3NMaXN0KCkuYWRkKHNlbGVjdGVkQ2xhc3NWYWx1ZSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdHJhY2tJdGVtLT5jbGFzc0xpc3Qo
KS5yZW1vdmUoc2VsZWN0ZWRDbGFzc1ZhbHVlKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGRpc3BsYXlNb2RlICE9IENhcHRpb25Vc2VyUHJlZmVyZW5j
ZXM6OkF1dG9tYXRpYyAmJiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNo
b3dpbmcpIHsKLSAgICAgICAgICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7Ci0gICAg
ICAgICAgICB0cmFja0l0ZW0tPmNsYXNzTGlzdCgpLmFkZChzZWxlY3RlZENsYXNzVmFsdWUpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRyYWNrSXRlbS0+Y2xhc3NMaXN0KCkucmVtb3Zl
KHNlbGVjdGVkQ2xhc3NWYWx1ZSk7Ci0gICAgfQotCi0gICAgaWYgKG9mZk1lbnVJdGVtKSB7Ci0g
ICAgICAgIGlmIChkaXNwbGF5TW9kZSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpGb3JjZWRP
bmx5ICYmICF0cmFja01lbnVJdGVtU2VsZWN0ZWQpCi0gICAgICAgICAgICBvZmZNZW51SXRlbS0+
Y2xhc3NMaXN0KCkuYWRkKHNlbGVjdGVkQ2xhc3NWYWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG9mZk1lbnVJdGVtLT5jbGFzc0xpc3QoKS5yZW1vdmUoc2VsZWN0ZWRDbGFzc1ZhbHVl
KTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1Ry
YWNrTGlzdEVsZW1lbnQ6OnJlYnVpbGRUcmFja0xpc3RNZW51KCkKLXsKLSNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCi0gICAgLy8gUmVtb3ZlIGFueSBleGlzdGluZyBjb250ZW50LgotICAgIHJlbW92
ZUNoaWxkcmVuKCk7Ci0gICAgbV9tZW51SXRlbXMuY2xlYXIoKTsKLSAgICBtX21lbnVUb1RyYWNr
TWFwLmNsZWFyKCk7Ci0KLSAgICBpZiAoIW1lZGlhQ29udHJvbGxlcigpLT5oYXNDbG9zZWRDYXB0
aW9ucygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVu
dE1lZGlhRWxlbWVudCh0aGlzKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byogdHJhY2tMaXN0ID0gbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7
Ci0gICAgaWYgKCF0cmFja0xpc3QgfHwgIXRyYWNrTGlzdC0+bGVuZ3RoKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBkb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5j
YXB0aW9uUHJlZmVyZW5jZXMoKTsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IHRyYWNr
c0Zvck1lbnUgPSBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudSh0cmFj
a0xpc3QpOwotCi0gICAgYXV0byBjYXB0aW9uc0hlYWRlciA9IEhUTUxIZWFkaW5nRWxlbWVudDo6
Y3JlYXRlKGgzVGFnLCBkb2N1bWVudCgpKTsKLSAgICBjYXB0aW9uc0hlYWRlci0+YXBwZW5kQ2hp
bGQoZG9jdW1lbnQoKS5jcmVhdGVUZXh0Tm9kZSh0ZXh0VHJhY2tTdWJ0aXRsZXNUZXh0KCkpKTsK
LSAgICBhcHBlbmRDaGlsZChjYXB0aW9uc0hlYWRlcik7Ci0gICAgYXV0byBjYXB0aW9uc01lbnVM
aXN0ID0gSFRNTFVMaXN0RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotCi0gICAgZm9yIChh
dXRvJiB0ZXh0VHJhY2sgOiB0cmFja3NGb3JNZW51KSB7Ci0gICAgICAgIGF1dG8gbWVudUl0ZW0g
PSBIVE1MTElFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7Ci0gICAgICAgIG1lbnVJdGVtLT5h
cHBlbmRDaGlsZChkb2N1bWVudCgpLmNyZWF0ZVRleHROb2RlKGNhcHRpb25QcmVmZXJlbmNlcy5k
aXNwbGF5TmFtZUZvclRyYWNrKHRleHRUcmFjay5nZXQoKSkpKTsKLSAgICAgICAgY2FwdGlvbnNN
ZW51TGlzdC0+YXBwZW5kQ2hpbGQobWVudUl0ZW0pOwotICAgICAgICBtX21lbnVJdGVtcy5hcHBl
bmQobWVudUl0ZW0ucHRyKCkpOwotICAgICAgICBtX21lbnVUb1RyYWNrTWFwLmFkZChtZW51SXRl
bS5wdHIoKSwgdGV4dFRyYWNrKTsKLSAgICB9Ci0KLSAgICBhcHBlbmRDaGlsZChjYXB0aW9uc01l
bnVMaXN0KTsKLSNlbmRpZgotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LU1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50
KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCi0gICAgOiBNZWRp
YUNvbnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhU2xpZGVyKQotICAgICwgbV9jb250
cm9scyhjb250cm9scykKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRp
YS1jb250cm9scy10aW1lbGluZSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7
Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVs
aW5lRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29u
dHJvbHMpCi17Ci0gICAgQVNTRVJUKGNvbnRyb2xzKTsKLQotICAgIFJlZjxNZWRpYUNvbnRyb2xU
aW1lbGluZUVsZW1lbnQ+IHRpbWVsaW5lID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQoZG9jdW1lbnQsIGNvbnRyb2xzKSk7Ci0gICAgdGltZWxpbmUtPmVuc3VyZVVz
ZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICB0aW1lbGluZS0+c2V0VHlwZSgicmFuZ2UiKTsKLSAg
ICB0aW1lbGluZS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwcmVjaXNpb25B
dHRyLCBBdG9tU3RyaW5nKCJmbG9hdCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSk7Ci0gICAgcmV0dXJuIHRpbWVsaW5lOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5l
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgLy8gTGVm
dCBidXR0b24gaXMgMC4gUmVqZWN0cyBtb3VzZSBldmVudHMgbm90IGZyb20gbGVmdCBidXR0b24u
Ci0gICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50Pihl
dmVudCkuYnV0dG9uKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyZXIoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2Vkb3duRXZlbnQpCi0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5iZWdpblNjcnViYmlu
ZygpOwotCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50
KQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+ZW5kU2NydWJiaW5nKCk7Ci0KLSAgICBNZWRp
YUNvbnRyb2xJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAg
aWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgfHwgZXZlbnQu
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRvdWJs
ZSB0aW1lID0gdmFsdWUoKS50b0RvdWJsZSgpOwotICAgIGlmICgoZXZlbnQuaXNJbnB1dEV2ZW50
KCkgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5pbnB1dEV2ZW50KSAmJiB0aW1lICE9
IG1lZGlhQ29udHJvbGxlcigpLT5jdXJyZW50VGltZSgpKQotICAgICAgICBtZWRpYUNvbnRyb2xs
ZXIoKS0+c2V0Q3VycmVudFRpbWUodGltZSk7Ci0KLSAgICBSZW5kZXJTbGlkZXImIHNsaWRlciA9
IGRvd25jYXN0PFJlbmRlclNsaWRlcj4oKnJlbmRlcmVyKCkpOwotICAgIGlmIChzbGlkZXIuaW5E
cmFnTW9kZSgpKQotICAgICAgICBtX2NvbnRyb2xzLT51cGRhdGVDdXJyZW50VGltZURpc3BsYXko
KTsKLX0KLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotYm9vbCBNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQ6OndpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkKLXsKLSAgICBpZiAo
IXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotI2VuZGlmIC8vICFQTEFURk9STShJT1NfRkFNSUxZKQotCi12b2lkIE1lZGlhQ29udHJvbFRp
bWVsaW5lRWxlbWVudDo6c2V0UG9zaXRpb24oZG91YmxlIGN1cnJlbnRUaW1lKQotewotICAgIHNl
dFZhbHVlKFN0cmluZzo6bnVtYmVyKGN1cnJlbnRUaW1lKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250
cm9sVGltZWxpbmVFbGVtZW50OjpzZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24pCi17Ci0gICAg
c2V0QXR0cmlidXRlKG1heEF0dHIsIEF0b21TdHJpbmc6Om51bWJlcihkdXJhdGlvbikpOwotfQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbFBhbmVsVm9s
dW1lU2xpZGVyRWxlbWVudDo6TWVkaWFDb250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50KERv
Y3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQo
ZG9jdW1lbnQpCi17Ci0gICAgc2V0UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtdm9sdW1lLXNsaWRlciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7
Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xQYW5lbFZvbHVtZVNsaWRlckVsZW1lbnQ+IE1lZGlhQ29u
dHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkK
LXsKLSAgICBSZWY8TWVkaWFDb250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50PiBzbGlkZXIg
PSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudChkb2N1
bWVudCkpOwotICAgIHNsaWRlci0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIHNs
aWRlci0+c2V0VHlwZSgicmFuZ2UiKTsKLSAgICBzbGlkZXItPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24ocHJlY2lzaW9uQXR0ciwgQXRvbVN0cmluZygiZmxvYXQiLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHNsaWRlci0+c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRyLCBBdG9tU3RyaW5nKCIxIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICByZXR1cm4gc2xpZGVyOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVT
bGlkZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudChE
b2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50
KGRvY3VtZW50KQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNv
bnRyb2xzLWZ1bGxzY3JlZW4tdm9sdW1lLXNsaWRlciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSk7Ci19Ci0KLVJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVy
RWxlbWVudD4gTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZVNsaWRlckVsZW1lbnQ6OmNyZWF0
ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgUmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5W
b2x1bWVTbGlkZXJFbGVtZW50PiBzbGlkZXIgPSBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgc2xpZGVyLT5lbnN1
cmVVc2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgc2xpZGVyLT5zZXRUeXBlKCJyYW5nZSIpOwot
ICAgIHNsaWRlci0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwcmVjaXNpb25B
dHRyLCBBdG9tU3RyaW5nKCJmbG9hdCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSk7Ci0gICAgc2xpZGVyLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1heEF0
dHIsIEF0b21TdHJpbmcoIjEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwot
ICAgIHJldHVybiBzbGlkZXI7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1bGxz
Y3JlZW5CdXR0b25FbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJv
bElucHV0RWxlbWVudChkb2N1bWVudCwgTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b24pCi17Ci0g
ICAgc2V0UHNldWRvKEF0b21TdHJpbmcoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVl
bi1idXR0b24iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotfQotCi1SZWY8
TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbEZ1bGxzY3Jl
ZW5CdXR0b25FbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5l
dyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1
dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgi
YnV0dG9uIik7Ci0gICAgYnV0dG9uLT5oaWRlKCk7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQot
dm9pZCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuY2xpY2tFdmVudCkgewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICAgICAgLy8g
T25seSB1c2UgdGhlIG5ldyBmdWxsIHNjcmVlbiBBUEkgaWYgdGhlIGZ1bGxTY3JlZW5FbmFibGVk
IHNldHRpbmcgaGFzCi0gICAgICAgIC8vIGJlZW4gZXhwbGljaXRseSBlbmFibGVkLiBPdGhlcndp
c2UsIHVzZSB0aGUgb2xkIGZ1bGxzY3JlZW4gQVBJLiBUaGlzCi0gICAgICAgIC8vIGFsbG93cyBh
cHBzIHdoaWNoIGVtYmVkIGEgV2ViVmlldyB0byByZXRhaW4gdGhlIGV4aXN0aW5nIGZ1bGwgc2Ny
ZWVuCi0gICAgICAgIC8vIHZpZGVvIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgcmVxdWlyaW5nIHRo
ZW0gdG8gaW1wbGVtZW50IHRoZWlyIG93biBmdWxsCi0gICAgICAgIC8vIHNjcmVlbiBiZWhhdmlv
ci4KLSAgICAgICAgaWYgKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5mdWxsU2NyZWVuRW5hYmxlZCgp
KSB7Ci0gICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS5mdWxsc2NyZWVuTWFuYWdlcigpLmlzRnVs
bHNjcmVlbigpICYmIGRvY3VtZW50KCkuZnVsbHNjcmVlbk1hbmFnZXIoKS5jdXJyZW50RnVsbHNj
cmVlbkVsZW1lbnQoKSA9PSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcykpCi0gICAgICAgICAgICAg
ICAgZG9jdW1lbnQoKS5mdWxsc2NyZWVuTWFuYWdlcigpLmNhbmNlbEZ1bGxzY3JlZW4oKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLmZ1bGxzY3JlZW5NYW5h
Z2VyKCkucmVxdWVzdEZ1bGxzY3JlZW5Gb3JFbGVtZW50KHBhcmVudE1lZGlhRWxlbWVudCh0aGlz
KS5nZXQoKSwgRnVsbHNjcmVlbk1hbmFnZXI6OkV4ZW1wdElGcmFtZUFsbG93RnVsbHNjcmVlblJl
cXVpcmVtZW50KTsKLSAgICAgICAgfSBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIG1lZGlhQ29u
dHJvbGxlcigpLT5lbnRlckZ1bGxzY3JlZW4oKTsKLSAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhh
bmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6
OnNldElzRnVsbHNjcmVlbihib29sIGlzRnVsbHNjcmVlbikKLXsKLSAgICBzZXREaXNwbGF5VHlw
ZShpc0Z1bGxzY3JlZW4gPyBNZWRpYUV4aXRGdWxsc2NyZWVuQnV0dG9uIDogTWVkaWFFbnRlckZ1
bGxzY3JlZW5CdXR0b24pOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LU1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50OjpNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9uRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCi0g
ICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhVW5NdXRlQnV0dG9u
KQotewotICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1
bGxzY3JlZW4tdm9sdW1lLW1pbi1idXR0b24iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCkpOwotfQotCi1SZWY8TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1dHRvbkVs
ZW1lbnQ+IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50OjpjcmVh
dGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIFJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVu
Vm9sdW1lTWluQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1dHRv
bi0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0
dG9uIik7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xGdWxsc2Ny
ZWVuVm9sdW1lTWluQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZl
bnQpCi17Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkg
ewotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0Vm9sdW1lKDApOwotICAgICAgICBldmVu
dC5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0KLSAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1NZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudDo6TWVk
aWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50KQotOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhTXV0ZUJ1dHRv
bikKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scy1m
dWxsc2NyZWVuLXZvbHVtZS1tYXgtYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25F
bGVtZW50PiBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudDo6Y3Jl
YXRlKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBSZWY8TWVkaWFDb250cm9sRnVsbHNjcmVl
blZvbHVtZU1heEJ1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgTWVkaWFDb250
cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBidXR0
b24tPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBidXR0b24tPnNldFR5cGUoImJ1
dHRvbiIpOwotICAgIHJldHVybiBidXR0b247Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRnVsbHNj
cmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2
ZW50KQotewotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQp
IHsKLSAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPnNldFZvbHVtZSgxKTsKLSAgICAgICAgZXZl
bnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotTWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNv
bnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAg
IDogTWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50KGRvY3VtZW50LCBNZWRpYVRpbWVSZW1h
aW5pbmdEaXNwbGF5KQotewotICAgIHNldFBzZXVkbyhnZXRNZWRpYUNvbnRyb2xUaW1lUmVtYWlu
aW5nRGlzcGxheUVsZW1lbnRTaGFkb3dQc2V1ZG9JZCgpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJv
bFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudD4gTWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rp
c3BsYXlFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudChkb2N1
bWVudCkpOwotfQotCi1zdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZ2V0TWVkaWFDb250cm9sVGlt
ZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50U2hhZG93UHNldWRvSWQoKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5nPiBpZCgiLXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
LXJlbWFpbmluZy1kaXNwbGF5IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwot
ICAgIHJldHVybiBpZDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1N
ZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xDdXJyZW50
VGltZURpc3BsYXlFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJv
bFRpbWVEaXNwbGF5RWxlbWVudChkb2N1bWVudCwgTWVkaWFDdXJyZW50VGltZURpc3BsYXkpCi17
Ci0gICAgc2V0UHNldWRvKGdldE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnRT
aGFkb3dQc2V1ZG9JZCgpKTsKLX0KLQotUmVmPE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxh
eUVsZW1lbnQ+IE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShE
b2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFDb250
cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudChkb2N1bWVudCkpOwotfQotCi1zdGF0aWMgY29u
c3QgQXRvbVN0cmluZyYgZ2V0TWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudFNo
YWRvd1BzZXVkb0lkKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZz4g
aWQoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtY3VycmVudC10aW1lLWRpc3BsYXkiLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIGlkOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0KLU1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9s
RGl2RWxlbWVudChkb2N1bWVudCwgTWVkaWFUZXh0VHJhY2tEaXNwbGF5Q29udGFpbmVyKQotewot
ICAgIHNldFBzZXVkbyhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLXRleHQtdHJhY2stY29udGFp
bmVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLX0KLQotUmVmPE1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgYXV0byBl
bGVtZW50ID0gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50KGRvY3VtZW50KSk7Ci0gICAgZWxlbWVudC0+aGlkZSgpOwotICAgIHJldHVybiBlbGVtZW50
OwotfQotCi1SZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29u
dGFpbmVyRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUs
IGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVy
PFJlbmRlckJsb2NrRmxvdz4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKLX0KLQotc3RhdGljIGJv
b2wgY29tcGFyZUN1ZUludGVydmFsRm9yRGlzcGxheShjb25zdCBDdWVJbnRlcnZhbCYgb25lLCBj
b25zdCBDdWVJbnRlcnZhbCYgdHdvKQotewotICAgIHJldHVybiBvbmUuZGF0YSgpLT5pc1Bvc2l0
aW9uZWRBYm92ZSh0d28uZGF0YSgpKTsKLX07Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSgpCi17Ci0gICAgaWYgKCFtZWRpYUNvbnRy
b2xsZXIoKS0+Y2xvc2VkQ2FwdGlvbnNWaXNpYmxlKCkpCi0gICAgICAgIHJlbW92ZUNoaWxkcmVu
KCk7Ci0KLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsK
LSAgICAvLyAxLiBJZiB0aGUgbWVkaWEgZWxlbWVudCBpcyBhbiBhdWRpbyBlbGVtZW50LCBvciBp
cyBhbm90aGVyIHBsYXliYWNrCi0gICAgLy8gbWVjaGFuaXNtIHdpdGggbm8gcmVuZGVyaW5nIGFy
ZWEsIGFib3J0IHRoZXNlIHN0ZXBzLiBUaGVyZSBpcyBub3RoaW5nIHRvCi0gICAgLy8gcmVuZGVy
LgotICAgIGlmICghbWVkaWFFbGVtZW50IHx8ICFtZWRpYUVsZW1lbnQtPmlzVmlkZW8oKSB8fCBt
X3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gMi4gTGV0IHZpZGVvIGJlIHRoZSBtZWRpYSBlbGVtZW50IG9yIG90aGVyIHBsYXliYWNr
IG1lY2hhbmlzbS4KLSAgICBIVE1MVmlkZW9FbGVtZW50JiB2aWRlbyA9IGRvd25jYXN0PEhUTUxW
aWRlb0VsZW1lbnQ+KCptZWRpYUVsZW1lbnQpOwotCi0gICAgLy8gMy4gTGV0IG91dHB1dCBiZSBh
biBlbXB0eSBsaXN0IG9mIGFic29sdXRlbHkgcG9zaXRpb25lZCBDU1MgYmxvY2sgYm94ZXMuCi0K
LSAgICAvLyA0LiBJZiB0aGUgdXNlciBhZ2VudCBpcyBleHBvc2luZyBhIHVzZXIgaW50ZXJmYWNl
IGZvciB2aWRlbywgYWRkIHRvCi0gICAgLy8gb3V0cHV0IG9uZSBvciBtb3JlIGNvbXBsZXRlbHkg
dHJhbnNwYXJlbnQgcG9zaXRpb25lZCBDU1MgYmxvY2sgYm94ZXMgdGhhdAotICAgIC8vIGNvdmVy
IHRoZSBzYW1lIHJlZ2lvbiBhcyB0aGUgdXNlciBpbnRlcmZhY2UuCi0KLSAgICAvLyA1LiBJZiB0
aGUgbGFzdCB0aW1lIHRoZXNlIHJ1bGVzIHdlcmUgcnVuLCB0aGUgdXNlciBhZ2VudCB3YXMgbm90
IGV4cG9zaW5nCi0gICAgLy8gYSB1c2VyIGludGVyZmFjZSBmb3IgdmlkZW8sIGJ1dCBub3cgaXQg
aXMsIGxldCByZXNldCBiZSB0cnVlLiBPdGhlcndpc2UsCi0gICAgLy8gbGV0IHJlc2V0IGJlIGZh
bHNlLgotCi0gICAgLy8gVGhlcmUgaXMgbm90aGluZyB0byBiZSBkb25lIGV4cGxpY2l0bHkgZm9y
IDR0aCBhbmQgNXRoIHN0ZXBzLCBhcwotICAgIC8vIGV2ZXJ5dGhpbmcgaXMgaGFuZGxlZCB0aHJv
dWdoIENTUy4gVGhlIGNhcHRpb24gYm94IGlzIG9uIHRvcCBvZiB0aGUKLSAgICAvLyBjb250cm9s
cyBib3gsIGluIGEgY29udGFpbmVyIHNldCB3aXRoIHRoZSAtd2Via2l0LWJveCBkaXNwbGF5IHBy
b3BlcnR5LgotCi0gICAgLy8gNi4gTGV0IHRyYWNrcyBiZSB0aGUgc3Vic2V0IG9mIHZpZGVvJ3Mg
bGlzdCBvZiB0ZXh0IHRyYWNrcyB0aGF0IGhhdmUgYXMKLSAgICAvLyB0aGVpciBydWxlcyBmb3Ig
dXBkYXRpbmcgdGhlIHRleHQgdHJhY2sgcmVuZGVyaW5nIHRoZXNlIHJ1bGVzIGZvcgotICAgIC8v
IHVwZGF0aW5nIHRoZSBkaXNwbGF5IG9mIFdlYlZUVCB0ZXh0IHRyYWNrcywgYW5kIHdob3NlIHRl
eHQgdHJhY2sgbW9kZSBpcwotICAgIC8vIHNob3dpbmcgb3Igc2hvd2luZyBieSBkZWZhdWx0Lgot
ICAgIC8vIDcuIExldCBjdWVzIGJlIGFuIGVtcHR5IGxpc3Qgb2YgdGV4dCB0cmFjayBjdWVzLgot
ICAgIC8vIDguIEZvciBlYWNoIHRyYWNrIHRyYWNrIGluIHRyYWNrcywgYXBwZW5kIHRvIGN1ZXMg
YWxsIHRoZSBjdWVzIGZyb20KLSAgICAvLyB0cmFjaydzIGxpc3Qgb2YgY3VlcyB0aGF0IGhhdmUg
dGhlaXIgdGV4dCB0cmFjayBjdWUgYWN0aXZlIGZsYWcgc2V0LgotICAgIEN1ZUxpc3QgYWN0aXZl
Q3VlcyA9IHZpZGVvLmN1cnJlbnRseUFjdGl2ZUN1ZXMoKTsKLQotICAgIC8vIDkuIElmIHJlc2V0
IGlzIGZhbHNlLCB0aGVuLCBmb3IgZWFjaCB0ZXh0IHRyYWNrIGN1ZSBjdWUgaW4gY3VlczogaWYg
Y3VlJ3MKLSAgICAvLyB0ZXh0IHRyYWNrIGN1ZSBkaXNwbGF5IHN0YXRlIGhhcyBhIHNldCBvZiBD
U1MgYm94ZXMsIHRoZW4gYWRkIHRob3NlIGJveGVzCi0gICAgLy8gdG8gb3V0cHV0LCBhbmQgcmVt
b3ZlIGN1ZSBmcm9tIGN1ZXMuCi0KLSAgICAvLyBUaGVyZSBpcyBub3RoaW5nIGV4cGxpY2l0bHkg
dG8gYmUgZG9uZSBoZXJlLCBhcyBhbGwgdGhlIGNhY2hpbmcgb2NjdXJzCi0gICAgLy8gd2l0aGlu
IHRoZSBUZXh0VHJhY2tDdWUgaW5zdGFuY2UgaXRzZWxmLiBJZiBwYXJhbWV0ZXJzIG9mIHRoZSBj
dWUgY2hhbmdlLAotICAgIC8vIHRoZSBkaXNwbGF5IHRyZWUgaXMgY2xlYXJlZC4KLQotICAgIC8v
IElmIHRoZSBudW1iZXIgb2YgQ1NTIGJveGVzIGluIHRoZSBvdXRwdXQgaXMgbGVzcyB0aGFuIHRo
ZSBudW1iZXIgb2YgY3VlcwotICAgIC8vIHdlIHdpc2ggdG8gcmVuZGVyIChlLmcuLCB3ZSBhcmUg
YWRkaW5nIGFub3RoZXIgY3VlIGluIGEgc2V0IG9mIHJvbGwtdXAKLSAgICAvLyBjdWVzKSwgcmVt
b3ZlIGFsbCB0aGUgZXhpc3RpbmcgQ1NTIGJveGVzIHJlcHJlc2VudGluZyB0aGUgY3VlcyBhbmQg
cmUtYWRkCi0gICAgLy8gdGhlbSBzbyB0aGF0IHRoZSBuZXcgY3VlIGlzIGF0IHRoZSBib3R0b20u
Ci0gICAgLy8gRklYTUU6IENhbGxpbmcgY291bnRDaGlsZE5vZGVzKCkgaGVyZSBpcyBpbmVmZmlj
aWVudC4gV2UgZG9uJ3QgbmVlZCB0bwotICAgIC8vIHRyYXZlcnNlIGFsbCBjaGlsZHJlbiBqdXN0
IHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBsZXNzIGNoaWxkcmVuIHRoYW4gY3Vlcy4KLSAgICBpZiAo
Y291bnRDaGlsZE5vZGVzKCkgPCBhY3RpdmVDdWVzLnNpemUoKSkKLSAgICAgICAgcmVtb3ZlQ2hp
bGRyZW4oKTsKLQotICAgIGFjdGl2ZUN1ZXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10gKEN1ZUludGVy
dmFsJiBjdWVJbnRlcnZhbCkgewotICAgICAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBj
dWVJbnRlcnZhbC5kYXRhKCk7Ci0gICAgICAgIHJldHVybiAhY3VlLT50cmFjaygpCi0gICAgICAg
ICAgICB8fCAhY3VlLT50cmFjaygpLT5pc1JlbmRlcmVkKCkKLSAgICAgICAgICAgIHx8IGN1ZS0+
dHJhY2soKS0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6RGlzYWJsZWQKLSAgICAgICAgICAg
IHx8ICFjdWUtPmlzQWN0aXZlKCkKLSAgICAgICAgICAgIHx8ICFjdWUtPmlzUmVuZGVyYWJsZSgp
OwotICAgIH0pOwotCi0gICAgLy8gU29ydCB0aGUgYWN0aXZlIGN1ZXMgZm9yIHRoZSBhcHByb3By
aWF0ZSBkaXNwbGF5IG9yZGVyLiBGb3IgZXhhbXBsZSwgZm9yIHJvbGwtdXAKLSAgICAvLyBvciBw
YWludC1vbiBjYXB0aW9ucywgd2UgbmVlZCB0byBhZGQgdGhlIGN1ZXMgaW4gcmV2ZXJzZSBjaHJv
bm9sb2dpY2FsIG9yZGVyLAotICAgIC8vIHNvIHRoYXQgdGhlIG5ld2VzdCBjYXB0aW9ucyBhcHBl
YXIgYXQgdGhlIGJvdHRvbS4KLSAgICBzdGQ6OnNvcnQoYWN0aXZlQ3Vlcy5iZWdpbigpLCBhY3Rp
dmVDdWVzLmVuZCgpLCAmY29tcGFyZUN1ZUludGVydmFsRm9yRGlzcGxheSk7Ci0KLSAgICBpZiAo
bWVkaWFDb250cm9sbGVyKCktPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpKSB7Ci0gICAgICAgIC8v
IDEwLiBGb3IgZWFjaCB0ZXh0IHRyYWNrIGN1ZSBpbiBjdWVzIHRoYXQgaGFzIG5vdCB5ZXQgaGFk
Ci0gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgQ1NTIGJveGVzIGFkZGVkIHRvIG91dHB1dCwgaW4g
dGV4dCB0cmFjayBjdWUgb3JkZXIsIHJ1biB0aGUKLSAgICAgICAgLy8gZm9sbG93aW5nIHN1YnN0
ZXBzOgotICAgICAgICBmb3IgKGF1dG8mIGludGVydmFsIDogYWN0aXZlQ3VlcykgewotICAgICAg
ICAgICAgYXV0byBjdWUgPSBpbnRlcnZhbC5kYXRhKCk7Ci0gICAgICAgICAgICBjdWUtPnNldEZv
bnRTaXplKG1fZm9udFNpemUsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCksIG1fZm9udFNpemVJ
c0ltcG9ydGFudCk7Ci0gICAgICAgICAgICBpZiAoaXM8VlRUQ3VlPigqY3VlKSkKLSAgICAgICAg
ICAgICAgICBwcm9jZXNzQWN0aXZlVlRUQ3VlKGRvd25jYXN0PFZUVEN1ZT4oKmN1ZSkpOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXV0byBkaXNwbGF5Qm94ID0gY3VlLT5n
ZXREaXNwbGF5VHJlZShtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplKTsKLSAg
ICAgICAgICAgICAgICBpZiAoZGlzcGxheUJveC0+aGFzQ2hpbGROb2RlcygpICYmICFjb250YWlu
cyhkaXNwbGF5Qm94LmdldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ2hpbGQoKmRp
c3BsYXlCb3gpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gMTEu
IFJldHVybiBvdXRwdXQuCi0gICAgaWYgKGhhc0NoaWxkTm9kZXMoKSkKLSAgICAgICAgc2hvdygp
OwotICAgIGVsc2UKLSAgICAgICAgaGlkZSgpOwotCi0gICAgdXBkYXRlVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb25JZk5lZWRlZCgpOwotICAgIHVwZGF0ZVRleHRUcmFja1N0eWxlKCk7Ci0gICAgbV9u
ZWVkc0dlbmVyYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24gPSB0cnVlOwotfQotCi12b2lkIE1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJl
c2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX25lZWRzR2VuZXJhdGVUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZWVkc0dlbmVy
YXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24gPSBmYWxzZTsKLQotICAgIC8vIFdlIHNob3VsZCBj
YWxsIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpIHRvIHBhaW50IHRoZSBzdWJ0
cmVlIG9mCi0gICAgLy8gdGhlIFJlbmRlclRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQgYWZ0ZXIg
dGhlIGxheW91dCBpcyBjbGVhbi4KLSAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikK
LSAgICAgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi0+dXBkYXRlKCk7Ci19Ci0KLXZvaWQg
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6cHJvY2Vzc0FjdGl2ZVZUVEN1
ZShWVFRDdWUmIGN1ZSkKLXsKLSAgICBERUJVR19MT0coTE9HSURFTlRJRklFUiwgImFkZGluZyBh
bmQgcG9zaXRpb25pbmcgY3VlOiBcIiIsIGN1ZS50ZXh0KCksICJcIiwgc3RhcnQ9IiwgY3VlLnN0
YXJ0VGltZSgpLCAiLCBlbmQ9IiwgY3VlLmVuZFRpbWUoKSwgIiwgbGluZT0iLCBjdWUubGluZSgp
KTsKLSAgICBSZWY8VGV4dFRyYWNrQ3VlQm94PiBkaXNwbGF5Qm94ID0gKmN1ZS5nZXREaXNwbGF5
VHJlZShtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplKTsKLQotICAgIGlmIChh
dXRvIHJlZ2lvbiA9IGN1ZS50cmFjaygpLT5yZWdpb25zKCktPmdldFJlZ2lvbkJ5SWQoY3VlLnJl
Z2lvbklkKCkpKSB7Ci0gICAgICAgIC8vIExldCByZWdpb24gYmUgdGhlIFdlYlZUVCByZWdpb24g
d2hvc2UgcmVnaW9uIGlkZW50aWZpZXIKLSAgICAgICAgLy8gbWF0Y2hlcyB0aGUgdGV4dCB0cmFj
ayBjdWUgcmVnaW9uIGlkZW50aWZpZXIgb2YgY3VlLgotICAgICAgICBSZWY8SFRNTERpdkVsZW1l
bnQ+IHJlZ2lvbk5vZGUgPSByZWdpb24tPmdldERpc3BsYXlUcmVlKCk7Ci0KLSAgICAgICAgaWYg
KCFjb250YWlucyhyZWdpb25Ob2RlLnB0cigpKSkKLSAgICAgICAgICAgIGFwcGVuZENoaWxkKHJl
Z2lvbi0+Z2V0RGlzcGxheVRyZWUoKSk7Ci0KLSAgICAgICAgcmVnaW9uLT5hcHBlbmRUZXh0VHJh
Y2tDdWVCb3goV1RGTW92ZShkaXNwbGF5Qm94KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8g
SWYgY3VlIGhhcyBhbiBlbXB0eSB0ZXh0IHRyYWNrIGN1ZSByZWdpb24gaWRlbnRpZmllciBvciB0
aGVyZSBpcyBubwotICAgICAgICAvLyBXZWJWVFQgcmVnaW9uIHdob3NlIHJlZ2lvbiBpZGVudGlm
aWVyIGlzIGlkZW50aWNhbCB0byBjdWUncyB0ZXh0Ci0gICAgICAgIC8vIHRyYWNrIGN1ZSByZWdp
b24gaWRlbnRpZmllciwgcnVuIHRoZSBmb2xsb3dpbmcgc3Vic3RlcHM6Ci0gICAgICAgIGlmIChk
aXNwbGF5Qm94LT5oYXNDaGlsZE5vZGVzKCkgJiYgIWNvbnRhaW5zKGRpc3BsYXlCb3gucHRyKCkp
KSB7Ci0gICAgICAgICAgICAvLyBOb3RlOiB0aGUgZGlzcGxheSB0cmVlIG9mIGEgY3VlIGlzIHJl
bW92ZWQgd2hlbiB0aGUgYWN0aXZlIGZsYWcgb2YgdGhlIGN1ZSBpcyB1bnNldC4KLSAgICAgICAg
ICAgIGFwcGVuZENoaWxkKGRpc3BsYXlCb3gpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZUFjdGl2ZUN1ZXNG
b250U2l6ZSgpCi17Ci0gICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7Ci0g
ICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHNtYWxs
ZXN0RGltZW5zaW9uID0gc3RkOjptaW4obV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWlnaHQo
KSwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS53aWR0aCgpKTsKLSAgICBmbG9hdCBmb250U2Nh
bGUgPSBkb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5jYXB0
aW9uRm9udFNpemVTY2FsZUFuZEltcG9ydGFuY2UobV9mb250U2l6ZUlzSW1wb3J0YW50KTsKLSAg
ICBtX2ZvbnRTaXplID0gbHJvdW5kZihzbWFsbGVzdERpbWVuc2lvbiAqIGZvbnRTY2FsZSk7Ci0K
LSAgICBmb3IgKGF1dG8mIGFjdGl2ZUN1ZSA6IG1lZGlhRWxlbWVudC0+Y3VycmVudGx5QWN0aXZl
Q3VlcygpKSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9IGFjdGl2ZUN1ZS5k
YXRhKCk7Ci0gICAgICAgIGlmIChjdWUtPmlzUmVuZGVyYWJsZSgpKQotICAgICAgICAgICAgY3Vl
LT5zZXRGb250U2l6ZShtX2ZvbnRTaXplLCBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2Zv
bnRTaXplSXNJbXBvcnRhbnQpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0U3Ryb2tlU3R5bGUoKQotewotICAgIGlmICgh
ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gbWVkaWFFbGVt
ZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHRoaXMpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgU3RyaW5nIGxhbmd1YWdlOwotCi0gICAgLy8gRklY
TUU6IFNpbmNlIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSB0ZXh0IHRyYWNr
IGVuYWJsZWQsIHRoZSBmb2xsb3dpbmcgY29kZSBtYXkgbm90IGZpbmQgdGhlIGNvcnJlY3QgbGFu
Z3VhZ2UuCi0gICAgLy8gVGhlIGRlZmF1bHQgVUkgb25seSBhbGxvd3MgYSB1c2VyIHRvIGVuYWJs
ZSBvbmUgdHJhY2sgYXQgYSB0aW1lLCBzbyBpdCBzaG91bGQgYmUgT0sgZm9yIG5vdywgYnV0IHdl
IHNob3VsZCBjb25zaWRlciBkb2luZwotICAgIC8vIHRoaXMgZGlmZmVyZW50bHksIHNlZSA8aHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTg3NT4uCi0gICAgaWYgKGF1
dG8qIHRyYWNrcyA9IG1lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpKSB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0cmFja3MtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAg
IGF1dG8gdHJhY2sgPSB0cmFja3MtPml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAodHJhY2sgJiYg
dHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKLSAgICAgICAgICAg
ICAgICBsYW5ndWFnZSA9IHRyYWNrLT52YWxpZEJDUDQ3TGFuZ3VhZ2UoKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZsb2F0
IHN0cm9rZVdpZHRoOwotICAgIGJvb2wgaW1wb3J0YW50OwotCi0gICAgLy8gRklYTUU6IGZpbmQg
YSB3YXkgdG8gc2V0IHRoaXMgcHJvcGVydHkgaW4gdGhlIHN0eWxlc2hlZXQgbGlrZSB0aGUgb3Ro
ZXIgdXNlciBzdHlsZSBwcmVmZXJlbmNlcywgc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY5ODc0Pi4KLSAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmdyb3Vw
KCkuY2FwdGlvblByZWZlcmVuY2VzKCkuY2FwdGlvblN0cm9rZVdpZHRoRm9yRm9udChtX2ZvbnRT
aXplLCBsYW5ndWFnZSwgc3Ryb2tlV2lkdGgsIGltcG9ydGFudCkpCi0gICAgICAgIHNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlTdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgsIENTU1Vu
aXRUeXBlOjpDU1NfUFgsIGltcG9ydGFudCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRl
ZCgpCi17Ci0gICAgYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7
Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVx
dWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IG1lZGlhRWxlbWVudC0+cmVxdWlyZXNUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbigpOwotICAgIGlmICghaGFzQ2hpbGROb2RlcygpIHx8ICFyZXF1
aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKSB7Ci0gICAgICAgIGlmIChtX3RleHRUcmFja1Jl
cHJlc2VudGF0aW9uKSB7Ci0gICAgICAgICAgICBpZiAoIXJlcXVpcmVzVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24pCi0gICAgICAgICAgICAgICAgY2xlYXJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50
YXRpb24tPnNldEhpZGRlbih0cnVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKCFtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uKSB7Ci0gICAgICAgIEFMV0FZ
U19MT0coTE9HSURFTlRJRklFUik7Ci0KLSAgICAgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlv
biA9IFRleHRUcmFja1JlcHJlc2VudGF0aW9uOjpjcmVhdGUoKnRoaXMpOwotICAgICAgICBpZiAo
ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgICAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9u
LT5zZXRDb250ZW50U2NhbGUoZG9jdW1lbnQoKS5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkp
OwotICAgICAgICBtZWRpYUVsZW1lbnQtPnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKG1fdGV4
dFRyYWNrUmVwcmVzZW50YXRpb24uZ2V0KCkpOwotICAgIH0KLQotICAgIG1fdGV4dFRyYWNrUmVw
cmVzZW50YXRpb24tPnNldEhpZGRlbihmYWxzZSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y2xlYXJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpCi17
Ci0gICAgaWYgKCFtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwotCi0gICAgbV90ZXh0VHJhY2tSZXByZXNl
bnRhdGlvbiA9IG51bGxwdHI7Ci0gICAgaWYgKGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVk
aWFFbGVtZW50KHRoaXMpKQotICAgICAgICBtZWRpYUVsZW1lbnQtPnNldFRleHRUcmFja1JlcHJl
c2VudGF0aW9uKG51bGxwdHIpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1N0eWxlKCkKLXsKLSAgICBpZiAobV90ZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbikgewotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5UG9zaXRpb24sIENTU1ZhbHVlQWJzb2x1dGUpOwotICAgICAgICBzZXRJbmxpbmVTdHls
ZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkud2lk
dGgoKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIHNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlIZWlnaHQsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkuaGVpZ2h0KCks
IENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5TGVmdCwgMCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIHNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3AsIDAsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVBvc2l0aW9uKTsKLSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5V2lkdGgpOwotICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlI
ZWlnaHQpOwotICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0KTsK
LSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wKTsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjplbnRlcmVkRnVsbHNjcmVl
bigpCi17Ci0gICAgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOwotICAg
IHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlOjpZZXMpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmV4aXRlZEZ1bGxzY3JlZW4oKQotewotICAgIGNsZWFy
VGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKTsKLSAgICB1cGRhdGVTaXplcyhGb3JjZVVwZGF0ZTo6
WWVzKTsKLX0KLQotYm9vbCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1
cGRhdGVWaWRlb0Rpc3BsYXlTaXplKCkKLXsKLSAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1l
ZGlhRWxlbWVudCh0aGlzKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgSW50UmVjdCB2aWRlb0JveDsKLSAgICBpZiAobV90ZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbikgewotICAgICAgICB2aWRlb0JveCA9IG1fdGV4dFRyYWNrUmVwcmVzZW50YXRp
b24tPmJvdW5kcygpOwotICAgICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IGRvY3VtZW50
KCkucGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAgICAgICB2aWRlb0JveC5zZXRXaWR0
aCh2aWRlb0JveC53aWR0aCgpICogZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgICAgICB2aWRlb0Jv
eC5zZXRIZWlnaHQodmlkZW9Cb3guaGVpZ2h0KCkgKiBkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKCFpczxSZW5kZXJWaWRlbz4obWVkaWFFbGVtZW50LT5yZW5k
ZXJlcigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmlkZW9Cb3ggPSBk
b3duY2FzdDxSZW5kZXJWaWRlbz4oKm1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSkudmlkZW9Cb3go
KTsKLSAgICB9Ci0KLSAgICBpZiAobV92aWRlb0Rpc3BsYXlTaXplID09IHZpZGVvQm94KQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3ZpZGVvRGlzcGxheVNpemUgPSB2aWRlb0JveDsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50Ojp1cGRhdGVTaXplcyhGb3JjZVVwZGF0ZSBmb3JjZSkKLXsKLSAgICBpZiAoIXVw
ZGF0ZVZpZGVvRGlzcGxheVNpemUoKSAmJiBmb3JjZSAhPSBGb3JjZVVwZGF0ZTo6WWVzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsK
LSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFFbGVt
ZW50LT5zeW5jVGV4dFRyYWNrQm91bmRzKCk7Ci0KLSAgICB1cGRhdGVBY3RpdmVDdWVzRm9udFNp
emUoKTsKLSAgICB1cGRhdGVUZXh0U3Ryb2tlU3R5bGUoKTsKLSAgICBmb3IgKGF1dG8mIGFjdGl2
ZUN1ZSA6IG1lZGlhRWxlbWVudC0+Y3VycmVudGx5QWN0aXZlQ3VlcygpKQotICAgICAgICBhY3Rp
dmVDdWUuZGF0YSgpLT5yZWNhbGN1bGF0ZVN0eWxlcygpOwotCi0gICAgbV90YXNrUXVldWUuZW5x
dWV1ZVRhc2soW3RoaXNdICgpIHsKLSAgICAgICAgdXBkYXRlRGlzcGxheSgpOwotICAgIH0pOwot
fQotCi1SZWZQdHI8SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6
OmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2UoKQotewotICAgIGlmICghaGFzQ2hp
bGROb2RlcygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0cjxGcmFtZT4g
ZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwotCi0gICAgYXV0
byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFyZW5kZXJlci0+aGFzTGF5ZXIoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2Fz
dDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7Ci0KLSAgICBmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvciA9IDE7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgp
LnBhZ2UoKSkKLSAgICAgICAgZGV2aWNlU2NhbGVGYWN0b3IgPSBwYWdlLT5kZXZpY2VTY2FsZUZh
Y3RvcigpOwotCi0gICAgSW50UmVjdCBwYWludGluZ1JlY3QgPSBJbnRSZWN0KEludFBvaW50KCks
IGxheWVyLT5zaXplKCkpOwotCi0gICAgLy8gRklYTUUgKDE0OTQyMik6IFRoaXMgYnVmZmVyIHNo
b3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1Jl
Y3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3Rv
cikpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1
dG8gcGFpbnRGbGFncyA9IFJlbmRlckxheWVyOjpwYWludExheWVyUGFpbnRpbmdDb21wb3NpdGlu
Z0FsbFBoYXNlc0ZsYWdzKCk7Ci0gICAgcGFpbnRGbGFncy5hZGQoUmVuZGVyTGF5ZXI6OlBhaW50
TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpOwotICAgIGxheWVyLT5wYWludChidWZmZXItPmNvbnRl
eHQoKSwgcGFpbnRpbmdSZWN0LCBMYXlvdXRTaXplKCksIHsgUGFpbnRCZWhhdmlvcjo6RmxhdHRl
bkNvbXBvc2l0aW5nTGF5ZXJzLCBQYWludEJlaGF2aW9yOjpTbmFwc2hvdHRpbmcgfSwgbnVsbHB0
ciwgcGFpbnRGbGFncyk7Ci0KLSAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uo
V1RGTW92ZShidWZmZXIpKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50Ojp0ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQoY29uc3QgSW50
UmVjdCYpCi17Ci0gICAgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOwot
ICAgIHVwZGF0ZVNpemVzKCk7Ci19Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLWNvbnN0
IExvZ2dlciYgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nZ2VyKCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fbG9nZ2VyKQotICAgICAgICBtX2xvZ2dlciA9ICZkb2N1bWVu
dCgpLmxvZ2dlcigpOwotCi0gICAgcmV0dXJuICptX2xvZ2dlcjsKLX0KLQotY29uc3Qgdm9pZCog
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nSWRlbnRpZmllcigpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX2xvZ0lkZW50aWZpZXIpIHsKLSAgICAgICAgaWYgKGF1dG8gbWVk
aWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHRoaXMpKQotICAgICAgICAgICAgbV9sb2dJ
ZGVudGlmaWVyID0gbWVkaWFFbGVtZW50LT5sb2dJZGVudGlmaWVyKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG1fbG9nSWRlbnRpZmllcjsKLX0KLQotV1RGTG9nQ2hhbm5lbCYgTWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bG9nQ2hhbm5lbCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIExvZ01lZGlhOwotfQotI2VuZGlmIC8vICFSRUxFQVNFX0xPR19ESVNBQkxFRAotCi0jZW5k
aWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmIxNGQ2ZjUyYmU2YTBlNzM4MTkxNzI5
M2Q1Mzc3OWJjZjkxZDkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1MzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoVklE
RU8pCi0KLSNpbmNsdWRlICJHZW5lcmljVGFza1F1ZXVlLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250
cm9sRWxlbWVudFR5cGVzLmgiCi0jaW5jbHVkZSAiVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uaCIK
LSNpbmNsdWRlIDx3dGYvTG9nZ2VySGVscGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xQYW5l
bEVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RG
X01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQpOwotcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sUGFuZWxFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQm
KTsKLQotICAgIHZvaWQgc2V0Q2FuQmVEcmFnZ2VkKGJvb2wpOwotICAgIHZvaWQgc2V0SXNEaXNw
bGF5ZWQoYm9vbCk7Ci0KLSAgICB2b2lkIHJlc2V0UG9zaXRpb24oKTsKLSAgICB2b2lkIG1ha2VP
cGFxdWUoKTsKLSAgICB2b2lkIG1ha2VUcmFuc3BhcmVudCgpOwotCi0jaWYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVu
dHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBl
eHBsaWNpdCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQg
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzdGFydERy
YWcoY29uc3QgTGF5b3V0UG9pbnQmIGV2ZW50TG9jYXRpb24pOwotICAgIHZvaWQgY29udGludWVE
cmFnKGNvbnN0IExheW91dFBvaW50JiBldmVudExvY2F0aW9uKTsKLSAgICB2b2lkIGVuZERyYWco
KTsKLQotICAgIHZvaWQgc3RhcnRUaW1lcigpOwotICAgIHZvaWQgc3RvcFRpbWVyKCk7Ci0gICAg
dm9pZCB0cmFuc2l0aW9uVGltZXJGaXJlZCgpOwotCi0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25z
dCBMYXlvdXRQb2ludCYpOwotCi0gICAgYm9vbCBtX2NhbkJlRHJhZ2dlZDsKLSAgICBib29sIG1f
aXNCZWluZ0RyYWdnZWQ7Ci0gICAgYm9vbCBtX2lzRGlzcGxheWVkOwotICAgIGJvb2wgbV9vcGFx
dWU7Ci0gICAgTGF5b3V0UG9pbnQgbV9sYXN0RHJhZ0V2ZW50TG9jYXRpb247Ci0gICAgTGF5b3V0
UG9pbnQgbV9jdW11bGF0aXZlRHJhZ09mZnNldDsKLQotICAgIFRpbWVyIG1fdHJhbnNpdGlvblRp
bWVyOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRp
YUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9s
RGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xQYW5l
bEVuY2xvc3VyZUVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9s
UGFuZWxFbmNsb3N1cmVFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotcHJpdmF0ZToKLSAg
ICBleHBsaWNpdCBNZWRpYUNvbnRyb2xQYW5lbEVuY2xvc3VyZUVsZW1lbnQoRG9jdW1lbnQmKTsK
LX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250
cm9sT3ZlcmxheUVuY2xvc3VyZUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2
RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xPdmVybGF5
RW5jbG9zdXJlRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xP
dmVybGF5RW5jbG9zdXJlRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLXByaXZhdGU6Ci0g
ICAgZXhwbGljaXQgTWVkaWFDb250cm9sT3ZlcmxheUVuY2xvc3VyZUVsZW1lbnQoRG9jdW1lbnQm
KTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFD
b250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJv
bERpdkVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sVGlt
ZWxpbmVDb250YWluZXJFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29u
dHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSAgICB2
b2lkIHNldFRpbWVEaXNwbGF5c0hpZGRlbihib29sKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNp
dCBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAg
IFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5
bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRl
ckNvbnRhaW5lckVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7
Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250
YWluZXJFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFZvbHVt
ZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi0jaWYgIVBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCkg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCYpOwot
Ci0gICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci0KLSAgICBS
ZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxl
JiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5
RWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xEaXZFbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KTsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50PiBj
cmVhdGUoRG9jdW1lbnQmKTsKLQotICAgIHZvaWQgdXBkYXRlKCk7Ci0KLXByaXZhdGU6Ci0gICAg
ZXhwbGljaXQgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQmKTsKLQot
ICAgIGVudW0gU3RhdGVCZWluZ0Rpc3BsYXllZCB7IE5vdGhpbmcsIExvYWRpbmcsIExpdmVCcm9h
ZGNhc3QgfTsKLSAgICBTdGF0ZUJlaW5nRGlzcGxheWVkIG1fc3RhdGVCZWluZ0Rpc3BsYXllZDsK
LX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250
cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xNdXRl
QnV0dG9uRWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xQ
YW5lbE11dGVCdXR0b25FbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29u
dHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYsIE1lZGlhQ29udHJv
bHMqKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRU
b01vdXNlTW92ZUV2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi1w
cml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQo
RG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIE1lZGlhQ29udHJvbHMqIG1fY29udHJvbHM7Ci19
OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJv
bE11dGVCdXR0b25FbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29u
dHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50PiBjcmVhdGUoRG9j
dW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlk
ZXJNdXRlQnV0dG9uRWxlbWVudChEb2N1bWVudCYpOwotfTsKLQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50IGZp
bmFsIDogcHVibGljIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50
Jik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9N
b3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAg
ICB2b2lkIHVwZGF0ZURpc3BsYXlUeXBlKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgZXhw
bGljaXQgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZv
aWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1
dHRvbkVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAg
ICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbE92ZXJsYXlQbGF5QnV0dG9uRWxl
bWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xPdmVybGF5UGxheUJ1
dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi0gICAgdm9pZCB1cGRhdGVEaXNwbGF5
VHlwZSgpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbE92
ZXJsYXlQbGF5QnV0dG9uRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudCBm
aW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudCB7Ci0gICAgV1RGX01B
S0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQpOwot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVt
ZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNv
bnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIGJvb2wgaXNG
b3J3YXJkQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xTZWVrQmFj
a0J1dHRvbkVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1l
bnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250cm9sU2Vla0JhY2tCdXR0
b25FbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbFNlZWtCYWNr
QnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgTWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50KERvY3VtZW50Jik7Ci0KLSAgICBi
b29sIGlzRm9yd2FyZEJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci19
OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJv
bFJld2luZEJ1dHRvbkVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVt
ZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFJld2luZEJ1dHRv
bkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sUmV3aW5kQnV0
dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250
cm9sUmV3aW5kQnV0dG9uRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9pZCBkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVt
ZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RGX01B
S0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVu
dCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1l
QnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFD
b250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQmKTsKLQotICAgIHZv
aWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRD
YXB0aW9uc0J1dHRvbkVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVt
ZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFRvZ2dsZUNsb3Nl
ZENhcHRpb25zQnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNv
bnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYs
IE1lZGlhQ29udHJvbHMqKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wg
d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
Ci0jZW5kaWYKLQotICAgIHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKSBvdmVycmlkZTsKLQotcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRv
bkVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIGRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQ
TEFURk9STShXSU4pIHx8IFBMQVRGT1JNKEdUSykKLSAgICBNZWRpYUNvbnRyb2xzKiBtX2NvbnRy
b2xzOwotI2VuZGlmCi19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNs
YXNzIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudCBmaW5hbCA6IHB1
YmxpYyBNZWRpYUNvbnRyb2xEaXZFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29udGFpbmVyRWxlbWVudCk7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc0NvbnRhaW5lckVsZW1lbnQ+
IGNyZWF0ZShEb2N1bWVudCYpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9v
bCB3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zQ29u
dGFpbmVyRWxlbWVudChEb2N1bWVudCYpOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1l
bnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci0gICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQp
OwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFj
a0xpc3RFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSNpZiAh
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZl
bnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHVwZGF0
ZURpc3BsYXkoKTsKLQotcHJpdmF0ZToKLSAgICBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1Ry
YWNrTGlzdEVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2b2lkIHJl
YnVpbGRUcmFja0xpc3RNZW51KCk7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQmKSBvdmVycmlkZTsKLQotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4gVHJh
Y2tNZW51SXRlbXM7Ci0gICAgVHJhY2tNZW51SXRlbXMgbV9tZW51SXRlbXM7Ci0jaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8RWxlbWVudD4sIFJlZlB0
cjxUZXh0VHJhY2s+PiBNZW51SXRlbVRvVHJhY2tNYXA7Ci0gICAgTWVudUl0ZW1Ub1RyYWNrTWFw
IG1fbWVudVRvVHJhY2tNYXA7Ci0jZW5kaWYKLSAgICBNZWRpYUNvbnRyb2xzKiBtX2NvbnRyb2xz
OwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNv
bnRyb2xUaW1lbGluZUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVt
ZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFRpbWVsaW5lRWxl
bWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1l
bnQ+IGNyZWF0ZShEb2N1bWVudCYsIE1lZGlhQ29udHJvbHMqKTsKLQotI2lmICFQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVy
cmlkZTsKLSNlbmRpZgotCi0gICAgdm9pZCBzZXRQb3NpdGlvbihkb3VibGUpOwotICAgIHZvaWQg
c2V0RHVyYXRpb24oZG91YmxlKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRy
b2xUaW1lbGluZUVsZW1lbnQoRG9jdW1lbnQmLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2b2lk
IGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIE1lZGlhQ29udHJv
bHMqIG1fY29udHJvbHM7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LWNsYXNzIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50IGZpbmFsIDogcHVibGlj
IE1lZGlhQ29udHJvbElucHV0RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50
Jik7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHdpbGxSZXNwb25kVG9N
b3VzZUNsaWNrRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAg
ICB2b2lkIHNldElzRnVsbHNjcmVlbihib29sKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgdm9p
ZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Jikgb3ZlcnJpZGU7Ci19OwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xp
ZGVyRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50
IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xp
ZGVyRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xQYW5lbFZv
bHVtZVNsaWRlckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYpOwot
fTsKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9s
RnVsbHNjcmVlblZvbHVtZVNsaWRlckVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyRWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudD4gY3JlYXRlKERv
Y3VtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sRnVsbHNjcmVl
blZvbHVtZVNsaWRlckVsZW1lbnQoRG9jdW1lbnQmKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1
dHRvbkVsZW1lbnQgZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLSAg
ICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5C
dXR0b25FbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbEZ1bGxz
Y3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKLQotI2lmICFQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVu
dHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBl
eHBsaWNpdCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9uRWxlbWVudChEb2N1
bWVudCYpOwotICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIG92ZXJyaWRlOwot
fTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFDb250
cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQpOwotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQ+IGNyZWF0
ZShEb2N1bWVudCYpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCB3aWxs
UmVzcG9uZFRvTW91c2VDbGlja0V2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNl
bmRpZgotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1
bWVNYXhCdXR0b25FbGVtZW50KERvY3VtZW50Jik7Ci0KLSAgICB2b2lkIGRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLX07Ci0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQg
ZmluYWwgOiBwdWJsaWMgTWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50IHsKLSAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVu
dCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlz
cGxheUVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0
IE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudChEb2N1bWVudCYpOwotfTsK
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUNvbnRyb2xD
dXJyZW50VGltZURpc3BsYXlFbGVtZW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29udHJvbFRpbWVE
aXNwbGF5RWxlbWVudCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xD
dXJyZW50VGltZURpc3BsYXlFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlh
Q29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi1w
cml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1l
bnQoRG9jdW1lbnQmKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
I2lmIEVOQUJMRShWSURFT19UUkFDSykKLQotY2xhc3MgVlRUQ3VlOwotCi1jbGFzcyBNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50IGZpbmFsCi0gICAgOiBwdWJsaWMgTWVkaWFD
b250cm9sRGl2RWxlbWVudAotICAgICwgcHVibGljIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xp
ZW50Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgLCBwcml2YXRlIExvZ2dlckhlbHBl
cgotI2VuZGlmCi17Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwotCi0gICAg
ZW51bSBjbGFzcyBGb3JjZVVwZGF0ZSB7IFllcywgTm8gfTsKLSAgICB2b2lkIHVwZGF0ZVNpemVz
KEZvcmNlVXBkYXRlIGZvcmNlID0gRm9yY2VVcGRhdGU6Ok5vKTsKLSAgICB2b2lkIHVwZGF0ZURp
c3BsYXkoKTsKLQotICAgIHZvaWQgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlm
TmVlZGVkKCk7Ci0KLSAgICB2b2lkIGVudGVyZWRGdWxsc2NyZWVuKCk7Ci0gICAgdm9pZCBleGl0
ZWRGdWxsc2NyZWVuKCk7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCYpOwotCi0gICAgLy8gRWxlbWVudAotICAg
IFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5
bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbkNsaWVudAotICAgIFJlZlB0cjxJbWFnZT4gY3JlYXRlVGV4dFRy
YWNrUmVwcmVzZW50YXRpb25JbWFnZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgdGV4dFRyYWNrUmVw
cmVzZW50YXRpb25Cb3VuZHNDaGFuZ2VkKGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLQotICAg
IHZvaWQgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOwotICAgIHZvaWQg
Y2xlYXJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpOwotCi0gICAgYm9vbCB1cGRhdGVWaWRlb0Rp
c3BsYXlTaXplKCk7Ci0gICAgdm9pZCB1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKTsKLSAgICB2
b2lkIHVwZGF0ZVRleHRTdHJva2VTdHlsZSgpOwotICAgIHZvaWQgcHJvY2Vzc0FjdGl2ZVZUVEN1
ZShWVFRDdWUmKTsKLSAgICB2b2lkIHVwZGF0ZVRleHRUcmFja1N0eWxlKCk7Ci0KLSNpZiAhUkVM
RUFTRV9MT0dfRElTQUJMRUQKLSAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFs
OwotICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbDsKLSAgICBXVEZM
b2dDaGFubmVsJiBsb2dDaGFubmVsKCkgY29uc3QgZmluYWw7Ci0gICAgY29uc3QgY2hhciogbG9n
Q2xhc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIk1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQiOyB9Ci0gICAgbXV0YWJsZSBSZWZQdHI8TG9nZ2VyPiBtX2xvZ2dlcjsK
LSAgICBtdXRhYmxlIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsKLSNl
bmRpZgotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFRleHRUcmFja1JlcHJlc2VudGF0aW9uPiBtX3Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uOwotCi0gICAgR2VuZXJpY1Rhc2tRdWV1ZTxUaW1lcj4gbV90
YXNrUXVldWU7Ci0gICAgSW50UmVjdCBtX3ZpZGVvRGlzcGxheVNpemU7Ci0gICAgaW50IG1fZm9u
dFNpemUgeyAwIH07Ci0gICAgYm9vbCBtX2ZvbnRTaXplSXNJbXBvcnRhbnQgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9uZWVkc0dlbmVyYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24geyBmYWxzZSB9
OwotfTsKLQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShWSURFTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmMxZGViY2VlMmY2M2RmNjdkMTQzNDYyNzIyNzUzMmQ2MDY1Y2I3OAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNDg3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5oIgorCisjaWYg
RU5BQkxFKFZJREVPKQorCisjaW5jbHVkZSAiRE9NVG9rZW5MaXN0LmgiCisjaW5jbHVkZSAiRWxl
bWVudENoaWxkSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGdWxsc2NyZWVu
TWFuYWdlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxW
aWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkxvY2Fs
aXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUE9ESW50ZXJ2
YWwuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgorI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3Qu
aCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWVH
ZW5lcmljLmgiCisjaW5jbHVkZSAiVGV4dFRyYWNrTGlzdC5oIgorI2luY2x1ZGUgIlZUVFJlZ2lv
bkxpc3QuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0
Zi9MYW5ndWFnZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExP
Q0FURURfSU1QTChNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KTsKKwordXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworUmVm
PE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIEhUTUxNZWRp
YUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKK3sKKyAgICBhdXRvIGVsZW1lbnQgPSBhZG9wdFJlZigq
bmV3IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQoZG9jdW1lbnQsIG1lZGlh
RWxlbWVudCkpOworICAgIGVsZW1lbnQtPmhpZGUoKTsKKyAgICByZXR1cm4gZWxlbWVudDsKK30K
KworTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6TWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIEhUTUxNZWRpYUVsZW1l
bnQmIGVsZW1lbnQpCisgICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIGRvY3VtZW50KQorICAg
ICwgbV9tZWRpYUVsZW1lbnQobWFrZVdlYWtQdHIoJmVsZW1lbnQpKQoreworICAgIHNldFBzZXVk
byhBdG9tU3RyaW5nKCItd2Via2l0LW1lZGlhLXRleHQtdHJhY2stY29udGFpbmVyIiwgQXRvbVN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKK30KKworUmVuZGVyUHRyPFJlbmRlckVsZW1l
bnQ+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRS
ZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKQor
eworICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzLCBXVEZN
b3ZlKHN0eWxlKSk7Cit9CisKK3N0YXRpYyBib29sIGNvbXBhcmVDdWVJbnRlcnZhbEZvckRpc3Bs
YXkoY29uc3QgQ3VlSW50ZXJ2YWwmIG9uZSwgY29uc3QgQ3VlSW50ZXJ2YWwmIHR3bykKK3sKKyAg
ICByZXR1cm4gb25lLmRhdGEoKS0+aXNQb3NpdGlvbmVkQWJvdmUodHdvLmRhdGEoKSk7Cit9Owor
Cit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZURpc3Bs
YXkoKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCAmJiAhbV9tZWRpYUVsZW1lbnQtPmNsb3Nl
ZENhcHRpb25zVmlzaWJsZSgpKQorICAgICAgICByZW1vdmVDaGlsZHJlbigpOworCisgICAgLy8g
MS4gSWYgdGhlIG1lZGlhIGVsZW1lbnQgaXMgYW4gYXVkaW8gZWxlbWVudCwgb3IgaXMgYW5vdGhl
ciBwbGF5YmFjaworICAgIC8vIG1lY2hhbmlzbSB3aXRoIG5vIHJlbmRlcmluZyBhcmVhLCBhYm9y
dCB0aGVzZSBzdGVwcy4gVGhlcmUgaXMgbm90aGluZyB0bworICAgIC8vIHJlbmRlci4KKyAgICBp
ZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+aXNWaWRlbygpIHx8IG1fdmlk
ZW9EaXNwbGF5U2l6ZS5zaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyAyLiBMZXQgdmlkZW8gYmUgdGhlIG1lZGlhIGVsZW1lbnQgb3Igb3RoZXIgcGxheWJhY2sgbWVj
aGFuaXNtLgorICAgIEhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvID0gZG93bmNhc3Q8SFRNTFZpZGVv
RWxlbWVudD4oKm1fbWVkaWFFbGVtZW50KTsKKworICAgIC8vIDMuIExldCBvdXRwdXQgYmUgYW4g
ZW1wdHkgbGlzdCBvZiBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgQ1NTIGJsb2NrIGJveGVzLgorCisg
ICAgLy8gNC4gSWYgdGhlIHVzZXIgYWdlbnQgaXMgZXhwb3NpbmcgYSB1c2VyIGludGVyZmFjZSBm
b3IgdmlkZW8sIGFkZCB0bworICAgIC8vIG91dHB1dCBvbmUgb3IgbW9yZSBjb21wbGV0ZWx5IHRy
YW5zcGFyZW50IHBvc2l0aW9uZWQgQ1NTIGJsb2NrIGJveGVzIHRoYXQKKyAgICAvLyBjb3ZlciB0
aGUgc2FtZSByZWdpb24gYXMgdGhlIHVzZXIgaW50ZXJmYWNlLgorCisgICAgLy8gNS4gSWYgdGhl
IGxhc3QgdGltZSB0aGVzZSBydWxlcyB3ZXJlIHJ1biwgdGhlIHVzZXIgYWdlbnQgd2FzIG5vdCBl
eHBvc2luZworICAgIC8vIGEgdXNlciBpbnRlcmZhY2UgZm9yIHZpZGVvLCBidXQgbm93IGl0IGlz
LCBsZXQgcmVzZXQgYmUgdHJ1ZS4gT3RoZXJ3aXNlLAorICAgIC8vIGxldCByZXNldCBiZSBmYWxz
ZS4KKworICAgIC8vIFRoZXJlIGlzIG5vdGhpbmcgdG8gYmUgZG9uZSBleHBsaWNpdGx5IGZvciA0
dGggYW5kIDV0aCBzdGVwcywgYXMKKyAgICAvLyBldmVyeXRoaW5nIGlzIGhhbmRsZWQgdGhyb3Vn
aCBDU1MuIFRoZSBjYXB0aW9uIGJveCBpcyBvbiB0b3Agb2YgdGhlCisgICAgLy8gY29udHJvbHMg
Ym94LCBpbiBhIGNvbnRhaW5lciBzZXQgd2l0aCB0aGUgLXdlYmtpdC1ib3ggZGlzcGxheSBwcm9w
ZXJ0eS4KKworICAgIC8vIDYuIExldCB0cmFja3MgYmUgdGhlIHN1YnNldCBvZiB2aWRlbydzIGxp
c3Qgb2YgdGV4dCB0cmFja3MgdGhhdCBoYXZlIGFzCisgICAgLy8gdGhlaXIgcnVsZXMgZm9yIHVw
ZGF0aW5nIHRoZSB0ZXh0IHRyYWNrIHJlbmRlcmluZyB0aGVzZSBydWxlcyBmb3IKKyAgICAvLyB1
cGRhdGluZyB0aGUgZGlzcGxheSBvZiBXZWJWVFQgdGV4dCB0cmFja3MsIGFuZCB3aG9zZSB0ZXh0
IHRyYWNrIG1vZGUgaXMKKyAgICAvLyBzaG93aW5nIG9yIHNob3dpbmcgYnkgZGVmYXVsdC4KKyAg
ICAvLyA3LiBMZXQgY3VlcyBiZSBhbiBlbXB0eSBsaXN0IG9mIHRleHQgdHJhY2sgY3Vlcy4KKyAg
ICAvLyA4LiBGb3IgZWFjaCB0cmFjayB0cmFjayBpbiB0cmFja3MsIGFwcGVuZCB0byBjdWVzIGFs
bCB0aGUgY3VlcyBmcm9tCisgICAgLy8gdHJhY2sncyBsaXN0IG9mIGN1ZXMgdGhhdCBoYXZlIHRo
ZWlyIHRleHQgdHJhY2sgY3VlIGFjdGl2ZSBmbGFnIHNldC4KKyAgICBDdWVMaXN0IGFjdGl2ZUN1
ZXMgPSB2aWRlby5jdXJyZW50bHlBY3RpdmVDdWVzKCk7CisKKyAgICAvLyA5LiBJZiByZXNldCBp
cyBmYWxzZSwgdGhlbiwgZm9yIGVhY2ggdGV4dCB0cmFjayBjdWUgY3VlIGluIGN1ZXM6IGlmIGN1
ZSdzCisgICAgLy8gdGV4dCB0cmFjayBjdWUgZGlzcGxheSBzdGF0ZSBoYXMgYSBzZXQgb2YgQ1NT
IGJveGVzLCB0aGVuIGFkZCB0aG9zZSBib3hlcworICAgIC8vIHRvIG91dHB1dCwgYW5kIHJlbW92
ZSBjdWUgZnJvbSBjdWVzLgorCisgICAgLy8gVGhlcmUgaXMgbm90aGluZyBleHBsaWNpdGx5IHRv
IGJlIGRvbmUgaGVyZSwgYXMgYWxsIHRoZSBjYWNoaW5nIG9jY3VycworICAgIC8vIHdpdGhpbiB0
aGUgVGV4dFRyYWNrQ3VlIGluc3RhbmNlIGl0c2VsZi4gSWYgcGFyYW1ldGVycyBvZiB0aGUgY3Vl
IGNoYW5nZSwKKyAgICAvLyB0aGUgZGlzcGxheSB0cmVlIGlzIGNsZWFyZWQuCisKKyAgICAvLyBJ
ZiB0aGUgbnVtYmVyIG9mIENTUyBib3hlcyBpbiB0aGUgb3V0cHV0IGlzIGxlc3MgdGhhbiB0aGUg
bnVtYmVyIG9mIGN1ZXMKKyAgICAvLyB3ZSB3aXNoIHRvIHJlbmRlciAoZS5nLiwgd2UgYXJlIGFk
ZGluZyBhbm90aGVyIGN1ZSBpbiBhIHNldCBvZiByb2xsLXVwCisgICAgLy8gY3VlcyksIHJlbW92
ZSBhbGwgdGhlIGV4aXN0aW5nIENTUyBib3hlcyByZXByZXNlbnRpbmcgdGhlIGN1ZXMgYW5kIHJl
LWFkZAorICAgIC8vIHRoZW0gc28gdGhhdCB0aGUgbmV3IGN1ZSBpcyBhdCB0aGUgYm90dG9tLgor
ICAgIC8vIEZJWE1FOiBDYWxsaW5nIGNvdW50Q2hpbGROb2RlcygpIGhlcmUgaXMgaW5lZmZpY2ll
bnQuIFdlIGRvbid0IG5lZWQgdG8KKyAgICAvLyB0cmF2ZXJzZSBhbGwgY2hpbGRyZW4ganVzdCB0
byBjaGVjayBpZiB0aGVyZSBhcmUgbGVzcyBjaGlsZHJlbiB0aGFuIGN1ZXMuCisgICAgaWYgKGNv
dW50Q2hpbGROb2RlcygpIDwgYWN0aXZlQ3Vlcy5zaXplKCkpCisgICAgICAgIHJlbW92ZUNoaWxk
cmVuKCk7CisKKyAgICBhY3RpdmVDdWVzLnJlbW92ZUFsbE1hdGNoaW5nKFtdIChDdWVJbnRlcnZh
bCYgY3VlSW50ZXJ2YWwpIHsKKyAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gY3Vl
SW50ZXJ2YWwuZGF0YSgpOworICAgICAgICByZXR1cm4gIWN1ZS0+dHJhY2soKQorICAgICAgICAg
ICAgfHwgIWN1ZS0+dHJhY2soKS0+aXNSZW5kZXJlZCgpCisgICAgICAgICAgICB8fCBjdWUtPnRy
YWNrKCktPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OkRpc2FibGVkCisgICAgICAgICAgICB8
fCAhY3VlLT5pc0FjdGl2ZSgpCisgICAgICAgICAgICB8fCAhY3VlLT5pc1JlbmRlcmFibGUoKTsK
KyAgICB9KTsKKworICAgIC8vIFNvcnQgdGhlIGFjdGl2ZSBjdWVzIGZvciB0aGUgYXBwcm9wcmlh
dGUgZGlzcGxheSBvcmRlci4gRm9yIGV4YW1wbGUsIGZvciByb2xsLXVwCisgICAgLy8gb3IgcGFp
bnQtb24gY2FwdGlvbnMsIHdlIG5lZWQgdG8gYWRkIHRoZSBjdWVzIGluIHJldmVyc2UgY2hyb25v
bG9naWNhbCBvcmRlciwKKyAgICAvLyBzbyB0aGF0IHRoZSBuZXdlc3QgY2FwdGlvbnMgYXBwZWFy
IGF0IHRoZSBib3R0b20uCisgICAgc3RkOjpzb3J0KGFjdGl2ZUN1ZXMuYmVnaW4oKSwgYWN0aXZl
Q3Vlcy5lbmQoKSwgJmNvbXBhcmVDdWVJbnRlcnZhbEZvckRpc3BsYXkpOworCisgICAgaWYgKG1f
bWVkaWFFbGVtZW50LT5jbG9zZWRDYXB0aW9uc1Zpc2libGUoKSkgeworICAgICAgICAvLyAxMC4g
Rm9yIGVhY2ggdGV4dCB0cmFjayBjdWUgaW4gY3VlcyB0aGF0IGhhcyBub3QgeWV0IGhhZAorICAg
ICAgICAvLyBjb3JyZXNwb25kaW5nIENTUyBib3hlcyBhZGRlZCB0byBvdXRwdXQsIGluIHRleHQg
dHJhY2sgY3VlIG9yZGVyLCBydW4gdGhlCisgICAgICAgIC8vIGZvbGxvd2luZyBzdWJzdGVwczoK
KyAgICAgICAgZm9yIChhdXRvJiBpbnRlcnZhbCA6IGFjdGl2ZUN1ZXMpIHsKKyAgICAgICAgICAg
IGF1dG8gY3VlID0gaW50ZXJ2YWwuZGF0YSgpOworICAgICAgICAgICAgY3VlLT5zZXRGb250U2l6
ZShtX2ZvbnRTaXplLCBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplSXNJbXBv
cnRhbnQpOworICAgICAgICAgICAgaWYgKGlzPFZUVEN1ZT4oKmN1ZSkpCisgICAgICAgICAgICAg
ICAgcHJvY2Vzc0FjdGl2ZVZUVEN1ZShkb3duY2FzdDxWVFRDdWU+KCpjdWUpKTsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gZGlzcGxheUJveCA9IGN1ZS0+Z2V0RGlz
cGxheVRyZWUobV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKSwgbV9mb250U2l6ZSk7CisgICAgICAg
ICAgICAgICAgaWYgKGRpc3BsYXlCb3gtPmhhc0NoaWxkTm9kZXMoKSAmJiAhY29udGFpbnMoZGlz
cGxheUJveC5nZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkKCpkaXNwbGF5
Qm94KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIDExLiBSZXR1
cm4gb3V0cHV0LgorICAgIGlmIChoYXNDaGlsZE5vZGVzKCkpCisgICAgICAgIHNob3coKTsKKyAg
ICBlbHNlCisgICAgICAgIGhpZGUoKTsKKworICAgIHVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0
aW9uSWZOZWVkZWQoKTsKKyAgICB1cGRhdGVUZXh0VHJhY2tTdHlsZSgpOworICAgIG1fbmVlZHNH
ZW5lcmF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uID0gdHJ1ZTsKK30KKwordm9pZCBNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkltYWdlSWZOZWVkZWQoKQoreworICAgIGlmICghbV9uZWVkc0dlbmVyYXRlVGV4dFRyYWNr
UmVwcmVzZW50YXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmVlZHNHZW5lcmF0ZVRl
eHRUcmFja1JlcHJlc2VudGF0aW9uID0gZmFsc2U7CisKKyAgICAvLyBXZSBzaG91bGQgY2FsbCBt
X3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT51cGRhdGUoKSB0byBwYWludCB0aGUgc3VidHJlZSBv
ZgorICAgIC8vIHRoZSBSZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVtZW50IGFmdGVyIHRoZSBs
YXlvdXQgaXMgY2xlYW4uCisgICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCisgICAg
ICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpOworfQorCit2b2lkIE1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnByb2Nlc3NBY3RpdmVWVFRDdWUoVlRU
Q3VlJiBjdWUpCit7CisgICAgREVCVUdfTE9HKExPR0lERU5USUZJRVIsICJhZGRpbmcgYW5kIHBv
c2l0aW9uaW5nIGN1ZTogXCIiLCBjdWUudGV4dCgpLCAiXCIsIHN0YXJ0PSIsIGN1ZS5zdGFydFRp
bWUoKSwgIiwgZW5kPSIsIGN1ZS5lbmRUaW1lKCksICIsIGxpbmU9IiwgY3VlLmxpbmUoKSk7Cisg
ICAgUmVmPFRleHRUcmFja0N1ZUJveD4gZGlzcGxheUJveCA9ICpjdWUuZ2V0RGlzcGxheVRyZWUo
bV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKSwgbV9mb250U2l6ZSk7CisKKyAgICBpZiAoYXV0byBy
ZWdpb24gPSBjdWUudHJhY2soKS0+cmVnaW9ucygpLT5nZXRSZWdpb25CeUlkKGN1ZS5yZWdpb25J
ZCgpKSkgeworICAgICAgICAvLyBMZXQgcmVnaW9uIGJlIHRoZSBXZWJWVFQgcmVnaW9uIHdob3Nl
IHJlZ2lvbiBpZGVudGlmaWVyCisgICAgICAgIC8vIG1hdGNoZXMgdGhlIHRleHQgdHJhY2sgY3Vl
IHJlZ2lvbiBpZGVudGlmaWVyIG9mIGN1ZS4KKyAgICAgICAgUmVmPEhUTUxEaXZFbGVtZW50PiBy
ZWdpb25Ob2RlID0gcmVnaW9uLT5nZXREaXNwbGF5VHJlZSgpOworCisgICAgICAgIGlmICghY29u
dGFpbnMocmVnaW9uTm9kZS5wdHIoKSkpCisgICAgICAgICAgICBhcHBlbmRDaGlsZChyZWdpb24t
PmdldERpc3BsYXlUcmVlKCkpOworCisgICAgICAgIHJlZ2lvbi0+YXBwZW5kVGV4dFRyYWNrQ3Vl
Qm94KFdURk1vdmUoZGlzcGxheUJveCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIGN1
ZSBoYXMgYW4gZW1wdHkgdGV4dCB0cmFjayBjdWUgcmVnaW9uIGlkZW50aWZpZXIgb3IgdGhlcmUg
aXMgbm8KKyAgICAgICAgLy8gV2ViVlRUIHJlZ2lvbiB3aG9zZSByZWdpb24gaWRlbnRpZmllciBp
cyBpZGVudGljYWwgdG8gY3VlJ3MgdGV4dAorICAgICAgICAvLyB0cmFjayBjdWUgcmVnaW9uIGlk
ZW50aWZpZXIsIHJ1biB0aGUgZm9sbG93aW5nIHN1YnN0ZXBzOgorICAgICAgICBpZiAoZGlzcGxh
eUJveC0+aGFzQ2hpbGROb2RlcygpICYmICFjb250YWlucyhkaXNwbGF5Qm94LnB0cigpKSkgewor
ICAgICAgICAgICAgLy8gTm90ZTogdGhlIGRpc3BsYXkgdHJlZSBvZiBhIGN1ZSBpcyByZW1vdmVk
IHdoZW4gdGhlIGFjdGl2ZSBmbGFnIG9mIHRoZSBjdWUgaXMgdW5zZXQuCisgICAgICAgICAgICBh
cHBlbmRDaGlsZChkaXNwbGF5Qm94KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVBY3RpdmVDdWVzRm9udFNp
emUoKQoreworICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHNt
YWxsZXN0RGltZW5zaW9uID0gc3RkOjptaW4obV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWln
aHQoKSwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS53aWR0aCgpKTsKKyAgICBmbG9hdCBmb250
U2NhbGUgPSBkb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5j
YXB0aW9uRm9udFNpemVTY2FsZUFuZEltcG9ydGFuY2UobV9mb250U2l6ZUlzSW1wb3J0YW50KTsK
KyAgICBtX2ZvbnRTaXplID0gbHJvdW5kZihzbWFsbGVzdERpbWVuc2lvbiAqIGZvbnRTY2FsZSk7
CisKKyAgICBmb3IgKGF1dG8mIGFjdGl2ZUN1ZSA6IG1fbWVkaWFFbGVtZW50LT5jdXJyZW50bHlB
Y3RpdmVDdWVzKCkpIHsKKyAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gYWN0aXZl
Q3VlLmRhdGEoKTsKKyAgICAgICAgaWYgKGN1ZS0+aXNSZW5kZXJhYmxlKCkpCisgICAgICAgICAg
ICBjdWUtPnNldEZvbnRTaXplKG1fZm9udFNpemUsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCks
IG1fZm9udFNpemVJc0ltcG9ydGFudCk7CisgICAgfQorfQorCit2b2lkIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVRleHRTdHJva2VTdHlsZSgpCit7CisgICAg
aWYgKCFkb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX21l
ZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFN0cmluZyBsYW5ndWFnZTsK
KworICAgIC8vIEZJWE1FOiBTaW5jZSBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG1vcmUgdGhhbiBv
bmUgdGV4dCB0cmFjayBlbmFibGVkLCB0aGUgZm9sbG93aW5nIGNvZGUgbWF5IG5vdCBmaW5kIHRo
ZSBjb3JyZWN0IGxhbmd1YWdlLgorICAgIC8vIFRoZSBkZWZhdWx0IFVJIG9ubHkgYWxsb3dzIGEg
dXNlciB0byBlbmFibGUgb25lIHRyYWNrIGF0IGEgdGltZSwgc28gaXQgc2hvdWxkIGJlIE9LIGZv
ciBub3csIGJ1dCB3ZSBzaG91bGQgY29uc2lkZXIgZG9pbmcKKyAgICAvLyB0aGlzIGRpZmZlcmVu
dGx5LCBzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4NzU+
LgorICAgIGlmIChhdXRvKiB0cmFja3MgPSBtX21lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpKSB7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0cmFja3MtPmxlbmd0aCgpOyArK2kp
IHsKKyAgICAgICAgICAgIGF1dG8gdHJhY2sgPSB0cmFja3MtPml0ZW0oaSk7CisgICAgICAgICAg
ICBpZiAodHJhY2sgJiYgdHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcp
IHsKKyAgICAgICAgICAgICAgICBsYW5ndWFnZSA9IHRyYWNrLT52YWxpZEJDUDQ3TGFuZ3VhZ2Uo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIGZsb2F0IHN0cm9rZVdpZHRoOworICAgIGJvb2wgaW1wb3J0YW50OworCisgICAg
Ly8gRklYTUU6IGZpbmQgYSB3YXkgdG8gc2V0IHRoaXMgcHJvcGVydHkgaW4gdGhlIHN0eWxlc2hl
ZXQgbGlrZSB0aGUgb3RoZXIgdXNlciBzdHlsZSBwcmVmZXJlbmNlcywgc2VlIDxodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5ODc0Pi4KKyAgICBpZiAoZG9jdW1lbnQo
KS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCkuY2FwdGlvblN0cm9rZVdpZHRo
Rm9yRm9udChtX2ZvbnRTaXplLCBsYW5ndWFnZSwgc3Ryb2tlV2lkdGgsIGltcG9ydGFudCkpCisg
ICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlTdHJva2VXaWR0aCwgc3Ry
b2tlV2lkdGgsIENTU1VuaXRUeXBlOjpDU1NfUFgsIGltcG9ydGFudCk7Cit9CisKK3ZvaWQgTWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb25JZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byByZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uID0gbV9t
ZWRpYUVsZW1lbnQtPnJlcXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKTsKKyAgICBpZiAo
IWhhc0NoaWxkTm9kZXMoKSB8fCAhcmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgewor
ICAgICAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgeworICAgICAgICAgICAgaWYg
KCFyZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKQorICAgICAgICAgICAgICAgIGNsZWFy
VGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT5zZXRIaWRkZW4odHJ1ZSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV90ZXh0VHJhY2tSZXByZXNl
bnRhdGlvbikgeworICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOworCisgICAgICAg
IG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24gPSBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbjo6Y3Jl
YXRlKCp0aGlzKTsKKyAgICAgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICAgICAg
bV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi0+c2V0Q29udGVudFNjYWxlKGRvY3VtZW50KCkucGFn
ZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnNldFRl
eHRUcmFja1JlcHJlc2VudGF0aW9uKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24uZ2V0KCkpOwor
ICAgIH0KKworICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNldEhpZGRlbihmYWxzZSk7
Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y2xlYXJU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpCit7CisgICAgaWYgKCFtX3RleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIp
OworCisgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IG51bGxwdHI7CisgICAgaWYgKG1f
bWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0VGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24obnVsbHB0cik7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrU3R5bGUoKQoreworICAgIGlmIChtX3RleHRUcmFj
a1JlcHJlc2VudGF0aW9uKSB7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVBYnNvbHV0ZSk7CisgICAgICAgIHNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS53aWR0
aCgpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eUhlaWdodCwgbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWlnaHQoKSwg
Q1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlMZWZ0LCAwLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgc2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgMCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5UG9zaXRpb24pOworICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlXaWR0aCk7CisgICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhl
aWdodCk7CisgICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQpOwor
ICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3ApOworfQorCit2b2lk
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmVudGVyZWRGdWxsc2NyZWVu
KCkKK3sKKyAgICB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklmTmVlZGVkKCk7CisgICAg
dXBkYXRlU2l6ZXMoRm9yY2VVcGRhdGU6Olllcyk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6ZXhpdGVkRnVsbHNjcmVlbigpCit7CisgICAgY2xlYXJU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpOworICAgIHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlOjpZ
ZXMpOworfQorCitib29sIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVw
ZGF0ZVZpZGVvRGlzcGxheVNpemUoKQoreworICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEludFJlY3QgdmlkZW9Cb3g7CisgICAgaWYgKG1fdGV4dFRy
YWNrUmVwcmVzZW50YXRpb24pIHsKKyAgICAgICAgdmlkZW9Cb3ggPSBtX3RleHRUcmFja1JlcHJl
c2VudGF0aW9uLT5ib3VuZHMoKTsKKyAgICAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBk
b2N1bWVudCgpLnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgdmlkZW9Cb3gu
c2V0V2lkdGgodmlkZW9Cb3gud2lkdGgoKSAqIGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAg
dmlkZW9Cb3guc2V0SGVpZ2h0KHZpZGVvQm94LmhlaWdodCgpICogZGV2aWNlU2NhbGVGYWN0b3Ip
OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghaXM8UmVuZGVyVmlkZW8+KG1fbWVkaWFFbGVt
ZW50LT5yZW5kZXJlcigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdmlk
ZW9Cb3ggPSBkb3duY2FzdDxSZW5kZXJWaWRlbz4oKm1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigp
KS52aWRlb0JveCgpOworICAgIH0KKworICAgIGlmIChtX3ZpZGVvRGlzcGxheVNpemUgPT0gdmlk
ZW9Cb3gpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fdmlkZW9EaXNwbGF5U2l6ZSA9
IHZpZGVvQm94OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlIGZvcmNlKQorewor
ICAgIGlmICghdXBkYXRlVmlkZW9EaXNwbGF5U2l6ZSgpICYmIGZvcmNlICE9IEZvcmNlVXBkYXRl
OjpZZXMpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkgfHwg
IW1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX21lZGlhRWxlbWVudC0+
c3luY1RleHRUcmFja0JvdW5kcygpOworCisgICAgdXBkYXRlQWN0aXZlQ3Vlc0ZvbnRTaXplKCk7
CisgICAgdXBkYXRlVGV4dFN0cm9rZVN0eWxlKCk7CisgICAgZm9yIChhdXRvJiBhY3RpdmVDdWUg
OiBtX21lZGlhRWxlbWVudC0+Y3VycmVudGx5QWN0aXZlQ3VlcygpKQorICAgICAgICBhY3RpdmVD
dWUuZGF0YSgpLT5yZWNhbGN1bGF0ZVN0eWxlcygpOworCisgICAgbV90YXNrUXVldWUuZW5xdWV1
ZVRhc2soW3RoaXNdICgpIHsKKyAgICAgICAgdXBkYXRlRGlzcGxheSgpOworICAgIH0pOworfQor
CitSZWZQdHI8SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNy
ZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2UoKQoreworICAgIGlmICghaGFzQ2hpbGRO
b2RlcygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxGcmFtZT4gZnJh
bWUgPSBkb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworCisgICAgYXV0byog
cmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFyZW5kZXJlci0+aGFzTGF5ZXIoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxS
ZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CisKKyAgICBmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvciA9IDE7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBh
Z2UoKSkKKyAgICAgICAgZGV2aWNlU2NhbGVGYWN0b3IgPSBwYWdlLT5kZXZpY2VTY2FsZUZhY3Rv
cigpOworCisgICAgSW50UmVjdCBwYWludGluZ1JlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGxh
eWVyLT5zaXplKCkpOworCisgICAgLy8gRklYTUUgKDE0OTQyMik6IFRoaXMgYnVmZmVyIHNob3Vs
ZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCisgICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Qu
c2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3Rvcikp
OworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8g
cGFpbnRGbGFncyA9IFJlbmRlckxheWVyOjpwYWludExheWVyUGFpbnRpbmdDb21wb3NpdGluZ0Fs
bFBoYXNlc0ZsYWdzKCk7CisgICAgcGFpbnRGbGFncy5hZGQoUmVuZGVyTGF5ZXI6OlBhaW50TGF5
ZXJUZW1wb3JhcnlDbGlwUmVjdHMpOworICAgIGxheWVyLT5wYWludChidWZmZXItPmNvbnRleHQo
KSwgcGFpbnRpbmdSZWN0LCBMYXlvdXRTaXplKCksIHsgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNv
bXBvc2l0aW5nTGF5ZXJzLCBQYWludEJlaGF2aW9yOjpTbmFwc2hvdHRpbmcgfSwgbnVsbHB0ciwg
cGFpbnRGbGFncyk7CisKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UoV1RG
TW92ZShidWZmZXIpKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50Ojp0ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQoY29uc3QgSW50UmVj
dCYpCit7CisgICAgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCgpOworICAg
IHVwZGF0ZVNpemVzKCk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6aGlkZSgpCit7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eURpc3BsYXksIENTU1ZhbHVlTm9uZSk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6c2hvdygpCit7CisgICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eURpc3BsYXkpOworfQorCitib29sIE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQ6OmlzU2hvd2luZygpIGNvbnN0Cit7CisgICAgY29uc3QgU3R5bGVQcm9w
ZXJ0aWVzKiBwcm9wZXJ0eVNldCA9IGlubGluZVN0eWxlKCk7CisKKyAgICAvLyBGb2xsb3dpbmcg
dGhlIGNvZGUgZnJvbSBzaG93KCkgYW5kIGhpZGUoKSBhYm92ZSwgd2Ugb25seSBoYXZlCisgICAg
Ly8gdG8gY2hlY2sgZm9yIHRoZSBwcmVzZW5zZSBvZiBpbmxpbmUgZGlzcGxheS4KKyAgICByZXR1
cm4gKCFwcm9wZXJ0eVNldCB8fCAhcHJvcGVydHlTZXQtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NT
UHJvcGVydHlEaXNwbGF5KSk7Cit9CisKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorY29u
c3QgTG9nZ2VyJiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojpsb2dnZXIo
KSBjb25zdAoreworICAgIGlmICghbV9sb2dnZXIpCisgICAgICAgIG1fbG9nZ2VyID0gJmRvY3Vt
ZW50KCkubG9nZ2VyKCk7CisKKyAgICByZXR1cm4gKm1fbG9nZ2VyOworfQorCitjb25zdCB2b2lk
KiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojpsb2dJZGVudGlmaWVyKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fbG9nSWRlbnRpZmllciAmJiBtX21lZGlhRWxlbWVudCkKKyAg
ICAgICAgbV9sb2dJZGVudGlmaWVyID0gbV9tZWRpYUVsZW1lbnQtPmxvZ0lkZW50aWZpZXIoKTsK
KworICAgIHJldHVybiBtX2xvZ0lkZW50aWZpZXI7Cit9CisKK1dURkxvZ0NoYW5uZWwmIE1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmxvZ0NoYW5uZWwoKSBjb25zdAorewor
ICAgIHJldHVybiBMb2dNZWRpYTsKK30KKyNlbmRpZiAvLyAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
KworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
VklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjNl
OWVlNTc0M2ZiOTJmOGQ4NTlmMzE3YzIwZjc4YzNlNmRlMjlkMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQuaApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoVklERU8p
CisKKyNpbmNsdWRlICJHZW5lcmljVGFza1F1ZXVlLmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1l
bnQuaCIKKyNpbmNsdWRlICJNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4K
KyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCisKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBWVFRD
dWU7CisKK2NsYXNzIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQgZmluYWwK
KyAgICA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudAorICAgICwgcHVibGljIFRleHRUcmFja1JlcHJl
c2VudGF0aW9uQ2xpZW50CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgLCBwcml2YXRl
IExvZ2dlckhlbHBlcgorI2VuZGlmCit7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVu
dCYsIEhUTUxNZWRpYUVsZW1lbnQmKTsKKworICAgIGVudW0gY2xhc3MgRm9yY2VVcGRhdGUgeyBZ
ZXMsIE5vIH07CisgICAgdm9pZCB1cGRhdGVTaXplcyhGb3JjZVVwZGF0ZSBmb3JjZSA9IEZvcmNl
VXBkYXRlOjpObyk7CisgICAgdm9pZCB1cGRhdGVEaXNwbGF5KCk7CisKKyAgICB2b2lkIHVwZGF0
ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgpOworCisgICAgdm9pZCBlbnRl
cmVkRnVsbHNjcmVlbigpOworICAgIHZvaWQgZXhpdGVkRnVsbHNjcmVlbigpOworCitwcml2YXRl
OgorICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQoRG9j
dW1lbnQmLCBIVE1MTWVkaWFFbGVtZW50Jik7CisKKyAgICAvLyBFbGVtZW50CisgICAgUmVuZGVy
UHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBj
b25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBvdmVycmlkZTsKKworICAgIC8vIFRleHRUcmFja1Jl
cHJlc2VudGF0aW9uQ2xpZW50CisgICAgUmVmUHRyPEltYWdlPiBjcmVhdGVUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbkltYWdlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCB0ZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkJvdW5kc0NoYW5nZWQoY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCB1
cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklmTmVlZGVkKCk7CisgICAgdm9pZCBjbGVhclRl
eHRUcmFja1JlcHJlc2VudGF0aW9uKCk7CisKKyAgICBib29sIHVwZGF0ZVZpZGVvRGlzcGxheVNp
emUoKTsKKyAgICB2b2lkIHVwZGF0ZUFjdGl2ZUN1ZXNGb250U2l6ZSgpOworICAgIHZvaWQgdXBk
YXRlVGV4dFN0cm9rZVN0eWxlKCk7CisgICAgdm9pZCBwcm9jZXNzQWN0aXZlVlRUQ3VlKFZUVEN1
ZSYpOworICAgIHZvaWQgdXBkYXRlVGV4dFRyYWNrU3R5bGUoKTsKKworICAgIHZvaWQgaGlkZSgp
OworICAgIHZvaWQgc2hvdygpOworICAgIGJvb2wgaXNTaG93aW5nKCkgY29uc3Q7CisKKyNpZiAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZp
bmFsOworICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbDsKKyAgICBX
VEZMb2dDaGFubmVsJiBsb2dDaGFubmVsKCkgY29uc3QgZmluYWw7CisgICAgY29uc3QgY2hhciog
bG9nQ2xhc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIk1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQiOyB9CisgICAgbXV0YWJsZSBSZWZQdHI8TG9nZ2VyPiBtX2xvZ2dl
cjsKKyAgICBtdXRhYmxlIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsK
KyNlbmRpZgorCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHRUcmFja1JlcHJlc2VudGF0aW9uPiBt
X3RleHRUcmFja1JlcHJlc2VudGF0aW9uOworCisgICAgR2VuZXJpY1Rhc2tRdWV1ZTxUaW1lcj4g
bV90YXNrUXVldWU7CisgICAgV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21lZGlhRWxlbWVu
dDsKKyAgICBJbnRSZWN0IG1fdmlkZW9EaXNwbGF5U2l6ZTsKKyAgICBpbnQgbV9mb250U2l6ZSB7
IDAgfTsKKyAgICBib29sIG1fZm9udFNpemVJc0ltcG9ydGFudCB7IGZhbHNlIH07CisgICAgYm9v
bCBtX25lZWRzR2VuZXJhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiB7IGZhbHNlIH07Cit9Owor
CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFZJ
REVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk5MjdiOTdiZmU2ZDI5ZTllNGY4NDc0NzQ2N2Qy
YjQyNTRjMzYzZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDQzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUo
VklERU8pCi0jaW5jbHVkZSAiTWVkaWFDb250cm9scy5oIgotCi0jaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgotI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAi
U2V0dGluZ3MuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChNZWRpYUNvbnRyb2xz
KTsKLQotTWVkaWFDb250cm9sczo6TWVkaWFDb250cm9scyhEb2N1bWVudCYgZG9jdW1lbnQpCi0g
ICAgOiBIVE1MRGl2RWxlbWVudChIVE1MTmFtZXM6OmRpdlRhZywgZG9jdW1lbnQpCi0gICAgLCBt
X21lZGlhQ29udHJvbGxlcigwKQotICAgICwgbV9wYW5lbCgwKQotI2lmIEVOQUJMRShWSURFT19U
UkFDSykKLSAgICAsIG1fdGV4dERpc3BsYXlDb250YWluZXIoMCkKLSNlbmRpZgotICAgICwgbV9w
bGF5QnV0dG9uKDApCi0gICAgLCBtX2N1cnJlbnRUaW1lRGlzcGxheSgwKQotICAgICwgbV90aW1l
bGluZSgwKQotICAgICwgbV9wYW5lbE11dGVCdXR0b24oMCkKLSAgICAsIG1fdm9sdW1lU2xpZGVy
KDApCi0gICAgLCBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKDApCi0gICAgLCBtX2Z1bGxT
Y3JlZW5CdXR0b24oMCkKLSAgICAsIG1faGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCp0aGlz
LCAmTWVkaWFDb250cm9sczo6aGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyRmlyZWQpCi0gICAg
LCBtX2lzRnVsbHNjcmVlbihmYWxzZSkKLSAgICAsIG1faXNNb3VzZU92ZXJDb250cm9scyhmYWxz
ZSkKLXsKLSAgICBzZXRQc2V1ZG8oQXRvbVN0cmluZygiLXdlYmtpdC1tZWRpYS1jb250cm9scyIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250
cm9sczo6c2V0TWVkaWFDb250cm9sbGVyKE1lZGlhQ29udHJvbGxlckludGVyZmFjZSogY29udHJv
bGxlcikKLXsKLSAgICBpZiAobV9tZWRpYUNvbnRyb2xsZXIgPT0gY29udHJvbGxlcikKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fbWVkaWFDb250cm9sbGVyID0gY29udHJvbGxlcjsKLQotICAgIGlm
IChtX3BhbmVsKQotICAgICAgICBtX3BhbmVsLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxl
cik7Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFp
bmVyKQotICAgICAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5zZXRNZWRpYUNvbnRyb2xsZXIo
Y29udHJvbGxlcik7Ci0jZW5kaWYKLSAgICBpZiAobV9wbGF5QnV0dG9uKQotICAgICAgICBtX3Bs
YXlCdXR0b24tPnNldE1lZGlhQ29udHJvbGxlcihjb250cm9sbGVyKTsKLSAgICBpZiAobV9jdXJy
ZW50VGltZURpc3BsYXkpCi0gICAgICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5zZXRNZWRpYUNv
bnRyb2xsZXIoY29udHJvbGxlcik7Ci0gICAgaWYgKG1fdGltZWxpbmUpCi0gICAgICAgIG1fdGlt
ZWxpbmUtPnNldE1lZGlhQ29udHJvbGxlcihjb250cm9sbGVyKTsKLSAgICBpZiAobV9wYW5lbE11
dGVCdXR0b24pCi0gICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5zZXRNZWRpYUNvbnRyb2xsZXIo
Y29udHJvbGxlcik7Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyKQotICAgICAgICBtX3ZvbHVtZVNs
aWRlci0+c2V0TWVkaWFDb250cm9sbGVyKGNvbnRyb2xsZXIpOwotICAgIGlmIChtX3RvZ2dsZUNs
b3NlZENhcHRpb25zQnV0dG9uKQotICAgICAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9u
LT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0gICAgaWYgKG1fZnVsbFNjcmVlbkJ1
dHRvbikKLSAgICAgICAgbV9mdWxsU2NyZWVuQnV0dG9uLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29u
dHJvbGxlcik7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6cmVzZXQoKQotewotICAgIG1fcGxh
eUJ1dHRvbi0+dXBkYXRlRGlzcGxheVR5cGUoKTsKLQotICAgIHVwZGF0ZUN1cnJlbnRUaW1lRGlz
cGxheSgpOwotCi0gICAgZG91YmxlIGR1cmF0aW9uID0gbV9tZWRpYUNvbnRyb2xsZXItPmR1cmF0
aW9uKCk7Ci0gICAgaWYgKHN0ZDo6aXNmaW5pdGUoZHVyYXRpb24pIHx8IFJlbmRlclRoZW1lOjpz
aW5nbGV0b24oKS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoTWVkaWFTbGlkZXJQYXJ0
KSkgewotICAgICAgICBtX3RpbWVsaW5lLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gICAgICAg
IG1fdGltZWxpbmUtPnNldFBvc2l0aW9uKG1fbWVkaWFDb250cm9sbGVyLT5jdXJyZW50VGltZSgp
KTsKLSAgICB9Ci0KLSAgICBpZiAobV9tZWRpYUNvbnRyb2xsZXItPmhhc0F1ZGlvKCkgfHwgUmVu
ZGVyVGhlbWU6OnNpbmdsZXRvbigpLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRp
YU11dGVCdXR0b25QYXJ0KSkKLSAgICAgICAgbV9wYW5lbE11dGVCdXR0b24tPnNob3coKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7Ci0KLSAgICBpZiAobV92
b2x1bWVTbGlkZXIpIHsKLSAgICAgICAgaWYgKCFtX21lZGlhQ29udHJvbGxlci0+aGFzQXVkaW8o
KSkKLSAgICAgICAgICAgIG1fdm9sdW1lU2xpZGVyLT5oaWRlKCk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgbV92b2x1bWVTbGlkZXItPnNob3coKTsKLSAgICAgICAgICAgIHNldFNsaWRl
clZvbHVtZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVmcmVzaENsb3NlZENhcHRpb25z
QnV0dG9uVmlzaWJpbGl0eSgpOwotCi0gICAgaWYgKG1fZnVsbFNjcmVlbkJ1dHRvbikgewotICAg
ICAgICBpZiAobV9tZWRpYUNvbnRyb2xsZXItPnN1cHBvcnRzRnVsbHNjcmVlbihIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkgJiYgbV9tZWRpYUNvbnRy
b2xsZXItPmhhc1ZpZGVvKCkpCi0gICAgICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPnNob3co
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9mdWxsU2NyZWVuQnV0dG9uLT5oaWRlKCk7
Ci0gICAgfQotCi0gICAgbWFrZU9wYXF1ZSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnJl
cG9ydGVkRXJyb3IoKQotewotICAgIGF1dG8mIHRoZW1lID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRv
bigpOwotICAgIGlmICghdGhlbWUuaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKE1lZGlh
TXV0ZUJ1dHRvblBhcnQpKSB7Ci0gICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7Ci0g
ICAgICAgIG1fdm9sdW1lU2xpZGVyLT5oaWRlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1fdG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b24gJiYgIXRoZW1lLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGlu
Z0ZvcihNZWRpYVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uUGFydCkpCi0gICAgICAgIG1fdG9n
Z2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPmhpZGUoKTsKLQotICAgIGlmIChtX2Z1bGxTY3JlZW5C
dXR0b24gJiYgIXRoZW1lLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYUVudGVy
RnVsbHNjcmVlbkJ1dHRvblBhcnQpKQotICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPmhpZGUo
KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpsb2FkZWRNZXRhZGF0YSgpCi17Ci0gICAgcmVz
ZXQoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpzaG93KCkKLXsKLSAgICBtYWtlT3BhcXVl
KCk7Ci0gICAgbV9wYW5lbC0+c2V0SXNEaXNwbGF5ZWQodHJ1ZSk7Ci0gICAgbV9wYW5lbC0+c2hv
dygpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmhpZGUoKQotewotICAgIG1fcGFuZWwtPnNl
dElzRGlzcGxheWVkKGZhbHNlKTsKLSAgICBtX3BhbmVsLT5oaWRlKCk7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sczo6bWFrZU9wYXF1ZSgpCi17Ci0gICAgbV9wYW5lbC0+bWFrZU9wYXF1ZSgpOwot
fQotCi12b2lkIE1lZGlhQ29udHJvbHM6Om1ha2VUcmFuc3BhcmVudCgpCi17Ci0gICAgbV9wYW5l
bC0+bWFrZVRyYW5zcGFyZW50KCk7Ci19Ci0KLWJvb2wgTWVkaWFDb250cm9sczo6c2hvdWxkSGlk
ZUNvbnRyb2xzKCkKLXsKLSAgICByZXR1cm4gIW1fcGFuZWwtPmhvdmVyZWQoKTsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xzOjpidWZmZXJpbmdQcm9ncmVzc2VkKCkKLXsKLSAgICAvLyBXZSBvbmx5
IG5lZWQgdG8gdXBkYXRlIGJ1ZmZlcmluZyBwcm9ncmVzcyB3aGVuIHBhdXNlZCwgZHVyaW5nIG5v
cm1hbAotICAgIC8vIHBsYXliYWNrIHBsYXliYWNrUHJvZ3Jlc3NlZCgpIHdpbGwgdGFrZSBjYXJl
IG9mIGl0LgotICAgIGlmIChtX21lZGlhQ29udHJvbGxlci0+cGF1c2VkKCkpCi0gICAgICAgIG1f
dGltZWxpbmUtPnNldFBvc2l0aW9uKG1fbWVkaWFDb250cm9sbGVyLT5jdXJyZW50VGltZSgpKTsK
LX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpwbGF5YmFja1N0YXJ0ZWQoKQotewotICAgIG1fcGxh
eUJ1dHRvbi0+dXBkYXRlRGlzcGxheVR5cGUoKTsKLSAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlv
bihtX21lZGlhQ29udHJvbGxlci0+Y3VycmVudFRpbWUoKSk7Ci0gICAgdXBkYXRlQ3VycmVudFRp
bWVEaXNwbGF5KCk7Ci0KLSAgICBpZiAobV9pc0Z1bGxzY3JlZW4pCi0gICAgICAgIHN0YXJ0SGlk
ZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6cGxh
eWJhY2tQcm9ncmVzc2VkKCkKLXsKLSAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlvbihtX21lZGlh
Q29udHJvbGxlci0+Y3VycmVudFRpbWUoKSk7Ci0gICAgdXBkYXRlQ3VycmVudFRpbWVEaXNwbGF5
KCk7Ci0KLSAgICBpZiAoIW1faXNNb3VzZU92ZXJDb250cm9scyAmJiBtX21lZGlhQ29udHJvbGxl
ci0+aGFzVmlkZW8oKSkKLSAgICAgICAgbWFrZVRyYW5zcGFyZW50KCk7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sczo6cGxheWJhY2tTdG9wcGVkKCkKLXsKLSAgICBtX3BsYXlCdXR0b24tPnVwZGF0
ZURpc3BsYXlUeXBlKCk7Ci0gICAgbV90aW1lbGluZS0+c2V0UG9zaXRpb24obV9tZWRpYUNvbnRy
b2xsZXItPmN1cnJlbnRUaW1lKCkpOwotICAgIHVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwot
ICAgIG1ha2VPcGFxdWUoKTsKLQotICAgIHN0b3BIaWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXIo
KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKQot
ewotICAgIGRvdWJsZSBub3cgPSBtX21lZGlhQ29udHJvbGxlci0+Y3VycmVudFRpbWUoKTsKLSAg
ICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+c2V0SW5uZXJUZXh0KFJlbmRlclRoZW1lOjpzaW5nbGV0
b24oKS5mb3JtYXRNZWRpYUNvbnRyb2xzVGltZShub3cpKTsKLSAgICBtX2N1cnJlbnRUaW1lRGlz
cGxheS0+c2V0Q3VycmVudFZhbHVlKG5vdyk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6c2hv
d1ZvbHVtZVNsaWRlcigpCi17Ci0gICAgaWYgKCFtX21lZGlhQ29udHJvbGxlci0+aGFzQXVkaW8o
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV92b2x1bWVTbGlkZXItPnNob3coKTsKLX0KLQot
dm9pZCBNZWRpYUNvbnRyb2xzOjpjaGFuZ2VkTXV0ZSgpCi17Ci0gICAgbV9wYW5lbE11dGVCdXR0
b24tPmNoYW5nZWRNdXRlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdlZFZvbHVt
ZSgpCi17Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyKQotICAgICAgICBzZXRTbGlkZXJWb2x1bWUo
KTsKLSAgICBpZiAobV9wYW5lbE11dGVCdXR0b24gJiYgbV9wYW5lbE11dGVCdXR0b24tPnJlbmRl
cmVyKCkpCi0gICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5yZW5kZXJlcigpLT5yZXBhaW50KCk7
Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0
eSgpCi17Ci0gICAgaWYgKG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pCi0gICAgICAgIG1f
dG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7Ci19Ci0KLXZv
aWQgTWVkaWFDb250cm9sczo6cmVmcmVzaENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJpbGl0eSgp
Ci17Ci0gICAgaWYgKCFtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9tZWRpYUNvbnRyb2xsZXItPmhhc0Nsb3NlZENhcHRpb25zKCkpCi0g
ICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPnNob3coKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPmhpZGUoKTsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xzOjpjbG9zZWRDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpCi17Ci0gICAgcmVmcmVz
aENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJpbGl0eSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJv
bHM6OmVudGVyZWRGdWxsc2NyZWVuKCkKLXsKLSAgICBtX2lzRnVsbHNjcmVlbiA9IHRydWU7Ci0g
ICAgbV9mdWxsU2NyZWVuQnV0dG9uLT5zZXRJc0Z1bGxzY3JlZW4odHJ1ZSk7Ci0KLSAgICBpZiAo
UGFnZSogcGFnZSA9IGRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICBwYWdlLT5jaHJvbWUoKS5z
ZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXModHJ1ZSk7Ci0KLSAgICBzdGFydEhpZGVGdWxs
c2NyZWVuQ29udHJvbHNUaW1lcigpOwotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBpZiAo
bV90ZXh0RGlzcGxheUNvbnRhaW5lcikKLSAgICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+
ZW50ZXJlZEZ1bGxzY3JlZW4oKTsKLSNlbmRpZgotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmV4
aXRlZEZ1bGxzY3JlZW4oKQotewotICAgIG1faXNGdWxsc2NyZWVuID0gZmFsc2U7Ci0gICAgbV9m
dWxsU2NyZWVuQnV0dG9uLT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwotICAgIHN0b3BIaWRlRnVs
bHNjcmVlbkNvbnRyb2xzVGltZXIoKTsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgaWYg
KG1fdGV4dERpc3BsYXlDb250YWluZXIpCi0gICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXIt
PmV4aXRlZEZ1bGxzY3JlZW4oKTsKLSNlbmRpZgotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQotewotICAgIEhUTUxEaXZFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7Ci0gICAgICAgIGlmICghY29udGFpbnNSZWxhdGVk
VGFyZ2V0KGV2ZW50KSkgewotICAgICAgICAgICAgbV9pc01vdXNlT3ZlckNvbnRyb2xzID0gdHJ1
ZTsKLSAgICAgICAgICAgIGlmICghbV9tZWRpYUNvbnRyb2xsZXItPmNhblBsYXkoKSkgewotICAg
ICAgICAgICAgICAgIG1ha2VPcGFxdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoc2hvdWxkSGlk
ZUNvbnRyb2xzKCkpCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0SGlkZUZ1bGxzY3JlZW5Db250
cm9sc1RpbWVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZl
bnQpIHsKLSAgICAgICAgaWYgKCFjb250YWluc1JlbGF0ZWRUYXJnZXQoZXZlbnQpKSB7Ci0gICAg
ICAgICAgICBtX2lzTW91c2VPdmVyQ29udHJvbHMgPSBmYWxzZTsKLSAgICAgICAgICAgIHN0b3BI
aWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXIoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3Zl
RXZlbnQpIHsKLSAgICAgICAgaWYgKG1faXNGdWxsc2NyZWVuKSB7Ci0gICAgICAgICAgICAvLyBX
aGVuIHdlIGdldCBhIG1vdXNlIG1vdmUgaW4gZnVsbHNjcmVlbiBtb2RlLCBzaG93IHRoZSBtZWRp
YSBjb250cm9scywgYW5kIHN0YXJ0IGEgdGltZXIKLSAgICAgICAgICAgIC8vIHRoYXQgd2lsbCBo
aWRlIHRoZSBtZWRpYSBjb250cm9scyBhZnRlciBhIDMgc2Vjb25kcyB3aXRob3V0IGEgbW91c2Ug
bW92ZS4KLSAgICAgICAgICAgIG1ha2VPcGFxdWUoKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRI
aWRlQ29udHJvbHMoKSkKLSAgICAgICAgICAgICAgICBzdGFydEhpZGVGdWxsc2NyZWVuQ29udHJv
bHNUaW1lcigpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQg
TWVkaWFDb250cm9sczo6aGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyRmlyZWQoKQotewotICAg
IGlmIChtX21lZGlhQ29udHJvbGxlci0+cGF1c2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghbV9pc0Z1bGxzY3JlZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2hvdWxk
SGlkZUNvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChQYWdlKiBwYWdlID0g
ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLnNldEN1cnNvckhpZGRl
blVudGlsTW91c2VNb3Zlcyh0cnVlKTsKLQotICAgIG1ha2VUcmFuc3BhcmVudCgpOwotfQotCi12
b2lkIE1lZGlhQ29udHJvbHM6OnN0YXJ0SGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCkKLXsK
LSAgICBpZiAoIW1faXNGdWxsc2NyZWVuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlKiBw
YWdlID0gZG9jdW1lbnQoKS5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2hpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lci5zdGFydE9uZVNob3QocGFnZS0+
c2V0dGluZ3MoKS50aW1lV2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVIaWRpbmdDb250cm9scygp
KTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpzdG9wSGlkZUZ1bGxzY3JlZW5Db250cm9sc1Rp
bWVyKCkKLXsKLSAgICBtX2hpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lci5zdG9wKCk7Ci19Ci0K
LWJvb2wgTWVkaWFDb250cm9sczo6Y29udGFpbnNSZWxhdGVkVGFyZ2V0KEV2ZW50JiBldmVudCkK
LXsKLSAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGF1dG8gcmVsYXRlZFRhcmdldCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KS5y
ZWxhdGVkVGFyZ2V0KCk7Ci0gICAgcmV0dXJuIGlzPE5vZGU+KHJlbGF0ZWRUYXJnZXQpICYmIGNv
bnRhaW5zKCZkb3duY2FzdDxOb2RlPigqcmVsYXRlZFRhcmdldCkpOwotfQotCi0jaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVRleHRUcmFja0Rpc3Bs
YXkoKQotewotICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvIHRleHREaXNwbGF5Q29udGFpbmVyID0gTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgIG1fdGV4dERpc3BsYXlD
b250YWluZXIgPSB0ZXh0RGlzcGxheUNvbnRhaW5lci5wdHIoKTsKLQotICAgIGlmIChtX21lZGlh
Q29udHJvbGxlcikKLSAgICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+c2V0TWVkaWFDb250
cm9sbGVyKG1fbWVkaWFDb250cm9sbGVyKTsKLQotICAgIC8vIEluc2VydCBpdCBiZWZvcmUgdGhl
IGZpcnN0IGNvbnRyb2xsZXIgZWxlbWVudCBzbyBpdCBhbHdheXMgZGlzcGxheXMgYmVoaW5kIHRo
ZSBjb250cm9scy4KLSAgICBpbnNlcnRCZWZvcmUodGV4dERpc3BsYXlDb250YWluZXIsIG1fcGFu
ZWwpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnNob3dUZXh0VHJhY2tEaXNwbGF5KCkKLXsK
LSAgICBpZiAoIW1fdGV4dERpc3BsYXlDb250YWluZXIpCi0gICAgICAgIGNyZWF0ZVRleHRUcmFj
a0Rpc3BsYXkoKTsKLSAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5zaG93KCk7Ci19Ci0KLXZv
aWQgTWVkaWFDb250cm9sczo6aGlkZVRleHRUcmFja0Rpc3BsYXkoKQotewotICAgIGlmICghbV90
ZXh0RGlzcGxheUNvbnRhaW5lcikKLSAgICAgICAgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOwot
ICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPmhpZGUoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRy
b2xzOjp1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCkKLXsKLSAgICBpZiAoIW1fdGV4dERpc3BsYXlD
b250YWluZXIpCi0gICAgICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKLQotICAgIG1fdGV4
dERpc3BsYXlDb250YWluZXItPnVwZGF0ZURpc3BsYXkoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRy
b2xzOjp0ZXh0VHJhY2tQcmVmZXJlbmNlc0NoYW5nZWQoKQotewotICAgIGNsb3NlZENhcHRpb25U
cmFja3NDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdGV4dERpc3BsYXlDb250YWluZXIpCi0gICAgICAg
IG1fdGV4dERpc3BsYXlDb250YWluZXItPnVwZGF0ZVNpemVzKE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6OkZvcmNlVXBkYXRlOjpZZXMpOwotfQotCi12b2lkIE1lZGlhQ29u
dHJvbHM6OmNsZWFyVGV4dERpc3BsYXlDb250YWluZXIoKQotewotICAgIGlmIChtX3RleHREaXNw
bGF5Q29udGFpbmVyKQotICAgICAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5yZW1vdmVDaGls
ZHJlbigpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uSW1hZ2VJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fdGV4dERpc3BsYXlDb250YWluZXIp
Ci0gICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPnVwZGF0ZVRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uSW1hZ2VJZk5lZWRlZCgpOwotfQotCi0jZW5kaWYKLQotdm9pZCBNZWRpYUNvbnRyb2xz
OjpzZXRTbGlkZXJWb2x1bWUoKQotewotICAgIG1fdm9sdW1lU2xpZGVyLT5zZXRWb2x1bWUobV9t
ZWRpYUNvbnRyb2xsZXItPm11dGVkKCkgPyAwLjAgOiBtX21lZGlhQ29udHJvbGxlci0+dm9sdW1l
KCkpOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9scy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9scy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmJjYjU3NGIyZjBhMjM5
MjhlZThjMTc5ODY1Nzk5NWNmN2JkOTU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVO
QUJMRShWSURFTykKLQotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkhUTUxEaXZFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFz
cyBFdmVudDsKLWNsYXNzIE1lZGlhUGxheWVyOwotY2xhc3MgUmVuZGVyQm94OwotY2xhc3MgUmVu
ZGVyTWVkaWE7Ci0KLS8vIEFuIGFic3RyYWN0IGNsYXNzIHdpdGggdGhlIG1lZGlhIGNvbnRyb2wg
ZWxlbWVudHMgdGhhdCBhbGwgcG9ydHMgc3VwcG9ydC4KLWNsYXNzIE1lZGlhQ29udHJvbHMgOiBw
dWJsaWMgSFRNTERpdkVsZW1lbnQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTWVkaWFD
b250cm9scyk7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+TWVkaWFDb250cm9scygpID0gZGVmYXVs
dDsKLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdG8gYmUgaW1wbGVtZW50ZWQgaW4geW91ciBw
b3J0LXNwZWNpZmljIG1lZGlhCi0gICAgLy8gY29udHJvbHMgaW1wbGVtZW50YXRpb24gc2luY2Ug
aXQgd2lsbCByZXR1cm4gYSBjaGlsZCBpbnN0YW5jZS4KLSAgICBzdGF0aWMgUmVmUHRyPE1lZGlh
Q29udHJvbHM+IHRyeUNyZWF0ZShEb2N1bWVudCYpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldE1l
ZGlhQ29udHJvbGxlcihNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqKTsKLQotICAgIHZpcnR1YWwg
dm9pZCByZXNldCgpOwotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRlZEVycm9yKCk7Ci0gICAgdmly
dHVhbCB2b2lkIGxvYWRlZE1ldGFkYXRhKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwot
ICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIG1ha2VPcGFxdWUoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgbWFrZVRyYW5zcGFyZW50KCk7Ci0gICAgdmlydHVhbCBib29sIHNo
b3VsZEhpZGVDb250cm9scygpOwotCi0gICAgdmlydHVhbCB2b2lkIGJ1ZmZlcmluZ1Byb2dyZXNz
ZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGxheWJhY2tTdGFydGVkKCk7Ci0gICAgdmlydHVhbCB2
b2lkIHBsYXliYWNrUHJvZ3Jlc3NlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBwbGF5YmFja1N0b3Bw
ZWQoKTsKLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0dXNEaXNwbGF5KCkgeyB9OwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2hvd1ZvbHVtZVNsaWRlcigpOwotCi0gICAgdmlydHVhbCB2b2lkIGNoYW5nZWRNdXRlKCk7
Ci0gICAgdmlydHVhbCB2b2lkIGNoYW5nZWRWb2x1bWUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBj
aGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlZnJl
c2hDbG9zZWRDYXB0aW9uc0J1dHRvblZpc2liaWxpdHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdG9n
Z2xlQ2xvc2VkQ2FwdGlvblRyYWNrTGlzdCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjbG9zZWRD
YXB0aW9uVHJhY2tzQ2hhbmdlZCgpOwotCi0gICAgdmlydHVhbCB2b2lkIGVudGVyZWRGdWxsc2Ny
ZWVuKCk7Ci0gICAgdmlydHVhbCB2b2lkIGV4aXRlZEZ1bGxzY3JlZW4oKTsKLQotI2lmICFQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50cygp
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIGhp
ZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lckZpcmVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0
SGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BIaWRl
RnVsbHNjcmVlbkNvbnRyb2xzVGltZXIoKTsKLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9p
ZCBzaG93VGV4dFRyYWNrRGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlVGV4dFRyYWNr
RGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHRleHRUcmFja1ByZWZlcmVuY2VzQ2hhbmdlZCgpOwotICAgIHZpcnR1
YWwgdm9pZCBjbGVhclRleHREaXNwbGF5Q29udGFpbmVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgpOwotI2VuZGlmCi0KLXBy
b3RlY3RlZDoKLSAgICBleHBsaWNpdCBNZWRpYUNvbnRyb2xzKERvY3VtZW50Jik7Ci0KLSAgICB2
b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwg
Ym9vbCBjb250YWluc1JlbGF0ZWRUYXJnZXQoRXZlbnQmKTsKLQotICAgIHZvaWQgc2V0U2xpZGVy
Vm9sdW1lKCk7Ci0KLSAgICBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqIG1fbWVkaWFDb250cm9s
bGVyOwotCi0gICAgLy8gQ29udGFpbmVyIGZvciB0aGUgbWVkaWEgY29udHJvbCBlbGVtZW50cy4K
LSAgICBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQqIG1fcGFuZWw7Ci0KLSAgICAvLyBDb250YWlu
ZXIgZm9yIHRoZSB0ZXh0IHRyYWNrIGN1ZXMuCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAg
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQqIG1fdGV4dERpc3BsYXlDb250
YWluZXI7Ci0jZW5kaWYKLQotICAgIC8vIE1lZGlhIGNvbnRyb2wgZWxlbWVudHMuCi0gICAgTWVk
aWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQqIG1fcGxheUJ1dHRvbjsKLSAgICBNZWRpYUNvbnRy
b2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50KiBtX2N1cnJlbnRUaW1lRGlzcGxheTsKLSAgICBN
ZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQqIG1fdGltZWxpbmU7Ci0gICAgTWVkaWFDb250cm9s
UGFuZWxNdXRlQnV0dG9uRWxlbWVudCogbV9wYW5lbE11dGVCdXR0b247Ci0gICAgTWVkaWFDb250
cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50KiBtX3ZvbHVtZVNsaWRlcjsKLSAgICBNZWRpYUNv
bnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQqIG1fdG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b247Ci0gICAgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQqIG1f
ZnVsbFNjcmVlbkJ1dHRvbjsKLQotICAgIFRpbWVyIG1faGlkZUZ1bGxzY3JlZW5Db250cm9sc1Rp
bWVyOwotICAgIGJvb2wgbV9pc0Z1bGxzY3JlZW47Ci0gICAgYm9vbCBtX2lzTW91c2VPdmVyQ29u
dHJvbHM7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBpc01lZGlhQ29udHJvbHMoKSBjb25zdCBmaW5h
bCB7IHJldHVybiB0cnVlOyB9Ci19OwotCi1pbmxpbmUgTWVkaWFDb250cm9scyogdG9NZWRpYUNv
bnRyb2xzKE5vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIW5vZGUgfHwgbm9kZS0+aXNNZWRpYUNvbnRyb2xzKCkpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxNZWRpYUNvbnRyb2xzKj4obm9kZSk7Ci19Ci0KLS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlv
bmUgZG9pbmcgYW4gdW5uZWNjZXNzYXJ5IGNhc3QuCi12b2lkIHRvTWVkaWFDb250cm9scyhjb25z
dCBNZWRpYUNvbnRyb2xzKik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShWSURFTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNl
clByZWZlcmVuY2VzTWVkaWFBRi5jcHAKaW5kZXggM2Q4Y2Y0ZmI4Zjc3ZmU4MGIzZmI0NGNkN2Vl
OWQ3OWE4NTI0NWMxMi4uMmI1MjQyN2Q3ODAyOGQ0ZGNjNjU4NGFjNzk5ZDc3YzE5OWYyNjgwYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVk
aWFBRi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWVkaWFBRi5jcHAKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50
LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
LSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgogI2luY2x1ZGUgIlRleHRUcmFja0xp
c3QuaCIKICNpbmNsdWRlICJVc2VyU3R5bGVTaGVldFR5cGVzLmgiCiAjaW5jbHVkZSA8YWxnb3Jp
dGhtPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggZmNkZWViODQyNTlkZGM3YTQ4NTU1ODJhYjg5YmM3
OGZhNTI2YWY2Ni4uMzc1NDYxYzMxOTljZGRhZTI4ZDUyNjhmMjE4OWExMzM0ZTJjYWY2ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCkBAIC0xMDc3LDE1ICsxMDc3LDExIEBAIHZvaWQgUGFnZTo6c2V0UGFn
ZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBib29sIGlu
U3RhYmxlCiAjZW5kaWYKICAgICB9CiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBU
KQogICAgIGlmIChpblN0YWJsZVN0YXRlKSB7CiAgICAgICAgIGZvckVhY2hNZWRpYUVsZW1lbnQo
W10gKEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpIHsKICAgICAgICAgICAgIGVsZW1lbnQucGFn
ZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwogICAgICAgICB9KTsKICAgICB9Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShpblN0YWJsZVN0YXRlKTsKLSNlbmRpZgogfQogCiB2b2lkIFBhZ2U6OnNldERl
bGVnYXRlc1NjYWxpbmcoYm9vbCBkZWxlZ2F0ZXNTY2FsaW5nKQpAQCAtMTEzMiwxMSArMTEyOCw5
IEBAIHZvaWQgUGFnZTo6c2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbihVc2VySW50ZXJm
YWNlTGF5b3V0RGlyZWN0aW9uIHVzZXJJbnRlCiAKICAgICBtX3VzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24gPSB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOwogCi0jaWYgRU5BQkxFKE1F
RElBX0NPTlRST0xTX1NDUklQVCkKICAgICBmb3JFYWNoTWVkaWFFbGVtZW50KFtdIChIVE1MTWVk
aWFFbGVtZW50JiBlbGVtZW50KSB7CiAgICAgICAgIGVsZW1lbnQudXNlckludGVyZmFjZUxheW91
dERpcmVjdGlvbkNoYW5nZWQoKTsKICAgICB9KTsKLSNlbmRpZgogfQogCiAjaWYgRU5BQkxFKFZJ
REVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29u
dHJvbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Njk2NjM2MGRiOWE5ZThmMTk3YjIx
ZjYwOTMxYzg2NWFkYjY4MDlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyTWVkaWFDb250cm9scy5oIgotCi0jaWYgRU5BQkxFKFZJ
REVPKQotCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlICJSZW5k
ZXJMYXlvdXRTdGF0ZS5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlck1lZGlhVm9s
dW1lU2xpZGVyQ29udGFpbmVyKTsKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChSZW5kZXJN
ZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lcik7Ci0KLVJlbmRlck1lZGlhVm9sdW1lU2xpZGVy
Q29udGFpbmVyOjpSZW5kZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihFbGVtZW50JiBlbGVt
ZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQotICAgIDogUmVuZGVyQmxvY2tGbG93KGVsZW1lbnQs
IFdURk1vdmUoc3R5bGUpKQotewotfQotCi12b2lkIFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29u
dGFpbmVyOjpsYXlvdXQoKQotewotICAgIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0KCk7Ci0KLSAg
ICBpZiAoc3R5bGUoKS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6Ok5vbmUgfHwgIWlzPFJlbmRl
ckJveD4obmV4dFNpYmxpbmcoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckJveCYg
YnV0dG9uQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqbmV4dFNpYmxpbmcoKSk7Ci0gICAgaW50
IGFic29sdXRlT2Zmc2V0VG9wID0gYnV0dG9uQm94LmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50
KDAsIC1zaXplKCkuaGVpZ2h0KCkpKS55KCk7Ci0KLSAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxh
eW91dFN0YXRlRGlzYWJsZXIodmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKSk7Ci0K
LSAgICAvLyBJZiB0aGUgc2xpZGVyIHdvdWxkIGJlIHJlbmRlcmVkIG91dHNpZGUgdGhlIHBhZ2Us
IGl0IHNob3VsZCBiZSBtb3ZlZCBiZWxvdyB0aGUgY29udHJvbHMuCi0gICAgaWYgKFVOTElLRUxZ
KGFic29sdXRlT2Zmc2V0VG9wIDwgMCkpCi0gICAgICAgIHNldFkoYnV0dG9uQm94Lm9mZnNldFRv
cCgpICsgdGhlbWUoKS52b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihidXR0b25Cb3gs
IHNpemUoKSkueSgpKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1S
ZW5kZXJNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lcjo6UmVuZGVyTWVkaWFDb250cm9sVGlt
ZWxpbmVDb250YWluZXIoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKLSAg
ICA6IFJlbmRlckZsZXhpYmxlQm94KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQotewotfQotCi0v
LyBXZSB3YW50IHRoZSB0aW1lbGluZSBzbGlkZXIgdG8gYmUgYXQgbGVhc3QgMTAwIHBpeGVscyB3
aWRlLgotLy8gRklYTUU6IEVsaW1pbmF0ZSBoYXJkLWNvZGVkIHdpZHRocyBhbHRvZ2V0aGVyLgot
c3RhdGljIGNvbnN0IGludCBtaW5XaWR0aFRvRGlzcGxheVRpbWVEaXNwbGF5cyA9IDQ1ICsgMTAw
ICsgNDU7Ci0KLXZvaWQgUmVuZGVyTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXI6OmxheW91
dCgpCi17Ci0gICAgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dCgpOwotCi0gICAgTGF5b3V0U3Rh
dGVEaXNhYmxlciBsYXlvdXRTdGF0ZURpc2FibGVyKHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRD
b250ZXh0KCkpOwotICAgIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudCogY29u
dGFpbmVyID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50
Kj4oZWxlbWVudCgpKTsKLSAgICBjb250YWluZXItPnNldFRpbWVEaXNwbGF5c0hpZGRlbih3aWR0
aCgpLnRvSW50KCkgPCBtaW5XaWR0aFRvRGlzcGxheVRpbWVEaXNwbGF5cyk7Ci19Ci0KLSNpZiBQ
TEFURk9STShXSU4pICYmIFVTRShDRykKLQotdm9pZCBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1
c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShXSU4pICYmIFVTRShDRykK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY2MTEzNjAxN2QwOTIxN2FkODRjNTI0YTZjMmNiMGVh
NmMxYzlmZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAx
MCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KFZJREVPKQotCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVy
RmxleGlibGVCb3guaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJNZWRp
YVZvbHVtZVNsaWRlckNvbnRhaW5lciBmaW5hbCA6IHB1YmxpYyBSZW5kZXJCbG9ja0Zsb3cgewot
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWlu
ZXIpOwotcHVibGljOgotICAgIFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKEVsZW1l
bnQmLCBSZW5kZXJTdHlsZSYmKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGxheW91dCgpIG92ZXJy
aWRlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBSZW5k
ZXJNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lciBmaW5hbCA6IHB1YmxpYyBSZW5kZXJGbGV4
aWJsZUJveCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChSZW5kZXJNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lcik7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyTWVkaWFDb250cm9sVGltZWxp
bmVDb250YWluZXIoRWxlbWVudCYsIFJlbmRlclN0eWxlJiYpOwotCi1wcml2YXRlOgotICAgIHZv
aWQgbGF5b3V0KCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0ZsZXhpYmxlQm94SW1wbCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLX07Ci0KLSNpZiBQTEFURk9STShXSU4pICYmIFVT
RShDRykKLQotY2xhc3MgUmVuZGVyTWVkaWFDb250cm9scyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IHZvaWQgYWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmKTsKLX07Ci0KLSNl
bmRpZiAvLyBQTEFURk9STShXSU4pICYmIFVTRShDRykKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU2xpZGVyLmNwcAppbmRleCAzN2VjOGY1NDk3MDRhOWIyY2VlZjQzZjJhOThmZGE4MDYzY2Zh
ZDBkLi4xNjgxZjlkMWZjMGI5OTIyNzAxYWZiMzM5ZDFiM2I2ZjE3MGM2OTk2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2lu
Y2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJIVE1MUGFyc2VySWRpb21zLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMu
aCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcApp
bmRleCA3ODA5MjVjMjljZWYwNjQ0ZTAzY2EyYjVjMmU1YjcxZmUxZWMyYTY3Li5lOWRkMTQ5NDU4
NjRiYTliZDhlODVhNDUwODQ3ZTJlNjI1MmQxNjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5jcHAKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3Ry
aW5ncy5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVBZHdhaXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUFkd2FpdGEuY3BwCmluZGV4
IGIxOGM0ZDA1ZDUxZTgwZDRmMmVhNjEwZjY2YTcyYzI3NTY4N2Q2NzYuLjMxMDY2YTQ5ZTc1MTll
NjJmYmQxNmQ3YmFhN2E2YmM0YTNiMzQxYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUFkd2FpdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUFkd2FpdGEuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5o
IgorI2luY2x1ZGUgIk1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQuaCIKICNp
bmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKQEAgLTQ5Miw5ICs0OTIsMjEgQEAgYm9vbCBSZW5kZXJUaGVtZUFkd2Fp
dGE6OnBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNv
bnMKIH0KIAogI2lmIEVOQUJMRShWSURFTykKK3N0YXRpYyBSZWZQdHI8SFRNTE1lZGlhRWxlbWVu
dD4gcGFyZW50TWVkaWFFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2Rl
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8Tm9kZT4gbWVkaWFOb2RlID0g
bm9kZS0+c2hhZG93SG9zdCgpOworICAgIGlmICghbWVkaWFOb2RlKQorICAgICAgICBtZWRpYU5v
ZGUgPSBjb25zdF9jYXN0PE5vZGUqPihub2RlKTsKKyAgICBpZiAoIWlzPEhUTUxNZWRpYUVsZW1l
bnQ+KCptZWRpYU5vZGUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTE1lZGlhRWxlbWVudD4obWVkaWFOb2RlLmdldCgpKTsKK30KKwogYm9vbCBSZW5k
ZXJUaGVtZUFkd2FpdGE6OnBhaW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7Ci0gICAgYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQocmVu
ZGVyT2JqZWN0KTsKKyAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudChy
ZW5kZXJPYmplY3Qubm9kZSgpKTsKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC01NDIsNyArNTU0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUFkd2FpdGE6
OnBhaW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwK
IAogYm9vbCBSZW5kZXJUaGVtZUFkd2FpdGE6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJl
bnRNZWRpYUVsZW1lbnQocmVuZGVyT2JqZWN0KTsKKyAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBh
cmVudE1lZGlhRWxlbWVudChyZW5kZXJPYmplY3Qubm9kZSgpKTsKICAgICBpZiAoIW1lZGlhRWxl
bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ29jb2EuaAppbmRleCAzYjJiNTBkZGQ1OTUyZGMxZWY1ZDhiMDMwNDFkOTMz
YzhiMzc5ZTlhLi4xOWJjMzkyZWUzMWY2OTUzNDk1MjJkMjE1ZGY5OTVmZDVmYTgxMjRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLmgKQEAgLTI4LDkgKzI4
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiBPQkpDX0NMQVNTIE5TRGF0
ZUNvbXBvbmVudHNGb3JtYXR0ZXI7Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC00NCwxMiArNDIsOCBAQCBwcml2YXRlOgogI2VuZGlmCiAKIHByb3RlY3RlZDoKLSNpZiBFTkFC
TEUoVklERU8pCiAgICAgU3RyaW5nIG1lZGlhQ29udHJvbHNGb3JtYXR0ZWRTdHJpbmdGb3JEdXJh
dGlvbihkb3VibGUpIG92ZXJyaWRlOwotI2VuZGlmCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xT
X1NDUklQVCkKICAgICBSZXRhaW5QdHI8TlNEYXRlQ29tcG9uZW50c0Zvcm1hdHRlcj4gbV9kdXJh
dGlvbkZvcm1hdHRlcjsKLSNlbmRpZgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDb2NvYS5tbQppbmRleCA4YjZjNWVkYjM4NDIxY2M3YmVlZGMxYzk2ZWZh
NDIzZGI3YTIxYzUzLi42M2EwNWY2NjUyOTEwZjBhYzJjODg4Njk1ZjJiNzgwMGZmYTdkNzhkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5tbQpAQCAtMTI3
LDExICsxMjcsOCBAQCBib29sIFJlbmRlclRoZW1lQ29jb2E6OnBhaW50QXBwbGVQYXlCdXR0b24o
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUAogCiAjZW5kaWYgLy8gRU5BQkxF
KEFQUExFX1BBWSkKIAotI2lmIEVOQUJMRShWSURFTykKLQogU3RyaW5nIFJlbmRlclRoZW1lQ29j
b2E6Om1lZGlhQ29udHJvbHNGb3JtYXR0ZWRTdHJpbmdGb3JEdXJhdGlvbihjb25zdCBkb3VibGUg
ZHVyYXRpb25JblNlY29uZHMpCiB7Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkK
ICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoZHVyYXRpb25JblNlY29uZHMpKQogICAgICAgICByZXR1
cm4gV0VCX1VJX1NUUklORygiaW5kZWZpbml0ZSB0aW1lIiwgImFjY2Vzc2liaWxpdHkgaGVscCB0
ZXh0IGZvciBhbiBpbmRlZmluaXRlIG1lZGlhIGNvbnRyb2xsZXIgdGltZSB2YWx1ZSIpOwogCkBA
IC0xNDUsMTEgKzE0Miw2IEBAIFN0cmluZyBSZW5kZXJUaGVtZUNvY29hOjptZWRpYUNvbnRyb2xz
Rm9ybWF0dGVkU3RyaW5nRm9yRHVyYXRpb24oY29uc3QgZG91YmxlIGR1CiAgICAgfQogICAgIHJl
dHVybiBbbV9kdXJhdGlvbkZvcm1hdHRlci5nZXQoKSBzdHJpbmdGcm9tVGltZUludGVydmFsOmR1
cmF0aW9uSW5TZWNvbmRzXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotI2Vsc2UK
LSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgogfQogCi0jZW5kaWYgLy8gRU5BQkxF
KFZJREVPKQotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0K
aW5kZXggMDlhMTJkYzVkYWMxYTFiMjQ5ZTAwMTdjYjRjNjBmMmRlOWJkZmQ1YS4uMTJmZDdmZmYy
ZmQ5MjdhMmYwZTI3YThjMGU3YjNkYzRmOTBiYzcwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtMTM1OCwzMCArMTM1OCwyMSBAQCB2b2lkIFJlbmRl
clRoZW1lSU9TOjp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCB2
YWx1ZUlELCBGb250QwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMobm9ybWFsSXRhbGlj
VmFsdWUoKSk7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCiBTdHJpbmcgUmVuZGVyVGhlbWVJT1M6
Om1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkKIHsKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNf
U0NSSVBUKQogICAgIGlmIChtX2xlZ2FjeU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0LmlzRW1wdHko
KSkKICAgICAgICAgbV9sZWdhY3lNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoQ29udGVudHNPZkZpbGU6W1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViQ29y
ZVJlbmRlclRoZW1lQnVuZGxlIGNsYXNzXV0gcGF0aEZvclJlc291cmNlOkAibWVkaWFDb250cm9s
c2lPUyIgb2ZUeXBlOkAiY3NzIl0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6
bmlsXTsKICAgICByZXR1cm4gbV9sZWdhY3lNZWRpYUNvbnRyb2xzU3R5bGVTaGVldDsKLSNlbHNl
Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAogU3RyaW5nIFJlbmRlclRo
ZW1lSU9TOjptb2Rlcm5NZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCiB7Ci0jaWYgRU5BQkxFKE1F
RElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS5tb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCgpKSB7CiAgICAgICAgIGlm
IChtX21lZGlhQ29udHJvbHNTdHlsZVNoZWV0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fbWVk
aWFDb250cm9sc1N0eWxlU2hlZXQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxl
OltbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dlYkNvcmVSZW5kZXJUaGVtZUJ1bmRsZSBjbGFz
c11dIHBhdGhGb3JSZXNvdXJjZTpAIm1vZGVybi1tZWRpYS1jb250cm9scyIgb2ZUeXBlOkAiY3Nz
IiBpbkRpcmVjdG9yeTpAIm1vZGVybi1tZWRpYS1jb250cm9scyJdIGVuY29kaW5nOk5TVVRGOFN0
cmluZ0VuY29kaW5nIGVycm9yOm5pbF07CiAgICAgICAgIHJldHVybiBtX21lZGlhQ29udHJvbHNT
dHlsZVNoZWV0OwogICAgIH0KICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbHNlCi0gICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJUaGVtZUlPUzo6
cHVyZ2VDYWNoZXMoKQpAQCAtMTM5NCw3ICsxMzg1LDYgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6
cHVyZ2VDYWNoZXMoKQogCiBTdHJpbmcgUmVuZGVyVGhlbWVJT1M6Om1lZGlhQ29udHJvbHNTY3Jp
cHQoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubW9kZXJuTWVkaWFDb250cm9sc0Vu
YWJsZWQoKSkgewogICAgICAgICBpZiAobV9tZWRpYUNvbnRyb2xzU2NyaXB0LmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFz
czpbV2ViQ29yZVJlbmRlclRoZW1lQnVuZGxlIGNsYXNzXV07CkBAIC0xNDE5LDI3ICsxNDA5LDE4
IEBAIFN0cmluZyBSZW5kZXJUaGVtZUlPUzo6bWVkaWFDb250cm9sc1NjcmlwdCgpCiAgICAgICAg
IG1fbGVnYWN5TWVkaWFDb250cm9sc1NjcmlwdCA9IHNjcmlwdEJ1aWxkZXIudG9TdHJpbmcoKTsK
ICAgICB9CiAgICAgcmV0dXJuIG1fbGVnYWN5TWVkaWFDb250cm9sc1NjcmlwdDsKLSNlbHNlCi0g
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAogU3RyaW5nIFJlbmRlclRoZW1l
SU9TOjptZWRpYUNvbnRyb2xzQmFzZTY0U3RyaW5nRm9ySWNvbk5hbWVBbmRUeXBlKGNvbnN0IFN0
cmluZyYgaWNvbk5hbWUsIGNvbnN0IFN0cmluZyYgaWNvblR5cGUpCiB7Ci0jaWYgRU5BQkxFKE1F
RElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkubW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICBTdHJpbmcgZGlyZWN0b3J5ID0gIm1vZGVybi1tZWRp
YS1jb250cm9scy9pbWFnZXMiOwogICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVu
ZGxlRm9yQ2xhc3M6W1dlYkNvcmVSZW5kZXJUaGVtZUJ1bmRsZSBjbGFzc11dOwogICAgIHJldHVy
biBbW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZGaWxlOltidW5kbGUgcGF0aEZvclJlc291cmNl
Omljb25OYW1lIG9mVHlwZTppY29uVHlwZSBpbkRpcmVjdG9yeTpkaXJlY3RvcnldXSBiYXNlNjRF
bmNvZGVkU3RyaW5nV2l0aE9wdGlvbnM6MF07Ci0jZWxzZQotICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwotI2VuZGlmCiB9CiAKLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCi0KIHN0cnVjdCBDU1NW
YWx1ZUlEQW5kU2VsZWN0b3IgewogICAgIENTU1ZhbHVlSUQgY3NzVmFsdWVJRDsKICAgICBTRUwg
c2VsZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5k
ZXggMzE4ZWI4MmQ5YWQ1N2Q3ZDQzNWE1YzE3OTc5NjhkM2VlNzZiOWZkYy4uMGUzNzE4ODYyMjhj
MWIxNmIyNjJlOGQ2YTA2Mjk0MmNiODJjNTljNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtNDgsMTQgKzQ4LDEyIEBACiAjaW1wb3J0ICJMb2NhbEN1
cnJlbnRHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIkxvY2FsRGVmYXVsdFN5c3RlbUFwcGVh
cmFuY2UuaCIKICNpbXBvcnQgIkxvY2FsaXplZFN0cmluZ3MuaCIKLSNpbXBvcnQgIk1lZGlhQ29u
dHJvbEVsZW1lbnRzLmgiCiAjaW1wb3J0ICJQYWdlLmgiCiAjaW1wb3J0ICJQYWludEluZm8uaCIK
ICNpbXBvcnQgIlBhdGhVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlJlbmRlckF0dGFjaG1lbnQuaCIK
ICNpbXBvcnQgIlJlbmRlckxheWVyLmgiCiAjaW1wb3J0ICJSZW5kZXJNZWRpYS5oIgotI2ltcG9y
dCAiUmVuZGVyTWVkaWFDb250cm9scy5oIgogI2ltcG9ydCAiUmVuZGVyUHJvZ3Jlc3MuaCIKICNp
bXBvcnQgIlJlbmRlclNsaWRlci5oIgogI2ltcG9ydCAiUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4u
aCIKQEAgLTI5NiwzMSArMjk0LDIxIEBAIE5TVmlldyAqUmVuZGVyVGhlbWVNYWM6OmRvY3VtZW50
Vmlld0Zvcihjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiAgICAgcmV0dXJuIFRoZW1lTWFj
OjplbnN1cmVkVmlldygmby52aWV3KCkuZnJhbWVWaWV3KCksIHN0YXRlcyk7CiB9CiAKLSNpZiBF
TkFCTEUoVklERU8pCi0KIFN0cmluZyBSZW5kZXJUaGVtZU1hYzo6bWVkaWFDb250cm9sc1N0eWxl
U2hlZXQoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKG1f
bGVnYWN5TWVkaWFDb250cm9sc1N0eWxlU2hlZXQuaXNFbXB0eSgpKQogICAgICAgICBtX2xlZ2Fj
eU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09m
RmlsZTpbW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltXZWJDb3JlUmVuZGVyVGhlbWVCdW5kbGUg
Y2xhc3NdXSBwYXRoRm9yUmVzb3VyY2U6QCJtZWRpYUNvbnRyb2xzQXBwbGUiIG9mVHlwZTpAImNz
cyJdIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07CiAgICAgcmV0dXJu
IG1fbGVnYWN5TWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7Ci0jZWxzZQotICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwotI2VuZGlmCiB9CiAKIFN0cmluZyBSZW5kZXJUaGVtZU1hYzo6bW9kZXJuTWVk
aWFDb250cm9sc1N0eWxlU2hlZXQoKQogewotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJ
UFQpCiAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubW9k
ZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoKSkgewogICAgICAgICBpZiAobV9tZWRpYUNvbnRyb2xz
U3R5bGVTaGVldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX21lZGlhQ29udHJvbHNTdHlsZVNo
ZWV0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTpbW05TQnVuZGxlIGJ1bmRs
ZUZvckNsYXNzOltXZWJDb3JlUmVuZGVyVGhlbWVCdW5kbGUgY2xhc3NdXSBwYXRoRm9yUmVzb3Vy
Y2U6QCJtb2Rlcm4tbWVkaWEtY29udHJvbHMiIG9mVHlwZTpAImNzcyIgaW5EaXJlY3Rvcnk6QCJt
b2Rlcm4tbWVkaWEtY29udHJvbHMiXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJv
cjpuaWxdOwogICAgICAgICByZXR1cm4gbV9tZWRpYUNvbnRyb2xzU3R5bGVTaGVldDsKICAgICB9
CiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZWxzZQotICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwotI2VuZGlmCiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnB1cmdlQ2FjaGVzKCkKQEAg
LTMzNSw3ICszMjMsNiBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpwdXJnZUNhY2hlcygpCiAKIFN0
cmluZyBSZW5kZXJUaGVtZU1hYzo6bWVkaWFDb250cm9sc1NjcmlwdCgpCiB7Ci0jaWYgRU5BQkxF
KE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS5tb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCgpKSB7CiAgICAgICAg
IGlmIChtX21lZGlhQ29udHJvbHNTY3JpcHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBOU0J1
bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltXZWJDb3JlUmVuZGVyVGhl
bWVCdW5kbGUgY2xhc3NdXTsKQEAgLTM1MywyNyArMzQwLDE4IEBAIFN0cmluZyBSZW5kZXJUaGVt
ZU1hYzo6bWVkaWFDb250cm9sc1NjcmlwdCgpCiAgICAgICAgIG1fbGVnYWN5TWVkaWFDb250cm9s
c1NjcmlwdCA9IG1ha2VTdHJpbmcoU3RyaW5nIHsgbG9jYWxpemVkU3RyaW5ncyB9LCBTdHJpbmcg
eyBzY3JpcHQgfSk7CiAgICAgfQogICAgIHJldHVybiBtX2xlZ2FjeU1lZGlhQ29udHJvbHNTY3Jp
cHQ7Ci0jZWxzZQotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotI2VuZGlmCiB9CiAKIFN0cmlu
ZyBSZW5kZXJUaGVtZU1hYzo6bWVkaWFDb250cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5k
VHlwZShjb25zdCBTdHJpbmcmIGljb25OYW1lLCBjb25zdCBTdHJpbmcmIGljb25UeXBlKQogewot
I2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKCFSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLm1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKCkp
CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCiAgICAgTlNTdHJpbmcgKmRpcmVjdG9y
eSA9IEAibW9kZXJuLW1lZGlhLWNvbnRyb2xzL2ltYWdlcyI7CiAgICAgTlNCdW5kbGUgKmJ1bmRs
ZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViQ29yZVJlbmRlclRoZW1lQnVuZGxlIGNs
YXNzXV07CiAgICAgcmV0dXJuIFtbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZkZpbGU6W2J1bmRs
ZSBwYXRoRm9yUmVzb3VyY2U6aWNvbk5hbWUgb2ZUeXBlOmljb25UeXBlIGluRGlyZWN0b3J5OmRp
cmVjdG9yeV1dIGJhc2U2NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9uczowXTsKLSNlbHNlCi0gICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAotI2VuZGlmIC8vIEVOQUJMRShWSURF
TykKLQogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQogCiBTdHJpbmcgUmVuZGVyVGhlbWVN
YWM6OmltYWdlQ29udHJvbHNTdHlsZVNoZWV0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCmluZGV4IGNmZDlmMjVjMzYyNmQ1MGViYWQzMmYyZTVj
YTAwOTcyZTg1ZWY2MWUuLmQ3N2Y3ZmFiNjlmY2MzNmE0OGFlOWM2OGI0YjczMWYwZjhhM2M0MmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcApAQCAtNDIs
MTAgKzQyLDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KIAotI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJS
ZW5kZXJNZWRpYUNvbnRyb2xzLmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgPHRjaGFyLmg+CiAKIC8q
IApAQCAtODQ1LDEwICs4NDEsNiBAQCB2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTbGlkZXJU
aHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgYwogICAgICAgICBz
dHlsZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKICAgICAgICAg
c3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKICAgICB9
Ci0jaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoQ0cpCi0gICAgZWxzZSBpZiAocGFydCA9PSBNZWRp
YVNsaWRlclRodW1iUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KSAK
LSAgICAgICAgUmVuZGVyTWVkaWFDb250cm9sczo6YWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUo
c3R5bGUpOwotI2VuZGlmCiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmll
bGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggOTQ1ZGRmZDU3NmQy
NmZlM2I4Mjc4Y2QyNjkwZWMwZmE0ZThmNWVmNi4uN2EyNWVhYjM1MWNhMzkxM2E5NzBkNDA4MmFm
NGIxN2I0NTJlMzAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNDUz
MSwxMiArNDUzMSw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjpwYXRoU3RyaW5n
V2l0aFNocmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8ZG91CiAKIFN0cmluZyBJbnRlcm5h
bHM6OmdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzRm9yRWxlbWVudChIVE1MTWVkaWFFbGVt
ZW50JiBtZWRpYUVsZW1lbnQpCiB7Ci0jaWYgIUVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQp
Ci0gICAgVU5VU0VEX1BBUkFNKG1lZGlhRWxlbWVudCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwot
I2Vsc2UKICAgICByZXR1cm4gbWVkaWFFbGVtZW50LmdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3Rh
dHVzKCk7Ci0jZW5kaWYKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>