<?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>132037</bug_id>
          
          <creation_ts>2014-04-22 20:51:41 -0700</creation_ts>
          <short_desc>Transition RenderTheme API from RenderObject* to const RenderObject&amp;</short_desc>
          <delta_ts>2014-04-24 08:02:38 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1003169</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2014-04-22 20:51:41 -0700</bug_when>
    <thetext>ssia. patch is coming up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003296</commentid>
    <comment_count>1</comment_count>
      <attachid>229988</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-04-23 08:32:22 -0700</bug_when>
    <thetext>Created attachment 229988
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003374</commentid>
    <comment_count>2</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-04-23 14:00:33 -0700</bug_when>
    <thetext>This seems like a great thing to be doing, just needs some build fixes. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003502</commentid>
    <comment_count>3</comment_count>
      <attachid>230042</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-04-23 20:34:05 -0700</bug_when>
    <thetext>Created attachment 230042
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003503</commentid>
    <comment_count>4</comment_count>
      <attachid>230042</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-04-23 20:34:26 -0700</bug_when>
    <thetext>Comment on attachment 230042
Patch

EWSing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003518</commentid>
    <comment_count>5</comment_count>
      <attachid>230045</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-04-23 21:23:43 -0700</bug_when>
    <thetext>Created attachment 230045
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003519</commentid>
    <comment_count>6</comment_count>
      <attachid>230045</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-04-23 21:23:58 -0700</bug_when>
    <thetext>Comment on attachment 230045
Patch

more EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003536</commentid>
    <comment_count>7</comment_count>
      <attachid>230048</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-04-23 21:49:15 -0700</bug_when>
    <thetext>Created attachment 230048
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003537</commentid>
    <comment_count>8</comment_count>
      <attachid>230048</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-04-23 21:49:37 -0700</bug_when>
    <thetext>Comment on attachment 230048
Patch

and some more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003539</commentid>
    <comment_count>9</comment_count>
      <attachid>230049</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-04-23 22:14:05 -0700</bug_when>
    <thetext>Created attachment 230049
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003540</commentid>
    <comment_count>10</comment_count>
      <attachid>230049</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-04-23 22:14:30 -0700</bug_when>
    <thetext>Comment on attachment 230049
Patch

and more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003619</commentid>
    <comment_count>11</comment_count>
      <attachid>230049</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-24 06:48:36 -0700</bug_when>
    <thetext>Comment on attachment 230049
Patch

Rejecting attachment 230049 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 230049, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Andreas Goran Kling found in /Volumes/Data/EWS/WebKit/Source/WebCore/ChangeLog does not appear to be a valid reviewer according to contributors.json.
/Volumes/Data/EWS/WebKit/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://webkit-queues.appspot.com/results/5649573959696384</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003620</commentid>
    <comment_count>12</comment_count>
      <attachid>230076</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-04-24 06:50:55 -0700</bug_when>
    <thetext>Created attachment 230076
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003621</commentid>
    <comment_count>13</comment_count>
      <attachid>230076</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-04-24 06:51:45 -0700</bug_when>
    <thetext>Comment on attachment 230076
Patch

Andreas -Goran Kling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003623</commentid>
    <comment_count>14</comment_count>
      <attachid>230076</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-24 07:28:26 -0700</bug_when>
    <thetext>Comment on attachment 230076
Patch

Clearing flags on attachment: 230076

Committed r167755: &lt;http://trac.webkit.org/changeset/167755&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003624</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-24 07:28:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003632</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-24 07:58:46 -0700</bug_when>
    <thetext>Not RenderElement?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003633</commentid>
    <comment_count>17</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2014-04-24 08:02:38 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Not RenderElement?
I need to fix some border painting dependency first in order to be able to move to RenderElement.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229988</attachid>
            <date>2014-04-23 08:32:22 -0700</date>
            <delta_ts>2014-04-23 20:34:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132037-20140423083201.patch</filename>
            <type>text/plain</type>
            <size>122569</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3Njc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWJlMGU5NWJiNmE3Mzcy
YTdkMmRmZjY2YjI1ZjAyYzhhMjEwODViNC4uOTM0YjQ4MWU1ZjRkOTAwNzNjODFkN2EzZGY0NzE1
MjIzMjBiY2Q3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MiBAQAorMjAxNC0wNC0yMyAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFRyYW5zaXRpb24gUmVuZGVy
VGhlbWUgQVBJIGZyb20gUmVuZGVyT2JqZWN0KiB0byBjb25zdCBSZW5kZXJPYmplY3QmCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzIwMzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2luZyBjb25zdCBy
ZWZlcmVuY2VzIHByb3ZpZGVzIGJldHRlciBlbmNhcHN1bGF0aW9uIGFuZCBpbXByb3ZlIHNlY3Vy
aXR5LgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojpib3VuZGluZ0JveEZvclF1YWRzKToKKyAgICAgICAgKiBkb20vRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBY3RpdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0SG92ZXJlZCk6CisgICAgICAgICogZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Zm9jdXNl
ZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlz
YWJsZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxl
bWVudDo6cmVhZE9ubHlBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0Q2hl
Y2tlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRJbmRldGVybWlu
YXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjph
ZGRWaXN1YWxPdmVyZmxvd0Zyb21UaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQnV0dG9uOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZp
bGVVcGxvYWRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRD
b250cm9sOjpwYWludE9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRkUmVnaW9uc1Zp
c3VhbE92ZXJmbG93RnJvbVRoZW1lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6ZHJhd0xpbmVGb3JCb3hTaWRl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclByb2dyZXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNz
Ojpjb21wdXRlTG9naWNhbEhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjpwYWludEJvcmRlck9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6OnBhaW50RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFk
anVzdFJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzdGF0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnVwZGF0ZUNvbnRyb2xTdGF0
ZXNGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6ZXh0cmFjdENv
bnRyb2xTdGF0ZXNGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6
aXNBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzQ2hlY2tlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXNJbmRldGVybWluYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6OmlzRm9jdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXNQ
cmVzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc1NwaW5VcEJ1dHRvblBh
cnRQcmVzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc1JlYWRPbmx5Q29u
dHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXNIb3ZlcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc1NwaW5VcEJ1dHRvblBhcnRIb3ZlcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0RlZmF1bHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWU6OnBhaW50SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cGFpbnRTbGlkZXJUaWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6cHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGhlbWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpjb250cm9sU3VwcG9ydHNU
aW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRDYXBzTG9ja0luZGlj
YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRGaWxlVXBsb2FkSWNv
bkRlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppbWFnZUNvbnRy
b2xzQnV0dG9uU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRDaGVj
a2JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRSYWRpbyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWU6OnBhaW50SW5uZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjpwYWludENoZWNrYm94RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWU6OnBhaW50UmFkaW9EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6cGFpbnRCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRN
ZW51TGlzdERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWlu
dE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OnBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwYWludFNxdWFyZUJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
OjpwYWludFNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWlu
dFNsaWRlclRodW1iRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50
U2VhcmNoRmllbGREZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6
cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5C
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFQbGF5QnV0
dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlhT3ZlcmxheVBs
YXlCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFNdXRl
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlhU2Vla0Jh
Y2tCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFTZWVr
Rm9yd2FyZEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRp
YVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlh
U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFW
b2x1bWVTbGlkZXJDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBh
aW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwYWludE1lZGlhUmV3aW5kQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwYWludE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRpYVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlhQ29udHJvbHNCYWNrZ3Jv
dW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlhQ3VycmVudFRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFUaW1lUmVtYWlu
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlhRnVsbFNjcmVl
blZvbHVtZVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWlu
dE1lZGlhRnVsbFNjcmVlblZvbHVtZVNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lOjpwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRJbWFnZUNvbnRyb2xzQnV0dG9uKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhl
bWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJv
cmRlckNsaXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2ti
b3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6YmFzZWxp
bmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRSYWRp
b0RlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludFRl
eHRGaWVsZERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpw
YWludFRleHRBcmVhRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJ
T1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUaHVtYkRlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lSU9TOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50QnV0dG9uRGVjb3JhdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludEZpbGVVcGxvYWRJY29uRGVj
b3JhdGlvbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUFjdGl2ZVN0YXRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6ZG9jdW1lbnRWaWV3Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjphZGp1c3RSZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1h
Yzo6Y29udmVydFRvUGFpbnRpbmdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjp1cGRhdGVDaGVja2VkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnVwZGF0ZUVuYWJsZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1h
Yzo6dXBkYXRlRm9jdXNlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
Ojp1cGRhdGVQcmVzc2VkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OmNvbnRyb2xTdXBwb3J0c1RpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
OjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFp
bnRDYXBzTG9ja0luZGljYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
cGFpbnRUZXh0QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRN
ZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cHJvZ3Jlc3NCYXJSZWN0Rm9yQm91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9u
R3JhZGllbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVM
aXN0QnV0dG9uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
OjpwYWludFNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpw
YWludFNlYXJjaEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzZXRT
ZWFyY2hDZWxsU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50
U2VhcmNoRmllbGRDYW5jZWxCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U25hcHNob3R0
ZWRQbHVnaW5PdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWlu
dEltYWdlQ29udHJvbHNCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OmltYWdlQ29udHJvbHNCdXR0b25TaXplKToKKwogMjAxNC0wNC0yMiAgQnJhZHkgRWlkc29uICA8
YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hhbmdlIEltYWdlIENvbnRyb2xzIHJlcGxh
Y2VtZW50IHRvIHVzZSBzZWxlY3Rpb24gYW5kIHBhc3RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCA2MWY3NGM5Yjhj
OTFiNGJmZTViNjgxYjM2ZmM4ZWFiNmJhOWUyMmY3Li5iOGQ3MjA3Zjk0NmVkNjBhMWQ0NDBlYzM2
NGE0MDFkNWQ1OGM5NjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTcxMSw3ICs3MTEsNyBAQCBJbnRSZWN0IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmJvdW5kaW5nQm94Rm9yUXVhZHMoUmVuZGVyT2JqZWN0KiBvYmos
IGNvbnN0IFZlY3RvcgogICAgICAgICBJbnRSZWN0IHIgPSBxdWFkLmVuY2xvc2luZ0JvdW5kaW5n
Qm94KCk7CiAgICAgICAgIGlmICghci5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGlmIChvYmot
PnN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpKQotICAgICAgICAgICAgICAgIG9iai0+dGhlbWUoKS5h
ZGp1c3RSZXBhaW50UmVjdChvYmosIHIpOworICAgICAgICAgICAgICAgIG9iai0+dGhlbWUoKS5h
ZGp1c3RSZXBhaW50UmVjdCgqb2JqLCByKTsKICAgICAgICAgICAgIHJlc3VsdC51bml0ZShyKTsK
ICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCAxYmI4OThmYTFhYzE4
YzhjMmJmNWY5MmIxZjkzNmY5ODBhMWM2N2EyLi5hY2RkMzYwNmEwOGM1NzQwZWU1YjM1NjExMzUy
ZTVmZmEwM2VmZGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC00ODgsNyArNDg4LDcgQEAg
dm9pZCBFbGVtZW50OjpzZXRBY3RpdmUoYm9vbCBmbGFnLCBib29sIHBhdXNlKQogICAgIGlmIChy
ZWFjdHNUb1ByZXNzKQogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKLSAgICBpZiAo
cmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkgJiYgcmVuZGVyZXIoKS0+dGhlbWUo
KS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6UHJlc3NlZFN0YXRlKSkK
KyAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkgJiYgcmVuZGVyZXIo
KS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OlByZXNz
ZWRTdGF0ZSkpCiAgICAgICAgIHJlYWN0c1RvUHJlc3MgPSB0cnVlOwogCiAgICAgLy8gVGhlIHJl
c3Qgb2YgdGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIGEgZmVhdHVyZSB0aGF0IG9ubHkgd29ya3Mg
aWYgdGhlCkBAIC01NTQsNyArNTU0LDcgQEAgdm9pZCBFbGVtZW50OjpzZXRIb3ZlcmVkKGJvb2wg
ZmxhZykKICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogCiAgICAgaWYgKHJlbmRlcmVy
KCktPnN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpKQotICAgICAgICByZW5kZXJlcigpLT50aGVtZSgp
LnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBDb250cm9sU3RhdGVzOjpIb3ZlclN0YXRlKTsKKyAg
ICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRy
b2xTdGF0ZXM6OkhvdmVyU3RhdGUpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnNjcm9sbEludG9WaWV3
KGJvb2wgYWxpZ25Ub1RvcCkgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwCmluZGV4IDQ3YjZiZTY2MGFhNmM0ODlhNDRhNmNiOGE0NWVmNmQ0M2U4NDQ5MGEuLmJhYzJk
ZjljMTg3MDdhZWJlYmM0YjZjMTk0YzAzYzNjNWUwZWNjZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0xNzQ5LDcgKzE3NDksNyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogICAgICAgICBlbGVtZW50
LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIGlmIChyZW5kZXJlciAmJiBy
ZW5kZXJlci0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICAgICAgcmVuZGVy
ZXItPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKHJlbmRlcmVyLCBDb250cm9sU3RhdGVzOjpGb2N1c1N0
YXRlKTsKKyAgICAgICAgICAgICAgICByZW5kZXJlci0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJl
bmRlcmVyLCBDb250cm9sU3RhdGVzOjpGb2N1c1N0YXRlKTsKICAgICB9CiAjZW5kaWYKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IGUw
Yjg1ZDU5NzBmODhiZDRjMDUxMmY1NzRjMmFiMWQ3ZjBjYTdmZGIuLjgxMGNiYWQ5N2FmZTQ4Yjk0
YzdjZDA1NjRiMWI4NzM2Nzc0NzFiM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6ZGlzYWJsZWRTdGF0ZUNoYW5nZWQoKQogICAgIHNldE5lZWRzV2lsbFZh
bGlkYXRlQ2hlY2soKTsKICAgICBkaWRBZmZlY3RTZWxlY3RvcihBZmZlY3RlZFNlbGVjdG9yRGlz
YWJsZWQgfCBBZmZlY3RlZFNlbGVjdG9yRW5hYmxlZCk7CiAgICAgaWYgKHJlbmRlcmVyKCkgJiYg
cmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIHJlbmRlcmVyKCkt
PnRoZW1lKCkuc3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkVuYWJsZWRT
dGF0ZSk7CisgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJl
cigpLCBDb250cm9sU3RhdGVzOjpFbmFibGVkU3RhdGUpOwogfQogCiB2b2lkIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OnJlYWRPbmx5QXR0cmlidXRlQ2hhbmdlZCgpCkBAIC0xNjMsNyArMTYzLDcg
QEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZWFkT25seUF0dHJpYnV0ZUNoYW5nZWQo
KQogICAgIHNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKTsKICAgICBzZXROZWVkc1N0eWxlUmVj
YWxjKCk7CiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBl
YXJhbmNlKCkpCi0gICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKHJlbmRl
cmVyKCksIENvbnRyb2xTdGF0ZXM6OlJlYWRPbmx5U3RhdGUpOworICAgICAgICByZW5kZXJlcigp
LT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6UmVhZE9u
bHlTdGF0ZSk7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVxdWlyZWRBdHRy
aWJ1dGVDaGFuZ2VkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmlu
ZGV4IDcwMDAyOGJiNzFlMDBiMjQ2ZGU5NjZkY2IxMDMyZjgxMTlkM2NiNjIuLjdjYjZjMjMwODFh
ZGQzYjJiODgyYWFmNzQ0NjE5NGNiMjNmZDRmYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcApAQCAtODU4LDcgKzg1OCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVu
dDo6c2V0Q2hlY2tlZChib29sIG5vd0NoZWNrZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZl
bnRCCiAgICAgaWYgKENoZWNrZWRSYWRpb0J1dHRvbnMqIGJ1dHRvbnMgPSBjaGVja2VkUmFkaW9C
dXR0b25zKCkpCiAgICAgICAgICAgICBidXR0b25zLT51cGRhdGVDaGVja2VkU3RhdGUodGhpcyk7
CiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkpCi0gICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCks
IENvbnRyb2xTdGF0ZXM6OkNoZWNrZWRTdGF0ZSk7CisgICAgICAgIHJlbmRlcmVyKCktPnRoZW1l
KCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlcigpLCBDb250cm9sU3RhdGVzOjpDaGVja2VkU3RhdGUp
OwogICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogCiAgICAgLy8gSWRlYWxseSB3ZSdkIGRv
IHRoaXMgZnJvbSB0aGUgcmVuZGVyIHRyZWUgKG1hdGNoaW5nCkBAIC04OTIsNyArODkyLDcgQEAg
dm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRJbmRldGVybWluYXRlKGJvb2wgbmV3VmFsdWUpCiAg
ICAgZGlkQWZmZWN0U2VsZWN0b3IoQWZmZWN0ZWRTZWxlY3RvckluZGV0ZXJtaW5hdGUpOwogCiAg
ICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkp
Ci0gICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIENv
bnRyb2xTdGF0ZXM6OkNoZWNrZWRTdGF0ZSk7CisgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCku
c3RhdGVDaGFuZ2VkKCpyZW5kZXJlcigpLCBDb250cm9sU3RhdGVzOjpDaGVja2VkU3RhdGUpOwog
fQogCiBpbnQgSFRNTElucHV0RWxlbWVudDo6c2l6ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCmluZGV4IDQ5ZjQ4YmYzODFlOWI0NTA0OTQ0ZmJhMDU0
MDVhOTlkNDc5MzE2OTMuLjIxOWYzYTI1MzI0ZDcxMThhYjkwOTEyMDdjODQzZjE0Yjg4YzAzOGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCkBAIC0xOTUsNyAr
MTk1LDcgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3QKICAgICAgICAgaWYgKG9sZERpc2FibGVk
ICE9IG1fZGlzYWJsZWQpIHsKICAgICAgICAgICAgIGRpZEFmZmVjdFNlbGVjdG9yKEFmZmVjdGVk
U2VsZWN0b3JEaXNhYmxlZCB8IEFmZmVjdGVkU2VsZWN0b3JFbmFibGVkKTsKICAgICAgICAgICAg
IGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpKQot
ICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKHJlbmRlcmVy
KCksIENvbnRyb2xTdGF0ZXM6OkVuYWJsZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgcmVuZGVy
ZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkVu
YWJsZWRTdGF0ZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gc2VsZWN0ZWRB
dHRyKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgbWF0Y2ggd2hhdCB0aGUgSFRN
TCBzcGVjaWZpY2F0aW9uIHNheXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAppbmRleCBkZDVjNDAwYWVhMjE0ZmYyMGM5MDE4ZDI0YmEyMzlkNWY2ZjVkNGZhLi41MDY2
YWVjYzE1Y2JjYWU0NmY4OGUxZTg1YjU5MTA0MmI4NzcxOTVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTE0MzgsNyArMTQzOCw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmFkZFZpc3VhbE92ZXJmbG93RnJvbVRoZW1lKCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBwaXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0KCk7Ci0g
ICAgdGhlbWUoKS5hZGp1c3RSZXBhaW50UmVjdCh0aGlzLCBpbmZsYXRlZFJlY3QpOworICAgIHRo
ZW1lKCkuYWRqdXN0UmVwYWludFJlY3QoKnRoaXMsIGluZmxhdGVkUmVjdCk7CiAgICAgYWRkVmlz
dWFsT3ZlcmZsb3coaW5mbGF0ZWRSZWN0KTsKIAogICAgIGlmIChSZW5kZXJGbG93VGhyZWFkKiBm
bG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpKQpAQCAtNDI5NCw3ICs0Mjk0
LDcgQEAgaW50IFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNl
bGluZVR5cGUsIGJvb2wgZmlyc3RMaW5lLCBMaW4KICAgICAgICAgLy8gaXMgdHVybmVkIG9mZiwg
Y2hlY2tib3hlcy9yYWRpb3Mgd2lsbCBzdGlsbCBoYXZlIGRlY2VudCBiYXNlbGluZXMuCiAgICAg
ICAgIC8vIEZJWE1FOiBOZWVkIHRvIHBhdGNoIGZvcm0gY29udHJvbHMgdG8gZGVhbCB3aXRoIHZl
cnRpY2FsIGxpbmVzLgogICAgICAgICBpZiAoc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkgJiYgIXRo
ZW1lKCkuaXNDb250cm9sQ29udGFpbmVyKHN0eWxlKCkuYXBwZWFyYW5jZSgpKSkKLSAgICAgICAg
ICAgIHJldHVybiB0aGVtZSgpLmJhc2VsaW5lUG9zaXRpb24odGhpcyk7CisgICAgICAgICAgICBy
ZXR1cm4gdGhlbWUoKS5iYXNlbGluZVBvc2l0aW9uKCp0aGlzKTsKICAgICAgICAgICAgIAogICAg
ICAgICAvLyBDU1MyLjEgc3RhdGVzIHRoYXQgdGhlIGJhc2VsaW5lIG9mIGFuIGlubGluZSBibG9j
ayBpcyB0aGUgYmFzZWxpbmUgb2YgdGhlIGxhc3QgbGluZSBib3ggaW4KICAgICAgICAgLy8gdGhl
IG5vcm1hbCBmbG93LiAgV2UgbWFrZSBhbiBleGNlcHRpb24gZm9yIG1hcnF1ZWVzLCBzaW5jZSB0
aGVpciBiYXNlbGluZXMgYXJlIG1lYW5pbmdsZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCmluZGV4IGI3ZTNkY2IyNjQyNGE0ZDY0YjNkNjgxMjE4MTRiMjU0NDg4MTA5NjQu
LjYzYTI4ZDMxOGZlOWI0MTIwMmZiNmFkMGQxNTYzY2U5ZWI4ZmNiYTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0xMjI3LDcgKzEyMjcsNyBAQCB2b2lkIFJlbmRl
ckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaQogICAgICAgICB9CiAgICAgfQogCi0gICAgYm9vbCB0aGVtZVBhaW50ZWQg
PSBzdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAmJiAhdGhlbWUoKS5wYWludCh0aGlzLCBjb250cm9s
U3RhdGVzLCBwYWludEluZm8sIHNuYXBwZWRQYWludFJlY3QpOworICAgIGJvb2wgdGhlbWVQYWlu
dGVkID0gc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkgJiYgIXRoZW1lKCkucGFpbnQoKnRoaXMsIGNv
bnRyb2xTdGF0ZXMsIHBhaW50SW5mbywgc25hcHBlZFBhaW50UmVjdCk7CiAKICAgICBpZiAoY29u
dHJvbFN0YXRlcyAmJiBjb250cm9sU3RhdGVzLT5uZWVkc1JlcGFpbnQoKSkKICAgICAgICAgbV9y
ZXBhaW50VGltZXIuc3RhcnRPbmVTaG90KDApOwpAQCAtMTIzOSwxMiArMTIzOSwxMiBAQCB2b2lk
IFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaQogICAgICAgICBwYWludEJhY2tncm91bmQocGFpbnRJbmZvLCBw
YWludFJlY3QsIGJsZWVkQXZvaWRhbmNlKTsKIAogICAgICAgICBpZiAoc3R5bGUoKS5oYXNBcHBl
YXJhbmNlKCkpCi0gICAgICAgICAgICB0aGVtZSgpLnBhaW50RGVjb3JhdGlvbnModGhpcywgcGFp
bnRJbmZvLCBzbmFwcGVkUGFpbnRSZWN0KTsKKyAgICAgICAgICAgIHRoZW1lKCkucGFpbnREZWNv
cmF0aW9ucygqdGhpcywgcGFpbnRJbmZvLCBzbmFwcGVkUGFpbnRSZWN0KTsKICAgICB9CiAgICAg
cGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLCBwYWludFJlY3QsIHN0eWxlKCksIEluc2V0KTsKIAog
ICAgIC8vIFRoZSB0aGVtZSB3aWxsIHRlbGwgdXMgd2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGFs
c28gcGFpbnQgdGhlIENTUyBib3JkZXIuCi0gICAgaWYgKGJsZWVkQXZvaWRhbmNlICE9IEJhY2tn
cm91bmRCbGVlZEJhY2tncm91bmRPdmVyQm9yZGVyICYmICghc3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkgfHwgKCF0aGVtZVBhaW50ZWQgJiYgdGhlbWUoKS5wYWludEJvcmRlck9ubHkodGhpcywgcGFp
bnRJbmZvLCBzbmFwcGVkUGFpbnRSZWN0KSkpICYmIHN0eWxlKCkuaGFzQm9yZGVyKCkpCisgICAg
aWYgKGJsZWVkQXZvaWRhbmNlICE9IEJhY2tncm91bmRCbGVlZEJhY2tncm91bmRPdmVyQm9yZGVy
ICYmICghc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkgfHwgKCF0aGVtZVBhaW50ZWQgJiYgdGhlbWUo
KS5wYWludEJvcmRlck9ubHkoKnRoaXMsIHBhaW50SW5mbywgc25hcHBlZFBhaW50UmVjdCkpKSAm
JiBzdHlsZSgpLmhhc0JvcmRlcigpKQogICAgICAgICBwYWludEJvcmRlcihwYWludEluZm8sIHBh
aW50UmVjdCwgc3R5bGUoKSwgYmxlZWRBdm9pZGFuY2UpOwogCiAgICAgaWYgKGJsZWVkQXZvaWRh
bmNlID09IEJhY2tncm91bmRCbGVlZFVzZVRyYW5zcGFyZW5jeUxheWVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAppbmRleCA3MzcyZGQwM2FjNzFjMTI2YTg2ZTMx
MDFlYzc5NzQwZjMwYWM3YzIzLi44ZmM4MzMwOTE4NjdhZDFmMGFhNGE5MWZlMzJhYTQyMjA1Yjg3
NjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcApAQCAtMTEy
LDEyICsxMTIsMTIgQEAgdm9pZCBSZW5kZXJCdXR0b246OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlm
ZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3QKICAgICBpZiAobV9pbm5lcikg
Ly8gUmVuZGVyQmxvY2sgaGFuZGxlZCB1cGRhdGluZyB0aGUgYW5vbnltb3VzIGJsb2NrJ3Mgc3R5
bGUuCiAgICAgICAgIHNldHVwSW5uZXJTdHlsZSgmbV9pbm5lci0+c3R5bGUoKSk7CiAKLSAgICBp
ZiAoIW1fZGVmYXVsdCAmJiB0aGVtZSgpLmlzRGVmYXVsdCh0aGlzKSkgeworICAgIGlmICghbV9k
ZWZhdWx0ICYmIHRoZW1lKCkuaXNEZWZhdWx0KCp0aGlzKSkgewogICAgICAgICBpZiAoIW1fdGlt
ZXIpCiAgICAgICAgICAgICBtX3RpbWVyID0gc3RkOjptYWtlX3VuaXF1ZTxUaW1lcjxSZW5kZXJC
dXR0b24+Pih0aGlzLCAmUmVuZGVyQnV0dG9uOjp0aW1lckZpcmVkKTsKICAgICAgICAgbV90aW1l
ci0+c3RhcnRSZXBlYXRpbmcoMC4wMyk7CiAgICAgICAgIG1fZGVmYXVsdCA9IHRydWU7Ci0gICAg
fSBlbHNlIGlmIChtX2RlZmF1bHQgJiYgIXRoZW1lKCkuaXNEZWZhdWx0KHRoaXMpKSB7CisgICAg
fSBlbHNlIGlmIChtX2RlZmF1bHQgJiYgIXRoZW1lKCkuaXNEZWZhdWx0KCp0aGlzKSkgewogICAg
ICAgICBtX2RlZmF1bHQgPSBmYWxzZTsKICAgICAgICAgbV90aW1lciA9IG51bGxwdHI7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRD
b250cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbC5jcHAKaW5kZXggNzY4ZDE4OWY1ZTRiMTYxZDYzYmQ4OWYxZDg5MmJhYTQ3OTQ1ZmNlNy4u
ZTNlOWE5ZTA3YTUyYjM2NDE2OGYwMmYwYjc1MWEzNTM0NmEyMzMyZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCkBAIC0x
ODIsNyArMTgyLDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3Qo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW4KICAgICAgICAgICAgICAgICAv
LyBEcmF3IHRoZSBmaWxlIGljb24gYW5kIGRlY29yYXRpb25zLgogICAgICAgICAgICAgICAgIElu
dFJlY3QgaWNvblJlY3QoaWNvblgsIGljb25ZLCBpY29uV2lkdGgsIGljb25IZWlnaHQpOwogICAg
ICAgICAgICAgICAgIFJlbmRlclRoZW1lOjpGaWxlVXBsb2FkRGVjb3JhdGlvbnMgZGVjb3JhdGlv
bnNUeXBlID0gaW5wdXRFbGVtZW50KCkuZmlsZXMoKS0+bGVuZ3RoKCkgPT0gMSA/IFJlbmRlclRo
ZW1lOjpTaW5nbGVGaWxlIDogUmVuZGVyVGhlbWU6Ok11bHRpcGxlRmlsZXM7Ci0gICAgICAgICAg
ICAgICAgdGhlbWUoKS5wYWludEZpbGVVcGxvYWRJY29uRGVjb3JhdGlvbnModGhpcywgYnV0dG9u
UmVuZGVyZXIsIHBhaW50SW5mbywgaWNvblJlY3QsIGlucHV0RWxlbWVudCgpLmljb24oKSwgZGVj
b3JhdGlvbnNUeXBlKTsKKyAgICAgICAgICAgICAgICB0aGVtZSgpLnBhaW50RmlsZVVwbG9hZElj
b25EZWNvcmF0aW9ucygqdGhpcywgKmJ1dHRvblJlbmRlcmVyLCBwYWludEluZm8sIGljb25SZWN0
LCBpbnB1dEVsZW1lbnQoKS5pY29uKCksIGRlY29yYXRpb25zVHlwZSk7CiAgICAgICAgICAgICB9
CiAjZWxzZQogICAgICAgICAgICAgLy8gRHJhdyB0aGUgZmlsZSBpY29uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggY2Y5NGQ1ZTRiNzNkYzU0
MTY2MGQ1ZWY1MWE1NWNmNWU1YTQ5ZDNmZC4uMTU5NjgyMTZmMGM1OGU3YzM2YzkzN2UzYzgzMTNk
YWQ4MTRjZjg0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhy
ZWFkLmNwcApAQCAtMTI4NSw3ICsxMjg1LDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjphZGRS
ZWdpb25zVmlzdWFsT3ZlcmZsb3dGcm9tVGhlbWUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2MKICAg
ICAgICAgYm9yZGVyQm94ID0gcmVnaW9uLT5yZWN0Rmxvd1BvcnRpb25Gb3JCb3goYmxvY2ssIGJv
cmRlckJveCk7CiAKICAgICAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBwaXhlbFNuYXBwZWRJ
bnRSZWN0KGJvcmRlckJveCk7Ci0gICAgICAgIGJsb2NrLT50aGVtZSgpLmFkanVzdFJlcGFpbnRS
ZWN0KGJsb2NrLCBpbmZsYXRlZFJlY3QpOworICAgICAgICBibG9jay0+dGhlbWUoKS5hZGp1c3RS
ZXBhaW50UmVjdCgqYmxvY2ssIGluZmxhdGVkUmVjdCk7CiAKICAgICAgICAgcmVnaW9uLT5hZGRW
aXN1YWxPdmVyZmxvd0ZvckJveChibG9jaywgaW5mbGF0ZWRSZWN0KTsKICAgICAgICAgaWYgKHJl
Z2lvbiA9PSBlbmRSZWdpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCmluZGV4IGEwMDMwN2MxOTUwYWUwNGI0OGExY2ZjNGY1NzkxNTgxODg1MmQ4NzkuLjdiZWZk
YzVkYTE0OTM3YzBiYzIyZjAxNjdjOGVmOTU0N2NmMzQyOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC03MjUsNyArNzI1LDcgQEAgUmVuZGVyQmxvY2sq
IFJlbmRlck9iamVjdDo6Y29udGFpbmluZ0Jsb2NrKCkgY29uc3QKIH0KIAogdm9pZCBSZW5kZXJP
YmplY3Q6OmRyYXdMaW5lRm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwgZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIsCi0gICAgQm94U2lkZSBz
aWRlLCBDb2xvciBjb2xvciwgRUJvcmRlclN0eWxlIGJvcmRlclN0eWxlLCBmbG9hdCBhZGphY2Vu
dFdpZHRoMSwgZmxvYXQgYWRqYWNlbnRXaWR0aDIsIGJvb2wgYW50aWFsaWFzKQorICAgIEJveFNp
ZGUgc2lkZSwgQ29sb3IgY29sb3IsIEVCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSwgZmxvYXQgYWRq
YWNlbnRXaWR0aDEsIGZsb2F0IGFkamFjZW50V2lkdGgyLCBib29sIGFudGlhbGlhcykgY29uc3QK
IHsKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IGRvY3VtZW50KCkuZGV2aWNlU2NhbGVG
YWN0b3IoKTsKICAgICBmbG9hdCB0aGlja25lc3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgKaW5kZXggY2E4YTZkZWE3YzY4OTQ5YzdiZTAwNzgyZDNkNGI0ZmE5OWRiYmFl
Ni4uZTU4MDNlMGRiNmIwNjhhNDg5MTc1MDk2ZTNjM2Q0NTViNDliYjI3MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtODc5LDcgKzg3OSw3IEBAIHB1YmxpYzoK
IAogICAgIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbigpIGNvbnN0OwogCi0gICAgdm9pZCBkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3ND
b250ZXh0KiwgZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIsIEJveFNpZGUs
IENvbG9yLCBFQm9yZGVyU3R5bGUsIGZsb2F0IGFkamJ3MSwgZmxvYXQgYWRqYncyLCBib29sIGFu
dGlhbGlhcyA9IGZhbHNlKTsKKyAgICB2b2lkIGRyYXdMaW5lRm9yQm94U2lkZShHcmFwaGljc0Nv
bnRleHQqLCBmbG9hdCB4MSwgZmxvYXQgeTEsIGZsb2F0IHgyLCBmbG9hdCB5MiwgQm94U2lkZSwg
Q29sb3IsIEVCb3JkZXJTdHlsZSwgZmxvYXQgYWRqYncxLCBmbG9hdCBhZGpidzIsIGJvb2wgYW50
aWFsaWFzID0gZmFsc2UpIGNvbnN0OwogcHJvdGVjdGVkOgogICAgIHZvaWQgcGFpbnRGb2N1c1Jp
bmcoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBSZW5kZXJTdHlsZSopOwogICAgIHZv
aWQgcGFpbnRPdXRsaW5lKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFJlY3QmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCmluZGV4IDQxMzlkMjVkOTkyZDYy
Yjc0ODZiMWQzMTg1ZjA2MDM3YzUyNGRmZmUuLjg0MzJmNjA0ZjQzOGEyMmMzNzY0Y2U5OGEzNTcw
NTM5NjdlMDdlZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQ
cm9ncmVzcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNz
LmNwcApAQCAtNjcsNyArNjcsNyBAQCB2b2lkIFJlbmRlclByb2dyZXNzOjpjb21wdXRlTG9naWNh
bEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbAogICAgICAgICBm
cmFtZS5zZXRIZWlnaHQoY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQpOwogICAgIGVsc2UKICAgICAg
ICAgZnJhbWUuc2V0V2lkdGgoY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQpOwotICAgIEludFNpemUg
ZnJhbWVTaXplID0gdGhlbWUoKS5wcm9ncmVzc0JhclJlY3RGb3JCb3VuZHModGhpcywgcGl4ZWxT
bmFwcGVkSW50UmVjdChmcmFtZSkpLnNpemUoKTsKKyAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IHRo
ZW1lKCkucHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKCp0aGlzLCBwaXhlbFNuYXBwZWRJbnRSZWN0
KGZyYW1lKSkuc2l6ZSgpOwogICAgIGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50ID0gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IGZyYW1lU2l6ZS5oZWlnaHQoKSA6IGZyYW1lU2l6ZS53aWR0aCgp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IDRhYmU3OTZkM2E1ZTY2MDZjNzliZDRjZWExNDE0
MjhmNmEyMzU1MWMuLmM3N2M3MjFkNDJlZWVlNjFlYTJjMWI1Yjc5YzJkZTdjOTI1ZjkzNTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuY3BwCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
CiAKICAgICAgICAgLy8gQ29udmVydCB0aGUgcmVjdCBpbnRvIHRoZSBjb29yZHMgdXNlZCBmb3Ig
cGFpbnRpbmcgdGhlIGNvbnRlbnQKICAgICAgICAgY29udGVudHNSZWN0Lm1vdmVCeShwYWludE9m
ZnNldCArIGxvY2F0aW9uKCkpOwotICAgICAgICB0aGVtZSgpLnBhaW50Q2Fwc0xvY2tJbmRpY2F0
b3IodGhpcywgcGFpbnRJbmZvLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnRlbnRzUmVjdCkpOwor
ICAgICAgICB0aGVtZSgpLnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoKnRoaXMsIHBhaW50SW5mbywg
cGl4ZWxTbmFwcGVkSW50UmVjdChjb250ZW50c1JlY3QpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCmluZGV4IGM3OWRiY2JjZTQxMzAzZWY3NDA5
M2YzYTlmN2ZiYjRhZmQzNmM4OWYuLjgxYzE4OTBjYzE4ZTE0NmM4NjA0MWQyMDg4YjAzNjllNmQ3
MjdlZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcApAQCAtMjYz
LDIwICsyNjMsMjAgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLAogICAgIH0KIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZTo6cGFpbnQoUmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3RhdGVzKiBjb250cm9s
U3RhdGVzLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jv
b2wgUmVuZGVyVGhlbWU6OnBhaW50KGNvbnN0IFJlbmRlck9iamVjdCYgbywgQ29udHJvbFN0YXRl
cyogY29udHJvbFN0YXRlcywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCiB7CiAgICAgLy8gSWYgcGFpbnRpbmcgaXMgZGlzYWJsZWQsIGJ1dCB3ZSBhcmVuJ3Qg
dXBkYXRpbmcgY29udHJvbCB0aW50cywgdGhlbiBqdXN0IGJhaWwuCiAgICAgLy8gSWYgd2UgYXJl
IHVwZGF0aW5nIGNvbnRyb2wgdGludHMsIGp1c3Qgc2NoZWR1bGUgYSByZXBhaW50IGlmIHRoZSB0
aGVtZSBzdXBwb3J0cyB0aW50aW5nCiAgICAgLy8gZm9yIHRoYXQgY29udHJvbC4KICAgICBpZiAo
cGFpbnRJbmZvLmNvbnRleHQtPnVwZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKICAgICAgICAgaWYg
KGNvbnRyb2xTdXBwb3J0c1RpbnRzKG8pKQotICAgICAgICAgICAgby0+cmVwYWludCgpOworICAg
ICAgICAgICAgby5yZXBhaW50KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
aWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvLT5zdHlsZSgpLmFwcGVhcmFuY2Uo
KTsKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gby5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKIAogI2lm
IFVTRShORVdfVEhFTUUpCiAgICAgc3dpdGNoIChwYXJ0KSB7CkBAIC0yODgsNyArMjg4LDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZTo6cGFpbnQoUmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3RhdGVzKiBj
b250cm9sU3RhdGVzLCBjb25zdCBQYWkKICAgICBjYXNlIEJ1dHRvblBhcnQ6CiAgICAgY2FzZSBJ
bm5lclNwaW5CdXR0b25QYXJ0OgogICAgICAgICB1cGRhdGVDb250cm9sU3RhdGVzRm9yUmVuZGVy
ZXIobywgY29udHJvbFN0YXRlcyk7Ci0gICAgICAgIG1fdGhlbWUtPnBhaW50KHBhcnQsIGNvbnRy
b2xTdGF0ZXMsIGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0Kj4ocGFpbnRJbmZvLmNvbnRleHQp
LCByLCBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSwgJm8tPnZpZXcoKS5mcmFtZVZpZXcoKSk7
CisgICAgICAgIG1fdGhlbWUtPnBhaW50KHBhcnQsIGNvbnRyb2xTdGF0ZXMsIGNvbnN0X2Nhc3Q8
R3JhcGhpY3NDb250ZXh0Kj4ocGFpbnRJbmZvLmNvbnRleHQpLCByLCBvLnN0eWxlKCkuZWZmZWN0
aXZlWm9vbSgpLCAmby52aWV3KCkuZnJhbWVWaWV3KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBAIC00MDUsMTcgKzQwNSwxNyBAQCBib29s
IFJlbmRlclRoZW1lOjpwYWludChSZW5kZXJPYmplY3QqIG8sIENvbnRyb2xTdGF0ZXMqIGNvbnRy
b2xTdGF0ZXMsIGNvbnN0IFBhaQogICAgIHJldHVybiB0cnVlOyAvLyBXZSBkb24ndCBzdXBwb3J0
IHRoZSBhcHBlYXJhbmNlLCBzbyBsZXQgdGhlIG5vcm1hbCBiYWNrZ3JvdW5kL2JvcmRlciBwYWlu
dC4KIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRCb3JkZXJPbmx5KFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJl
bmRlclRoZW1lOjpwYWludEJvcmRlck9ubHkoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBpZiAocGFpbnRJ
bmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIFVOVVNFRF9QQVJBTShyKTsKLSAgICByZXR1cm4gby0+
c3R5bGUoKS5hcHBlYXJhbmNlKCkgIT0gTm9Db250cm9sUGFydDsKKyAgICByZXR1cm4gby5zdHls
ZSgpLmFwcGVhcmFuY2UoKSAhPSBOb0NvbnRyb2xQYXJ0OwogI2Vsc2UKICAgICAvLyBDYWxsIHRo
ZSBhcHByb3ByaWF0ZSBwYWludCBtZXRob2QgYmFzZWQgb2ZmIHRoZSBhcHBlYXJhbmNlIHZhbHVl
LgotICAgIHN3aXRjaCAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkpIHsKKyAgICBzd2l0Y2ggKG8u
c3R5bGUoKS5hcHBlYXJhbmNlKCkpIHsKICAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CiAgICAgICAg
IHJldHVybiBwYWludFRleHRGaWVsZChvLCBwYWludEluZm8sIHIpOwogICAgIGNhc2UgTGlzdGJv
eFBhcnQ6CkBAIC00NjMsMTMgKzQ2MywxMyBAQCBib29sIFJlbmRlclRoZW1lOjpwYWludEJvcmRl
ck9ubHkoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgYwogI2Vu
ZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OnBhaW50RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCitib29sIFJlbmRlclRoZW1lOjpwYWludERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVj
dCYgcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewogICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDYWxsIHRoZSBhcHByb3ByaWF0ZSBwYWlu
dCBtZXRob2QgYmFzZWQgb2ZmIHRoZSBhcHBlYXJhbmNlIHZhbHVlLgotICAgIHN3aXRjaCAocmVu
ZGVyZXItPnN0eWxlKCkuYXBwZWFyYW5jZSgpKSB7CisgICAgc3dpdGNoIChyZW5kZXJlci5zdHls
ZSgpLmFwcGVhcmFuY2UoKSkgewogICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgogICAgICAg
ICByZXR1cm4gcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKHJlbmRlcmVyLCBwYWludElu
Zm8sIHJlY3QpOwogICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKQEAgLTY2NiwxNyArNjY2LDE3IEBA
IENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVn
cm91bmRDb2xvcigpIGNvbnN0CiAgICAgcmV0dXJuIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoKTsKIH0KIAotaW50IFJlbmRlclRoZW1lOjpiYXNlbGluZVBvc2l0aW9u
KGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2ludCBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQ
b3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgaWYgKCFvLT5pc0Jv
eCgpKQorICAgIGlmICghby5pc0JveCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGNvbnN0
IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gobyk7CisgICAgY29uc3QgUmVuZGVyQm94JiBi
b3ggPSAqdG9SZW5kZXJCb3goJm8pOwogCiAjaWYgVVNFKE5FV19USEVNRSkKLSAgICByZXR1cm4g
Ym94LT5oZWlnaHQoKSArIGJveC0+bWFyZ2luVG9wKCkgKyBtX3RoZW1lLT5iYXNlbGluZVBvc2l0
aW9uQWRqdXN0bWVudChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgKiBvLT5zdHlsZSgpLmVmZmVj
dGl2ZVpvb20oKTsKKyAgICByZXR1cm4gYm94LmhlaWdodCgpICsgYm94Lm1hcmdpblRvcCgpICsg
bV90aGVtZS0+YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQoby5zdHlsZSgpLmFwcGVhcmFuY2Uo
KSkgKiBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwogI2Vsc2UKLSAgICByZXR1cm4gYm94LT5o
ZWlnaHQoKSArIGJveC0+bWFyZ2luVG9wKCk7CisgICAgcmV0dXJuIGJveC5oZWlnaHQoKSArIGJv
eC5tYXJnaW5Ub3AoKTsKICNlbmRpZgogfQogCkBAIC03MTQsMTEgKzcxNCwxMSBAQCBib29sIFJl
bmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25z
dCBCb3JkZXJEYXRhJiBibwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmVw
YWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBJbnRSZWN0JiByKQordm9pZCBSZW5kZXJU
aGVtZTo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBJbnRSZWN0JiBy
KQogewogI2lmIFVTRShORVdfVEhFTUUpCiAgICAgQ29udHJvbFN0YXRlcyBzdGF0ZXMoZXh0cmFj
dENvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihvKSk7Ci0gICAgbV90aGVtZS0+aW5mbGF0ZUNvbnRy
b2xQYWludFJlY3Qoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCksICZzdGF0ZXMsIHIsIG8tPnN0eWxl
KCkuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBtX3RoZW1lLT5pbmZsYXRlQ29udHJvbFBhaW50UmVj
dChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpLCAmc3RhdGVzLCByLCBvLnN0eWxlKCkuZWZmZWN0aXZl
Wm9vbSgpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG8pOwogICAgIFVOVVNFRF9QQVJBTShy
KTsKQEAgLTczMCwxMCArNzMwLDEwIEBAIGJvb2wgUmVuZGVyVGhlbWU6OnN1cHBvcnRzRm9jdXNS
aW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAgICByZXR1cm4gKHN0eWxlLT5o
YXNBcHBlYXJhbmNlKCkgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBUZXh0RmllbGRQYXJ0ICYm
IHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gVGV4dEFyZWFQYXJ0ICYmIHN0eWxlLT5hcHBlYXJhbmNl
KCkgIT0gTWVudWxpc3RCdXR0b25QYXJ0ICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gTGlzdGJv
eFBhcnQpOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjpzdGF0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0
KiBvLCBDb250cm9sU3RhdGVzOjpTdGF0ZXMgc3RhdGUpIGNvbnN0Citib29sIFJlbmRlclRoZW1l
OjpzdGF0ZUNoYW5nZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBDb250cm9sU3RhdGVzOjpTdGF0
ZXMgc3RhdGUpIGNvbnN0CiB7CiAgICAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhc3N1bWVz
IHRoZSBjb250cm9scyBkb24ndCByZXNwb25kIHRvIGNoYW5nZXMgaW4gOmhvdmVyIHN0YXRlCi0g
ICAgaWYgKHN0YXRlID09IENvbnRyb2xTdGF0ZXM6OkhvdmVyU3RhdGUgJiYgIXN1cHBvcnRzSG92
ZXIoJm8tPnN0eWxlKCkpKQorICAgIGlmIChzdGF0ZSA9PSBDb250cm9sU3RhdGVzOjpIb3ZlclN0
YXRlICYmICFzdXBwb3J0c0hvdmVyKCZvLnN0eWxlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAvLyBBc3N1bWUgcHJlc3NlZCBzdGF0ZSBpcyBvbmx5IHJlc3BvbmRlZCB0byBpZiB0
aGUgY29udHJvbCBpcyBlbmFibGVkLgpAQCAtNzQxLDE3ICs3NDEsMTcgQEAgYm9vbCBSZW5kZXJU
aGVtZTo6c3RhdGVDaGFuZ2VkKFJlbmRlck9iamVjdCogbywgQ29udHJvbFN0YXRlczo6U3RhdGVz
IHN0YXRlKSBjb24KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gUmVwYWludCB0aGUg
Y29udHJvbC4KLSAgICBvLT5yZXBhaW50KCk7CisgICAgby5yZXBhaW50KCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OnVwZGF0ZUNvbnRyb2xTdGF0ZXNGb3JSZW5k
ZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIG8sIENvbnRyb2xTdGF0ZXMqIGNvbnRyb2xTdGF0ZXMp
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjp1cGRhdGVDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIo
Y29uc3QgUmVuZGVyT2JqZWN0JiBvLCBDb250cm9sU3RhdGVzKiBjb250cm9sU3RhdGVzKSBjb25z
dAogewogICAgIENvbnRyb2xTdGF0ZXMgbmV3U3RhdGVzID0gZXh0cmFjdENvbnRyb2xTdGF0ZXNG
b3JSZW5kZXJlcihvKTsKICAgICBjb250cm9sU3RhdGVzLT5zZXRTdGF0ZXMobmV3U3RhdGVzLnN0
YXRlcygpKTsKIH0KIAotQ29udHJvbFN0YXRlczo6U3RhdGVzIFJlbmRlclRoZW1lOjpleHRyYWN0
Q29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK0Nv
bnRyb2xTdGF0ZXM6OlN0YXRlcyBSZW5kZXJUaGVtZTo6ZXh0cmFjdENvbnRyb2xTdGF0ZXNGb3JS
ZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7CiAgICAgQ29udHJvbFN0YXRl
czo6U3RhdGVzIHN0YXRlcyA9IDA7CiAgICAgaWYgKGlzSG92ZXJlZChvKSkgewpAQCAtNzY0LDcg
Kzc2NCw3IEBAIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBSZW5kZXJUaGVtZTo6ZXh0cmFjdENvbnRy
b2xTdGF0ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPCiAgICAgICAgIGlmIChpc1NwaW5VcEJ1
dHRvblBhcnRQcmVzc2VkKG8pKQogICAgICAgICAgICAgc3RhdGVzIHw9IENvbnRyb2xTdGF0ZXM6
OlNwaW5VcFN0YXRlOwogICAgIH0KLSAgICBpZiAoaXNGb2N1c2VkKG8pICYmIG8tPnN0eWxlKCku
b3V0bGluZVN0eWxlSXNBdXRvKCkpCisgICAgaWYgKGlzRm9jdXNlZChvKSAmJiBvLnN0eWxlKCku
b3V0bGluZVN0eWxlSXNBdXRvKCkpCiAgICAgICAgIHN0YXRlcyB8PSBDb250cm9sU3RhdGVzOjpG
b2N1c1N0YXRlOwogICAgIGlmIChpc0VuYWJsZWQobykpCiAgICAgICAgIHN0YXRlcyB8PSBDb250
cm9sU3RhdGVzOjpFbmFibGVkU3RhdGU7CkBAIC03ODEsOSArNzgxLDkgQEAgQ29udHJvbFN0YXRl
czo6U3RhdGVzIFJlbmRlclRoZW1lOjpleHRyYWN0Q29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGNv
bnN0IFJlbmRlck8KICAgICByZXR1cm4gc3RhdGVzOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjpp
c0FjdGl2ZShjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjpp
c0FjdGl2ZShjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9
IG8tPm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gby5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTc5OCw0MSArNzk4LDQxIEBAIGJvb2wgUmVuZGVy
VGhlbWU6OmlzQWN0aXZlKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKICAgICByZXR1cm4g
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZTo6aXNDaGVja2VkKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhl
bWU6OmlzQ2hlY2tlZChjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgaWYgKCFv
LT5ub2RlKCkpCisgICAgaWYgKCFvLm5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gby0+bm9kZSgpLT50b0lucHV0RWxl
bWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG8ubm9kZSgpLT50
b0lucHV0RWxlbWVudCgpOwogICAgIGlmICghaW5wdXRFbGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCk7
CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzSW5kZXRlcm1pbmF0ZShjb25zdCBSZW5kZXJPYmpl
Y3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc0luZGV0ZXJtaW5hdGUoY29uc3QgUmVu
ZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIGlmICghby0+bm9kZSgpKQorICAgIGlmICghby5u
b2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudCA9IG8tPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQgPSBvLm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICBp
ZiAoIWlucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGlu
cHV0RWxlbWVudC0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpOwogfQogCi1ib29sIFJlbmRl
clRoZW1lOjppc0VuYWJsZWQoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAorYm9vbCBSZW5k
ZXJUaGVtZTo6aXNFbmFibGVkKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKIHsKLSAgICBO
b2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsKICAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgcmV0dXJuICF0b0VsZW1lbnQobm9kZSktPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpOwog
fQogCi1ib29sIFJlbmRlclRoZW1lOjppc0ZvY3VzZWQoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBj
b25zdAorYm9vbCBSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKGNvbnN0IFJlbmRlck9iamVjdCYgbykg
Y29uc3QKIHsKLSAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBv
Lm5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCkBAIC04NDIsMTYgKzg0MiwxNiBAQCBib29sIFJlbmRlclRoZW1l
Ojppc0ZvY3VzZWQoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogICAgIHJldHVybiBmb2N1
c0RlbGVnYXRlID09IGRvY3VtZW50LmZvY3VzZWRFbGVtZW50KCkgJiYgZnJhbWUgJiYgZnJhbWUt
PnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpOwogfQogCi1ib29sIFJlbmRlclRoZW1l
Ojppc1ByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVt
ZTo6aXNQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKIHsKLSAgICBpZiAoIW8t
Pm5vZGUoKSB8fCAhby0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFvLm5vZGUo
KSB8fCAhby5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiB0b0VsZW1lbnQoby0+bm9kZSgpKS0+YWN0aXZlKCk7CisgICAgcmV0dXJuIHRv
RWxlbWVudChvLm5vZGUoKSktPmFjdGl2ZSgpOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjppc1Nw
aW5VcEJ1dHRvblBhcnRQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wg
UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0
JiBvKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbm9k
ZSA9IG8ubm9kZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChu
b2RlKTsKQEAgLTg2MCwxNyArODYwLDE3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0
dG9uUGFydFByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxTcGluQnV0dG9uRWxlbWVudCo+KGVsZW1lbnQpLT51cERvd25TdGF0ZSgpID09
IFNwaW5CdXR0b25FbGVtZW50OjpVcDsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNSZWFkT25s
eUNvbnRyb2woY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6
aXNSZWFkT25seUNvbnRyb2woY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIE5v
ZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IG8ubm9kZSgpOwogICAgIGlm
ICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKS0+bWF0Y2hlc1JlYWRPbmx5UHNldWRvQ2xhc3Mo
KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNIb3ZlcmVkKGNvbnN0IFJlbmRlck9iamVjdCog
bykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzSG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3Qm
IG8pIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAgICBOb2RlKiBub2Rl
ID0gby5ub2RlKCk7CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIXRvRWxlbWVudChub2RlKS0+aXNTcGluQnV0
dG9uRWxlbWVudCgpKQpAQCAtODc5LDI1ICs4NzksMjUgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNI
b3ZlcmVkKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKICAgICByZXR1cm4gZWxlbWVudC0+
aG92ZXJlZCgpICYmIGVsZW1lbnQtPnVwRG93blN0YXRlKCkgIT0gU3BpbkJ1dHRvbkVsZW1lbnQ6
OkluZGV0ZXJtaW5hdGU7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFy
dEhvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6
aXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7
Ci0gICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gby5ub2RlKCk7
CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgIXRvRWxlbWVudChu
b2RlKS0+aXNTcGluQnV0dG9uRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
U3BpbkJ1dHRvbkVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTcGluQnV0dG9uRWxlbWVu
dCo+KG5vZGUpOwogICAgIHJldHVybiBlbGVtZW50LT51cERvd25TdGF0ZSgpID09IFNwaW5CdXR0
b25FbGVtZW50OjpVcDsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNEZWZhdWx0KGNvbnN0IFJl
bmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzRGVmYXVsdChjb25zdCBS
ZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7CiAgICAgLy8gQSBidXR0b24gc2hvdWxkIG9ubHkgaGF2
ZSB0aGUgZGVmYXVsdCBhcHBlYXJhbmNlIGlmIHRoZSBwYWdlIGlzIGFjdGl2ZQogICAgIGlmICgh
aXNBY3RpdmUobykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghby0+ZnJhbWUo
KS5zZXR0aW5ncygpLmFwcGxpY2F0aW9uQ2hyb21lTW9kZSgpKQorICAgIGlmICghby5mcmFtZSgp
LnNldHRpbmdzKCkuYXBwbGljYXRpb25DaHJvbWVNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKLSAgICByZXR1cm4gby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gRGVmYXVsdEJ1
dHRvblBhcnQ7CisgICAgcmV0dXJuIG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gRGVmYXVsdEJ1
dHRvblBhcnQ7CiB9CiAKICNpZiAhVVNFKE5FV19USEVNRSkKQEAgLTk2Nyw3ICs5NjcsNyBAQCB2
b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcgogICAgIFJlbmRlcklucHV0U3BlZWNoOjphZGp1c3RJbnB1
dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwog
fQogCi1ib29sIFJlbmRlclRoZW1lOjpwYWludElucHV0RmllbGRTcGVlY2hCdXR0b24oUmVuZGVy
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRJbnB1dEZpZWxkU3BlZWNoQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gUmVuZGVySW5wdXRTcGVlY2g6OnBhaW50
SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbihvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiB9CkBAIC05
ODksNyArOTg5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6c3VwcG9ydHNNZXRlcihDb250cm9sUGFy
dCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OnBhaW50
TWV0ZXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpCiti
b29sIFJlbmRlclRoZW1lOjpwYWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQogewogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTAw
Miw5ICsxMDAyLDkgQEAgTGF5b3V0VW5pdCBSZW5kZXJUaGVtZTo6c2xpZGVyVGlja1NuYXBwaW5n
VGhyZXNob2xkKCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6
cGFpbnRTbGlkZXJUaWNrcyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBSZW5kZXJUaGVtZTo6cGFpbnRTbGlkZXJU
aWNrcyhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAg
Tm9kZSogbm9kZSA9IG8ubm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC0xMDE4LDE0ICsxMDE4LDE0IEBAIHZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlj
a3MoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywKIAogICAgIGRv
dWJsZSBtaW4gPSBpbnB1dC0+bWluaW11bSgpOwogICAgIGRvdWJsZSBtYXggPSBpbnB1dC0+bWF4
aW11bSgpOwotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKTsK
KyAgICBDb250cm9sUGFydCBwYXJ0ID0gby5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKICAgICAvLyBX
ZSBkb24ndCBzdXBwb3J0IHRpY2tzIG9uIGFsdGVybmF0ZSBzbGlkZXJzIGxpa2UgTWVkaWFWb2x1
bWVTbGlkZXJzLgogICAgIGlmIChwYXJ0ICE9ICBTbGlkZXJIb3Jpem9udGFsUGFydCAmJiBwYXJ0
ICE9IFNsaWRlclZlcnRpY2FsUGFydCkKICAgICAgICAgcmV0dXJuOwogICAgIGJvb2wgaXNIb3Jp
em9udGFsID0gcGFydCA9PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQ7CiAKICAgICBJbnRTaXplIHRo
dW1iU2l6ZTsKLSAgICBSZW5kZXJPYmplY3QqIHRodW1iUmVuZGVyZXIgPSBpbnB1dC0+c2xpZGVy
VGh1bWJFbGVtZW50KCktPnJlbmRlcmVyKCk7CisgICAgY29uc3QgUmVuZGVyT2JqZWN0JiB0aHVt
YlJlbmRlcmVyID0gaW5wdXQtPnNsaWRlclRodW1iRWxlbWVudCgpLT5yZW5kZXJlcigpOwogICAg
IGlmICh0aHVtYlJlbmRlcmVyKSB7CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiB0aHVtYlN0
eWxlID0gdGh1bWJSZW5kZXJlci0+c3R5bGUoKTsKICAgICAgICAgaW50IHRodW1iV2lkdGggPSB0
aHVtYlN0eWxlLndpZHRoKCkuaW50VmFsdWUoKTsKQEAgLTEwMzUsMTYgKzEwMzUsMTYgQEAgdm9p
ZCBSZW5kZXJUaGVtZTo6cGFpbnRTbGlkZXJUaWNrcyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLAogICAgIH0KIAogICAgIEludFNpemUgdGlja1NpemUgPSBzbGlk
ZXJUaWNrU2l6ZSgpOwotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBvLT5zdHlsZSgpLmVmZmVjdGl2
ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20o
KTsKICAgICBGbG9hdFJlY3QgdGlja1JlY3Q7CiAgICAgaW50IHRpY2tSZWdpb25TaWRlTWFyZ2lu
ID0gMDsKICAgICBpbnQgdGlja1JlZ2lvbldpZHRoID0gMDsKICAgICBJbnRSZWN0IHRyYWNrQm91
bmRzOwotICAgIFJlbmRlck9iamVjdCogdHJhY2tSZW5kZXJlciA9IGlucHV0LT5zbGlkZXJUcmFj
a0VsZW1lbnQoKS0+cmVuZGVyZXIoKTsKKyAgICBjb25zdCBSZW5kZXJPYmplY3QmIHRyYWNrUmVu
ZGVyZXIgPSBpbnB1dC0+c2xpZGVyVHJhY2tFbGVtZW50KCktPnJlbmRlcmVyKCk7CiAgICAgLy8g
V2UgY2FuIGlnbm9yaW5nIHRyYW5zZm9ybXMgYmVjYXVzZSB0cmFuc2Zvcm0gaXMgaGFuZGxlZCBi
eSB0aGUgZ3JhcGhpY3MgY29udGV4dC4KICAgICBpZiAodHJhY2tSZW5kZXJlcikKICAgICAgICAg
dHJhY2tCb3VuZHMgPSB0cmFja1JlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdElnbm9y
aW5nVHJhbnNmb3JtcygpOwotICAgIEludFJlY3Qgc2xpZGVyQm91bmRzID0gby0+YWJzb2x1dGVC
b3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKTsKKyAgICBJbnRSZWN0IHNsaWRlckJv
dW5kcyA9IG8uYWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKTsKIAog
ICAgIC8vIE1ha2UgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHRyYW5zZm9ybWVkIGFuY2VzdG9y
IGVsZW1lbnQuCiAgICAgdHJhY2tCb3VuZHMuc2V0WCh0cmFja0JvdW5kcy54KCkgLSBzbGlkZXJC
b3VuZHMueCgpICsgcmVjdC54KCkpOwpAQCAtMTA3NCw3ICsxMDc0LDcgQEAgdm9pZCBSZW5kZXJU
aGVtZTo6cGFpbnRTbGlkZXJUaWNrcyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGRvdWJsZSBwYXJzZWRW
YWx1ZSA9IHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGlucHV0LT5zYW5pdGl6ZVZhbHVlKHZh
bHVlKSk7CiAgICAgICAgIGRvdWJsZSB0aWNrRnJhY3Rpb24gPSAocGFyc2VkVmFsdWUgLSBtaW4p
IC8gKG1heCAtIG1pbik7Ci0gICAgICAgIGRvdWJsZSB0aWNrUmF0aW8gPSBpc0hvcml6b250YWwg
JiYgby0+c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyB0aWNrRnJhY3Rpb24gOiAx
LjAgLSB0aWNrRnJhY3Rpb247CisgICAgICAgIGRvdWJsZSB0aWNrUmF0aW8gPSBpc0hvcml6b250
YWwgJiYgby5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHRpY2tGcmFjdGlvbiA6
IDEuMCAtIHRpY2tGcmFjdGlvbjsKICAgICAgICAgZG91YmxlIHRpY2tQb3NpdGlvbiA9IHJvdW5k
KHRpY2tSZWdpb25TaWRlTWFyZ2luICsgdGlja1JlZ2lvbldpZHRoICogdGlja1JhdGlvKTsKICAg
ICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKICAgICAgICAgICAgIHRpY2tSZWN0LnNldFgodGlja1Bv
c2l0aW9uKTsKQEAgLTExMDAsNyArMTEwMCw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFBy
b2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopCiB7
CiB9CiAKLUludFJlY3QgUmVuZGVyVGhlbWU6OnByb2dyZXNzQmFyUmVjdEZvckJvdW5kcyhjb25z
dCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CitJbnRSZWN0IFJl
bmRlclRoZW1lOjpwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAogewogICAgIHJldHVybiBib3VuZHM7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCmluZGV4IDliZDgwZTk4YzFhM2I0MTQw
OGM4N2UzMDZhZTUwZWFkMmRlY2IzOTkuLmM3ZGUyZDUzNmJiOWViNTU1NmEyNGZlMTEyOWY2ZGM0
NDgyNzZlNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCkBAIC03OSw5
ICs3OSw5IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcGFpbnQg
dGhlIHdpZGdldCBhcyBhIGJhY2tncm91bmQgb2YgdGhlIFJlbmRlck9iamVjdC4gIEEgd2lkZ2V0
J3MgZm9yZWdyb3VuZCwgZS5nLiwgdGhlCiAgICAgLy8gdGV4dCBvZiBhIGJ1dHRvbiwgaXMgYWx3
YXlzIHJlbmRlcmVkIGJ5IHRoZSBlbmdpbmUgaXRzZWxmLiAgVGhlIGJvb2xlYW4gcmV0dXJuIHZh
bHVlIGluZGljYXRlcwogICAgIC8vIHdoZXRoZXIgdGhlIENTUyBib3JkZXIvYmFja2dyb3VuZCBz
aG91bGQgYWxzbyBiZSBwYWludGVkLgotICAgIGJvb2wgcGFpbnQoUmVuZGVyT2JqZWN0KiwgQ29u
dHJvbFN0YXRlcyosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICBib29s
IHBhaW50Qm9yZGVyT25seShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7Ci0gICAgYm9vbCBwYWludERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIHBhaW50KGNvbnN0IFJlbmRl
ck9iamVjdCYsIENvbnRyb2xTdGF0ZXMqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgYm9vbCBwYWludEJvcmRlck9ubHkoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIGJvb2wgcGFpbnREZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAK
ICAgICAvLyBUaGUgcmVtYWluaW5nIG1ldGhvZHMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGJ5IHRo
ZSBwbGF0Zm9ybS1zcGVjaWZpYyBwb3J0aW9uIG9mIHRoZSB0aGVtZSwgZS5nLiwKICAgICAvLyBS
ZW5kZXJUaGVtZU1hYy5jcHAgZm9yIE1hYyBPUyBYLgpAQCAtMTA2LDE0ICsxMDYsMTQgQEAgcHVi
bGljOgogICAgIC8vIEEgbWV0aG9kIHRvIG9idGFpbiB0aGUgYmFzZWxpbmUgcG9zaXRpb24gZm9y
IGEgImxlYWYiIGNvbnRyb2wuICBUaGlzIHdpbGwgb25seSBiZSB1c2VkIGlmIGEgYmFzZWxpbmUK
ICAgICAvLyBwb3NpdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgY2hpbGQg
Y29udGVudC4gQ2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucyBhcmUgZXhhbXBsZXMgb2YKICAg
ICAvLyBjb250cm9scyB0aGF0IG5lZWQgdG8gZG8gdGhpcy4KLSAgICB2aXJ0dWFsIGludCBiYXNl
bGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZpcnR1YWwgaW50
IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7CiAKICAgICAvLyBB
IG1ldGhvZCBmb3IgYXNraW5nIGlmIGEgY29udHJvbCBpcyBhIGNvbnRhaW5lciBvciBub3QuICBM
ZWFmIGNvbnRyb2xzIGhhdmUgdG8gaGF2ZSBzb21lIHNwZWNpYWwgYmVoYXZpb3IgKGxpa2UKICAg
ICAvLyB0aGUgYmFzZWxpbmUgcG9zaXRpb24gQVBJIGFib3ZlKS4KICAgICBib29sIGlzQ29udHJv
bENvbnRhaW5lcihDb250cm9sUGFydCkgY29uc3Q7CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcg
aWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3Vz
IG9yIG5vdC4KLSAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVu
ZGVyT2JqZWN0KikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY29u
dHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIAogICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBjb250cm9sIGhhcyBiZWVuIHN0eWxl
ZCBlbm91Z2ggYnkgdGhlIGF1dGhvciB0byBkaXNhYmxlIHRoZSBuYXRpdmUgYXBwZWFyYW5jZS4K
ICAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29u
c3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5k
Q29sb3IpIGNvbnN0OwpAQCAtMTIzLDExICsxMjMsMTEgQEAgcHVibGljOgogCiAgICAgLy8gU29t
ZSBjb250cm9scyBtYXkgc3BpbGwgb3V0IG9mIHRoZWlyIGNvbnRhaW5lcnMgKGUuZy4sIHRoZSBj
aGVjayBvbiBhbiBPUyBYIGNoZWNrYm94KS4gIFdoZW4gdGhlc2UgY29udHJvbHMgcmVwYWludCwK
ICAgICAvLyB0aGUgdGhlbWUgbmVlZHMgdG8gY29tbXVuaWNhdGUgdGhpcyBpbmZsYXRlZCByZWN0
IHRvIHRoZSBlbmdpbmUgc28gdGhhdCBpdCBjYW4gaW52YWxpZGF0ZSB0aGUgd2hvbGUgY29udHJv
bC4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0
KiwgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBS
ZW5kZXJPYmplY3QmLCBJbnRSZWN0Jik7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQg
d2hlbmV2ZXIgYSByZWxldmFudCBzdGF0ZSBjaGFuZ2VzIG9uIGEgcGFydGljdWxhciB0aGVtZWQg
b2JqZWN0LCBlLmcuLCB0aGUgbW91c2UgYmVjb21lcyBwcmVzc2VkCiAgICAgLy8gb3IgYSBjb250
cm9sIGJlY29tZXMgZGlzYWJsZWQuCi0gICAgdmlydHVhbCBib29sIHN0YXRlQ2hhbmdlZChSZW5k
ZXJPYmplY3QqLCBDb250cm9sU3RhdGVzOjpTdGF0ZXMpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBzdGF0ZUNoYW5nZWQoY29uc3QgUmVuZGVyT2JqZWN0JiwgQ29udHJvbFN0YXRlczo6U3RhdGVz
KSBjb25zdDsKIAogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgdGhl
bWUgY2hhbmdlcyBvbiB0aGUgc3lzdGVtIGluIG9yZGVyIHRvIGZsdXNoIGNhY2hlZCByZXNvdXJj
ZXMgZnJvbSB0aGUKICAgICAvLyBvbGQgdGhlbWUuCkBAIC0xODgsMTQgKzE4OCwxNCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzY3JvbGxiYXJDb250cm9sU2l6
ZUZvclBhcnQoQ29udHJvbFBhcnQpIHsgcmV0dXJuIFJlZ3VsYXJTY3JvbGxiYXI7IH0KIAogICAg
IC8vIE1ldGhvZCBmb3IgcGFpbnRpbmcgdGhlIGNhcHMgbG9jayBpbmRpY2F0b3IKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gMDsgfTsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gMDsgfTsKIAogI2lmIEVOQUJMRShQUk9HUkVT
U19FTEVNRU5UKQogICAgIC8vIFJldHVybnMgdGhlIHJlcGVhdCBpbnRlcnZhbCBvZiB0aGUgYW5p
bWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgogICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlv
blJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKICAg
ICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jl
c3MgYmFyLgogICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NC
YXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFJlY3QgcHJvZ3Jlc3NC
YXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEludFJlY3QgcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IEludFJlY3QmKSBjb25zdDsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFZJREVPKQpAQCAtMjI4LDcgKzIyOCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFNpemUg
c2xpZGVyVGlja1NpemUoKSBjb25zdCA9IDA7CiAgICAgLy8gUmV0dXJucyB0aGUgZGlzdGFuY2Ug
b2Ygc2xpZGVyIHRpY2sgb3JpZ2luIGZyb20gdGhlIHNsaWRlciB0cmFjayBjZW50ZXIuCiAgICAg
dmlydHVhbCBpbnQgc2xpZGVyVGlja09mZnNldEZyb21UcmFja0NlbnRlcigpIGNvbnN0ID0gMDsK
LSAgICB2b2lkIHBhaW50U2xpZGVyVGlja3MoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgcGFpbnRTbGlkZXJUaWNrcyhjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjZW5kaWYKIAog
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yNDMsMTAgKzI0MywxMCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqLCBjb25zdCBG
b250JiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdDsKIAogICAg
IGVudW0gRmlsZVVwbG9hZERlY29yYXRpb25zIHsgU2luZ2xlRmlsZSwgTXVsdGlwbGVGaWxlcyB9
OwotICAgIHZpcnR1YWwgYm9vbCBwYWludEZpbGVVcGxvYWRJY29uRGVjb3JhdGlvbnMoUmVuZGVy
T2JqZWN0KiAvKmlucHV0UmVuZGVyZXIqLywgUmVuZGVyT2JqZWN0KiAvKmJ1dHRvblJlbmRlcmVy
Ki8sIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmLCBJY29uKiwgRmlsZVVwbG9hZERl
Y29yYXRpb25zKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50RmlsZVVw
bG9hZEljb25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIC8qaW5wdXRSZW5kZXJlciov
LCBjb25zdCBSZW5kZXJPYmplY3QmIC8qYnV0dG9uUmVuZGVyZXIqLywgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYsIEljb24qLCBGaWxlVXBsb2FkRGVjb3JhdGlvbnMpIHsgcmV0dXJu
IHRydWU7IH0KIAogI2lmIEVOQUJMRShJTUFHRV9DT05UUk9MUykKLSAgICB2aXJ0dWFsIEludFNp
emUgaW1hZ2VDb250cm9sc0J1dHRvblNpemUoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3QgeyBy
ZXR1cm4gSW50U2l6ZSgpOyB9CisgICAgdmlydHVhbCBJbnRTaXplIGltYWdlQ29udHJvbHNCdXR0
b25TaXplKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0IHsgcmV0dXJuIEludFNpemUoKTsgfQog
I2VuZGlmCiAKIHByb3RlY3RlZDoKQEAgLTI2NywxMjIgKzI2NywxMjIgQEAgcHJvdGVjdGVkOgog
I2lmICFVU0UoTkVXX1RIRU1FKQogICAgIC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5jZSB2
YWx1ZS4KICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50
Q2hlY2tib3goUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBj
b25zdCB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRSYWRpbyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVl
OyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsg
fQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQog
CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNw
aW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCi0gICAgdmlydHVhbCBib29sIHBhaW50
Q2hlY2tib3hEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlv
RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b25EZWNvcmF0
aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94RGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpb0RlY29yYXRpb25zKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uRGVjb3JhdGlvbnMoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZp
ZWxkRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGREZWNvcmF0aW9u
cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50VGV4
dEFyZWFEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVh
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWFEZWNvcmF0aW9u
cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVu
dUxpc3REZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3REZWNvcmF0aW9u
cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVl
OyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTcXVhcmVCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBwYWludFB1c2hCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFNxdWFyZUJ1dHRvbkRlY29yYXRpb25zKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVy
biB0cnVlOyB9CiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWV0ZXIoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1ldGVy
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCiAgICAgdmlydHVhbCB2b2lk
IGFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRp
ZgogCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5w
dXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbnB1dEZpZWxkU3BlZWNoQnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRJbnB1dEZpZWxkU3BlZWNoQnV0dG9uKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRpZgogCiAgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRy
YWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRo
dW1iRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVt
Yihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iRGVjb3Jh
dGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9v
bCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Vh
cmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29y
YXRpb25QYXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNv
cmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0TWVkaWFDb250cm9sU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhRnVsbHNjcmVlbkJ1
dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhT3ZlcmxheVBsYXlCdXR0b24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFW
b2x1bWVTbGlkZXJDb250YWluZXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFW
b2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUmV3
aW5kQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFSZXR1cm5Ub1Jl
YWx0aW1lQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFUb2dnbGVD
bG9zZWRDYXB0aW9uc0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlh
Q29udHJvbHNCYWNrZ3JvdW5kKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFD
dXJyZW50VGltZShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVGltZVJlbWFp
bmluZyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhRnVsbFNjcmVlblZvbHVt
ZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsU2Ny
ZWVuVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNu
YXBzaG90dGVkUGx1Z2luT3ZlcmxheShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
ZGlhRnVsbHNjcmVlbkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhUGxheUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
ZGlhT3ZlcmxheVBsYXlCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYU11dGVCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYVNlZWtCYWNrQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lZGlhU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYVNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhUmV3aW5kQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhQ29udHJvbHNCYWNrZ3Jv
dW5kKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFDdXJyZW50VGlt
ZShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVGltZVJlbWFpbmlu
Zyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhRnVsbFNjcmVlblZv
bHVtZVNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1
YWwgYm9vbCBwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAj
aWYgRU5BQkxFKElNQUdFX0NPTlRST0xTKQotICAgIHZpcnR1YWwgYm9vbCBwYWludEltYWdlQ29u
dHJvbHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbWFnZUNvbnRyb2xz
QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKIAogcHVibGljOgotICAgIHZvaWQgdXBkYXRl
Q29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIENvbnRyb2xTdGF0
ZXMqKSBjb25zdDsKLSAgICBDb250cm9sU3RhdGVzOjpTdGF0ZXMgZXh0cmFjdENvbnRyb2xTdGF0
ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLSAgICBib29sIGlzQWN0
aXZlKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwotICAgIGJvb2wgaXNDaGVja2VkKGNvbnN0
IFJlbmRlck9iamVjdCopIGNvbnN0OwotICAgIGJvb2wgaXNJbmRldGVybWluYXRlKGNvbnN0IFJl
bmRlck9iamVjdCopIGNvbnN0OwotICAgIGJvb2wgaXNFbmFibGVkKGNvbnN0IFJlbmRlck9iamVj
dCopIGNvbnN0OwotICAgIGJvb2wgaXNGb2N1c2VkKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0
OwotICAgIGJvb2wgaXNQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwotICAgIGJv
b2wgaXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsK
LSAgICBib29sIGlzSG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLSAgICBib29s
IGlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0g
ICAgYm9vbCBpc1JlYWRPbmx5Q29udHJvbChjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLSAg
ICBib29sIGlzRGVmYXVsdChjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICB2b2lkIHVw
ZGF0ZUNvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QmLCBDb250cm9s
U3RhdGVzKikgY29uc3Q7CisgICAgQ29udHJvbFN0YXRlczo6U3RhdGVzIGV4dHJhY3RDb250cm9s
U3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7CisgICAgYm9vbCBp
c0FjdGl2ZShjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKKyAgICBib29sIGlzQ2hlY2tlZChj
b25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKKyAgICBib29sIGlzSW5kZXRlcm1pbmF0ZShjb25z
dCBSZW5kZXJPYmplY3QmKSBjb25zdDsKKyAgICBib29sIGlzRW5hYmxlZChjb25zdCBSZW5kZXJP
YmplY3QmKSBjb25zdDsKKyAgICBib29sIGlzRm9jdXNlZChjb25zdCBSZW5kZXJPYmplY3QmKSBj
b25zdDsKKyAgICBib29sIGlzUHJlc3NlZChjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKKyAg
ICBib29sIGlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0JikgY29u
c3Q7CisgICAgYm9vbCBpc0hvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7CisgICAg
Ym9vbCBpc1NwaW5VcEJ1dHRvblBhcnRIb3ZlcmVkKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0
OworICAgIGJvb2wgaXNSZWFkT25seUNvbnRyb2woY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7
CisgICAgYm9vbCBpc0RlZmF1bHQoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7CiAKIHByaXZh
dGU6CiAgICAgbXV0YWJsZSBDb2xvciBtX2FjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgKaW5kZXggNWI5ZDgxNWI4
NjMzOTNlYWJjYjQ3ZWJjZmEyY2ZlM2RiNWE5ZWEyYS4uZjM3ZjNmOGMzOWZkYzU1Mjk4NDA5MzFl
YTI2YWI2ZjVmNmYzYWVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lSU9TLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
SU9TLmgKQEAgLTQ4LDM1ICs0OCwzNSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENGU3RyaW5nUmVm
IGNvbnRlbnRTaXplQ2F0ZWdvcnkoKTsKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgaW50IGJh
c2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVy
U3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBj
b25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIE1l
dGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4KICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UmFk
aW9EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW9EZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3Zl
cnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQdXNo
QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbkRlY29yYXRp
b25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRGaWxlVXBsb2FkSWNvbkRlY29y
YXRpb25zKFJlbmRlck9iamVjdCogaW5wdXRSZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBidXR0b25S
ZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYsIEljb24qLCBGaWxlVXBs
b2FkRGVjb3JhdGlvbnMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludEZpbGVVcGxv
YWRJY29uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBpbnB1dFJlbmRlcmVyLCBjb25z
dCBSZW5kZXJPYmplY3QmIGJ1dHRvblJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JiwgSWNvbiosIEZpbGVVcGxvYWREZWNvcmF0aW9ucykgb3ZlcnJpZGU7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29s
IHBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZp
ZWxkRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhRGVj
b3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwog
CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9v
bCBwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3Zl
cnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNs
aWRlclRodW1iRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1i
RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCiAgICAg
Ly8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBw
cm9ncmVzcyBiYXIuCkBAIC04NCw3ICs4NCw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBSZXR1cm5z
IHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgogICAg
IHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MqKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNz
QmFyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQpAQCAtOTMsNyArOTMsNyBAQCBwcm90ZWN0
ZWQ6CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwg
Q29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdCBvdmVycmlkZTsKQEAgLTExNSw3ICsxMTUsNyBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgflJlbmRlclRoZW1lSU9TKCkgeyB9CiAKICAgICBjb25zdCBDb2xvciYgc2hh
ZG93Q29sb3IoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgYWRkUm91bmRlZEJvcmRlckNsaXAoUmVu
ZGVyT2JqZWN0KiBib3gsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICBG
bG9hdFJlY3QgYWRkUm91bmRlZEJvcmRlckNsaXAoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKIAogICAgIFN0cmluZyBtX21lZGlhQ29u
dHJvbHNTY3JpcHQ7CiAgICAgU3RyaW5nIG1fbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KaW5kZXggMjZmMmY1NDA2Nzdl
ODBjNzUzMzBiZmU5YzM0ZGNlZWYzNGI1NzkxMS4uZTllYzJiYTI5Yzg2MGYxYmZhNTU1M2U5NjI1
YjVmYzAxZWRjNzgxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQpAQCAtMzE2LDExICszMTYsMTEgQEAgY29uc3QgQ29sb3ImIFJlbmRlclRoZW1lSU9TOjpz
aGFkb3dDb2xvcigpIGNvbnN0CiAgICAgcmV0dXJuIGNvbG9yOwogfQogCi1GbG9hdFJlY3QgUmVu
ZGVyVGhlbWVJT1M6OmFkZFJvdW5kZWRCb3JkZXJDbGlwKFJlbmRlck9iamVjdCogYm94LCBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCitGbG9hdFJlY3QgUmVu
ZGVyVGhlbWVJT1M6OmFkZFJvdW5kZWRCb3JkZXJDbGlwKGNvbnN0IFJlbmRlck9iamVjdCYgYm94
LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAg
Ly8gVG8gZml4IGlubmVyIGJvcmRlciBibGVlZGluZyBpc3N1ZXMgPHJkYXI6Ly9wcm9ibGVtLzk4
MTI1MDc+LCB3ZSBjbGlwIHRvIHRoZSBvdXRlciBib3JkZXIgYW5kIGFzc2VydCB0aGF0CiAgICAg
Ly8gdGhlIGJvcmRlciBpcyBvcGFxdWUgb3IgdHJhbnNwYXJlbnQsIHVubGVzcyB3ZSdyZSBjaGVj
a2VkIGJlY2F1c2UgY2hlY2tlZCByYWRpby9jaGVja2JveGVzIHNob3cgbm8gYmxlZWRpbmcuCi0g
ICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gYm94LT5zdHlsZSgpOworICAgIFJlbmRlclN0eWxlJiBz
dHlsZSA9IGJveC5zdHlsZSgpOwogICAgIFJvdW5kZWRSZWN0IGJvcmRlciA9IGlzQ2hlY2tlZChi
b3gpID8gc3R5bGUuZ2V0Um91bmRlZElubmVyQm9yZGVyRm9yKHJlY3QpIDogc3R5bGUuZ2V0Um91
bmRlZEJvcmRlckZvcihyZWN0KTsKIAogICAgIGlmIChib3JkZXIuaXNSb3VuZGVkKCkpCkBAIC0z
NTcsNyArMzU3LDcgQEAgc3RhdGljIENHUG9pbnQgc2hvcnRlbmVkKENHUG9pbnQgc3RhcnQsIENH
UG9pbnQgZW5kLCBmbG9hdCB3aWR0aCkKICAgICByZXR1cm4gQ0dQb2ludE1ha2Uoc3RhcnQueCAr
IHggKiByYXRpbywgc3RhcnQueSArIHkgKiByYXRpbyk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJ
T1M6OnBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1l
SU9TOjpwYWludENoZWNrYm94RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwog
ICAgIEZsb2F0UmVjdCBjbGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8u
Y29udGV4dCwgcmVjdCk7CkBAIC00MDgsMTcgKzQwOCwxNyBAQCBib29sIFJlbmRlclRoZW1lSU9T
OjpwYWludENoZWNrYm94RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBib3gsIGNvbnN0IFBhaW50
SW5mbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW50IFJlbmRlclRoZW1lSU9TOjpiYXNlbGlu
ZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpIGNvbnN0CitpbnQgUmVuZGVy
VGhlbWVJT1M6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikg
Y29uc3QKIHsKLSAgICBpZiAoIXJlbmRlcmVyLT5pc0JveCgpKQorICAgIGlmICghcmVuZGVyZXIu
aXNCb3goKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9
IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKKyAgICBjb25zdCBSZW5kZXJCb3gmIGJveCA9ICp0b1Jl
bmRlckJveCgmcmVuZGVyZXIpOwogCi0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkg
PT0gQ2hlY2tib3hQYXJ0IHx8IGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0
KQotICAgICAgICByZXR1cm4gYm94LT5tYXJnaW5Ub3AoKSArIGJveC0+aGVpZ2h0KCkgLSAyOyAv
LyBUaGUgYmFzZWxpbmUgaXMgMnB4IHVwIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgY2hlY2tib3gv
cmFkaW8gaW4gQXBwS2l0LgotICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IE1l
bnVsaXN0UGFydCkKLSAgICAgICAgcmV0dXJuIGJveC0+bWFyZ2luVG9wKCkgKyBib3gtPmhlaWdo
dCgpIC0gNTsgLy8gVGhpcyBpcyB0byBtYXRjaCBBcHBLaXQuIFRoZXJlIG1pZ2h0IGJlIGEgYmV0
dGVyIHdheSB0byBjYWxjdWxhdGUgdGhpcyB0aG91Z2guCisgICAgaWYgKGJveC5zdHlsZSgpLmFw
cGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQgfHwgYm94LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09
IFJhZGlvUGFydCkKKyAgICAgICAgcmV0dXJuIGJveC5tYXJnaW5Ub3AoKSArIGJveC5oZWlnaHQo
KSAtIDI7IC8vIFRoZSBiYXNlbGluZSBpcyAycHggdXAgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBj
aGVja2JveC9yYWRpbyBpbiBBcHBLaXQuCisgICAgaWYgKGJveC5zdHlsZSgpLmFwcGVhcmFuY2Uo
KSA9PSBNZW51bGlzdFBhcnQpCisgICAgICAgIHJldHVybiBib3gubWFyZ2luVG9wKCkgKyBib3gu
aGVpZ2h0KCkgLSA1OyAvLyBUaGlzIGlzIHRvIG1hdGNoIEFwcEtpdC4gVGhlcmUgbWlnaHQgYmUg
YSBiZXR0ZXIgd2F5IHRvIGNhbGN1bGF0ZSB0aGlzIHRob3VnaC4KICAgICByZXR1cm4gUmVuZGVy
VGhlbWU6OmJhc2VsaW5lUG9zaXRpb24oYm94KTsKIH0KIApAQCAtNDQ1LDcgKzQ0NSw3IEBAIHZv
aWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVuCiAgICAgc3R5bGUtPnNldEJvcmRlclJhZGl1cyhJbnRTaXpl
KGxlbmd0aC52YWx1ZSgpIC8gMi4wZiwgbGVuZ3RoLnZhbHVlKCkgLyAyLjBmKSk7CiB9CiAKLWJv
b2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UmFkaW9EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJv
eCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29s
IFJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0
JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQog
ewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNv
bnRleHQpOwogICAgIEZsb2F0UmVjdCBjbGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBw
YWludEluZm8uY29udGV4dCwgcmVjdCk7CkBAIC00NzMsOSArNDczLDkgQEAgYm9vbCBSZW5kZXJU
aGVtZUlPUzo6cGFpbnRSYWRpb0RlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQ
YWludEluZm8mIHAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6
OnBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBib3gsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgUmVu
ZGVyU3R5bGUmIHN0eWxlID0gYm94LT5zdHlsZSgpOworICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9
IGJveC5zdHlsZSgpOwogICAgIEludFBvaW50IHBvaW50KHJlY3QueCgpICsgc3R5bGUuYm9yZGVy
TGVmdFdpZHRoKCksIHJlY3QueSgpICsgc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSk7CiAKICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsK
QEAgLTQ4NSwxNCArNDg1LDE0IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50VGV4dEZpZWxk
RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBib3gsIGNvbnN0IFBhaW50SW5mCiAgICAgLy8gVGhp
cyBncmFkaWVudCBnZXRzIGRyYXduIGJsYWNrIHdoZW4gcHJpbnRpbmcuCiAgICAgLy8gRG8gbm90
IGRyYXcgdGhlIGdyYWRpZW50IGlmIHRoZXJlIGlzIG5vIHZpc2libGUgdG9wIGJvcmRlci4KICAg
ICBib29sIHRvcEJvcmRlcklzSW52aXNpYmxlID0gIXN0eWxlLmhhc0JvcmRlcigpIHx8ICFzdHls
ZS5ib3JkZXJUb3BXaWR0aCgpIHx8IHN0eWxlLmJvcmRlclRvcElzVHJhbnNwYXJlbnQoKTsKLSAg
ICBpZiAoIWJveC0+dmlldygpLnByaW50aW5nKCkgJiYgIXRvcEJvcmRlcklzSW52aXNpYmxlKQor
ICAgIGlmICghYm94LnZpZXcoKS5wcmludGluZygpICYmICF0b3BCb3JkZXJJc0ludmlzaWJsZSkK
ICAgICAgICAgZHJhd0F4aWFsR3JhZGllbnQocGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLCBncmFkaWVudFdpdGhOYW1lKEluc2V0R3JhZGllbnQpLCBwb2ludCwgRmxvYXRQb2lu
dChDR1BvaW50TWFrZShwb2ludC54KCksIHBvaW50LnkoKSArIDMuMGYpKSwgTGluZWFySW50ZXJw
b2xhdGlvbik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lSU9TOjpw
YWludFRleHRBcmVhRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1l
SU9TOjpwYWludFRleHRBcmVhRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHJl
dHVybiBwYWludFRleHRGaWVsZERlY29yYXRpb25zKHJlbmRlcmVyLCBwYWludEluZm8sIHJlY3Qp
OworICAgIHJldHVybiBwYWludFRleHRGaWVsZERlY29yYXRpb25zKGJveCwgcGFpbnRJbmZvLCBy
ZWN0KTsKIH0KIAogY29uc3QgaW50IE1lbnVMaXN0TWluSGVpZ2h0ID0gMTU7CkBAIC01ODIsOSAr
NTgyLDkgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWwKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVy
VGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJv
eCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29s
IFJlbmRlclRoZW1lSU9TOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVu
ZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IGJveC0+c3R5bGUoKTsKKyAgICBS
ZW5kZXJTdHlsZSYgc3R5bGUgPSBib3guc3R5bGUoKTsKICAgICBmbG9hdCBib3JkZXJUb3BXaWR0
aCA9IHN0eWxlLmJvcmRlclRvcFdpZHRoKCk7CiAgICAgRmxvYXRSZWN0IGNsaXAocmVjdC54KCkg
KyBzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSwgcmVjdC55KCkgKyBzdHlsZS5ib3JkZXJUb3BXaWR0
aCgpLCByZWN0LndpZHRoKCkgLSBzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSAtIHN0eWxlLmJvcmRl
clJpZ2h0V2lkdGgoKSwgcmVjdC5oZWlnaHQoKSAtIHN0eWxlLmJvcmRlclRvcFdpZHRoKCkgLSBz
dHlsZS5ib3JkZXJCb3R0b21XaWR0aCgpKTsKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0g
cGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwpAQCAtNjEyLDcgKzYxMiw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5k
ZXJPYmplY3QqIGJveCwgY29uc3QgUGFpCiAKICAgICBmbG9hdCBzZXBhcmF0b3IgPSBjbGlwLm1h
eFgoKSAtIE1lbnVMaXN0QnV0dG9uUGFkZGluZ1JpZ2h0OwogCi0gICAgYm94LT5kcmF3TGluZUZv
ckJveFNpZGUocGFpbnRJbmZvLmNvbnRleHQsIHNlcGFyYXRvciAtIGJvcmRlclRvcFdpZHRoLCBj
bGlwLnkoKSwgc2VwYXJhdG9yLCBjbGlwLm1heFkoKSwgQlNSaWdodCwgc3R5bGUudmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpLCBzdHlsZS5ib3JkZXJUb3BT
dHlsZSgpLCAwLCAwKTsKKyAgICBib3guZHJhd0xpbmVGb3JCb3hTaWRlKHBhaW50SW5mby5jb250
ZXh0LCBzZXBhcmF0b3IgLSBib3JkZXJUb3BXaWR0aCwgY2xpcC55KCksIHNlcGFyYXRvciwgY2xp
cC5tYXhZKCksIEJTUmlnaHQsIHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUJvcmRlclRvcENvbG9yKSwgc3R5bGUuYm9yZGVyVG9wU3R5bGUoKSwgMCwgMCk7CiAKICAgICBG
bG9hdFJlY3QgYnV0dG9uQ2xpcChzZXBhcmF0b3IgLSBhZGp1c3RUb3AsIGNsaXAueSgpIC0gYWRq
dXN0VG9wLCBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdodCArIGFkanVzdFRvcCArIGFkanVzdFJp
Z2h0LCBjbGlwLmhlaWdodCgpICsgYWRqdXN0VG9wICsgYWRqdXN0Qm90dG9tKTsKIApAQCAtNjMx
LDcgKzYzMSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNv
cmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpCiAKICAgICAvLyBQYWludCBJbmRp
Y2F0b3JzLgogCi0gICAgaWYgKGJveC0+aXNNZW51TGlzdCgpICYmIHRvSFRNTFNlbGVjdEVsZW1l
bnQoYm94LT5ub2RlKCkpLT5tdWx0aXBsZSgpKSB7CisgICAgaWYgKGJveC5pc01lbnVMaXN0KCkg
JiYgdG9IVE1MU2VsZWN0RWxlbWVudChib3gubm9kZSgpKS0+bXVsdGlwbGUoKSkgewogICAgICAg
ICBpbnQgc2l6ZSA9IDI7CiAgICAgICAgIGludCBjb3VudCA9IDM7CiAgICAgICAgIGludCBwYWRk
aW5nID0gMzsKQEAgLTY4NCwxMCArNjg0LDEwIEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVz
dFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlCiAg
ICAgc3R5bGUtPnNldEJvcmRlclJhZGl1cyhMZW5ndGhTaXplKHJhZGl1c1dpZHRoLCByYWRpdXNI
ZWlnaHQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUcmFjayhSZW5k
ZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCitib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRl
ck9iamVjdCYgYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKICAgICBJbnRSZWN0IHRyYWNrQ2xpcCA9IHJlY3Q7Ci0gICAgUmVuZGVyU3R5bGUm
IHN0eWxlID0gYm94LT5zdHlsZSgpOworICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IGJveC5zdHls
ZSgpOwogCiAgICAgYm9vbCBpc0hvcml6b250YWwgPSB0cnVlOwogICAgIHN3aXRjaCAoc3R5bGUu
YXBwZWFyYW5jZSgpKSB7CkBAIC03NzksNyArNzc5LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6
YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
CiAgICAgfQogfQogCi1ib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRodW1iRGVjb3Jh
dGlvbnMoUmVuZGVyT2JqZWN0KiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUaHVtYkRl
Y29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKICAgICBGbG9hdFJlY3QgY2xpcCA9
IGFkZFJvdW5kZWRCb3JkZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3QpOwpAQCAt
ODA3LDkgKzgwNyw5IEBAIGRvdWJsZSBSZW5kZXJUaGVtZUlPUzo6YW5pbWF0aW9uRHVyYXRpb25G
b3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiti
b29sIFJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYg
cmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogewotICAgIGlmICghcmVuZGVyZXItPmlzUHJvZ3Jlc3MoKSkKKyAgICBpZiAoIXJlbmRlcmVy
LmlzUHJvZ3Jlc3MoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjb25zdCBpbnQgcHJv
Z3Jlc3NCYXJIZWlnaHQgPSA5OwpAQCAtODM2LDcgKzgzNiw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJ
T1M6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUGFpbnRJ
bmZvJiBwCiAgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKDB4OGQs
IDB4OGQsIDB4OGQpKTsKICAgICBjb250ZXh0LT5zZXRTdHJva2VHcmFkaWVudChzdHJva2VHcmFk
aWVudC5yZWxlYXNlKCkpOwogCi0gICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gcmVuZGVyZXIt
PnN0eWxlKCkuY29sb3JTcGFjZSgpOworICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IHJlbmRl
cmVyLnN0eWxlKCkuY29sb3JTcGFjZSgpOwogICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xv
cigyNTUsIDI1NSwgMjU1KSwgY29sb3JTcGFjZSk7CiAKICAgICBQYXRoIHRyYWNrUGF0aDsKQEAg
LTg1NywxMCArODU3LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIo
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwCiAKICAgICBjb250ZXh0
LT5maWxsUmVjdChGbG9hdFJlY3QocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24s
IHJlY3Qud2lkdGgoKSwgdXBwZXJHcmFkaWVudEhlaWdodCkpOwogCi0gICAgUmVuZGVyUHJvZ3Jl
c3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhyZW5kZXJlcik7Ci0gICAgaWYg
KHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCkpIHsKKyAgICBjb25zdCBSZW5kZXJQcm9n
cmVzcyYgcmVuZGVyUHJvZ3Jlc3MgPSAqdG9SZW5kZXJQcm9ncmVzcygmcmVuZGVyZXIpOworICAg
IGlmIChyZW5kZXJQcm9ncmVzcy5pc0RldGVybWluYXRlKCkpIHsKICAgICAgICAgLy8gMikgRHJh
dyB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgICAgICBkb3VibGUgcG9zaXRpb24gPSBjbGFtcFRvKHJl
bmRlclByb2dyZXNzLT5wb3NpdGlvbigpLCAwLjAsIDEuMCk7CisgICAgICAgIGRvdWJsZSBwb3Np
dGlvbiA9IGNsYW1wVG8ocmVuZGVyUHJvZ3Jlc3MucG9zaXRpb24oKSwgMC4wLCAxLjApOwogICAg
ICAgICBkb3VibGUgYmFyV2lkdGggPSBwb3NpdGlvbiAqIHJlY3Qud2lkdGgoKTsKICAgICAgICAg
UmVmUHRyPEdyYWRpZW50PiBiYXJHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoRmxvYXRQb2lu
dChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuNSksIEZsb2F0UG9pbnQo
cmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0JhckhlaWdodCAt
IDEpKTsKICAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIENvbG9yKDE5NSwg
MjE3LCAyNDcpKTsKQEAgLTg3OSw3ICs4NzksNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWlu
dFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcAog
CiAgICAgICAgIFBhdGggYmFyUGF0aDsKICAgICAgICAgaW50IGxlZnQgPSByZWN0LngoKTsKLSAg
ICAgICAgaWYgKCFyZW5kZXJQcm9ncmVzcy0+c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkpCisgICAgICAgIGlmICghcmVuZGVyUHJvZ3Jlc3Muc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkpCiAgICAgICAgICAgICBsZWZ0ID0gcmVjdC5tYXhYKCkgLSBiYXJXaWR0aDsKICAg
ICAgICAgRmxvYXRSZWN0IGJhclJlY3QobGVmdCArIDAuMjUsIHZlcnRpY2FsUmVuZGVyaW5nUG9z
aXRpb24gKyAwLjI1LCBzdGQ6Om1heChiYXJXaWR0aCAtIDAuNSwgMC4wKSwgcHJvZ3Jlc3NCYXJI
ZWlnaHQgLSAwLjUpOwogICAgICAgICBiYXJQYXRoLmFkZFJvdW5kZWRSZWN0KGJhclJlY3QsIHJv
dW5kZWRDb3JuZXJSYWRpdXMpOwpAQCAtOTIxLDcgKzkyMSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJ
T1M6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlCiAgICAgYWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoKnN0eWxlLCBib3gpOwogfQogCi1i
b29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMoUmVuZGVyT2Jq
ZWN0KiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQorYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKGNvbnN0
IFJlbmRlck9iamVjdCYgYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhib3gs
IHBhaW50SW5mbywgcmVjdCk7CiB9CkBAIC05NDcsMTggKzk0NywxOCBAQCB2b2lkIFJlbmRlclRo
ZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUqIHN0eQogICAgIGFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKCpzdHlsZSwgYm94KTsKIH0K
IAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmpl
Y3QqIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Citib29sIFJlbmRlclRoZW1lSU9TOjpwYWludEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRl
ck9iamVjdCYgYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKICAgICByZXR1cm4gcGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlvbnMoYm94LCBwYWlu
dEluZm8sIHJlY3QpOwogfQogCi1ib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFB1c2hCdXR0b25E
ZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFB1c2hCdXR0
b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAgICAgRmxvYXRSZWN0IGNs
aXAgPSBhZGRSb3VuZGVkQm9yZGVyQ2xpcChib3gsIHBhaW50SW5mby5jb250ZXh0LCByZWN0KTsK
IAogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwYWludEluZm8uY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCk7Ci0gICAgaWYgKGJveC0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmlzRGFyaygpKQorICAgIGlmIChib3guc3R5bGUo
KS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmlzRGFy
aygpKQogICAgICAgICBkcmF3QXhpYWxHcmFkaWVudChjZ0NvbnRleHQsIGdyYWRpZW50V2l0aE5h
bWUoQ29udmV4R3JhZGllbnQpLCBjbGlwLmxvY2F0aW9uKCksIEZsb2F0UG9pbnQoY2xpcC54KCks
IGNsaXAubWF4WSgpKSwgTGluZWFySW50ZXJwb2xhdGlvbik7CiAgICAgZWxzZSB7CiAgICAgICAg
IGRyYXdBeGlhbEdyYWRpZW50KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRoTmFtZShTaGFkZUdyYWRp
ZW50KSwgY2xpcC5sb2NhdGlvbigpLCBGbG9hdFBvaW50KGNsaXAueCgpLCBjbGlwLm1heFkoKSks
IExpbmVhckludGVycG9sYXRpb24pOwpAQCAtOTgyLDEyICs5ODIsMTIgQEAgY29uc3QgaW50IGtU
aHVtYm5haWxCb3JkZXJDb3JuZXJSYWRpdXMgPSAxOwogY29uc3QgaW50IGtWaXNpYmxlQmFja2dy
b3VuZEltYWdlV2lkdGggPSAxOwogY29uc3QgaW50IGtNdWx0aXBsZVRodW1ibmFpbFNocmlua1Np
emUgPSAyOwogCi1ib29sIFJlbmRlclRoZW1lSU9TOjpwYWludEZpbGVVcGxvYWRJY29uRGVjb3Jh
dGlvbnMoUmVuZGVyT2JqZWN0KiwgUmVuZGVyT2JqZWN0KiBidXR0b25SZW5kZXJlciwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QsIEljb24qIGljb24sIEZp
bGVVcGxvYWREZWNvcmF0aW9ucyBmaWxlVXBsb2FkRGVjb3JhdGlvbnMpCitib29sIFJlbmRlclRo
ZW1lSU9TOjpwYWludEZpbGVVcGxvYWRJY29uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUmVuZGVyT2JqZWN0JiBidXR0b25SZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QsIEljb24qIGljb24sIEZpbGVVcGxvYWREZWNv
cmF0aW9ucyBmaWxlVXBsb2FkRGVjb3JhdGlvbnMpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAKICAgICBJbnRTaXplIGNv
cm5lclNpemUoa1RodW1ibmFpbEJvcmRlckNvcm5lclJhZGl1cywga1RodW1ibmFpbEJvcmRlckNv
cm5lclJhZGl1cyk7Ci0gICAgQ29sb3IgcGljdHVyZUZyYW1lQ29sb3IgPSBidXR0b25SZW5kZXJl
ciA/IGJ1dHRvblJlbmRlcmVyLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUJvcmRlclRvcENvbG9yKSA6IENvbG9yKDc2LjBmLCA3Ni4wZiwgNzYuMGYpOworICAgIENv
bG9yIHBpY3R1cmVGcmFtZUNvbG9yID0gYnV0dG9uUmVuZGVyZXIuc3R5bGUoKS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcik7CiAKICAgICBJbnRSZWN0IHRo
dW1ibmFpbFBpY3R1cmVGcmFtZVJlY3QgPSByZWN0OwogICAgIEludFJlY3QgdGh1bWJuYWlsUmVj
dCA9IHJlY3Q7CkBAIC0xMDAwLDcgKzEwMDAsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWlu
dEZpbGVVcGxvYWRJY29uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgUmVuZGVyT2JqZWN0Kgog
ICAgICAgICB0aHVtYm5haWxSZWN0LmNvbnRyYWN0KGtNdWx0aXBsZVRodW1ibmFpbFNocmlua1Np
emUsIGtNdWx0aXBsZVRodW1ibmFpbFNocmlua1NpemUpOwogCiAgICAgICAgIC8vIEJhY2tncm91
bmQgcGljdHVyZSBmcmFtZSBhbmQgc2ltcGxlIGJhY2tncm91bmQgaWNvbiB3aXRoIGEgZ3JhZGll
bnQgbWF0Y2hpbmcgdGhlIGJ1dHRvbi4KLSAgICAgICAgQ29sb3IgYmFja2dyb3VuZEltYWdlQ29s
b3IgPSBidXR0b25SZW5kZXJlciA/IENvbG9yKGJ1dHRvblJlbmRlcmVyLT5zdHlsZSgpLnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikucmdiKCkpIDogQ29s
b3IoMjA2LjBmLCAyMDYuMGYsIDIwNi4wZik7CisgICAgICAgIENvbG9yIGJhY2tncm91bmRJbWFn
ZUNvbG9yID0gQ29sb3IoYnV0dG9uUmVuZGVyZXIuc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLnJnYigpKTsKICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHRodW1ibmFpbFBpY3R1
cmVGcmFtZVJlY3QsIGNvcm5lclNpemUsIGNvcm5lclNpemUsIGNvcm5lclNpemUsIGNvcm5lclNp
emUpLCBwaWN0dXJlRnJhbWVDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5maWxsUmVjdCh0aHVtYm5haWxSZWN0LCBiYWNrZ3JvdW5kSW1hZ2VD
b2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKaW5kZXggMGZiZTYxMWEyYmNmODQzYzIwNmFlOWZmYzEw
NWQxNWZiYzYwY2FjNC4uMmIxOWQ0N2Q2OTVjMzlkMmY4ODc2OWUzMjQxOGNmNDNiYmUyMmE2ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKQEAgLTQ0LDEyICs0
NCwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0
ZSgpOwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRz
IHRpbnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCi0gICAgdmlydHVhbCBib29s
IGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25z
dDsKIAogICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRp
bmcgaXMgc3VwcG9ydGVkIGF0IGFsbC4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9s
VGludHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QmLCBJbnRS
ZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0
IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0
IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0OwogCkBAIC04MiwxMyArODIsMTMgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxl
KikgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVu
ZGVyU3R5bGUqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNh
dG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgcG9wc01lbnVCeUFycm93S2V5cygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KIAogI2lmIEVOQUJMRShNRVRFUl9FTEVNRU5UKQogICAgIHZpcnR1YWwg
SW50U2l6ZSBtZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRS
ZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWV0ZXIoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNZXRlcihDb250cm9sUGFy
dCkgY29uc3Q7CiAjZW5kaWYKIApAQCAtOTcsMTQgKzk3LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclBy
b2dyZXNzKikgY29uc3Q7CiAgICAgLy8gUmV0dXJucyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1h
dGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25E
dXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7Ci0gICAgdmlydHVh
bCBJbnRSZWN0IHByb2dyZXNzQmFyUmVjdEZvckJvdW5kcyhjb25zdCBSZW5kZXJPYmplY3QqLCBj
b25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBJbnRSZWN0IHByb2dy
ZXNzQmFyUmVjdEZvckJvdW5kcyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3Io
Q1NTVmFsdWVJRCkgY29uc3Q7CiAgICAgLy8gQ29udHJvbHMgY29sb3IgdmFsdWVzIHJldHVybmVk
IGZyb20gcGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigpLiBzeXN0ZW1Db2xvcigpIHdpbGwgYmUgdXNl
ZCB3aGVuIGZhbHNlLgogICAgIHZpcnR1YWwgYm9vbCB1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xv
cigpIGNvbnN0OwogICAgIC8vIEEgdmlldyBhc3NvY2lhdGVkIHRvIHRoZSBjb250YWluZWQgZG9j
dW1lbnQuIFN1YmNsYXNzZXMgbWF5IG5vdCBoYXZlIHN1Y2ggYSB2aWV3IGFuZCByZXR1cm4gYSBm
YWtlLgotICAgIE5TVmlldyogZG9jdW1lbnRWaWV3Rm9yKFJlbmRlck9iamVjdCopIGNvbnN0Owor
ICAgIE5TVmlldyogZG9jdW1lbnRWaWV3Rm9yKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0Owog
CiAKIHByb3RlY3RlZDoKQEAgLTEyMyw0MyArMTIzLDQzIEBAIHByb3RlY3RlZDoKIAogICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c1NlbGVjdGlvbkZvcmVncm91bmRDb2xvcnMoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdmly
dHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCiAgICAgdmlydHVhbCB2b2lkIGFkanVz
dFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNr
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRl
clRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNs
aWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lk
IGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGREZWNvcmF0aW9uUGFydChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9u
UGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBh
aW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0Nsb3NlZENhcHRpb25pbmcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC0xNjcsMTQgKzE2
NywxNCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9s
ZGVyV2hlbkZvY3VzZWQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFNuYXBzaG90
dGVkUGx1Z2luT3ZlcmxheShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
IAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25z
dCBGaWxlTGlzdCosIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0Fs
bG93ZWQpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgSW50UmVjdCBpbmZsYXRlUmVjdChjb25zdCBJ
bnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IGludCogbWFyZ2lucywgZmxvYXQgem9vbUxl
dmVsID0gMS4wZikgY29uc3Q7CiAKLSAgICBGbG9hdFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0
KGNvbnN0IFJlbmRlck9iamVjdCogaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBw
YXJ0UmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Q7CisgICAgRmxvYXRSZWN0IGNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5kZXJP
YmplY3QmIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCYgcGFydFJlbmRlcmVyLCBj
b25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogCiAgICAg
Ly8gR2V0IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LiBVc2VkIGJ5IHNvbWUg
b2YgdGhlIGNvbnRyb2xzIChsaWtlIGJ1dHRvbnMpLgogICAgIE5TQ29udHJvbFNpemUgY29udHJv
bFNpemVGb3JGb250KFJlbmRlclN0eWxlKikgY29uc3Q7CkBAIC0xODUsMjYgKzE4NSwyNiBAQCBw
cml2YXRlOgogICAgIEludFNpemUgc2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25z
dCBJbnRTaXplKiBzaXplcykgY29uc3Q7CiAgICAgdm9pZCBzZXRGb250RnJvbUNvbnRyb2xTaXpl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIE5TQ29udHJvbFNpemUpIGNvbnN0OwogCi0g
ICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7
Ci0gICAgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0
Kik7Ci0gICAgdm9pZCB1cGRhdGVGb2N1c2VkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2Jq
ZWN0Kik7Ci0gICAgdm9pZCB1cGRhdGVQcmVzc2VkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVy
T2JqZWN0Kik7CisgICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVu
ZGVyT2JqZWN0Jik7CisgICAgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoTlNDZWxsKiwgY29uc3Qg
UmVuZGVyT2JqZWN0Jik7CisgICAgdm9pZCB1cGRhdGVGb2N1c2VkU3RhdGUoTlNDZWxsKiwgY29u
c3QgUmVuZGVyT2JqZWN0Jik7CisgICAgdm9pZCB1cGRhdGVQcmVzc2VkU3RhdGUoTlNDZWxsKiwg
Y29uc3QgUmVuZGVyT2JqZWN0Jik7CiAgICAgLy8gQW4gb3B0aW9uYWwgaG9vayBmb3Igc3ViY2xh
c3NlcyB0byB1cGRhdGUgdGhlIGNvbnRyb2wgdGludCBvZiBOU0NlbGwuCi0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUFjdGl2ZVN0YXRlKE5TQ2VsbCosIGNvbnN0IFJlbmRlck9iamVjdCopIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBY3RpdmVTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJP
YmplY3QmKSB7IH0KIAogICAgIC8vIEhlbHBlcnMgZm9yIGFkanVzdGluZyBhcHBlYXJhbmNlIGFu
ZCBmb3IgcGFpbnRpbmcKIAotICAgIHZvaWQgc2V0UG9wdXBCdXR0b25DZWxsU3RhdGUoY29uc3Qg
UmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgc2V0UG9wdXBCdXR0b25D
ZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgSW50UmVjdCYpOwogICAgIGNvbnN0
IEludFNpemUqIHBvcHVwQnV0dG9uU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBpbnQqIHBvcHVw
QnV0dG9uTWFyZ2lucygpIGNvbnN0OwogICAgIGNvbnN0IGludCogcG9wdXBCdXR0b25QYWRkaW5n
KE5TQ29udHJvbFNpemUpIGNvbnN0OwotICAgIHZvaWQgcGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRp
ZW50cyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdm9pZCBwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICBjb25zdCBJbnRTaXplKiBt
ZW51TGlzdFNpemVzKCkgY29uc3Q7CiAKICAgICBjb25zdCBJbnRTaXplKiBzZWFyY2hGaWVsZFNp
emVzKCkgY29uc3Q7CiAgICAgY29uc3QgSW50U2l6ZSogY2FuY2VsQnV0dG9uU2l6ZXMoKSBjb25z
dDsKICAgICBjb25zdCBJbnRTaXplKiByZXN1bHRzQnV0dG9uU2l6ZXMoKSBjb25zdDsKLSAgICB2
b2lkIHNldFNlYXJjaENlbGxTdGF0ZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdm9pZCBzZXRTZWFyY2hDZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgSW50
UmVjdCYpOwogICAgIHZvaWQgc2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7
CiAKICAgICBOU1BvcFVwQnV0dG9uQ2VsbCAqcG9wdXBCdXR0b24oKSBjb25zdDsKQEAgLTIyNiw4
ICsyMjYsOCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU1BR0VfQ09OVFJPTFMp
Ci0gICAgdmlydHVhbCBib29sIHBhaW50SW1hZ2VDb250cm9sc0J1dHRvbihSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBJbnRTaXplIGltYWdlQ29udHJvbHNCdXR0b25TaXplKGNvbnN0IFJlbmRlck9iamVjdCopIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludEltYWdlQ29udHJvbHNCdXR0b24o
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgSW50U2l6ZSBpbWFnZUNvbnRyb2xzQnV0dG9uU2l6ZShjb25z
dCBjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICBOU1NlcnZpY2VzUm9s
bG92ZXJCdXR0b25DZWxsICpzZXJ2aWNlc1JvbGxvdmVyQnV0dG9uQ2VsbCgpIGNvbnN0OwogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAy
NThjN2FlMmIyZmJhZGIyNTBiMWI0NDhlNDA4NjJhOTllYzA2ODBjLi5jZDBlNzkxNDgwOGUyZWEy
NmVmZGVjOWYxNDgxNTM0MGViNTllZWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCkBAIC0yMTcsMTAgKzIxNywxMCBAQCBSZW5kZXJUaGVtZU1hYzo6flJl
bmRlclRoZW1lTWFjKCkKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJd
IHJlbW92ZU9ic2VydmVyOm1fbm90aWZpY2F0aW9uT2JzZXJ2ZXIuZ2V0KCldOwogfQogCi1OU1Zp
ZXcqIFJlbmRlclRoZW1lTWFjOjpkb2N1bWVudFZpZXdGb3IoUmVuZGVyT2JqZWN0KiBvKSBjb25z
dAorTlNWaWV3KiBSZW5kZXJUaGVtZU1hYzo6ZG9jdW1lbnRWaWV3Rm9yKGNvbnN0IFJlbmRlck9i
amVjdCYgbykgY29uc3QKIHsKICAgICBDb250cm9sU3RhdGVzIHN0YXRlcyhleHRyYWN0Q29udHJv
bFN0YXRlc0ZvclJlbmRlcmVyKG8pKTsKLSAgICByZXR1cm4gVGhlbWVNYWM6OmVuc3VyZWRWaWV3
KCZvLT52aWV3KCkuZnJhbWVWaWV3KCksICZzdGF0ZXMpOworICAgIHJldHVybiBUaGVtZU1hYzo6
ZW5zdXJlZFZpZXcoJm8udmlldygpLmZyYW1lVmlldygpLCAmc3RhdGVzKTsKIH0KIAogI2lmIEVO
QUJMRShWSURFTykKQEAgLTYwMiw5ICs2MDIsOSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjppc0Nv
bnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJgog
ICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJh
Y2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFk
anVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcikKK3ZvaWQg
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgbywg
SW50UmVjdCYgcikKIHsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gby0+c3R5bGUoKS5hcHBlYXJh
bmNlKCk7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IG8uc3R5bGUoKS5hcHBlYXJhbmNlKCk7CiAK
ICNpZiBVU0UoTkVXX1RIRU1FKQogICAgIHN3aXRjaCAocGFydCkgewpAQCAtNjIxLDcgKzYyMSw3
IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9i
amVjdCogbywgSW50UmVjdCYgcikKICAgICB9CiAjZW5kaWYKIAotICAgIGZsb2F0IHpvb21MZXZl
bCA9IG8tPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21MZXZlbCA9IG8u
c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CiAKICAgICBpZiAocGFydCA9PSBNZW51bGlzdFBhcnQp
IHsKICAgICAgICAgc2V0UG9wdXBCdXR0b25DZWxsU3RhdGUobywgcik7CkBAIC02NTAsMjAgKzY1
MCwyMCBAQCBJbnRSZWN0IFJlbmRlclRoZW1lTWFjOjppbmZsYXRlUmVjdChjb25zdCBJbnRSZWN0
JiByLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LUZsb2F0UmVjdCBSZW5kZXJUaGVtZU1hYzo6Y29udmVydFRvUGFpbnRpbmdSZWN0KGNvbnN0IFJl
bmRlck9iamVjdCogaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJ0UmVuZGVy
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0JiByKSBjb25zdAor
RmxvYXRSZWN0IFJlbmRlclRoZW1lTWFjOjpjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVu
ZGVyT2JqZWN0JiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QmIHBhcnRSZW5kZXJl
ciwgY29uc3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0CiB7
CiAgICAgRmxvYXRSZWN0IHBhcnRSZWN0KGlucHV0UmVjdCk7CiAKICAgICAvLyBDb21wdXRlIGFu
IG9mZnNldCBiZXR3ZWVuIHRoZSBwYXJ0IHJlbmRlcmVyIGFuZCB0aGUgaW5wdXQgcmVuZGVyZXIK
ICAgICBGbG9hdFNpemUgb2Zmc2V0RnJvbUlucHV0UmVuZGVyZXI7Ci0gICAgY29uc3QgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IHBhcnRSZW5kZXJlcjsKLSAgICB3aGlsZSAocmVuZGVyZXIgJiYg
cmVuZGVyZXIgIT0gaW5wdXRSZW5kZXJlcikgeworICAgIGNvbnN0IFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSAmcGFydFJlbmRlcmVyOworICAgIHdoaWxlIChyZW5kZXJlciAmJiByZW5kZXJlciAh
PSAmaW5wdXRSZW5kZXJlcikgewogICAgICAgICBSZW5kZXJFbGVtZW50KiBjb250YWluaW5nUmVu
ZGVyZXIgPSByZW5kZXJlci0+Y29udGFpbmVyKCk7CiAgICAgICAgIG9mZnNldEZyb21JbnB1dFJl
bmRlcmVyIC09IHJvdW5kZWRJbnRTaXplKHJlbmRlcmVyLT5vZmZzZXRGcm9tQ29udGFpbmVyKGNv
bnRhaW5pbmdSZW5kZXJlciwgTGF5b3V0UG9pbnQoKSkpOwogICAgICAgICByZW5kZXJlciA9IGNv
bnRhaW5pbmdSZW5kZXJlcjsKICAgICB9CiAgICAgLy8gSWYgdGhlIGlucHV0IHJlbmRlcmVyIHdh
cyBub3QgYSBjb250YWluZXIsIHNvbWV0aGluZyB3ZW50IHdyb25nCi0gICAgQVNTRVJUKHJlbmRl
cmVyID09IGlucHV0UmVuZGVyZXIpOworICAgIEFTU0VSVChyZW5kZXJlciA9PSAmaW5wdXRSZW5k
ZXJlcik7CiAgICAgLy8gTW92ZSB0aGUgcmVjdCBpbnRvIHBhcnRSZW5kZXJlcidzIGNvb3Jkcwog
ICAgIHBhcnRSZWN0Lm1vdmUob2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIpOwogICAgIC8vIEFjY291
bnQgZm9yIHRoZSBsb2NhbCBkcmF3aW5nIG9mZnNldCAodHgsIHR5KQpAQCAtNjcyLDcgKzY3Miw3
IEBAIEZsb2F0UmVjdCBSZW5kZXJUaGVtZU1hYzo6Y29udmVydFRvUGFpbnRpbmdSZWN0KGNvbnN0
IFJlbmRlck9iamVjdCogaW5wdXRSZW5kZXJlCiAgICAgcmV0dXJuIHBhcnRSZWN0OwogfQogCi12
b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25z
dCBSZW5kZXJPYmplY3QqIG8pCit2b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVDaGVja2VkU3Rh
dGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QmIG8pCiB7CiAgICAgYm9vbCBvbGRJ
bmRldGVybWluYXRlID0gW2NlbGwgc3RhdGVdID09IE5TTWl4ZWRTdGF0ZTsKICAgICBib29sIGlu
ZGV0ZXJtaW5hdGUgPSBpc0luZGV0ZXJtaW5hdGUobyk7CkBAIC02ODgsNyArNjg4LDcgQEAgdm9p
ZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlQ2hlY2tlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3Qg
UmVuZGVyT2JqZWN0KiBvKQogICAgICAgICBbY2VsbCBzZXRTdGF0ZTpjaGVja2VkID8gTlNPblN0
YXRlIDogTlNPZmZTdGF0ZV07CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUVuYWJs
ZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJlbmRlck9iamVjdCogbykKK3ZvaWQgUmVuZGVy
VGhlbWVNYWM6OnVwZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJlbmRlck9i
amVjdCYgbykKIHsKICAgICBib29sIG9sZEVuYWJsZWQgPSBbY2VsbCBpc0VuYWJsZWRdOwogICAg
IGJvb2wgZW5hYmxlZCA9IGlzRW5hYmxlZChvKTsKQEAgLTY5NiwyMyArNjk2LDIzIEBAIHZvaWQg
UmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJl
bmRlck9iamVjdCogbykKICAgICAgICAgW2NlbGwgc2V0RW5hYmxlZDplbmFibGVkXTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlRm9jdXNlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29u
c3QgUmVuZGVyT2JqZWN0KiBvKQordm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlRm9jdXNlZFN0
YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0JiBvKQogewogICAgIGJvb2wgb2xk
Rm9jdXNlZCA9IFtjZWxsIHNob3dzRmlyc3RSZXNwb25kZXJdOwotICAgIGJvb2wgZm9jdXNlZCA9
IGlzRm9jdXNlZChvKSAmJiBvLT5zdHlsZSgpLm91dGxpbmVTdHlsZUlzQXV0bygpOworICAgIGJv
b2wgZm9jdXNlZCA9IGlzRm9jdXNlZChvKSAmJiBvLnN0eWxlKCkub3V0bGluZVN0eWxlSXNBdXRv
KCk7CiAgICAgaWYgKGZvY3VzZWQgIT0gb2xkRm9jdXNlZCkKICAgICAgICAgW2NlbGwgc2V0U2hv
d3NGaXJzdFJlc3BvbmRlcjpmb2N1c2VkXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBk
YXRlUHJlc3NlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvKQordm9p
ZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlUHJlc3NlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3Qg
UmVuZGVyT2JqZWN0JiBvKQogewogICAgIGJvb2wgb2xkUHJlc3NlZCA9IFtjZWxsIGlzSGlnaGxp
Z2h0ZWRdOwotICAgIGJvb2wgcHJlc3NlZCA9IG8tPm5vZGUoKSAmJiBvLT5ub2RlKCktPmlzRWxl
bWVudE5vZGUoKSAmJiB0b0VsZW1lbnQoby0+bm9kZSgpKS0+YWN0aXZlKCk7CisgICAgYm9vbCBw
cmVzc2VkID0gby5ub2RlKCkgJiYgby5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1l
bnQoby5ub2RlKCkpLT5hY3RpdmUoKTsKICAgICBpZiAocHJlc3NlZCAhPSBvbGRQcmVzc2VkKQog
ICAgICAgICBbY2VsbCBzZXRIaWdobGlnaHRlZDpwcmVzc2VkXTsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZU1hYzo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25z
dAorYm9vbCBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVy
T2JqZWN0JiBvKSBjb25zdAogewogICAgIC8vIEFuIGFsdGVybmF0ZSB3YXkgdG8gaW1wbGVtZW50
IHRoaXMgd291bGQgYmUgdG8gZ2V0IHRoZSBhcHByb3ByaWF0ZSBjZWxsIG9iamVjdAogICAgIC8v
IGFuZCBjYWxsIHRoZSBwcml2YXRlIF9uZWVkUmVkcmF3T25XaW5kb3dDaGFuZ2VkS2V5U3RhdGUg
bWV0aG9kLiBBbiBhZHZhbnRhZ2Ugb2YKQEAgLTcyMyw3ICs3MjMsNyBAQCBib29sIFJlbmRlclRo
ZW1lTWFjOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIENoZWNrYm94ZXMgb25seSBoYXZlIHRp
bnQgd2hlbiBjaGVja2VkLgotICAgIGlmIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBDaGVj
a2JveFBhcnQpCisgICAgaWYgKG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0
KQogICAgICAgICByZXR1cm4gaXNDaGVja2VkKG8pOwogCiAgICAgLy8gRm9yIG5vdyBhc3N1bWUg
b3RoZXIgY29udHJvbHMgaGF2ZSB0aW50IGlmIGVuYWJsZWQuCkBAIC04MTEsNyArODExLDcgQEAg
TlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAgICByZXR1cm4gTlNNaW5pQ29udHJvbFNpemU7CiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIExvY2FsQ3VycmVu
dEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwogCkBAIC04
MzEsNyArODMxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEZpZWxkU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCoKIHsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKHBhaW50SW5m
by5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
ODQyLDcgKzg0Miw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0
b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiBwYWluCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJl
bmRlclRoZW1lTWFjOjpwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgTG9jYWxDdXJy
ZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7CiAgICAg
d2tEcmF3QmV6ZWxlZFRleHRBcmVhKHIsIGlzRW5hYmxlZChvKSAmJiAhaXNSZWFkT25seUNvbnRy
b2wobykpOwpAQCAtODgxLDIxICs4ODEsMjEgQEAgY29uc3QgaW50KiBSZW5kZXJUaGVtZU1hYzo6
cG9wdXBCdXR0b25QYWRkaW5nKE5TQ29udHJvbFNpemUgc2l6ZSkgY29uc3QKICAgICByZXR1cm4g
cGFkZGluZ1tzaXplXTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdChS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByKQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmpl
Y3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewog
ICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNv
bnRleHQpOwogICAgIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKG8sIHIpOwogCiAgICAgTlNQb3BV
cEJ1dHRvbkNlbGwqIHBvcHVwQnV0dG9uID0gdGhpcy0+cG9wdXBCdXR0b24oKTsKIAotICAgIGZs
b2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpv
b21MZXZlbCA9IG8uc3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CiAgICAgSW50U2l6ZSBzaXplID0g
cG9wdXBCdXR0b25TaXplcygpW1twb3B1cEJ1dHRvbiBjb250cm9sU2l6ZV1dOwogICAgIHNpemUu
c2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwogICAgIHNpemUuc2V0V2lkdGgo
ci53aWR0aCgpKTsKIAogICAgIC8vIE5vdyBpbmZsYXRlIGl0IHRvIGFjY291bnQgZm9yIHRoZSBz
aGFkb3cuCiAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSByOwotICAgIGlmIChyLndpZHRoKCkg
Pj0gbWluaW11bU1lbnVMaXN0U2l6ZSgmby0+c3R5bGUoKSkpCisgICAgaWYgKHIud2lkdGgoKSA+
PSBtaW5pbXVtTWVudUxpc3RTaXplKCZvLnN0eWxlKCkpKQogICAgICAgICBpbmZsYXRlZFJlY3Qg
PSBpbmZsYXRlUmVjdChpbmZsYXRlZFJlY3QsIHNpemUsIHBvcHVwQnV0dG9uTWFyZ2lucygpLCB6
b29tTGV2ZWwpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpw
YWludEluZm8uY29udGV4dCk7CkBAIC05MTMsNyArOTEzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLAogCiAgICAgTlNWaWV3ICp2aWV3ID0gZG9jdW1lbnRWaWV3Rm9yKG8pOwogICAgIFtwb3B1
cEJ1dHRvbiBkcmF3V2l0aEZyYW1lOmluZmxhdGVkUmVjdCBpblZpZXc6dmlld107Ci0gICAgaWYg
KGlzRm9jdXNlZChvKSAmJiBvLT5zdHlsZSgpLm91dGxpbmVTdHlsZUlzQXV0bygpKQorICAgIGlm
IChpc0ZvY3VzZWQobykgJiYgby5zdHlsZSgpLm91dGxpbmVTdHlsZUlzQXV0bygpKQogICAgICAg
ICBbcG9wdXBCdXR0b24gX3dlYl9kcmF3Rm9jdXNSaW5nV2l0aEZyYW1lOmluZmxhdGVkUmVjdCBp
blZpZXc6dmlld107CiAgICAgW3BvcHVwQnV0dG9uIHNldENvbnRyb2xWaWV3Om5pbF07CiAKQEAg
LTkzNCwxNCArOTM0LDE0IEBAIEludFNpemUgUmVuZGVyVGhlbWVNYWM6Om1ldGVyU2l6ZUZvckJv
dW5kcyhjb25zdCBSZW5kZXJNZXRlciogcmVuZGVyTWV0ZXIsIGNvbnN0CiAgICAgICAgICAgICAg
ICAgICAgYm91bmRzLmhlaWdodCgpIDwgY2VsbFNpemUuaGVpZ2h0ID8gY2VsbFNpemUuaGVpZ2h0
IDogYm91bmRzLmhlaWdodCgpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZXRl
cihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1ldGVyKGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoIXJlbmRlck9iamVjdC0+aXNNZXRl
cigpKQorICAgIGlmICghcmVuZGVyT2JqZWN0LmlzTWV0ZXIoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50
SW5mby5jb250ZXh0KTsKIAotICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxsID0gbGV2ZWxJ
bmRpY2F0b3JGb3IodG9SZW5kZXJNZXRlcihyZW5kZXJPYmplY3QpKTsKKyAgICBOU0xldmVsSW5k
aWNhdG9yQ2VsbCogY2VsbCA9IGxldmVsSW5kaWNhdG9yRm9yKHRvUmVuZGVyTWV0ZXIoJnJlbmRl
ck9iamVjdCkpOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFp
bnRJbmZvLmNvbnRleHQpOwogCiAgICAgW2NlbGwgZHJhd1dpdGhGcmFtZTpyZWN0IGluVmlldzpk
b2N1bWVudFZpZXdGb3IocmVuZGVyT2JqZWN0KV07CkBAIC0xMDQyLDIzICsxMDQyLDIzIEBAIGNv
bnN0IGludCogUmVuZGVyVGhlbWVNYWM6OnByb2dyZXNzQmFyTWFyZ2lucyhOU0NvbnRyb2xTaXpl
IGNvbnRyb2xTaXplKSBjb25zdAogICAgIHJldHVybiBtYXJnaW5zW2NvbnRyb2xTaXplXTsKIH0K
IAotSW50UmVjdCBSZW5kZXJUaGVtZU1hYzo6cHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0
IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0
CitJbnRSZWN0IFJlbmRlclRoZW1lTWFjOjpwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IEludFJlY3QmIGJvdW5kcykgY29uc3QK
IHsKICAgICAvLyBXb3JrYXJvdW5kIHVudGlsIDxyZGFyOi8vcHJvYmxlbS8xNTg1NTA4Nj4gaXMg
Zml4ZWQuCiAgICAgaW50IG1heERpbWVuc2lvbiA9IHN0YXRpY19jYXN0PGludD4oc3RkOjpudW1l
cmljX2xpbWl0czx1c2hvcnQ+OjptYXgoKSk7CiAgICAgSW50UmVjdCBwcm9ncmVzc0JhckJvdW5k
cyhib3VuZHMueCgpLCBib3VuZHMueSgpLCBzdGQ6Om1pbihib3VuZHMud2lkdGgoKSwgbWF4RGlt
ZW5zaW9uKSwgc3RkOjptaW4oYm91bmRzLmhlaWdodCgpLCBtYXhEaW1lbnNpb24pKTsKLSAgICBp
ZiAoTm9Db250cm9sUGFydCA9PSByZW5kZXJPYmplY3QtPnN0eWxlKCkuYXBwZWFyYW5jZSgpKQor
ICAgIGlmIChOb0NvbnRyb2xQYXJ0ID09IHJlbmRlck9iamVjdC5zdHlsZSgpLmFwcGVhcmFuY2Uo
KSkKICAgICAgICAgcmV0dXJuIHByb2dyZXNzQmFyQm91bmRzOwogCi0gICAgZmxvYXQgem9vbUxl
dmVsID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKLSAgICBOU0NvbnRy
b2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KCZyZW5kZXJPYmplY3QtPnN0
eWxlKCkpOworICAgIGZsb2F0IHpvb21MZXZlbCA9IHJlbmRlck9iamVjdC5zdHlsZSgpLmVmZmVj
dGl2ZVpvb20oKTsKKyAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVG
b3JGb250KCZyZW5kZXJPYmplY3Quc3R5bGUoKSk7CiAgICAgSW50U2l6ZSBzaXplID0gcHJvZ3Jl
c3NCYXJTaXplcygpW2NvbnRyb2xTaXplXTsKICAgICBzaXplLnNldEhlaWdodChzaXplLmhlaWdo
dCgpICogem9vbUxldmVsKTsKICAgICBzaXplLnNldFdpZHRoKHByb2dyZXNzQmFyQm91bmRzLndp
ZHRoKCkpOwogCiAgICAgLy8gTm93IGluZmxhdGUgaXQgdG8gYWNjb3VudCBmb3IgdGhlIHNoYWRv
dy4KICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHByb2dyZXNzQmFyQm91bmRzOwotICAgIGlm
IChwcm9ncmVzc0JhckJvdW5kcy5oZWlnaHQoKSA8PSBtaW5pbXVtUHJvZ3Jlc3NCYXJIZWlnaHQo
JnJlbmRlck9iamVjdC0+c3R5bGUoKSkpCisgICAgaWYgKHByb2dyZXNzQmFyQm91bmRzLmhlaWdo
dCgpIDw9IG1pbmltdW1Qcm9ncmVzc0JhckhlaWdodCgmcmVuZGVyT2JqZWN0LnN0eWxlKCkpKQog
ICAgICAgICBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdChpbmZsYXRlZFJlY3QsIHNpemUsIHBy
b2dyZXNzQmFyTWFyZ2lucyhjb250cm9sU2l6ZSksIHpvb21MZXZlbCk7CiAKICAgICByZXR1cm4g
aW5mbGF0ZWRSZWN0OwpAQCAtMTA4MywyOCArMTA4MywyOCBAQCB2b2lkIFJlbmRlclRoZW1lTWFj
OjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbgogewogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFyKFJlbmRl
ck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50UHJvZ3Jlc3NCYXIoY29u
c3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghcmVuZGVyT2JqZWN0LT5pc1Byb2dy
ZXNzKCkpCisgICAgaWYgKCFyZW5kZXJPYmplY3QuaXNQcm9ncmVzcygpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gcHJvZ3Jlc3NCYXJSZWN0Rm9y
Qm91bmRzKHJlbmRlck9iamVjdCwgcmVjdCk7Ci0gICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6
ZSA9IGNvbnRyb2xTaXplRm9yRm9udCgmcmVuZGVyT2JqZWN0LT5zdHlsZSgpKTsKKyAgICBOU0Nv
bnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KCZyZW5kZXJPYmplY3Qu
c3R5bGUoKSk7CiAKLSAgICBSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MgPSB0b1JlbmRl
clByb2dyZXNzKHJlbmRlck9iamVjdCk7CisgICAgY29uc3QgUmVuZGVyUHJvZ3Jlc3MmIHJlbmRl
clByb2dyZXNzID0gKnRvUmVuZGVyUHJvZ3Jlc3MoJnJlbmRlck9iamVjdCk7CiAgICAgSElUaGVt
ZVRyYWNrRHJhd0luZm8gdHJhY2tJbmZvOwogICAgIHRyYWNrSW5mby52ZXJzaW9uID0gMDsKICAg
ICBpZiAoY29udHJvbFNpemUgPT0gTlNSZWd1bGFyQ29udHJvbFNpemUpCi0gICAgICAgIHRyYWNr
SW5mby5raW5kID0gcmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCkgPCAwID8ga1RoZW1lTGFyZ2VJ
bmRldGVybWluYXRlQmFyIDoga1RoZW1lTGFyZ2VQcm9ncmVzc0JhcjsKKyAgICAgICAgdHJhY2tJ
bmZvLmtpbmQgPSByZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpIDwgMCA/IGtUaGVtZUxhcmdlSW5k
ZXRlcm1pbmF0ZUJhciA6IGtUaGVtZUxhcmdlUHJvZ3Jlc3NCYXI7CiAgICAgZWxzZQotICAgICAg
ICB0cmFja0luZm8ua2luZCA9IHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpIDwgMCA/IGtUaGVt
ZU1lZGl1bUluZGV0ZXJtaW5hdGVCYXIgOiBrVGhlbWVNZWRpdW1Qcm9ncmVzc0JhcjsKKyAgICAg
ICAgdHJhY2tJbmZvLmtpbmQgPSByZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpIDwgMCA/IGtUaGVt
ZU1lZGl1bUluZGV0ZXJtaW5hdGVCYXIgOiBrVGhlbWVNZWRpdW1Qcm9ncmVzc0JhcjsKIAotICAg
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyT2JqZWN0LT5kb2N1bWVudCgpLmRldmlj
ZVNjYWxlRmFjdG9yKCk7CisgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSByZW5kZXJPYmpl
Y3QuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpOwogICAgIHRyYWNrSW5mby5ib3VuZHMg
PSBJbnRSZWN0KEludFBvaW50KCksIGluZmxhdGVkUmVjdC5zaXplKCkpOwogICAgIHRyYWNrSW5m
by5taW4gPSAwOwogICAgIHRyYWNrSW5mby5tYXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPFNJbnQz
Mj46Om1heCgpOwotICAgIHRyYWNrSW5mby52YWx1ZSA9IGxyb3VuZChyZW5kZXJQcm9ncmVzcy0+
cG9zaXRpb24oKSAqIG5leHRhZnRlcih0cmFja0luZm8ubWF4LCAwKSk7Ci0gICAgdHJhY2tJbmZv
LnRyYWNrSW5mby5wcm9ncmVzcy5waGFzZSA9IGxyb3VuZChyZW5kZXJQcm9ncmVzcy0+YW5pbWF0
aW9uUHJvZ3Jlc3MoKSAqIG5leHRhZnRlcihwcm9ncmVzc0FuaW1hdGlvbk51bUZyYW1lcywgMCkg
KiBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgdHJhY2tJbmZvLnZhbHVlID0gbHJvdW5kKHJlbmRl
clByb2dyZXNzLnBvc2l0aW9uKCkgKiBuZXh0YWZ0ZXIodHJhY2tJbmZvLm1heCwgMCkpOworICAg
IHRyYWNrSW5mby50cmFja0luZm8ucHJvZ3Jlc3MucGhhc2UgPSBscm91bmQocmVuZGVyUHJvZ3Jl
c3MuYW5pbWF0aW9uUHJvZ3Jlc3MoKSAqIG5leHRhZnRlcihwcm9ncmVzc0FuaW1hdGlvbk51bUZy
YW1lcywgMCkgKiBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgdHJhY2tJbmZvLmF0dHJpYnV0ZXMg
PSBrVGhlbWVUcmFja0hvcml6b250YWw7CiAgICAgdHJhY2tJbmZvLmVuYWJsZVN0YXRlID0gaXNB
Y3RpdmUocmVuZGVyT2JqZWN0KSA/IGtUaGVtZVRyYWNrQWN0aXZlIDoga1RoZW1lVHJhY2tJbmFj
dGl2ZTsKICAgICB0cmFja0luZm8ucmVzZXJ2ZWQgPSAwOwpAQCAtMTEyMCw3ICsxMTIwLDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJlbmRl
ck9iamVjdCwgY29uc3QgUGFpbnRJbmYKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogCi0gICAgaWYgKCFyZW5kZXJQcm9ncmVz
cy0+c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKKyAgICBpZiAoIXJlbmRlclBy
b2dyZXNzLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAgICAgIHBhaW50
SW5mby5jb250ZXh0LT50cmFuc2xhdGUoMiAqIGluZmxhdGVkUmVjdC54KCkgKyBpbmZsYXRlZFJl
Y3Qud2lkdGgoKSwgMCk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShGbG9hdFNp
emUoLTEsIDEpKTsKICAgICB9CkBAIC0xMTgyLDcgKzExODIsNyBAQCBzdGF0aWMgdm9pZCBUcmFj
a0dyYWRpZW50SW50ZXJwb2xhdGUodm9pZCosIGNvbnN0IENHRmxvYXQqIGluRGF0YSwgQ0dGbG9h
dCogb3V0RAogICAgICAgICBvdXREYXRhW2ldID0gKDEuMGYgLSBhKSAqIGRhcmtbaV0gKyBhICog
bGlnaHRbaV07CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b25H
cmFkaWVudHMoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b25H
cmFkaWVudHMoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBpZiAoci5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTExOTIsNyArMTE5Miw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVu
dUxpc3RCdXR0b25HcmFkaWVudHMoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluCiAKICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0
KTsKIAotICAgIEZsb2F0Um91bmRlZFJlY3QgYm9yZGVyID0gRmxvYXRSb3VuZGVkUmVjdChvLT5z
dHlsZSgpLmdldFJvdW5kZWRCb3JkZXJGb3IociwgJm8tPnZpZXcoKSkpOworICAgIEZsb2F0Um91
bmRlZFJlY3QgYm9yZGVyID0gRmxvYXRSb3VuZGVkUmVjdChvLnN0eWxlKCkuZ2V0Um91bmRlZEJv
cmRlckZvcihyLCAmby52aWV3KCkpKTsKICAgICBpbnQgcmFkaXVzID0gYm9yZGVyLnJhZGlpKCku
dG9wTGVmdCgpLndpZHRoKCk7CiAKICAgICBDR0NvbG9yU3BhY2VSZWYgY3NwYWNlID0gZGV2aWNl
UkdCQ29sb3JTcGFjZVJlZigpOwpAQCAtMTI0OSwyOSArMTI0OSwyOSBAQCB2b2lkIFJlbmRlclRo
ZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbgogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlz
dEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6
cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
ZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewot
ICAgIEludFJlY3QgYm91bmRzID0gSW50UmVjdChyZWN0LngoKSArIHJlbmRlcmVyLT5zdHlsZSgp
LmJvcmRlckxlZnRXaWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0Lnko
KSArIHJlbmRlcmVyLT5zdHlsZSgpLmJvcmRlclRvcFdpZHRoKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSAtIHJlbmRlcmVyLT5zdHlsZSgpLmJvcmRlckxlZnRX
aWR0aCgpIC0gcmVuZGVyZXItPnN0eWxlKCkuYm9yZGVyUmlnaHRXaWR0aCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWN0LmhlaWdodCgpIC0gcmVuZGVyZXItPnN0eWxlKCkuYm9y
ZGVyVG9wV2lkdGgoKSAtIHJlbmRlcmVyLT5zdHlsZSgpLmJvcmRlckJvdHRvbVdpZHRoKCkpOwor
ICAgIEludFJlY3QgYm91bmRzID0gSW50UmVjdChyZWN0LngoKSArIHJlbmRlcmVyLnN0eWxlKCku
Ym9yZGVyTGVmdFdpZHRoKCksCisgICAgICAgIHJlY3QueSgpICsgcmVuZGVyZXIuc3R5bGUoKS5i
b3JkZXJUb3BXaWR0aCgpLAorICAgICAgICByZWN0LndpZHRoKCkgLSByZW5kZXJlci5zdHlsZSgp
LmJvcmRlckxlZnRXaWR0aCgpIC0gcmVuZGVyZXIuc3R5bGUoKS5ib3JkZXJSaWdodFdpZHRoKCks
CisgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSByZW5kZXJlci5zdHlsZSgpLmJvcmRlclRvcFdpZHRo
KCkgLSByZW5kZXJlci5zdHlsZSgpLmJvcmRlckJvdHRvbVdpZHRoKCkpOwogICAgIC8vIERyYXcg
dGhlIGdyYWRpZW50cyB0byBnaXZlIHRoZSBzdHlsZWQgcG9wdXAgbWVudSBhIGJ1dHRvbiBhcHBl
YXJhbmNlCiAgICAgcGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhyZW5kZXJlciwgcGFpbnRJ
bmZvLCBib3VuZHMpOwogCiAgICAgLy8gU2luY2Ugd2UgYWN0dWFsbHkga25vdyB0aGUgc2l6ZSBv
ZiB0aGUgY29udHJvbCBoZXJlLCB3ZSByZXN0cmljdCB0aGUgZm9udCBzY2FsZSB0byBtYWtlIHN1
cmUgdGhlIGFycm93cyB3aWxsIGZpdCB2ZXJ0aWNhbGx5IGluIHRoZSBib3VuZHMKLSAgICBmbG9h
dCBmb250U2NhbGUgPSBzdGQ6Om1pbihyZW5kZXJlci0+c3R5bGUoKS5mb250U2l6ZSgpIC8gYmFz
ZUZvbnRTaXplLCBib3VuZHMuaGVpZ2h0KCkgLyAoYmFzZUFycm93SGVpZ2h0ICogMiArIGJhc2VT
cGFjZUJldHdlZW5BcnJvd3MpKTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBzdGQ6Om1pbihyZW5k
ZXJlci5zdHlsZSgpLmZvbnRTaXplKCkgLyBiYXNlRm9udFNpemUsIGJvdW5kcy5oZWlnaHQoKSAv
IChiYXNlQXJyb3dIZWlnaHQgKiAyICsgYmFzZVNwYWNlQmV0d2VlbkFycm93cykpOwogICAgIGZs
b2F0IGNlbnRlclkgPSBib3VuZHMueSgpICsgYm91bmRzLmhlaWdodCgpIC8gMi4wZjsKICAgICBm
bG9hdCBhcnJvd0hlaWdodCA9IGJhc2VBcnJvd0hlaWdodCAqIGZvbnRTY2FsZTsKICAgICBmbG9h
dCBhcnJvd1dpZHRoID0gYmFzZUFycm93V2lkdGggKiBmb250U2NhbGU7Ci0gICAgZmxvYXQgbGVm
dEVkZ2UgPSBib3VuZHMubWF4WCgpIC0gYXJyb3dQYWRkaW5nUmlnaHQgKiByZW5kZXJlci0+c3R5
bGUoKS5lZmZlY3RpdmVab29tKCkgLSBhcnJvd1dpZHRoOworICAgIGZsb2F0IGxlZnRFZGdlID0g
Ym91bmRzLm1heFgoKSAtIGFycm93UGFkZGluZ1JpZ2h0ICogcmVuZGVyZXIuc3R5bGUoKS5lZmZl
Y3RpdmVab29tKCkgLSBhcnJvd1dpZHRoOwogICAgIGZsb2F0IHNwYWNlQmV0d2VlbkFycm93cyA9
IGJhc2VTcGFjZUJldHdlZW5BcnJvd3MgKiBmb250U2NhbGU7CiAKLSAgICBpZiAoYm91bmRzLndp
ZHRoKCkgPCBhcnJvd1dpZHRoICsgYXJyb3dQYWRkaW5nTGVmdCAqIHJlbmRlcmVyLT5zdHlsZSgp
LmVmZmVjdGl2ZVpvb20oKSkKKyAgICBpZiAoYm91bmRzLndpZHRoKCkgPCBhcnJvd1dpZHRoICsg
YXJyb3dQYWRkaW5nTGVmdCAqIHJlbmRlcmVyLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKIAotICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRG
aWxsQ29sb3IocmVuZGVyZXItPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5Q29sb3IpLCByZW5kZXJlci0+c3R5bGUoKS5jb2xvclNwYWNlKCkpOworICAgIHBhaW50SW5m
by5jb250ZXh0LT5zZXRGaWxsQ29sb3IocmVuZGVyZXIuc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHJlbmRlcmVyLnN0eWxlKCkuY29sb3JTcGFjZSgpKTsK
ICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoTm9TdHJva2UpOwogCiAgICAg
RmxvYXRQb2ludCBhcnJvdzFbM107CkBAIC0xMjk1LDcgKzEyOTUsNyBAQCBib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgY29ucwogCiAgICAgLy8gRklYTUU6IFNob3VsZCB0aGUgc2VwYXJhdG9yIHRoaWNrbmVz
cyBhbmQgc3BhY2UgYmUgc2NhbGVkIHVwIGJ5IGZvbnRTY2FsZT8KICAgICBpbnQgc2VwYXJhdG9y
U3BhY2UgPSAyOyAvLyBEZWxpYmVyYXRlbHkgaWdub3JlcyB6b29tIHNpbmNlIGl0IGxvb2tzIG5p
Y2VyIGlmIGl0IHN0YXlzIHRoaW4uCi0gICAgaW50IGxlZnRFZGdlT2ZTZXBhcmF0b3IgPSBzdGF0
aWNfY2FzdDxpbnQ+KGxlZnRFZGdlIC0gYXJyb3dQYWRkaW5nTGVmdCAqIHJlbmRlcmVyLT5zdHls
ZSgpLmVmZmVjdGl2ZVpvb20oKSk7IC8vIEZJWE1FOiBSb3VuZD8KKyAgICBpbnQgbGVmdEVkZ2VP
ZlNlcGFyYXRvciA9IHN0YXRpY19jYXN0PGludD4obGVmdEVkZ2UgLSBhcnJvd1BhZGRpbmdMZWZ0
ICogcmVuZGVyZXIuc3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOyAvLyBGSVhNRTogUm91bmQ/CiAK
ICAgICAvLyBEcmF3IHRoZSBzZXBhcmF0b3IgdG8gdGhlIGxlZnQgb2YgdGhlIGFycm93cwogICAg
IHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoMSk7IC8vIERlbGliZXJhdGVs
eSBpZ25vcmVzIHpvb20gc2luY2UgaXQgbG9va3MgbmljZXIgaWYgaXQgc3RheXMgdGhpbi4KQEAg
LTEzOTYsMTIgKzEzOTYsMTIgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWwKICAgICBzdHlsZS0+
c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWVNYWM6OnNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKGNvbnN0IFJlbmRlck9i
amVjdCogbywgY29uc3QgSW50UmVjdCYgcikKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFBvcHVw
QnV0dG9uQ2VsbFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgSW50UmVjdCYgcikK
IHsKICAgICBOU1BvcFVwQnV0dG9uQ2VsbCogcG9wdXBCdXR0b24gPSB0aGlzLT5wb3B1cEJ1dHRv
bigpOwogCiAgICAgLy8gU2V0IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSByZWN0YW5n
bGUgd2UncmUgcGFpbnRpbmcgaW50by4KLSAgICBzZXRDb250cm9sU2l6ZShwb3B1cEJ1dHRvbiwg
cG9wdXBCdXR0b25TaXplcygpLCByLnNpemUoKSwgby0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCkp
OworICAgIHNldENvbnRyb2xTaXplKHBvcHVwQnV0dG9uLCBwb3B1cEJ1dHRvblNpemVzKCksIHIu
c2l6ZSgpLCBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUg
dmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KICAgICB1cGRhdGVBY3RpdmVTdGF0ZShwb3B1
cEJ1dHRvbiwgbyk7CkBAIC0xNDI5LDE2ICsxNDI5LDE2IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6
OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHls
ZSwKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgSW50UmVjdCBib3VuZHMgPSByOwotICAg
IGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0
IHpvb21MZXZlbCA9IG8uc3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CiAgICAgZmxvYXQgem9vbWVk
VHJhY2tXaWR0aCA9IHRyYWNrV2lkdGggKiB6b29tTGV2ZWw7CiAKLSAgICBpZiAoby0+c3R5bGUo
KS5hcHBlYXJhbmNlKCkgPT0gIFNsaWRlckhvcml6b250YWxQYXJ0IHx8IG8tPnN0eWxlKCkuYXBw
ZWFyYW5jZSgpID09ICBNZWRpYVNsaWRlclBhcnQpIHsKKyAgICBpZiAoby5zdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgby5zdHlsZSgpLmFwcGVhcmFuY2Uo
KSA9PSAgTWVkaWFTbGlkZXJQYXJ0KSB7CiAgICAgICAgIGJvdW5kcy5zZXRIZWlnaHQoem9vbWVk
VHJhY2tXaWR0aCk7CiAgICAgICAgIGJvdW5kcy5zZXRZKHIueSgpICsgci5oZWlnaHQoKSAvIDIg
LSB6b29tZWRUcmFja1dpZHRoIC8gMik7Ci0gICAgfSBlbHNlIGlmIChvLT5zdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpIHsKKyAgICB9IGVsc2UgaWYgKG8uc3R5bGUo
KS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KSB7CiAgICAgICAgIGJvdW5kcy5z
ZXRXaWR0aCh6b29tZWRUcmFja1dpZHRoKTsKICAgICAgICAgYm91bmRzLnNldFgoci54KCkgKyBy
LndpZHRoKCkgLyAyIC0gem9vbWVkVHJhY2tXaWR0aCAvIDIpOwogICAgIH0KQEAgLTE0NTcsNyAr
MTQ1Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mCiAgICAgc3RydWN0IENHRnVuY3Rpb25D
YWxsYmFja3MgbWFpbkNhbGxiYWNrcyA9IHsgMCwgVHJhY2tHcmFkaWVudEludGVycG9sYXRlLCBO
VUxMIH07CiAgICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IG1haW5GdW5jdGlvbiA9IGFkb3B0
Q0YoQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmbWFpbkNhbGxiYWNr
cykpOwogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1haW5TaGFkaW5nOwotICAgIGlmIChv
LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCisgICAgaWYgKG8u
c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQogICAgICAgICBtYWlu
U2hhZGluZyA9IGFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFr
ZShib3VuZHMueCgpLCAgYm91bmRzLm1heFkoKSksIENHUG9pbnRNYWtlKGJvdW5kcy5tYXhYKCks
IGJvdW5kcy5tYXhZKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogICAg
IGVsc2UKICAgICAgICAgbWFpblNoYWRpbmcgPSBhZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFs
KGNzcGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5kcy55KCkpLCBDR1BvaW50TWFr
ZShib3VuZHMueCgpLCBib3VuZHMubWF4WSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwg
ZmFsc2UpKTsKQEAgLTE0NzgsOSArMTQ3OCw5IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVz
dFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyCiAK
IGNvbnN0IGZsb2F0IHZlcnRpY2FsU2xpZGVySGVpZ2h0UGFkZGluZyA9IDAuMWY7CiAKLWJvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBOU1NsaWRlckNlbGwqIHNs
aWRlclRodW1iQ2VsbCA9IG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVy
dGljYWxQYXJ0CisgICAgTlNTbGlkZXJDZWxsKiBzbGlkZXJUaHVtYkNlbGwgPSBvLnN0eWxlKCku
YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0CiAgICAgICAgID8gc2xpZGVy
VGh1bWJWZXJ0aWNhbCgpCiAgICAgICAgIDogc2xpZGVyVGh1bWJIb3Jpem9udGFsKCk7CiAKQEAg
LTE0ODksMTkgKzE0ODksMjAgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVt
YihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmYKICAgICAvLyBVcGRh
dGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCiAgICAgdXBkYXRlQWN0aXZlU3Rh
dGUoc2xpZGVyVGh1bWJDZWxsLCBvKTsKICAgICB1cGRhdGVFbmFibGVkU3RhdGUoc2xpZGVyVGh1
bWJDZWxsLCBvKTsKLSAgICBFbGVtZW50KiBmb2N1c0RlbGVnYXRlID0gKG8tPm5vZGUoKSAmJiBv
LT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSkgPyB0b0VsZW1lbnQoby0+bm9kZSgpKS0+Zm9jdXNE
ZWxlZ2F0ZSgpIDogMDsKLSAgICB1cGRhdGVGb2N1c2VkU3RhdGUoc2xpZGVyVGh1bWJDZWxsLCBm
b2N1c0RlbGVnYXRlID8gZm9jdXNEZWxlZ2F0ZS0+cmVuZGVyZXIoKSA6IDApOworICAgICAgICBF
bGVtZW50KiBmb2N1c0RlbGVnYXRlID0gKG8ubm9kZSgpICYmIG8ubm9kZSgpLT5pc0VsZW1lbnRO
b2RlKCkpID8gdG9FbGVtZW50KG8ubm9kZSgpKS0+Zm9jdXNEZWxlZ2F0ZSgpIDogMDsKKyAgICBp
ZiAoZm9jdXNEZWxlZ2F0ZSkKKyAgICAgICAgdXBkYXRlRm9jdXNlZFN0YXRlKHNsaWRlclRodW1i
Q2VsbCwgKmZvY3VzRGVsZWdhdGUtPnJlbmRlcmVyKCkpOwogCiAgICAgLy8gVXBkYXRlIHRoZSBw
cmVzc2VkIHN0YXRlIHVzaW5nIHRoZSBOU0NlbGwgdHJhY2tpbmcgbWV0aG9kcywgc2luY2UgdGhh
dCdzIGhvdyBOU1NsaWRlckNlbGwga2VlcHMgdHJhY2sgb2YgaXQuCiAgICAgYm9vbCBvbGRQcmVz
c2VkOwotICAgIGlmIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRp
Y2FsUGFydCkKKyAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZl
cnRpY2FsUGFydCkKICAgICAgICAgb2xkUHJlc3NlZCA9IG1faXNTbGlkZXJUaHVtYlZlcnRpY2Fs
UHJlc3NlZDsKICAgICBlbHNlCiAgICAgICAgIG9sZFByZXNzZWQgPSBtX2lzU2xpZGVyVGh1bWJI
b3Jpem9udGFsUHJlc3NlZDsKIAogICAgIGJvb2wgcHJlc3NlZCA9IGlzUHJlc3NlZChvKTsKIAot
ICAgIGlmIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFy
dCkKKyAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2Fs
UGFydCkKICAgICAgICAgbV9pc1NsaWRlclRodW1iVmVydGljYWxQcmVzc2VkID0gcHJlc3NlZDsK
ICAgICBlbHNlCiAgICAgICAgIG1faXNTbGlkZXJUaHVtYkhvcml6b250YWxQcmVzc2VkID0gcHJl
c3NlZDsKQEAgLTE1MTUsMTEgKzE1MTYsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRT
bGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmYKIAog
ICAgIEZsb2F0UmVjdCBib3VuZHMgPSByOwogICAgIC8vIE1ha2UgdGhlIGhlaWdodCBvZiB0aGUg
dmVydGljYWwgc2xpZGVyIHNsaWdodGx5IGxhcmdlciBzbyBOU1NsaWRlckNlbGwgd2lsbCBkcmF3
IGEgdmVydGljYWwgc2xpZGVyLgotICAgIGlmIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBT
bGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKLSAgICAgICAgYm91bmRzLnNldEhlaWdodChib3VuZHMu
aGVpZ2h0KCkgKyB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgKiBvLT5zdHlsZSgpLmVmZmVj
dGl2ZVpvb20oKSk7CisgICAgaWYgKG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1
bWJWZXJ0aWNhbFBhcnQpCisgICAgICAgIGJvdW5kcy5zZXRIZWlnaHQoYm91bmRzLmhlaWdodCgp
ICsgdmVydGljYWxTbGlkZXJIZWlnaHRQYWRkaW5nICogby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20o
KSk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5m
by5jb250ZXh0KTsKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpv
b20oKTsKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwog
CiAgICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdCA9IGJvdW5kczsKICAgICBpZiAoem9vbUxldmVs
ICE9IDEuMGYpIHsKQEAgLTE1MzYsNyArMTUzNyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJj
aEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkKGNvbnN0
IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCiB7CiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChw
YWludEluZm8uY29udGV4dCk7CiAgICAgTlNTZWFyY2hGaWVsZENlbGwqIHNlYXJjaCA9IHRoaXMt
PnNlYXJjaCgpOwpAQCAtMTU0NSw3ICsxNTQ2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmYK
IAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNv
bnRleHQpOwogCi0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS5lZmZlY3RpdmVab29t
KCk7CisgICAgZmxvYXQgem9vbUxldmVsID0gby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKIAog
ICAgIEludFJlY3QgdW56b29tZWRSZWN0ID0gcjsKIApAQCAtMTU2OCwxMSArMTU2OSwxMSBAQCBi
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZU1hYzo6c2V0U2VhcmNoQ2VsbFN0YXRlKFJlbmRlck9iamVjdCogbywgY29uc3QgSW50
UmVjdCYpCit2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUoY29uc3QgUmVu
ZGVyT2JqZWN0JiBvLCBjb25zdCBJbnRSZWN0JikKIHsKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCog
c2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAKLSAgICBbc2VhcmNoIHNldENvbnRyb2xTaXplOmNv
bnRyb2xTaXplRm9yRm9udCgmby0+c3R5bGUoKSldOworICAgIFtzZWFyY2ggc2V0Q29udHJvbFNp
emU6Y29udHJvbFNpemVGb3JGb250KCZvLnN0eWxlKCkpXTsKIAogICAgIC8vIFVwZGF0ZSB0aGUg
dmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KICAgICB1cGRhdGVBY3RpdmVTdGF0ZShzZWFy
Y2gsIG8pOwpAQCAtMTYyNywxNyArMTYyOCwxNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlcgog
ICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBFbGVt
ZW50KiBpbnB1dCA9IG8tPm5vZGUoKS0+c2hhZG93SG9zdCgpOworICAgIEVsZW1lbnQqIGlucHV0
ID0gby5ub2RlKCktPnNoYWRvd0hvc3QoKTsKICAgICBpZiAoIWlucHV0KQotICAgICAgICBpbnB1
dCA9IHRvRWxlbWVudChvLT5ub2RlKCkpOworICAgICAgICBpbnB1dCA9IHRvRWxlbWVudChvLm5v
ZGUoKSk7CiAKICAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250
ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICBzZXRTZWFyY2hDZWxsU3RhdGUoaW5wdXQtPnJl
bmRlcmVyKCksIHIpOworICAgIHNldFNlYXJjaENlbGxTdGF0ZSgqaW5wdXQtPnJlbmRlcmVyKCks
IHIpOwogCiAgICAgTlNTZWFyY2hGaWVsZENlbGwqIHNlYXJjaCA9IHRoaXMtPnNlYXJjaCgpOwog
CkBAIC0xNjUwLDcgKzE2NTEsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbgogCiAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAK
LSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBm
bG9hdCB6b29tTGV2ZWwgPSBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgRmxvYXRS
ZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBjYW5jZWxCdXR0b25SZWN0Rm9yQm91bmRzOk5TUmVj
dChpbnB1dC0+cmVuZGVyQm94KCktPnBpeGVsU25hcHBlZEJvcmRlckJveFJlY3QoKSldOwogCkBA
IC0xNjYzLDcgKzE2NjQsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbgogICAgIGxvY2FsQm91
bmRzLnNldFgobG9jYWxCb3VuZHMueCgpIC0gc3BhY2VUb1JpZ2h0T2ZDYW5jZWxCdXR0b24pOwog
I2VuZGlmCiAKLSAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+
cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOworICAgIGxvY2FsQm91bmRzID0gY29udmVy
dFRvUGFpbnRpbmdSZWN0KCppbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOwog
CiAgICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdChsb2NhbEJvdW5kcyk7CiAgICAgaWYgKHpvb21M
ZXZlbCAhPSAxLjBmKSB7CkBAIC0xNzA4LDcgKzE3MDksNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFj
OjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlcgogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLWJvb2wgUmVuZGVy
VGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0x
NzIxLDE2ICsxNzIyLDE2IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosCiAgICAgc3R5bGUtPnNl
dEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6
cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAg
IE5vZGUqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dIb3N0KCk7CisgICAgTm9kZSogaW5wdXQg
PSBvLm5vZGUoKS0+c2hhZG93SG9zdCgpOwogICAgIGlmICghaW5wdXQpCi0gICAgICAgIGlucHV0
ID0gby0+bm9kZSgpOworICAgICAgICBpbnB1dCA9IG8ubm9kZSgpOwogICAgIGlmICghaW5wdXQt
PnJlbmRlcmVyKCktPmlzQm94KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2Fs
Q3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwot
ICAgIHNldFNlYXJjaENlbGxTdGF0ZShpbnB1dC0+cmVuZGVyZXIoKSwgcik7CisgICAgc2V0U2Vh
cmNoQ2VsbFN0YXRlKCppbnB1dC0+cmVuZGVyZXIoKSwgcik7CiAKICAgICBOU1NlYXJjaEZpZWxk
Q2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAKQEAgLTE3NDAsNyArMTc0MSw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQo
UmVuZGVyT2JqZWN0KiBvLCBjb25zCiAgICAgdXBkYXRlQWN0aXZlU3RhdGUoW3NlYXJjaCBzZWFy
Y2hCdXR0b25DZWxsXSwgbyk7CiAKICAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNo
IHNlYXJjaEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+cGl4
ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCgpKV07Ci0gICAgbG9jYWxCb3VuZHMgPSBjb252ZXJ0VG9Q
YWludGluZ1JlY3QoaW5wdXQtPnJlbmRlcmVyKCksIG8sIGxvY2FsQm91bmRzLCByKTsKKyAgICBs
b2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdCgqaW5wdXQtPnJlbmRlcmVyKCksIG8s
IGxvY2FsQm91bmRzLCByKTsKIAogICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIGRyYXdX
aXRoRnJhbWU6bG9jYWxCb3VuZHMgaW5WaWV3OmRvY3VtZW50Vmlld0ZvcihvKV07CiAgICAgW1tz
ZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gc2V0Q29udHJvbFZpZXc6bmlsXTsKQEAgLTE3NTYsMTYg
KzE3NTcsMTYgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclMKICAgICBzdHlsZS0+c2V0Qm94U2hh
ZG93KG51bGxwdHIpOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBOb2RlKiBpbnB1dCA9IG8tPm5vZGUo
KS0+c2hhZG93SG9zdCgpOworICAgIE5vZGUqIGlucHV0ID0gby5ub2RlKCktPnNoYWRvd0hvc3Qo
KTsKICAgICBpZiAoIWlucHV0KQotICAgICAgICBpbnB1dCA9IG8tPm5vZGUoKTsKKyAgICAgICAg
aW5wdXQgPSBvLm5vZGUoKTsKICAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQg
bG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICBzZXRTZWFyY2hDZWxsU3RhdGUo
aW5wdXQtPnJlbmRlcmVyKCksIHIpOworICAgIHNldFNlYXJjaENlbGxTdGF0ZSgqaW5wdXQtPnJl
bmRlcmVyKCksIHIpOwogCiAgICAgTlNTZWFyY2hGaWVsZENlbGwqIHNlYXJjaCA9IHRoaXMtPnNl
YXJjaCgpOwogCkBAIC0xNzc1LDEwICsxNzc2LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
CiAgICAgICAgIFtzZWFyY2ggc2V0U2VhcmNoTWVudVRlbXBsYXRlOnNlYXJjaE1lbnVUZW1wbGF0
ZSgpXTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJ
bmZvLmNvbnRleHQpOwotICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCkuZWZmZWN0aXZl
Wm9vbSgpOworICAgIGZsb2F0IHpvb21MZXZlbCA9IG8uc3R5bGUoKS5lZmZlY3RpdmVab29tKCk7
CiAKICAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIHNlYXJjaEJ1dHRvblJlY3RG
b3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+cGl4ZWxTbmFwcGVkQm9yZGVyQm94
UmVjdCgpKV07Ci0gICAgbG9jYWxCb3VuZHMgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoaW5wdXQt
PnJlbmRlcmVyKCksIG8sIGxvY2FsQm91bmRzLCByKTsKKyAgICBsb2NhbEJvdW5kcyA9IGNvbnZl
cnRUb1BhaW50aW5nUmVjdCgqaW5wdXQtPnJlbmRlcmVyKCksIG8sIGxvY2FsQm91bmRzLCByKTsK
IAogICAgIEludFJlY3QgdW56b29tZWRSZWN0KGxvY2FsQm91bmRzKTsKICAgICBpZiAoem9vbUxl
dmVsICE9IDEuMGYpIHsKQEAgLTE3OTUsMjYgKzE3OTYsMjYgQEAgYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50
U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmKQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRT
bmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYpCiB7CiAgICAgaWYgKHBhaW50SW5mby5w
aGFzZSAhPSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIGlmICghby0+aXNSZW5kZXJCbG9jaygpKQorICAgIGlmICghby5pc1JlbmRlckJsb2Nr
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgUmVuZGVyQmxvY2sqIHJlbmRlckJsb2Nr
ID0gdG9SZW5kZXJCbG9jayhvKTsKKyAgICBjb25zdCBSZW5kZXJCbG9jayYgcmVuZGVyQmxvY2sg
PSAqdG9SZW5kZXJCbG9jaygmbyk7CiAKLSAgICBMYXlvdXRVbml0IGNvbnRlbnRXaWR0aCA9IHJl
bmRlckJsb2NrLT5jb250ZW50V2lkdGgoKTsKLSAgICBMYXlvdXRVbml0IGNvbnRlbnRIZWlnaHQg
PSByZW5kZXJCbG9jay0+Y29udGVudEhlaWdodCgpOworICAgIExheW91dFVuaXQgY29udGVudFdp
ZHRoID0gcmVuZGVyQmxvY2suY29udGVudFdpZHRoKCk7CisgICAgTGF5b3V0VW5pdCBjb250ZW50
SGVpZ2h0ID0gcmVuZGVyQmxvY2suY29udGVudEhlaWdodCgpOwogICAgIGlmICghY29udGVudFdp
ZHRoIHx8ICFjb250ZW50SGVpZ2h0KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OwogCiAgICAgTGF5b3V0U2l6
ZSBjb250ZW50U2l6ZShjb250ZW50V2lkdGgsIGNvbnRlbnRIZWlnaHQpOwotICAgIExheW91dFBv
aW50IGNvbnRlbnRMb2NhdGlvbiA9IHJlbmRlckJsb2NrLT5sb2NhdGlvbigpOwotICAgIGNvbnRl
bnRMb2NhdGlvbi5tb3ZlKHJlbmRlckJsb2NrLT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJCbG9jay0+
cGFkZGluZ0xlZnQoKSwgcmVuZGVyQmxvY2stPmJvcmRlclRvcCgpICsgcmVuZGVyQmxvY2stPnBh
ZGRpbmdUb3AoKSk7CisgICAgTGF5b3V0UG9pbnQgY29udGVudExvY2F0aW9uID0gcmVuZGVyQmxv
Y2subG9jYXRpb24oKTsKKyAgICBjb250ZW50TG9jYXRpb24ubW92ZShyZW5kZXJCbG9jay5ib3Jk
ZXJMZWZ0KCkgKyByZW5kZXJCbG9jay5wYWRkaW5nTGVmdCgpLCByZW5kZXJCbG9jay5ib3JkZXJU
b3AoKSArIHJlbmRlckJsb2NrLnBhZGRpbmdUb3AoKSk7CiAKICAgICBMYXlvdXRSZWN0IHJlY3Qo
Y29udGVudExvY2F0aW9uLCBjb250ZW50U2l6ZSk7CiAgICAgSW50UmVjdCBhbGlnbmVkUmVjdCA9
IHBpeGVsU25hcHBlZEludFJlY3QocmVjdCk7CkBAIC0xODI1LDEwICsxODI2LDEwIEBAIGJvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJCiAgICAgLy8gZnJvbSBvdXIgbm9kZS4gQXNzdW1pbmcgdGhpcyBu
b2RlIGlzIHRoZSBwbHVnaW4gb3ZlcmxheSBlbGVtZW50LCB3ZSBzaG91bGQgZ2V0IHRvIHRoZQog
ICAgIC8vIHBsdWdpbiBpdHNlbGYgYnkgYXNraW5nIGZvciB0aGUgc2hhZG93IHJvb3QgcGFyZW50
LCBhbmQgdGhlbiBpdHMgcGFyZW50LgogCi0gICAgaWYgKCFyZW5kZXJCbG9jay0+ZWxlbWVudCgp
LT5pc0hUTUxFbGVtZW50KCkpCisgICAgaWYgKCFyZW5kZXJCbG9jay5lbGVtZW50KCktPmlzSFRN
TEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBIVE1MRWxlbWVudCogcGx1
Z0luT3ZlcmxheSA9IHRvSFRNTEVsZW1lbnQocmVuZGVyQmxvY2stPmVsZW1lbnQoKSk7CisgICAg
SFRNTEVsZW1lbnQqIHBsdWdJbk92ZXJsYXkgPSB0b0hUTUxFbGVtZW50KHJlbmRlckJsb2NrLmVs
ZW1lbnQoKSk7CiAgICAgRWxlbWVudCogcGFyZW50ID0gcGx1Z0luT3ZlcmxheS0+cGFyZW50T3JT
aGFkb3dIb3N0RWxlbWVudCgpOwogICAgIHdoaWxlIChwYXJlbnQgJiYgIXBhcmVudC0+aXNQbHVn
aW5FbGVtZW50KCkpCiAgICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50T3JTaGFkb3dIb3N0
RWxlbWVudCgpOwpAQCAtMTg1Miw3ICsxODUzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEkK
IAogICAgIC8vIFdlIGNvdWxkIGRyYXcgdGhlIHNuYXBzaG90IHdpdGggdGhhdCBjb29yZGluYXRl
cywgYnV0IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlCiAgICAgLy8gaXNuJ3QgYSBjb21wb3Np
dGVkIGxheWVyIGJldHdlZW4gdXMgYW5kIHRoZSBwbHVnSW5SZW5kZXJlci4KLSAgICBSZW5kZXJC
b3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8pOworICAgIGNvbnN0IFJlbmRlckJveCogcmVu
ZGVyQm94ID0gdG9SZW5kZXJCb3goJm8pOwogICAgIHdoaWxlIChyZW5kZXJCb3ggIT0gcGx1Z0lu
UmVuZGVyZXIpIHsKICAgICAgICAgaWYgKHJlbmRlckJveC0+aGFzTGF5ZXIoKSAmJiByZW5kZXJC
b3gtPmxheWVyKCkgJiYgcmVuZGVyQm94LT5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkgewogICAg
ICAgICAgICAgc25hcHNob3RBYnNQb3MgPSAtcmVuZGVyQm94LT5sb2NhdGlvbigpOwpAQCAtMjAw
NCw3ICsyMDA1LDcgQEAgTlNTZXJ2aWNlc1JvbGxvdmVyQnV0dG9uQ2VsbCogUmVuZGVyVGhlbWVN
YWM6OnNlcnZpY2VzUm9sbG92ZXJCdXR0b25DZWxsKCkgY29uc3QKICNlbmRpZgogfQogCi1ib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludEltYWdlQ29udHJvbHNCdXR0b24oUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Citib29sIFJlbmRlclRoZW1lTWFjOjpwYWludEltYWdlQ29udHJvbHNCdXR0b24oY29uc3QgUmVu
ZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlQmxv
Y2tCYWNrZ3JvdW5kKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIwMjksNyArMjAzMCw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50SW1hZ2VDb250cm9sc0J1dHRvbihSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBjb25zdCBQYWluCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUludFNpemUg
UmVuZGVyVGhlbWVNYWM6OmltYWdlQ29udHJvbHNCdXR0b25TaXplKGNvbnN0IFJlbmRlck9iamVj
dCopIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1lTWFjOjppbWFnZUNvbnRyb2xzQnV0dG9uU2l6
ZShjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdAogewogI2lmIEhBVkUoQVBQS0lUX0lNQUdFX0NP
TlRST0xTX1NVUFBPUlQpCiAgICAgcmV0dXJuIEludFNpemUoc2VydmljZXNSb2xsb3ZlckJ1dHRv
bkNlbGwoKS5jZWxsU2l6ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230042</attachid>
            <date>2014-04-23 20:34:05 -0700</date>
            <delta_ts>2014-04-23 21:23:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132037-20140423203343.patch</filename>
            <type>text/plain</type>
            <size>151556</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3Njc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWJlMGU5NWJiNmE3Mzcy
YTdkMmRmZjY2YjI1ZjAyYzhhMjEwODViNC4uMTI4YTk2NGQ2OWFmYzYzNjU2MmRmMGQ2MjY1NmEw
ZjhlMDVhMmQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MiBAQAorMjAxNC0wNC0yMyAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFRyYW5zaXRpb24gUmVuZGVy
VGhlbWUgQVBJIGZyb20gUmVuZGVyT2JqZWN0KiB0byBjb25zdCBSZW5kZXJPYmplY3QmCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzIwMzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEdvcmFuIEtsaW5nLgorCisgICAgICAgIFVzaW5nIGNv
bnN0IHJlZmVyZW5jZXMgcHJvdmlkZXMgYmV0dGVyIGVuY2Fwc3VsYXRpb24gYW5kIGltcHJvdmUg
c2VjdXJpdHkuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmJvdW5kaW5nQm94Rm9yUXVhZHMpOgorICAgICAgICAqIGRv
bS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEFjdGl2ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRIb3ZlcmVkKToKKyAgICAgICAgKiBlZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpm
b2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250
cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpyZWFkT25seUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRN
TElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpz
ZXRDaGVja2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0
ZXJtaW5hdGUpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmFkZFZpc3VhbE92ZXJmbG93RnJvbVRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCdXR0b246OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVw
bG9hZENvbnRyb2w6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdp
b25zVmlzdWFsT3ZlcmZsb3dGcm9tVGhlbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpkcmF3TGluZUZvckJv
eFNpZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJv
Z3Jlc3M6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVt
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50Qm9yZGVyT25seSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6YWRqdXN0UmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnN0
YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dXBkYXRlQ29udHJv
bFN0YXRlc0ZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpleHRy
YWN0Q29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lOjppc0FjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXNDaGVja2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0luZGV0ZXJtaW5hdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Ojppc1ByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0
dG9uUGFydFByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzUmVhZE9u
bHlDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0hvdmVyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRGVmYXVsdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRJbnB1dEZpZWxkU3BlZWNoQnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmNvbnRyb2xTdXBw
b3J0c1RpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludENhcHNMb2Nr
SW5kaWNhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEZpbGVVcGxv
YWRJY29uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmltYWdl
Q29udHJvbHNCdXR0b25TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWlu
dENoZWNrYm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFJhZGlvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRJbm5lclNwaW5CdXR0b24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRSYWRpb0RlY29yYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6cGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6cGFpbnRUZXh0QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6cGFpbnRUZXh0QXJlYURlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpw
YWludE1lbnVMaXN0RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50U3F1YXJlQnV0dG9uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6cGFpbnRTZWFyY2hGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6
cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlhRnVsbHNj
cmVlbkJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRpYVBs
YXlCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFPdmVy
bGF5UGxheUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRp
YU11dGVCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFT
ZWVrQmFja0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRp
YVNlZWtGb3J3YXJkQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWlu
dE1lZGlhU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50
TWVkaWFTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRN
ZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFSZXdpbmRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFDb250cm9sc0Jh
Y2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFDdXJy
ZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRpYVRpbWVS
ZW1haW5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFGdWxs
U2NyZWVuVm9sdW1lU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnBhaW50TWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWU6OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEltYWdlQ29udHJvbHNCdXR0b24pOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGRSb3Vu
ZGVkQm9yZGVyQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRD
aGVja2JveERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpi
YXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWlu
dFJhZGlvRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBh
aW50VGV4dEZpZWxkRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJ
T1M6OnBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRodW1iRGVjb3JhdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRCdXR0b25EZWNvcmF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50RmlsZVVwbG9hZElj
b25EZWNvcmF0aW9ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6dXBkYXRlQWN0aXZlU3RhdGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lTWFjOjpkb2N1bWVudFZpZXdGb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OmFkanVzdFJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjpjb252ZXJ0VG9QYWludGluZ1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnVwZGF0ZUNoZWNrZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjp1cGRhdGVGb2N1c2VkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnVwZGF0ZVByZXNzZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6Y29udHJvbFN1cHBvcnRzVGludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
OjpwYWludENhcHNMb2NrSW5kaWNhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjpwYWludFRleHRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpw
YWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1l
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwcm9ncmVzc0JhclJlY3RG
b3JCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50UHJvZ3Jl
c3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RC
dXR0b25HcmFkaWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50
TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnNldFNlYXJjaENlbGxTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFw
c2hvdHRlZFBsdWdpbk92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnBhaW50SW1hZ2VDb250cm9sc0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6aW1hZ2VDb250cm9sc0J1dHRvblNpemUpOgorCiAyMDE0LTA0LTIyICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGFuZ2UgSW1hZ2UgQ29udHJvbHMg
cmVwbGFjZW1lbnQgdG8gdXNlIHNlbGVjdGlvbiBhbmQgcGFzdGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDYxZjc0
YzliOGM5MWI0YmZlNWI2ODFiMzZmYzhlYWI2YmE5ZTIyZjcuLmI4ZDcyMDdmOTQ2ZWQ2MGExZDQ0
MGVjMzY0YTQwMWQ1ZDU4Yzk2NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNzExLDcgKzcxMSw3IEBAIEludFJl
Y3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6Ym91bmRpbmdCb3hGb3JRdWFkcyhSZW5kZXJPYmplY3Qq
IG9iaiwgY29uc3QgVmVjdG9yCiAgICAgICAgIEludFJlY3QgciA9IHF1YWQuZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKICAgICAgICAgaWYgKCFyLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYg
KG9iai0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICAgICAgb2JqLT50aGVt
ZSgpLmFkanVzdFJlcGFpbnRSZWN0KG9iaiwgcik7CisgICAgICAgICAgICAgICAgb2JqLT50aGVt
ZSgpLmFkanVzdFJlcGFpbnRSZWN0KCpvYmosIHIpOwogICAgICAgICAgICAgcmVzdWx0LnVuaXRl
KHIpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDFiYjg5OGZh
MWFjMThjOGMyYmY1ZjkyYjFmOTM2Zjk4MGExYzY3YTIuLmFjZGQzNjA2YTA4YzU3NDBlZTViMzU2
MTEzNTJlNWZmYTAzZWZkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTQ4OCw3ICs0ODgs
NyBAQCB2b2lkIEVsZW1lbnQ6OnNldEFjdGl2ZShib29sIGZsYWcsIGJvb2wgcGF1c2UpCiAgICAg
aWYgKHJlYWN0c1RvUHJlc3MpCiAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIAotICAg
IGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAmJiByZW5kZXJlcigpLT50
aGVtZSgpLnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBDb250cm9sU3RhdGVzOjpQcmVzc2VkU3Rh
dGUpKQorICAgIGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAmJiByZW5k
ZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6
UHJlc3NlZFN0YXRlKSkKICAgICAgICAgcmVhY3RzVG9QcmVzcyA9IHRydWU7CiAKICAgICAvLyBU
aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgYSBmZWF0dXJlIHRoYXQgb25seSB3
b3JrcyBpZiB0aGUKQEAgLTU1NCw3ICs1NTQsNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEhvdmVyZWQo
Ym9vbCBmbGFnKQogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKICAgICBpZiAocmVu
ZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIHJlbmRlcmVyKCktPnRo
ZW1lKCkuc3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkhvdmVyU3RhdGUp
OworICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwg
Q29udHJvbFN0YXRlczo6SG92ZXJTdGF0ZSk7CiB9CiAKIHZvaWQgRWxlbWVudDo6c2Nyb2xsSW50
b1ZpZXcoYm9vbCBhbGlnblRvVG9wKSAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAKaW5kZXggNDdiNmJlNjYwYWE2YzQ4OWE0NGE2Y2I4YTQ1ZWY2ZDQzZTg0NDkwYS4u
YmFjMmRmOWMxODcwN2FlYmViYzRiNmMxOTRjMDNjM2M1ZTBlY2NlMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTE3NDksNyArMTc0OSw3IEBAIHZvaWQg
RnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAgICAgIGVs
ZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgaWYgKHJlbmRlcmVy
ICYmIHJlbmRlcmVyLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgICAgICAgICBy
ZW5kZXJlci0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIsIENvbnRyb2xTdGF0ZXM6OkZv
Y3VzU3RhdGUpOworICAgICAgICAgICAgICAgIHJlbmRlcmVyLT50aGVtZSgpLnN0YXRlQ2hhbmdl
ZCgqcmVuZGVyZXIsIENvbnRyb2xTdGF0ZXM6OkZvY3VzU3RhdGUpOwogICAgIH0KICNlbmRpZgog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5k
ZXggZTBiODVkNTk3MGY4OGJkNGMwNTEyZjU3NGMyYWIxZDdmMGNhN2ZkYi4uODEwY2JhZDk3YWZl
NDhiOTRjN2NkMDU2NGIxYjg3MzY3NzQ3MWIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCgpCiAgICAgc2V0TmVlZHNX
aWxsVmFsaWRhdGVDaGVjaygpOwogICAgIGRpZEFmZmVjdFNlbGVjdG9yKEFmZmVjdGVkU2VsZWN0
b3JEaXNhYmxlZCB8IEFmZmVjdGVkU2VsZWN0b3JFbmFibGVkKTsKICAgICBpZiAocmVuZGVyZXIo
KSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgcmVuZGVy
ZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6RW5h
YmxlZFN0YXRlKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJl
bmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkVuYWJsZWRTdGF0ZSk7CiB9CiAKIHZvaWQgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6cmVhZE9ubHlBdHRyaWJ1dGVDaGFuZ2VkKCkKQEAgLTE2Myw3ICsx
NjMsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlYWRPbmx5QXR0cmlidXRlQ2hh
bmdlZCgpCiAgICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOwogICAgIHNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhh
c0FwcGVhcmFuY2UoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQo
cmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6UmVhZE9ubHlTdGF0ZSk7CisgICAgICAgIHJlbmRl
cmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlcigpLCBDb250cm9sU3RhdGVzOjpS
ZWFkT25seVN0YXRlKTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXF1aXJl
ZEF0dHJpYnV0ZUNoYW5nZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAKaW5kZXggNzAwMDI4YmI3MWUwMGIyNDZkZTk2NmRjYjEwMzJmODExOWQzY2I2Mi4uN2NiNmMy
MzA4MWFkZDNiMmI4ODJhYWY3NDQ2MTk0Y2IyM2ZkNGZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC04NTgsNyArODU4LDcgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpzZXRDaGVja2VkKGJvb2wgbm93Q2hlY2tlZCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlv
ciBldmVudEIKICAgICBpZiAoQ2hlY2tlZFJhZGlvQnV0dG9ucyogYnV0dG9ucyA9IGNoZWNrZWRS
YWRpb0J1dHRvbnMoKSkKICAgICAgICAgICAgIGJ1dHRvbnMtPnVwZGF0ZUNoZWNrZWRTdGF0ZSh0
aGlzKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVh
cmFuY2UoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVy
ZXIoKSwgQ29udHJvbFN0YXRlczo6Q2hlY2tlZFN0YXRlKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+
dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkNoZWNrZWRT
dGF0ZSk7CiAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiAKICAgICAvLyBJZGVhbGx5IHdl
J2QgZG8gdGhpcyBmcm9tIHRoZSByZW5kZXIgdHJlZSAobWF0Y2hpbmcKQEAgLTg5Miw3ICs4OTIs
NyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0ZXJtaW5hdGUoYm9vbCBuZXdWYWx1
ZSkKICAgICBkaWRBZmZlY3RTZWxlY3RvcihBZmZlY3RlZFNlbGVjdG9ySW5kZXRlcm1pbmF0ZSk7
CiAKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFu
Y2UoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIo
KSwgQ29udHJvbFN0YXRlczo6Q2hlY2tlZFN0YXRlKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+dGhl
bWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkNoZWNrZWRTdGF0
ZSk7CiB9CiAKIGludCBIVE1MSW5wdXRFbGVtZW50OjpzaXplKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKaW5kZXggNDlmNDhiZjM4MWU5YjQ1MDQ5NDRm
YmEwNTQwNWE5OWQ0NzkzMTY5My4uMjE5ZjNhMjUzMjRkNzExOGFiOTA5MTIwN2M4NDNmMTRiODhj
MDM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKQEAgLTE5
NSw3ICsxOTUsNyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdAogICAgICAgICBpZiAob2xkRGlz
YWJsZWQgIT0gbV9kaXNhYmxlZCkgewogICAgICAgICAgICAgZGlkQWZmZWN0U2VsZWN0b3IoQWZm
ZWN0ZWRTZWxlY3RvckRpc2FibGVkIHwgQWZmZWN0ZWRTZWxlY3RvckVuYWJsZWQpOwogICAgICAg
ICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVu
ZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6RW5hYmxlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICBy
ZW5kZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRl
czo6RW5hYmxlZFN0YXRlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBzZWxl
Y3RlZEF0dHIpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBtYXRjaCB3aGF0IHRo
ZSBIVE1MIHNwZWNpZmljYXRpb24gc2F5cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCmluZGV4IGRkNWM0MDBhZWEyMTRmZjIwYzkwMThkMjRiYTIzOWQ1ZjZmNWQ0ZmEu
LjUwNjZhZWNjMTVjYmNhZTQ2Zjg4ZTFlODViNTkxMDQyYjg3NzE5NWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMTQzOCw3ICsxNDM4LDcgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6YWRkVmlzdWFsT3ZlcmZsb3dGcm9tVGhlbWUoKQogICAgICAgICByZXR1cm47
CiAKICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHBpeGVsU25hcHBlZEJvcmRlckJveFJlY3Qo
KTsKLSAgICB0aGVtZSgpLmFkanVzdFJlcGFpbnRSZWN0KHRoaXMsIGluZmxhdGVkUmVjdCk7Cisg
ICAgdGhlbWUoKS5hZGp1c3RSZXBhaW50UmVjdCgqdGhpcywgaW5mbGF0ZWRSZWN0KTsKICAgICBh
ZGRWaXN1YWxPdmVyZmxvdyhpbmZsYXRlZFJlY3QpOwogCiAgICAgaWYgKFJlbmRlckZsb3dUaHJl
YWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpCkBAIC00Mjk0LDcg
KzQyOTQsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5l
IGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpbmUsIExpbgogICAgICAgICAvLyBpcyB0dXJuZWQg
b2ZmLCBjaGVja2JveGVzL3JhZGlvcyB3aWxsIHN0aWxsIGhhdmUgZGVjZW50IGJhc2VsaW5lcy4K
ICAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gcGF0Y2ggZm9ybSBjb250cm9scyB0byBkZWFsIHdp
dGggdmVydGljYWwgbGluZXMuCiAgICAgICAgIGlmIChzdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAm
JiAhdGhlbWUoKS5pc0NvbnRyb2xDb250YWluZXIoc3R5bGUoKS5hcHBlYXJhbmNlKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIHRoZW1lKCkuYmFzZWxpbmVQb3NpdGlvbih0aGlzKTsKKyAgICAgICAg
ICAgIHJldHVybiB0aGVtZSgpLmJhc2VsaW5lUG9zaXRpb24oKnRoaXMpOwogICAgICAgICAgICAg
CiAgICAgICAgIC8vIENTUzIuMSBzdGF0ZXMgdGhhdCB0aGUgYmFzZWxpbmUgb2YgYW4gaW5saW5l
IGJsb2NrIGlzIHRoZSBiYXNlbGluZSBvZiB0aGUgbGFzdCBsaW5lIGJveCBpbgogICAgICAgICAv
LyB0aGUgbm9ybWFsIGZsb3cuICBXZSBtYWtlIGFuIGV4Y2VwdGlvbiBmb3IgbWFycXVlZXMsIHNp
bmNlIHRoZWlyIGJhc2VsaW5lcyBhcmUgbWVhbmluZ2xlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKaW5kZXggYjdlM2RjYjI2NDI0YTRkNjRiM2Q2ODEyMTgxNGIyNTQ0ODgx
MDk2NC4uNjNhMjhkMzE4ZmU5YjQxMjAyZmI2YWQwZDE1NjNjZTllYjhmY2JhNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTEyMjcsNyArMTIyNyw3IEBAIHZvaWQg
UmVuZGVyQm94OjpwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBib29sIHRoZW1lUGFp
bnRlZCA9IHN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpICYmICF0aGVtZSgpLnBhaW50KHRoaXMsIGNv
bnRyb2xTdGF0ZXMsIHBhaW50SW5mbywgc25hcHBlZFBhaW50UmVjdCk7CisgICAgYm9vbCB0aGVt
ZVBhaW50ZWQgPSBzdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAmJiAhdGhlbWUoKS5wYWludCgqdGhp
cywgY29udHJvbFN0YXRlcywgcGFpbnRJbmZvLCBzbmFwcGVkUGFpbnRSZWN0KTsKIAogICAgIGlm
IChjb250cm9sU3RhdGVzICYmIGNvbnRyb2xTdGF0ZXMtPm5lZWRzUmVwYWludCgpKQogICAgICAg
ICBtX3JlcGFpbnRUaW1lci5zdGFydE9uZVNob3QoMCk7CkBAIC0xMjM5LDEyICsxMjM5LDEyIEBA
IHZvaWQgUmVuZGVyQm94OjpwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpCiAgICAgICAgIHBhaW50QmFja2dyb3VuZChwYWludElu
Zm8sIHBhaW50UmVjdCwgYmxlZWRBdm9pZGFuY2UpOwogCiAgICAgICAgIGlmIChzdHlsZSgpLmhh
c0FwcGVhcmFuY2UoKSkKLSAgICAgICAgICAgIHRoZW1lKCkucGFpbnREZWNvcmF0aW9ucyh0aGlz
LCBwYWludEluZm8sIHNuYXBwZWRQYWludFJlY3QpOworICAgICAgICAgICAgdGhlbWUoKS5wYWlu
dERlY29yYXRpb25zKCp0aGlzLCBwYWludEluZm8sIHNuYXBwZWRQYWludFJlY3QpOwogICAgIH0K
ICAgICBwYWludEJveFNoYWRvdyhwYWludEluZm8sIHBhaW50UmVjdCwgc3R5bGUoKSwgSW5zZXQp
OwogCiAgICAgLy8gVGhlIHRoZW1lIHdpbGwgdGVsbCB1cyB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91
bGQgYWxzbyBwYWludCB0aGUgQ1NTIGJvcmRlci4KLSAgICBpZiAoYmxlZWRBdm9pZGFuY2UgIT0g
QmFja2dyb3VuZEJsZWVkQmFja2dyb3VuZE92ZXJCb3JkZXIgJiYgKCFzdHlsZSgpLmhhc0FwcGVh
cmFuY2UoKSB8fCAoIXRoZW1lUGFpbnRlZCAmJiB0aGVtZSgpLnBhaW50Qm9yZGVyT25seSh0aGlz
LCBwYWludEluZm8sIHNuYXBwZWRQYWludFJlY3QpKSkgJiYgc3R5bGUoKS5oYXNCb3JkZXIoKSkK
KyAgICBpZiAoYmxlZWRBdm9pZGFuY2UgIT0gQmFja2dyb3VuZEJsZWVkQmFja2dyb3VuZE92ZXJC
b3JkZXIgJiYgKCFzdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSB8fCAoIXRoZW1lUGFpbnRlZCAmJiB0
aGVtZSgpLnBhaW50Qm9yZGVyT25seSgqdGhpcywgcGFpbnRJbmZvLCBzbmFwcGVkUGFpbnRSZWN0
KSkpICYmIHN0eWxlKCkuaGFzQm9yZGVyKCkpCiAgICAgICAgIHBhaW50Qm9yZGVyKHBhaW50SW5m
bywgcGFpbnRSZWN0LCBzdHlsZSgpLCBibGVlZEF2b2lkYW5jZSk7CiAKICAgICBpZiAoYmxlZWRB
dm9pZGFuY2UgPT0gQmFja2dyb3VuZEJsZWVkVXNlVHJhbnNwYXJlbmN5TGF5ZXIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCmluZGV4IDczNzJkZDAzYWM3MWMxMjZh
ODZlMzEwMWVjNzk3NDBmMzBhYzdjMjMuLjhmYzgzMzA5MTg2N2FkMWYwYWE0YTkxZmUzMmFhNDIy
MDViODc2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCkBA
IC0xMTIsMTIgKzExMiwxMiBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdAogICAgIGlmIChtX2lu
bmVyKSAvLyBSZW5kZXJCbG9jayBoYW5kbGVkIHVwZGF0aW5nIHRoZSBhbm9ueW1vdXMgYmxvY2sn
cyBzdHlsZS4KICAgICAgICAgc2V0dXBJbm5lclN0eWxlKCZtX2lubmVyLT5zdHlsZSgpKTsKIAot
ICAgIGlmICghbV9kZWZhdWx0ICYmIHRoZW1lKCkuaXNEZWZhdWx0KHRoaXMpKSB7CisgICAgaWYg
KCFtX2RlZmF1bHQgJiYgdGhlbWUoKS5pc0RlZmF1bHQoKnRoaXMpKSB7CiAgICAgICAgIGlmICgh
bV90aW1lcikKICAgICAgICAgICAgIG1fdGltZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbWVyPFJl
bmRlckJ1dHRvbj4+KHRoaXMsICZSZW5kZXJCdXR0b246OnRpbWVyRmlyZWQpOwogICAgICAgICBt
X3RpbWVyLT5zdGFydFJlcGVhdGluZygwLjAzKTsKICAgICAgICAgbV9kZWZhdWx0ID0gdHJ1ZTsK
LSAgICB9IGVsc2UgaWYgKG1fZGVmYXVsdCAmJiAhdGhlbWUoKS5pc0RlZmF1bHQodGhpcykpIHsK
KyAgICB9IGVsc2UgaWYgKG1fZGVmYXVsdCAmJiAhdGhlbWUoKS5pc0RlZmF1bHQoKnRoaXMpKSB7
CiAgICAgICAgIG1fZGVmYXVsdCA9IGZhbHNlOwogICAgICAgICBtX3RpbWVyID0gbnVsbHB0cjsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxv
YWRDb250cm9sLmNwcAppbmRleCA3NjhkMTg5ZjVlNGIxNjFkNjNiZDg5ZjFkODkyYmFhNDc5NDVm
Y2U3Li5lM2U5YTllMDdhNTJiMzY0MTY4ZjAyZjBiNzUxYTM1MzQ2YTIzMzJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAK
QEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9i
amVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbgogICAgICAgICAgICAg
ICAgIC8vIERyYXcgdGhlIGZpbGUgaWNvbiBhbmQgZGVjb3JhdGlvbnMuCiAgICAgICAgICAgICAg
ICAgSW50UmVjdCBpY29uUmVjdChpY29uWCwgaWNvblksIGljb25XaWR0aCwgaWNvbkhlaWdodCk7
CiAgICAgICAgICAgICAgICAgUmVuZGVyVGhlbWU6OkZpbGVVcGxvYWREZWNvcmF0aW9ucyBkZWNv
cmF0aW9uc1R5cGUgPSBpbnB1dEVsZW1lbnQoKS5maWxlcygpLT5sZW5ndGgoKSA9PSAxID8gUmVu
ZGVyVGhlbWU6OlNpbmdsZUZpbGUgOiBSZW5kZXJUaGVtZTo6TXVsdGlwbGVGaWxlczsKLSAgICAg
ICAgICAgICAgICB0aGVtZSgpLnBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucyh0aGlzLCBi
dXR0b25SZW5kZXJlciwgcGFpbnRJbmZvLCBpY29uUmVjdCwgaW5wdXRFbGVtZW50KCkuaWNvbigp
LCBkZWNvcmF0aW9uc1R5cGUpOworICAgICAgICAgICAgICAgIHRoZW1lKCkucGFpbnRGaWxlVXBs
b2FkSWNvbkRlY29yYXRpb25zKCp0aGlzLCAqYnV0dG9uUmVuZGVyZXIsIHBhaW50SW5mbywgaWNv
blJlY3QsIGlucHV0RWxlbWVudCgpLmljb24oKSwgZGVjb3JhdGlvbnNUeXBlKTsKICAgICAgICAg
ICAgIH0KICNlbHNlCiAgICAgICAgICAgICAvLyBEcmF3IHRoZSBmaWxlIGljb24KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAppbmRleCBjZjk0ZDVlNGI3
M2RjNTQxNjYwZDVlZjUxYTU1Y2Y1ZTVhNDlkM2ZkLi4xNTk2ODIxNmYwYzU4ZTdjMzZjOTM3ZTNj
ODMxM2RhZDgxNGNmODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuY3BwCkBAIC0xMjg1LDcgKzEyODUsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6
OmFkZFJlZ2lvbnNWaXN1YWxPdmVyZmxvd0Zyb21UaGVtZShjb25zdCBSZW5kZXJCbG9jayogYmxv
YwogICAgICAgICBib3JkZXJCb3ggPSByZWdpb24tPnJlY3RGbG93UG9ydGlvbkZvckJveChibG9j
aywgYm9yZGVyQm94KTsKIAogICAgICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHBpeGVsU25h
cHBlZEludFJlY3QoYm9yZGVyQm94KTsKLSAgICAgICAgYmxvY2stPnRoZW1lKCkuYWRqdXN0UmVw
YWludFJlY3QoYmxvY2ssIGluZmxhdGVkUmVjdCk7CisgICAgICAgIGJsb2NrLT50aGVtZSgpLmFk
anVzdFJlcGFpbnRSZWN0KCpibG9jaywgaW5mbGF0ZWRSZWN0KTsKIAogICAgICAgICByZWdpb24t
PmFkZFZpc3VhbE92ZXJmbG93Rm9yQm94KGJsb2NrLCBpbmZsYXRlZFJlY3QpOwogICAgICAgICBp
ZiAocmVnaW9uID09IGVuZFJlZ2lvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAppbmRleCBjYWZkMGMwZTdjZGQzMGU4ZmIyNmY2ZmI1MzE5
ODcxNmJmOGY5Yjk1Li4yNWJiYzM2MGRhMDY5ODU2MzEyYTkxNzI2MmEwMjI2ZmExNWZjOTFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3Bw
CkBAIC03MCwxMCArNzAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0o
V0lOKSAmJiBVU0UoQ0cpCiAKLXN0YXRpYyBXS01lZGlhQ29udHJvbGxlclRoZW1lU3RhdGUgZGV0
ZXJtaW5lU3RhdGUoUmVuZGVyT2JqZWN0KiBvKQorc3RhdGljIFdLTWVkaWFDb250cm9sbGVyVGhl
bWVTdGF0ZSBkZXRlcm1pbmVTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8pCiB7CiAgICAgaW50
IHJlc3VsdCA9IDA7Ci0gICAgY29uc3QgUmVuZGVyVGhlbWUmIHRoZW1lID0gby0+dGhlbWUoKTsK
KyAgICBjb25zdCBSZW5kZXJUaGVtZSYgdGhlbWUgPSBvLnRoZW1lKCk7CiAgICAgaWYgKCF0aGVt
ZS5pc0VuYWJsZWQobykgfHwgdGhlbWUuaXNSZWFkT25seUNvbnRyb2wobykpCiAgICAgICAgIHJl
c3VsdCB8PSBXS01lZGlhQ29udHJvbGxlckZsYWdEaXNhYmxlZDsKICAgICBpZiAodGhlbWUuaXNQ
cmVzc2VkKG8pKQpAQCAtODQsOSArODQsOSBAQCBzdGF0aWMgV0tNZWRpYUNvbnRyb2xsZXJUaGVt
ZVN0YXRlIGRldGVybWluZVN0YXRlKFJlbmRlck9iamVjdCogbykKIH0KIAogLy8gVXRpbGl0eSB0
byBzY2FsZSB3aGVuIHRoZSBVSSBwYXJ0IGFyZSBub3Qgc2NhbGVkIGJ5IHdrRHJhd01lZGlhVUlQ
YXJ0Ci1zdGF0aWMgRmxvYXRSZWN0IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250
ZXh0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QgJm9yaWdpbmFsUmVjdCkKK3N0YXRpYyBGbG9hdFJlY3QgZ2V0VW56b29tZWRSZWN0QW5k
QWRqdXN0Q3VycmVudENvbnRleHQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCAmb3JpZ2luYWxSZWN0KQogewotICAgIGZsb2F0
IHpvb21MZXZlbCA9IG8tPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21M
ZXZlbCA9IG8uc3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CiAgICAgRmxvYXRSZWN0IHVuem9vbWVk
UmVjdChvcmlnaW5hbFJlY3QpOwogICAgIGlmICh6b29tTGV2ZWwgIT0gMS4wZikgewogICAgICAg
ICB1bnpvb21lZFJlY3Quc2V0V2lkdGgodW56b29tZWRSZWN0LndpZHRoKCkgLyB6b29tTGV2ZWwp
OwpAQCAtMTI2LDM1ICsxMjYsMzUgQEAgdm9pZCBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RN
ZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpCiAgICAgc3R5bGUtPnNldEhl
aWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCAqIHpvb21MZXZlbCksIEZp
eGVkKSk7CiB9CiAKLWJvb2wgUmVuZGVyTWVkaWFDb250cm9sczo6cGFpbnRNZWRpYUNvbnRyb2xz
UGFydChNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBwYXJ0LCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJNZWRp
YUNvbnRyb2xzOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhQ29udHJvbEVsZW1lbnRUeXBl
IHBhcnQsIGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICBj
YXNlIE1lZGlhRW50ZXJGdWxsc2NyZWVuQnV0dG9uOgogICAgIGNhc2UgTWVkaWFFeGl0RnVsbHNj
cmVlbkJ1dHRvbjoKLSAgICAgICAgaWYgKE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVt
ZW50KiBidG4gPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVu
dCo+KG8tPm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0
b25FbGVtZW50KiBidG4gPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9u
RWxlbWVudCo+KG8ubm9kZSgpKSkgewogICAgICAgICAgICAgYm9vbCBlbnRlckJ1dHRvbiA9IGJ0
bi0+ZGlzcGxheVR5cGUoKSA9PSBNZWRpYUVudGVyRnVsbHNjcmVlbkJ1dHRvbjsKICAgICAgICAg
ICAgIHdrRHJhd01lZGlhVUlQYXJ0KGVudGVyQnV0dG9uID8gV0tNZWRpYVVJUGFydEZ1bGxzY3Jl
ZW5CdXR0b24gOiBXS01lZGlhVUlQYXJ0RXhpdEZ1bGxzY3JlZW5CdXR0b24sIHBhaW50SW5mby5j
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZGV0ZXJtaW5lU3RhdGUobykpOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVkaWFTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0
b246CiAgICAgY2FzZSBNZWRpYUhpZGVDbG9zZWRDYXB0aW9uc0J1dHRvbjoKLSAgICAgICAgaWYg
KE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudCogYnRuID0gc3Rh
dGljX2Nhc3Q8TWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50Kj4o
by0+bm9kZSgpKSkgeworICAgICAgICBpZiAoTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlv
bnNCdXR0b25FbGVtZW50KiBidG4gPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQqPihvLm5vZGUoKSkpIHsKICAgICAgICAgICAgIGJvb2wg
Y2FwdGlvbnNWaXNpYmxlID0gYnRuLT5kaXNwbGF5VHlwZSgpID09IE1lZGlhSGlkZUNsb3NlZENh
cHRpb25zQnV0dG9uOwogICAgICAgICAgICAgd2tEcmF3TWVkaWFVSVBhcnQoY2FwdGlvbnNWaXNp
YmxlID8gV0tNZWRpYVVJUGFydEhpZGVDbG9zZWRDYXB0aW9uc0J1dHRvbiA6IFdLTWVkaWFVSVBh
cnRTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b24sIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSwgciwgZGV0ZXJtaW5lU3RhdGUobykpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uOgogICAgIGNhc2UgTWVkaWFVbk11dGVCdXR0b246
Ci0gICAgICAgIGlmIChNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGlj
X2Nhc3Q8TWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQqPihvLT5ub2RlKCkpKSB7CisgICAg
ICAgIGlmIChNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8
TWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQqPihvLm5vZGUoKSkpIHsKICAgICAgICAgICAg
IGJvb2wgYXVkaW9FbmFibGVkID0gYnRuLT5kaXNwbGF5VHlwZSgpID09IE1lZGlhTXV0ZUJ1dHRv
bjsKICAgICAgICAgICAgIHdrRHJhd01lZGlhVUlQYXJ0KGF1ZGlvRW5hYmxlZCA/IFdLTWVkaWFV
SVBhcnRNdXRlQnV0dG9uIDogV0tNZWRpYVVJUGFydFVuTXV0ZUJ1dHRvbiwgcGFpbnRJbmZvLmNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBkZXRlcm1pbmVTdGF0ZShvKSk7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNZWRpYVBhdXNlQnV0dG9uOgogICAgIGNhc2Ug
TWVkaWFQbGF5QnV0dG9uOgotICAgICAgICBpZiAoTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1l
bnQqIGJ0biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50Kj4oby0+
bm9kZSgpKSkgeworICAgICAgICBpZiAoTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQqIGJ0
biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50Kj4oby5ub2RlKCkp
KSB7CiAgICAgICAgICAgICBib29sIGNhblBsYXkgPSBidG4tPmRpc3BsYXlUeXBlKCkgPT0gTWVk
aWFQbGF5QnV0dG9uOwogICAgICAgICAgICAgd2tEcmF3TWVkaWFVSVBhcnQoY2FuUGxheSA/IFdL
TWVkaWFVSVBhcnRQbGF5QnV0dG9uIDogV0tNZWRpYVVJUGFydFBhdXNlQnV0dG9uLCBwYWludElu
Zm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGRldGVybWluZVN0YXRlKG8pKTsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlh
Q29udHJvbHMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xz
LmgKaW5kZXggOGExNmMyZjc4N2Q5OWU1NWFmZTc4MTQxZTM4ZmFjYTc5YTMxNjI1MC4uZGUwMmYy
YWEzZWNjZDgwYzM0NzVhYWU3MTllOWY5MjhiZTNhYWNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNz
IFJlbmRlck1lZGlhQ29udHJvbHMgewogcHVibGljOgogCiAjaWYgUExBVEZPUk0oV0lOKQotICAg
IHN0YXRpYyBib29sIHBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5
cGUsIFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICBzdGF0aWMgYm9vbCBwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhQ29udHJvbEVsZW1lbnRU
eXBlLCBjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAgICAgc3RhdGljIHZvaWQgYWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5
bGUqKTsKICNlbmRpZgogICAgIHN0YXRpYyBJbnRQb2ludCB2b2x1bWVTbGlkZXJPZmZzZXRGcm9t
TXV0ZUJ1dHRvbihSZW5kZXJCb3gqLCBjb25zdCBJbnRTaXplJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGEwMDMwN2MxOTUwYWUwNGI0OGExY2ZjNGY1
NzkxNTgxODg1MmQ4NzkuLjdiZWZkYzVkYTE0OTM3YzBiYzIyZjAxNjdjOGVmOTU0N2NmMzQyOWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC03MjUsNyAr
NzI1LDcgQEAgUmVuZGVyQmxvY2sqIFJlbmRlck9iamVjdDo6Y29udGFpbmluZ0Jsb2NrKCkgY29u
c3QKIH0KIAogdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdMaW5lRm9yQm94U2lkZShHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCwgZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxv
YXQgeTIsCi0gICAgQm94U2lkZSBzaWRlLCBDb2xvciBjb2xvciwgRUJvcmRlclN0eWxlIGJvcmRl
clN0eWxlLCBmbG9hdCBhZGphY2VudFdpZHRoMSwgZmxvYXQgYWRqYWNlbnRXaWR0aDIsIGJvb2wg
YW50aWFsaWFzKQorICAgIEJveFNpZGUgc2lkZSwgQ29sb3IgY29sb3IsIEVCb3JkZXJTdHlsZSBi
b3JkZXJTdHlsZSwgZmxvYXQgYWRqYWNlbnRXaWR0aDEsIGZsb2F0IGFkamFjZW50V2lkdGgyLCBi
b29sIGFudGlhbGlhcykgY29uc3QKIHsKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IGRv
Y3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKICAgICBmbG9hdCB0aGlja25lc3M7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggY2E4YTZkZWE3YzY4OTQ5Yzdi
ZTAwNzgyZDNkNGI0ZmE5OWRiYmFlNi4uZTU4MDNlMGRiNmIwNjhhNDg5MTc1MDk2ZTNjM2Q0NTVi
NDliYjI3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtODc5
LDcgKzg3OSw3IEBAIHB1YmxpYzoKIAogICAgIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSBz
aG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpIGNvbnN0OwogCi0gICAgdm9pZCBkcmF3TGlu
ZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0KiwgZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4
MiwgZmxvYXQgeTIsIEJveFNpZGUsIENvbG9yLCBFQm9yZGVyU3R5bGUsIGZsb2F0IGFkamJ3MSwg
ZmxvYXQgYWRqYncyLCBib29sIGFudGlhbGlhcyA9IGZhbHNlKTsKKyAgICB2b2lkIGRyYXdMaW5l
Rm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQqLCBmbG9hdCB4MSwgZmxvYXQgeTEsIGZsb2F0IHgy
LCBmbG9hdCB5MiwgQm94U2lkZSwgQ29sb3IsIEVCb3JkZXJTdHlsZSwgZmxvYXQgYWRqYncxLCBm
bG9hdCBhZGpidzIsIGJvb2wgYW50aWFsaWFzID0gZmFsc2UpIGNvbnN0OwogcHJvdGVjdGVkOgog
ICAgIHZvaWQgcGFpbnRGb2N1c1JpbmcoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBS
ZW5kZXJTdHlsZSopOwogICAgIHZvaWQgcGFpbnRPdXRsaW5lKFBhaW50SW5mbyYsIGNvbnN0IExh
eW91dFJlY3QmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQ
cm9ncmVzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3Bw
CmluZGV4IDQxMzlkMjVkOTkyZDYyYjc0ODZiMWQzMTg1ZjA2MDM3YzUyNGRmZmUuLjg0MzJmNjA0
ZjQzOGEyMmMzNzY0Y2U5OGEzNTcwNTM5NjdlMDdlZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcApAQCAtNjcsNyArNjcsNyBAQCB2b2lkIFJlbmRlclBy
b2dyZXNzOjpjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIExh
eW91dFVuaXQgbAogICAgICAgICBmcmFtZS5zZXRIZWlnaHQoY29tcHV0ZWRWYWx1ZXMubV9leHRl
bnQpOwogICAgIGVsc2UKICAgICAgICAgZnJhbWUuc2V0V2lkdGgoY29tcHV0ZWRWYWx1ZXMubV9l
eHRlbnQpOwotICAgIEludFNpemUgZnJhbWVTaXplID0gdGhlbWUoKS5wcm9ncmVzc0JhclJlY3RG
b3JCb3VuZHModGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFtZSkpLnNpemUoKTsKKyAgICBJ
bnRTaXplIGZyYW1lU2l6ZSA9IHRoZW1lKCkucHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKCp0aGlz
LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYW1lKSkuc2l6ZSgpOwogICAgIGNvbXB1dGVkVmFsdWVz
Lm1fZXh0ZW50ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZyYW1lU2l6ZS5oZWlnaHQo
KSA6IGZyYW1lU2l6ZS53aWR0aCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IDRhYmU3OTZk
M2E1ZTY2MDZjNzliZDRjZWExNDE0MjhmNmEyMzU1MWMuLmM3N2M3MjFkNDJlZWVlNjFlYTJjMWI1
Yjc5YzJkZTdjOTI1ZjkzNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC04NCw3ICs4NCw3IEBAIHZv
aWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwYWludChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmCiAKICAgICAgICAgLy8gQ29udmVydCB0aGUgcmVjdCBpbnRv
IHRoZSBjb29yZHMgdXNlZCBmb3IgcGFpbnRpbmcgdGhlIGNvbnRlbnQKICAgICAgICAgY29udGVu
dHNSZWN0Lm1vdmVCeShwYWludE9mZnNldCArIGxvY2F0aW9uKCkpOwotICAgICAgICB0aGVtZSgp
LnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IodGhpcywgcGFpbnRJbmZvLCBwaXhlbFNuYXBwZWRJbnRS
ZWN0KGNvbnRlbnRzUmVjdCkpOworICAgICAgICB0aGVtZSgpLnBhaW50Q2Fwc0xvY2tJbmRpY2F0
b3IoKnRoaXMsIHBhaW50SW5mbywgcGl4ZWxTbmFwcGVkSW50UmVjdChjb250ZW50c1JlY3QpKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCmluZGV4
IGM3OWRiY2JjZTQxMzAzZWY3NDA5M2YzYTlmN2ZiYjRhZmQzNmM4OWYuLmMwMWRkNDNhYWRmOTU0
OWY0MGRiZjk5ZjdhNDMwODZkMTQ5MWFkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmNwcApAQCAtMjYzLDIwICsyNjMsMjAgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxl
LAogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnQoUmVuZGVyT2JqZWN0KiBvLCBD
b250cm9sU3RhdGVzKiBjb250cm9sU3RhdGVzLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWU6OnBhaW50KGNvbnN0IFJlbmRlck9i
amVjdCYgbywgQ29udHJvbFN0YXRlcyogY29udHJvbFN0YXRlcywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgLy8gSWYgcGFpbnRpbmcgaXMgZGlz
YWJsZWQsIGJ1dCB3ZSBhcmVuJ3QgdXBkYXRpbmcgY29udHJvbCB0aW50cywgdGhlbiBqdXN0IGJh
aWwuCiAgICAgLy8gSWYgd2UgYXJlIHVwZGF0aW5nIGNvbnRyb2wgdGludHMsIGp1c3Qgc2NoZWR1
bGUgYSByZXBhaW50IGlmIHRoZSB0aGVtZSBzdXBwb3J0cyB0aW50aW5nCiAgICAgLy8gZm9yIHRo
YXQgY29udHJvbC4KICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnVwZGF0aW5nQ29udHJvbFRp
bnRzKCkpIHsKICAgICAgICAgaWYgKGNvbnRyb2xTdXBwb3J0c1RpbnRzKG8pKQotICAgICAgICAg
ICAgby0+cmVwYWludCgpOworICAgICAgICAgICAgby5yZXBhaW50KCk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBv
LT5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gby5zdHlsZSgp
LmFwcGVhcmFuY2UoKTsKIAogI2lmIFVTRShORVdfVEhFTUUpCiAgICAgc3dpdGNoIChwYXJ0KSB7
CkBAIC0yODgsNyArMjg4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnQoUmVuZGVyT2JqZWN0
KiBvLCBDb250cm9sU3RhdGVzKiBjb250cm9sU3RhdGVzLCBjb25zdCBQYWkKICAgICBjYXNlIEJ1
dHRvblBhcnQ6CiAgICAgY2FzZSBJbm5lclNwaW5CdXR0b25QYXJ0OgogICAgICAgICB1cGRhdGVD
b250cm9sU3RhdGVzRm9yUmVuZGVyZXIobywgY29udHJvbFN0YXRlcyk7Ci0gICAgICAgIG1fdGhl
bWUtPnBhaW50KHBhcnQsIGNvbnRyb2xTdGF0ZXMsIGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0
Kj4ocGFpbnRJbmZvLmNvbnRleHQpLCByLCBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSwgJm8t
PnZpZXcoKS5mcmFtZVZpZXcoKSk7CisgICAgICAgIG1fdGhlbWUtPnBhaW50KHBhcnQsIGNvbnRy
b2xTdGF0ZXMsIGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0Kj4ocGFpbnRJbmZvLmNvbnRleHQp
LCByLCBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpLCAmby52aWV3KCkuZnJhbWVWaWV3KCkpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBAIC00
MDUsMTcgKzQwNSwxNyBAQCBib29sIFJlbmRlclRoZW1lOjpwYWludChSZW5kZXJPYmplY3QqIG8s
IENvbnRyb2xTdGF0ZXMqIGNvbnRyb2xTdGF0ZXMsIGNvbnN0IFBhaQogICAgIHJldHVybiB0cnVl
OyAvLyBXZSBkb24ndCBzdXBwb3J0IHRoZSBhcHBlYXJhbmNlLCBzbyBsZXQgdGhlIG5vcm1hbCBi
YWNrZ3JvdW5kL2JvcmRlciBwYWludC4KIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRCb3Jk
ZXJPbmx5KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lOjpwYWludEJvcmRlck9ubHkoY29uc3QgUmVu
ZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKIHsKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIFVOVVNFRF9QQVJB
TShyKTsKLSAgICByZXR1cm4gby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgIT0gTm9Db250cm9sUGFy
dDsKKyAgICByZXR1cm4gby5zdHlsZSgpLmFwcGVhcmFuY2UoKSAhPSBOb0NvbnRyb2xQYXJ0Owog
I2Vsc2UKICAgICAvLyBDYWxsIHRoZSBhcHByb3ByaWF0ZSBwYWludCBtZXRob2QgYmFzZWQgb2Zm
IHRoZSBhcHBlYXJhbmNlIHZhbHVlLgotICAgIHN3aXRjaCAoby0+c3R5bGUoKS5hcHBlYXJhbmNl
KCkpIHsKKyAgICBzd2l0Y2ggKG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkpIHsKICAgICBjYXNlIFRl
eHRGaWVsZFBhcnQ6CiAgICAgICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBwYWludEluZm8s
IHIpOwogICAgIGNhc2UgTGlzdGJveFBhcnQ6CkBAIC00NjMsMTMgKzQ2MywxMyBAQCBib29sIFJl
bmRlclRoZW1lOjpwYWludEJvcmRlck9ubHkoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgYwogI2VuZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OnBhaW50RGVj
b3JhdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lOjpwYWludERlY29yYXRp
b25zKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludEluZm8uY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDYWxs
IHRoZSBhcHByb3ByaWF0ZSBwYWludCBtZXRob2QgYmFzZWQgb2ZmIHRoZSBhcHBlYXJhbmNlIHZh
bHVlLgotICAgIHN3aXRjaCAocmVuZGVyZXItPnN0eWxlKCkuYXBwZWFyYW5jZSgpKSB7CisgICAg
c3dpdGNoIChyZW5kZXJlci5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgewogICAgIGNhc2UgTWVudWxp
c3RCdXR0b25QYXJ0OgogICAgICAgICByZXR1cm4gcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRp
b25zKHJlbmRlcmVyLCBwYWludEluZm8sIHJlY3QpOwogICAgIGNhc2UgVGV4dEZpZWxkUGFydDoK
QEAgLTY2NiwxNyArNjY2LDE3IEBAIENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUluYWN0aXZl
TGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CiAgICAgcmV0dXJuIHBsYXRm
b3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKTsKIH0KIAotaW50IFJlbmRlclRo
ZW1lOjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2ludCBS
ZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0
CiB7Ci0gICAgaWYgKCFvLT5pc0JveCgpKQorICAgIGlmICghby5pc0JveCgpKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gobyk7Cisg
ICAgY29uc3QgUmVuZGVyQm94JiBib3ggPSAqdG9SZW5kZXJCb3goJm8pOwogCiAjaWYgVVNFKE5F
V19USEVNRSkKLSAgICByZXR1cm4gYm94LT5oZWlnaHQoKSArIGJveC0+bWFyZ2luVG9wKCkgKyBt
X3RoZW1lLT5iYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudChvLT5zdHlsZSgpLmFwcGVhcmFuY2Uo
KSkgKiBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKKyAgICByZXR1cm4gYm94LmhlaWdodCgp
ICsgYm94Lm1hcmdpblRvcCgpICsgbV90aGVtZS0+YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQo
by5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgKiBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwogI2Vs
c2UKLSAgICByZXR1cm4gYm94LT5oZWlnaHQoKSArIGJveC0+bWFyZ2luVG9wKCk7CisgICAgcmV0
dXJuIGJveC5oZWlnaHQoKSArIGJveC5tYXJnaW5Ub3AoKTsKICNlbmRpZgogfQogCkBAIC03MTQs
MTEgKzcxNCwxMSBAQCBib29sIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJiBibwogICAgIH0KIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZTo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBJbnRS
ZWN0JiByKQordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVy
T2JqZWN0JiBvLCBJbnRSZWN0JiByKQogewogI2lmIFVTRShORVdfVEhFTUUpCiAgICAgQ29udHJv
bFN0YXRlcyBzdGF0ZXMoZXh0cmFjdENvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihvKSk7Ci0gICAg
bV90aGVtZS0+aW5mbGF0ZUNvbnRyb2xQYWludFJlY3Qoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCks
ICZzdGF0ZXMsIHIsIG8tPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBtX3RoZW1lLT5p
bmZsYXRlQ29udHJvbFBhaW50UmVjdChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpLCAmc3RhdGVzLCBy
LCBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG8p
OwogICAgIFVOVVNFRF9QQVJBTShyKTsKQEAgLTczMCwxMCArNzMwLDEwIEBAIGJvb2wgUmVuZGVy
VGhlbWU6OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
ICAgICByZXR1cm4gKHN0eWxlLT5oYXNBcHBlYXJhbmNlKCkgJiYgc3R5bGUtPmFwcGVhcmFuY2Uo
KSAhPSBUZXh0RmllbGRQYXJ0ICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gVGV4dEFyZWFQYXJ0
ICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gTWVudWxpc3RCdXR0b25QYXJ0ICYmIHN0eWxlLT5h
cHBlYXJhbmNlKCkgIT0gTGlzdGJveFBhcnQpOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjpzdGF0
ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3RhdGVzOjpTdGF0ZXMgc3RhdGUpIGNv
bnN0Citib29sIFJlbmRlclRoZW1lOjpzdGF0ZUNoYW5nZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBv
LCBDb250cm9sU3RhdGVzOjpTdGF0ZXMgc3RhdGUpIGNvbnN0CiB7CiAgICAgLy8gRGVmYXVsdCBp
bXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoZSBjb250cm9scyBkb24ndCByZXNwb25kIHRvIGNoYW5n
ZXMgaW4gOmhvdmVyIHN0YXRlCi0gICAgaWYgKHN0YXRlID09IENvbnRyb2xTdGF0ZXM6OkhvdmVy
U3RhdGUgJiYgIXN1cHBvcnRzSG92ZXIoJm8tPnN0eWxlKCkpKQorICAgIGlmIChzdGF0ZSA9PSBD
b250cm9sU3RhdGVzOjpIb3ZlclN0YXRlICYmICFzdXBwb3J0c0hvdmVyKCZvLnN0eWxlKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBBc3N1bWUgcHJlc3NlZCBzdGF0ZSBpcyBv
bmx5IHJlc3BvbmRlZCB0byBpZiB0aGUgY29udHJvbCBpcyBlbmFibGVkLgpAQCAtNzQxLDE3ICs3
NDEsMTcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKFJlbmRlck9iamVjdCogbywg
Q29udHJvbFN0YXRlczo6U3RhdGVzIHN0YXRlKSBjb24KICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgLy8gUmVwYWludCB0aGUgY29udHJvbC4KLSAgICBvLT5yZXBhaW50KCk7CisgICAgby5y
ZXBhaW50KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OnVwZGF0
ZUNvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIG8sIENvbnRyb2xT
dGF0ZXMqIGNvbnRyb2xTdGF0ZXMpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjp1cGRhdGVDb250
cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBDb250cm9sU3RhdGVz
KiBjb250cm9sU3RhdGVzKSBjb25zdAogewogICAgIENvbnRyb2xTdGF0ZXMgbmV3U3RhdGVzID0g
ZXh0cmFjdENvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihvKTsKICAgICBjb250cm9sU3RhdGVzLT5z
ZXRTdGF0ZXMobmV3U3RhdGVzLnN0YXRlcygpKTsKIH0KIAotQ29udHJvbFN0YXRlczo6U3RhdGVz
IFJlbmRlclRoZW1lOjpleHRyYWN0Q29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRl
ck9iamVjdCogbykgY29uc3QKK0NvbnRyb2xTdGF0ZXM6OlN0YXRlcyBSZW5kZXJUaGVtZTo6ZXh0
cmFjdENvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0
CiB7CiAgICAgQ29udHJvbFN0YXRlczo6U3RhdGVzIHN0YXRlcyA9IDA7CiAgICAgaWYgKGlzSG92
ZXJlZChvKSkgewpAQCAtNzY0LDcgKzc2NCw3IEBAIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBSZW5k
ZXJUaGVtZTo6ZXh0cmFjdENvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPCiAg
ICAgICAgIGlmIChpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKG8pKQogICAgICAgICAgICAgc3Rh
dGVzIHw9IENvbnRyb2xTdGF0ZXM6OlNwaW5VcFN0YXRlOwogICAgIH0KLSAgICBpZiAoaXNGb2N1
c2VkKG8pICYmIG8tPnN0eWxlKCkub3V0bGluZVN0eWxlSXNBdXRvKCkpCisgICAgaWYgKGlzRm9j
dXNlZChvKSAmJiBvLnN0eWxlKCkub3V0bGluZVN0eWxlSXNBdXRvKCkpCiAgICAgICAgIHN0YXRl
cyB8PSBDb250cm9sU3RhdGVzOjpGb2N1c1N0YXRlOwogICAgIGlmIChpc0VuYWJsZWQobykpCiAg
ICAgICAgIHN0YXRlcyB8PSBDb250cm9sU3RhdGVzOjpFbmFibGVkU3RhdGU7CkBAIC03ODEsOSAr
NzgxLDkgQEAgQ29udHJvbFN0YXRlczo6U3RhdGVzIFJlbmRlclRoZW1lOjpleHRyYWN0Q29udHJv
bFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck8KICAgICByZXR1cm4gc3RhdGVzOwogfQog
Ci1ib29sIFJlbmRlclRoZW1lOjppc0FjdGl2ZShjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0
Citib29sIFJlbmRlclRoZW1lOjppc0FjdGl2ZShjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0
CiB7Ci0gICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gby5ub2Rl
KCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTc5OCw0MSAr
Nzk4LDQxIEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzQWN0aXZlKGNvbnN0IFJlbmRlck9iamVjdCog
bykgY29uc3QKICAgICByZXR1cm4gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsK
IH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNDaGVja2VkKGNvbnN0IFJlbmRlck9iamVjdCogbykg
Y29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzQ2hlY2tlZChjb25zdCBSZW5kZXJPYmplY3QmIG8p
IGNvbnN0CiB7Ci0gICAgaWYgKCFvLT5ub2RlKCkpCisgICAgaWYgKCFvLm5vZGUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0g
by0+bm9kZSgpLT50b0lucHV0RWxlbWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
RWxlbWVudCA9IG8ubm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwogICAgIGlmICghaW5wdXRFbGVt
ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5z
aG91bGRBcHBlYXJDaGVja2VkKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzSW5kZXRlcm1p
bmF0ZShjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc0lu
ZGV0ZXJtaW5hdGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIGlmICghby0+
bm9kZSgpKQorICAgIGlmICghby5ub2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG8tPm5vZGUoKS0+dG9JbnB1dEVsZW1l
bnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBvLm5vZGUoKS0+dG9J
bnB1dEVsZW1lbnQoKTsKICAgICBpZiAoIWlucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0
ZSgpOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjppc0VuYWJsZWQoY29uc3QgUmVuZGVyT2JqZWN0
KiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6aXNFbmFibGVkKGNvbnN0IFJlbmRlck9iamVj
dCYgbykgY29uc3QKIHsKLSAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIE5vZGUqIG5v
ZGUgPSBvLm5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuICF0b0VsZW1lbnQobm9kZSktPmlzRGlz
YWJsZWRGb3JtQ29udHJvbCgpOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjppc0ZvY3VzZWQoY29u
c3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKGNv
bnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKIHsKLSAgICBOb2RlKiBub2RlID0gby0+bm9kZSgp
OworICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC04NDIsMTYgKzg0Miwx
NiBAQCBib29sIFJlbmRlclRoZW1lOjppc0ZvY3VzZWQoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBj
b25zdAogICAgIHJldHVybiBmb2N1c0RlbGVnYXRlID09IGRvY3VtZW50LmZvY3VzZWRFbGVtZW50
KCkgJiYgZnJhbWUgJiYgZnJhbWUtPnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpOwog
fQogCi1ib29sIFJlbmRlclRoZW1lOjppc1ByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBj
b25zdAorYm9vbCBSZW5kZXJUaGVtZTo6aXNQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCYgbykg
Y29uc3QKIHsKLSAgICBpZiAoIW8tPm5vZGUoKSB8fCAhby0+bm9kZSgpLT5pc0VsZW1lbnROb2Rl
KCkpCisgICAgaWYgKCFvLm5vZGUoKSB8fCAhby5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0b0VsZW1lbnQoby0+bm9kZSgpKS0+YWN0
aXZlKCk7CisgICAgcmV0dXJuIHRvRWxlbWVudChvLm5vZGUoKSktPmFjdGl2ZSgpOwogfQogCi1i
b29sIFJlbmRlclRoZW1lOjppc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKGNvbnN0IFJlbmRlck9i
amVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydFByZXNz
ZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBvLT5u
b2RlKCk7CisgICAgTm9kZSogbm9kZSA9IG8ubm9kZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgRWxlbWVudCog
ZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKQEAgLTg2MCwxNyArODYwLDE3IEBAIGJvb2wgUmVu
ZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0KiBv
KSBjb25zdAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTcGluQnV0dG9uRWxlbWVudCo+KGVsZW1l
bnQpLT51cERvd25TdGF0ZSgpID09IFNwaW5CdXR0b25FbGVtZW50OjpVcDsKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZTo6aXNSZWFkT25seUNvbnRyb2woY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25z
dAorYm9vbCBSZW5kZXJUaGVtZTo6aXNSZWFkT25seUNvbnRyb2woY29uc3QgUmVuZGVyT2JqZWN0
JiBvKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbm9k
ZSA9IG8ubm9kZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKS0+bWF0Y2hl
c1JlYWRPbmx5UHNldWRvQ2xhc3MoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNIb3ZlcmVk
KGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzSG92ZXJl
ZChjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IG8tPm5v
ZGUoKTsKKyAgICBOb2RlKiBub2RlID0gby5ub2RlKCk7CiAgICAgaWYgKCFub2RlIHx8ICFub2Rl
LT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIXRvRWxl
bWVudChub2RlKS0+aXNTcGluQnV0dG9uRWxlbWVudCgpKQpAQCAtODc5LDI1ICs4NzksMjUgQEAg
Ym9vbCBSZW5kZXJUaGVtZTo6aXNIb3ZlcmVkKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QK
ICAgICByZXR1cm4gZWxlbWVudC0+aG92ZXJlZCgpICYmIGVsZW1lbnQtPnVwRG93blN0YXRlKCkg
IT0gU3BpbkJ1dHRvbkVsZW1lbnQ6OkluZGV0ZXJtaW5hdGU7CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWU6OmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25z
dAorYm9vbCBSZW5kZXJUaGVtZTo6aXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChjb25zdCBSZW5k
ZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAgICBO
b2RlKiBub2RlID0gby5ub2RlKCk7CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnRO
b2RlKCkgfHwgIXRvRWxlbWVudChub2RlKS0+aXNTcGluQnV0dG9uRWxlbWVudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgU3BpbkJ1dHRvbkVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTcGluQnV0dG9uRWxlbWVudCo+KG5vZGUpOwogICAgIHJldHVybiBlbGVtZW50LT51cERv
d25TdGF0ZSgpID09IFNwaW5CdXR0b25FbGVtZW50OjpVcDsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZTo6aXNEZWZhdWx0KGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhl
bWU6OmlzRGVmYXVsdChjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7CiAgICAgLy8gQSBi
dXR0b24gc2hvdWxkIG9ubHkgaGF2ZSB0aGUgZGVmYXVsdCBhcHBlYXJhbmNlIGlmIHRoZSBwYWdl
IGlzIGFjdGl2ZQogICAgIGlmICghaXNBY3RpdmUobykpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmICghby0+ZnJhbWUoKS5zZXR0aW5ncygpLmFwcGxpY2F0aW9uQ2hyb21lTW9kZSgp
KQorICAgIGlmICghby5mcmFtZSgpLnNldHRpbmdzKCkuYXBwbGljYXRpb25DaHJvbWVNb2RlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICByZXR1cm4gby0+c3R5bGUoKS5hcHBl
YXJhbmNlKCkgPT0gRGVmYXVsdEJ1dHRvblBhcnQ7CisgICAgcmV0dXJuIG8uc3R5bGUoKS5hcHBl
YXJhbmNlKCkgPT0gRGVmYXVsdEJ1dHRvblBhcnQ7CiB9CiAKICNpZiAhVVNFKE5FV19USEVNRSkK
QEAgLTk2Nyw3ICs5NjcsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcgogICAgIFJlbmRlcklu
cHV0U3BlZWNoOjphZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZl
ciwgc3R5bGUsIGVsZW1lbnQpOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjpwYWludElucHV0Rmll
bGRTcGVlY2hCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRJbnB1
dEZpZWxkU3BlZWNoQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gUmVu
ZGVySW5wdXRTcGVlY2g6OnBhaW50SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbihvYmplY3QsIHBhaW50
SW5mbywgcmVjdCk7CiB9CkBAIC05ODksNyArOTg5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6c3Vw
cG9ydHNNZXRlcihDb250cm9sUGFydCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgUmVuZGVyVGhlbWU6OnBhaW50TWV0ZXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpCitib29sIFJlbmRlclRoZW1lOjpwYWludE1ldGVyKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQogewogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtMTAwMiw5ICsxMDAyLDkgQEAgTGF5b3V0VW5pdCBSZW5kZXJUaGVt
ZTo6c2xpZGVyVGlja1NuYXBwaW5nVGhyZXNob2xkKCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZTo6cGFpbnRTbGlkZXJUaWNrcyhSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBSZW5k
ZXJUaGVtZTo6cGFpbnRTbGlkZXJUaWNrcyhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIE5vZGUqIG5v
ZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IG8ubm9kZSgpOwogICAgIGlmICghbm9k
ZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDE4LDE0ICsxMDE4LDE0IEBAIHZvaWQgUmVuZGVy
VGhlbWU6OnBhaW50U2xpZGVyVGlja3MoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywKIAogICAgIGRvdWJsZSBtaW4gPSBpbnB1dC0+bWluaW11bSgpOwogICAgIGRv
dWJsZSBtYXggPSBpbnB1dC0+bWF4aW11bSgpOwotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvLT5z
dHlsZSgpLmFwcGVhcmFuY2UoKTsKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gby5zdHlsZSgpLmFw
cGVhcmFuY2UoKTsKICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRpY2tzIG9uIGFsdGVybmF0ZSBz
bGlkZXJzIGxpa2UgTWVkaWFWb2x1bWVTbGlkZXJzLgogICAgIGlmIChwYXJ0ICE9ICBTbGlkZXJI
b3Jpem9udGFsUGFydCAmJiBwYXJ0ICE9IFNsaWRlclZlcnRpY2FsUGFydCkKICAgICAgICAgcmV0
dXJuOwogICAgIGJvb2wgaXNIb3Jpem9udGFsID0gcGFydCA9PSAgU2xpZGVySG9yaXpvbnRhbFBh
cnQ7CiAKICAgICBJbnRTaXplIHRodW1iU2l6ZTsKLSAgICBSZW5kZXJPYmplY3QqIHRodW1iUmVu
ZGVyZXIgPSBpbnB1dC0+c2xpZGVyVGh1bWJFbGVtZW50KCktPnJlbmRlcmVyKCk7CisgICAgY29u
c3QgUmVuZGVyT2JqZWN0KiB0aHVtYlJlbmRlcmVyID0gaW5wdXQtPnNsaWRlclRodW1iRWxlbWVu
dCgpLT5yZW5kZXJlcigpOwogICAgIGlmICh0aHVtYlJlbmRlcmVyKSB7CiAgICAgICAgIGNvbnN0
IFJlbmRlclN0eWxlJiB0aHVtYlN0eWxlID0gdGh1bWJSZW5kZXJlci0+c3R5bGUoKTsKICAgICAg
ICAgaW50IHRodW1iV2lkdGggPSB0aHVtYlN0eWxlLndpZHRoKCkuaW50VmFsdWUoKTsKQEAgLTEw
MzUsNyArMTAzNSw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3MoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywKICAgICB9CiAKICAgICBJbnRT
aXplIHRpY2tTaXplID0gc2xpZGVyVGlja1NpemUoKTsKLSAgICBmbG9hdCB6b29tRmFjdG9yID0g
by0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9vbUZhY3RvciA9IG8uc3R5
bGUoKS5lZmZlY3RpdmVab29tKCk7CiAgICAgRmxvYXRSZWN0IHRpY2tSZWN0OwogICAgIGludCB0
aWNrUmVnaW9uU2lkZU1hcmdpbiA9IDA7CiAgICAgaW50IHRpY2tSZWdpb25XaWR0aCA9IDA7CkBA
IC0xMDQ0LDcgKzEwNDQsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sCiAgICAgLy8gV2UgY2Fu
IGlnbm9yaW5nIHRyYW5zZm9ybXMgYmVjYXVzZSB0cmFuc2Zvcm0gaXMgaGFuZGxlZCBieSB0aGUg
Z3JhcGhpY3MgY29udGV4dC4KICAgICBpZiAodHJhY2tSZW5kZXJlcikKICAgICAgICAgdHJhY2tC
b3VuZHMgPSB0cmFja1JlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdElnbm9yaW5nVHJh
bnNmb3JtcygpOwotICAgIEludFJlY3Qgc2xpZGVyQm91bmRzID0gby0+YWJzb2x1dGVCb3VuZGlu
Z0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKTsKKyAgICBJbnRSZWN0IHNsaWRlckJvdW5kcyA9
IG8uYWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKTsKIAogICAgIC8v
IE1ha2UgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHRyYW5zZm9ybWVkIGFuY2VzdG9yIGVsZW1l
bnQuCiAgICAgdHJhY2tCb3VuZHMuc2V0WCh0cmFja0JvdW5kcy54KCkgLSBzbGlkZXJCb3VuZHMu
eCgpICsgcmVjdC54KCkpOwpAQCAtMTA2NSw3ICsxMDY1LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6
cGFpbnRTbGlkZXJUaWNrcyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLAogICAgIH0KICAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IG9wdGlvbnMgPSBkYXRhTGlz
dC0+b3B0aW9ucygpOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigq
cGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3Io
by0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIENvbG9y
U3BhY2VEZXZpY2VSR0IpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3Ioby5z
dHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgQ29sb3JTcGFj
ZURldmljZVJHQik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgTm9kZSogbm9kZSA9IG9wdGlv
bnMtPml0ZW0oaSk7IGkrKykgewogICAgICAgICBBU1NFUlQoaXNIVE1MT3B0aW9uRWxlbWVudChu
b2RlKSk7CiAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9IVE1M
T3B0aW9uRWxlbWVudChub2RlKTsKQEAgLTEwNzQsNyArMTA3NCw3IEBAIHZvaWQgUmVuZGVyVGhl
bWU6OnBhaW50U2xpZGVyVGlja3MoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBkb3VibGUgcGFyc2VkVmFs
dWUgPSBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShpbnB1dC0+c2FuaXRpemVWYWx1ZSh2YWx1
ZSkpOwogICAgICAgICBkb3VibGUgdGlja0ZyYWN0aW9uID0gKHBhcnNlZFZhbHVlIC0gbWluKSAv
IChtYXggLSBtaW4pOwotICAgICAgICBkb3VibGUgdGlja1JhdGlvID0gaXNIb3Jpem9udGFsICYm
IG8tPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gdGlja0ZyYWN0aW9uIDogMS4w
IC0gdGlja0ZyYWN0aW9uOworICAgICAgICBkb3VibGUgdGlja1JhdGlvID0gaXNIb3Jpem9udGFs
ICYmIG8uc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyB0aWNrRnJhY3Rpb24gOiAx
LjAgLSB0aWNrRnJhY3Rpb247CiAgICAgICAgIGRvdWJsZSB0aWNrUG9zaXRpb24gPSByb3VuZCh0
aWNrUmVnaW9uU2lkZU1hcmdpbiArIHRpY2tSZWdpb25XaWR0aCAqIHRpY2tSYXRpbyk7CiAgICAg
ICAgIGlmIChpc0hvcml6b250YWwpCiAgICAgICAgICAgICB0aWNrUmVjdC5zZXRYKHRpY2tQb3Np
dGlvbik7CkBAIC0xMTAwLDcgKzExMDAsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RQcm9n
cmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKQogewog
fQogCi1JbnRSZWN0IFJlbmRlclRoZW1lOjpwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3Qg
UmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAorSW50UmVjdCBSZW5k
ZXJUaGVtZTo6cHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IEludFJlY3QmIGJvdW5kcykgY29uc3QKIHsKICAgICByZXR1cm4gYm91bmRzOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAppbmRleCA5YmQ4MGU5OGMxYTNiNDE0MDhj
ODdlMzA2YWU1MGVhZDJkZWNiMzk5Li5jN2RlMmQ1MzZiYjllYjU1NTZhMjRmZTExMjlmNmRjNDQ4
Mjc2ZTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaApAQCAtNzksOSAr
NzksOSBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHBhaW50IHRo
ZSB3aWRnZXQgYXMgYSBiYWNrZ3JvdW5kIG9mIHRoZSBSZW5kZXJPYmplY3QuICBBIHdpZGdldCdz
IGZvcmVncm91bmQsIGUuZy4sIHRoZQogICAgIC8vIHRleHQgb2YgYSBidXR0b24sIGlzIGFsd2F5
cyByZW5kZXJlZCBieSB0aGUgZW5naW5lIGl0c2VsZi4gIFRoZSBib29sZWFuIHJldHVybiB2YWx1
ZSBpbmRpY2F0ZXMKICAgICAvLyB3aGV0aGVyIHRoZSBDU1MgYm9yZGVyL2JhY2tncm91bmQgc2hv
dWxkIGFsc28gYmUgcGFpbnRlZC4KLSAgICBib29sIHBhaW50KFJlbmRlck9iamVjdCosIENvbnRy
b2xTdGF0ZXMqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgYm9vbCBw
YWludEJvcmRlck9ubHkoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwotICAgIGJvb2wgcGFpbnREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgYm9vbCBwYWludChjb25zdCBSZW5kZXJP
YmplY3QmLCBDb250cm9sU3RhdGVzKiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIGJvb2wgcGFpbnRCb3JkZXJPbmx5KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIHBhaW50RGVjb3JhdGlvbnMoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAg
ICAgLy8gVGhlIHJlbWFpbmluZyBtZXRob2RzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSB0aGUg
cGxhdGZvcm0tc3BlY2lmaWMgcG9ydGlvbiBvZiB0aGUgdGhlbWUsIGUuZy4sCiAgICAgLy8gUmVu
ZGVyVGhlbWVNYWMuY3BwIGZvciBNYWMgT1MgWC4KQEAgLTEwNiwxNCArMTA2LDE0IEBAIHB1Ymxp
YzoKICAgICAvLyBBIG1ldGhvZCB0byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIGZvciBh
ICJsZWFmIiBjb250cm9sLiAgVGhpcyB3aWxsIG9ubHkgYmUgdXNlZCBpZiBhIGJhc2VsaW5lCiAg
ICAgLy8gcG9zaXRpb24gY2Fubm90IGJlIGRldGVybWluZWQgYnkgZXhhbWluaW5nIGNoaWxkIGNv
bnRlbnQuIENoZWNrYm94ZXMgYW5kIHJhZGlvIGJ1dHRvbnMgYXJlIGV4YW1wbGVzIG9mCiAgICAg
Ly8gY29udHJvbHMgdGhhdCBuZWVkIHRvIGRvIHRoaXMuCi0gICAgdmlydHVhbCBpbnQgYmFzZWxp
bmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBi
YXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OwogCiAgICAgLy8gQSBt
ZXRob2QgZm9yIGFza2luZyBpZiBhIGNvbnRyb2wgaXMgYSBjb250YWluZXIgb3Igbm90LiAgTGVh
ZiBjb250cm9scyBoYXZlIHRvIGhhdmUgc29tZSBzcGVjaWFsIGJlaGF2aW9yIChsaWtlCiAgICAg
Ly8gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIEFQSSBhYm92ZSkuCiAgICAgYm9vbCBpc0NvbnRyb2xD
b250YWluZXIoQ29udHJvbFBhcnQpIGNvbnN0OwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlm
IHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBv
ciBub3QuCi0gICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRl
ck9iamVjdCopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGNvbnRy
b2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAKICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgY29udHJvbCBoYXMgYmVlbiBzdHlsZWQg
ZW5vdWdoIGJ5IHRoZSBhdXRob3IgdG8gZGlzYWJsZSB0aGUgbmF0aXZlIGFwcGVhcmFuY2UuCiAg
ICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0
IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENv
bG9yKSBjb25zdDsKQEAgLTEyMywxMSArMTIzLDExIEBAIHB1YmxpYzoKIAogICAgIC8vIFNvbWUg
Y29udHJvbHMgbWF5IHNwaWxsIG91dCBvZiB0aGVpciBjb250YWluZXJzIChlLmcuLCB0aGUgY2hl
Y2sgb24gYW4gT1MgWCBjaGVja2JveCkuICBXaGVuIHRoZXNlIGNvbnRyb2xzIHJlcGFpbnQsCiAg
ICAgLy8gdGhlIHRoZW1lIG5lZWRzIHRvIGNvbW11bmljYXRlIHRoaXMgaW5mbGF0ZWQgcmVjdCB0
byB0aGUgZW5naW5lIHNvIHRoYXQgaXQgY2FuIGludmFsaWRhdGUgdGhlIHdob2xlIGNvbnRyb2wu
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCos
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgSW50UmVjdCYpOwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdo
ZW5ldmVyIGEgcmVsZXZhbnQgc3RhdGUgY2hhbmdlcyBvbiBhIHBhcnRpY3VsYXIgdGhlbWVkIG9i
amVjdCwgZS5nLiwgdGhlIG1vdXNlIGJlY29tZXMgcHJlc3NlZAogICAgIC8vIG9yIGEgY29udHJv
bCBiZWNvbWVzIGRpc2FibGVkLgotICAgIHZpcnR1YWwgYm9vbCBzdGF0ZUNoYW5nZWQoUmVuZGVy
T2JqZWN0KiwgQ29udHJvbFN0YXRlczo6U3RhdGVzKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
c3RhdGVDaGFuZ2VkKGNvbnN0IFJlbmRlck9iamVjdCYsIENvbnRyb2xTdGF0ZXM6OlN0YXRlcykg
Y29uc3Q7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIHRoZW1l
IGNoYW5nZXMgb24gdGhlIHN5c3RlbSBpbiBvcmRlciB0byBmbHVzaCBjYWNoZWQgcmVzb3VyY2Vz
IGZyb20gdGhlCiAgICAgLy8gb2xkIHRoZW1lLgpAQCAtMTg4LDE0ICsxODgsMTQgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgU2Nyb2xsYmFyQ29udHJvbFNpemUgc2Nyb2xsYmFyQ29udHJvbFNpemVG
b3JQYXJ0KENvbnRyb2xQYXJ0KSB7IHJldHVybiBSZWd1bGFyU2Nyb2xsYmFyOyB9CiAKICAgICAv
LyBNZXRob2QgZm9yIHBhaW50aW5nIHRoZSBjYXBzIGxvY2sgaW5kaWNhdG9yCi0gICAgdmlydHVh
bCBib29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIDA7IH07CisgICAgdmlydHVhbCBib29sIHBh
aW50Q2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIDA7IH07CiAKICNpZiBFTkFCTEUoUFJPR1JFU1Nf
RUxFTUVOVCkKICAgICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhlIGFuaW1h
dGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25S
ZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CiAgICAg
Ly8gUmV0dXJucyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNz
IGJhci4KICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFy
KFJlbmRlclByb2dyZXNzKikgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRSZWN0IHByb2dyZXNzQmFy
UmVjdEZvckJvdW5kcyhjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7
CisgICAgdmlydHVhbCBJbnRSZWN0IHByb2dyZXNzQmFyUmVjdEZvckJvdW5kcyhjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShW
SURFTykKQEAgLTIyOCw3ICsyMjgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRTaXplIHNs
aWRlclRpY2tTaXplKCkgY29uc3QgPSAwOwogICAgIC8vIFJldHVybnMgdGhlIGRpc3RhbmNlIG9m
IHNsaWRlciB0aWNrIG9yaWdpbiBmcm9tIHRoZSBzbGlkZXIgdHJhY2sgY2VudGVyLgogICAgIHZp
cnR1YWwgaW50IHNsaWRlclRpY2tPZmZzZXRGcm9tVHJhY2tDZW50ZXIoKSBjb25zdCA9IDA7Ci0g
ICAgdm9pZCBwYWludFNsaWRlclRpY2tzKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHBhaW50U2xpZGVyVGlja3MoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogI2VuZGlmCiAKICAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQpAQCAtMjQzLDEwICsyNDMsMTAgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9u
dCYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Q7CiAKICAgICBl
bnVtIEZpbGVVcGxvYWREZWNvcmF0aW9ucyB7IFNpbmdsZUZpbGUsIE11bHRpcGxlRmlsZXMgfTsK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRGaWxlVXBsb2FkSWNvbkRlY29yYXRpb25zKFJlbmRlck9i
amVjdCogLyppbnB1dFJlbmRlcmVyKi8sIFJlbmRlck9iamVjdCogLypidXR0b25SZW5kZXJlciov
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JiwgSWNvbiosIEZpbGVVcGxvYWREZWNv
cmF0aW9ucykgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludEZpbGVVcGxv
YWRJY29uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiAvKmlucHV0UmVuZGVyZXIqLywg
Y29uc3QgUmVuZGVyT2JqZWN0JiAvKmJ1dHRvblJlbmRlcmVyKi8sIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmLCBJY29uKiwgRmlsZVVwbG9hZERlY29yYXRpb25zKSB7IHJldHVybiB0
cnVlOyB9CiAKICNpZiBFTkFCTEUoSU1BR0VfQ09OVFJPTFMpCi0gICAgdmlydHVhbCBJbnRTaXpl
IGltYWdlQ29udHJvbHNCdXR0b25TaXplKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0IHsgcmV0
dXJuIEludFNpemUoKTsgfQorICAgIHZpcnR1YWwgSW50U2l6ZSBpbWFnZUNvbnRyb2xzQnV0dG9u
U2l6ZShjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdCB7IHJldHVybiBJbnRTaXplKCk7IH0KICNl
bmRpZgogCiBwcm90ZWN0ZWQ6CkBAIC0yNjcsMTIyICsyNjcsMTIyIEBAIHByb3RlY3RlZDoKICNp
ZiAhVVNFKE5FV19USEVNRSkKICAgICAvLyBNZXRob2RzIGZvciBlYWNoIGFwcGVhcmFuY2UgdmFs
dWUuCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludENo
ZWNrYm94KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29u
c3QgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50
UmFkaW8oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdCB7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9u
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVy
biB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqKSBjb25zdCB7IH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50
SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGlu
QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludENo
ZWNrYm94RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpb0Rl
Y29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uRGVjb3JhdGlv
bnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveERlY29yYXRpb25zKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW9EZWNvcmF0aW9ucyhjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVy
biB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVs
ZERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRB
cmVhRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhRGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVM
aXN0RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0RGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQogCi0gICAgdmlydHVhbCBib29sIHBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCBib29sIHBhaW50U3F1YXJlQnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTcXVhcmVCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
dHJ1ZTsgfQogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1ldGVyKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdElucHV0
RmllbGRTcGVlY2hCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50SW5wdXRGaWVsZFNwZWVjaEJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbihjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjZW5kaWYKIAogICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFj
ayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVl
OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBh
aW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVt
YkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYkRlY29yYXRp
b25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBh
aW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRD
YW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0
aW9uUGFydChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lk
IGFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYU92ZXJsYXlQbGF5QnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9s
dW1lU2xpZGVyQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFW
b2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9s
dW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVJld2lu
ZEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUmV0dXJuVG9SZWFs
dGltZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVG9nZ2xlQ2xv
c2VkQ2FwdGlvbnNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUNv
bnRyb2xzQmFja2dyb3VuZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhQ3Vy
cmVudFRpbWUoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVRpbWVSZW1haW5p
bmcoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVT
bGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhRnVsbFNjcmVl
blZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbmFw
c2hvdHRlZFBsdWdpbk92ZXJsYXkoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YUZ1bGxzY3JlZW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYVBsYXlCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YU92ZXJsYXlQbGF5QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFNdXRlQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFTZWVrQmFja0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
ZGlhU2Vla0ZvcndhcmRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYVNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
ZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYVJld2luZEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvbihjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUNvbnRyb2xzQmFja2dyb3Vu
ZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhQ3VycmVudFRpbWUo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVRpbWVSZW1haW5pbmco
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxTY3JlZW5Wb2x1
bWVTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlh
RnVsbFNjcmVlblZvbHVtZVNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogI2lm
IEVOQUJMRShJTUFHRV9DT05UUk9MUykKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbWFnZUNvbnRy
b2xzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50SW1hZ2VDb250cm9sc0J1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKIHB1YmxpYzoKLSAgICB2b2lkIHVwZGF0ZUNv
bnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBDb250cm9sU3RhdGVz
KikgY29uc3Q7Ci0gICAgQ29udHJvbFN0YXRlczo6U3RhdGVzIGV4dHJhY3RDb250cm9sU3RhdGVz
Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc0FjdGl2
ZShjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLSAgICBib29sIGlzQ2hlY2tlZChjb25zdCBS
ZW5kZXJPYmplY3QqKSBjb25zdDsKLSAgICBib29sIGlzSW5kZXRlcm1pbmF0ZShjb25zdCBSZW5k
ZXJPYmplY3QqKSBjb25zdDsKLSAgICBib29sIGlzRW5hYmxlZChjb25zdCBSZW5kZXJPYmplY3Qq
KSBjb25zdDsKLSAgICBib29sIGlzRm9jdXNlZChjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsK
LSAgICBib29sIGlzUHJlc3NlZChjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLSAgICBib29s
IGlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0g
ICAgYm9vbCBpc0hvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBp
c1NwaW5VcEJ1dHRvblBhcnRIb3ZlcmVkKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwotICAg
IGJvb2wgaXNSZWFkT25seUNvbnRyb2woY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAg
Ym9vbCBpc0RlZmF1bHQoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisgICAgdm9pZCB1cGRh
dGVDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgQ29udHJvbFN0
YXRlcyopIGNvbnN0OworICAgIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBleHRyYWN0Q29udHJvbFN0
YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNB
Y3RpdmUoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7CisgICAgYm9vbCBpc0NoZWNrZWQoY29u
c3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7CisgICAgYm9vbCBpc0luZGV0ZXJtaW5hdGUoY29uc3Qg
UmVuZGVyT2JqZWN0JikgY29uc3Q7CisgICAgYm9vbCBpc0VuYWJsZWQoY29uc3QgUmVuZGVyT2Jq
ZWN0JikgY29uc3Q7CisgICAgYm9vbCBpc0ZvY3VzZWQoY29uc3QgUmVuZGVyT2JqZWN0JikgY29u
c3Q7CisgICAgYm9vbCBpc1ByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7CisgICAg
Ym9vbCBpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0
OworICAgIGJvb2wgaXNIb3ZlcmVkKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJv
b2wgaXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsK
KyAgICBib29sIGlzUmVhZE9ubHlDb250cm9sKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0Owor
ICAgIGJvb2wgaXNEZWZhdWx0KGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OwogCiBwcml2YXRl
OgogICAgIG11dGFibGUgQ29sb3IgbV9hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3I7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oCmluZGV4IDViOWQ4MTViODYz
MzkzZWFiY2I0N2ViY2ZhMmNmZTNkYjVhOWVhMmEuLmYzN2YzZjhjMzlmZGM1NTI5ODQwOTMxZWEy
NmFiNmY1ZjZmM2FlYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5oCkBAIC00OCwzNSArNDgsMzUgQEAgcHVibGljOgogICAgIHN0YXRpYyBDRlN0cmluZ1JlZiBj
b250ZW50U2l6ZUNhdGVnb3J5KCk7CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGludCBiYXNl
bGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0
eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29u
c3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICAvLyBNZXRo
b2RzIGZvciBlYWNoIGFwcGVhcmFuY2UgdmFsdWUuCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdENo
ZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94RGVjb3JhdGlvbnMoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiAgICAg
dmlydHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlv
RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvRGVjb3JhdGlvbnMoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHVzaEJ1
dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b25EZWNvcmF0aW9u
cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBib29sIHBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0
aW9ucyhSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIFJlbmRlck9iamVjdCogYnV0dG9uUmVu
ZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmLCBJY29uKiwgRmlsZVVwbG9h
ZERlY29yYXRpb25zKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRGaWxlVXBsb2Fk
SWNvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgaW5wdXRSZW5kZXJlciwgY29uc3Qg
UmVuZGVyT2JqZWN0JiBidXR0b25SZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYsIEljb24qLCBGaWxlVXBsb2FkRGVjb3JhdGlvbnMpIG92ZXJyaWRlOwogCi0gICAgdmly
dHVhbCBib29sIHBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBw
YWludFRleHRBcmVhRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVs
ZERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYURlY29y
YXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlk
ZXJUaHVtYkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYkRl
Y29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQogICAgIC8v
IFJldHVybnMgdGhlIHJlcGVhdCBpbnRlcnZhbCBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJv
Z3Jlc3MgYmFyLgpAQCAtODQsNyArODQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gUmV0dXJucyB0
aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KICAgICB2
aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dy
ZXNzKikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jh
cihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKQEAgLTkzLDcgKzkzLDcgQEAgcHJvdGVjdGVk
OgogI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBi
b29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIENv
bG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMTUsNyArMTE1LDcgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIH5SZW5kZXJUaGVtZUlPUygpIHsgfQogCiAgICAgY29uc3QgQ29sb3ImIHNoYWRv
d0NvbG9yKCkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IGFkZFJvdW5kZWRCb3JkZXJDbGlwKFJlbmRl
ck9iamVjdCogYm94LCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgRmxv
YXRSZWN0IGFkZFJvdW5kZWRCb3JkZXJDbGlwKGNvbnN0IFJlbmRlck9iamVjdCYgYm94LCBHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICBTdHJpbmcgbV9tZWRpYUNvbnRy
b2xzU2NyaXB0OwogICAgIFN0cmluZyBtX21lZGlhQ29udHJvbHNTdHlsZVNoZWV0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCmluZGV4IDI2ZjJmNTQwNjc3ZTgw
Yzc1MzMwYmZlOWMzNGRjZWVmMzRiNTc5MTEuLmU5ZWMyYmEyOWM4NjBmMWJmYTU1NTNlOTYyNWI1
ZmMwMWVkYzc4MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1Mu
bW0KQEAgLTMxNiwxMSArMzE2LDExIEBAIGNvbnN0IENvbG9yJiBSZW5kZXJUaGVtZUlPUzo6c2hh
ZG93Q29sb3IoKSBjb25zdAogICAgIHJldHVybiBjb2xvcjsKIH0KIAotRmxvYXRSZWN0IFJlbmRl
clRoZW1lSU9TOjphZGRSb3VuZGVkQm9yZGVyQ2xpcChSZW5kZXJPYmplY3QqIGJveCwgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQorRmxvYXRSZWN0IFJlbmRl
clRoZW1lSU9TOjphZGRSb3VuZGVkQm9yZGVyQ2xpcChjb25zdCBSZW5kZXJPYmplY3QmIGJveCwg
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIC8v
IFRvIGZpeCBpbm5lciBib3JkZXIgYmxlZWRpbmcgaXNzdWVzIDxyZGFyOi8vcHJvYmxlbS85ODEy
NTA3Piwgd2UgY2xpcCB0byB0aGUgb3V0ZXIgYm9yZGVyIGFuZCBhc3NlcnQgdGhhdAogICAgIC8v
IHRoZSBib3JkZXIgaXMgb3BhcXVlIG9yIHRyYW5zcGFyZW50LCB1bmxlc3Mgd2UncmUgY2hlY2tl
ZCBiZWNhdXNlIGNoZWNrZWQgcmFkaW8vY2hlY2tib3hlcyBzaG93IG5vIGJsZWVkaW5nLgotICAg
IFJlbmRlclN0eWxlJiBzdHlsZSA9IGJveC0+c3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSYgc3R5
bGUgPSBib3guc3R5bGUoKTsKICAgICBSb3VuZGVkUmVjdCBib3JkZXIgPSBpc0NoZWNrZWQoYm94
KSA/IHN0eWxlLmdldFJvdW5kZWRJbm5lckJvcmRlckZvcihyZWN0KSA6IHN0eWxlLmdldFJvdW5k
ZWRCb3JkZXJGb3IocmVjdCk7CiAKICAgICBpZiAoYm9yZGVyLmlzUm91bmRlZCgpKQpAQCAtMzU3
LDcgKzM1Nyw3IEBAIHN0YXRpYyBDR1BvaW50IHNob3J0ZW5lZChDR1BvaW50IHN0YXJ0LCBDR1Bv
aW50IGVuZCwgZmxvYXQgd2lkdGgpCiAgICAgcmV0dXJuIENHUG9pbnRNYWtlKHN0YXJ0LnggKyB4
ICogcmF0aW8sIHN0YXJ0LnkgKyB5ICogcmF0aW8pOwogfQogCi1ib29sIFJlbmRlclRoZW1lSU9T
OjpwYWludENoZWNrYm94RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBib3gsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRDaGVja2JveERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgYm94LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKICAg
ICBGbG9hdFJlY3QgY2xpcCA9IGFkZFJvdW5kZWRCb3JkZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNv
bnRleHQsIHJlY3QpOwpAQCAtNDA4LDE3ICs0MDgsMTcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6
cGFpbnRDaGVja2JveERlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludElu
Zm8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWludCBSZW5kZXJUaGVtZUlPUzo6YmFzZWxpbmVQ
b3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBjb25zdAoraW50IFJlbmRlclRo
ZW1lSU9TOjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNv
bnN0CiB7Ci0gICAgaWYgKCFyZW5kZXJlci0+aXNCb3goKSkKKyAgICBpZiAoIXJlbmRlcmVyLmlz
Qm94KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3QgUmVuZGVyQm94KiBib3ggPSB0
b1JlbmRlckJveChyZW5kZXJlcik7CisgICAgY29uc3QgUmVuZGVyQm94JiBib3ggPSAqdG9SZW5k
ZXJCb3goJnJlbmRlcmVyKTsKIAotICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09
IENoZWNrYm94UGFydCB8fCBib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkK
LSAgICAgICAgcmV0dXJuIGJveC0+bWFyZ2luVG9wKCkgKyBib3gtPmhlaWdodCgpIC0gMjsgLy8g
VGhlIGJhc2VsaW5lIGlzIDJweCB1cCBmcm9tIHRoZSBib3R0b20gb2YgdGhlIGNoZWNrYm94L3Jh
ZGlvIGluIEFwcEtpdC4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBNZW51
bGlzdFBhcnQpCi0gICAgICAgIHJldHVybiBib3gtPm1hcmdpblRvcCgpICsgYm94LT5oZWlnaHQo
KSAtIDU7IC8vIFRoaXMgaXMgdG8gbWF0Y2ggQXBwS2l0LiBUaGVyZSBtaWdodCBiZSBhIGJldHRl
ciB3YXkgdG8gY2FsY3VsYXRlIHRoaXMgdGhvdWdoLgorICAgIGlmIChib3guc3R5bGUoKS5hcHBl
YXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0IHx8IGJveC5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBS
YWRpb1BhcnQpCisgICAgICAgIHJldHVybiBib3gubWFyZ2luVG9wKCkgKyBib3guaGVpZ2h0KCkg
LSAyOyAvLyBUaGUgYmFzZWxpbmUgaXMgMnB4IHVwIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgY2hl
Y2tib3gvcmFkaW8gaW4gQXBwS2l0LgorICAgIGlmIChib3guc3R5bGUoKS5hcHBlYXJhbmNlKCkg
PT0gTWVudWxpc3RQYXJ0KQorICAgICAgICByZXR1cm4gYm94Lm1hcmdpblRvcCgpICsgYm94Lmhl
aWdodCgpIC0gNTsgLy8gVGhpcyBpcyB0byBtYXRjaCBBcHBLaXQuIFRoZXJlIG1pZ2h0IGJlIGEg
YmV0dGVyIHdheSB0byBjYWxjdWxhdGUgdGhpcyB0aG91Z2guCiAgICAgcmV0dXJuIFJlbmRlclRo
ZW1lOjpiYXNlbGluZVBvc2l0aW9uKGJveCk7CiB9CiAKQEAgLTQ0NSw3ICs0NDUsNyBAQCB2b2lk
IFJlbmRlclRoZW1lSU9TOjphZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbgogICAgIHN0eWxlLT5zZXRCb3JkZXJSYWRpdXMoSW50U2l6ZShs
ZW5ndGgudmFsdWUoKSAvIDIuMGYsIGxlbmd0aC52YWx1ZSgpIC8gMi4wZikpOwogfQogCi1ib29s
IFJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBib3gs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRSYWRpb0RlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYg
Ym94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250
ZXh0KTsKICAgICBGbG9hdFJlY3QgY2xpcCA9IGFkZFJvdW5kZWRCb3JkZXJDbGlwKGJveCwgcGFp
bnRJbmZvLmNvbnRleHQsIHJlY3QpOwpAQCAtNDczLDkgKzQ3Myw5IEBAIGJvb2wgUmVuZGVyVGhl
bWVJT1M6OnBhaW50UmFkaW9EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFp
bnRJbmZvJiBwCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lSU9TOjpw
YWludFRleHRGaWVsZERlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6
OnBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIFJlbmRl
clN0eWxlJiBzdHlsZSA9IGJveC0+c3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBi
b3guc3R5bGUoKTsKICAgICBJbnRQb2ludCBwb2ludChyZWN0LngoKSArIHN0eWxlLmJvcmRlckxl
ZnRXaWR0aCgpLCByZWN0LnkoKSArIHN0eWxlLmJvcmRlclRvcFdpZHRoKCkpOwogCiAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CkBA
IC00ODUsMTQgKzQ4NSwxNCBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFRleHRGaWVsZERl
Y29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZgogICAgIC8vIFRoaXMg
Z3JhZGllbnQgZ2V0cyBkcmF3biBibGFjayB3aGVuIHByaW50aW5nLgogICAgIC8vIERvIG5vdCBk
cmF3IHRoZSBncmFkaWVudCBpZiB0aGVyZSBpcyBubyB2aXNpYmxlIHRvcCBib3JkZXIuCiAgICAg
Ym9vbCB0b3BCb3JkZXJJc0ludmlzaWJsZSA9ICFzdHlsZS5oYXNCb3JkZXIoKSB8fCAhc3R5bGUu
Ym9yZGVyVG9wV2lkdGgoKSB8fCBzdHlsZS5ib3JkZXJUb3BJc1RyYW5zcGFyZW50KCk7Ci0gICAg
aWYgKCFib3gtPnZpZXcoKS5wcmludGluZygpICYmICF0b3BCb3JkZXJJc0ludmlzaWJsZSkKKyAg
ICBpZiAoIWJveC52aWV3KCkucHJpbnRpbmcoKSAmJiAhdG9wQm9yZGVySXNJbnZpc2libGUpCiAg
ICAgICAgIGRyYXdBeGlhbEdyYWRpZW50KHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSwgZ3JhZGllbnRXaXRoTmFtZShJbnNldEdyYWRpZW50KSwgcG9pbnQsIEZsb2F0UG9pbnQo
Q0dQb2ludE1ha2UocG9pbnQueCgpLCBwb2ludC55KCkgKyAzLjBmKSksIExpbmVhckludGVycG9s
YXRpb24pOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFp
bnRUZXh0QXJlYURlY29yYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRUZXh0QXJlYURlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgYm94LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1
cm4gcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhyZW5kZXJlciwgcGFpbnRJbmZvLCByZWN0KTsK
KyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhib3gsIHBhaW50SW5mbywgcmVj
dCk7CiB9CiAKIGNvbnN0IGludCBNZW51TGlzdE1pbkhlaWdodCA9IDE1OwpAQCAtNTgyLDkgKzU4
Miw5IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRo
ZW1lSU9TOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBib3gs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRl
ck9iamVjdCYgYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnN0eWxlKCk7CisgICAgUmVu
ZGVyU3R5bGUmIHN0eWxlID0gYm94LnN0eWxlKCk7CiAgICAgZmxvYXQgYm9yZGVyVG9wV2lkdGgg
PSBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpOwogICAgIEZsb2F0UmVjdCBjbGlwKHJlY3QueCgpICsg
c3R5bGUuYm9yZGVyTGVmdFdpZHRoKCksIHJlY3QueSgpICsgc3R5bGUuYm9yZGVyVG9wV2lkdGgo
KSwgcmVjdC53aWR0aCgpIC0gc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCkgLSBzdHlsZS5ib3JkZXJS
aWdodFdpZHRoKCksIHJlY3QuaGVpZ2h0KCkgLSBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpIC0gc3R5
bGUuYm9yZGVyQm90dG9tV2lkdGgoKSk7CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBh
aW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKQEAgLTYxMiw3ICs2MTIsNyBAQCBi
b29sIFJlbmRlclRoZW1lSU9TOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVy
T2JqZWN0KiBib3gsIGNvbnN0IFBhaQogCiAgICAgZmxvYXQgc2VwYXJhdG9yID0gY2xpcC5tYXhY
KCkgLSBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdodDsKIAotICAgIGJveC0+ZHJhd0xpbmVGb3JC
b3hTaWRlKHBhaW50SW5mby5jb250ZXh0LCBzZXBhcmF0b3IgLSBib3JkZXJUb3BXaWR0aCwgY2xp
cC55KCksIHNlcGFyYXRvciwgY2xpcC5tYXhZKCksIEJTUmlnaHQsIHN0eWxlLnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yKSwgc3R5bGUuYm9yZGVyVG9wU3R5
bGUoKSwgMCwgMCk7CisgICAgYm94LmRyYXdMaW5lRm9yQm94U2lkZShwYWludEluZm8uY29udGV4
dCwgc2VwYXJhdG9yIC0gYm9yZGVyVG9wV2lkdGgsIGNsaXAueSgpLCBzZXBhcmF0b3IsIGNsaXAu
bWF4WSgpLCBCU1JpZ2h0LCBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlC
b3JkZXJUb3BDb2xvciksIHN0eWxlLmJvcmRlclRvcFN0eWxlKCksIDAsIDApOwogCiAgICAgRmxv
YXRSZWN0IGJ1dHRvbkNsaXAoc2VwYXJhdG9yIC0gYWRqdXN0VG9wLCBjbGlwLnkoKSAtIGFkanVz
dFRvcCwgTWVudUxpc3RCdXR0b25QYWRkaW5nUmlnaHQgKyBhZGp1c3RUb3AgKyBhZGp1c3RSaWdo
dCwgY2xpcC5oZWlnaHQoKSArIGFkanVzdFRvcCArIGFkanVzdEJvdHRvbSk7CiAKQEAgLTYzMSw3
ICs2MzEsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3Jh
dGlvbnMoUmVuZGVyT2JqZWN0KiBib3gsIGNvbnN0IFBhaQogCiAgICAgLy8gUGFpbnQgSW5kaWNh
dG9ycy4KIAotICAgIGlmIChib3gtPmlzTWVudUxpc3QoKSAmJiB0b0hUTUxTZWxlY3RFbGVtZW50
KGJveC0+bm9kZSgpKS0+bXVsdGlwbGUoKSkgeworICAgIGlmIChib3guaXNNZW51TGlzdCgpICYm
IHRvSFRNTFNlbGVjdEVsZW1lbnQoYm94Lm5vZGUoKSktPm11bHRpcGxlKCkpIHsKICAgICAgICAg
aW50IHNpemUgPSAyOwogICAgICAgICBpbnQgY291bnQgPSAzOwogICAgICAgICBpbnQgcGFkZGlu
ZyA9IDM7CkBAIC02ODQsMTAgKzY4NCwxMCBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RT
bGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZQogICAg
IHN0eWxlLT5zZXRCb3JkZXJSYWRpdXMoTGVuZ3RoU2l6ZShyYWRpdXNXaWR0aCwgcmFkaXVzSGVp
Z2h0KSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVy
T2JqZWN0KiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQorYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJP
YmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7CiAgICAgSW50UmVjdCB0cmFja0NsaXAgPSByZWN0OwotICAgIFJlbmRlclN0eWxlJiBz
dHlsZSA9IGJveC0+c3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3guc3R5bGUo
KTsKIAogICAgIGJvb2wgaXNIb3Jpem9udGFsID0gdHJ1ZTsKICAgICBzd2l0Y2ggKHN0eWxlLmFw
cGVhcmFuY2UoKSkgewpAQCAtNzc5LDcgKzc3OSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OmFk
anVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAog
ICAgIH0KIH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUaHVtYkRlY29yYXRp
b25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xpZGVyVGh1bWJEZWNv
cmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAgICAgRmxvYXRSZWN0IGNsaXAgPSBh
ZGRSb3VuZGVkQm9yZGVyQ2xpcChib3gsIHBhaW50SW5mby5jb250ZXh0LCByZWN0KTsKQEAgLTgw
Nyw5ICs4MDcsOSBAQCBkb3VibGUgUmVuZGVyVGhlbWVJT1M6OmFuaW1hdGlvbkR1cmF0aW9uRm9y
UHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCi1i
b29sIFJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9v
bCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKLSAgICBpZiAoIXJlbmRlcmVyLT5pc1Byb2dyZXNzKCkpCisgICAgaWYgKCFyZW5kZXJlci5p
c1Byb2dyZXNzKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY29uc3QgaW50IHByb2dy
ZXNzQmFySGVpZ2h0ID0gOTsKQEAgLTgzNiw3ICs4MzYsNyBAQCBib29sIFJlbmRlclRoZW1lSU9T
OjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5m
byYgcAogICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBDb2xvcigweDhkLCAw
eDhkLCAweDhkKSk7CiAgICAgY29udGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoc3Ryb2tlR3JhZGll
bnQucmVsZWFzZSgpKTsKIAotICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IHJlbmRlcmVyLT5z
dHlsZSgpLmNvbG9yU3BhY2UoKTsKKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSByZW5kZXJl
ci5zdHlsZSgpLmNvbG9yU3BhY2UoKTsKICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3Io
MjU1LCAyNTUsIDI1NSksIGNvbG9yU3BhY2UpOwogCiAgICAgUGF0aCB0cmFja1BhdGg7CkBAIC04
NTcsMTAgKzg1NywxMCBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcAogCiAgICAgY29udGV4dC0+
ZmlsbFJlY3QoRmxvYXRSZWN0KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uLCBy
ZWN0LndpZHRoKCksIHVwcGVyR3JhZGllbnRIZWlnaHQpKTsKIAotICAgIFJlbmRlclByb2dyZXNz
KiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3MocmVuZGVyZXIpOwotICAgIGlmIChy
ZW5kZXJQcm9ncmVzcy0+aXNEZXRlcm1pbmF0ZSgpKSB7CisgICAgY29uc3QgUmVuZGVyUHJvZ3Jl
c3MmIHJlbmRlclByb2dyZXNzID0gKnRvUmVuZGVyUHJvZ3Jlc3MoJnJlbmRlcmVyKTsKKyAgICBp
ZiAocmVuZGVyUHJvZ3Jlc3MuaXNEZXRlcm1pbmF0ZSgpKSB7CiAgICAgICAgIC8vIDIpIERyYXcg
dGhlIHByb2dyZXNzIGJhci4KLSAgICAgICAgZG91YmxlIHBvc2l0aW9uID0gY2xhbXBUbyhyZW5k
ZXJQcm9ncmVzcy0+cG9zaXRpb24oKSwgMC4wLCAxLjApOworICAgICAgICBkb3VibGUgcG9zaXRp
b24gPSBjbGFtcFRvKHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCksIDAuMCwgMS4wKTsKICAgICAg
ICAgZG91YmxlIGJhcldpZHRoID0gcG9zaXRpb24gKiByZWN0LndpZHRoKCk7CiAgICAgICAgIFJl
ZlB0cjxHcmFkaWVudD4gYmFyR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQo
cmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJl
Y3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAx
KSk7CiAgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBDb2xvcigxOTUsIDIx
NywgMjQ3KSk7CkBAIC04NzksNyArODc5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQ
cm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHAKIAog
ICAgICAgICBQYXRoIGJhclBhdGg7CiAgICAgICAgIGludCBsZWZ0ID0gcmVjdC54KCk7Ci0gICAg
ICAgIGlmICghcmVuZGVyUHJvZ3Jlc3MtPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
KQorICAgICAgICBpZiAoIXJlbmRlclByb2dyZXNzLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpKQogICAgICAgICAgICAgbGVmdCA9IHJlY3QubWF4WCgpIC0gYmFyV2lkdGg7CiAgICAg
ICAgIEZsb2F0UmVjdCBiYXJSZWN0KGxlZnQgKyAwLjI1LCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0
aW9uICsgMC4yNSwgc3RkOjptYXgoYmFyV2lkdGggLSAwLjUsIDAuMCksIHByb2dyZXNzQmFySGVp
Z2h0IC0gMC41KTsKICAgICAgICAgYmFyUGF0aC5hZGRSb3VuZGVkUmVjdChiYXJSZWN0LCByb3Vu
ZGVkQ29ybmVyUmFkaXVzKTsKQEAgLTkyMSw3ICs5MjEsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9T
OjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJT
dHlsZQogICAgIGFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKCpzdHlsZSwgYm94KTsKIH0KIAotYm9v
bCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKFJlbmRlck9iamVj
dCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
K2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhjb25zdCBS
ZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMoYm94LCBw
YWludEluZm8sIHJlY3QpOwogfQpAQCAtOTQ3LDE4ICs5NDcsMTggQEAgdm9pZCBSZW5kZXJUaGVt
ZUlPUzo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHkKICAgICBhZGp1c3RSb3VuZEJvcmRlclJhZGl1cygqc3R5bGUsIGJveCk7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0
KiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
Ym9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJP
YmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7CiAgICAgcmV0dXJuIHBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKGJveCwgcGFpbnRJ
bmZvLCByZWN0KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQdXNoQnV0dG9uRGVj
b3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQdXNoQnV0dG9u
RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAgIEZsb2F0UmVjdCBjbGlw
ID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8uY29udGV4dCwgcmVjdCk7CiAK
ICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOwotICAgIGlmIChib3gtPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5pc0RhcmsoKSkKKyAgICBpZiAoYm94LnN0eWxlKCku
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5pc0Rhcmso
KSkKICAgICAgICAgZHJhd0F4aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1l
KENvbnZleEdyYWRpZW50KSwgY2xpcC5sb2NhdGlvbigpLCBGbG9hdFBvaW50KGNsaXAueCgpLCBj
bGlwLm1heFkoKSksIExpbmVhckludGVycG9sYXRpb24pOwogICAgIGVsc2UgewogICAgICAgICBk
cmF3QXhpYWxHcmFkaWVudChjZ0NvbnRleHQsIGdyYWRpZW50V2l0aE5hbWUoU2hhZGVHcmFkaWVu
dCksIGNsaXAubG9jYXRpb24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5tYXhZKCkpLCBM
aW5lYXJJbnRlcnBvbGF0aW9uKTsKQEAgLTk4MiwxMiArOTgyLDEyIEBAIGNvbnN0IGludCBrVGh1
bWJuYWlsQm9yZGVyQ29ybmVyUmFkaXVzID0gMTsKIGNvbnN0IGludCBrVmlzaWJsZUJhY2tncm91
bmRJbWFnZVdpZHRoID0gMTsKIGNvbnN0IGludCBrTXVsdGlwbGVUaHVtYm5haWxTaHJpbmtTaXpl
ID0gMjsKIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRGaWxlVXBsb2FkSWNvbkRlY29yYXRp
b25zKFJlbmRlck9iamVjdCosIFJlbmRlck9iamVjdCogYnV0dG9uUmVuZGVyZXIsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBJY29uKiBpY29uLCBGaWxl
VXBsb2FkRGVjb3JhdGlvbnMgZmlsZVVwbG9hZERlY29yYXRpb25zKQorYm9vbCBSZW5kZXJUaGVt
ZUlPUzo6cGFpbnRGaWxlVXBsb2FkSWNvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFJlbmRlck9iamVjdCYgYnV0dG9uUmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBJY29uKiBpY29uLCBGaWxlVXBsb2FkRGVjb3Jh
dGlvbnMgZmlsZVVwbG9hZERlY29yYXRpb25zKQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogCiAgICAgSW50U2l6ZSBjb3Ju
ZXJTaXplKGtUaHVtYm5haWxCb3JkZXJDb3JuZXJSYWRpdXMsIGtUaHVtYm5haWxCb3JkZXJDb3Ju
ZXJSYWRpdXMpOwotICAgIENvbG9yIHBpY3R1cmVGcmFtZUNvbG9yID0gYnV0dG9uUmVuZGVyZXIg
PyBidXR0b25SZW5kZXJlci0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlCb3JkZXJUb3BDb2xvcikgOiBDb2xvcig3Ni4wZiwgNzYuMGYsIDc2LjBmKTsKKyAgICBDb2xv
ciBwaWN0dXJlRnJhbWVDb2xvciA9IGJ1dHRvblJlbmRlcmVyLnN0eWxlKCkudmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpOwogCiAgICAgSW50UmVjdCB0aHVt
Ym5haWxQaWN0dXJlRnJhbWVSZWN0ID0gcmVjdDsKICAgICBJbnRSZWN0IHRodW1ibmFpbFJlY3Qg
PSByZWN0OwpAQCAtMTAwMCw3ICsxMDAwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRG
aWxlVXBsb2FkSWNvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIFJlbmRlck9iamVjdCoKICAg
ICAgICAgdGh1bWJuYWlsUmVjdC5jb250cmFjdChrTXVsdGlwbGVUaHVtYm5haWxTaHJpbmtTaXpl
LCBrTXVsdGlwbGVUaHVtYm5haWxTaHJpbmtTaXplKTsKIAogICAgICAgICAvLyBCYWNrZ3JvdW5k
IHBpY3R1cmUgZnJhbWUgYW5kIHNpbXBsZSBiYWNrZ3JvdW5kIGljb24gd2l0aCBhIGdyYWRpZW50
IG1hdGNoaW5nIHRoZSBidXR0b24uCi0gICAgICAgIENvbG9yIGJhY2tncm91bmRJbWFnZUNvbG9y
ID0gYnV0dG9uUmVuZGVyZXIgPyBDb2xvcihidXR0b25SZW5kZXJlci0+c3R5bGUoKS52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLnJnYigpKSA6IENvbG9y
KDIwNi4wZiwgMjA2LjBmLCAyMDYuMGYpOworICAgICAgICBDb2xvciBiYWNrZ3JvdW5kSW1hZ2VD
b2xvciA9IENvbG9yKGJ1dHRvblJlbmRlcmVyLnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5yZ2IoKSk7CiAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdCh0aHVtYm5haWxQaWN0dXJl
RnJhbWVSZWN0LCBjb3JuZXJTaXplLCBjb3JuZXJTaXplLCBjb3JuZXJTaXplLCBjb3JuZXJTaXpl
KSwgcGljdHVyZUZyYW1lQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAgICBwYWlu
dEluZm8uY29udGV4dC0+ZmlsbFJlY3QodGh1bWJuYWlsUmVjdCwgYmFja2dyb3VuZEltYWdlQ29s
b3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5oCmluZGV4IDBmYmU2MTFhMmJjZjg0M2MyMDZhZTlmZmMxMDVk
MTVmYmM2MGNhYzQuLjJiMTlkNDdkNjk1YzM5ZDJmODg3NjllMzI0MThjZjQzYmJlMjJhNmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCkBAIC00NCwxMiArNDQs
MTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUo
KTsKIAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0
aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgotICAgIHZpcnR1YWwgYm9vbCBj
b250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7
CiAKICAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5n
IGlzIHN1cHBvcnRlZCBhdCBhbGwuCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRp
bnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFJl
cGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCosIEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgSW50UmVj
dCYpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBS
ZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBD
b2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKIApAQCAtODIsMTMgKzgyLDEzIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSop
IGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRl
clN0eWxlKikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRv
cihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiAg
ICAgdmlydHVhbCBib29sIHBvcHNNZW51QnlBcnJvd0tleXMoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKICAgICB2aXJ0dWFsIElu
dFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwgY29uc3QgSW50UmVj
dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1ldGVyKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZXRlcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTWV0ZXIoQ29udHJvbFBhcnQp
IGNvbnN0OwogI2VuZGlmCiAKQEAgLTk3LDE0ICs5NywxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9n
cmVzcyopIGNvbnN0OwogICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRp
b24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCiAgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVy
YXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OwotICAgIHZpcnR1YWwg
SW50UmVjdCBwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29u
c3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgSW50UmVjdCBwcm9ncmVz
c0JhclJlY3RGb3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgSW50UmVjdCYpIGNv
bnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9yKENT
U1ZhbHVlSUQpIGNvbnN0OwogICAgIC8vIENvbnRyb2xzIGNvbG9yIHZhbHVlcyByZXR1cm5lZCBm
cm9tIHBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKS4gc3lzdGVtQ29sb3IoKSB3aWxsIGJlIHVzZWQg
d2hlbiBmYWxzZS4KICAgICB2aXJ0dWFsIGJvb2wgdXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3Io
KSBjb25zdDsKICAgICAvLyBBIHZpZXcgYXNzb2NpYXRlZCB0byB0aGUgY29udGFpbmVkIGRvY3Vt
ZW50LiBTdWJjbGFzc2VzIG1heSBub3QgaGF2ZSBzdWNoIGEgdmlldyBhbmQgcmV0dXJuIGEgZmFr
ZS4KLSAgICBOU1ZpZXcqIGRvY3VtZW50Vmlld0ZvcihSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAg
ICBOU1ZpZXcqIGRvY3VtZW50Vmlld0Zvcihjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKIAog
CiBwcm90ZWN0ZWQ6CkBAIC0xMjMsNDMgKzEyMyw0MyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3JzKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29s
IHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdmlydHVh
bCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBi
b29sIHBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
bnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
IAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQ
cm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJU
cmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlk
ZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZp
ZWxkRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBh
cnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25Q
YXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKIAogI2lmIEVOQUJMRShWSURFTykKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHND
bG9zZWRDYXB0aW9uaW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTY3LDE0ICsxNjcs
MTQgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFNob3dQbGFjZWhvbGRl
cldoZW5Gb2N1c2VkKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbmFwc2hvdHRl
ZFBsdWdpbk92ZXJsYXkoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3Qg
RmlsZUxpc3QqLCBjb25zdCBGb250JiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxv
d2VkKSBjb25zdCBvdmVycmlkZTsKIAogICAgIEludFJlY3QgaW5mbGF0ZVJlY3QoY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFNpemUmLCBjb25zdCBpbnQqIG1hcmdpbnMsIGZsb2F0IHpvb21MZXZl
bCA9IDEuMGYpIGNvbnN0OwogCi0gICAgRmxvYXRSZWN0IGNvbnZlcnRUb1BhaW50aW5nUmVjdChj
b25zdCBSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFy
dFJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVjdCYpIGNv
bnN0OworICAgIEZsb2F0UmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QmIHBhcnRSZW5kZXJlciwgY29u
c3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmKSBjb25zdDsKIAogICAgIC8v
IEdldCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgZm9udC4gVXNlZCBieSBzb21lIG9m
IHRoZSBjb250cm9scyAobGlrZSBidXR0b25zKS4KICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xT
aXplRm9yRm9udChSZW5kZXJTdHlsZSopIGNvbnN0OwpAQCAtMTg1LDI2ICsxODUsMjYgQEAgcHJp
dmF0ZToKICAgICBJbnRTaXplIHNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlKiwgY29uc3Qg
SW50U2l6ZSogc2l6ZXMpIGNvbnN0OwogICAgIHZvaWQgc2V0Rm9udEZyb21Db250cm9sU2l6ZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBOU0NvbnRyb2xTaXplKSBjb25zdDsKIAotICAg
IHZvaWQgdXBkYXRlQ2hlY2tlZFN0YXRlKE5TQ2VsbCosIGNvbnN0IFJlbmRlck9iamVjdCopOwot
ICAgIHZvaWQgdXBkYXRlRW5hYmxlZFN0YXRlKE5TQ2VsbCosIGNvbnN0IFJlbmRlck9iamVjdCop
OwotICAgIHZvaWQgdXBkYXRlRm9jdXNlZFN0YXRlKE5TQ2VsbCosIGNvbnN0IFJlbmRlck9iamVj
dCopOwotICAgIHZvaWQgdXBkYXRlUHJlc3NlZFN0YXRlKE5TQ2VsbCosIGNvbnN0IFJlbmRlck9i
amVjdCopOworICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFN0YXRlKE5TQ2VsbCosIGNvbnN0IFJlbmRl
ck9iamVjdCYpOworICAgIHZvaWQgdXBkYXRlRW5hYmxlZFN0YXRlKE5TQ2VsbCosIGNvbnN0IFJl
bmRlck9iamVjdCYpOworICAgIHZvaWQgdXBkYXRlRm9jdXNlZFN0YXRlKE5TQ2VsbCosIGNvbnN0
IFJlbmRlck9iamVjdCYpOworICAgIHZvaWQgdXBkYXRlUHJlc3NlZFN0YXRlKE5TQ2VsbCosIGNv
bnN0IFJlbmRlck9iamVjdCYpOwogICAgIC8vIEFuIG9wdGlvbmFsIGhvb2sgZm9yIHN1YmNsYXNz
ZXMgdG8gdXBkYXRlIHRoZSBjb250cm9sIHRpbnQgb2YgTlNDZWxsLgotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVBY3RpdmVTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQWN0aXZlU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2Jq
ZWN0JikgeyB9CiAKICAgICAvLyBIZWxwZXJzIGZvciBhZGp1c3RpbmcgYXBwZWFyYW5jZSBhbmQg
Zm9yIHBhaW50aW5nCiAKLSAgICB2b2lkIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKGNvbnN0IFJl
bmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHNldFBvcHVwQnV0dG9uQ2Vs
bFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJlY3QmKTsKICAgICBjb25zdCBJ
bnRTaXplKiBwb3B1cEJ1dHRvblNpemVzKCkgY29uc3Q7CiAgICAgY29uc3QgaW50KiBwb3B1cEJ1
dHRvbk1hcmdpbnMoKSBjb25zdDsKICAgICBjb25zdCBpbnQqIHBvcHVwQnV0dG9uUGFkZGluZyhO
U0NvbnRyb2xTaXplKSBjb25zdDsKLSAgICB2b2lkIHBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVu
dHMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAg
IHZvaWQgcGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgY29uc3QgSW50U2l6ZSogbWVu
dUxpc3RTaXplcygpIGNvbnN0OwogCiAgICAgY29uc3QgSW50U2l6ZSogc2VhcmNoRmllbGRTaXpl
cygpIGNvbnN0OwogICAgIGNvbnN0IEludFNpemUqIGNhbmNlbEJ1dHRvblNpemVzKCkgY29uc3Q7
CiAgICAgY29uc3QgSW50U2l6ZSogcmVzdWx0c0J1dHRvblNpemVzKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRTZWFyY2hDZWxsU3RhdGUoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYpOworICAg
IHZvaWQgc2V0U2VhcmNoQ2VsbFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJl
Y3QmKTsKICAgICB2b2lkIHNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0Owog
CiAgICAgTlNQb3BVcEJ1dHRvbkNlbGwgKnBvcHVwQnV0dG9uKCkgY29uc3Q7CkBAIC0yMjYsOCAr
MjI2LDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgRU5BQkxFKElNQUdFX0NPTlRST0xTKQot
ICAgIHZpcnR1YWwgYm9vbCBwYWludEltYWdlQ29udHJvbHNCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
SW50U2l6ZSBpbWFnZUNvbnRyb2xzQnV0dG9uU2l6ZShjb25zdCBSZW5kZXJPYmplY3QqKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbWFnZUNvbnRyb2xzQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIEludFNpemUgaW1hZ2VDb250cm9sc0J1dHRvblNpemUoY29uc3Qg
Y29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgTlNTZXJ2aWNlc1JvbGxv
dmVyQnV0dG9uQ2VsbCAqc2VydmljZXNSb2xsb3ZlckJ1dHRvbkNlbGwoKSBjb25zdDsKICNlbmRp
ZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXggMjU4
YzdhZTJiMmZiYWRiMjUwYjFiNDQ4ZTQwODYyYTk5ZWMwNjgwYy4uY2QwZTc5MTQ4MDhlMmVhMjZl
ZmRlYzlmMTQ4MTUzNDBlYjU5ZWViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZU1hYy5tbQpAQCAtMjE3LDEwICsyMTcsMTAgQEAgUmVuZGVyVGhlbWVNYWM6On5SZW5k
ZXJUaGVtZU1hYygpCiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBy
ZW1vdmVPYnNlcnZlcjptX25vdGlmaWNhdGlvbk9ic2VydmVyLmdldCgpXTsKIH0KIAotTlNWaWV3
KiBSZW5kZXJUaGVtZU1hYzo6ZG9jdW1lbnRWaWV3Rm9yKFJlbmRlck9iamVjdCogbykgY29uc3QK
K05TVmlldyogUmVuZGVyVGhlbWVNYWM6OmRvY3VtZW50Vmlld0Zvcihjb25zdCBSZW5kZXJPYmpl
Y3QmIG8pIGNvbnN0CiB7CiAgICAgQ29udHJvbFN0YXRlcyBzdGF0ZXMoZXh0cmFjdENvbnRyb2xT
dGF0ZXNGb3JSZW5kZXJlcihvKSk7Ci0gICAgcmV0dXJuIFRoZW1lTWFjOjplbnN1cmVkVmlldygm
by0+dmlldygpLmZyYW1lVmlldygpLCAmc3RhdGVzKTsKKyAgICByZXR1cm4gVGhlbWVNYWM6OmVu
c3VyZWRWaWV3KCZvLnZpZXcoKS5mcmFtZVZpZXcoKSwgJnN0YXRlcyk7CiB9CiAKICNpZiBFTkFC
TEUoVklERU8pCkBAIC02MDIsOSArNjAyLDkgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6aXNDb250
cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYKICAg
ICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBiYWNr
Z3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIG8sIEludFJlY3QmIHIpCit2b2lkIFJl
bmRlclRoZW1lTWFjOjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QmIG8sIElu
dFJlY3QmIHIpCiB7Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IG8tPnN0eWxlKCkuYXBwZWFyYW5j
ZSgpOworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvLnN0eWxlKCkuYXBwZWFyYW5jZSgpOwogCiAj
aWYgVVNFKE5FV19USEVNRSkKICAgICBzd2l0Y2ggKHBhcnQpIHsKQEAgLTYyMSw3ICs2MjEsNyBA
QCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmpl
Y3QqIG8sIEludFJlY3QmIHIpCiAgICAgfQogI2VuZGlmCiAKLSAgICBmbG9hdCB6b29tTGV2ZWwg
PSBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLnN0
eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgaWYgKHBhcnQgPT0gTWVudWxpc3RQYXJ0KSB7
CiAgICAgICAgIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKG8sIHIpOwpAQCAtNjUwLDIwICs2NTAs
MjAgQEAgSW50UmVjdCBSZW5kZXJUaGVtZU1hYzo6aW5mbGF0ZVJlY3QoY29uc3QgSW50UmVjdCYg
ciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1G
bG9hdFJlY3QgUmVuZGVyVGhlbWVNYWM6OmNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5k
ZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVy
LCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVjdCYgcikgY29uc3QKK0Zs
b2F0UmVjdCBSZW5kZXJUaGVtZU1hYzo6Y29udmVydFRvUGFpbnRpbmdSZWN0KGNvbnN0IFJlbmRl
ck9iamVjdCYgaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0JiBwYXJ0UmVuZGVyZXIs
IGNvbnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0JiByKSBjb25zdAogewog
ICAgIEZsb2F0UmVjdCBwYXJ0UmVjdChpbnB1dFJlY3QpOwogCiAgICAgLy8gQ29tcHV0ZSBhbiBv
ZmZzZXQgYmV0d2VlbiB0aGUgcGFydCByZW5kZXJlciBhbmQgdGhlIGlucHV0IHJlbmRlcmVyCiAg
ICAgRmxvYXRTaXplIG9mZnNldEZyb21JbnB1dFJlbmRlcmVyOwotICAgIGNvbnN0IFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBwYXJ0UmVuZGVyZXI7Ci0gICAgd2hpbGUgKHJlbmRlcmVyICYmIHJl
bmRlcmVyICE9IGlucHV0UmVuZGVyZXIpIHsKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gJnBhcnRSZW5kZXJlcjsKKyAgICB3aGlsZSAocmVuZGVyZXIgJiYgcmVuZGVyZXIgIT0g
JmlucHV0UmVuZGVyZXIpIHsKICAgICAgICAgUmVuZGVyRWxlbWVudCogY29udGFpbmluZ1JlbmRl
cmVyID0gcmVuZGVyZXItPmNvbnRhaW5lcigpOwogICAgICAgICBvZmZzZXRGcm9tSW5wdXRSZW5k
ZXJlciAtPSByb3VuZGVkSW50U2l6ZShyZW5kZXJlci0+b2Zmc2V0RnJvbUNvbnRhaW5lcihjb250
YWluaW5nUmVuZGVyZXIsIExheW91dFBvaW50KCkpKTsKICAgICAgICAgcmVuZGVyZXIgPSBjb250
YWluaW5nUmVuZGVyZXI7CiAgICAgfQogICAgIC8vIElmIHRoZSBpbnB1dCByZW5kZXJlciB3YXMg
bm90IGEgY29udGFpbmVyLCBzb21ldGhpbmcgd2VudCB3cm9uZwotICAgIEFTU0VSVChyZW5kZXJl
ciA9PSBpbnB1dFJlbmRlcmVyKTsKKyAgICBBU1NFUlQocmVuZGVyZXIgPT0gJmlucHV0UmVuZGVy
ZXIpOwogICAgIC8vIE1vdmUgdGhlIHJlY3QgaW50byBwYXJ0UmVuZGVyZXIncyBjb29yZHMKICAg
ICBwYXJ0UmVjdC5tb3ZlKG9mZnNldEZyb21JbnB1dFJlbmRlcmVyKTsKICAgICAvLyBBY2NvdW50
IGZvciB0aGUgbG9jYWwgZHJhd2luZyBvZmZzZXQgKHR4LCB0eSkKQEAgLTY3Miw3ICs2NzIsNyBA
QCBGbG9hdFJlY3QgUmVuZGVyVGhlbWVNYWM6OmNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBS
ZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZQogICAgIHJldHVybiBwYXJ0UmVjdDsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlQ2hlY2tlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3Qg
UmVuZGVyT2JqZWN0KiBvKQordm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlQ2hlY2tlZFN0YXRl
KE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0JiBvKQogewogICAgIGJvb2wgb2xkSW5k
ZXRlcm1pbmF0ZSA9IFtjZWxsIHN0YXRlXSA9PSBOU01peGVkU3RhdGU7CiAgICAgYm9vbCBpbmRl
dGVybWluYXRlID0gaXNJbmRldGVybWluYXRlKG8pOwpAQCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQg
UmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJl
bmRlck9iamVjdCogbykKICAgICAgICAgW2NlbGwgc2V0U3RhdGU6Y2hlY2tlZCA/IE5TT25TdGF0
ZSA6IE5TT2ZmU3RhdGVdOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVFbmFibGVk
U3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCit2b2lkIFJlbmRlclRo
ZW1lTWFjOjp1cGRhdGVFbmFibGVkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmpl
Y3QmIG8pCiB7CiAgICAgYm9vbCBvbGRFbmFibGVkID0gW2NlbGwgaXNFbmFibGVkXTsKICAgICBi
b29sIGVuYWJsZWQgPSBpc0VuYWJsZWQobyk7CkBAIC02OTYsMjMgKzY5NiwyMyBAQCB2b2lkIFJl
bmRlclRoZW1lTWFjOjp1cGRhdGVFbmFibGVkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5k
ZXJPYmplY3QqIG8pCiAgICAgICAgIFtjZWxsIHNldEVuYWJsZWQ6ZW5hYmxlZF07CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUZvY3VzZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0
IFJlbmRlck9iamVjdCogbykKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUZvY3VzZWRTdGF0
ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJlbmRlck9iamVjdCYgbykKIHsKICAgICBib29sIG9sZEZv
Y3VzZWQgPSBbY2VsbCBzaG93c0ZpcnN0UmVzcG9uZGVyXTsKLSAgICBib29sIGZvY3VzZWQgPSBp
c0ZvY3VzZWQobykgJiYgby0+c3R5bGUoKS5vdXRsaW5lU3R5bGVJc0F1dG8oKTsKKyAgICBib29s
IGZvY3VzZWQgPSBpc0ZvY3VzZWQobykgJiYgby5zdHlsZSgpLm91dGxpbmVTdHlsZUlzQXV0bygp
OwogICAgIGlmIChmb2N1c2VkICE9IG9sZEZvY3VzZWQpCiAgICAgICAgIFtjZWxsIHNldFNob3dz
Rmlyc3RSZXNwb25kZXI6Zm9jdXNlZF07CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0
ZVByZXNzZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJlbmRlck9iamVjdCogbykKK3ZvaWQg
UmVuZGVyVGhlbWVNYWM6OnVwZGF0ZVByZXNzZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJl
bmRlck9iamVjdCYgbykKIHsKICAgICBib29sIG9sZFByZXNzZWQgPSBbY2VsbCBpc0hpZ2hsaWdo
dGVkXTsKLSAgICBib29sIHByZXNzZWQgPSBvLT5ub2RlKCkgJiYgby0+bm9kZSgpLT5pc0VsZW1l
bnROb2RlKCkgJiYgdG9FbGVtZW50KG8tPm5vZGUoKSktPmFjdGl2ZSgpOworICAgIGJvb2wgcHJl
c3NlZCA9IG8ubm9kZSgpICYmIG8ubm9kZSgpLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50
KG8ubm9kZSgpKS0+YWN0aXZlKCk7CiAgICAgaWYgKHByZXNzZWQgIT0gb2xkUHJlc3NlZCkKICAg
ICAgICAgW2NlbGwgc2V0SGlnaGxpZ2h0ZWQ6cHJlc3NlZF07CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVNYWM6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QK
K2Jvb2wgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9i
amVjdCYgbykgY29uc3QKIHsKICAgICAvLyBBbiBhbHRlcm5hdGUgd2F5IHRvIGltcGxlbWVudCB0
aGlzIHdvdWxkIGJlIHRvIGdldCB0aGUgYXBwcm9wcmlhdGUgY2VsbCBvYmplY3QKICAgICAvLyBh
bmQgY2FsbCB0aGUgcHJpdmF0ZSBfbmVlZFJlZHJhd09uV2luZG93Q2hhbmdlZEtleVN0YXRlIG1l
dGhvZC4gQW4gYWR2YW50YWdlIG9mCkBAIC03MjMsNyArNzIzLDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVja2JveGVzIG9ubHkgaGF2ZSB0aW50
IHdoZW4gY2hlY2tlZC4KLSAgICBpZiAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2ti
b3hQYXJ0KQorICAgIGlmIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydCkK
ICAgICAgICAgcmV0dXJuIGlzQ2hlY2tlZChvKTsKIAogICAgIC8vIEZvciBub3cgYXNzdW1lIG90
aGVyIGNvbnRyb2xzIGhhdmUgdGludCBpZiBlbmFibGVkLgpAQCAtODExLDcgKzgxMSw3IEBAIE5T
Q29udHJvbFNpemUgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTaXplRm9yU3lzdGVtRm9udChSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAgICAgcmV0dXJuIE5TTWluaUNvbnRyb2xTaXplOwogfQog
Ci1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBMb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKIApAQCAtODMx
LDcgKzgzMSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqCiB7CiB9CiAKLWJvb2wgUmVuZGVy
VGhlbWVNYWM6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIGlmIChwYWludEluZm8u
Y29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg0
Miw3ICs4NDIsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludENhcHNMb2NrSW5kaWNhdG9y
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYgcGFpbgogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIExvY2FsQ3VycmVu
dEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwogICAgIHdr
RHJhd0JlemVsZWRUZXh0QXJlYShyLCBpc0VuYWJsZWQobykgJiYgIWlzUmVhZE9ubHlDb250cm9s
KG8pKTsKQEAgLTg4MSwyMSArODgxLDIxIEBAIGNvbnN0IGludCogUmVuZGVyVGhlbWVNYWM6OnBv
cHVwQnV0dG9uUGFkZGluZyhOU0NvbnRyb2xTaXplIHNpemUpIGNvbnN0CiAgICAgcmV0dXJuIHBh
ZGRpbmdbc2l6ZV07CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3QoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0
JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAg
ICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250
ZXh0KTsKICAgICBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShvLCByKTsKIAogICAgIE5TUG9wVXBC
dXR0b25DZWxsKiBwb3B1cEJ1dHRvbiA9IHRoaXMtPnBvcHVwQnV0dG9uKCk7CiAKLSAgICBmbG9h
dCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29t
TGV2ZWwgPSBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwogICAgIEludFNpemUgc2l6ZSA9IHBv
cHVwQnV0dG9uU2l6ZXMoKVtbcG9wdXBCdXR0b24gY29udHJvbFNpemVdXTsKICAgICBzaXplLnNl
dEhlaWdodChzaXplLmhlaWdodCgpICogem9vbUxldmVsKTsKICAgICBzaXplLnNldFdpZHRoKHIu
d2lkdGgoKSk7CiAKICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBhY2NvdW50IGZvciB0aGUgc2hh
ZG93LgogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gcjsKLSAgICBpZiAoci53aWR0aCgpID49
IG1pbmltdW1NZW51TGlzdFNpemUoJm8tPnN0eWxlKCkpKQorICAgIGlmIChyLndpZHRoKCkgPj0g
bWluaW11bU1lbnVMaXN0U2l6ZSgmby5zdHlsZSgpKSkKICAgICAgICAgaW5mbGF0ZWRSZWN0ID0g
aW5mbGF0ZVJlY3QoaW5mbGF0ZWRSZWN0LCBzaXplLCBwb3B1cEJ1dHRvbk1hcmdpbnMoKSwgem9v
bUxldmVsKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFp
bnRJbmZvLmNvbnRleHQpOwpAQCAtOTEzLDcgKzkxMyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6
OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywKIAogICAgIE5TVmlldyAqdmlldyA9IGRvY3VtZW50Vmlld0ZvcihvKTsKICAgICBbcG9wdXBC
dXR0b24gZHJhd1dpdGhGcmFtZTppbmZsYXRlZFJlY3QgaW5WaWV3OnZpZXddOwotICAgIGlmIChp
c0ZvY3VzZWQobykgJiYgby0+c3R5bGUoKS5vdXRsaW5lU3R5bGVJc0F1dG8oKSkKKyAgICBpZiAo
aXNGb2N1c2VkKG8pICYmIG8uc3R5bGUoKS5vdXRsaW5lU3R5bGVJc0F1dG8oKSkKICAgICAgICAg
W3BvcHVwQnV0dG9uIF93ZWJfZHJhd0ZvY3VzUmluZ1dpdGhGcmFtZTppbmZsYXRlZFJlY3QgaW5W
aWV3OnZpZXddOwogICAgIFtwb3B1cEJ1dHRvbiBzZXRDb250cm9sVmlldzpuaWxdOwogCkBAIC05
MzQsMTQgKzkzNCwxNCBAQCBJbnRTaXplIFJlbmRlclRoZW1lTWFjOjptZXRlclNpemVGb3JCb3Vu
ZHMoY29uc3QgUmVuZGVyTWV0ZXIqIHJlbmRlck1ldGVyLCBjb25zdAogICAgICAgICAgICAgICAg
ICAgIGJvdW5kcy5oZWlnaHQoKSA8IGNlbGxTaXplLmhlaWdodCA/IGNlbGxTaXplLmhlaWdodCA6
IGJvdW5kcy5oZWlnaHQoKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWV0ZXIo
UmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZXRlcihjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFyZW5kZXJPYmplY3QtPmlzTWV0ZXIo
KSkKKyAgICBpZiAoIXJlbmRlck9iamVjdC5pc01ldGVyKCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludElu
Zm8uY29udGV4dCk7CiAKLSAgICBOU0xldmVsSW5kaWNhdG9yQ2VsbCogY2VsbCA9IGxldmVsSW5k
aWNhdG9yRm9yKHRvUmVuZGVyTWV0ZXIocmVuZGVyT2JqZWN0KSk7CisgICAgTlNMZXZlbEluZGlj
YXRvckNlbGwqIGNlbGwgPSBsZXZlbEluZGljYXRvckZvcih0b1JlbmRlck1ldGVyKCZyZW5kZXJP
YmplY3QpKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50
SW5mby5jb250ZXh0KTsKIAogICAgIFtjZWxsIGRyYXdXaXRoRnJhbWU6cmVjdCBpblZpZXc6ZG9j
dW1lbnRWaWV3Rm9yKHJlbmRlck9iamVjdCldOwpAQCAtMTA0MiwyMyArMTA0MiwyMyBAQCBjb25z
dCBpbnQqIFJlbmRlclRoZW1lTWFjOjpwcm9ncmVzc0Jhck1hcmdpbnMoTlNDb250cm9sU2l6ZSBj
b250cm9sU2l6ZSkgY29uc3QKICAgICByZXR1cm4gbWFyZ2luc1tjb250cm9sU2l6ZV07CiB9CiAK
LUludFJlY3QgUmVuZGVyVGhlbWVNYWM6OnByb2dyZXNzQmFyUmVjdEZvckJvdW5kcyhjb25zdCBS
ZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAor
SW50UmVjdCBSZW5kZXJUaGVtZU1hYzo6cHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJl
bmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CiB7
CiAgICAgLy8gV29ya2Fyb3VuZCB1bnRpbCA8cmRhcjovL3Byb2JsZW0vMTU4NTUwODY+IGlzIGZp
eGVkLgogICAgIGludCBtYXhEaW1lbnNpb24gPSBzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bnVtZXJp
Y19saW1pdHM8dXNob3J0Pjo6bWF4KCkpOwogICAgIEludFJlY3QgcHJvZ3Jlc3NCYXJCb3VuZHMo
Ym91bmRzLngoKSwgYm91bmRzLnkoKSwgc3RkOjptaW4oYm91bmRzLndpZHRoKCksIG1heERpbWVu
c2lvbiksIHN0ZDo6bWluKGJvdW5kcy5oZWlnaHQoKSwgbWF4RGltZW5zaW9uKSk7Ci0gICAgaWYg
KE5vQ29udHJvbFBhcnQgPT0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSkKKyAg
ICBpZiAoTm9Db250cm9sUGFydCA9PSByZW5kZXJPYmplY3Quc3R5bGUoKS5hcHBlYXJhbmNlKCkp
CiAgICAgICAgIHJldHVybiBwcm9ncmVzc0JhckJvdW5kczsKIAotICAgIGZsb2F0IHpvb21MZXZl
bCA9IHJlbmRlck9iamVjdC0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7Ci0gICAgTlNDb250cm9s
U2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udCgmcmVuZGVyT2JqZWN0LT5zdHls
ZSgpKTsKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSByZW5kZXJPYmplY3Quc3R5bGUoKS5lZmZlY3Rp
dmVab29tKCk7CisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9y
Rm9udCgmcmVuZGVyT2JqZWN0LnN0eWxlKCkpOwogICAgIEludFNpemUgc2l6ZSA9IHByb2dyZXNz
QmFyU2l6ZXMoKVtjb250cm9sU2l6ZV07CiAgICAgc2l6ZS5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQo
KSAqIHpvb21MZXZlbCk7CiAgICAgc2l6ZS5zZXRXaWR0aChwcm9ncmVzc0JhckJvdW5kcy53aWR0
aCgpKTsKIAogICAgIC8vIE5vdyBpbmZsYXRlIGl0IHRvIGFjY291bnQgZm9yIHRoZSBzaGFkb3cu
CiAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBwcm9ncmVzc0JhckJvdW5kczsKLSAgICBpZiAo
cHJvZ3Jlc3NCYXJCb3VuZHMuaGVpZ2h0KCkgPD0gbWluaW11bVByb2dyZXNzQmFySGVpZ2h0KCZy
ZW5kZXJPYmplY3QtPnN0eWxlKCkpKQorICAgIGlmIChwcm9ncmVzc0JhckJvdW5kcy5oZWlnaHQo
KSA8PSBtaW5pbXVtUHJvZ3Jlc3NCYXJIZWlnaHQoJnJlbmRlck9iamVjdC5zdHlsZSgpKSkKICAg
ICAgICAgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0ZVJlY3QoaW5mbGF0ZWRSZWN0LCBzaXplLCBwcm9n
cmVzc0Jhck1hcmdpbnMoY29udHJvbFNpemUpLCB6b29tTGV2ZWwpOwogCiAgICAgcmV0dXJuIGlu
ZmxhdGVkUmVjdDsKQEAgLTEwODMsMjggKzEwODMsMjggQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW4KIHsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJP
YmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFyKGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoIXJlbmRlck9iamVjdC0+aXNQcm9ncmVz
cygpKQorICAgIGlmICghcmVuZGVyT2JqZWN0LmlzUHJvZ3Jlc3MoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHByb2dyZXNzQmFyUmVjdEZvckJv
dW5kcyhyZW5kZXJPYmplY3QsIHJlY3QpOwotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUg
PSBjb250cm9sU2l6ZUZvckZvbnQoJnJlbmRlck9iamVjdC0+c3R5bGUoKSk7CisgICAgTlNDb250
cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udCgmcmVuZGVyT2JqZWN0LnN0
eWxlKCkpOwogCi0gICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQ
cm9ncmVzcyhyZW5kZXJPYmplY3QpOworICAgIGNvbnN0IFJlbmRlclByb2dyZXNzJiByZW5kZXJQ
cm9ncmVzcyA9ICp0b1JlbmRlclByb2dyZXNzKCZyZW5kZXJPYmplY3QpOwogICAgIEhJVGhlbWVU
cmFja0RyYXdJbmZvIHRyYWNrSW5mbzsKICAgICB0cmFja0luZm8udmVyc2lvbiA9IDA7CiAgICAg
aWYgKGNvbnRyb2xTaXplID09IE5TUmVndWxhckNvbnRyb2xTaXplKQotICAgICAgICB0cmFja0lu
Zm8ua2luZCA9IHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpIDwgMCA/IGtUaGVtZUxhcmdlSW5k
ZXRlcm1pbmF0ZUJhciA6IGtUaGVtZUxhcmdlUHJvZ3Jlc3NCYXI7CisgICAgICAgIHRyYWNrSW5m
by5raW5kID0gcmVuZGVyUHJvZ3Jlc3MucG9zaXRpb24oKSA8IDAgPyBrVGhlbWVMYXJnZUluZGV0
ZXJtaW5hdGVCYXIgOiBrVGhlbWVMYXJnZVByb2dyZXNzQmFyOwogICAgIGVsc2UKLSAgICAgICAg
dHJhY2tJbmZvLmtpbmQgPSByZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSA8IDAgPyBrVGhlbWVN
ZWRpdW1JbmRldGVybWluYXRlQmFyIDoga1RoZW1lTWVkaXVtUHJvZ3Jlc3NCYXI7CisgICAgICAg
IHRyYWNrSW5mby5raW5kID0gcmVuZGVyUHJvZ3Jlc3MucG9zaXRpb24oKSA8IDAgPyBrVGhlbWVN
ZWRpdW1JbmRldGVybWluYXRlQmFyIDoga1RoZW1lTWVkaXVtUHJvZ3Jlc3NCYXI7CiAKLSAgICBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IHJlbmRlck9iamVjdC0+ZG9jdW1lbnQoKS5kZXZpY2VT
Y2FsZUZhY3RvcigpOworICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyT2JqZWN0
LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKICAgICB0cmFja0luZm8uYm91bmRzID0g
SW50UmVjdChJbnRQb2ludCgpLCBpbmZsYXRlZFJlY3Quc2l6ZSgpKTsKICAgICB0cmFja0luZm8u
bWluID0gMDsKICAgICB0cmFja0luZm8ubWF4ID0gc3RkOjpudW1lcmljX2xpbWl0czxTSW50MzI+
OjptYXgoKTsKLSAgICB0cmFja0luZm8udmFsdWUgPSBscm91bmQocmVuZGVyUHJvZ3Jlc3MtPnBv
c2l0aW9uKCkgKiBuZXh0YWZ0ZXIodHJhY2tJbmZvLm1heCwgMCkpOwotICAgIHRyYWNrSW5mby50
cmFja0luZm8ucHJvZ3Jlc3MucGhhc2UgPSBscm91bmQocmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlv
blByb2dyZXNzKCkgKiBuZXh0YWZ0ZXIocHJvZ3Jlc3NBbmltYXRpb25OdW1GcmFtZXMsIDApICog
ZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIHRyYWNrSW5mby52YWx1ZSA9IGxyb3VuZChyZW5kZXJQ
cm9ncmVzcy5wb3NpdGlvbigpICogbmV4dGFmdGVyKHRyYWNrSW5mby5tYXgsIDApKTsKKyAgICB0
cmFja0luZm8udHJhY2tJbmZvLnByb2dyZXNzLnBoYXNlID0gbHJvdW5kKHJlbmRlclByb2dyZXNz
LmFuaW1hdGlvblByb2dyZXNzKCkgKiBuZXh0YWZ0ZXIocHJvZ3Jlc3NBbmltYXRpb25OdW1GcmFt
ZXMsIDApICogZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgIHRyYWNrSW5mby5hdHRyaWJ1dGVzID0g
a1RoZW1lVHJhY2tIb3Jpem9udGFsOwogICAgIHRyYWNrSW5mby5lbmFibGVTdGF0ZSA9IGlzQWN0
aXZlKHJlbmRlck9iamVjdCkgPyBrVGhlbWVUcmFja0FjdGl2ZSA6IGtUaGVtZVRyYWNrSW5hY3Rp
dmU7CiAgICAgdHJhY2tJbmZvLnJlc2VydmVkID0gMDsKQEAgLTExMjAsNyArMTEyMCw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhaW50SW5mCiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKIAotICAgIGlmICghcmVuZGVyUHJvZ3Jlc3Mt
PnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CisgICAgaWYgKCFyZW5kZXJQcm9n
cmVzcy5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgewogICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+dHJhbnNsYXRlKDIgKiBpbmZsYXRlZFJlY3QueCgpICsgaW5mbGF0ZWRSZWN0
LndpZHRoKCksIDApOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoRmxvYXRTaXpl
KC0xLCAxKSk7CiAgICAgfQpAQCAtMTE4Miw3ICsxMTgyLDcgQEAgc3RhdGljIHZvaWQgVHJhY2tH
cmFkaWVudEludGVycG9sYXRlKHZvaWQqLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQq
IG91dEQKICAgICAgICAgb3V0RGF0YVtpXSA9ICgxLjBmIC0gYSkgKiBkYXJrW2ldICsgYSAqIGxp
Z2h0W2ldOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uR3Jh
ZGllbnRzKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCit2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uR3Jh
ZGllbnRzKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKHIuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CkBAIC0xMTkyLDcgKzExOTIsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVM
aXN0QnV0dG9uR3JhZGllbnRzKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbgogCiAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7
CiAKLSAgICBGbG9hdFJvdW5kZWRSZWN0IGJvcmRlciA9IEZsb2F0Um91bmRlZFJlY3Qoby0+c3R5
bGUoKS5nZXRSb3VuZGVkQm9yZGVyRm9yKHIsICZvLT52aWV3KCkpKTsKKyAgICBGbG9hdFJvdW5k
ZWRSZWN0IGJvcmRlciA9IEZsb2F0Um91bmRlZFJlY3Qoby5zdHlsZSgpLmdldFJvdW5kZWRCb3Jk
ZXJGb3IociwgJm8udmlldygpKSk7CiAgICAgaW50IHJhZGl1cyA9IGJvcmRlci5yYWRpaSgpLnRv
cExlZnQoKS53aWR0aCgpOwogCiAgICAgQ0dDb2xvclNwYWNlUmVmIGNzcGFjZSA9IGRldmljZVJH
QkNvbG9yU3BhY2VSZWYoKTsKQEAgLTEyNDksMjkgKzEyNDksMjkgQEAgdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW4KICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RC
dXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVy
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAg
ICBJbnRSZWN0IGJvdW5kcyA9IEludFJlY3QocmVjdC54KCkgKyByZW5kZXJlci0+c3R5bGUoKS5i
b3JkZXJMZWZ0V2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkg
KyByZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJUb3BXaWR0aCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWN0LndpZHRoKCkgLSByZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJMZWZ0V2lk
dGgoKSAtIHJlbmRlcmVyLT5zdHlsZSgpLmJvcmRlclJpZ2h0V2lkdGgoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVjdC5oZWlnaHQoKSAtIHJlbmRlcmVyLT5zdHlsZSgpLmJvcmRl
clRvcFdpZHRoKCkgLSByZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJCb3R0b21XaWR0aCgpKTsKKyAg
ICBJbnRSZWN0IGJvdW5kcyA9IEludFJlY3QocmVjdC54KCkgKyByZW5kZXJlci5zdHlsZSgpLmJv
cmRlckxlZnRXaWR0aCgpLAorICAgICAgICByZWN0LnkoKSArIHJlbmRlcmVyLnN0eWxlKCkuYm9y
ZGVyVG9wV2lkdGgoKSwKKyAgICAgICAgcmVjdC53aWR0aCgpIC0gcmVuZGVyZXIuc3R5bGUoKS5i
b3JkZXJMZWZ0V2lkdGgoKSAtIHJlbmRlcmVyLnN0eWxlKCkuYm9yZGVyUmlnaHRXaWR0aCgpLAor
ICAgICAgICByZWN0LmhlaWdodCgpIC0gcmVuZGVyZXIuc3R5bGUoKS5ib3JkZXJUb3BXaWR0aCgp
IC0gcmVuZGVyZXIuc3R5bGUoKS5ib3JkZXJCb3R0b21XaWR0aCgpKTsKICAgICAvLyBEcmF3IHRo
ZSBncmFkaWVudHMgdG8gZ2l2ZSB0aGUgc3R5bGVkIHBvcHVwIG1lbnUgYSBidXR0b24gYXBwZWFy
YW5jZQogICAgIHBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMocmVuZGVyZXIsIHBhaW50SW5m
bywgYm91bmRzKTsKIAogICAgIC8vIFNpbmNlIHdlIGFjdHVhbGx5IGtub3cgdGhlIHNpemUgb2Yg
dGhlIGNvbnRyb2wgaGVyZSwgd2UgcmVzdHJpY3QgdGhlIGZvbnQgc2NhbGUgdG8gbWFrZSBzdXJl
IHRoZSBhcnJvd3Mgd2lsbCBmaXQgdmVydGljYWxseSBpbiB0aGUgYm91bmRzCi0gICAgZmxvYXQg
Zm9udFNjYWxlID0gc3RkOjptaW4ocmVuZGVyZXItPnN0eWxlKCkuZm9udFNpemUoKSAvIGJhc2VG
b250U2l6ZSwgYm91bmRzLmhlaWdodCgpIC8gKGJhc2VBcnJvd0hlaWdodCAqIDIgKyBiYXNlU3Bh
Y2VCZXR3ZWVuQXJyb3dzKSk7CisgICAgZmxvYXQgZm9udFNjYWxlID0gc3RkOjptaW4ocmVuZGVy
ZXIuc3R5bGUoKS5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplLCBib3VuZHMuaGVpZ2h0KCkgLyAo
YmFzZUFycm93SGVpZ2h0ICogMiArIGJhc2VTcGFjZUJldHdlZW5BcnJvd3MpKTsKICAgICBmbG9h
dCBjZW50ZXJZID0gYm91bmRzLnkoKSArIGJvdW5kcy5oZWlnaHQoKSAvIDIuMGY7CiAgICAgZmxv
YXQgYXJyb3dIZWlnaHQgPSBiYXNlQXJyb3dIZWlnaHQgKiBmb250U2NhbGU7CiAgICAgZmxvYXQg
YXJyb3dXaWR0aCA9IGJhc2VBcnJvd1dpZHRoICogZm9udFNjYWxlOwotICAgIGZsb2F0IGxlZnRF
ZGdlID0gYm91bmRzLm1heFgoKSAtIGFycm93UGFkZGluZ1JpZ2h0ICogcmVuZGVyZXItPnN0eWxl
KCkuZWZmZWN0aXZlWm9vbSgpIC0gYXJyb3dXaWR0aDsKKyAgICBmbG9hdCBsZWZ0RWRnZSA9IGJv
dW5kcy5tYXhYKCkgLSBhcnJvd1BhZGRpbmdSaWdodCAqIHJlbmRlcmVyLnN0eWxlKCkuZWZmZWN0
aXZlWm9vbSgpIC0gYXJyb3dXaWR0aDsKICAgICBmbG9hdCBzcGFjZUJldHdlZW5BcnJvd3MgPSBi
YXNlU3BhY2VCZXR3ZWVuQXJyb3dzICogZm9udFNjYWxlOwogCi0gICAgaWYgKGJvdW5kcy53aWR0
aCgpIDwgYXJyb3dXaWR0aCArIGFycm93UGFkZGluZ0xlZnQgKiByZW5kZXJlci0+c3R5bGUoKS5l
ZmZlY3RpdmVab29tKCkpCisgICAgaWYgKGJvdW5kcy53aWR0aCgpIDwgYXJyb3dXaWR0aCArIGFy
cm93UGFkZGluZ0xlZnQgKiByZW5kZXJlci5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKCpwYWludEluZm8uY29udGV4dCk7CiAKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0Rmls
bENvbG9yKHJlbmRlcmVyLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUNvbG9yKSwgcmVuZGVyZXItPnN0eWxlKCkuY29sb3JTcGFjZSgpKTsKKyAgICBwYWludEluZm8u
Y29udGV4dC0+c2V0RmlsbENvbG9yKHJlbmRlcmVyLnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5Q29sb3IpLCByZW5kZXJlci5zdHlsZSgpLmNvbG9yU3BhY2UoKSk7CiAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsKIAogICAgIEZs
b2F0UG9pbnQgYXJyb3cxWzNdOwpAQCAtMTI5NSw3ICsxMjk1LDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnMKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlIHNlcGFyYXRvciB0aGlja25lc3Mg
YW5kIHNwYWNlIGJlIHNjYWxlZCB1cCBieSBmb250U2NhbGU/CiAgICAgaW50IHNlcGFyYXRvclNw
YWNlID0gMjsgLy8gRGVsaWJlcmF0ZWx5IGlnbm9yZXMgem9vbSBzaW5jZSBpdCBsb29rcyBuaWNl
ciBpZiBpdCBzdGF5cyB0aGluLgotICAgIGludCBsZWZ0RWRnZU9mU2VwYXJhdG9yID0gc3RhdGlj
X2Nhc3Q8aW50PihsZWZ0RWRnZSAtIGFycm93UGFkZGluZ0xlZnQgKiByZW5kZXJlci0+c3R5bGUo
KS5lZmZlY3RpdmVab29tKCkpOyAvLyBGSVhNRTogUm91bmQ/CisgICAgaW50IGxlZnRFZGdlT2ZT
ZXBhcmF0b3IgPSBzdGF0aWNfY2FzdDxpbnQ+KGxlZnRFZGdlIC0gYXJyb3dQYWRkaW5nTGVmdCAq
IHJlbmRlcmVyLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsgLy8gRklYTUU6IFJvdW5kPwogCiAg
ICAgLy8gRHJhdyB0aGUgc2VwYXJhdG9yIHRvIHRoZSBsZWZ0IG9mIHRoZSBhcnJvd3MKICAgICBw
YWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKDEpOyAvLyBEZWxpYmVyYXRlbHkg
aWdub3JlcyB6b29tIHNpbmNlIGl0IGxvb2tzIG5pY2VyIGlmIGl0IHN0YXlzIHRoaW4uCkBAIC0x
Mzk2LDEyICsxMzk2LDEyIEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0QnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsCiAgICAgc3R5bGUtPnNl
dExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogfQogCi12b2lk
IFJlbmRlclRoZW1lTWFjOjpzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IEludFJlY3QmIHIpCit2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRQb3B1cEJ1
dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IEludFJlY3QmIHIpCiB7
CiAgICAgTlNQb3BVcEJ1dHRvbkNlbGwqIHBvcHVwQnV0dG9uID0gdGhpcy0+cG9wdXBCdXR0b24o
KTsKIAogICAgIC8vIFNldCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgcmVjdGFuZ2xl
IHdlJ3JlIHBhaW50aW5nIGludG8uCi0gICAgc2V0Q29udHJvbFNpemUocG9wdXBCdXR0b24sIHBv
cHVwQnV0dG9uU2l6ZXMoKSwgci5zaXplKCksIG8tPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsK
KyAgICBzZXRDb250cm9sU2l6ZShwb3B1cEJ1dHRvbiwgcG9wdXBCdXR0b25TaXplcygpLCByLnNp
emUoKSwgby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHZh
cmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCiAgICAgdXBkYXRlQWN0aXZlU3RhdGUocG9wdXBC
dXR0b24sIG8pOwpAQCAtMTQyOSwxNiArMTQyOSwxNiBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjph
ZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUs
CiAgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRT
bGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIEludFJlY3QgYm91bmRzID0gcjsKLSAgICBm
bG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6
b29tTGV2ZWwgPSBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwogICAgIGZsb2F0IHpvb21lZFRy
YWNrV2lkdGggPSB0cmFja1dpZHRoICogem9vbUxldmVsOwogCi0gICAgaWYgKG8tPnN0eWxlKCku
YXBwZWFyYW5jZSgpID09ICBTbGlkZXJIb3Jpem9udGFsUGFydCB8fCBvLT5zdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSAgTWVkaWFTbGlkZXJQYXJ0KSB7CisgICAgaWYgKG8uc3R5bGUoKS5hcHBlYXJh
bmNlKCkgPT0gIFNsaWRlckhvcml6b250YWxQYXJ0IHx8IG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkg
PT0gIE1lZGlhU2xpZGVyUGFydCkgewogICAgICAgICBib3VuZHMuc2V0SGVpZ2h0KHpvb21lZFRy
YWNrV2lkdGgpOwogICAgICAgICBib3VuZHMuc2V0WShyLnkoKSArIHIuaGVpZ2h0KCkgLyAyIC0g
em9vbWVkVHJhY2tXaWR0aCAvIDIpOwotICAgIH0gZWxzZSBpZiAoby0+c3R5bGUoKS5hcHBlYXJh
bmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KSB7CisgICAgfSBlbHNlIGlmIChvLnN0eWxlKCku
YXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkgewogICAgICAgICBib3VuZHMuc2V0
V2lkdGgoem9vbWVkVHJhY2tXaWR0aCk7CiAgICAgICAgIGJvdW5kcy5zZXRYKHIueCgpICsgci53
aWR0aCgpIC8gMiAtIHpvb21lZFRyYWNrV2lkdGggLyAyKTsKICAgICB9CkBAIC0xNDU3LDcgKzE0
NTcsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZgogICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2Fs
bGJhY2tzIG1haW5DYWxsYmFja3MgPSB7IDAsIFRyYWNrR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVM
TCB9OwogICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBtYWluRnVuY3Rpb24gPSBhZG9wdENG
KENHRnVuY3Rpb25DcmVhdGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwgJm1haW5DYWxsYmFja3Mp
KTsKICAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBtYWluU2hhZGluZzsKLSAgICBpZiAoby0+
c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQorICAgIGlmIChvLnN0
eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkKICAgICAgICAgbWFpblNo
YWRpbmcgPSBhZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uo
Ym91bmRzLngoKSwgIGJvdW5kcy5tYXhZKCkpLCBDR1BvaW50TWFrZShib3VuZHMubWF4WCgpLCBi
b3VuZHMubWF4WSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKICAgICBl
bHNlCiAgICAgICAgIG1haW5TaGFkaW5nID0gYWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChj
c3BhY2UsIENHUG9pbnRNYWtlKGJvdW5kcy54KCksICBib3VuZHMueSgpKSwgQ0dQb2ludE1ha2Uo
Ym91bmRzLngoKSwgYm91bmRzLm1heFkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZh
bHNlKSk7CkBAIC0xNDc4LDkgKzE0NzgsOSBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RT
bGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlcgogCiBj
b25zdCBmbG9hdCB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgPSAwLjFmOwogCi1ib29sIFJl
bmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgTlNTbGlkZXJDZWxsKiBzbGlk
ZXJUaHVtYkNlbGwgPSBvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRp
Y2FsUGFydAorICAgIE5TU2xpZGVyQ2VsbCogc2xpZGVyVGh1bWJDZWxsID0gby5zdHlsZSgpLmFw
cGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydAogICAgICAgICA/IHNsaWRlclRo
dW1iVmVydGljYWwoKQogICAgICAgICA6IHNsaWRlclRodW1iSG9yaXpvbnRhbCgpOwogCkBAIC0x
NDg5LDE5ICsxNDg5LDIwIEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVGh1bWIo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mCiAgICAgLy8gVXBkYXRl
IHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgogICAgIHVwZGF0ZUFjdGl2ZVN0YXRl
KHNsaWRlclRodW1iQ2VsbCwgbyk7CiAgICAgdXBkYXRlRW5hYmxlZFN0YXRlKHNsaWRlclRodW1i
Q2VsbCwgbyk7Ci0gICAgRWxlbWVudCogZm9jdXNEZWxlZ2F0ZSA9IChvLT5ub2RlKCkgJiYgby0+
bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpID8gdG9FbGVtZW50KG8tPm5vZGUoKSktPmZvY3VzRGVs
ZWdhdGUoKSA6IDA7Ci0gICAgdXBkYXRlRm9jdXNlZFN0YXRlKHNsaWRlclRodW1iQ2VsbCwgZm9j
dXNEZWxlZ2F0ZSA/IGZvY3VzRGVsZWdhdGUtPnJlbmRlcmVyKCkgOiAwKTsKKyAgICAgICAgRWxl
bWVudCogZm9jdXNEZWxlZ2F0ZSA9IChvLm5vZGUoKSAmJiBvLm5vZGUoKS0+aXNFbGVtZW50Tm9k
ZSgpKSA/IHRvRWxlbWVudChvLm5vZGUoKSktPmZvY3VzRGVsZWdhdGUoKSA6IDA7CisgICAgaWYg
KGZvY3VzRGVsZWdhdGUpCisgICAgICAgIHVwZGF0ZUZvY3VzZWRTdGF0ZShzbGlkZXJUaHVtYkNl
bGwsICpmb2N1c0RlbGVnYXRlLT5yZW5kZXJlcigpKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgcHJl
c3NlZCBzdGF0ZSB1c2luZyB0aGUgTlNDZWxsIHRyYWNraW5nIG1ldGhvZHMsIHNpbmNlIHRoYXQn
cyBob3cgTlNTbGlkZXJDZWxsIGtlZXBzIHRyYWNrIG9mIGl0LgogICAgIGJvb2wgb2xkUHJlc3Nl
ZDsKLSAgICBpZiAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNh
bFBhcnQpCisgICAgaWYgKG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0
aWNhbFBhcnQpCiAgICAgICAgIG9sZFByZXNzZWQgPSBtX2lzU2xpZGVyVGh1bWJWZXJ0aWNhbFBy
ZXNzZWQ7CiAgICAgZWxzZQogICAgICAgICBvbGRQcmVzc2VkID0gbV9pc1NsaWRlclRodW1iSG9y
aXpvbnRhbFByZXNzZWQ7CiAKICAgICBib29sIHByZXNzZWQgPSBpc1ByZXNzZWQobyk7CiAKLSAg
ICBpZiAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQp
CisgICAgaWYgKG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBh
cnQpCiAgICAgICAgIG1faXNTbGlkZXJUaHVtYlZlcnRpY2FsUHJlc3NlZCA9IHByZXNzZWQ7CiAg
ICAgZWxzZQogICAgICAgICBtX2lzU2xpZGVyVGh1bWJIb3Jpem9udGFsUHJlc3NlZCA9IHByZXNz
ZWQ7CkBAIC0xNTE1LDExICsxNTE2LDExIEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xp
ZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mCiAKICAg
ICBGbG9hdFJlY3QgYm91bmRzID0gcjsKICAgICAvLyBNYWtlIHRoZSBoZWlnaHQgb2YgdGhlIHZl
cnRpY2FsIHNsaWRlciBzbGlnaHRseSBsYXJnZXIgc28gTlNTbGlkZXJDZWxsIHdpbGwgZHJhdyBh
IHZlcnRpY2FsIHNsaWRlci4KLSAgICBpZiAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xp
ZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIGJvdW5kcy5zZXRIZWlnaHQoYm91bmRzLmhl
aWdodCgpICsgdmVydGljYWxTbGlkZXJIZWlnaHRQYWRkaW5nICogby0+c3R5bGUoKS5lZmZlY3Rp
dmVab29tKCkpOworICAgIGlmIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1i
VmVydGljYWxQYXJ0KQorICAgICAgICBib3VuZHMuc2V0SGVpZ2h0KGJvdW5kcy5oZWlnaHQoKSAr
IHZlcnRpY2FsU2xpZGVySGVpZ2h0UGFkZGluZyAqIG8uc3R5bGUoKS5lZmZlY3RpdmVab29tKCkp
OwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8u
Y29udGV4dCk7Ci0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS5lZmZlY3RpdmVab29t
KCk7CisgICAgZmxvYXQgem9vbUxldmVsID0gby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKIAog
ICAgIEZsb2F0UmVjdCB1bnpvb21lZFJlY3QgPSBib3VuZHM7CiAgICAgaWYgKHpvb21MZXZlbCAh
PSAxLjBmKSB7CkBAIC0xNTM2LDcgKzE1MzcsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZgog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hG
aWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZChjb25zdCBS
ZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByKQogewogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFp
bnRJbmZvLmNvbnRleHQpOwogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5z
ZWFyY2goKTsKQEAgLTE1NDUsNyArMTU0Niw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50
U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mCiAK
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250
ZXh0KTsKIAotICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgp
OworICAgIGZsb2F0IHpvb21MZXZlbCA9IG8uc3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CiAKICAg
ICBJbnRSZWN0IHVuem9vbWVkUmVjdCA9IHI7CiAKQEAgLTE1NjgsMTEgKzE1NjksMTEgQEAgYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVNYWM6OnNldFNlYXJjaENlbGxTdGF0ZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFJl
Y3QmKQordm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2VhcmNoQ2VsbFN0YXRlKGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QgSW50UmVjdCYpCiB7CiAgICAgTlNTZWFyY2hGaWVsZENlbGwqIHNl
YXJjaCA9IHRoaXMtPnNlYXJjaCgpOwogCi0gICAgW3NlYXJjaCBzZXRDb250cm9sU2l6ZTpjb250
cm9sU2l6ZUZvckZvbnQoJm8tPnN0eWxlKCkpXTsKKyAgICBbc2VhcmNoIHNldENvbnRyb2xTaXpl
OmNvbnRyb2xTaXplRm9yRm9udCgmby5zdHlsZSgpKV07CiAKICAgICAvLyBVcGRhdGUgdGhlIHZh
cmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCiAgICAgdXBkYXRlQWN0aXZlU3RhdGUoc2VhcmNo
LCBvKTsKQEAgLTE2MjcsMTcgKzE2MjgsMTcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXIKICAg
ICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgRWxlbWVu
dCogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0hvc3QoKTsKKyAgICBFbGVtZW50KiBpbnB1dCA9
IG8ubm9kZSgpLT5zaGFkb3dIb3N0KCk7CiAgICAgaWYgKCFpbnB1dCkKLSAgICAgICAgaW5wdXQg
PSB0b0VsZW1lbnQoby0+bm9kZSgpKTsKKyAgICAgICAgaW5wdXQgPSB0b0VsZW1lbnQoby5ub2Rl
KCkpOwogCiAgICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4
dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgc2V0U2VhcmNoQ2VsbFN0YXRlKGlucHV0LT5yZW5k
ZXJlcigpLCByKTsKKyAgICBzZXRTZWFyY2hDZWxsU3RhdGUoKmlucHV0LT5yZW5kZXJlcigpLCBy
KTsKIAogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIApA
QCAtMTY1MCw3ICsxNjUxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW4KIAogICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogCi0g
ICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgZmxv
YXQgem9vbUxldmVsID0gby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIEZsb2F0UmVj
dCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggY2FuY2VsQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3Qo
aW5wdXQtPnJlbmRlckJveCgpLT5waXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0KCkpXTsKIApAQCAt
MTY2Myw3ICsxNjY0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW4KICAgICBsb2NhbEJvdW5k
cy5zZXRYKGxvY2FsQm91bmRzLngoKSAtIHNwYWNlVG9SaWdodE9mQ2FuY2VsQnV0dG9uKTsKICNl
bmRpZgogCi0gICAgbG9jYWxCb3VuZHMgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoaW5wdXQtPnJl
bmRlcmVyKCksIG8sIGxvY2FsQm91bmRzLCByKTsKKyAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRU
b1BhaW50aW5nUmVjdCgqaW5wdXQtPnJlbmRlcmVyKCksIG8sIGxvY2FsQm91bmRzLCByKTsKIAog
ICAgIEZsb2F0UmVjdCB1bnpvb21lZFJlY3QobG9jYWxCb3VuZHMpOwogICAgIGlmICh6b29tTGV2
ZWwgIT0gMS4wZikgewpAQCAtMTcwOCw3ICsxNzA5LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXIKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTcy
MSwxNiArMTcyMiwxNiBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLAogICAgIHN0eWxlLT5zZXRC
b3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBO
b2RlKiBpbnB1dCA9IG8tPm5vZGUoKS0+c2hhZG93SG9zdCgpOworICAgIE5vZGUqIGlucHV0ID0g
by5ub2RlKCktPnNoYWRvd0hvc3QoKTsKICAgICBpZiAoIWlucHV0KQotICAgICAgICBpbnB1dCA9
IG8tPm5vZGUoKTsKKyAgICAgICAgaW5wdXQgPSBvLm5vZGUoKTsKICAgICBpZiAoIWlucHV0LT5y
ZW5kZXJlcigpLT5pc0JveCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBMb2NhbEN1
cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAg
ICBzZXRTZWFyY2hDZWxsU3RhdGUoaW5wdXQtPnJlbmRlcmVyKCksIHIpOworICAgIHNldFNlYXJj
aENlbGxTdGF0ZSgqaW5wdXQtPnJlbmRlcmVyKCksIHIpOwogCiAgICAgTlNTZWFyY2hGaWVsZENl
bGwqIHNlYXJjaCA9IHRoaXMtPnNlYXJjaCgpOwogCkBAIC0xNzQwLDcgKzE3NDEsNyBAQCBib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJl
bmRlck9iamVjdCogbywgY29ucwogICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKFtzZWFyY2ggc2VhcmNo
QnV0dG9uQ2VsbF0sIG8pOwogCiAgICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBz
ZWFyY2hCdXR0b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPnBpeGVs
U25hcHBlZEJvcmRlckJveFJlY3QoKSldOwotICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFp
bnRpbmdSZWN0KGlucHV0LT5yZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7CisgICAgbG9j
YWxCb3VuZHMgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoKmlucHV0LT5yZW5kZXJlcigpLCBvLCBs
b2NhbEJvdW5kcywgcik7CiAKICAgICBbW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxsXSBkcmF3V2l0
aEZyYW1lOmxvY2FsQm91bmRzIGluVmlldzpkb2N1bWVudFZpZXdGb3IobyldOwogICAgIFtbc2Vh
cmNoIHNlYXJjaEJ1dHRvbkNlbGxdIHNldENvbnRyb2xWaWV3Om5pbF07CkBAIC0xNzU2LDE2ICsx
NzU3LDE2IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTCiAgICAgc3R5bGUtPnNldEJveFNoYWRv
dyhudWxscHRyKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgTm9kZSogaW5wdXQgPSBvLT5ub2RlKCkt
PnNoYWRvd0hvc3QoKTsKKyAgICBOb2RlKiBpbnB1dCA9IG8ubm9kZSgpLT5zaGFkb3dIb3N0KCk7
CiAgICAgaWYgKCFpbnB1dCkKLSAgICAgICAgaW5wdXQgPSBvLT5ub2RlKCk7CisgICAgICAgIGlu
cHV0ID0gby5ub2RlKCk7CiAgICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxv
Y2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgc2V0U2VhcmNoQ2VsbFN0YXRlKGlu
cHV0LT5yZW5kZXJlcigpLCByKTsKKyAgICBzZXRTZWFyY2hDZWxsU3RhdGUoKmlucHV0LT5yZW5k
ZXJlcigpLCByKTsKIAogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFy
Y2goKTsKIApAQCAtMTc3NSwxMCArMTc3NiwxMCBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SQog
ICAgICAgICBbc2VhcmNoIHNldFNlYXJjaE1lbnVUZW1wbGF0ZTpzZWFyY2hNZW51VGVtcGxhdGUo
KV07CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5m
by5jb250ZXh0KTsKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpv
b20oKTsKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwog
CiAgICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9y
Qm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPnBpeGVsU25hcHBlZEJvcmRlckJveFJl
Y3QoKSldOwotICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0LT5y
ZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7CisgICAgbG9jYWxCb3VuZHMgPSBjb252ZXJ0
VG9QYWludGluZ1JlY3QoKmlucHV0LT5yZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7CiAK
ICAgICBJbnRSZWN0IHVuem9vbWVkUmVjdChsb2NhbEJvdW5kcyk7CiAgICAgaWYgKHpvb21MZXZl
bCAhPSAxLjBmKSB7CkBAIC0xNzk1LDI2ICsxNzk2LDI2IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6
OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNu
YXBzaG90dGVkUGx1Z2luT3ZlcmxheShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U25h
cHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmKQogewogICAgIGlmIChwYWludEluZm8ucGhh
c2UgIT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
LSAgICBpZiAoIW8tPmlzUmVuZGVyQmxvY2soKSkKKyAgICBpZiAoIW8uaXNSZW5kZXJCbG9jaygp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFJlbmRlckJsb2NrKiByZW5kZXJCbG9jayA9
IHRvUmVuZGVyQmxvY2sobyk7CisgICAgY29uc3QgUmVuZGVyQmxvY2smIHJlbmRlckJsb2NrID0g
KnRvUmVuZGVyQmxvY2soJm8pOwogCi0gICAgTGF5b3V0VW5pdCBjb250ZW50V2lkdGggPSByZW5k
ZXJCbG9jay0+Y29udGVudFdpZHRoKCk7Ci0gICAgTGF5b3V0VW5pdCBjb250ZW50SGVpZ2h0ID0g
cmVuZGVyQmxvY2stPmNvbnRlbnRIZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IGNvbnRlbnRXaWR0
aCA9IHJlbmRlckJsb2NrLmNvbnRlbnRXaWR0aCgpOworICAgIExheW91dFVuaXQgY29udGVudEhl
aWdodCA9IHJlbmRlckJsb2NrLmNvbnRlbnRIZWlnaHQoKTsKICAgICBpZiAoIWNvbnRlbnRXaWR0
aCB8fCAhY29udGVudEhlaWdodCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsKIAogICAgIExheW91dFNpemUg
Y29udGVudFNpemUoY29udGVudFdpZHRoLCBjb250ZW50SGVpZ2h0KTsKLSAgICBMYXlvdXRQb2lu
dCBjb250ZW50TG9jYXRpb24gPSByZW5kZXJCbG9jay0+bG9jYXRpb24oKTsKLSAgICBjb250ZW50
TG9jYXRpb24ubW92ZShyZW5kZXJCbG9jay0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyQmxvY2stPnBh
ZGRpbmdMZWZ0KCksIHJlbmRlckJsb2NrLT5ib3JkZXJUb3AoKSArIHJlbmRlckJsb2NrLT5wYWRk
aW5nVG9wKCkpOworICAgIExheW91dFBvaW50IGNvbnRlbnRMb2NhdGlvbiA9IHJlbmRlckJsb2Nr
LmxvY2F0aW9uKCk7CisgICAgY29udGVudExvY2F0aW9uLm1vdmUocmVuZGVyQmxvY2suYm9yZGVy
TGVmdCgpICsgcmVuZGVyQmxvY2sucGFkZGluZ0xlZnQoKSwgcmVuZGVyQmxvY2suYm9yZGVyVG9w
KCkgKyByZW5kZXJCbG9jay5wYWRkaW5nVG9wKCkpOwogCiAgICAgTGF5b3V0UmVjdCByZWN0KGNv
bnRlbnRMb2NhdGlvbiwgY29udGVudFNpemUpOwogICAgIEludFJlY3QgYWxpZ25lZFJlY3QgPSBw
aXhlbFNuYXBwZWRJbnRSZWN0KHJlY3QpOwpAQCAtMTgyNSwxMCArMTgyNiwxMCBAQCBib29sIFJl
bmRlclRoZW1lTWFjOjpwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFBhaW50SQogICAgIC8vIGZyb20gb3VyIG5vZGUuIEFzc3VtaW5nIHRoaXMgbm9k
ZSBpcyB0aGUgcGx1Z2luIG92ZXJsYXkgZWxlbWVudCwgd2Ugc2hvdWxkIGdldCB0byB0aGUKICAg
ICAvLyBwbHVnaW4gaXRzZWxmIGJ5IGFza2luZyBmb3IgdGhlIHNoYWRvdyByb290IHBhcmVudCwg
YW5kIHRoZW4gaXRzIHBhcmVudC4KIAotICAgIGlmICghcmVuZGVyQmxvY2stPmVsZW1lbnQoKS0+
aXNIVE1MRWxlbWVudCgpKQorICAgIGlmICghcmVuZGVyQmxvY2suZWxlbWVudCgpLT5pc0hUTUxF
bGVtZW50KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSFRNTEVsZW1lbnQqIHBsdWdJ
bk92ZXJsYXkgPSB0b0hUTUxFbGVtZW50KHJlbmRlckJsb2NrLT5lbGVtZW50KCkpOworICAgIEhU
TUxFbGVtZW50KiBwbHVnSW5PdmVybGF5ID0gdG9IVE1MRWxlbWVudChyZW5kZXJCbG9jay5lbGVt
ZW50KCkpOwogICAgIEVsZW1lbnQqIHBhcmVudCA9IHBsdWdJbk92ZXJsYXktPnBhcmVudE9yU2hh
ZG93SG9zdEVsZW1lbnQoKTsKICAgICB3aGlsZSAocGFyZW50ICYmICFwYXJlbnQtPmlzUGx1Z2lu
RWxlbWVudCgpKQogICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9yU2hhZG93SG9zdEVs
ZW1lbnQoKTsKQEAgLTE4NTIsNyArMTg1Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50
U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJCiAK
ICAgICAvLyBXZSBjb3VsZCBkcmF3IHRoZSBzbmFwc2hvdCB3aXRoIHRoYXQgY29vcmRpbmF0ZXMs
IGJ1dCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZQogICAgIC8vIGlzbid0IGEgY29tcG9zaXRl
ZCBsYXllciBiZXR3ZWVuIHVzIGFuZCB0aGUgcGx1Z0luUmVuZGVyZXIuCi0gICAgUmVuZGVyQm94
KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChvKTsKKyAgICBjb25zdCBSZW5kZXJCb3gqIHJlbmRl
ckJveCA9IHRvUmVuZGVyQm94KCZvKTsKICAgICB3aGlsZSAocmVuZGVyQm94ICE9IHBsdWdJblJl
bmRlcmVyKSB7CiAgICAgICAgIGlmIChyZW5kZXJCb3gtPmhhc0xheWVyKCkgJiYgcmVuZGVyQm94
LT5sYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIoKS0+aXNDb21wb3NpdGVkKCkpIHsKICAgICAg
ICAgICAgIHNuYXBzaG90QWJzUG9zID0gLXJlbmRlckJveC0+bG9jYXRpb24oKTsKQEAgLTIwMDQs
NyArMjAwNSw3IEBAIE5TU2VydmljZXNSb2xsb3ZlckJ1dHRvbkNlbGwqIFJlbmRlclRoZW1lTWFj
OjpzZXJ2aWNlc1JvbGxvdmVyQnV0dG9uQ2VsbCgpIGNvbnN0CiAjZW5kaWYKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRJbWFnZUNvbnRyb2xzQnV0dG9uKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRJbWFnZUNvbnRyb2xzQnV0dG9uKGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogewogICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUJsb2Nr
QmFja2dyb3VuZCkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMDI5LDcgKzIwMzAsNyBAQCBi
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludEltYWdlQ29udHJvbHNCdXR0b24oUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgY29uc3QgUGFpbgogICAgIHJldHVybiB0cnVlOwogfQogCi1JbnRTaXplIFJl
bmRlclRoZW1lTWFjOjppbWFnZUNvbnRyb2xzQnV0dG9uU2l6ZShjb25zdCBSZW5kZXJPYmplY3Qq
KSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6aW1hZ2VDb250cm9sc0J1dHRvblNpemUo
Y29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3QKIHsKICNpZiBIQVZFKEFQUEtJVF9JTUFHRV9DT05U
Uk9MU19TVVBQT1JUKQogICAgIHJldHVybiBJbnRTaXplKHNlcnZpY2VzUm9sbG92ZXJCdXR0b25D
ZWxsKCkuY2VsbFNpemUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdp
bi5jcHAKaW5kZXggNmUwNWI0OWE3Y2Y1NzA4NTc2YWMyNWM2Njg3ZDYzY2Y4ZDAwOGExOS4uMWI5
M2UwMmI3NGIwNWZkODc4YzA1YTcwYmM3ZjdiZWZkY2M5MThlMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCkBAIC00MzQsMTAgKzQzNCwxMCBAQCBib29s
IFJlbmRlclRoZW1lV2luOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0CiAgICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFuY2UoKSk7
CiB9CiAKLXVuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVDbGFzc2ljU3RhdGUoUmVu
ZGVyT2JqZWN0KiBvLCBDb250cm9sU3ViUGFydCBzdWJQYXJ0KQordW5zaWduZWQgUmVuZGVyVGhl
bWVXaW46OmRldGVybWluZUNsYXNzaWNTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8sIENvbnRy
b2xTdWJQYXJ0IHN1YlBhcnQpCiB7CiAgICAgdW5zaWduZWQgc3RhdGUgPSAwOwotICAgIHN3aXRj
aCAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkpIHsKKyAgICBzd2l0Y2ggKG8uc3R5bGUoKS5hcHBl
YXJhbmNlKCkpIHsKICAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBC
dXR0b25QYXJ0OgogICAgICAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgpAQCAtNDQ5LDcgKzQ0
OSw3IEBAIHVuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVDbGFzc2ljU3RhdGUoUmVu
ZGVyT2JqZWN0KiBvLCBDb250cm9sU3ViUGFydCBzCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBSYWRpb1BhcnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgotICAgICAgICAg
ICAgc3RhdGUgPSAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KSA/IERGQ1Nf
QlVUVE9OUkFESU8gOiBERkNTX0JVVFRPTkNIRUNLOworICAgICAgICAgICAgc3RhdGUgPSAoby5z
dHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpID8gREZDU19CVVRUT05SQURJTyA6IERG
Q1NfQlVUVE9OQ0hFQ0s7CiAgICAgICAgICAgICBpZiAoaXNDaGVja2VkKG8pKQogICAgICAgICAg
ICAgICAgIHN0YXRlIHw9IERGQ1NfQ0hFQ0tFRDsKICAgICAgICAgICAgIGlmICghaXNFbmFibGVk
KG8pKQpAQCAtNDgxLDEwICs0ODEsMTAgQEAgdW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVy
bWluZUNsYXNzaWNTdGF0ZShSZW5kZXJPYmplY3QqIG8sIENvbnRyb2xTdWJQYXJ0IHMKICAgICBy
ZXR1cm4gc3RhdGU7CiB9CiAKLXVuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVTdGF0
ZShSZW5kZXJPYmplY3QqIG8pCit1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lU3Rh
dGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvKQogewogICAgIHVuc2lnbmVkIHJlc3VsdCA9IFRTX05P
Uk1BTDsKLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gby0+c3R5bGUoKS5hcHBlYXJhbmNl
KCk7CisgICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IG8uc3R5bGUoKS5hcHBlYXJhbmNlKCk7
CiAgICAgaWYgKCFpc0VuYWJsZWQobykpCiAgICAgICAgIHJlc3VsdCA9IFRTX0RJU0FCTEVEOwog
ICAgIGVsc2UgaWYgKGlzUmVhZE9ubHlDb250cm9sKG8pICYmIChUZXh0RmllbGRQYXJ0ID09IGFw
cGVhcmFuY2UgfHwgVGV4dEFyZWFQYXJ0ID09IGFwcGVhcmFuY2UgfHwgU2VhcmNoRmllbGRQYXJ0
ID09IGFwcGVhcmFuY2UpKQpAQCAtNTAyLDEyICs1MDIsMTIgQEAgdW5zaWduZWQgUmVuZGVyVGhl
bWVXaW46OmRldGVybWluZVN0YXRlKFJlbmRlck9iamVjdCogbykKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi11bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lU2xpZGVyVGh1bWJTdGF0
ZShSZW5kZXJPYmplY3QqIG8pCit1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lU2xp
ZGVyVGh1bWJTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8pCiB7CiAgICAgdW5zaWduZWQgcmVz
dWx0ID0gVFVTX05PUk1BTDsKICAgICBpZiAoIWlzRW5hYmxlZChvKSkKICAgICAgICAgcmVzdWx0
ID0gVFVTX0RJU0FCTEVEOwotICAgIGVsc2UgaWYgKHN1cHBvcnRzRm9jdXMoby0+c3R5bGUoKS5h
cHBlYXJhbmNlKCkpICYmIGlzRm9jdXNlZChvKSkKKyAgICBlbHNlIGlmIChzdXBwb3J0c0ZvY3Vz
KG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkpICYmIGlzRm9jdXNlZChvKSkKICAgICAgICAgcmVzdWx0
ID0gVFVTX0ZPQ1VTRUQ7CiAgICAgZWxzZSBpZiAoaXNQcmVzc2VkKG8pKQogICAgICAgICByZXN1
bHQgPSBUVVNfUFJFU1NFRDsKQEAgLTUxNiwxNCArNTE2LDE0IEBAIHVuc2lnbmVkIFJlbmRlclRo
ZW1lV2luOjpkZXRlcm1pbmVTbGlkZXJUaHVtYlN0YXRlKFJlbmRlck9iamVjdCogbykKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi11bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lQnV0
dG9uU3RhdGUoUmVuZGVyT2JqZWN0KiBvKQordW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVy
bWluZUJ1dHRvblN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYgbykKIHsKICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSBQQlNfTk9STUFMOwogICAgIGlmICghaXNFbmFibGVkKG8pKQogICAgICAgICByZXN1
bHQgPSBQQlNfRElTQUJMRUQ7CiAgICAgZWxzZSBpZiAoaXNQcmVzc2VkKG8pKQogICAgICAgICBy
ZXN1bHQgPSBQQlNfUFJFU1NFRDsKLSAgICBlbHNlIGlmIChzdXBwb3J0c0ZvY3VzKG8tPnN0eWxl
KCkuYXBwZWFyYW5jZSgpKSAmJiBpc0ZvY3VzZWQobykpCisgICAgZWxzZSBpZiAoc3VwcG9ydHNG
b2N1cyhvLnN0eWxlKCkuYXBwZWFyYW5jZSgpKSAmJiBpc0ZvY3VzZWQobykpCiAgICAgICAgIHJl
c3VsdCA9IFBCU19ERUZBVUxURUQ7CiAgICAgZWxzZSBpZiAoaXNIb3ZlcmVkKG8pKQogICAgICAg
ICByZXN1bHQgPSBQQlNfSE9UOwpAQCAtNTMyLDcgKzUzMiw3IEBAIHVuc2lnbmVkIFJlbmRlclRo
ZW1lV2luOjpkZXRlcm1pbmVCdXR0b25TdGF0ZShSZW5kZXJPYmplY3QqIG8pCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotdW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVybWluZVNwaW5CdXR0
b25TdGF0ZShSZW5kZXJPYmplY3QqIG8sIENvbnRyb2xTdWJQYXJ0IHN1YlBhcnQpCit1bnNpZ25l
ZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lU3BpbkJ1dHRvblN0YXRlKGNvbnN0IFJlbmRlck9i
amVjdCYgbywgQ29udHJvbFN1YlBhcnQgc3ViUGFydCkKIHsKICAgICBib29sIGlzVXBCdXR0b24g
PSBzdWJQYXJ0ID09IFNwaW5CdXR0b25VcDsKICAgICB1bnNpZ25lZCByZXN1bHQgPSBpc1VwQnV0
dG9uID8gVVBTX05PUk1BTCA6IEROU19OT1JNQUw7CkBAIC01NDUsMTAgKzU0NSwxMCBAQCB1bnNp
Z25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lU3BpbkJ1dHRvblN0YXRlKFJlbmRlck9iamVj
dCogbywgQ29udHJvbFN1YlBhcgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVRoZW1lRGF0YSBS
ZW5kZXJUaGVtZVdpbjo6Z2V0Q2xhc3NpY1RoZW1lRGF0YShSZW5kZXJPYmplY3QqIG8sIENvbnRy
b2xTdWJQYXJ0IHN1YlBhcnQpCitUaGVtZURhdGEgUmVuZGVyVGhlbWVXaW46OmdldENsYXNzaWNU
aGVtZURhdGEoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBDb250cm9sU3ViUGFydCBzdWJQYXJ0KQog
ewogICAgIFRoZW1lRGF0YSByZXN1bHQ7Ci0gICAgc3dpdGNoIChvLT5zdHlsZSgpLmFwcGVhcmFu
Y2UoKSkgeworICAgIHN3aXRjaCAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgewogICAgICAgICBj
YXNlIFB1c2hCdXR0b25QYXJ0OgogICAgICAgICBjYXNlIEJ1dHRvblBhcnQ6CiAgICAgICAgIGNh
c2UgRGVmYXVsdEJ1dHRvblBhcnQ6CkBAIC01OTcsMTMgKzU5NywxMyBAQCBUaGVtZURhdGEgUmVu
ZGVyVGhlbWVXaW46OmdldENsYXNzaWNUaGVtZURhdGEoUmVuZGVyT2JqZWN0KiBvLCBDb250cm9s
U3ViUGFydCBzdQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVRoZW1lRGF0YSBSZW5kZXJUaGVt
ZVdpbjo6Z2V0VGhlbWVEYXRhKFJlbmRlck9iamVjdCogbywgQ29udHJvbFN1YlBhcnQgc3ViUGFy
dCkKK1RoZW1lRGF0YSBSZW5kZXJUaGVtZVdpbjo6Z2V0VGhlbWVEYXRhKGNvbnN0IFJlbmRlck9i
amVjdCYgbywgQ29udHJvbFN1YlBhcnQgc3ViUGFydCkKIHsKICAgICBpZiAoIWhhdmVUaGVtZSkK
ICAgICAgICAgcmV0dXJuIGdldENsYXNzaWNUaGVtZURhdGEobywgc3ViUGFydCk7CiAKICAgICBU
aGVtZURhdGEgcmVzdWx0OwotICAgIHN3aXRjaCAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkpIHsK
KyAgICBzd2l0Y2ggKG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkpIHsKICAgICAgICAgY2FzZSBQdXNo
QnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgogICAgICAgICBjYXNlIERlZmF1
bHRCdXR0b25QYXJ0OgpAQCAtNjE4LDcgKzYxOCw3IEBAIFRoZW1lRGF0YSBSZW5kZXJUaGVtZVdp
bjo6Z2V0VGhlbWVEYXRhKFJlbmRlck9iamVjdCogbywgQ29udHJvbFN1YlBhcnQgc3ViUGFydCkK
ICAgICAgICAgY2FzZSBNZW51bGlzdEJ1dHRvblBhcnQ6IHsKICAgICAgICAgICAgIGNvbnN0IGJv
b2wgaXNWaXN0YU9yTGF0ZXIgPSAod2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dzVmlzdGEpOwog
ICAgICAgICAgICAgcmVzdWx0Lm1fcGFydCA9IGlzVmlzdGFPckxhdGVyID8gQ1BfRFJPUERPV05C
VVRUT05SSUdIVCA6IENQX0RST1BET1dOQlVUVE9OOwotICAgICAgICAgICAgaWYgKGlzVmlzdGFP
ckxhdGVyICYmIG8tPmZyYW1lKCkuc2V0dGluZ3MoKS5hcHBsaWNhdGlvbkNocm9tZU1vZGUoKSkg
eworICAgICAgICAgICAgaWYgKGlzVmlzdGFPckxhdGVyICYmIG8uZnJhbWUoKS5zZXR0aW5ncygp
LmFwcGxpY2F0aW9uQ2hyb21lTW9kZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlICJyZWFk
b25seSIgbG9vayB3ZSB1c2UgaW4gYXBwbGljYXRpb24gY2hyb21lIG1vZGUKICAgICAgICAgICAg
ICAgICAvLyBvbmx5IHVzZXMgYSAibm9ybWFsIiBsb29rIGZvciB0aGUgZHJvcCBkb3duIGJ1dHRv
bi4KICAgICAgICAgICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFRTX05PUk1BTDsKQEAgLTY2NSw3
ICs2NjUsNyBAQCBUaGVtZURhdGEgUmVuZGVyVGhlbWVXaW46OmdldFRoZW1lRGF0YShSZW5kZXJP
YmplY3QqIG8sIENvbnRyb2xTdWJQYXJ0IHN1YlBhcnQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIHZvaWQgZHJhd0NvbnRyb2woR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5k
ZXJPYmplY3QqIG8sIEhBTkRMRSB0aGVtZSwgY29uc3QgVGhlbWVEYXRhJiB0aGVtZURhdGEsIGNv
bnN0IEludFJlY3QmIHIpCitzdGF0aWMgdm9pZCBkcmF3Q29udHJvbChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCYgbywgSEFORExFIHRoZW1lLCBjb25zdCBUaGVt
ZURhdGEmIHRoZW1lRGF0YSwgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBib29sIGFscGhhQmxl
bmQgPSBmYWxzZTsKICAgICBpZiAodGhlbWUpCkBAIC02ODUsMTAgKzY4NSwxMCBAQCBzdGF0aWMg
dm9pZCBkcmF3Q29udHJvbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJlbmRlck9iamVjdCog
bywgSEFORExFIHRoZW1lLAogICAgICAgICB9IGVsc2UgaWYgKHRoZW1lRGF0YS5tX3BhcnQgPT0g
VEtQX1RSQUNLIHx8IHRoZW1lRGF0YS5tX3BhcnQgPT0gVEtQX1RSQUNLVkVSVCkgewogICAgICAg
ICAgICAgOjpEcmF3RWRnZShoZGMsICZ3aWRnZXRSZWN0LCBFREdFX1NVTktFTiwgQkZfUkVDVCB8
IEJGX0FESlVTVCk7CiAgICAgICAgICAgICA6OkZpbGxSZWN0KGhkYywgJndpZGdldFJlY3QsIChI
QlJVU0gpR2V0U3RvY2tPYmplY3QoR1JBWV9CUlVTSCkpOwotICAgICAgICB9IGVsc2UgaWYgKChv
LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0IHx8Ci0g
ICAgICAgICAgICAgICAgICAgIG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1i
VmVydGljYWxQYXJ0KSAmJiAKLSAgICAgICAgICAgICAgICAgICAodGhlbWVEYXRhLm1fcGFydCA9
PSBUS1BfVEhVTUJCT1RUT00gfHwgdGhlbWVEYXRhLm1fcGFydCA9PSBUS1BfVEhVTUJUT1AgfHwg
Ci0gICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX3BhcnQgPT0gVEtQX1RIVU1CTEVGVCB8
fCB0aGVtZURhdGEubV9wYXJ0ID09IFRLUF9USFVNQlJJR0hUKSkgeworICAgICAgICB9IGVsc2Ug
aWYgKChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQK
KyAgICAgICAgfHwgby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2Fs
UGFydCkKKyAgICAgICAgJiYgKHRoZW1lRGF0YS5tX3BhcnQgPT0gVEtQX1RIVU1CQk9UVE9NIHx8
IHRoZW1lRGF0YS5tX3BhcnQgPT0gVEtQX1RIVU1CVE9QCisgICAgICAgIHx8IHRoZW1lRGF0YS5t
X3BhcnQgPT0gVEtQX1RIVU1CTEVGVCB8fCB0aGVtZURhdGEubV9wYXJ0ID09IFRLUF9USFVNQlJJ
R0hUKSkgewogICAgICAgICAgICAgOjpEcmF3RWRnZShoZGMsICZ3aWRnZXRSZWN0LCBFREdFX1JB
SVNFRCwgQkZfUkVDVCB8IEJGX1NPRlQgfCBCRl9NSURETEUgfCBCRl9BREpVU1QpOwogICAgICAg
ICAgICAgaWYgKHRoZW1lRGF0YS5tX3N0YXRlID09IFRVU19ESVNBQkxFRCkgewogICAgICAgICAg
ICAgICAgIHN0YXRpYyBXT1JEIHBhdHRlcm5CaXRzWzhdID0gezB4YWEsIDB4NTUsIDB4YWEsIDB4
NTUsIDB4YWEsIDB4NTUsIDB4YWEsIDB4NTV9OwpAQCAtNzEwLDcgKzcxMCw3IEBAIHN0YXRpYyB2
b2lkIGRyYXdDb250cm9sKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyT2JqZWN0KiBv
LCBIQU5ETEUgdGhlbWUsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAvLyBQdXNoIGJ1dHRvbnMsIGJ1dHRvbnMsIGNoZWNrYm94ZXMgYW5kIHJhZGlvcywgYW5k
IHRoZSBkcm9wZG93biBhcnJvdyBpbiBtZW51bGlzdHMuCi0gICAgICAgICAgICBpZiAoby0+c3R5
bGUoKS5hcHBlYXJhbmNlKCkgPT0gRGVmYXVsdEJ1dHRvblBhcnQpIHsKKyAgICAgICAgICAgIGlm
IChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IERlZmF1bHRCdXR0b25QYXJ0KSB7CiAgICAgICAg
ICAgICAgICAgSEJSVVNIIGJydXNoID0gOjpHZXRTeXNDb2xvckJydXNoKENPTE9SXzNEREtTSEFE
T1cpOwogICAgICAgICAgICAgICAgIDo6RnJhbWVSZWN0KGhkYywgJndpZGdldFJlY3QsIGJydXNo
KTsKICAgICAgICAgICAgICAgICA6OkluZmxhdGVSZWN0KCZ3aWRnZXRSZWN0LCAtMSwgLTEpOwpA
QCAtNzI0LDcgKzcyNCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdDb250cm9sKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgUmVuZGVyT2JqZWN0KiBvLCBIQU5ETEUgdGhlbWUsCiAgICAgICAgIERJQlBp
eGVsRGF0YTo6c2V0UkdCQUJpdG1hcEFscGhhKHdpbmRvd3NDb250ZXh0LmhkYygpLCByLCAyNTUp
OwogfQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVX
aW46OnBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBp
LCBjb25zdCBJbnRSZWN0JiByKQogeyAgCiAgICAgZHJhd0NvbnRyb2woaS5jb250ZXh0LCAgbywg
YnV0dG9uVGhlbWUoKSwgZ2V0VGhlbWVEYXRhKG8pLCByKTsKICAgICByZXR1cm4gZmFsc2U7CkBA
IC03MzksNyArNzM5LDcgQEAgdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0SW5uZXJTcGluQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmUKICAgICBzdHlsZS0+c2V0
TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lV2lu
OjpwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50SW5uZXJTcGlu
QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByKQogewogICAgIC8vIFdlIHNwbGl0IHRoZSBzcGVjaWZpZWQgcmVjdGFuZ2xlIGlu
dG8gdHdvIHZlcnRpY2FsbHkuIFdlIGNhbid0IGRyYXcgYQogICAgIC8vIHNwaW4gYnV0dG9uIG9m
IHdoaWNoIGhlaWdodCBpcyBsZXNzIHRoYW4gMnB4LgpAQCAtNzcxLDE5ICs3NzEsMTkgQEAgdm9p
ZCBSZW5kZXJUaGVtZVdpbjo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoMTMsIEZpeGVkKSk7CiB9CiAKLWJv
b2wgUmVuZGVyVGhlbWVXaW46OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFp
bnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCiB7CiAgICAgZHJhd0NvbnRyb2woaS5jb250ZXh0LCAgbywgdGV4dEZp
ZWxkVGhlbWUoKSwgZ2V0VGhlbWVEYXRhKG8pLCByKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29s
IFJlbmRlclRoZW1lV2luOjpwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
ZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewog
ICAgIEhBTkRMRSB0aGVtZTsKICAgICBpbnQgcGFydDsKICAgICBpZiAoaGF2ZVRoZW1lICYmICh3
aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0YSkpIHsKICAgICAgICAgdGhlbWUgPSBtZW51
TGlzdFRoZW1lKCk7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+ZnJhbWUoKS5zZXR0aW5ncygpLmFw
cGxpY2F0aW9uQ2hyb21lTW9kZSgpKQorICAgICAgICBpZiAocmVuZGVyZXIuZnJhbWUoKS5zZXR0
aW5ncygpLmFwcGxpY2F0aW9uQ2hyb21lTW9kZSgpKQogICAgICAgICAgICAgcGFydCA9IENQX1JF
QURPTkxZOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwYXJ0ID0gQ1BfQk9SREVSOwpAQCAt
NzkyLDcgKzc5Miw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3QoUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWluCiAgICAgICAgIHBhcnQgPSBU
RlBfVEVYVEZJRUxEOwogICAgIH0KIAotICAgIGRyYXdDb250cm9sKHBhaW50SW5mby5jb250ZXh0
LCAgcmVuZGVyZXIsIHRoZW1lLCBUaGVtZURhdGEocGFydCwgZGV0ZXJtaW5lU3RhdGUocmVuZGVy
ZXIpKSwgcmVjdCk7CisgICAgZHJhd0NvbnRyb2wocGFpbnRJbmZvLmNvbnRleHQsIHJlbmRlcmVy
LCB0aGVtZSwgVGhlbWVEYXRhKHBhcnQsIGRldGVybWluZVN0YXRlKHJlbmRlcmVyKSksIHJlY3Qp
OwogICAgIAogICAgIHJldHVybiBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMocmVuZGVy
ZXIsIHBhaW50SW5mbywgcmVjdCk7CiB9CkBAIC04MzQsNyArODM0LDcgQEAgdm9pZCBSZW5kZXJU
aGVtZVdpbjo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBSZW4KICAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOwogfQogCi1ib29sIFJl
bmRlclRoZW1lV2luOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCitib29sIFJlbmRlclRoZW1lV2luOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgLy8gRklYTUU6IERvbid0IG1ha2UgaGFyZGNv
ZGVkIGFzc3VtcHRpb25zIGFib3V0IHRoZSB0aGlja25lc3Mgb2YgdGhlIHRleHRmaWVsZCBib3Jk
ZXIuCiAgICAgaW50IGJvcmRlclRoaWNrbmVzcyA9IGhhdmVUaGVtZSA/IDEgOiAyOwpAQCAtODQz
LDcgKzg0Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3RCdXR0b25EZWNv
cmF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zCiAgICAgLy8gbGVhdmluZyBzcGFj
ZSBmb3IgdGhlIHRleHQgZmllbGQncyAxcHggYm9yZGVyCiAgICAgSW50UmVjdCBidXR0b25SZWN0
KHJlY3QpOwogICAgIGJ1dHRvblJlY3QuaW5mbGF0ZSgtYm9yZGVyVGhpY2tuZXNzKTsKLSAgICBp
ZiAocmVuZGVyZXItPnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gTFRSKQorICAgIGlmIChyZW5kZXJl
ci5zdHlsZSgpLmRpcmVjdGlvbigpID09IExUUikKICAgICAgICAgYnV0dG9uUmVjdC5zZXRYKGJ1
dHRvblJlY3QubWF4WCgpIC0gZHJvcERvd25CdXR0b25XaWR0aCk7CiAgICAgYnV0dG9uUmVjdC5z
ZXRXaWR0aChkcm9wRG93bkJ1dHRvbldpZHRoKTsKIApAQCAtODYxLDE0ICs4NjEsMTQgQEAgYm9v
bCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIGNvbnMKIAogY29uc3QgaW50IHRyYWNrV2lkdGggPSA0OwogCi1ib29s
IFJlbmRlclRoZW1lV2luOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFp
bnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcikKIHsKICAgICBJbnRSZWN0IGJvdW5kcyA9IHI7CiAgICAgCi0gICAg
aWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09ICBTbGlkZXJIb3Jpem9udGFsUGFydCkgewor
ICAgIGlmIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09ICBTbGlkZXJIb3Jpem9udGFsUGFydCkg
ewogICAgICAgICBib3VuZHMuc2V0SGVpZ2h0KHRyYWNrV2lkdGgpOwogICAgICAgICBib3VuZHMu
c2V0WShyLnkoKSArIHIuaGVpZ2h0KCkgLyAyIC0gdHJhY2tXaWR0aCAvIDIpOwotICAgIH0gZWxz
ZSBpZiAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KSB7Cisg
ICAgfSBlbHNlIGlmIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFy
dCkgewogICAgICAgICBib3VuZHMuc2V0V2lkdGgodHJhY2tXaWR0aCk7CiAgICAgICAgIGJvdW5k
cy5zZXRYKHIueCgpICsgci53aWR0aCgpIC8gMiAtIHRyYWNrV2lkdGggLyAyKTsKICAgICB9CkBA
IC04NzcsNyArODc3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTbGlkZXJUcmFjayhS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRl
clRoZW1lV2luOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3Qg
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQogeyAgIAogICAgIGRyYXdDb250cm9sKGku
Y29udGV4dCwgIG8sIHNsaWRlclRoZW1lKCksIGdldFRoZW1lRGF0YShvKSwgcik7CiAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtOTAyLDcgKzkwMiw3IEBAIHZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVz
dFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogI2Vu
ZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRl
clRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3Qg
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIHJldHVybiBwYWludFRleHRG
aWVsZChvLCBpLCByKTsKIH0KQEAgLTkxOSwxNCArOTE5LDE0IEBAIHZvaWQgUmVuZGVyVGhlbWVX
aW46OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
UmVuZGVyCiAgICAgICAgIHN0eWxlLT5zZXRPdXRsaW5lT2Zmc2V0KC0yKTsKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBS
ZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJP
YmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQog
ewogICAgIEludFJlY3QgYm91bmRzID0gcjsKLSAgICBBU1NFUlQoby0+cGFyZW50KCkpOwotICAg
IGlmICghby0+cGFyZW50KCkgfHwgIW8tPnBhcmVudCgpLT5pc0JveCgpKQorICAgIEFTU0VSVChv
LnBhcmVudCgpKTsKKyAgICBpZiAoIW8ucGFyZW50KCkgfHwgIW8ucGFyZW50KCktPmlzQm94KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRl
ckJveCA9IHRvUmVuZGVyQm94KG8tPnBhcmVudCgpKTsKKyAgICBSZW5kZXJCb3gqIHBhcmVudFJl
bmRlckJveCA9IHRvUmVuZGVyQm94KG8ucGFyZW50KCkpOwogCiAgICAgSW50UmVjdCBwYXJlbnRC
b3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOwogICAgIApAQCAtOTQw
LDcgKzk0MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRDYW5jZWxC
dXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluCiAKICAgICBzdGF0aWMgSW1hZ2Uq
IGNhbmNlbEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWwi
KS5sZWFrUmVmKCk7CiAgICAgc3RhdGljIEltYWdlKiBjYW5jZWxQcmVzc2VkSW1hZ2UgPSBJbWFn
ZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbFByZXNzZWQiKS5sZWFrUmVmKCk7
Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZShpc1ByZXNzZWQobykgPyBjYW5jZWxQ
cmVzc2VkSW1hZ2UgOiBjYW5jZWxJbWFnZSwgby0+c3R5bGUoKS5jb2xvclNwYWNlKCksIGJvdW5k
cyk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZShpc1ByZXNzZWQobykgPyBjYW5j
ZWxQcmVzc2VkSW1hZ2UgOiBjYW5jZWxJbWFnZSwgby5zdHlsZSgpLmNvbG9yU3BhY2UoKSwgYm91
bmRzKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTk3MCwxNCArOTcwLDE0IEBAIHZvaWQg
UmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5
bGUoU3R5bGVSZXNvbHZlciosCiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVy
U2l6ZSwgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uUGFydChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIEludFJl
Y3QgYm91bmRzID0gcjsKLSAgICBBU1NFUlQoby0+cGFyZW50KCkpOwotICAgIGlmICghby0+cGFy
ZW50KCkgfHwgIW8tPnBhcmVudCgpLT5pc0JveCgpKQorICAgIEFTU0VSVChvLnBhcmVudCgpKTsK
KyAgICBpZiAoIW8ucGFyZW50KCkgfHwgIW8ucGFyZW50KCktPmlzQm94KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKLSAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVu
ZGVyQm94KG8tPnBhcmVudCgpKTsKKyAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRv
UmVuZGVyQm94KG8ucGFyZW50KCkpOwogICAgIEludFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVu
ZGVyQm94LT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhl
IHNjYWxlZCBkZWNvcmF0aW9uIHN0YXlzIHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVu
dCdzIGJveApAQCAtOTg5LDcgKzk4OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0KiBvLCBjb25zCiAgICAg
Ym91bmRzLnNldFkocGFyZW50Qm94LnkoKSArIChwYXJlbnRCb3guaGVpZ2h0KCkgLSBib3VuZHMu
aGVpZ2h0KCkgKyAxKSAvIDIpOwogICAgIAogICAgIHN0YXRpYyBJbWFnZSogbWFnbmlmaWVySW1h
Z2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaE1hZ25pZmllciIpLmxlYWtS
ZWYoKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKG1hZ25pZmllckltYWdlLCBv
LT5zdHlsZSgpLmNvbG9yU3BhY2UoKSwgYm91bmRzKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+
ZHJhd0ltYWdlKG1hZ25pZmllckltYWdlLCBvLnN0eWxlKCkuY29sb3JTcGFjZSgpLCBib3VuZHMp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTAwNCwxNiArMTAwNCwxNiBAQCB2b2lkIFJl
bmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyUwogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmllckhl
aWdodCwgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgSW50UmVjdCBib3VuZHMgPSByOwot
ICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7Ci0gICAgaWYgKCFvLT5wYXJlbnQoKSkKKyAgICBBU1NF
UlQoby5wYXJlbnQoKSk7CisgICAgaWYgKCFvLnBhcmVudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCFvLT5wYXJlbnQoKSB8fCAhby0+cGFyZW50KCktPmlzQm94KCkpCisgICAg
aWYgKCFvLnBhcmVudCgpIHx8ICFvLnBhcmVudCgpLT5pc0JveCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCi0gICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRlckJv
eChvLT5wYXJlbnQoKSk7CisgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRl
ckJveChvLnBhcmVudCgpKTsKICAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJv
eC0+YWJzb2x1dGVDb250ZW50Qm94KCk7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2Fs
ZWQgZGVjb3JhdGlvbiB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94CkBAIC0xMDI1LDcgKzEw
MjUsNyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
bihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SQogICAgIGJvdW5kcy5zZXRZKHBhcmVudEJv
eC55KCkgKyAocGFyZW50Qm94LmhlaWdodCgpIC0gYm91bmRzLmhlaWdodCgpICsgMSkgLyAyKTsK
IAogICAgIHN0YXRpYyBJbWFnZSogbWFnbmlmaWVySW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3Jt
UmVzb3VyY2UoInNlYXJjaE1hZ25pZmllclJlc3VsdHMiKS5sZWFrUmVmKCk7Ci0gICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmRyYXdJbWFnZShtYWduaWZpZXJJbWFnZSwgby0+c3R5bGUoKS5jb2xvclNw
YWNlKCksIGJvdW5kcyk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZShtYWduaWZp
ZXJJbWFnZSwgby5zdHlsZSgpLmNvbG9yU3BhY2UoKSwgYm91bmRzKTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKQEAgLTExNzcsMTIgKzExNzcsMTIgQEAgSW50U2l6ZSBSZW5kZXJUaGVtZVdpbjo6
bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwgY29uc3QgSW50UmVjdCYgYm8K
ICAgICByZXR1cm4gYm91bmRzLnNpemUoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFp
bnRNZXRlcihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lV2luOjpwYWludE1l
dGVyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoIXJlbmRlck9iamVjdC0+
aXNNZXRlcigpKQorICAgIGlmICghcmVuZGVyT2JqZWN0LmlzTWV0ZXIoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBIVE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gdG9SZW5kZXJNZXRl
cihyZW5kZXJPYmplY3QpLT5tZXRlckVsZW1lbnQoKTsKKyAgICBIVE1MTWV0ZXJFbGVtZW50KiBl
bGVtZW50ID0gdG9SZW5kZXJNZXRlcigmcmVuZGVyT2JqZWN0KS0+bWV0ZXJFbGVtZW50KCk7CiAK
ICAgICBUaGVtZURhdGEgdGhlbWUgPSBnZXRUaGVtZURhdGEocmVuZGVyT2JqZWN0KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uaAppbmRleCAxNzljZjMwNWQ5ODU3
YTAwZmE0MWUzZDk3NGQ3ZjMyZTBjMjhhZWY1Li5mNTE0MjZkMmIzNjBiOGNkOGU4Y2UwMjk2ZTk3
MTdhYzkzNjYwZmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVXaW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4u
aApAQCAtNjYsNTEgKzY2LDUxIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9u
dChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKICAgICB2aXJ0dWFsIENvbG9y
IHN5c3RlbUNvbG9yKENTU1ZhbHVlSUQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50
Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHIpCisgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0
JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCiAgICAgeyByZXR1cm4g
cGFpbnRCdXR0b24obywgaSwgcik7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXpl
KFJlbmRlclN0eWxlKikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKICAgICB7IHJldHVybiBwYWludEJ1dHRvbihvLCBp
LCByKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAogICAgIHsgcmV0dXJuIHNldENoZWNrYm94U2l6ZShzdHlsZSk7IH0KIAotICAgIHZp
cnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGlu
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCBib29s
IHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCBi
b29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVu
ZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCiAgICAg
eyByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVM
aXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2so
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOwot
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRT
bGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIGJvb2wgcG9wdXBPcHRpb25TdXBwb3J0c1RleHRJbmRlbnQoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVj
b3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
UGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQo
KTsKIApAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFNpemUgbWV0
ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0KSBj
b25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBib29sIHBhaW50TWV0ZXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1ldGVyKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlk
ZTsKICNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFNob3dQbGFjZWhvbGRlcldoZW5G
b2N1c2VkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTUxLDE2ICsxNTEsMTYgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUqKSBjb25zdDsK
ICAgICB2b2lkIGNsb3NlKCk7CiAKLSAgICB1bnNpZ25lZCBkZXRlcm1pbmVTdGF0ZShSZW5kZXJP
YmplY3QqKTsKLSAgICB1bnNpZ25lZCBkZXRlcm1pbmVDbGFzc2ljU3RhdGUoUmVuZGVyT2JqZWN0
KiwgQ29udHJvbFN1YlBhcnQgPSBOb25lKTsKLSAgICB1bnNpZ25lZCBkZXRlcm1pbmVTbGlkZXJU
aHVtYlN0YXRlKFJlbmRlck9iamVjdCopOwotICAgIHVuc2lnbmVkIGRldGVybWluZUJ1dHRvblN0
YXRlKFJlbmRlck9iamVjdCopOwotICAgIHVuc2lnbmVkIGRldGVybWluZVNwaW5CdXR0b25TdGF0
ZShSZW5kZXJPYmplY3QqLCBDb250cm9sU3ViUGFydCA9IE5vbmUpOworICAgIHVuc2lnbmVkIGRl
dGVybWluZVN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYpOworICAgIHVuc2lnbmVkIGRldGVybWlu
ZUNsYXNzaWNTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmLCBDb250cm9sU3ViUGFydCA9IE5vbmUp
OworICAgIHVuc2lnbmVkIGRldGVybWluZVNsaWRlclRodW1iU3RhdGUoY29uc3QgUmVuZGVyT2Jq
ZWN0Jik7CisgICAgdW5zaWduZWQgZGV0ZXJtaW5lQnV0dG9uU3RhdGUoY29uc3QgUmVuZGVyT2Jq
ZWN0Jik7CisgICAgdW5zaWduZWQgZGV0ZXJtaW5lU3BpbkJ1dHRvblN0YXRlKGNvbnN0IFJlbmRl
ck9iamVjdCYsIENvbnRyb2xTdWJQYXJ0ID0gTm9uZSk7CiAKICAgICBib29sIHN1cHBvcnRzRm9j
dXMoQ29udHJvbFBhcnQpIGNvbnN0OwogCi0gICAgVGhlbWVEYXRhIGdldFRoZW1lRGF0YShSZW5k
ZXJPYmplY3QqLCBDb250cm9sU3ViUGFydCA9IE5vbmUpOwotICAgIFRoZW1lRGF0YSBnZXRDbGFz
c2ljVGhlbWVEYXRhKFJlbmRlck9iamVjdCogbywgQ29udHJvbFN1YlBhcnQgPSBOb25lKTsKKyAg
ICBUaGVtZURhdGEgZ2V0VGhlbWVEYXRhKGNvbnN0IFJlbmRlck9iamVjdCYsIENvbnRyb2xTdWJQ
YXJ0ID0gTm9uZSk7CisgICAgVGhlbWVEYXRhIGdldENsYXNzaWNUaGVtZURhdGEoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgQ29udHJvbFN1YlBhcnQgPSBOb25lKTsKIAogICAgIEhBTkRMRSBidXR0b25U
aGVtZSgpIGNvbnN0OwogICAgIEhBTkRMRSB0ZXh0RmllbGRUaGVtZSgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230045</attachid>
            <date>2014-04-23 21:23:43 -0700</date>
            <delta_ts>2014-04-23 21:49:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132037-20140423212321.patch</filename>
            <type>text/plain</type>
            <size>220689</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3Njc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWJlMGU5NWJiNmE3Mzcy
YTdkMmRmZjY2YjI1ZjAyYzhhMjEwODViNC4uMTI4YTk2NGQ2OWFmYzYzNjU2MmRmMGQ2MjY1NmEw
ZjhlMDVhMmQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MiBAQAorMjAxNC0wNC0yMyAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFRyYW5zaXRpb24gUmVuZGVy
VGhlbWUgQVBJIGZyb20gUmVuZGVyT2JqZWN0KiB0byBjb25zdCBSZW5kZXJPYmplY3QmCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzIwMzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEdvcmFuIEtsaW5nLgorCisgICAgICAgIFVzaW5nIGNv
bnN0IHJlZmVyZW5jZXMgcHJvdmlkZXMgYmV0dGVyIGVuY2Fwc3VsYXRpb24gYW5kIGltcHJvdmUg
c2VjdXJpdHkuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmJvdW5kaW5nQm94Rm9yUXVhZHMpOgorICAgICAgICAqIGRv
bS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEFjdGl2ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRIb3ZlcmVkKToKKyAgICAgICAgKiBlZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpm
b2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250
cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpyZWFkT25seUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRN
TElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpz
ZXRDaGVja2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0
ZXJtaW5hdGUpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmFkZFZpc3VhbE92ZXJmbG93RnJvbVRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCdXR0b246OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVw
bG9hZENvbnRyb2w6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdp
b25zVmlzdWFsT3ZlcmZsb3dGcm9tVGhlbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpkcmF3TGluZUZvckJv
eFNpZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJv
Z3Jlc3M6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVt
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50Qm9yZGVyT25seSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6YWRqdXN0UmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnN0
YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dXBkYXRlQ29udHJv
bFN0YXRlc0ZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpleHRy
YWN0Q29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lOjppc0FjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXNDaGVja2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0luZGV0ZXJtaW5hdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Ojppc1ByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0
dG9uUGFydFByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzUmVhZE9u
bHlDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0hvdmVyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRGVmYXVsdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRJbnB1dEZpZWxkU3BlZWNoQnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmNvbnRyb2xTdXBw
b3J0c1RpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludENhcHNMb2Nr
SW5kaWNhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEZpbGVVcGxv
YWRJY29uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmltYWdl
Q29udHJvbHNCdXR0b25TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWlu
dENoZWNrYm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFJhZGlvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRJbm5lclNwaW5CdXR0b24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRSYWRpb0RlY29yYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6cGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6cGFpbnRUZXh0QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6cGFpbnRUZXh0QXJlYURlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpw
YWludE1lbnVMaXN0RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50U3F1YXJlQnV0dG9uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6cGFpbnRTZWFyY2hGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6
cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlhRnVsbHNj
cmVlbkJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRpYVBs
YXlCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFPdmVy
bGF5UGxheUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRp
YU11dGVCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFT
ZWVrQmFja0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRp
YVNlZWtGb3J3YXJkQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWlu
dE1lZGlhU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50
TWVkaWFTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRN
ZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFSZXdpbmRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFDb250cm9sc0Jh
Y2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFDdXJy
ZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRpYVRpbWVS
ZW1haW5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFGdWxs
U2NyZWVuVm9sdW1lU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnBhaW50TWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWU6OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEltYWdlQ29udHJvbHNCdXR0b24pOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGRSb3Vu
ZGVkQm9yZGVyQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRD
aGVja2JveERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpi
YXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWlu
dFJhZGlvRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBh
aW50VGV4dEZpZWxkRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJ
T1M6OnBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRodW1iRGVjb3JhdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRCdXR0b25EZWNvcmF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50RmlsZVVwbG9hZElj
b25EZWNvcmF0aW9ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6dXBkYXRlQWN0aXZlU3RhdGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lTWFjOjpkb2N1bWVudFZpZXdGb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OmFkanVzdFJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjpjb252ZXJ0VG9QYWludGluZ1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnVwZGF0ZUNoZWNrZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjp1cGRhdGVGb2N1c2VkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnVwZGF0ZVByZXNzZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6Y29udHJvbFN1cHBvcnRzVGludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
OjpwYWludENhcHNMb2NrSW5kaWNhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjpwYWludFRleHRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpw
YWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1l
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwcm9ncmVzc0JhclJlY3RG
b3JCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50UHJvZ3Jl
c3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RC
dXR0b25HcmFkaWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50
TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnNldFNlYXJjaENlbGxTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFw
c2hvdHRlZFBsdWdpbk92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnBhaW50SW1hZ2VDb250cm9sc0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6aW1hZ2VDb250cm9sc0J1dHRvblNpemUpOgorCiAyMDE0LTA0LTIyICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGFuZ2UgSW1hZ2UgQ29udHJvbHMg
cmVwbGFjZW1lbnQgdG8gdXNlIHNlbGVjdGlvbiBhbmQgcGFzdGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDYxZjc0
YzliOGM5MWI0YmZlNWI2ODFiMzZmYzhlYWI2YmE5ZTIyZjcuLmI4ZDcyMDdmOTQ2ZWQ2MGExZDQ0
MGVjMzY0YTQwMWQ1ZDU4Yzk2NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNzExLDcgKzcxMSw3IEBAIEludFJl
Y3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6Ym91bmRpbmdCb3hGb3JRdWFkcyhSZW5kZXJPYmplY3Qq
IG9iaiwgY29uc3QgVmVjdG9yCiAgICAgICAgIEludFJlY3QgciA9IHF1YWQuZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKICAgICAgICAgaWYgKCFyLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYg
KG9iai0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICAgICAgb2JqLT50aGVt
ZSgpLmFkanVzdFJlcGFpbnRSZWN0KG9iaiwgcik7CisgICAgICAgICAgICAgICAgb2JqLT50aGVt
ZSgpLmFkanVzdFJlcGFpbnRSZWN0KCpvYmosIHIpOwogICAgICAgICAgICAgcmVzdWx0LnVuaXRl
KHIpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDFiYjg5OGZh
MWFjMThjOGMyYmY1ZjkyYjFmOTM2Zjk4MGExYzY3YTIuLmFjZGQzNjA2YTA4YzU3NDBlZTViMzU2
MTEzNTJlNWZmYTAzZWZkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTQ4OCw3ICs0ODgs
NyBAQCB2b2lkIEVsZW1lbnQ6OnNldEFjdGl2ZShib29sIGZsYWcsIGJvb2wgcGF1c2UpCiAgICAg
aWYgKHJlYWN0c1RvUHJlc3MpCiAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIAotICAg
IGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAmJiByZW5kZXJlcigpLT50
aGVtZSgpLnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBDb250cm9sU3RhdGVzOjpQcmVzc2VkU3Rh
dGUpKQorICAgIGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAmJiByZW5k
ZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6
UHJlc3NlZFN0YXRlKSkKICAgICAgICAgcmVhY3RzVG9QcmVzcyA9IHRydWU7CiAKICAgICAvLyBU
aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgYSBmZWF0dXJlIHRoYXQgb25seSB3
b3JrcyBpZiB0aGUKQEAgLTU1NCw3ICs1NTQsNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEhvdmVyZWQo
Ym9vbCBmbGFnKQogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKICAgICBpZiAocmVu
ZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIHJlbmRlcmVyKCktPnRo
ZW1lKCkuc3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkhvdmVyU3RhdGUp
OworICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwg
Q29udHJvbFN0YXRlczo6SG92ZXJTdGF0ZSk7CiB9CiAKIHZvaWQgRWxlbWVudDo6c2Nyb2xsSW50
b1ZpZXcoYm9vbCBhbGlnblRvVG9wKSAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAKaW5kZXggNDdiNmJlNjYwYWE2YzQ4OWE0NGE2Y2I4YTQ1ZWY2ZDQzZTg0NDkwYS4u
YmFjMmRmOWMxODcwN2FlYmViYzRiNmMxOTRjMDNjM2M1ZTBlY2NlMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTE3NDksNyArMTc0OSw3IEBAIHZvaWQg
RnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAgICAgIGVs
ZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgaWYgKHJlbmRlcmVy
ICYmIHJlbmRlcmVyLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgICAgICAgICBy
ZW5kZXJlci0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIsIENvbnRyb2xTdGF0ZXM6OkZv
Y3VzU3RhdGUpOworICAgICAgICAgICAgICAgIHJlbmRlcmVyLT50aGVtZSgpLnN0YXRlQ2hhbmdl
ZCgqcmVuZGVyZXIsIENvbnRyb2xTdGF0ZXM6OkZvY3VzU3RhdGUpOwogICAgIH0KICNlbmRpZgog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5k
ZXggZTBiODVkNTk3MGY4OGJkNGMwNTEyZjU3NGMyYWIxZDdmMGNhN2ZkYi4uODEwY2JhZDk3YWZl
NDhiOTRjN2NkMDU2NGIxYjg3MzY3NzQ3MWIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCgpCiAgICAgc2V0TmVlZHNX
aWxsVmFsaWRhdGVDaGVjaygpOwogICAgIGRpZEFmZmVjdFNlbGVjdG9yKEFmZmVjdGVkU2VsZWN0
b3JEaXNhYmxlZCB8IEFmZmVjdGVkU2VsZWN0b3JFbmFibGVkKTsKICAgICBpZiAocmVuZGVyZXIo
KSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgcmVuZGVy
ZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6RW5h
YmxlZFN0YXRlKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJl
bmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkVuYWJsZWRTdGF0ZSk7CiB9CiAKIHZvaWQgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6cmVhZE9ubHlBdHRyaWJ1dGVDaGFuZ2VkKCkKQEAgLTE2Myw3ICsx
NjMsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlYWRPbmx5QXR0cmlidXRlQ2hh
bmdlZCgpCiAgICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOwogICAgIHNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhh
c0FwcGVhcmFuY2UoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQo
cmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6UmVhZE9ubHlTdGF0ZSk7CisgICAgICAgIHJlbmRl
cmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlcigpLCBDb250cm9sU3RhdGVzOjpS
ZWFkT25seVN0YXRlKTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXF1aXJl
ZEF0dHJpYnV0ZUNoYW5nZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAKaW5kZXggNzAwMDI4YmI3MWUwMGIyNDZkZTk2NmRjYjEwMzJmODExOWQzY2I2Mi4uN2NiNmMy
MzA4MWFkZDNiMmI4ODJhYWY3NDQ2MTk0Y2IyM2ZkNGZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC04NTgsNyArODU4LDcgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpzZXRDaGVja2VkKGJvb2wgbm93Q2hlY2tlZCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlv
ciBldmVudEIKICAgICBpZiAoQ2hlY2tlZFJhZGlvQnV0dG9ucyogYnV0dG9ucyA9IGNoZWNrZWRS
YWRpb0J1dHRvbnMoKSkKICAgICAgICAgICAgIGJ1dHRvbnMtPnVwZGF0ZUNoZWNrZWRTdGF0ZSh0
aGlzKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVh
cmFuY2UoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVy
ZXIoKSwgQ29udHJvbFN0YXRlczo6Q2hlY2tlZFN0YXRlKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+
dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkNoZWNrZWRT
dGF0ZSk7CiAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiAKICAgICAvLyBJZGVhbGx5IHdl
J2QgZG8gdGhpcyBmcm9tIHRoZSByZW5kZXIgdHJlZSAobWF0Y2hpbmcKQEAgLTg5Miw3ICs4OTIs
NyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0ZXJtaW5hdGUoYm9vbCBuZXdWYWx1
ZSkKICAgICBkaWRBZmZlY3RTZWxlY3RvcihBZmZlY3RlZFNlbGVjdG9ySW5kZXRlcm1pbmF0ZSk7
CiAKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFu
Y2UoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIo
KSwgQ29udHJvbFN0YXRlczo6Q2hlY2tlZFN0YXRlKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+dGhl
bWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkNoZWNrZWRTdGF0
ZSk7CiB9CiAKIGludCBIVE1MSW5wdXRFbGVtZW50OjpzaXplKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKaW5kZXggNDlmNDhiZjM4MWU5YjQ1MDQ5NDRm
YmEwNTQwNWE5OWQ0NzkzMTY5My4uMjE5ZjNhMjUzMjRkNzExOGFiOTA5MTIwN2M4NDNmMTRiODhj
MDM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKQEAgLTE5
NSw3ICsxOTUsNyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdAogICAgICAgICBpZiAob2xkRGlz
YWJsZWQgIT0gbV9kaXNhYmxlZCkgewogICAgICAgICAgICAgZGlkQWZmZWN0U2VsZWN0b3IoQWZm
ZWN0ZWRTZWxlY3RvckRpc2FibGVkIHwgQWZmZWN0ZWRTZWxlY3RvckVuYWJsZWQpOwogICAgICAg
ICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVu
ZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6RW5hYmxlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICBy
ZW5kZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRl
czo6RW5hYmxlZFN0YXRlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBzZWxl
Y3RlZEF0dHIpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBtYXRjaCB3aGF0IHRo
ZSBIVE1MIHNwZWNpZmljYXRpb24gc2F5cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
ZmwvUmVuZGVyVGhlbWVFZmwuY3BwCmluZGV4IDZmYzQ2M2VkYTBjNmQ4YmYxMjYzNWI1MTI3NjMy
YmNjODQ0Mjc5MWEuLjhlMDQ1ZWIwNDMxODg3ZGQ3YjQzNDk3N2JiYTA1ZDE4ZDdlNTc4ZWUgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcApAQCAt
Mjk5LDEzICsyOTksMTMgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplU3RhdGVGcm9t
Rm9ybShFdmFzX09iamVjdCogb2JqZWN0LCBjb25zdCBDb250cm9sU3QKICAgICAgICAgZWRqZV9v
YmplY3Rfc2lnbmFsX2VtaXQob2JqZWN0LCAic3R5bGVkIiwgIiIpOwogfQogCi12b2lkIFJlbmRl
clRoZW1lRWZsOjphcHBseUVkamVSVExTdGF0ZShFdmFzX09iamVjdCogZWRqZSwgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFJl
bmRlclRoZW1lRWZsOjphcHBseUVkamVSVExTdGF0ZShFdmFzX09iamVjdCogZWRqZSwgY29uc3Qg
UmVuZGVyT2JqZWN0JiBvYmplY3QsIEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgaWYgKHR5cGUgPT0gU2xpZGVyVmVydGljYWwgfHwgdHlwZSA9PSBTbGlkZXJIb3Jp
em9udGFsKSB7Ci0gICAgICAgIGlmICghb2JqZWN0LT5pc1NsaWRlcigpKQorICAgICAgICBpZiAo
IW9iamVjdC5pc1NsaWRlcigpKQogICAgICAgICAgICAgcmV0dXJuOyAvLyBwcm9iYWJseSBoYXZl
IC13ZWJraXQtYXBwZWFyYW5jZTogc2xpZGVyLi4KIAotICAgICAgICBSZW5kZXJTbGlkZXIqIHJl
bmRlclNsaWRlciA9IHRvUmVuZGVyU2xpZGVyKG9iamVjdCk7CisgICAgICAgIGNvbnN0IFJlbmRl
clNsaWRlciogcmVuZGVyU2xpZGVyID0gdG9SZW5kZXJTbGlkZXIoJm9iamVjdCk7CiAgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gcmVuZGVyU2xpZGVyLT5lbGVtZW50KCk7CiAgICAg
ICAgIGRvdWJsZSB2YWx1ZVJhbmdlID0gaW5wdXQubWF4aW11bSgpIC0gaW5wdXQubWluaW11bSgp
OwogCkBAIC0zMTYsNyArMzE2LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplUlRM
U3RhdGUoRXZhc19PYmplY3QqIGVkamUsIFJlbmRlck9iamVjdCogb2JqZWN0LAogICAgICAgICAv
LyBncm93cyBmcm9tIHRoZSBlbmQgb2YgdGhlIHNsaWRlciBvciBmcm9tIHRoZSBiZWdpbm5pbmcu
IE9uIHZlcnRpY2FsCiAgICAgICAgIC8vIHNsaWRlcnMsIGl0IHNob3VsZCBhbHdheXMgYmUgdGhl
IHNhbWUgYW5kIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5CiAgICAgICAgIC8vIHRleHQgZGlyZWN0
aW9uIHNldHRpbmdzLgotICAgICAgICBpZiAob2JqZWN0LT5zdHlsZSgpLmRpcmVjdGlvbigpID09
IFJUTCB8fCB0eXBlID09IFNsaWRlclZlcnRpY2FsKQorICAgICAgICBpZiAob2JqZWN0LnN0eWxl
KCkuZGlyZWN0aW9uKCkgPT0gUlRMIHx8IHR5cGUgPT0gU2xpZGVyVmVydGljYWwpCiAgICAgICAg
ICAgICBtc2ctPnZhbFswXSA9IDE7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1zZy0+dmFs
WzBdID0gMDsKQEAgLTMyNSw3ICszMjUsNyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseUVk
amVSVExTdGF0ZShFdmFzX09iamVjdCogZWRqZSwgUmVuZGVyT2JqZWN0KiBvYmplY3QsCiAgICAg
ICAgIGVkamVfb2JqZWN0X21lc3NhZ2Vfc2VuZChlZGplLCBFREpFX01FU1NBR0VfRkxPQVRfU0VU
LCAwLCBtc2cuZ2V0KCkpOwogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQogICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSBQcm9ncmVzc0JhcikgewotICAgICAgICBSZW5kZXJQcm9ncmVzcyogcmVu
ZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKG9iamVjdCk7CisgICAgICAgIGNvbnN0IFJl
bmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3MoJm9iamVjdCk7
CiAKICAgICAgICAgaW50IG1heCA9IHJlY3Qud2lkdGgoKTsKICAgICAgICAgZG91YmxlIHZhbHVl
ID0gcmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCk7CkBAIC0zMzMsNyArMzMzLDcgQEAgdm9pZCBS
ZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplUlRMU3RhdGUoRXZhc19PYmplY3QqIGVkamUsIFJlbmRl
ck9iamVjdCogb2JqZWN0LAogICAgICAgICBPd25QdHI8RWRqZV9NZXNzYWdlX0Zsb2F0X1NldD4g
bXNnID0gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RWRqZV9NZXNzYWdlX0Zsb2F0X1NldCo+KDo6b3Bl
cmF0b3IgbmV3IChzaXplb2YoRWRqZV9NZXNzYWdlX0Zsb2F0X1NldCkgKyBzaXplb2YoZG91Ymxl
KSkpKTsKICAgICAgICAgbXNnLT5jb3VudCA9IDI7CiAKLSAgICAgICAgaWYgKG9iamVjdC0+c3R5
bGUoKS5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgICAgIGlmIChvYmplY3Quc3R5bGUoKS5kaXJl
Y3Rpb24oKSA9PSBSVEwpCiAgICAgICAgICAgICBtc2ctPnZhbFswXSA9ICgxLjAgLSB2YWx1ZSkg
KiBtYXg7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1zZy0+dmFsWzBdID0gMDsKQEAgLTM1
MCw3ICszNTAsNyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjppc0NvbnRyb2xTdHlsZWQoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJgogICAgIHJldHVybiBSZW5kZXJU
aGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91
bmRDb2xvcikgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQ7CiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGhlbWVQYXJ0KFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBGb3JtVHlwZSB0eXBlLCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRoZW1lUGFydChjb25zdCBSZW5kZXJP
YmplY3QmIG9iamVjdCwgRm9ybVR5cGUgdHlwZSwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQogewogICAgIGxvYWRUaGVtZUlmTmVlZGVkKCk7CiAgICAgX0FTU0VS
VF9PTl9SRUxFQVNFX1JFVFVSTl9WQUwoZWRqZSgpLCBmYWxzZSwgIkNvdWxkIG5vdCBwYWludCBu
YXRpdmUgSFRNTCBwYXJ0IGR1ZSB0byBtaXNzaW5nIHRoZW1lLiIpOwpAQCAtMzU5LDcgKzM1OSw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGhlbWVQYXJ0KFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBGb3JtVHlwZSB0eXBlLCBjb25zdCBQCiAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYm9vbCBoYXZlQmFja2dyb3VuZENvbG9yID0gaXNDb250cm9sU3R5
bGVkKCZvYmplY3QtPnN0eWxlKCksIG9iamVjdC0+c3R5bGUoKS5ib3JkZXIoKSwgKm9iamVjdC0+
c3R5bGUoKS5iYWNrZ3JvdW5kTGF5ZXJzKCksIENvbG9yOjp3aGl0ZSk7CisgICAgYm9vbCBoYXZl
QmFja2dyb3VuZENvbG9yID0gaXNDb250cm9sU3R5bGVkKCZvYmplY3Quc3R5bGUoKSwgb2JqZWN0
LnN0eWxlKCkuYm9yZGVyKCksICpvYmplY3Quc3R5bGUoKS5iYWNrZ3JvdW5kTGF5ZXJzKCksIENv
bG9yOjp3aGl0ZSk7CiAgICAgQ29udHJvbFN0YXRlcyBzdGF0ZXMoZXh0cmFjdENvbnRyb2xTdGF0
ZXNGb3JSZW5kZXJlcihvYmplY3QpKTsKICAgICBhcHBseUVkamVTdGF0ZUZyb21Gb3JtKGVudHJ5
LT5lZGplKCksICZzdGF0ZXMsIGhhdmVCYWNrZ3JvdW5kQ29sb3IpOwogCkBAIC02MzEsMTkgKzYz
MSwxOSBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAgICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFw
cGVhcmFuY2UoKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OmNvbnRyb2xTdXBwb3J0c1Rp
bnRzKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZUVm
bDo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGlzRW5hYmxlZChvYmplY3QpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVF
Zmw6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpIGNvbnN0Citp
bnQgUmVuZGVyVGhlbWVFZmw6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JiBv
YmplY3QpIGNvbnN0CiB7Ci0gICAgaWYgKCFvYmplY3QtPmlzQm94KCkpCisgICAgaWYgKCFvYmpl
Y3QuaXNCb3goKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAob2JqZWN0LT5zdHlsZSgp
LmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQKLSAgICB8fCAgb2JqZWN0LT5zdHlsZSgpLmFw
cGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpCi0gICAgICAgIHJldHVybiB0b1JlbmRlckJveChvYmpl
Y3QpLT5tYXJnaW5Ub3AoKSArIHRvUmVuZGVyQm94KG9iamVjdCktPmhlaWdodCgpIC0gMzsKKyAg
ICBpZiAob2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydAorICAgIHx8
ICBvYmplY3Quc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KQorICAgICAgICByZXR1
cm4gdG9SZW5kZXJCb3goJm9iamVjdCktPm1hcmdpblRvcCgpICsgdG9SZW5kZXJCb3goJm9iamVj
dCktPmhlaWdodCgpIC0gMzsKIAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3Np
dGlvbihvYmplY3QpOwogfQpAQCAtNjg0LDkgKzY4NCw5IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6
OnN1cHBvcnRzU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9ycygpIGNvbnN0CiAgICAgcmV0dXJuIG1f
c3VwcG9ydHNTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3I7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVF
Zmw6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50
U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
aW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAob2JqZWN0LT5zdHlsZSgpLmFw
cGVhcmFuY2UoKSA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCkKKyAgICBpZiAob2JqZWN0LnN0eWxl
KCkuYXBwZWFyYW5jZSgpID09IFNsaWRlckhvcml6b250YWxQYXJ0KQogICAgICAgICBwYWludFRo
ZW1lUGFydChvYmplY3QsIFNsaWRlckhvcml6b250YWwsIGluZm8sIHJlY3QpOwogICAgIGVsc2UK
ICAgICAgICAgcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBTbGlkZXJWZXJ0aWNhbCwgaW5mbywgcmVj
dCk7CkBAIC03NTUsOSArNzU1LDkgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6c3VwcG9ydHNEYXRh
TGlzdFVJKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSkgY29uc3QKICNlbmRpZgogfQogCi1ib29s
IFJlbmRlclRoZW1lRWZsOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBj
b25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRo
ZW1lRWZsOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25z
dCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKG9iamVj
dC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkKKyAg
ICBpZiAob2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRh
bFBhcnQpCiAgICAgICAgIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgU2xpZGVyVGh1bWJIb3Jpem9u
dGFsLCBpbmZvLCByZWN0KTsKICAgICBlbHNlCiAgICAgICAgIHBhaW50VGhlbWVQYXJ0KG9iamVj
dCwgU2xpZGVyVGh1bWJWZXJ0aWNhbCwgaW5mbywgcmVjdCk7CkBAIC03ODMsNyArNzgzLDcgQEAg
dm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBSZW5kZXJTdHkKICAgICAgICAgc3R5bGUtPnNldEhlaWdodChkZXNjLT5t
aW4uaGVpZ2h0KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lRWZsOjpwYWludENoZWNrYm94KFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9i
amVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgQ2hlY2tCb3gsIGluZm8sIHJl
Y3QpOwogfQpAQCAtODA2LDcgKzgwNiw3IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFJh
ZGlvU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqCiAgICAg
ICAgIHN0eWxlLT5zZXRIZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZUVmbDo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFp
bnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmpl
Y3QsIFJhZGlvQnV0dG9uLCBpbmZvLCByZWN0KTsKIH0KQEAgLTgyMyw3ICs4MjMsNyBAQCB2b2lk
IFJlbmRlclRoZW1lRWZsOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZQogICAgICAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUs
IEJ1dHRvbik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50QnV0dG9uKFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Citib29sIFJlbmRlclRoZW1lRWZsOjpwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAg
IHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIEJ1dHRvbiwgaW5mbywgcmVjdCk7CiB9CkBA
IC04NDEsNyArODQxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxpc3RTdHls
ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHkKICAgICBzdHlsZS0+c2V0
TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWVFZmw6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVF
Zmw6OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gcGFpbnRUaGVt
ZVBhcnQob2JqZWN0LCBDb21ib0JveCwgaW5mbywgcmVjdCk7CiB9CkBAIC04NjIsNyArODYyLDcg
QEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW4KICAgICBhZGp1c3RNZW51TGlzdFN0eWxlKHN0eWxl
UmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFp
bnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZs
OjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBy
ZXR1cm4gcGFpbnRNZW51TGlzdChvYmplY3QsIGluZm8sIHJlY3QpOwogfQpAQCAtODc3LDcgKzg3
Nyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0CiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7
CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29s
IFJlbmRlclRoZW1lRWZsOjpwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJl
dHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFRleHRGaWVsZCwgaW5mbywgcmVjdCk7CiB9CkBA
IC04ODYsNyArODg2LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0VGV4dEFyZWFTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikKIHsKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZUVmbDo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUVm
bDo6cGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRleHRG
aWVsZChvYmplY3QsIGluZm8sIHJlY3QpOwogfQpAQCAtOTA4LDcgKzkwOCw3IEBAIHZvaWQgUmVu
ZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzCiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZGVjb3JhdGlvblNp
emUsIEZpeGVkKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRoZW1l
UGFydChvYmplY3QsIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbiwgaW5mbywgcmVjdCk7CiB9CkBA
IC05MzAsNyArOTMwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKgogICAgIHN0eWxlLT5zZXRI
ZWlnaHQoTGVuZ3RoKGRlY29yYXRpb25TaXplLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiti
b29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
KGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgU2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbiwgaW5mbywgcmVjdCk7CiB9CkBAIC05NTQsNyArOTU0
LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc28KICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0
aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lRWZsOjpw
YWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZs
OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0
LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0
dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgU2VhcmNoRmllbGRDYW5jZWxCdXR0b24sIGluZm8s
IHJlY3QpOwogfQpAQCAtOTcwLDcgKzk3MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVz
dFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyCiAg
ICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUVmbDo6
cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFy
Y2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmpl
Y3QsIFNlYXJjaEZpZWxkLCBpbmZvLCByZWN0KTsKIH0KQEAgLTk4NCw3ICs5ODQsNyBAQCB2b2lk
IFJlbmRlclRoZW1lRWZsOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBSZQogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgU3Bp
bm5lcik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50SW5uZXJTcGluQnV0dG9uKFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBS
ZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFNwaW5uZXIsIGlu
Zm8sIHJlY3QpOwogfQpAQCAtMTAyMiw5ICsxMDIyLDkgQEAgZG91YmxlIFJlbmRlclRoZW1lRWZs
OjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QK
ICAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0aW9u
RnJhbWVzICogMjsgLy8gIjIiIGZvciBiYWNrIGFuZCBmb3J0aDsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZUVmbDo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUVmbDo6
cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghb2JqZWN0LT5pc1By
b2dyZXNzKCkpCisgICAgaWYgKCFvYmplY3QuaXNQcm9ncmVzcygpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFByb2dyZXNzQmFyLCBp
bmZvLCByZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5k
ZXJUaGVtZUVmbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZs
LmgKaW5kZXggOWJhNjZjZTc0NDk1YWQ4N2Q5NTJjYzNmMzFiOWE3ZGFmN2U0ZmU4OC4uZDNlYzc1
NzFmNmZmMDdmN2YwOThjNTk0Zjk2YmI5Y2M1OTRkZTdlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmgKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNv
bnN0OwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRz
IHRpbnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCi0gICAgdmlydHVhbCBib29s
IGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25z
dDsKIAogICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRp
bmcgaXMgc3VwcG9ydGVkIGF0IGFsbC4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9s
VGludHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoK
ICAgICAvLyBBIG1ldGhvZCB0byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIGZvciBhICJs
ZWFmIiBjb250cm9sLiBUaGlzIHdpbGwgb25seSBiZSB1c2VkIGlmIGEgYmFzZWxpbmUKICAgICAv
LyBwb3NpdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgY2hpbGQgY29udGVu
dC4gQ2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucyBhcmUgZXhhbXBsZXMgb2YKICAgICAvLyBj
b250cm9scyB0aGF0IG5lZWQgdG8gZG8gdGhpcy4KLSAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBv
c2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGJhc2Vs
aW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIENv
bG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3Q7CkBAIC0xMTEsNDAgKzExMSw0MCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN5
c3RlbUZvbnQoQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CiAKICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
Ym9vbCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lk
IGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNv
cmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmll
bGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlk
ZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwogCkBAIC0xNTgsMTYgKzE1OCwxNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNEYXRhTGlzdFVJKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5C
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwogCiAgICAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdEZvbnRTaXplKGludCBmb250c2l6ZSk7
CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZv
clByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUg
YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Owog
I2VuZGlmCkBAIC0yMDAsOCArMjAwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGx5UGFydERl
c2NyaXB0aW9uc0Zyb20oY29uc3QgU3RyaW5nJiB0aGVtZVBhdGgpOwogCiAgICAgdm9pZCBhcHBs
eUVkamVTdGF0ZUZyb21Gb3JtKEV2YXNfT2JqZWN0KiwgY29uc3QgQ29udHJvbFN0YXRlcyosIGJv
b2wpOwotICAgIHZvaWQgYXBwbHlFZGplUlRMU3RhdGUoRXZhc19PYmplY3QqLCBSZW5kZXJPYmpl
Y3QqLCBGb3JtVHlwZSwgY29uc3QgSW50UmVjdCYpOwotICAgIGJvb2wgcGFpbnRUaGVtZVBhcnQo
UmVuZGVyT2JqZWN0KiwgRm9ybVR5cGUsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2b2lkIGFwcGx5RWRqZVJUTFN0YXRlKEV2YXNfT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0JiwgRm9ybVR5cGUsIGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIHBhaW50VGhlbWVQ
YXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIEZvcm1UeXBlLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CiAKICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgQ29sb3IgbV9hY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR3RrLmNwcAppbmRleCA4ZDA2OWI1YjAyMjEzNDI5YWQ0MjcyYmY1NzQ3MzVmZjY0
NzVmZTJlLi4wMjBmZTRhYjM4ODI3YmM0YzNjMzA0ZGZhZjEwNGM1MGViZDkyZmFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKQEAgLTY1LDkg
KzY1LDkgQEAgZXh0ZXJuIEdSZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9ja0ljb25Gb3JXaWRnZXRU
eXBlKEdUeXBlLCBjb25zdCBjaGFyKiBpY29uTmFtZSwKIGV4dGVybiBHUmVmUHRyPEdka1BpeGJ1
Zj4gZ2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5cGUsIGNv
bnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIqIGZhbGxiYWNrU3RvY2tJY29u
TmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQgc3RhdGUsIGdpbnQgaWNvblNpemUpOwogCiAjaWYg
RU5BQkxFKFZJREVPKQotc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIGdldE1lZGlhRWxlbWVudEZy
b21SZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiBvKQorc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQq
IGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3QoY29uc3QgUmVuZGVyT2JqZWN0JiBvKQog
ewotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IG8ubm9kZSgp
OwogICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUgPyBub2RlLT5zaGFkb3dIb3N0KCkgOiAwOwog
ICAgIGlmICghbWVkaWFOb2RlKQogICAgICAgICBtZWRpYU5vZGUgPSBub2RlOwpAQCAtMTczLDIw
ICsxNzMsMjAgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxl
LT5hcHBlYXJhbmNlKCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpjb250cm9sU3VwcG9y
dHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lR3Rr
Ojpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGlzRW5hYmxlZChvKTsKIH0KIAotaW50IFJlbmRlclRoZW1lR3RrOjpiYXNlbGlu
ZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0
azo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAg
aWYgKCFvLT5pc0JveCgpKQorICAgIGlmICghby5pc0JveCgpKQogICAgICAgICByZXR1cm4gMDsK
IAogICAgIC8vIEZJWE1FOiBUaGlzIHN0cmF0ZWd5IGlzIHBvc3NpYmx5IGluY29ycmVjdCBmb3Ig
dGhlIEdUSysgcG9ydC4KLSAgICBpZiAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2ti
b3hQYXJ0Ci0gICAgICAgIHx8IG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkg
ewotICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KG8pOworICAgIGlm
IChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydAorICAgICAgICB8fCBvLnN0
eWxlKCkuYXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkgeworICAgICAgICBjb25zdCBSZW5kZXJC
b3gqIGJveCA9IHRvUmVuZGVyQm94KCZvKTsKICAgICAgICAgcmV0dXJuIGJveC0+bWFyZ2luVG9w
KCkgKyBib3gtPmhlaWdodCgpIC0gMjsKICAgICB9CiAKQEAgLTIwOCw3ICsyMDgsNyBAQCBHdGtU
ZXh0RGlyZWN0aW9uIGd0a1RleHREaXJlY3Rpb24oVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiAg
ICAgfQogfQogCi1zdGF0aWMgR3RrU3RhdGVUeXBlIGd0a0ljb25TdGF0ZShSZW5kZXJUaGVtZSog
dGhlbWUsIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0KQorc3RhdGljIEd0a1N0YXRlVHlwZSBn
dGtJY29uU3RhdGUoUmVuZGVyVGhlbWUqIHRoZW1lLCBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
ck9iamVjdCkKIHsKICAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSkKICAg
ICAgICAgcmV0dXJuIEdUS19TVEFURV9JTlNFTlNJVElWRTsKQEAgLTI0MSwxMiArMjQxLDEyIEBA
IHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgUmVuCiAgICAgYWRqdXN0TWVudUxpc3RTdHlsZShzdHlsZVJl
c29sdmVyLCBzdHlsZSwgZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxp
c3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRN
ZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25z
dCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBh
aW50TWVudUxpc3Qob2JqZWN0LCBpbmZvLCByZWN0KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEFyZWEoY29uc3Qg
UmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCiB7
CiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwogfQpAQCAtMjk4LDcgKzI5OCw3
IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzCiAgICAgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBj
b25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBh
aW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQobywgaSwgcmVjdCk7CiB9CkBAIC0z
MjYsMTIgKzMyNiwxMiBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLAogICAgIGFkanVzdFNlYXJj
aEZpZWxkSWNvblN0eWxlKHN0eWxlKTsKIH0KIAotc3RhdGljIEludFJlY3QgY2VudGVyUmVjdFZl
cnRpY2FsbHlJblBhcmVudElucHV0RWxlbWVudChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyBJbnRSZWN0IGNlbnRlclJlY3RWZXJ0aWNhbGx5
SW5QYXJlbnRJbnB1dEVsZW1lbnQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgLy8gR2V0IHRoZSByZW5kZXJlciBvZiA8aW5wdXQ+
IGVsZW1lbnQuCi0gICAgTm9kZSogaW5wdXQgPSByZW5kZXJPYmplY3QtPm5vZGUoKS0+c2hhZG93
SG9zdCgpOworICAgIE5vZGUqIGlucHV0ID0gcmVuZGVyT2JqZWN0Lm5vZGUoKS0+c2hhZG93SG9z
dCgpOwogICAgIGlmICghaW5wdXQpCi0gICAgICAgIGlucHV0ID0gcmVuZGVyT2JqZWN0LT5ub2Rl
KCk7CisgICAgICAgIGlucHV0ID0gcmVuZGVyT2JqZWN0Lm5vZGUoKTsKICAgICBpZiAoIWlucHV0
LT5yZW5kZXJlcigpLT5pc0JveCgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCkBAIC0z
NDYsMTYgKzM0NiwxNiBAQCBzdGF0aWMgSW50UmVjdCBjZW50ZXJSZWN0VmVydGljYWxseUluUGFy
ZW50SW5wdXRFbGVtZW50KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZQogICAgIHJldHVybiBzY2Fs
ZWRSZWN0OwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIEludFJlY3QgaWNvblJlY3QgPSBjZW50ZXJSZWN0VmVydGljYWxseUlu
UGFyZW50SW5wdXRFbGVtZW50KHJlbmRlck9iamVjdCwgcmVjdCk7CiAgICAgaWYgKGljb25SZWN0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR1JlZlB0cjxHZGtQaXhi
dWY+IGljb24gPSBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtf
U1RPQ0tfRklORCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkuZGlyZWN0
aW9uKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SWNvblNpemVGb3JQ
aXhlbFNpemUocmVjdC5oZWlnaHQoKSkpOworICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRl
ck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSwKKyAgICAgICAgZ3RrSWNvblN0YXRlKHRoaXMs
IHJlbmRlck9iamVjdCksCisgICAgICAgIGdldEljb25TaXplRm9yUGl4ZWxTaXplKHJlY3QuaGVp
Z2h0KCkpKTsKICAgICBwYWludEdka1BpeGJ1ZihwYWludEluZm8uY29udGV4dCwgaWNvbi5nZXQo
KSwgaWNvblJlY3QpOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTM2NSwxNiArMzY1LDE2IEBA
IHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0CiAgICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUo
c3R5bGUpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIElu
dFJlY3QgaWNvblJlY3QgPSBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50
KHJlbmRlck9iamVjdCwgcmVjdCk7CiAgICAgaWYgKGljb25SZWN0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24gPSBnZXRTdG9j
a0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tfQ0xFQVIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a1Rl
eHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLmRpcmVjdGlvbigpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrSWNvblN0
YXRlKHRoaXMsIHJlbmRlck9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdldEljb25TaXplRm9yUGl4ZWxTaXplKHJlY3QuaGVp
Z2h0KCkpKTsKKyAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5k
aXJlY3Rpb24oKSksCisgICAgICAgIGd0a0ljb25TdGF0ZSh0aGlzLCByZW5kZXJPYmplY3QpLAor
ICAgICAgICBnZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShyZWN0LmhlaWdodCgpKSk7CiAgICAgcGFp
bnRHZGtQaXhidWYocGFpbnRJbmZvLmNvbnRleHQsIGljb24uZ2V0KCksIGljb25SZWN0KTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CkBAIC0zODYsMTIgKzM4NiwxMiBAQCB2b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSog
c3R5bGUsCiAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5l
SGVpZ2h0KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1
cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcmVjdCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
ck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgLy8gVGhlIG90aGVyIHBhaW50IG1ldGhvZHMgZG9uJ3QgbmVlZCB0byBjaGVjayB3
aGV0aGVyIHBhaW50aW5nIGlzIGRpc2FibGVkIGJlY2F1c2UgUmVuZGVyVGhlbWUgYWxyZWFkeSBj
aGVja3MgaXQKICAgICAvLyBiZWZvcmUgY2FsbGluZyB0aGVtLCBidXQgcGFpbnRDYXBzTG9ja0lu
ZGljYXRvcigpIGlzIGNhbGxlZCBieSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUgd2hpY2gg
ZG9lc24ndCBjaGVjayBpdC4KQEAgLTM5OSw5ICszOTksNyBAQCBib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25z
dCBQYQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGludCBpY29uU2l6ZSA9IHN0ZDo6bWlu
KHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgR1JlZlB0cjxHZGtQaXhidWY+IGlj
b24gPSBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tf
Q0FQU19MT0NLX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgp
LmRpcmVjdGlvbigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgZ2V0SWNvblNpemVGb3JQaXhlbFNpemUoaWNvblNpemUpKTsKKyAg
ICBHUmVmUHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1RL
X1RZUEVfRU5UUlksIEdUS19TVE9DS19DQVBTX0xPQ0tfV0FSTklORywgZ3RrVGV4dERpcmVjdGlv
bihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSksIDAsIGdldEljb25TaXplRm9yUGl4
ZWxTaXplKGljb25TaXplKSk7CiAKICAgICAvLyBPbmx5IHJlLXNjYWxlIHRoZSBpY29uIHdoZW4g
aXQncyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gaWNvbiBzaXplLgogICAgIGlmIChpY29uU2l6
ZSA+PSBndGtJY29uU2l6ZU1lbnUpCkBAIC01MDUsMTMgKzUwMywxMyBAQCBTdHJpbmcgUmVuZGVy
VGhlbWVHdGs6OmV4dHJhRnVsbFNjcmVlblN0eWxlU2hlZXQoKQogfQogI2VuZGlmCiAKLWJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
Y2hhciogc3ltYm9saWNJY29uTmFtZSwgY29uc3QgY2hhciogZmFsbGJhY2tTdG9ja0ljb25OYW1l
KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUJ1dHRvbihjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlck9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBjaGFyKiBzeW1ib2xpY0ljb25OYW1lLCBjb25zdCBjaGFyKiBmYWxsYmFj
a1N0b2NrSWNvbk5hbWUpCiB7CiAgICAgSW50UmVjdCBpY29uUmVjdChyZWN0LngoKSArIChyZWN0
LndpZHRoKCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKICAgICAgICAgICAgICAgICAgICAgIHJl
Y3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKICAgICAgICAg
ICAgICAgICAgICAgIG1fbWVkaWFJY29uU2l6ZSwgbV9tZWRpYUljb25TaXplKTsKICAgICBHUmVm
UHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrU3ltYm9saWNJY29uRm9yV2lkZ2V0VHlwZShH
VEtfVFlQRV9DT05UQUlORVIsIHN5bWJvbGljSWNvbk5hbWUsIGZhbGxiYWNrU3RvY2tJY29uTmFt
ZSwKLSAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkuZGlyZWN0
aW9uKCkpLCBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwgaWNvblJlY3Qud2lkdGgo
KSk7CisgICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0
aW9uKCkpLCBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwgaWNvblJlY3Qud2lkdGgo
KSk7CiAgICAgcGFpbnRHZGtQaXhidWYoY29udGV4dCwgaWNvbi5nZXQoKSwgaWNvblJlY3QpOwog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTIxLDEyICs1MTksMTIgQEAgYm9vbCBSZW5kZXJUaGVt
ZUd0azo6aGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKENvbnRyb2xQYXJ0IHBhcnQpIGNv
bnN0CiAgICAgcmV0dXJuIChwYXJ0ICE9IE1lZGlhTXV0ZUJ1dHRvblBhcnQpOwogfQogCi1ib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3Qq
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24o
cmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwgInZpZXctZnVsbHNjcmVlbi1z
eW1ib2xpYyIsIEdUS19TVE9DS19GVUxMU0NSRUVOKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRNZWRpYU11dGVCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQog
ewogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IGdldE1lZGlhRWxlbWVudEZy
b21SZW5kZXJPYmplY3QocmVuZGVyT2JqZWN0KTsKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKQEAg
LTUzOCw5ICs1MzYsOSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhTXV0ZUJ1dHRv
bihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbgogICAgICAgICBtdXRlZCA/
ICJhdWRpby12b2x1bWUtbXV0ZWQiIDogImF1ZGlvLXZvbHVtZS1oaWdoIik7CiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
K2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFQbGF5QnV0dG9uKGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKLSAgICBOb2RlKiBub2RlID0gcmVuZGVyT2JqZWN0LT5ub2RlKCk7Cisg
ICAgTm9kZSogbm9kZSA9IHJlbmRlck9iamVjdC5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTU1MywyNiArNTUxLDI2IEBAIGJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBj
b25zdCBQYWluCiAgICAgICAgIHNob3dQbGF5QnV0dG9uID8gR1RLX1NUT0NLX01FRElBX1BMQVkg
OiBHVEtfU1RPQ0tfTUVESUFfUEFVU0UpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKICAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5j
b250ZXh0LCByZWN0LCAibWVkaWEtc2Vlay1iYWNrd2FyZC1zeW1ib2xpYyIsIEdUS19TVE9DS19N
RURJQV9SRVdJTkQpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2Vla0Zv
cndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAg
ICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0
LCByZWN0LCAibWVkaWEtc2Vlay1mb3J3YXJkLXN5bWJvbGljIiwgR1RLX1NUT0NLX01FRElBX0ZP
UldBUkQpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFUb2dnbGVDbG9zZWRDYXB0aW9uc0J1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgSW50UmVjdCBpY29uUmVjdChy
ZWN0LngoKSArIChyZWN0LndpZHRoKCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwgcmVjdC55KCkg
KyAocmVjdC5oZWlnaHQoKSAtIG1fbWVkaWFJY29uU2l6ZSkgLyAyLAogICAgICAgICBtX21lZGlh
SWNvblNpemUsIG1fbWVkaWFJY29uU2l6ZSk7CiAgICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24g
PSBnZXRTdG9ja1N5bWJvbGljSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZUEVfQ09OVEFJTkVSLCAi
bWVkaWEtdmlldy1zdWJ0aXRsZXMtc3ltYm9saWMiLCBudWxscHRyLAotICAgICAgICBndGtUZXh0
RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS5kaXJlY3Rpb24oKSksIGd0a0ljb25TdGF0
ZSh0aGlzLCByZW5kZXJPYmplY3QpLCBpY29uUmVjdC53aWR0aCgpKTsKKyAgICAgICAgZ3RrVGV4
dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSksIGd0a0ljb25TdGF0
ZSh0aGlzLCByZW5kZXJPYmplY3QpLCBpY29uUmVjdC53aWR0aCgpKTsKICAgICBpZiAoIWljb24p
CiAgICAgICAgIGljb24gPSBnZXRTdG9ja1N5bWJvbGljSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZ
UEVfQ09OVEFJTkVSLCAidXNlci1pbnZpc2libGUtc3ltYm9saWMiLCBHVEtfU1RPQ0tfSlVTVElG
WV9GSUxMLAotICAgICAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxl
KCkuZGlyZWN0aW9uKCkpLCBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwgaWNvblJl
Y3Qud2lkdGgoKSk7CisgICAgICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5z
dHlsZSgpLmRpcmVjdGlvbigpKSwgZ3RrSWNvblN0YXRlKHRoaXMsIHJlbmRlck9iamVjdCksIGlj
b25SZWN0LndpZHRoKCkpOwogICAgIHBhaW50R2RrUGl4YnVmKHBhaW50SW5mby5jb250ZXh0LCBp
Y29uLmdldCgpLCBpY29uUmVjdCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01ODcsOSArNTg1
LDkgQEAgc3RhdGljIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpIGJvcmRlclJhZGlpRnJvbVN0eWxl
KFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICAgICAgSW50U2l6ZShzdHlsZS0+Ym9yZGVyQm90dG9t
UmlnaHRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLT5ib3JkZXJCb3R0b21SaWdo
dFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dE1lZGlhU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQoKm8pOworICAgIEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudChvKTsKICAgICBpZiAoIW1lZGlh
RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01OTksNyArNTk3LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWkKIAogICAgIGZsb2F0IG1lZGlhRHVyYXRpb24gPSBtZWRpYUVs
ZW1lbnQtPmR1cmF0aW9uKCk7CiAgICAgZmxvYXQgdG90YWxUcmFja1dpZHRoID0gci53aWR0aCgp
OwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZvLT5zdHlsZSgpOworICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9ICZvLnN0eWxlKCk7CiAgICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMg
PSBtZWRpYUVsZW1lbnQtPmJ1ZmZlcmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgdGltZVJhbmdlcy0+bGVuZ3RoKCk7ICsraW5kZXgpIHsKICAgICAgICAgZmxvYXQg
c3RhcnQgPSB0aW1lUmFuZ2VzLT5zdGFydChpbmRleCwgSUdOT1JFX0VYQ0VQVElPTik7CkBAIC02
MjAsMjEgKzYxOCwyMSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJh
Y2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
Citib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoY29uc3QgUmVuZGVy
T2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikK
IHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmby0+c3R5bGUoKTsKKyAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSAmby5zdHlsZSgpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUm91bmRl
ZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChyLCBib3JkZXJSYWRpaUZyb21TdHlsZShzdHlsZSkpLCBz
dHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS0+Y29s
b3JTcGFjZSgpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlh
Vm9sdW1lU2xpZGVyQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQoKnJlbmRlck9iamVjdCk7CisgICAgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHJlbmRlck9iamVjdCk7CiAg
ICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC02NDgsNyAr
NjQ2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNr
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb24KIAogICAgIGludCByZWN0SGVpZ2h0ID0g
cmVjdC5oZWlnaHQoKTsKICAgICBmbG9hdCB0cmFja0hlaWdodCA9IHJlY3RIZWlnaHQgKiB2b2x1
bWU7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gJnJlbmRlck9iamVjdC0+c3R5bGUoKTsKKyAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmcmVuZGVyT2JqZWN0LnN0eWxlKCk7CiAgICAgSW50UmVj
dCB2b2x1bWVSZWN0KHJlY3QpOwogICAgIHZvbHVtZVJlY3QubW92ZSgwLCByZWN0SGVpZ2h0IC0g
dHJhY2tIZWlnaHQpOwogICAgIHZvbHVtZVJlY3Quc2V0SGVpZ2h0KGNlaWwodHJhY2tIZWlnaHQp
KTsKQEAgLTY2MCw3ICs2NTgsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9s
dW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbgogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRodW1iKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVk
aWFWb2x1bWVTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0
dXJuIHBhaW50TWVkaWFTbGlkZXJUaHVtYihyZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7
CiB9CkBAIC02NzAsNyArNjY4LDcgQEAgU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpmb3JtYXRNZWRp
YUNvbnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGQKICAgICByZXR1
cm4gZm9ybWF0TWVkaWFDb250cm9sc1RpbWUoY3VycmVudFRpbWUpICsgIiAvICIgKyBmb3JtYXRN
ZWRpYUNvbnRyb2xzVGltZShkdXJhdGlvbik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFDdXJyZW50VGltZShj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKIHsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC02OTYsMTMgKzY5NCwxMyBAQCBkb3VibGUgUmVuZGVy
VGhlbWVHdGs6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mq
KSBjb25zdAogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsICogcHJvZ3Jlc3NB
bmltYXRpb25GcmFtZXMgKiAyOyAvLyAiMiIgZm9yIGJhY2sgYW5kIGZvcnRoOwogfQogCi1JbnRS
ZWN0IFJlbmRlclRoZW1lR3RrOjpjYWxjdWxhdGVQcm9ncmVzc1JlY3QoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJPYmplY3QsIGNvbnN0IEludFJlY3QmIGZ1bGxCYXJSZWN0KQorSW50UmVjdCBSZW5kZXJU
aGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
T2JqZWN0LCBjb25zdCBJbnRSZWN0JiBmdWxsQmFyUmVjdCkKIHsKICAgICBJbnRSZWN0IHByb2dy
ZXNzUmVjdChmdWxsQmFyUmVjdCk7Ci0gICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNz
ID0gdG9SZW5kZXJQcm9ncmVzcyhyZW5kZXJPYmplY3QpOworICAgIGNvbnN0IFJlbmRlclByb2dy
ZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3MoJnJlbmRlck9iamVjdCk7CiAg
ICAgaWYgKHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCkpIHsKICAgICAgICAgaW50IHBy
b2dyZXNzV2lkdGggPSBwcm9ncmVzc1JlY3Qud2lkdGgoKSAqIHJlbmRlclByb2dyZXNzLT5wb3Np
dGlvbigpOwotICAgICAgICBpZiAocmVuZGVyT2JqZWN0LT5zdHlsZSgpLmRpcmVjdGlvbigpID09
IFJUTCkKKyAgICAgICAgaWYgKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpID09IFJU
TCkKICAgICAgICAgICAgIHByb2dyZXNzUmVjdC5zZXRYKHByb2dyZXNzUmVjdC54KCkgKyBwcm9n
cmVzc1JlY3Qud2lkdGgoKSAtIHByb2dyZXNzV2lkdGgpOwogICAgICAgICBwcm9ncmVzc1JlY3Qu
c2V0V2lkdGgocHJvZ3Jlc3NXaWR0aCk7CiAgICAgICAgIHJldHVybiBwcm9ncmVzc1JlY3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCmluZGV4IGIxNzA3
ZjRiMmQxMWIyZDI2NDc4ZTBjOGFhYWM1N2YxYWUxM2FiNDQuLjFjYTUwMjA1YzQxNmU4OWFlMTI0
OTMzNzlkZjUyM2M4NDQyYWRiZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9SZW5kZXJUaGVtZUd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0ay5oCkBAIC01MCwxNyArNTAsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAg
Ly8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0
aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCi0gICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBw
b3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBj
b250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKIAogICAgIC8v
IEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMgc3VwcG9y
dGVkIGF0IGFsbC4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3Qo
Y29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RS
ZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QmLCBJbnRSZWN0Jik7CiAKICAgICAvLyBBIG1l
dGhvZCB0byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIGZvciBhICJsZWFmIiBjb250cm9s
LiAgVGhpcyB3aWxsIG9ubHkgYmUgdXNlZCBpZiBhIGJhc2VsaW5lCiAgICAgLy8gcG9zaXRpb24g
Y2Fubm90IGJlIGRldGVybWluZWQgYnkgZXhhbWluaW5nIGNoaWxkIGNvbnRlbnQuIENoZWNrYm94
ZXMgYW5kIHJhZGlvIGJ1dHRvbnMgYXJlIGV4YW1wbGVzIG9mCiAgICAgLy8gY29udHJvbHMgdGhh
dCBuZWVkIHRvIGRvIHRoaXMuCi0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25z
dCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9u
KGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OwogCiAgICAgLy8gVGhlIHBsYXRmb3JtIHNlbGVj
dGlvbiBjb2xvci4KICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkgY29uc3Q7CkBAIC0xMTQsMTcgKzExNCwxNyBAQCBwdWJsaWM6CiAjZW5k
aWYKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXpl
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAg
IHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAg
ICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0OwogICAg
IGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Q7CkBAIC0x
MzcsMjUgKzEzNywyNSBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gd2UgZG9uJ3QgbWFpbnRhaW4gdGhp
cyBkaWZmZXJlbnRpYXRpb24uCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmly
dHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKQEAgLTE2NCwxOSArMTY0LDE5
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGluaXRNZWRpYUNvbG9ycygpOwogICAgIHZvaWQgaW5p
dE1lZGlhQnV0dG9ucygpOwogICAgIHZpcnR1YWwgYm9vbCBoYXNPd25EaXNhYmxlZFN0YXRlSGFu
ZGxpbmdGb3IoQ29udHJvbFBhcnQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlh
RnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0JhY2tCdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1i
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1
bGxzY3JlZW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYVNlZWtCYWNrQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtGb3J3YXJk
QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRyYWNrKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYVNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZv
bHVtZVNsaWRlckNvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlk
ZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFDdXJyZW50VGltZShjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24oY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogI2VuZGlmCiAj
ZW5kaWYKIApAQCAtMTg0LDEzICsxODQsMTMgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgZG91
YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mq
KSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNz
QmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dy
ZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9n
cmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9y
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVh
bCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmlu
ZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZvbnQmLCBpbnQg
d2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMjAw
LDExICsyMDAsMTEgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgZG91YmxlIGdldFNjcmVlbkRQSSgp
OwogCiAjaWYgRU5BQkxFKFZJREVPKQotICAgIGJvb2wgcGFpbnRNZWRpYUJ1dHRvbihSZW5kZXJP
YmplY3QqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgY2hhciogc3lt
Ym9saWNJY29uTmFtZSwgY29uc3QgY2hhciogZmFsbGJhY2tTdG9ja0ljb25OYW1lKTsKKyAgICBi
b29sIHBhaW50TWVkaWFCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNo
YXIqIGZhbGxiYWNrU3RvY2tJY29uTmFtZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQUk9HUkVT
U19FTEVNRU5UKQotICAgIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVByb2dyZXNzUmVjdChSZW5k
ZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRl
UHJvZ3Jlc3NSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRp
ZgogCiAgICAgbXV0YWJsZSBDb2xvciBtX3BhbmVsQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBkZDVjNDAwYWVhMjE0ZmYyMGM5MDE4ZDI0YmEyMzlk
NWY2ZjVkNGZhLi41MDY2YWVjYzE1Y2JjYWU0NmY4OGUxZTg1YjU5MTA0MmI4NzcxOTVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTE0MzgsNyArMTQzOCw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZFZpc3VhbE92ZXJmbG93RnJvbVRoZW1lKCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBwaXhlbFNuYXBwZWRCb3Jk
ZXJCb3hSZWN0KCk7Ci0gICAgdGhlbWUoKS5hZGp1c3RSZXBhaW50UmVjdCh0aGlzLCBpbmZsYXRl
ZFJlY3QpOworICAgIHRoZW1lKCkuYWRqdXN0UmVwYWludFJlY3QoKnRoaXMsIGluZmxhdGVkUmVj
dCk7CiAgICAgYWRkVmlzdWFsT3ZlcmZsb3coaW5mbGF0ZWRSZWN0KTsKIAogICAgIGlmIChSZW5k
ZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpKQpA
QCAtNDI5NCw3ICs0Mjk0LDcgQEAgaW50IFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKEZv
bnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGJvb2wgZmlyc3RMaW5lLCBMaW4KICAgICAgICAgLy8g
aXMgdHVybmVkIG9mZiwgY2hlY2tib3hlcy9yYWRpb3Mgd2lsbCBzdGlsbCBoYXZlIGRlY2VudCBi
YXNlbGluZXMuCiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIHBhdGNoIGZvcm0gY29udHJvbHMg
dG8gZGVhbCB3aXRoIHZlcnRpY2FsIGxpbmVzLgogICAgICAgICBpZiAoc3R5bGUoKS5oYXNBcHBl
YXJhbmNlKCkgJiYgIXRoZW1lKCkuaXNDb250cm9sQ29udGFpbmVyKHN0eWxlKCkuYXBwZWFyYW5j
ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiB0aGVtZSgpLmJhc2VsaW5lUG9zaXRpb24odGhpcyk7
CisgICAgICAgICAgICByZXR1cm4gdGhlbWUoKS5iYXNlbGluZVBvc2l0aW9uKCp0aGlzKTsKICAg
ICAgICAgICAgIAogICAgICAgICAvLyBDU1MyLjEgc3RhdGVzIHRoYXQgdGhlIGJhc2VsaW5lIG9m
IGFuIGlubGluZSBibG9jayBpcyB0aGUgYmFzZWxpbmUgb2YgdGhlIGxhc3QgbGluZSBib3ggaW4K
ICAgICAgICAgLy8gdGhlIG5vcm1hbCBmbG93LiAgV2UgbWFrZSBhbiBleGNlcHRpb24gZm9yIG1h
cnF1ZWVzLCBzaW5jZSB0aGVpciBiYXNlbGluZXMgYXJlIG1lYW5pbmdsZXNzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGI3ZTNkY2IyNjQyNGE0ZDY0YjNkNjgxMjE4
MTRiMjU0NDg4MTA5NjQuLjYzYTI4ZDMxOGZlOWI0MTIwMmZiNmFkMGQxNTYzY2U5ZWI4ZmNiYTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0xMjI3LDcgKzEyMjcs
NyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaQogICAgICAgICB9CiAgICAgfQogCi0gICAgYm9v
bCB0aGVtZVBhaW50ZWQgPSBzdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAmJiAhdGhlbWUoKS5wYWlu
dCh0aGlzLCBjb250cm9sU3RhdGVzLCBwYWludEluZm8sIHNuYXBwZWRQYWludFJlY3QpOworICAg
IGJvb2wgdGhlbWVQYWludGVkID0gc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkgJiYgIXRoZW1lKCku
cGFpbnQoKnRoaXMsIGNvbnRyb2xTdGF0ZXMsIHBhaW50SW5mbywgc25hcHBlZFBhaW50UmVjdCk7
CiAKICAgICBpZiAoY29udHJvbFN0YXRlcyAmJiBjb250cm9sU3RhdGVzLT5uZWVkc1JlcGFpbnQo
KSkKICAgICAgICAgbV9yZXBhaW50VGltZXIuc3RhcnRPbmVTaG90KDApOwpAQCAtMTIzOSwxMiAr
MTIzOSwxMiBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaQogICAgICAgICBwYWludEJhY2tncm91
bmQocGFpbnRJbmZvLCBwYWludFJlY3QsIGJsZWVkQXZvaWRhbmNlKTsKIAogICAgICAgICBpZiAo
c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICB0aGVtZSgpLnBhaW50RGVjb3Jh
dGlvbnModGhpcywgcGFpbnRJbmZvLCBzbmFwcGVkUGFpbnRSZWN0KTsKKyAgICAgICAgICAgIHRo
ZW1lKCkucGFpbnREZWNvcmF0aW9ucygqdGhpcywgcGFpbnRJbmZvLCBzbmFwcGVkUGFpbnRSZWN0
KTsKICAgICB9CiAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLCBwYWludFJlY3QsIHN0eWxl
KCksIEluc2V0KTsKIAogICAgIC8vIFRoZSB0aGVtZSB3aWxsIHRlbGwgdXMgd2hldGhlciBvciBu
b3Qgd2Ugc2hvdWxkIGFsc28gcGFpbnQgdGhlIENTUyBib3JkZXIuCi0gICAgaWYgKGJsZWVkQXZv
aWRhbmNlICE9IEJhY2tncm91bmRCbGVlZEJhY2tncm91bmRPdmVyQm9yZGVyICYmICghc3R5bGUo
KS5oYXNBcHBlYXJhbmNlKCkgfHwgKCF0aGVtZVBhaW50ZWQgJiYgdGhlbWUoKS5wYWludEJvcmRl
ck9ubHkodGhpcywgcGFpbnRJbmZvLCBzbmFwcGVkUGFpbnRSZWN0KSkpICYmIHN0eWxlKCkuaGFz
Qm9yZGVyKCkpCisgICAgaWYgKGJsZWVkQXZvaWRhbmNlICE9IEJhY2tncm91bmRCbGVlZEJhY2tn
cm91bmRPdmVyQm9yZGVyICYmICghc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkgfHwgKCF0aGVtZVBh
aW50ZWQgJiYgdGhlbWUoKS5wYWludEJvcmRlck9ubHkoKnRoaXMsIHBhaW50SW5mbywgc25hcHBl
ZFBhaW50UmVjdCkpKSAmJiBzdHlsZSgpLmhhc0JvcmRlcigpKQogICAgICAgICBwYWludEJvcmRl
cihwYWludEluZm8sIHBhaW50UmVjdCwgc3R5bGUoKSwgYmxlZWRBdm9pZGFuY2UpOwogCiAgICAg
aWYgKGJsZWVkQXZvaWRhbmNlID09IEJhY2tncm91bmRCbGVlZFVzZVRyYW5zcGFyZW5jeUxheWVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAppbmRleCA3MzcyZGQw
M2FjNzFjMTI2YTg2ZTMxMDFlYzc5NzQwZjMwYWM3YzIzLi44ZmM4MzMwOTE4NjdhZDFmMGFhNGE5
MWZlMzJhYTQyMjA1Yjg3NjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQnV0dG9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0
dG9uLmNwcApAQCAtMTEyLDEyICsxMTIsMTIgQEAgdm9pZCBSZW5kZXJCdXR0b246OnN0eWxlRGlk
Q2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3QKICAg
ICBpZiAobV9pbm5lcikgLy8gUmVuZGVyQmxvY2sgaGFuZGxlZCB1cGRhdGluZyB0aGUgYW5vbnlt
b3VzIGJsb2NrJ3Mgc3R5bGUuCiAgICAgICAgIHNldHVwSW5uZXJTdHlsZSgmbV9pbm5lci0+c3R5
bGUoKSk7CiAKLSAgICBpZiAoIW1fZGVmYXVsdCAmJiB0aGVtZSgpLmlzRGVmYXVsdCh0aGlzKSkg
eworICAgIGlmICghbV9kZWZhdWx0ICYmIHRoZW1lKCkuaXNEZWZhdWx0KCp0aGlzKSkgewogICAg
ICAgICBpZiAoIW1fdGltZXIpCiAgICAgICAgICAgICBtX3RpbWVyID0gc3RkOjptYWtlX3VuaXF1
ZTxUaW1lcjxSZW5kZXJCdXR0b24+Pih0aGlzLCAmUmVuZGVyQnV0dG9uOjp0aW1lckZpcmVkKTsK
ICAgICAgICAgbV90aW1lci0+c3RhcnRSZXBlYXRpbmcoMC4wMyk7CiAgICAgICAgIG1fZGVmYXVs
dCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChtX2RlZmF1bHQgJiYgIXRoZW1lKCkuaXNEZWZhdWx0
KHRoaXMpKSB7CisgICAgfSBlbHNlIGlmIChtX2RlZmF1bHQgJiYgIXRoZW1lKCkuaXNEZWZhdWx0
KCp0aGlzKSkgewogICAgICAgICBtX2RlZmF1bHQgPSBmYWxzZTsKICAgICAgICAgbV90aW1lciA9
IG51bGxwdHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZpbGVVcGxvYWRDb250cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKaW5kZXggNzY4ZDE4OWY1ZTRiMTYxZDYzYmQ4OWYxZDg5
MmJhYTQ3OTQ1ZmNlNy4uZTNlOWE5ZTA3YTUyYjM2NDE2OGYwMmYwYjc1MWEzNTM0NmEyMzMyZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250
cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2wuY3BwCkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJv
bDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW4KICAg
ICAgICAgICAgICAgICAvLyBEcmF3IHRoZSBmaWxlIGljb24gYW5kIGRlY29yYXRpb25zLgogICAg
ICAgICAgICAgICAgIEludFJlY3QgaWNvblJlY3QoaWNvblgsIGljb25ZLCBpY29uV2lkdGgsIGlj
b25IZWlnaHQpOwogICAgICAgICAgICAgICAgIFJlbmRlclRoZW1lOjpGaWxlVXBsb2FkRGVjb3Jh
dGlvbnMgZGVjb3JhdGlvbnNUeXBlID0gaW5wdXRFbGVtZW50KCkuZmlsZXMoKS0+bGVuZ3RoKCkg
PT0gMSA/IFJlbmRlclRoZW1lOjpTaW5nbGVGaWxlIDogUmVuZGVyVGhlbWU6Ok11bHRpcGxlRmls
ZXM7Ci0gICAgICAgICAgICAgICAgdGhlbWUoKS5wYWludEZpbGVVcGxvYWRJY29uRGVjb3JhdGlv
bnModGhpcywgYnV0dG9uUmVuZGVyZXIsIHBhaW50SW5mbywgaWNvblJlY3QsIGlucHV0RWxlbWVu
dCgpLmljb24oKSwgZGVjb3JhdGlvbnNUeXBlKTsKKyAgICAgICAgICAgICAgICB0aGVtZSgpLnBh
aW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucygqdGhpcywgKmJ1dHRvblJlbmRlcmVyLCBwYWlu
dEluZm8sIGljb25SZWN0LCBpbnB1dEVsZW1lbnQoKS5pY29uKCksIGRlY29yYXRpb25zVHlwZSk7
CiAgICAgICAgICAgICB9CiAjZWxzZQogICAgICAgICAgICAgLy8gRHJhdyB0aGUgZmlsZSBpY29u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXgg
Y2Y5NGQ1ZTRiNzNkYzU0MTY2MGQ1ZWY1MWE1NWNmNWU1YTQ5ZDNmZC4uMTU5NjgyMTZmMGM1OGU3
YzM2YzkzN2UzYzgzMTNkYWQ4MTRjZjg0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGbG93VGhyZWFkLmNwcApAQCAtMTI4NSw3ICsxMjg1LDcgQEAgdm9pZCBSZW5kZXJG
bG93VGhyZWFkOjphZGRSZWdpb25zVmlzdWFsT3ZlcmZsb3dGcm9tVGhlbWUoY29uc3QgUmVuZGVy
QmxvY2sqIGJsb2MKICAgICAgICAgYm9yZGVyQm94ID0gcmVnaW9uLT5yZWN0Rmxvd1BvcnRpb25G
b3JCb3goYmxvY2ssIGJvcmRlckJveCk7CiAKICAgICAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3Qg
PSBwaXhlbFNuYXBwZWRJbnRSZWN0KGJvcmRlckJveCk7Ci0gICAgICAgIGJsb2NrLT50aGVtZSgp
LmFkanVzdFJlcGFpbnRSZWN0KGJsb2NrLCBpbmZsYXRlZFJlY3QpOworICAgICAgICBibG9jay0+
dGhlbWUoKS5hZGp1c3RSZXBhaW50UmVjdCgqYmxvY2ssIGluZmxhdGVkUmVjdCk7CiAKICAgICAg
ICAgcmVnaW9uLT5hZGRWaXN1YWxPdmVyZmxvd0ZvckJveChibG9jaywgaW5mbGF0ZWRSZWN0KTsK
ICAgICAgICAgaWYgKHJlZ2lvbiA9PSBlbmRSZWdpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAKaW5kZXggY2FmZDBjMGU3Y2RkMzBlOGZi
MjZmNmZiNTMxOTg3MTZiZjhmOWI5NS4uYzBjMmQzOTQ5NzA3ZDlmMjllZmQ2MGQzYTgyMWU1OWFk
ZTAxMDMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlh
Q29udHJvbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNv
bnRyb2xzLmNwcApAQCAtNzAsMTAgKzcwLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lm
IFBMQVRGT1JNKFdJTikgJiYgVVNFKENHKQogCi1zdGF0aWMgV0tNZWRpYUNvbnRyb2xsZXJUaGVt
ZVN0YXRlIGRldGVybWluZVN0YXRlKFJlbmRlck9iamVjdCogbykKK3N0YXRpYyBXS01lZGlhQ29u
dHJvbGxlclRoZW1lU3RhdGUgZGV0ZXJtaW5lU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvKQog
ewogICAgIGludCByZXN1bHQgPSAwOwotICAgIGNvbnN0IFJlbmRlclRoZW1lJiB0aGVtZSA9IG8t
PnRoZW1lKCk7CisgICAgY29uc3QgUmVuZGVyVGhlbWUmIHRoZW1lID0gby50aGVtZSgpOwogICAg
IGlmICghdGhlbWUuaXNFbmFibGVkKG8pIHx8IHRoZW1lLmlzUmVhZE9ubHlDb250cm9sKG8pKQog
ICAgICAgICByZXN1bHQgfD0gV0tNZWRpYUNvbnRyb2xsZXJGbGFnRGlzYWJsZWQ7CiAgICAgaWYg
KHRoZW1lLmlzUHJlc3NlZChvKSkKQEAgLTg0LDkgKzg0LDkgQEAgc3RhdGljIFdLTWVkaWFDb250
cm9sbGVyVGhlbWVTdGF0ZSBkZXRlcm1pbmVTdGF0ZShSZW5kZXJPYmplY3QqIG8pCiB9CiAKIC8v
IFV0aWxpdHkgdG8gc2NhbGUgd2hlbiB0aGUgVUkgcGFydCBhcmUgbm90IHNjYWxlZCBieSB3a0Ry
YXdNZWRpYVVJUGFydAotc3RhdGljIEZsb2F0UmVjdCBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RD
dXJyZW50Q29udGV4dChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0ICZvcmlnaW5hbFJlY3QpCitzdGF0aWMgRmxvYXRSZWN0IGdldFVuem9v
bWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QgJm9yaWdpbmFsUmVjdCkKIHsK
LSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBm
bG9hdCB6b29tTGV2ZWwgPSBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwogICAgIEZsb2F0UmVj
dCB1bnpvb21lZFJlY3Qob3JpZ2luYWxSZWN0KTsKICAgICBpZiAoem9vbUxldmVsICE9IDEuMGYp
IHsKICAgICAgICAgdW56b29tZWRSZWN0LnNldFdpZHRoKHVuem9vbWVkUmVjdC53aWR0aCgpIC8g
em9vbUxldmVsKTsKQEAgLTEyNiwzNSArMTI2LDM1IEBAIHZvaWQgUmVuZGVyTWVkaWFDb250cm9s
czo6YWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKQogICAgIHN0
eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2l6ZS5oZWlnaHQgKiB6b29t
TGV2ZWwpLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlck1lZGlhQ29udHJvbHM6OnBhaW50TWVk
aWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUgcGFydCwgUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wg
UmVuZGVyTWVkaWFDb250cm9sczo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNvbnRyb2xF
bGVtZW50VHlwZSBwYXJ0LCBjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogCiAgICAgc3dpdGNoIChwYXJ0
KSB7CiAgICAgY2FzZSBNZWRpYUVudGVyRnVsbHNjcmVlbkJ1dHRvbjoKICAgICBjYXNlIE1lZGlh
RXhpdEZ1bGxzY3JlZW5CdXR0b246Ci0gICAgICAgIGlmIChNZWRpYUNvbnRyb2xGdWxsc2NyZWVu
QnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1
dHRvbkVsZW1lbnQqPihvLT5ub2RlKCkpKSB7CisgICAgICAgIGlmIChNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuQnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sRnVsbHNj
cmVlbkJ1dHRvbkVsZW1lbnQqPihvLm5vZGUoKSkpIHsKICAgICAgICAgICAgIGJvb2wgZW50ZXJC
dXR0b24gPSBidG4tPmRpc3BsYXlUeXBlKCkgPT0gTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b247
CiAgICAgICAgICAgICB3a0RyYXdNZWRpYVVJUGFydChlbnRlckJ1dHRvbiA/IFdLTWVkaWFVSVBh
cnRGdWxsc2NyZWVuQnV0dG9uIDogV0tNZWRpYVVJUGFydEV4aXRGdWxsc2NyZWVuQnV0dG9uLCBw
YWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGRldGVybWluZVN0YXRlKG8p
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhU2hvd0Nsb3NlZENh
cHRpb25zQnV0dG9uOgogICAgIGNhc2UgTWVkaWFIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b246Ci0g
ICAgICAgIGlmIChNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQq
IGJ0biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9u
RWxlbWVudCo+KG8tPm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKE1lZGlhQ29udHJvbFRvZ2dsZUNs
b3NlZENhcHRpb25zQnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9s
VG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50Kj4oby5ub2RlKCkpKSB7CiAgICAgICAg
ICAgICBib29sIGNhcHRpb25zVmlzaWJsZSA9IGJ0bi0+ZGlzcGxheVR5cGUoKSA9PSBNZWRpYUhp
ZGVDbG9zZWRDYXB0aW9uc0J1dHRvbjsKICAgICAgICAgICAgIHdrRHJhd01lZGlhVUlQYXJ0KGNh
cHRpb25zVmlzaWJsZSA/IFdLTWVkaWFVSVBhcnRIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24gOiBX
S01lZGlhVUlQYXJ0U2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uLCBwYWludEluZm8uY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCksIHIsIGRldGVybWluZVN0YXRlKG8pKTsKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhTXV0ZUJ1dHRvbjoKICAgICBjYXNlIE1lZGlhVW5N
dXRlQnV0dG9uOgotICAgICAgICBpZiAoTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQqIGJ0
biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50Kj4oby0+bm9kZSgp
KSkgeworICAgICAgICBpZiAoTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQqIGJ0biA9IHN0
YXRpY19jYXN0PE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50Kj4oby5ub2RlKCkpKSB7CiAg
ICAgICAgICAgICBib29sIGF1ZGlvRW5hYmxlZCA9IGJ0bi0+ZGlzcGxheVR5cGUoKSA9PSBNZWRp
YU11dGVCdXR0b247CiAgICAgICAgICAgICB3a0RyYXdNZWRpYVVJUGFydChhdWRpb0VuYWJsZWQg
PyBXS01lZGlhVUlQYXJ0TXV0ZUJ1dHRvbiA6IFdLTWVkaWFVSVBhcnRVbk11dGVCdXR0b24sIHBh
aW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZGV0ZXJtaW5lU3RhdGUobykp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVkaWFQYXVzZUJ1dHRvbjoK
ICAgICBjYXNlIE1lZGlhUGxheUJ1dHRvbjoKLSAgICAgICAgaWYgKE1lZGlhQ29udHJvbFBsYXlC
dXR0b25FbGVtZW50KiBidG4gPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxl
bWVudCo+KG8tPm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKE1lZGlhQ29udHJvbFBsYXlCdXR0b25F
bGVtZW50KiBidG4gPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCo+
KG8ubm9kZSgpKSkgewogICAgICAgICAgICAgYm9vbCBjYW5QbGF5ID0gYnRuLT5kaXNwbGF5VHlw
ZSgpID09IE1lZGlhUGxheUJ1dHRvbjsKICAgICAgICAgICAgIHdrRHJhd01lZGlhVUlQYXJ0KGNh
blBsYXkgPyBXS01lZGlhVUlQYXJ0UGxheUJ1dHRvbiA6IFdLTWVkaWFVSVBhcnRQYXVzZUJ1dHRv
biwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBkZXRlcm1pbmVTdGF0
ZShvKSk7CiAgICAgICAgIH0KQEAgLTE3Miw3ICsxNzIsNyBAQCBib29sIFJlbmRlck1lZGlhQ29u
dHJvbHM6OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUgcGFy
dCwgUgogICAgICAgICB3a0RyYXdNZWRpYVVJUGFydChXS01lZGlhVUlQYXJ0U2Vla0ZvcndhcmRC
dXR0b24sIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZGV0ZXJtaW5l
U3RhdGUobykpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhU2xpZGVyOiB7Ci0gICAg
ICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1l
bnQoKm8pKSB7CisgICAgICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBw
YXJlbnRNZWRpYUVsZW1lbnQobykpIHsKICAgICAgICAgICAgIEZsb2F0UmVjdCB1bnpvb21lZFJl
Y3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChvLCBwYWludEluZm8s
IHIpOwogICAgICAgICAgICAgd2tEcmF3TWVkaWFTbGlkZXJUcmFjayhwYWludEluZm8uY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCksIHVuem9vbWVkUmVjdCwgbWVkaWFFbGVtZW50LT5wZXJjZW50
TG9hZGVkKCkgKiBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCksIG1lZGlhRWxlbWVudC0+Y3VycmVu
dFRpbWUoKSwgbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpLCBkZXRlcm1pbmVTdGF0ZShvKSk7CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRp
YUNvbnRyb2xzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9s
cy5oCmluZGV4IDhhMTZjMmY3ODdkOTllNTVhZmU3ODE0MWUzOGZhY2E3OWEzMTYyNTAuLmRlMDJm
MmFhM2VjY2Q4MGMzNDc1YWFlNzE5ZTlmOTI4YmUzYWFjYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaApAQCAtNDUsNyArNDUsNyBAQCBjbGFz
cyBSZW5kZXJNZWRpYUNvbnRyb2xzIHsKIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAg
ICBzdGF0aWMgYm9vbCBwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhQ29udHJvbEVsZW1lbnRU
eXBlLCBSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgc3RhdGljIGJvb2wgcGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNvbnRyb2xFbGVtZW50
VHlwZSwgY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwogICAgIHN0YXRpYyB2b2lkIGFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlclN0
eWxlKik7CiAjZW5kaWYKICAgICBzdGF0aWMgSW50UG9pbnQgdm9sdW1lU2xpZGVyT2Zmc2V0RnJv
bU11dGVCdXR0b24oUmVuZGVyQm94KiwgY29uc3QgSW50U2l6ZSYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCBhMDAzMDdjMTk1MGFlMDRiNDhhMWNmYzRm
NTc5MTU4MTg4NTJkODc5Li43YmVmZGM1ZGExNDkzN2MwYmMyMmYwMTY3YzhlZjk1NDdjZjM0Mjli
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtNzI1LDcg
KzcyNSw3IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5pbmdCbG9jaygpIGNv
bnN0CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3ND
b250ZXh0KiBncmFwaGljc0NvbnRleHQsIGZsb2F0IHgxLCBmbG9hdCB5MSwgZmxvYXQgeDIsIGZs
b2F0IHkyLAotICAgIEJveFNpZGUgc2lkZSwgQ29sb3IgY29sb3IsIEVCb3JkZXJTdHlsZSBib3Jk
ZXJTdHlsZSwgZmxvYXQgYWRqYWNlbnRXaWR0aDEsIGZsb2F0IGFkamFjZW50V2lkdGgyLCBib29s
IGFudGlhbGlhcykKKyAgICBCb3hTaWRlIHNpZGUsIENvbG9yIGNvbG9yLCBFQm9yZGVyU3R5bGUg
Ym9yZGVyU3R5bGUsIGZsb2F0IGFkamFjZW50V2lkdGgxLCBmbG9hdCBhZGphY2VudFdpZHRoMiwg
Ym9vbCBhbnRpYWxpYXMpIGNvbnN0CiB7CiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBk
b2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgZmxvYXQgdGhpY2tuZXNzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGNhOGE2ZGVhN2M2ODk0OWM3
YmUwMDc4MmQzZDRiNGZhOTlkYmJhZTYuLmU1ODAzZTBkYjZiMDY4YTQ4OTE3NTA5NmUzYzNkNDU1
YjQ5YmIyNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTg3
OSw3ICs4NzksNyBAQCBwdWJsaWM6CiAKICAgICBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0g
c2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSBjb25zdDsKIAotICAgIHZvaWQgZHJhd0xp
bmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHgxLCBmbG9hdCB5MSwgZmxvYXQg
eDIsIGZsb2F0IHkyLCBCb3hTaWRlLCBDb2xvciwgRUJvcmRlclN0eWxlLCBmbG9hdCBhZGpidzEs
IGZsb2F0IGFkamJ3MiwgYm9vbCBhbnRpYWxpYXMgPSBmYWxzZSk7CisgICAgdm9pZCBkcmF3TGlu
ZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0KiwgZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4
MiwgZmxvYXQgeTIsIEJveFNpZGUsIENvbG9yLCBFQm9yZGVyU3R5bGUsIGZsb2F0IGFkamJ3MSwg
ZmxvYXQgYWRqYncyLCBib29sIGFudGlhbGlhcyA9IGZhbHNlKSBjb25zdDsKIHByb3RlY3RlZDoK
ICAgICB2b2lkIHBhaW50Rm9jdXNSaW5nKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jiwg
UmVuZGVyU3R5bGUqKTsKICAgICB2b2lkIHBhaW50T3V0bGluZShQYWludEluZm8mLCBjb25zdCBM
YXlvdXRSZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UHJvZ3Jlc3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNw
cAppbmRleCA0MTM5ZDI1ZDk5MmQ2MmI3NDg2YjFkMzE4NWYwNjAzN2M1MjRkZmZlLi44NDMyZjYw
NGY0MzhhMjJjMzc2NGNlOThhMzU3MDUzOTY3ZTA3ZWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBSZW5kZXJQ
cm9ncmVzczo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBM
YXlvdXRVbml0IGwKICAgICAgICAgZnJhbWUuc2V0SGVpZ2h0KGNvbXB1dGVkVmFsdWVzLm1fZXh0
ZW50KTsKICAgICBlbHNlCiAgICAgICAgIGZyYW1lLnNldFdpZHRoKGNvbXB1dGVkVmFsdWVzLm1f
ZXh0ZW50KTsKLSAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IHRoZW1lKCkucHJvZ3Jlc3NCYXJSZWN0
Rm9yQm91bmRzKHRoaXMsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhbWUpKS5zaXplKCk7CisgICAg
SW50U2l6ZSBmcmFtZVNpemUgPSB0aGVtZSgpLnByb2dyZXNzQmFyUmVjdEZvckJvdW5kcygqdGhp
cywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFtZSkpLnNpemUoKTsKICAgICBjb21wdXRlZFZhbHVl
cy5tX2V4dGVudCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFtZVNpemUuaGVpZ2h0
KCkgOiBmcmFtZVNpemUud2lkdGgoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAppbmRleCA0YWJlNzk2
ZDNhNWU2NjA2Yzc5YmQ0Y2VhMTQxNDI4ZjZhMjM1NTFjLi5jNzdjNzIxZDQyZWVlZTYxZWEyYzFi
NWI3OWMyZGU3YzkyNWY5MzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcApAQCAtODQsNyArODQsNyBAQCB2
b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JgogCiAgICAgICAgIC8vIENvbnZlcnQgdGhlIHJlY3QgaW50
byB0aGUgY29vcmRzIHVzZWQgZm9yIHBhaW50aW5nIHRoZSBjb250ZW50CiAgICAgICAgIGNvbnRl
bnRzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpKTsKLSAgICAgICAgdGhlbWUo
KS5wYWludENhcHNMb2NrSW5kaWNhdG9yKHRoaXMsIHBhaW50SW5mbywgcGl4ZWxTbmFwcGVkSW50
UmVjdChjb250ZW50c1JlY3QpKTsKKyAgICAgICAgdGhlbWUoKS5wYWludENhcHNMb2NrSW5kaWNh
dG9yKCp0aGlzLCBwYWludEluZm8sIHBpeGVsU25hcHBlZEludFJlY3QoY29udGVudHNSZWN0KSk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRl
eCBjNzlkYmNiY2U0MTMwM2VmNzQwOTNmM2E5ZjdmYmI0YWZkMzZjODlmLi5jMDFkZDQzYWFkZjk1
NDlmNDBkYmY5OWY3YTQzMDg2ZDE0OTFhZDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZS5jcHAKQEAgLTI2MywyMCArMjYzLDIwIEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFk
anVzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHls
ZSwKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OnBhaW50KFJlbmRlck9iamVjdCogbywg
Q29udHJvbFN0YXRlcyogY29udHJvbFN0YXRlcywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lOjpwYWludChjb25zdCBSZW5kZXJP
YmplY3QmIG8sIENvbnRyb2xTdGF0ZXMqIGNvbnRyb2xTdGF0ZXMsIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIC8vIElmIHBhaW50aW5nIGlzIGRp
c2FibGVkLCBidXQgd2UgYXJlbid0IHVwZGF0aW5nIGNvbnRyb2wgdGludHMsIHRoZW4ganVzdCBi
YWlsLgogICAgIC8vIElmIHdlIGFyZSB1cGRhdGluZyBjb250cm9sIHRpbnRzLCBqdXN0IHNjaGVk
dWxlIGEgcmVwYWludCBpZiB0aGUgdGhlbWUgc3VwcG9ydHMgdGludGluZwogICAgIC8vIGZvciB0
aGF0IGNvbnRyb2wuCiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT51cGRhdGluZ0NvbnRyb2xU
aW50cygpKSB7CiAgICAgICAgIGlmIChjb250cm9sU3VwcG9ydHNUaW50cyhvKSkKLSAgICAgICAg
ICAgIG8tPnJlcGFpbnQoKTsKKyAgICAgICAgICAgIG8ucmVwYWludCgpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDb250cm9sUGFydCBwYXJ0ID0g
by0+c3R5bGUoKS5hcHBlYXJhbmNlKCk7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IG8uc3R5bGUo
KS5hcHBlYXJhbmNlKCk7CiAKICNpZiBVU0UoTkVXX1RIRU1FKQogICAgIHN3aXRjaCAocGFydCkg
ewpAQCAtMjg4LDcgKzI4OCw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnBhaW50KFJlbmRlck9iamVj
dCogbywgQ29udHJvbFN0YXRlcyogY29udHJvbFN0YXRlcywgY29uc3QgUGFpCiAgICAgY2FzZSBC
dXR0b25QYXJ0OgogICAgIGNhc2UgSW5uZXJTcGluQnV0dG9uUGFydDoKICAgICAgICAgdXBkYXRl
Q29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKG8sIGNvbnRyb2xTdGF0ZXMpOwotICAgICAgICBtX3Ro
ZW1lLT5wYWludChwYXJ0LCBjb250cm9sU3RhdGVzLCBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4
dCo+KHBhaW50SW5mby5jb250ZXh0KSwgciwgby0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCksICZv
LT52aWV3KCkuZnJhbWVWaWV3KCkpOworICAgICAgICBtX3RoZW1lLT5wYWludChwYXJ0LCBjb250
cm9sU3RhdGVzLCBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dCo+KHBhaW50SW5mby5jb250ZXh0
KSwgciwgby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSwgJm8udmlldygpLmZyYW1lVmlldygpKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAt
NDA1LDE3ICs0MDUsMTcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnQoUmVuZGVyT2JqZWN0KiBv
LCBDb250cm9sU3RhdGVzKiBjb250cm9sU3RhdGVzLCBjb25zdCBQYWkKICAgICByZXR1cm4gdHJ1
ZTsgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aGUgYXBwZWFyYW5jZSwgc28gbGV0IHRoZSBub3JtYWwg
YmFja2dyb3VuZC9ib3JkZXIgcGFpbnQuCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OnBhaW50Qm9y
ZGVyT25seShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRCb3JkZXJPbmx5KGNvbnN0IFJl
bmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCiB7CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIFBMQVRGT1JNKElPUykKICAgICBVTlVTRURfUEFS
QU0ocik7Ci0gICAgcmV0dXJuIG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpICE9IE5vQ29udHJvbFBh
cnQ7CisgICAgcmV0dXJuIG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgIT0gTm9Db250cm9sUGFydDsK
ICNlbHNlCiAgICAgLy8gQ2FsbCB0aGUgYXBwcm9wcmlhdGUgcGFpbnQgbWV0aG9kIGJhc2VkIG9m
ZiB0aGUgYXBwZWFyYW5jZSB2YWx1ZS4KLSAgICBzd2l0Y2ggKG8tPnN0eWxlKCkuYXBwZWFyYW5j
ZSgpKSB7CisgICAgc3dpdGNoIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpKSB7CiAgICAgY2FzZSBU
ZXh0RmllbGRQYXJ0OgogICAgICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgcGFpbnRJbmZv
LCByKTsKICAgICBjYXNlIExpc3Rib3hQYXJ0OgpAQCAtNDYzLDEzICs0NjMsMTMgQEAgYm9vbCBS
ZW5kZXJUaGVtZTo6cGFpbnRCb3JkZXJPbmx5KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGMKICNlbmRpZgogfQogCi1ib29sIFJlbmRlclRoZW1lOjpwYWludERl
Y29yYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0
aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQt
PnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQ2Fs
bCB0aGUgYXBwcm9wcmlhdGUgcGFpbnQgbWV0aG9kIGJhc2VkIG9mZiB0aGUgYXBwZWFyYW5jZSB2
YWx1ZS4KLSAgICBzd2l0Y2ggKHJlbmRlcmVyLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgeworICAg
IHN3aXRjaCAocmVuZGVyZXIuc3R5bGUoKS5hcHBlYXJhbmNlKCkpIHsKICAgICBjYXNlIE1lbnVs
aXN0QnV0dG9uUGFydDoKICAgICAgICAgcmV0dXJuIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0
aW9ucyhyZW5kZXJlciwgcGFpbnRJbmZvLCByZWN0KTsKICAgICBjYXNlIFRleHRGaWVsZFBhcnQ6
CkBAIC02NjYsMTcgKzY2NiwxNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAogICAgIHJldHVybiBwbGF0
Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7CiB9CiAKLWludCBSZW5kZXJU
aGVtZTo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CitpbnQg
UmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25z
dAogewotICAgIGlmICghby0+aXNCb3goKSkKKyAgICBpZiAoIW8uaXNCb3goKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KG8pOwor
ICAgIGNvbnN0IFJlbmRlckJveCYgYm94ID0gKnRvUmVuZGVyQm94KCZvKTsKIAogI2lmIFVTRShO
RVdfVEhFTUUpCi0gICAgcmV0dXJuIGJveC0+aGVpZ2h0KCkgKyBib3gtPm1hcmdpblRvcCgpICsg
bV90aGVtZS0+YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQoby0+c3R5bGUoKS5hcHBlYXJhbmNl
KCkpICogby0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgcmV0dXJuIGJveC5oZWlnaHQo
KSArIGJveC5tYXJnaW5Ub3AoKSArIG1fdGhlbWUtPmJhc2VsaW5lUG9zaXRpb25BZGp1c3RtZW50
KG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkpICogby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKICNl
bHNlCi0gICAgcmV0dXJuIGJveC0+aGVpZ2h0KCkgKyBib3gtPm1hcmdpblRvcCgpOworICAgIHJl
dHVybiBib3guaGVpZ2h0KCkgKyBib3gubWFyZ2luVG9wKCk7CiAjZW5kaWYKIH0KIApAQCAtNzE0
LDExICs3MTQsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm8KICAgICB9CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogbywgSW50
UmVjdCYgcikKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgSW50UmVjdCYgcikKIHsKICNpZiBVU0UoTkVXX1RIRU1FKQogICAgIENvbnRy
b2xTdGF0ZXMgc3RhdGVzKGV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIobykpOwotICAg
IG1fdGhlbWUtPmluZmxhdGVDb250cm9sUGFpbnRSZWN0KG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgp
LCAmc3RhdGVzLCByLCBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CisgICAgbV90aGVtZS0+
aW5mbGF0ZUNvbnRyb2xQYWludFJlY3Qoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSwgJnN0YXRlcywg
ciwgby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShv
KTsKICAgICBVTlVTRURfUEFSQU0ocik7CkBAIC03MzAsMTAgKzczMCwxMCBAQCBib29sIFJlbmRl
clRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
CiAgICAgcmV0dXJuIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpICYmIHN0eWxlLT5hcHBlYXJhbmNl
KCkgIT0gVGV4dEZpZWxkUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IFRleHRBcmVhUGFy
dCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IE1lbnVsaXN0QnV0dG9uUGFydCAmJiBzdHlsZS0+
YXBwZWFyYW5jZSgpICE9IExpc3Rib3hQYXJ0KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6c3Rh
dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogbywgQ29udHJvbFN0YXRlczo6U3RhdGVzIHN0YXRlKSBj
b25zdAorYm9vbCBSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKGNvbnN0IFJlbmRlck9iamVjdCYg
bywgQ29udHJvbFN0YXRlczo6U3RhdGVzIHN0YXRlKSBjb25zdAogewogICAgIC8vIERlZmF1bHQg
aW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGUgY29udHJvbHMgZG9uJ3QgcmVzcG9uZCB0byBjaGFu
Z2VzIGluIDpob3ZlciBzdGF0ZQotICAgIGlmIChzdGF0ZSA9PSBDb250cm9sU3RhdGVzOjpIb3Zl
clN0YXRlICYmICFzdXBwb3J0c0hvdmVyKCZvLT5zdHlsZSgpKSkKKyAgICBpZiAoc3RhdGUgPT0g
Q29udHJvbFN0YXRlczo6SG92ZXJTdGF0ZSAmJiAhc3VwcG9ydHNIb3Zlcigmby5zdHlsZSgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQXNzdW1lIHByZXNzZWQgc3RhdGUgaXMg
b25seSByZXNwb25kZWQgdG8gaWYgdGhlIGNvbnRyb2wgaXMgZW5hYmxlZC4KQEAgLTc0MSwxNyAr
NzQxLDE3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnN0YXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG8s
IENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBzdGF0ZSkgY29uCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIC8vIFJlcGFpbnQgdGhlIGNvbnRyb2wuCi0gICAgby0+cmVwYWludCgpOworICAgIG8u
cmVwYWludCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjp1cGRh
dGVDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBDb250cm9s
U3RhdGVzKiBjb250cm9sU3RhdGVzKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6dXBkYXRlQ29u
dHJvbFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCYgbywgQ29udHJvbFN0YXRl
cyogY29udHJvbFN0YXRlcykgY29uc3QKIHsKICAgICBDb250cm9sU3RhdGVzIG5ld1N0YXRlcyA9
IGV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIobyk7CiAgICAgY29udHJvbFN0YXRlcy0+
c2V0U3RhdGVzKG5ld1N0YXRlcy5zdGF0ZXMoKSk7CiB9CiAKLUNvbnRyb2xTdGF0ZXM6OlN0YXRl
cyBSZW5kZXJUaGVtZTo6ZXh0cmFjdENvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5k
ZXJPYmplY3QqIG8pIGNvbnN0CitDb250cm9sU3RhdGVzOjpTdGF0ZXMgUmVuZGVyVGhlbWU6OmV4
dHJhY3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25z
dAogewogICAgIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBzdGF0ZXMgPSAwOwogICAgIGlmIChpc0hv
dmVyZWQobykpIHsKQEAgLTc2NCw3ICs3NjQsNyBAQCBDb250cm9sU3RhdGVzOjpTdGF0ZXMgUmVu
ZGVyVGhlbWU6OmV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyTwog
ICAgICAgICBpZiAoaXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChvKSkKICAgICAgICAgICAgIHN0
YXRlcyB8PSBDb250cm9sU3RhdGVzOjpTcGluVXBTdGF0ZTsKICAgICB9Ci0gICAgaWYgKGlzRm9j
dXNlZChvKSAmJiBvLT5zdHlsZSgpLm91dGxpbmVTdHlsZUlzQXV0bygpKQorICAgIGlmIChpc0Zv
Y3VzZWQobykgJiYgby5zdHlsZSgpLm91dGxpbmVTdHlsZUlzQXV0bygpKQogICAgICAgICBzdGF0
ZXMgfD0gQ29udHJvbFN0YXRlczo6Rm9jdXNTdGF0ZTsKICAgICBpZiAoaXNFbmFibGVkKG8pKQog
ICAgICAgICBzdGF0ZXMgfD0gQ29udHJvbFN0YXRlczo6RW5hYmxlZFN0YXRlOwpAQCAtNzgxLDkg
Kzc4MSw5IEBAIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBSZW5kZXJUaGVtZTo6ZXh0cmFjdENvbnRy
b2xTdGF0ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPCiAgICAgcmV0dXJuIHN0YXRlczsKIH0K
IAotYm9vbCBSZW5kZXJUaGVtZTo6aXNBY3RpdmUoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25z
dAorYm9vbCBSZW5kZXJUaGVtZTo6aXNBY3RpdmUoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25z
dAogewotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IG8ubm9k
ZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC03OTgsNDEg
Kzc5OCw0MSBAQCBib29sIFJlbmRlclRoZW1lOjppc0FjdGl2ZShjb25zdCBSZW5kZXJPYmplY3Qq
IG8pIGNvbnN0CiAgICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7
CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzQ2hlY2tlZChjb25zdCBSZW5kZXJPYmplY3QqIG8p
IGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc0NoZWNrZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBv
KSBjb25zdAogewotICAgIGlmICghby0+bm9kZSgpKQorICAgIGlmICghby5ub2RlKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9
IG8tPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQgPSBvLm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoIWlucHV0RWxl
bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+
c2hvdWxkQXBwZWFyQ2hlY2tlZCgpOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjppc0luZGV0ZXJt
aW5hdGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6aXNJ
bmRldGVybWluYXRlKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKIHsKLSAgICBpZiAoIW8t
Pm5vZGUoKSkKKyAgICBpZiAoIW8ubm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBvLT5ub2RlKCktPnRvSW5wdXRFbGVt
ZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gby5ub2RlKCktPnRv
SW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKCFpbnB1dEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckluZGV0ZXJtaW5h
dGUoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNFbmFibGVkKGNvbnN0IFJlbmRlck9iamVj
dCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzRW5hYmxlZChjb25zdCBSZW5kZXJPYmpl
Y3QmIG8pIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAgICBOb2RlKiBu
b2RlID0gby5ub2RlKCk7CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiAhdG9FbGVtZW50KG5vZGUpLT5pc0Rp
c2FibGVkRm9ybUNvbnRyb2woKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKGNv
bnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzRm9jdXNlZChj
b25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IG8tPm5vZGUo
KTsKKyAgICBOb2RlKiBub2RlID0gby5ub2RlKCk7CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5p
c0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtODQyLDE2ICs4NDIs
MTYgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKGNvbnN0IFJlbmRlck9iamVjdCogbykg
Y29uc3QKICAgICByZXR1cm4gZm9jdXNEZWxlZ2F0ZSA9PSBkb2N1bWVudC5mb2N1c2VkRWxlbWVu
dCgpICYmIGZyYW1lICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKTsK
IH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCogbykg
Y29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzUHJlc3NlZChjb25zdCBSZW5kZXJPYmplY3QmIG8p
IGNvbnN0CiB7Ci0gICAgaWYgKCFvLT5ub2RlKCkgfHwgIW8tPm5vZGUoKS0+aXNFbGVtZW50Tm9k
ZSgpKQorICAgIGlmICghby5ub2RlKCkgfHwgIW8ubm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdG9FbGVtZW50KG8tPm5vZGUoKSktPmFj
dGl2ZSgpOworICAgIHJldHVybiB0b0VsZW1lbnQoby5ub2RlKCkpLT5hY3RpdmUoKTsKIH0KIAot
Ym9vbCBSZW5kZXJUaGVtZTo6aXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChjb25zdCBSZW5kZXJP
YmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc1NwaW5VcEJ1dHRvblBhcnRQcmVz
c2VkKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKIHsKLSAgICBOb2RlKiBub2RlID0gby0+
bm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5v
ZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CkBAIC04NjAsMTcgKzg2MCwxNyBAQCBib29sIFJl
bmRlclRoZW1lOjppc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCog
bykgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3BpbkJ1dHRvbkVsZW1lbnQqPihlbGVt
ZW50KS0+dXBEb3duU3RhdGUoKSA9PSBTcGluQnV0dG9uRWxlbWVudDo6VXA7CiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWU6OmlzUmVhZE9ubHlDb250cm9sKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29u
c3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzUmVhZE9ubHlDb250cm9sKGNvbnN0IFJlbmRlck9iamVj
dCYgbykgY29uc3QKIHsKLSAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIE5vZGUqIG5v
ZGUgPSBvLm5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSktPm1hdGNo
ZXNSZWFkT25seVBzZXVkb0NsYXNzKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzSG92ZXJl
ZChjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc0hvdmVy
ZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBvLT5u
b2RlKCk7CisgICAgTm9kZSogbm9kZSA9IG8ubm9kZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCF0b0Vs
ZW1lbnQobm9kZSktPmlzU3BpbkJ1dHRvbkVsZW1lbnQoKSkKQEAgLTg3OSwyNSArODc5LDI1IEBA
IGJvb2wgUmVuZGVyVGhlbWU6OmlzSG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0
CiAgICAgcmV0dXJuIGVsZW1lbnQtPmhvdmVyZWQoKSAmJiBlbGVtZW50LT51cERvd25TdGF0ZSgp
ICE9IFNwaW5CdXR0b25FbGVtZW50OjpJbmRldGVybWluYXRlOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lOjppc1NwaW5VcEJ1dHRvblBhcnRIb3ZlcmVkKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29u
c3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQoY29uc3QgUmVu
ZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAg
Tm9kZSogbm9kZSA9IG8ubm9kZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50
Tm9kZSgpIHx8ICF0b0VsZW1lbnQobm9kZSktPmlzU3BpbkJ1dHRvbkVsZW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIFNwaW5CdXR0b25FbGVtZW50KiBlbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8U3BpbkJ1dHRvbkVsZW1lbnQqPihub2RlKTsKICAgICByZXR1cm4gZWxlbWVudC0+dXBE
b3duU3RhdGUoKSA9PSBTcGluQnV0dG9uRWxlbWVudDo6VXA7CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWU6OmlzRGVmYXVsdChjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRo
ZW1lOjppc0RlZmF1bHQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewogICAgIC8vIEEg
YnV0dG9uIHNob3VsZCBvbmx5IGhhdmUgdGhlIGRlZmF1bHQgYXBwZWFyYW5jZSBpZiB0aGUgcGFn
ZSBpcyBhY3RpdmUKICAgICBpZiAoIWlzQWN0aXZlKG8pKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoIW8tPmZyYW1lKCkuc2V0dGluZ3MoKS5hcHBsaWNhdGlvbkNocm9tZU1vZGUo
KSkKKyAgICBpZiAoIW8uZnJhbWUoKS5zZXR0aW5ncygpLmFwcGxpY2F0aW9uQ2hyb21lTW9kZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIG8tPnN0eWxlKCkuYXBw
ZWFyYW5jZSgpID09IERlZmF1bHRCdXR0b25QYXJ0OworICAgIHJldHVybiBvLnN0eWxlKCkuYXBw
ZWFyYW5jZSgpID09IERlZmF1bHRCdXR0b25QYXJ0OwogfQogCiAjaWYgIVVTRShORVdfVEhFTUUp
CkBAIC05NjcsNyArOTY3LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0SW5wdXRGaWVsZFNw
ZWVjaEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIKICAgICBSZW5kZXJJ
bnB1dFNwZWVjaDo6YWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2
ZXIsIHN0eWxlLCBlbGVtZW50KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRJbnB1dEZp
ZWxkU3BlZWNoQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWU6OnBhaW50SW5w
dXRGaWVsZFNwZWVjaEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIFJl
bmRlcklucHV0U3BlZWNoOjpwYWludElucHV0RmllbGRTcGVlY2hCdXR0b24ob2JqZWN0LCBwYWlu
dEluZm8sIHJlY3QpOwogfQpAQCAtOTg5LDcgKzk4OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnN1
cHBvcnRzTWV0ZXIoQ29udHJvbFBhcnQpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIFJlbmRlclRoZW1lOjpwYWludE1ldGVyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKQorYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRNZXRlcihjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKIHsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwMDIsOSArMTAwMiw5IEBAIExheW91dFVuaXQgUmVuZGVyVGhl
bWU6OnNsaWRlclRpY2tTbmFwcGluZ1RocmVzaG9sZCgpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3MoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgUmVu
ZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3MoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBOb2RlKiBu
b2RlID0gby0+bm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsKICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTAxOCwxNCArMTAxOCwxNCBAQCB2b2lkIFJlbmRl
clRoZW1lOjpwYWludFNsaWRlclRpY2tzKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sCiAKICAgICBkb3VibGUgbWluID0gaW5wdXQtPm1pbmltdW0oKTsKICAgICBk
b3VibGUgbWF4ID0gaW5wdXQtPm1heGltdW0oKTsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gby0+
c3R5bGUoKS5hcHBlYXJhbmNlKCk7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IG8uc3R5bGUoKS5h
cHBlYXJhbmNlKCk7CiAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aWNrcyBvbiBhbHRlcm5hdGUg
c2xpZGVycyBsaWtlIE1lZGlhVm9sdW1lU2xpZGVycy4KICAgICBpZiAocGFydCAhPSAgU2xpZGVy
SG9yaXpvbnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJWZXJ0aWNhbFBhcnQpCiAgICAgICAgIHJl
dHVybjsKICAgICBib29sIGlzSG9yaXpvbnRhbCA9IHBhcnQgPT0gIFNsaWRlckhvcml6b250YWxQ
YXJ0OwogCiAgICAgSW50U2l6ZSB0aHVtYlNpemU7Ci0gICAgUmVuZGVyT2JqZWN0KiB0aHVtYlJl
bmRlcmVyID0gaW5wdXQtPnNsaWRlclRodW1iRWxlbWVudCgpLT5yZW5kZXJlcigpOworICAgIGNv
bnN0IFJlbmRlck9iamVjdCogdGh1bWJSZW5kZXJlciA9IGlucHV0LT5zbGlkZXJUaHVtYkVsZW1l
bnQoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAodGh1bWJSZW5kZXJlcikgewogICAgICAgICBjb25z
dCBSZW5kZXJTdHlsZSYgdGh1bWJTdHlsZSA9IHRodW1iUmVuZGVyZXItPnN0eWxlKCk7CiAgICAg
ICAgIGludCB0aHVtYldpZHRoID0gdGh1bWJTdHlsZS53aWR0aCgpLmludFZhbHVlKCk7CkBAIC0x
MDM1LDcgKzEwMzUsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sCiAgICAgfQogCiAgICAgSW50
U2l6ZSB0aWNrU2l6ZSA9IHNsaWRlclRpY2tTaXplKCk7Ci0gICAgZmxvYXQgem9vbUZhY3RvciA9
IG8tPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBvLnN0
eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwogICAgIEZsb2F0UmVjdCB0aWNrUmVjdDsKICAgICBpbnQg
dGlja1JlZ2lvblNpZGVNYXJnaW4gPSAwOwogICAgIGludCB0aWNrUmVnaW9uV2lkdGggPSAwOwpA
QCAtMTA0NCw3ICsxMDQ0LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6cGFpbnRTbGlkZXJUaWNrcyhS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLAogICAgIC8vIFdlIGNh
biBpZ25vcmluZyB0cmFuc2Zvcm1zIGJlY2F1c2UgdHJhbnNmb3JtIGlzIGhhbmRsZWQgYnkgdGhl
IGdyYXBoaWNzIGNvbnRleHQuCiAgICAgaWYgKHRyYWNrUmVuZGVyZXIpCiAgICAgICAgIHRyYWNr
Qm91bmRzID0gdHJhY2tSZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1Ry
YW5zZm9ybXMoKTsKLSAgICBJbnRSZWN0IHNsaWRlckJvdW5kcyA9IG8tPmFic29sdXRlQm91bmRp
bmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCk7CisgICAgSW50UmVjdCBzbGlkZXJCb3VuZHMg
PSBvLmFic29sdXRlQm91bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCk7CiAKICAgICAv
LyBNYWtlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSB0cmFuc2Zvcm1lZCBhbmNlc3RvciBlbGVt
ZW50LgogICAgIHRyYWNrQm91bmRzLnNldFgodHJhY2tCb3VuZHMueCgpIC0gc2xpZGVyQm91bmRz
LngoKSArIHJlY3QueCgpKTsKQEAgLTEwNjUsNyArMTA2NSw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6
OnBhaW50U2xpZGVyVGlja3MoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywKICAgICB9CiAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBvcHRpb25zID0gZGF0YUxp
c3QtPm9wdGlvbnMoKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
KnBhaW50SW5mby5jb250ZXh0KTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9y
KG8tPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKG8u
c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IE5vZGUqIG5vZGUgPSBvcHRp
b25zLT5pdGVtKGkpOyBpKyspIHsKICAgICAgICAgQVNTRVJUKGlzSFRNTE9wdGlvbkVsZW1lbnQo
bm9kZSkpOwogICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvSFRN
TE9wdGlvbkVsZW1lbnQobm9kZSk7CkBAIC0xMDc0LDcgKzEwNzQsNyBAQCB2b2lkIFJlbmRlclRo
ZW1lOjpwYWludFNsaWRlclRpY2tzKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZG91YmxlIHBhcnNlZFZh
bHVlID0gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoaW5wdXQtPnNhbml0aXplVmFsdWUodmFs
dWUpKTsKICAgICAgICAgZG91YmxlIHRpY2tGcmFjdGlvbiA9IChwYXJzZWRWYWx1ZSAtIG1pbikg
LyAobWF4IC0gbWluKTsKLSAgICAgICAgZG91YmxlIHRpY2tSYXRpbyA9IGlzSG9yaXpvbnRhbCAm
JiBvLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHRpY2tGcmFjdGlvbiA6IDEu
MCAtIHRpY2tGcmFjdGlvbjsKKyAgICAgICAgZG91YmxlIHRpY2tSYXRpbyA9IGlzSG9yaXpvbnRh
bCAmJiBvLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gdGlja0ZyYWN0aW9uIDog
MS4wIC0gdGlja0ZyYWN0aW9uOwogICAgICAgICBkb3VibGUgdGlja1Bvc2l0aW9uID0gcm91bmQo
dGlja1JlZ2lvblNpZGVNYXJnaW4gKyB0aWNrUmVnaW9uV2lkdGggKiB0aWNrUmF0aW8pOwogICAg
ICAgICBpZiAoaXNIb3Jpem9udGFsKQogICAgICAgICAgICAgdGlja1JlY3Quc2V0WCh0aWNrUG9z
aXRpb24pOwpAQCAtMTEwMCw3ICsxMTAwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UHJv
Z3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikKIHsK
IH0KIAotSW50UmVjdCBSZW5kZXJUaGVtZTo6cHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0
IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmIGJvdW5kcykgY29uc3QKK0ludFJlY3QgUmVu
ZGVyVGhlbWU6OnByb2dyZXNzQmFyUmVjdEZvckJvdW5kcyhjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGJvdW5kczsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKaW5kZXggOWJkODBlOThjMWEzYjQxNDA4
Yzg3ZTMwNmFlNTBlYWQyZGVjYjM5OS4uYzdkZTJkNTM2YmI5ZWI1NTU2YTI0ZmUxMTI5ZjZkYzQ0
ODI3NmU0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKQEAgLTc5LDkg
Kzc5LDkgQEAgcHVibGljOgogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBwYWludCB0
aGUgd2lkZ2V0IGFzIGEgYmFja2dyb3VuZCBvZiB0aGUgUmVuZGVyT2JqZWN0LiAgQSB3aWRnZXQn
cyBmb3JlZ3JvdW5kLCBlLmcuLCB0aGUKICAgICAvLyB0ZXh0IG9mIGEgYnV0dG9uLCBpcyBhbHdh
eXMgcmVuZGVyZWQgYnkgdGhlIGVuZ2luZSBpdHNlbGYuICBUaGUgYm9vbGVhbiByZXR1cm4gdmFs
dWUgaW5kaWNhdGVzCiAgICAgLy8gd2hldGhlciB0aGUgQ1NTIGJvcmRlci9iYWNrZ3JvdW5kIHNo
b3VsZCBhbHNvIGJlIHBhaW50ZWQuCi0gICAgYm9vbCBwYWludChSZW5kZXJPYmplY3QqLCBDb250
cm9sU3RhdGVzKiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIGJvb2wg
cGFpbnRCb3JkZXJPbmx5KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKLSAgICBib29sIHBhaW50RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIGJvb2wgcGFpbnQoY29uc3QgUmVuZGVy
T2JqZWN0JiwgQ29udHJvbFN0YXRlcyosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICBib29sIHBhaW50Qm9yZGVyT25seShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgYm9vbCBwYWludERlY29yYXRpb25zKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAog
ICAgIC8vIFRoZSByZW1haW5pbmcgbWV0aG9kcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgdGhl
IHBsYXRmb3JtLXNwZWNpZmljIHBvcnRpb24gb2YgdGhlIHRoZW1lLCBlLmcuLAogICAgIC8vIFJl
bmRlclRoZW1lTWFjLmNwcCBmb3IgTWFjIE9TIFguCkBAIC0xMDYsMTQgKzEwNiwxNCBAQCBwdWJs
aWM6CiAgICAgLy8gQSBtZXRob2QgdG8gb2J0YWluIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBmb3Ig
YSAibGVhZiIgY29udHJvbC4gIFRoaXMgd2lsbCBvbmx5IGJlIHVzZWQgaWYgYSBiYXNlbGluZQog
ICAgIC8vIHBvc2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyBjaGlsZCBj
b250ZW50LiBDaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBleGFtcGxlcyBvZgogICAg
IC8vIGNvbnRyb2xzIHRoYXQgbmVlZCB0byBkbyB0aGlzLgotICAgIHZpcnR1YWwgaW50IGJhc2Vs
aW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQg
YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKIAogICAgIC8vIEEg
bWV0aG9kIGZvciBhc2tpbmcgaWYgYSBjb250cm9sIGlzIGEgY29udGFpbmVyIG9yIG5vdC4gIExl
YWYgY29udHJvbHMgaGF2ZSB0byBoYXZlIHNvbWUgc3BlY2lhbCBiZWhhdmlvciAobGlrZQogICAg
IC8vIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBBUEkgYWJvdmUpLgogICAgIGJvb2wgaXNDb250cm9s
Q29udGFpbmVyKENvbnRyb2xQYXJ0KSBjb25zdDsKIAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBp
ZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMg
b3Igbm90LgotICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5k
ZXJPYmplY3QqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBjb250
cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCiAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIGNvbnRyb2wgaGFzIGJlZW4gc3R5bGVk
IGVub3VnaCBieSB0aGUgYXV0aG9yIHRvIGRpc2FibGUgdGhlIG5hdGl2ZSBhcHBlYXJhbmNlLgog
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25z
dCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRD
b2xvcikgY29uc3Q7CkBAIC0xMjMsMTEgKzEyMywxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBTb21l
IGNvbnRyb2xzIG1heSBzcGlsbCBvdXQgb2YgdGhlaXIgY29udGFpbmVycyAoZS5nLiwgdGhlIGNo
ZWNrIG9uIGFuIE9TIFggY2hlY2tib3gpLiAgV2hlbiB0aGVzZSBjb250cm9scyByZXBhaW50LAog
ICAgIC8vIHRoZSB0aGVtZSBuZWVkcyB0byBjb21tdW5pY2F0ZSB0aGlzIGluZmxhdGVkIHJlY3Qg
dG8gdGhlIGVuZ2luZSBzbyB0aGF0IGl0IGNhbiBpbnZhbGlkYXRlIHRoZSB3aG9sZSBjb250cm9s
LgotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3Qq
LCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJl
bmRlck9iamVjdCYsIEludFJlY3QmKTsKIAogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3
aGVuZXZlciBhIHJlbGV2YW50IHN0YXRlIGNoYW5nZXMgb24gYSBwYXJ0aWN1bGFyIHRoZW1lZCBv
YmplY3QsIGUuZy4sIHRoZSBtb3VzZSBiZWNvbWVzIHByZXNzZWQKICAgICAvLyBvciBhIGNvbnRy
b2wgYmVjb21lcyBkaXNhYmxlZC4KLSAgICB2aXJ0dWFsIGJvb2wgc3RhdGVDaGFuZ2VkKFJlbmRl
ck9iamVjdCosIENvbnRyb2xTdGF0ZXM6OlN0YXRlcykgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IHN0YXRlQ2hhbmdlZChjb25zdCBSZW5kZXJPYmplY3QmLCBDb250cm9sU3RhdGVzOjpTdGF0ZXMp
IGNvbnN0OwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSB0aGVt
ZSBjaGFuZ2VzIG9uIHRoZSBzeXN0ZW0gaW4gb3JkZXIgdG8gZmx1c2ggY2FjaGVkIHJlc291cmNl
cyBmcm9tIHRoZQogICAgIC8vIG9sZCB0aGVtZS4KQEAgLTE4OCwxNCArMTg4LDE0IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNjcm9sbGJhckNvbnRyb2xTaXpl
Rm9yUGFydChDb250cm9sUGFydCkgeyByZXR1cm4gUmVndWxhclNjcm9sbGJhcjsgfQogCiAgICAg
Ly8gTWV0aG9kIGZvciBwYWludGluZyB0aGUgY2FwcyBsb2NrIGluZGljYXRvcgotICAgIHZpcnR1
YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiAwOyB9OworICAgIHZpcnR1YWwgYm9vbCBw
YWludENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiAwOyB9OwogCiAjaWYgRU5BQkxFKFBST0dSRVNT
X0VMRU1FTlQpCiAgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmlt
YXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCiAgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9u
UmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OwogICAg
IC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVz
cyBiYXIuCiAgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jh
cihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UmVjdCBwcm9ncmVzc0Jh
clJlY3RGb3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYpIGNvbnN0
OworICAgIHZpcnR1YWwgSW50UmVjdCBwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogI2VuZGlmCiAKICNpZiBFTkFCTEUo
VklERU8pCkBAIC0yMjgsNyArMjI4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50U2l6ZSBz
bGlkZXJUaWNrU2l6ZSgpIGNvbnN0ID0gMDsKICAgICAvLyBSZXR1cm5zIHRoZSBkaXN0YW5jZSBv
ZiBzbGlkZXIgdGljayBvcmlnaW4gZnJvbSB0aGUgc2xpZGVyIHRyYWNrIGNlbnRlci4KICAgICB2
aXJ0dWFsIGludCBzbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2VudGVyKCkgY29uc3QgPSAwOwot
ICAgIHZvaWQgcGFpbnRTbGlkZXJUaWNrcyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBwYWludFNsaWRlclRpY2tzKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRpZgogCiAg
ICAgdmlydHVhbCBib29sIHNob3VsZFNob3dQbGFjZWhvbGRlcldoZW5Gb2N1c2VkKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KQEAgLTI0MywxMCArMjQzLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZv
bnQmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0OwogCiAgICAg
ZW51bSBGaWxlVXBsb2FkRGVjb3JhdGlvbnMgeyBTaW5nbGVGaWxlLCBNdWx0aXBsZUZpbGVzIH07
Ci0gICAgdmlydHVhbCBib29sIHBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucyhSZW5kZXJP
YmplY3QqIC8qaW5wdXRSZW5kZXJlciovLCBSZW5kZXJPYmplY3QqIC8qYnV0dG9uUmVuZGVyZXIq
LywgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYsIEljb24qLCBGaWxlVXBsb2FkRGVj
b3JhdGlvbnMpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRGaWxlVXBs
b2FkSWNvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgLyppbnB1dFJlbmRlcmVyKi8s
IGNvbnN0IFJlbmRlck9iamVjdCYgLypidXR0b25SZW5kZXJlciovLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JiwgSWNvbiosIEZpbGVVcGxvYWREZWNvcmF0aW9ucykgeyByZXR1cm4g
dHJ1ZTsgfQogCiAjaWYgRU5BQkxFKElNQUdFX0NPTlRST0xTKQotICAgIHZpcnR1YWwgSW50U2l6
ZSBpbWFnZUNvbnRyb2xzQnV0dG9uU2l6ZShjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdCB7IHJl
dHVybiBJbnRTaXplKCk7IH0KKyAgICB2aXJ0dWFsIEludFNpemUgaW1hZ2VDb250cm9sc0J1dHRv
blNpemUoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3QgeyByZXR1cm4gSW50U2l6ZSgpOyB9CiAj
ZW5kaWYKIAogcHJvdGVjdGVkOgpAQCAtMjY3LDEyMiArMjY3LDEyMiBAQCBwcm90ZWN0ZWQ6CiAj
aWYgIVVTRShORVdfVEhFTUUpCiAgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZh
bHVlLgogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRD
aGVja2JveChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0
cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNv
bnN0IHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3Bp
bkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRD
aGVja2JveERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50UmFkaW9E
ZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbkRlY29yYXRp
b25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvRGVjb3JhdGlvbnMoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b25EZWNvcmF0aW9ucyhjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0Rmll
bGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZERlY29yYXRpb25z
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0
QXJlYURlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYURlY29yYXRpb25z
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51
TGlzdERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3Qo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdERlY29yYXRpb25z
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFB1c2hCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNxdWFyZUJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBib29sIHBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVl
OyB9CisgICAgdmlydHVhbCBib29sIHBhaW50U3F1YXJlQnV0dG9uRGVjb3JhdGlvbnMoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KIAogI2lmIEVOQUJMRShNRVRFUl9FTEVNRU5UKQogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWV0ZXIo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlm
CiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbnB1
dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludElucHV0RmllbGRTcGVlY2hCdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAg
IHZpcnR1YWwgYm9vbCBwYWludElucHV0RmllbGRTcGVlY2hCdXR0b24oY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogI2VuZGlmCiAKICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJh
Y2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1
ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBw
YWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1
bWJEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1i
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWJEZWNvcmF0
aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxk
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRD
YW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblBhcnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29y
YXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RNZWRpYUNvbnRyb2xTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVl
OyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFPdmVybGF5UGxheUJ1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZv
bHVtZVNsaWRlckNvbnRhaW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlh
Vm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZv
bHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFSZXdp
bmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVJldHVyblRvUmVh
bHRpbWVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVRvZ2dsZUNs
b3NlZENhcHRpb25zQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFD
b250cm9sc0JhY2tncm91bmQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUN1
cnJlbnRUaW1lKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFUaW1lUmVtYWlu
aW5nKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsU2NyZWVuVm9sdW1l
U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxTY3Jl
ZW5Wb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCBib29sIHBhaW50U25h
cHNob3R0ZWRQbHVnaW5PdmVybGF5KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFGdWxsc2NyZWVuQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFQbGF5QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFPdmVybGF5UGxheUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhTXV0ZUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
ZGlhU2Vla0JhY2tCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYVNlZWtGb3J3YXJkQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhU2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFSZXdpbmRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24oY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFDb250cm9sc0JhY2tncm91
bmQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUN1cnJlbnRUaW1l
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFUaW1lUmVtYWluaW5n
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsU2NyZWVuVm9s
dW1lU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVh
bCBib29sIHBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICNp
ZiBFTkFCTEUoSU1BR0VfQ09OVFJPTFMpCi0gICAgdmlydHVhbCBib29sIHBhaW50SW1hZ2VDb250
cm9sc0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludEltYWdlQ29udHJvbHNC
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCiBwdWJsaWM6Ci0gICAgdm9pZCB1cGRhdGVD
b250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgQ29udHJvbFN0YXRl
cyopIGNvbnN0OwotICAgIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBleHRyYWN0Q29udHJvbFN0YXRl
c0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwotICAgIGJvb2wgaXNBY3Rp
dmUoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc0NoZWNrZWQoY29uc3Qg
UmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc0luZGV0ZXJtaW5hdGUoY29uc3QgUmVu
ZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc0VuYWJsZWQoY29uc3QgUmVuZGVyT2JqZWN0
KikgY29uc3Q7Ci0gICAgYm9vbCBpc0ZvY3VzZWQoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7
Ci0gICAgYm9vbCBpc1ByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9v
bCBpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0Owot
ICAgIGJvb2wgaXNIb3ZlcmVkKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwotICAgIGJvb2wg
aXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLSAg
ICBib29sIGlzUmVhZE9ubHlDb250cm9sKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwotICAg
IGJvb2wgaXNEZWZhdWx0KGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZvaWQgdXBk
YXRlQ29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCYsIENvbnRyb2xT
dGF0ZXMqKSBjb25zdDsKKyAgICBDb250cm9sU3RhdGVzOjpTdGF0ZXMgZXh0cmFjdENvbnRyb2xT
dGF0ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKKyAgICBib29sIGlz
QWN0aXZlKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNDaGVja2VkKGNv
bnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNJbmRldGVybWluYXRlKGNvbnN0
IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNFbmFibGVkKGNvbnN0IFJlbmRlck9i
amVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNGb2N1c2VkKGNvbnN0IFJlbmRlck9iamVjdCYpIGNv
bnN0OworICAgIGJvb2wgaXNQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAg
IGJvb2wgaXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChjb25zdCBSZW5kZXJPYmplY3QmKSBjb25z
dDsKKyAgICBib29sIGlzSG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKKyAgICBi
b29sIGlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7
CisgICAgYm9vbCBpc1JlYWRPbmx5Q29udHJvbChjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsK
KyAgICBib29sIGlzRGVmYXVsdChjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBtdXRhYmxlIENvbG9yIG1fYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAppbmRleCA1YjlkODE1Yjg2
MzM5M2VhYmNiNDdlYmNmYTJjZmUzZGI1YTllYTJhLi5mMzdmM2Y4YzM5ZmRjNTUyOTg0MDkzMWVh
MjZhYjZmNWY2ZjNhZWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVJT1MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJ
T1MuaApAQCAtNDgsMzUgKzQ4LDM1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYg
Y29udGVudFNpemVDYXRlZ29yeSgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBpbnQgYmFz
ZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJT
dHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNv
bnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgLy8gTWV0
aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZhbHVlLgogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RD
aGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveERlY29yYXRpb25zKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRp
b0RlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpb0RlY29yYXRpb25zKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBi
b29sIHBhaW50QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBwYWludFB1c2hC
dXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uRGVjb3JhdGlv
bnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFB1c2hCdXR0b25EZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludEZpbGVVcGxvYWRJY29uRGVjb3Jh
dGlvbnMoUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBSZW5kZXJPYmplY3QqIGJ1dHRvblJl
bmRlcmVyLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JiwgSWNvbiosIEZpbGVVcGxv
YWREZWNvcmF0aW9ucykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50RmlsZVVwbG9h
ZEljb25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIGlucHV0UmVuZGVyZXIsIGNvbnN0
IFJlbmRlck9iamVjdCYgYnV0dG9uUmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmLCBJY29uKiwgRmlsZVVwbG9hZERlY29yYXRpb25zKSBvdmVycmlkZTsKIAotICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRGaWVsZERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRUZXh0QXJlYURlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0Rmll
bGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWFEZWNv
cmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29s
IHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2xp
ZGVyVGh1bWJEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWJE
ZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jikgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAgICAv
LyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHBy
b2dyZXNzIGJhci4KQEAgLTg0LDcgKzg0LDcgQEAgcHJvdGVjdGVkOgogICAgIC8vIFJldHVybnMg
dGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCiAgICAg
dmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9n
cmVzcyopIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NC
YXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKICNlbmRpZgog
CiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCkBAIC05Myw3ICs5Myw3IEBAIHByb3RlY3Rl
ZDoKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTE1LDcgKzExNSw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB+UmVuZGVyVGhlbWVJT1MoKSB7IH0KIAogICAgIGNvbnN0IENvbG9yJiBzaGFk
b3dDb2xvcigpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBhZGRSb3VuZGVkQm9yZGVyQ2xpcChSZW5k
ZXJPYmplY3QqIGJveCwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgIEZs
b2F0UmVjdCBhZGRSb3VuZGVkQm9yZGVyQ2xpcChjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgU3RyaW5nIG1fbWVkaWFDb250
cm9sc1NjcmlwdDsKICAgICBTdHJpbmcgbV9tZWRpYUNvbnRyb2xzU3R5bGVTaGVldDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQppbmRleCAyNmYyZjU0MDY3N2U4
MGM3NTMzMGJmZTljMzRkY2VlZjM0YjU3OTExLi5lOWVjMmJhMjljODYwZjFiZmE1NTUzZTk2MjVi
NWZjMDFlZGM3ODEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
Lm1tCkBAIC0zMTYsMTEgKzMxNiwxMSBAQCBjb25zdCBDb2xvciYgUmVuZGVyVGhlbWVJT1M6OnNo
YWRvd0NvbG9yKCkgY29uc3QKICAgICByZXR1cm4gY29sb3I7CiB9CiAKLUZsb2F0UmVjdCBSZW5k
ZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJvcmRlckNsaXAoUmVuZGVyT2JqZWN0KiBib3gsIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK0Zsb2F0UmVjdCBSZW5k
ZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJvcmRlckNsaXAoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gs
IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICAv
LyBUbyBmaXggaW5uZXIgYm9yZGVyIGJsZWVkaW5nIGlzc3VlcyA8cmRhcjovL3Byb2JsZW0vOTgx
MjUwNz4sIHdlIGNsaXAgdG8gdGhlIG91dGVyIGJvcmRlciBhbmQgYXNzZXJ0IHRoYXQKICAgICAv
LyB0aGUgYm9yZGVyIGlzIG9wYXF1ZSBvciB0cmFuc3BhcmVudCwgdW5sZXNzIHdlJ3JlIGNoZWNr
ZWQgYmVjYXVzZSBjaGVja2VkIHJhZGlvL2NoZWNrYm94ZXMgc2hvdyBubyBibGVlZGluZy4KLSAg
ICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnN0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUmIHN0
eWxlID0gYm94LnN0eWxlKCk7CiAgICAgUm91bmRlZFJlY3QgYm9yZGVyID0gaXNDaGVja2VkKGJv
eCkgPyBzdHlsZS5nZXRSb3VuZGVkSW5uZXJCb3JkZXJGb3IocmVjdCkgOiBzdHlsZS5nZXRSb3Vu
ZGVkQm9yZGVyRm9yKHJlY3QpOwogCiAgICAgaWYgKGJvcmRlci5pc1JvdW5kZWQoKSkKQEAgLTM1
Nyw3ICszNTcsNyBAQCBzdGF0aWMgQ0dQb2ludCBzaG9ydGVuZWQoQ0dQb2ludCBzdGFydCwgQ0dQ
b2ludCBlbmQsIGZsb2F0IHdpZHRoKQogICAgIHJldHVybiBDR1BvaW50TWFrZShzdGFydC54ICsg
eCAqIHJhdGlvLCBzdGFydC55ICsgeSAqIHJhdGlvKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRDaGVja2JveERlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJ
T1M6OnBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAg
ICAgRmxvYXRSZWN0IGNsaXAgPSBhZGRSb3VuZGVkQm9yZGVyQ2xpcChib3gsIHBhaW50SW5mby5j
b250ZXh0LCByZWN0KTsKQEAgLTQwOCwxNyArNDA4LDE3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6
OnBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJ
bmZvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbnQgUmVuZGVyVGhlbWVJT1M6OmJhc2VsaW5l
UG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QKK2ludCBSZW5kZXJU
aGVtZUlPUzo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBj
b25zdAogewotICAgIGlmICghcmVuZGVyZXItPmlzQm94KCkpCisgICAgaWYgKCFyZW5kZXJlci5p
c0JveCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0g
dG9SZW5kZXJCb3gocmVuZGVyZXIpOworICAgIGNvbnN0IFJlbmRlckJveCYgYm94ID0gKnRvUmVu
ZGVyQm94KCZyZW5kZXJlcik7CiAKLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9
PSBDaGVja2JveFBhcnQgfHwgYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQp
Ci0gICAgICAgIHJldHVybiBib3gtPm1hcmdpblRvcCgpICsgYm94LT5oZWlnaHQoKSAtIDI7IC8v
IFRoZSBiYXNlbGluZSBpcyAycHggdXAgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBjaGVja2JveC9y
YWRpbyBpbiBBcHBLaXQuCi0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTWVu
dWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gYm94LT5tYXJnaW5Ub3AoKSArIGJveC0+aGVpZ2h0
KCkgLSA1OyAvLyBUaGlzIGlzIHRvIG1hdGNoIEFwcEtpdC4gVGhlcmUgbWlnaHQgYmUgYSBiZXR0
ZXIgd2F5IHRvIGNhbGN1bGF0ZSB0aGlzIHRob3VnaC4KKyAgICBpZiAoYm94LnN0eWxlKCkuYXBw
ZWFyYW5jZSgpID09IENoZWNrYm94UGFydCB8fCBib3guc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0g
UmFkaW9QYXJ0KQorICAgICAgICByZXR1cm4gYm94Lm1hcmdpblRvcCgpICsgYm94LmhlaWdodCgp
IC0gMjsgLy8gVGhlIGJhc2VsaW5lIGlzIDJweCB1cCBmcm9tIHRoZSBib3R0b20gb2YgdGhlIGNo
ZWNrYm94L3JhZGlvIGluIEFwcEtpdC4KKyAgICBpZiAoYm94LnN0eWxlKCkuYXBwZWFyYW5jZSgp
ID09IE1lbnVsaXN0UGFydCkKKyAgICAgICAgcmV0dXJuIGJveC5tYXJnaW5Ub3AoKSArIGJveC5o
ZWlnaHQoKSAtIDU7IC8vIFRoaXMgaXMgdG8gbWF0Y2ggQXBwS2l0LiBUaGVyZSBtaWdodCBiZSBh
IGJldHRlciB3YXkgdG8gY2FsY3VsYXRlIHRoaXMgdGhvdWdoLgogICAgIHJldHVybiBSZW5kZXJU
aGVtZTo6YmFzZWxpbmVQb3NpdGlvbihib3gpOwogfQogCkBAIC00NDUsNyArNDQ1LDcgQEAgdm9p
ZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW4KICAgICBzdHlsZS0+c2V0Qm9yZGVyUmFkaXVzKEludFNpemUo
bGVuZ3RoLnZhbHVlKCkgLyAyLjBmLCBsZW5ndGgudmFsdWUoKSAvIDIuMGYpKTsKIH0KIAotYm9v
bCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRSYWRpb0RlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wg
UmVuZGVyVGhlbWVJT1M6OnBhaW50UmFkaW9EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3Qm
IGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29u
dGV4dCk7CiAgICAgRmxvYXRSZWN0IGNsaXAgPSBhZGRSb3VuZGVkQm9yZGVyQ2xpcChib3gsIHBh
aW50SW5mby5jb250ZXh0LCByZWN0KTsKQEAgLTQ3Myw5ICs0NzMsOSBAQCBib29sIFJlbmRlclRo
ZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBib3gsIGNvbnN0IFBh
aW50SW5mbyYgcAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6
cGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lSU9T
OjpwYWludFRleHRGaWVsZERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgYm94LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSBib3gtPnN0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0g
Ym94LnN0eWxlKCk7CiAgICAgSW50UG9pbnQgcG9pbnQocmVjdC54KCkgKyBzdHlsZS5ib3JkZXJM
ZWZ0V2lkdGgoKSwgcmVjdC55KCkgKyBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpKTsKIAogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwpA
QCAtNDg1LDE0ICs0ODUsMTQgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRUZXh0RmllbGRE
ZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJbmYKICAgICAvLyBUaGlz
IGdyYWRpZW50IGdldHMgZHJhd24gYmxhY2sgd2hlbiBwcmludGluZy4KICAgICAvLyBEbyBub3Qg
ZHJhdyB0aGUgZ3JhZGllbnQgaWYgdGhlcmUgaXMgbm8gdmlzaWJsZSB0b3AgYm9yZGVyLgogICAg
IGJvb2wgdG9wQm9yZGVySXNJbnZpc2libGUgPSAhc3R5bGUuaGFzQm9yZGVyKCkgfHwgIXN0eWxl
LmJvcmRlclRvcFdpZHRoKCkgfHwgc3R5bGUuYm9yZGVyVG9wSXNUcmFuc3BhcmVudCgpOwotICAg
IGlmICghYm94LT52aWV3KCkucHJpbnRpbmcoKSAmJiAhdG9wQm9yZGVySXNJbnZpc2libGUpCisg
ICAgaWYgKCFib3gudmlldygpLnByaW50aW5nKCkgJiYgIXRvcEJvcmRlcklzSW52aXNpYmxlKQog
ICAgICAgICBkcmF3QXhpYWxHcmFkaWVudChwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCksIGdyYWRpZW50V2l0aE5hbWUoSW5zZXRHcmFkaWVudCksIHBvaW50LCBGbG9hdFBvaW50
KENHUG9pbnRNYWtlKHBvaW50LngoKSwgcG9pbnQueSgpICsgMy4wZikpLCBMaW5lYXJJbnRlcnBv
bGF0aW9uKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBh
aW50VGV4dEFyZWFEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJ
T1M6OnBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0
dXJuIHBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMocmVuZGVyZXIsIHBhaW50SW5mbywgcmVjdCk7
CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMoYm94LCBwYWludEluZm8sIHJl
Y3QpOwogfQogCiBjb25zdCBpbnQgTWVudUxpc3RNaW5IZWlnaHQgPSAxNTsKQEAgLTU4Miw5ICs1
ODIsOSBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bAogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJU
aGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wg
UmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5k
ZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7Ci0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gYm94LT5zdHlsZSgpOworICAgIFJl
bmRlclN0eWxlJiBzdHlsZSA9IGJveC5zdHlsZSgpOwogICAgIGZsb2F0IGJvcmRlclRvcFdpZHRo
ID0gc3R5bGUuYm9yZGVyVG9wV2lkdGgoKTsKICAgICBGbG9hdFJlY3QgY2xpcChyZWN0LngoKSAr
IHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpLCByZWN0LnkoKSArIHN0eWxlLmJvcmRlclRvcFdpZHRo
KCksIHJlY3Qud2lkdGgoKSAtIHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpIC0gc3R5bGUuYm9yZGVy
UmlnaHRXaWR0aCgpLCByZWN0LmhlaWdodCgpIC0gc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSAtIHN0
eWxlLmJvcmRlckJvdHRvbVdpZHRoKCkpOwogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBw
YWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CkBAIC02MTIsNyArNjEyLDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRl
ck9iamVjdCogYm94LCBjb25zdCBQYWkKIAogICAgIGZsb2F0IHNlcGFyYXRvciA9IGNsaXAubWF4
WCgpIC0gTWVudUxpc3RCdXR0b25QYWRkaW5nUmlnaHQ7CiAKLSAgICBib3gtPmRyYXdMaW5lRm9y
Qm94U2lkZShwYWludEluZm8uY29udGV4dCwgc2VwYXJhdG9yIC0gYm9yZGVyVG9wV2lkdGgsIGNs
aXAueSgpLCBzZXBhcmF0b3IsIGNsaXAubWF4WSgpLCBCU1JpZ2h0LCBzdHlsZS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciksIHN0eWxlLmJvcmRlclRvcFN0
eWxlKCksIDAsIDApOworICAgIGJveC5kcmF3TGluZUZvckJveFNpZGUocGFpbnRJbmZvLmNvbnRl
eHQsIHNlcGFyYXRvciAtIGJvcmRlclRvcFdpZHRoLCBjbGlwLnkoKSwgc2VwYXJhdG9yLCBjbGlw
Lm1heFkoKSwgQlNSaWdodCwgc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Qm9yZGVyVG9wQ29sb3IpLCBzdHlsZS5ib3JkZXJUb3BTdHlsZSgpLCAwLCAwKTsKIAogICAgIEZs
b2F0UmVjdCBidXR0b25DbGlwKHNlcGFyYXRvciAtIGFkanVzdFRvcCwgY2xpcC55KCkgLSBhZGp1
c3RUb3AsIE1lbnVMaXN0QnV0dG9uUGFkZGluZ1JpZ2h0ICsgYWRqdXN0VG9wICsgYWRqdXN0Umln
aHQsIGNsaXAuaGVpZ2h0KCkgKyBhZGp1c3RUb3AgKyBhZGp1c3RCb3R0b20pOwogCkBAIC02MzEs
NyArNjMxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29y
YXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWkKIAogICAgIC8vIFBhaW50IEluZGlj
YXRvcnMuCiAKLSAgICBpZiAoYm94LT5pc01lbnVMaXN0KCkgJiYgdG9IVE1MU2VsZWN0RWxlbWVu
dChib3gtPm5vZGUoKSktPm11bHRpcGxlKCkpIHsKKyAgICBpZiAoYm94LmlzTWVudUxpc3QoKSAm
JiB0b0hUTUxTZWxlY3RFbGVtZW50KGJveC5ub2RlKCkpLT5tdWx0aXBsZSgpKSB7CiAgICAgICAg
IGludCBzaXplID0gMjsKICAgICAgICAgaW50IGNvdW50ID0gMzsKICAgICAgICAgaW50IHBhZGRp
bmcgPSAzOwpAQCAtNjg0LDEwICs2ODQsMTAgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0
U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUKICAg
ICBzdHlsZS0+c2V0Qm9yZGVyUmFkaXVzKExlbmd0aFNpemUocmFkaXVzV2lkdGgsIHJhZGl1c0hl
aWdodCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRyYWNrKFJlbmRl
ck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVy
T2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewogICAgIEludFJlY3QgdHJhY2tDbGlwID0gcmVjdDsKLSAgICBSZW5kZXJTdHlsZSYg
c3R5bGUgPSBib3gtPnN0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gYm94LnN0eWxl
KCk7CiAKICAgICBib29sIGlzSG9yaXpvbnRhbCA9IHRydWU7CiAgICAgc3dpdGNoIChzdHlsZS5h
cHBlYXJhbmNlKCkpIHsKQEAgLTc3OSw3ICs3NzksNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjph
ZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
ICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xpZGVyVGh1bWJEZWNvcmF0
aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRodW1iRGVj
b3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAgIEZsb2F0UmVjdCBjbGlwID0g
YWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8uY29udGV4dCwgcmVjdCk7CkBAIC04
MDcsOSArODA3LDkgQEAgZG91YmxlIFJlbmRlclRoZW1lSU9TOjphbmltYXRpb25EdXJhdGlvbkZv
clByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAot
Ym9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jv
b2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiBy
ZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7Ci0gICAgaWYgKCFyZW5kZXJlci0+aXNQcm9ncmVzcygpKQorICAgIGlmICghcmVuZGVyZXIu
aXNQcm9ncmVzcygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNvbnN0IGludCBwcm9n
cmVzc0JhckhlaWdodCA9IDk7CkBAIC04MzYsNyArODM2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludElu
Zm8mIHAKICAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoMHg4ZCwg
MHg4ZCwgMHg4ZCkpOwogICAgIGNvbnRleHQtPnNldFN0cm9rZUdyYWRpZW50KHN0cm9rZUdyYWRp
ZW50LnJlbGVhc2UoKSk7CiAKLSAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSByZW5kZXJlci0+
c3R5bGUoKS5jb2xvclNwYWNlKCk7CisgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gcmVuZGVy
ZXIuc3R5bGUoKS5jb2xvclNwYWNlKCk7CiAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9y
KDI1NSwgMjU1LCAyNTUpLCBjb2xvclNwYWNlKTsKIAogICAgIFBhdGggdHJhY2tQYXRoOwpAQCAt
ODU3LDEwICs4NTcsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0JhcihS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHAKIAogICAgIGNvbnRleHQt
PmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiwg
cmVjdC53aWR0aCgpLCB1cHBlckdyYWRpZW50SGVpZ2h0KSk7CiAKLSAgICBSZW5kZXJQcm9ncmVz
cyogcmVuZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKHJlbmRlcmVyKTsKLSAgICBpZiAo
cmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkgeworICAgIGNvbnN0IFJlbmRlclByb2dy
ZXNzJiByZW5kZXJQcm9ncmVzcyA9ICp0b1JlbmRlclByb2dyZXNzKCZyZW5kZXJlcik7CisgICAg
aWYgKHJlbmRlclByb2dyZXNzLmlzRGV0ZXJtaW5hdGUoKSkgewogICAgICAgICAvLyAyKSBEcmF3
IHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgICAgIGRvdWJsZSBwb3NpdGlvbiA9IGNsYW1wVG8ocmVu
ZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCksIDAuMCwgMS4wKTsKKyAgICAgICAgZG91YmxlIHBvc2l0
aW9uID0gY2xhbXBUbyhyZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpLCAwLjAsIDEuMCk7CiAgICAg
ICAgIGRvdWJsZSBiYXJXaWR0aCA9IHBvc2l0aW9uICogcmVjdC53aWR0aCgpOwogICAgICAgICBS
ZWZQdHI8R3JhZGllbnQ+IGJhckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50
KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC41KSwgRmxvYXRQb2ludChy
ZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0IC0g
MSkpOwogICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29sb3IoMTk1LCAy
MTcsIDI0NykpOwpAQCAtODc5LDcgKzg3OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50
UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwCiAK
ICAgICAgICAgUGF0aCBiYXJQYXRoOwogICAgICAgICBpbnQgbGVmdCA9IHJlY3QueCgpOwotICAg
ICAgICBpZiAoIXJlbmRlclByb2dyZXNzLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSkKKyAgICAgICAgaWYgKCFyZW5kZXJQcm9ncmVzcy5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkKICAgICAgICAgICAgIGxlZnQgPSByZWN0Lm1heFgoKSAtIGJhcldpZHRoOwogICAg
ICAgICBGbG9hdFJlY3QgYmFyUmVjdChsZWZ0ICsgMC4yNSwgdmVydGljYWxSZW5kZXJpbmdQb3Np
dGlvbiArIDAuMjUsIHN0ZDo6bWF4KGJhcldpZHRoIC0gMC41LCAwLjApLCBwcm9ncmVzc0Jhckhl
aWdodCAtIDAuNSk7CiAgICAgICAgIGJhclBhdGguYWRkUm91bmRlZFJlY3QoYmFyUmVjdCwgcm91
bmRlZENvcm5lclJhZGl1cyk7CkBAIC05MjEsNyArOTIxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlP
Uzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUKICAgICBhZGp1c3RSb3VuZEJvcmRlclJhZGl1cygqc3R5bGUsIGJveCk7CiB9CiAKLWJv
b2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmpl
Y3QqIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Citib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMoY29uc3Qg
UmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRleHRGaWVsZERlY29yYXRpb25zKGJveCwg
cGFpbnRJbmZvLCByZWN0KTsKIH0KQEAgLTk0NywxOCArOTQ3LDE4IEBAIHZvaWQgUmVuZGVyVGhl
bWVJT1M6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJT
dHlsZSogc3R5CiAgICAgYWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoKnN0eWxlLCBib3gpOwogfQog
Ci1ib29sIFJlbmRlclRoZW1lSU9TOjpwYWludEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVj
dCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
K2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVy
T2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewogICAgIHJldHVybiBwYWludFB1c2hCdXR0b25EZWNvcmF0aW9ucyhib3gsIHBhaW50
SW5mbywgcmVjdCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHVzaEJ1dHRvbkRl
Y29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHVzaEJ1dHRv
bkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgYm94LCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKICAgICBGbG9hdFJlY3QgY2xp
cCA9IGFkZFJvdW5kZWRCb3JkZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3QpOwog
CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKLSAgICBpZiAoYm94LT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuaXNEYXJrKCkpCisgICAgaWYgKGJveC5zdHlsZSgp
LnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuaXNEYXJr
KCkpCiAgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRoTmFt
ZShDb252ZXhHcmFkaWVudCksIGNsaXAubG9jYXRpb24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwg
Y2xpcC5tYXhZKCkpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKICAgICBlbHNlIHsKICAgICAgICAg
ZHJhd0F4aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKFNoYWRlR3JhZGll
bnQpLCBjbGlwLmxvY2F0aW9uKCksIEZsb2F0UG9pbnQoY2xpcC54KCksIGNsaXAubWF4WSgpKSwg
TGluZWFySW50ZXJwb2xhdGlvbik7CkBAIC05ODIsMTIgKzk4MiwxMiBAQCBjb25zdCBpbnQga1Ro
dW1ibmFpbEJvcmRlckNvcm5lclJhZGl1cyA9IDE7CiBjb25zdCBpbnQga1Zpc2libGVCYWNrZ3Jv
dW5kSW1hZ2VXaWR0aCA9IDE7CiBjb25zdCBpbnQga011bHRpcGxlVGh1bWJuYWlsU2hyaW5rU2l6
ZSA9IDI7CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0
aW9ucyhSZW5kZXJPYmplY3QqLCBSZW5kZXJPYmplY3QqIGJ1dHRvblJlbmRlcmVyLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCwgSWNvbiogaWNvbiwgRmls
ZVVwbG9hZERlY29yYXRpb25zIGZpbGVVcGxvYWREZWNvcmF0aW9ucykKK2Jvb2wgUmVuZGVyVGhl
bWVJT1M6OnBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBSZW5kZXJPYmplY3QmIGJ1dHRvblJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCwgSWNvbiogaWNvbiwgRmlsZVVwbG9hZERlY29y
YXRpb25zIGZpbGVVcGxvYWREZWNvcmF0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKIAogICAgIEludFNpemUgY29y
bmVyU2l6ZShrVGh1bWJuYWlsQm9yZGVyQ29ybmVyUmFkaXVzLCBrVGh1bWJuYWlsQm9yZGVyQ29y
bmVyUmFkaXVzKTsKLSAgICBDb2xvciBwaWN0dXJlRnJhbWVDb2xvciA9IGJ1dHRvblJlbmRlcmVy
ID8gYnV0dG9uUmVuZGVyZXItPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5Qm9yZGVyVG9wQ29sb3IpIDogQ29sb3IoNzYuMGYsIDc2LjBmLCA3Ni4wZik7CisgICAgQ29s
b3IgcGljdHVyZUZyYW1lQ29sb3IgPSBidXR0b25SZW5kZXJlci5zdHlsZSgpLnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yKTsKIAogICAgIEludFJlY3QgdGh1
bWJuYWlsUGljdHVyZUZyYW1lUmVjdCA9IHJlY3Q7CiAgICAgSW50UmVjdCB0aHVtYm5haWxSZWN0
ID0gcmVjdDsKQEAgLTEwMDAsNyArMTAwMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50
RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBSZW5kZXJPYmplY3QqCiAg
ICAgICAgIHRodW1ibmFpbFJlY3QuY29udHJhY3Qoa011bHRpcGxlVGh1bWJuYWlsU2hyaW5rU2l6
ZSwga011bHRpcGxlVGh1bWJuYWlsU2hyaW5rU2l6ZSk7CiAKICAgICAgICAgLy8gQmFja2dyb3Vu
ZCBwaWN0dXJlIGZyYW1lIGFuZCBzaW1wbGUgYmFja2dyb3VuZCBpY29uIHdpdGggYSBncmFkaWVu
dCBtYXRjaGluZyB0aGUgYnV0dG9uLgotICAgICAgICBDb2xvciBiYWNrZ3JvdW5kSW1hZ2VDb2xv
ciA9IGJ1dHRvblJlbmRlcmVyID8gQ29sb3IoYnV0dG9uUmVuZGVyZXItPnN0eWxlKCkudmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5yZ2IoKSkgOiBDb2xv
cigyMDYuMGYsIDIwNi4wZiwgMjA2LjBmKTsKKyAgICAgICAgQ29sb3IgYmFja2dyb3VuZEltYWdl
Q29sb3IgPSBDb2xvcihidXR0b25SZW5kZXJlci5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikucmdiKCkpOwogICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QodGh1bWJuYWlsUGljdHVy
ZUZyYW1lUmVjdCwgY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSwgY29ybmVyU2l6
ZSksIHBpY3R1cmVGcmFtZUNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KHRodW1ibmFpbFJlY3QsIGJhY2tncm91bmRJbWFnZUNv
bG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAppbmRleCAwZmJlNjExYTJiY2Y4NDNjMjA2YWU5ZmZjMTA1
ZDE1ZmJjNjBjYWM0Li4yYjE5ZDQ3ZDY5NWMzOWQyZjg4NzY5ZTMyNDE4Y2Y0M2JiZTIyYTZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaApAQCAtNDQsMTIgKzQ0
LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRl
KCk7CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMg
dGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KLSAgICB2aXJ0dWFsIGJvb2wg
Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0
OwogCiAgICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGlu
ZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xU
aW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RS
ZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqLCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIEludFJl
Y3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3Qg
UmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3Qg
Q29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CiAKQEAgLTgyLDEzICs4MiwxMyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUq
KSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5k
ZXJTdHlsZSopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0
b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBwb3BzTWVudUJ5QXJyb3dLZXlzKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCiAgICAgdmlydHVhbCBJ
bnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJl
Y3QmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBi
b29sIHBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0
KSBjb25zdDsKICNlbmRpZgogCkBAIC05NywxNCArOTcsMTQgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MqKSBjb25zdDsKICAgICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0
aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgogICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1
cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IEludFJlY3QgcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9iamVjdCosIGNv
bnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIEludFJlY3QgcHJvZ3Jl
c3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJlY3QmKSBj
b25zdCBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihD
U1NWYWx1ZUlEKSBjb25zdDsKICAgICAvLyBDb250cm9scyBjb2xvciB2YWx1ZXMgcmV0dXJuZWQg
ZnJvbSBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKCkuIHN5c3RlbUNvbG9yKCkgd2lsbCBiZSB1c2Vk
IHdoZW4gZmFsc2UuCiAgICAgdmlydHVhbCBib29sIHVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9y
KCkgY29uc3Q7CiAgICAgLy8gQSB2aWV3IGFzc29jaWF0ZWQgdG8gdGhlIGNvbnRhaW5lZCBkb2N1
bWVudC4gU3ViY2xhc3NlcyBtYXkgbm90IGhhdmUgc3VjaCBhIHZpZXcgYW5kIHJldHVybiBhIGZh
a2UuCi0gICAgTlNWaWV3KiBkb2N1bWVudFZpZXdGb3IoUmVuZGVyT2JqZWN0KikgY29uc3Q7Cisg
ICAgTlNWaWV3KiBkb2N1bWVudFZpZXdGb3IoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7CiAK
IAogcHJvdGVjdGVkOgpAQCAtMTIzLDQzICsxMjMsNDMgQEAgcHJvdGVjdGVkOgogCiAgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9ycygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9v
bCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVh
bCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKICNlbmRpZgogCi0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2so
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVy
VHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50U2xp
ZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9v
bCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hG
aWVsZERlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25Q
YXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
UGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
Q2xvc2VkQ2FwdGlvbmluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTE2NywxNCArMTY3
LDE0IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93UGxhY2Vob2xk
ZXJXaGVuRm9jdXNlZCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50U25hcHNob3R0
ZWRQbHVnaW5PdmVybGF5KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXko
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
CiBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0
IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxs
b3dlZCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRSZWN0IGluZmxhdGVSZWN0KGNvbnN0IElu
dFJlY3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgaW50KiBtYXJnaW5zLCBmbG9hdCB6b29tTGV2
ZWwgPSAxLjBmKSBjb25zdDsKIAotICAgIEZsb2F0UmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3Qo
Y29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBh
cnRSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmKSBj
b25zdDsKKyAgICBGbG9hdFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0KGNvbnN0IFJlbmRlck9i
amVjdCYgaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0JiBwYXJ0UmVuZGVyZXIsIGNv
bnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKICAgICAv
LyBHZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIGZvbnQuIFVzZWQgYnkgc29tZSBv
ZiB0aGUgY29udHJvbHMgKGxpa2UgYnV0dG9ucykuCiAgICAgTlNDb250cm9sU2l6ZSBjb250cm9s
U2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKQEAgLTE4NSwyNiArMTg1LDI2IEBAIHBy
aXZhdGU6CiAgICAgSW50U2l6ZSBzaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSosIGNvbnN0
IEludFNpemUqIHNpemVzKSBjb25zdDsKICAgICB2b2lkIHNldEZvbnRGcm9tQ29udHJvbFNpemUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgTlNDb250cm9sU2l6ZSkgY29uc3Q7CiAKLSAg
ICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsK
LSAgICB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3Qq
KTsKLSAgICB2b2lkIHVwZGF0ZUZvY3VzZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmpl
Y3QqKTsKLSAgICB2b2lkIHVwZGF0ZVByZXNzZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJP
YmplY3QqKTsKKyAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5k
ZXJPYmplY3QmKTsKKyAgICB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBS
ZW5kZXJPYmplY3QmKTsKKyAgICB2b2lkIHVwZGF0ZUZvY3VzZWRTdGF0ZShOU0NlbGwqLCBjb25z
dCBSZW5kZXJPYmplY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVByZXNzZWRTdGF0ZShOU0NlbGwqLCBj
b25zdCBSZW5kZXJPYmplY3QmKTsKICAgICAvLyBBbiBvcHRpb25hbCBob29rIGZvciBzdWJjbGFz
c2VzIHRvIHVwZGF0ZSB0aGUgY29udHJvbCB0aW50IG9mIE5TQ2VsbC4KLSAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlQWN0aXZlU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0KikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFjdGl2ZVN0YXRlKE5TQ2VsbCosIGNvbnN0IFJlbmRlck9i
amVjdCYpIHsgfQogCiAgICAgLy8gSGVscGVycyBmb3IgYWRqdXN0aW5nIGFwcGVhcmFuY2UgYW5k
IGZvciBwYWludGluZwogCi0gICAgdm9pZCBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBS
ZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBzZXRQb3B1cEJ1dHRvbkNl
bGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgY29uc3Qg
SW50U2l6ZSogcG9wdXBCdXR0b25TaXplcygpIGNvbnN0OwogICAgIGNvbnN0IGludCogcG9wdXBC
dXR0b25NYXJnaW5zKCkgY29uc3Q7CiAgICAgY29uc3QgaW50KiBwb3B1cEJ1dHRvblBhZGRpbmco
TlNDb250cm9sU2l6ZSkgY29uc3Q7Ci0gICAgdm9pZCBwYWludE1lbnVMaXN0QnV0dG9uR3JhZGll
bnRzKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2b2lkIHBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIGNvbnN0IEludFNpemUqIG1l
bnVMaXN0U2l6ZXMoKSBjb25zdDsKIAogICAgIGNvbnN0IEludFNpemUqIHNlYXJjaEZpZWxkU2l6
ZXMoKSBjb25zdDsKICAgICBjb25zdCBJbnRTaXplKiBjYW5jZWxCdXR0b25TaXplcygpIGNvbnN0
OwogICAgIGNvbnN0IEludFNpemUqIHJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0OwotICAgIHZv
aWQgc2V0U2VhcmNoQ2VsbFN0YXRlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2b2lkIHNldFNlYXJjaENlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRS
ZWN0Jik7CiAgICAgdm9pZCBzZXRTZWFyY2hGaWVsZFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsK
IAogICAgIE5TUG9wVXBCdXR0b25DZWxsICpwb3B1cEJ1dHRvbigpIGNvbnN0OwpAQCAtMjI2LDgg
KzIyNiw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTUFHRV9DT05UUk9MUykK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbWFnZUNvbnRyb2xzQnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IEludFNpemUgaW1hZ2VDb250cm9sc0J1dHRvblNpemUoY29uc3QgUmVuZGVyT2JqZWN0KikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50SW1hZ2VDb250cm9sc0J1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBJbnRTaXplIGltYWdlQ29udHJvbHNCdXR0b25TaXplKGNvbnN0
IGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIE5TU2VydmljZXNSb2xs
b3ZlckJ1dHRvbkNlbGwgKnNlcnZpY2VzUm9sbG92ZXJCdXR0b25DZWxsKCkgY29uc3Q7CiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IDI1
OGM3YWUyYjJmYmFkYjI1MGIxYjQ0OGU0MDg2MmE5OWVjMDY4MGMuLmNkMGU3OTE0ODA4ZTJlYTI2
ZWZkZWM5ZjE0ODE1MzQwZWI1OWVlYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0KQEAgLTIxNywxMCArMjE3LDEwIEBAIFJlbmRlclRoZW1lTWFjOjp+UmVu
ZGVyVGhlbWVNYWMoKQogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
cmVtb3ZlT2JzZXJ2ZXI6bV9ub3RpZmljYXRpb25PYnNlcnZlci5nZXQoKV07CiB9CiAKLU5TVmll
dyogUmVuZGVyVGhlbWVNYWM6OmRvY3VtZW50Vmlld0ZvcihSZW5kZXJPYmplY3QqIG8pIGNvbnN0
CitOU1ZpZXcqIFJlbmRlclRoZW1lTWFjOjpkb2N1bWVudFZpZXdGb3IoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvKSBjb25zdAogewogICAgIENvbnRyb2xTdGF0ZXMgc3RhdGVzKGV4dHJhY3RDb250cm9s
U3RhdGVzRm9yUmVuZGVyZXIobykpOwotICAgIHJldHVybiBUaGVtZU1hYzo6ZW5zdXJlZFZpZXco
Jm8tPnZpZXcoKS5mcmFtZVZpZXcoKSwgJnN0YXRlcyk7CisgICAgcmV0dXJuIFRoZW1lTWFjOjpl
bnN1cmVkVmlldygmby52aWV3KCkuZnJhbWVWaWV3KCksICZzdGF0ZXMpOwogfQogCiAjaWYgRU5B
QkxFKFZJREVPKQpAQCAtNjAyLDkgKzYwMiw5IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OmlzQ29u
dHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmCiAg
ICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgYmFj
a2dyb3VuZCwgYmFja2dyb3VuZENvbG9yKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBJbnRSZWN0JiByKQordm9pZCBS
ZW5kZXJUaGVtZU1hYzo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBJ
bnRSZWN0JiByKQogewotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvLT5zdHlsZSgpLmFwcGVhcmFu
Y2UoKTsKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gby5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKIAog
I2lmIFVTRShORVdfVEhFTUUpCiAgICAgc3dpdGNoIChwYXJ0KSB7CkBAIC02MjEsNyArNjIxLDcg
QEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvLCBJbnRSZWN0JiByKQogICAgIH0KICNlbmRpZgogCi0gICAgZmxvYXQgem9vbUxldmVs
ID0gby0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9vbUxldmVsID0gby5z
dHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIGlmIChwYXJ0ID09IE1lbnVsaXN0UGFydCkg
ewogICAgICAgICBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShvLCByKTsKQEAgLTY1MCwyMCArNjUw
LDIwIEBAIEludFJlY3QgUmVuZGVyVGhlbWVNYWM6OmluZmxhdGVSZWN0KGNvbnN0IEludFJlY3Qm
IHIsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
RmxvYXRSZWN0IFJlbmRlclRoZW1lTWFjOjpjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVu
ZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJl
ciwgY29uc3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0CitG
bG9hdFJlY3QgUmVuZGVyVGhlbWVNYWM6OmNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5k
ZXJPYmplY3QmIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCYgcGFydFJlbmRlcmVy
LCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVjdCYgcikgY29uc3QKIHsK
ICAgICBGbG9hdFJlY3QgcGFydFJlY3QoaW5wdXRSZWN0KTsKIAogICAgIC8vIENvbXB1dGUgYW4g
b2Zmc2V0IGJldHdlZW4gdGhlIHBhcnQgcmVuZGVyZXIgYW5kIHRoZSBpbnB1dCByZW5kZXJlcgog
ICAgIEZsb2F0U2l6ZSBvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcjsKLSAgICBjb25zdCBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gcGFydFJlbmRlcmVyOwotICAgIHdoaWxlIChyZW5kZXJlciAmJiBy
ZW5kZXJlciAhPSBpbnB1dFJlbmRlcmVyKSB7CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9ICZwYXJ0UmVuZGVyZXI7CisgICAgd2hpbGUgKHJlbmRlcmVyICYmIHJlbmRlcmVyICE9
ICZpbnB1dFJlbmRlcmVyKSB7CiAgICAgICAgIFJlbmRlckVsZW1lbnQqIGNvbnRhaW5pbmdSZW5k
ZXJlciA9IHJlbmRlcmVyLT5jb250YWluZXIoKTsKICAgICAgICAgb2Zmc2V0RnJvbUlucHV0UmVu
ZGVyZXIgLT0gcm91bmRlZEludFNpemUocmVuZGVyZXItPm9mZnNldEZyb21Db250YWluZXIoY29u
dGFpbmluZ1JlbmRlcmVyLCBMYXlvdXRQb2ludCgpKSk7CiAgICAgICAgIHJlbmRlcmVyID0gY29u
dGFpbmluZ1JlbmRlcmVyOwogICAgIH0KICAgICAvLyBJZiB0aGUgaW5wdXQgcmVuZGVyZXIgd2Fz
IG5vdCBhIGNvbnRhaW5lciwgc29tZXRoaW5nIHdlbnQgd3JvbmcKLSAgICBBU1NFUlQocmVuZGVy
ZXIgPT0gaW5wdXRSZW5kZXJlcik7CisgICAgQVNTRVJUKHJlbmRlcmVyID09ICZpbnB1dFJlbmRl
cmVyKTsKICAgICAvLyBNb3ZlIHRoZSByZWN0IGludG8gcGFydFJlbmRlcmVyJ3MgY29vcmRzCiAg
ICAgcGFydFJlY3QubW92ZShvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcik7CiAgICAgLy8gQWNjb3Vu
dCBmb3IgdGhlIGxvY2FsIGRyYXdpbmcgb2Zmc2V0ICh0eCwgdHkpCkBAIC02NzIsNyArNjcyLDcg
QEAgRmxvYXRSZWN0IFJlbmRlclRoZW1lTWFjOjpjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3Qg
UmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmUKICAgICByZXR1cm4gcGFydFJlY3Q7CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0
IFJlbmRlck9iamVjdCogbykKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUNoZWNrZWRTdGF0
ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJlbmRlck9iamVjdCYgbykKIHsKICAgICBib29sIG9sZElu
ZGV0ZXJtaW5hdGUgPSBbY2VsbCBzdGF0ZV0gPT0gTlNNaXhlZFN0YXRlOwogICAgIGJvb2wgaW5k
ZXRlcm1pbmF0ZSA9IGlzSW5kZXRlcm1pbmF0ZShvKTsKQEAgLTY4OCw3ICs2ODgsNyBAQCB2b2lk
IFJlbmRlclRoZW1lTWFjOjp1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBS
ZW5kZXJPYmplY3QqIG8pCiAgICAgICAgIFtjZWxsIHNldFN0YXRlOmNoZWNrZWQgPyBOU09uU3Rh
dGUgOiBOU09mZlN0YXRlXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlRW5hYmxl
ZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvKQordm9pZCBSZW5kZXJU
aGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvKQogewogICAgIGJvb2wgb2xkRW5hYmxlZCA9IFtjZWxsIGlzRW5hYmxlZF07CiAgICAg
Ym9vbCBlbmFibGVkID0gaXNFbmFibGVkKG8pOwpAQCAtNjk2LDIzICs2OTYsMjMgQEAgdm9pZCBS
ZW5kZXJUaGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVu
ZGVyT2JqZWN0KiBvKQogICAgICAgICBbY2VsbCBzZXRFbmFibGVkOmVuYWJsZWRdOwogfQogCi12
b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVGb2N1c2VkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25z
dCBSZW5kZXJPYmplY3QqIG8pCit2b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVGb2N1c2VkU3Rh
dGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QmIG8pCiB7CiAgICAgYm9vbCBvbGRG
b2N1c2VkID0gW2NlbGwgc2hvd3NGaXJzdFJlc3BvbmRlcl07Ci0gICAgYm9vbCBmb2N1c2VkID0g
aXNGb2N1c2VkKG8pICYmIG8tPnN0eWxlKCkub3V0bGluZVN0eWxlSXNBdXRvKCk7CisgICAgYm9v
bCBmb2N1c2VkID0gaXNGb2N1c2VkKG8pICYmIG8uc3R5bGUoKS5vdXRsaW5lU3R5bGVJc0F1dG8o
KTsKICAgICBpZiAoZm9jdXNlZCAhPSBvbGRGb2N1c2VkKQogICAgICAgICBbY2VsbCBzZXRTaG93
c0ZpcnN0UmVzcG9uZGVyOmZvY3VzZWRdOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRh
dGVQcmVzc2VkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCit2b2lk
IFJlbmRlclRoZW1lTWFjOjp1cGRhdGVQcmVzc2VkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBS
ZW5kZXJPYmplY3QmIG8pCiB7CiAgICAgYm9vbCBvbGRQcmVzc2VkID0gW2NlbGwgaXNIaWdobGln
aHRlZF07Ci0gICAgYm9vbCBwcmVzc2VkID0gby0+bm9kZSgpICYmIG8tPm5vZGUoKS0+aXNFbGVt
ZW50Tm9kZSgpICYmIHRvRWxlbWVudChvLT5ub2RlKCkpLT5hY3RpdmUoKTsKKyAgICBib29sIHBy
ZXNzZWQgPSBvLm5vZGUoKSAmJiBvLm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVu
dChvLm5vZGUoKSktPmFjdGl2ZSgpOwogICAgIGlmIChwcmVzc2VkICE9IG9sZFByZXNzZWQpCiAg
ICAgICAgIFtjZWxsIHNldEhpZ2hsaWdodGVkOnByZXNzZWRdOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lTWFjOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0
Citib29sIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJP
YmplY3QmIG8pIGNvbnN0CiB7CiAgICAgLy8gQW4gYWx0ZXJuYXRlIHdheSB0byBpbXBsZW1lbnQg
dGhpcyB3b3VsZCBiZSB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIGNlbGwgb2JqZWN0CiAgICAgLy8g
YW5kIGNhbGwgdGhlIHByaXZhdGUgX25lZWRSZWRyYXdPbldpbmRvd0NoYW5nZWRLZXlTdGF0ZSBt
ZXRob2QuIEFuIGFkdmFudGFnZSBvZgpAQCAtNzIzLDcgKzcyMyw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVNYWM6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQ2hlY2tib3hlcyBvbmx5IGhhdmUgdGlu
dCB3aGVuIGNoZWNrZWQuCi0gICAgaWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNr
Ym94UGFydCkKKyAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQp
CiAgICAgICAgIHJldHVybiBpc0NoZWNrZWQobyk7CiAKICAgICAvLyBGb3Igbm93IGFzc3VtZSBv
dGhlciBjb250cm9scyBoYXZlIHRpbnQgaWYgZW5hYmxlZC4KQEAgLTgxMSw3ICs4MTEsNyBAQCBO
U0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHJldHVybiBOU01pbmlDb250cm9sU2l6ZTsKIH0K
IAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVy
VGhlbWVNYWM6OnBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgTG9jYWxDdXJyZW50
R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7CiAKQEAgLTgz
MSw3ICs4MzEsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0RmllbGRTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KgogewogfQogCi1ib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBpZiAocGFpbnRJbmZv
LmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC04
NDIsNyArODQyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRDYXBzTG9ja0luZGljYXRv
cihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mIHBhaW4KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVu
ZGVyVGhlbWVNYWM6OnBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBMb2NhbEN1cnJl
bnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKICAgICB3
a0RyYXdCZXplbGVkVGV4dEFyZWEociwgaXNFbmFibGVkKG8pICYmICFpc1JlYWRPbmx5Q29udHJv
bChvKSk7CkBAIC04ODEsMjEgKzg4MSwyMSBAQCBjb25zdCBpbnQqIFJlbmRlclRoZW1lTWFjOjpw
b3B1cEJ1dHRvblBhZGRpbmcoTlNDb250cm9sU2l6ZSBzaXplKSBjb25zdAogICAgIHJldHVybiBw
YWRkaW5nW3NpemVdOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVj
dCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAg
ICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29u
dGV4dCk7CiAgICAgc2V0UG9wdXBCdXR0b25DZWxsU3RhdGUobywgcik7CiAKICAgICBOU1BvcFVw
QnV0dG9uQ2VsbCogcG9wdXBCdXR0b24gPSB0aGlzLT5wb3B1cEJ1dHRvbigpOwogCi0gICAgZmxv
YXQgem9vbUxldmVsID0gby0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9v
bUxldmVsID0gby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKICAgICBJbnRTaXplIHNpemUgPSBw
b3B1cEJ1dHRvblNpemVzKClbW3BvcHVwQnV0dG9uIGNvbnRyb2xTaXplXV07CiAgICAgc2l6ZS5z
ZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSAqIHpvb21MZXZlbCk7CiAgICAgc2l6ZS5zZXRXaWR0aChy
LndpZHRoKCkpOwogCiAgICAgLy8gTm93IGluZmxhdGUgaXQgdG8gYWNjb3VudCBmb3IgdGhlIHNo
YWRvdy4KICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHI7Ci0gICAgaWYgKHIud2lkdGgoKSA+
PSBtaW5pbXVtTWVudUxpc3RTaXplKCZvLT5zdHlsZSgpKSkKKyAgICBpZiAoci53aWR0aCgpID49
IG1pbmltdW1NZW51TGlzdFNpemUoJm8uc3R5bGUoKSkpCiAgICAgICAgIGluZmxhdGVkUmVjdCA9
IGluZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgcG9wdXBCdXR0b25NYXJnaW5zKCksIHpv
b21MZXZlbCk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBh
aW50SW5mby5jb250ZXh0KTsKQEAgLTkxMyw3ICs5MTMsNyBAQCBib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sCiAKICAgICBOU1ZpZXcgKnZpZXcgPSBkb2N1bWVudFZpZXdGb3Iobyk7CiAgICAgW3BvcHVw
QnV0dG9uIGRyYXdXaXRoRnJhbWU6aW5mbGF0ZWRSZWN0IGluVmlldzp2aWV3XTsKLSAgICBpZiAo
aXNGb2N1c2VkKG8pICYmIG8tPnN0eWxlKCkub3V0bGluZVN0eWxlSXNBdXRvKCkpCisgICAgaWYg
KGlzRm9jdXNlZChvKSAmJiBvLnN0eWxlKCkub3V0bGluZVN0eWxlSXNBdXRvKCkpCiAgICAgICAg
IFtwb3B1cEJ1dHRvbiBfd2ViX2RyYXdGb2N1c1JpbmdXaXRoRnJhbWU6aW5mbGF0ZWRSZWN0IGlu
Vmlldzp2aWV3XTsKICAgICBbcG9wdXBCdXR0b24gc2V0Q29udHJvbFZpZXc6bmlsXTsKIApAQCAt
OTM0LDE0ICs5MzQsMTQgQEAgSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6bWV0ZXJTaXplRm9yQm91
bmRzKGNvbnN0IFJlbmRlck1ldGVyKiByZW5kZXJNZXRlciwgY29uc3QKICAgICAgICAgICAgICAg
ICAgICBib3VuZHMuaGVpZ2h0KCkgPCBjZWxsU2l6ZS5oZWlnaHQgPyBjZWxsU2l6ZS5oZWlnaHQg
OiBib3VuZHMuaGVpZ2h0KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1ldGVy
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWV0ZXIoY29u
c3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghcmVuZGVyT2JqZWN0LT5pc01ldGVy
KCkpCisgICAgaWYgKCFyZW5kZXJPYmplY3QuaXNNZXRlcigpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJ
bmZvLmNvbnRleHQpOwogCi0gICAgTlNMZXZlbEluZGljYXRvckNlbGwqIGNlbGwgPSBsZXZlbElu
ZGljYXRvckZvcih0b1JlbmRlck1ldGVyKHJlbmRlck9iamVjdCkpOworICAgIE5TTGV2ZWxJbmRp
Y2F0b3JDZWxsKiBjZWxsID0gbGV2ZWxJbmRpY2F0b3JGb3IodG9SZW5kZXJNZXRlcigmcmVuZGVy
T2JqZWN0KSk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWlu
dEluZm8uY29udGV4dCk7CiAKICAgICBbY2VsbCBkcmF3V2l0aEZyYW1lOnJlY3QgaW5WaWV3OmRv
Y3VtZW50Vmlld0ZvcihyZW5kZXJPYmplY3QpXTsKQEAgLTEwNDIsMjMgKzEwNDIsMjMgQEAgY29u
c3QgaW50KiBSZW5kZXJUaGVtZU1hYzo6cHJvZ3Jlc3NCYXJNYXJnaW5zKE5TQ29udHJvbFNpemUg
Y29udHJvbFNpemUpIGNvbnN0CiAgICAgcmV0dXJuIG1hcmdpbnNbY29udHJvbFNpemVdOwogfQog
Ci1JbnRSZWN0IFJlbmRlclRoZW1lTWFjOjpwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3Qg
UmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IEludFJlY3QmIGJvdW5kcykgY29uc3QK
K0ludFJlY3QgUmVuZGVyVGhlbWVNYWM6OnByb2dyZXNzQmFyUmVjdEZvckJvdW5kcyhjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAog
ewogICAgIC8vIFdvcmthcm91bmQgdW50aWwgPHJkYXI6Ly9wcm9ibGVtLzE1ODU1MDg2PiBpcyBm
aXhlZC4KICAgICBpbnQgbWF4RGltZW5zaW9uID0gc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om51bWVy
aWNfbGltaXRzPHVzaG9ydD46Om1heCgpKTsKICAgICBJbnRSZWN0IHByb2dyZXNzQmFyQm91bmRz
KGJvdW5kcy54KCksIGJvdW5kcy55KCksIHN0ZDo6bWluKGJvdW5kcy53aWR0aCgpLCBtYXhEaW1l
bnNpb24pLCBzdGQ6Om1pbihib3VuZHMuaGVpZ2h0KCksIG1heERpbWVuc2lvbikpOwotICAgIGlm
IChOb0NvbnRyb2xQYXJ0ID09IHJlbmRlck9iamVjdC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkpCisg
ICAgaWYgKE5vQ29udHJvbFBhcnQgPT0gcmVuZGVyT2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgp
KQogICAgICAgICByZXR1cm4gcHJvZ3Jlc3NCYXJCb3VuZHM7CiAKLSAgICBmbG9hdCB6b29tTGV2
ZWwgPSByZW5kZXJPYmplY3QtPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwotICAgIE5TQ29udHJv
bFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoJnJlbmRlck9iamVjdC0+c3R5
bGUoKSk7CisgICAgZmxvYXQgem9vbUxldmVsID0gcmVuZGVyT2JqZWN0LnN0eWxlKCkuZWZmZWN0
aXZlWm9vbSgpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZv
ckZvbnQoJnJlbmRlck9iamVjdC5zdHlsZSgpKTsKICAgICBJbnRTaXplIHNpemUgPSBwcm9ncmVz
c0JhclNpemVzKClbY29udHJvbFNpemVdOwogICAgIHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0
KCkgKiB6b29tTGV2ZWwpOwogICAgIHNpemUuc2V0V2lkdGgocHJvZ3Jlc3NCYXJCb3VuZHMud2lk
dGgoKSk7CiAKICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBhY2NvdW50IGZvciB0aGUgc2hhZG93
LgogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gcHJvZ3Jlc3NCYXJCb3VuZHM7Ci0gICAgaWYg
KHByb2dyZXNzQmFyQm91bmRzLmhlaWdodCgpIDw9IG1pbmltdW1Qcm9ncmVzc0JhckhlaWdodCgm
cmVuZGVyT2JqZWN0LT5zdHlsZSgpKSkKKyAgICBpZiAocHJvZ3Jlc3NCYXJCb3VuZHMuaGVpZ2h0
KCkgPD0gbWluaW11bVByb2dyZXNzQmFySGVpZ2h0KCZyZW5kZXJPYmplY3Quc3R5bGUoKSkpCiAg
ICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgcHJv
Z3Jlc3NCYXJNYXJnaW5zKGNvbnRyb2xTaXplKSwgem9vbUxldmVsKTsKIAogICAgIHJldHVybiBp
bmZsYXRlZFJlY3Q7CkBAIC0xMDgzLDI4ICsxMDgzLDI4IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6
OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVuCiB7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVy
T2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0Jhcihjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFyZW5kZXJPYmplY3QtPmlzUHJvZ3Jl
c3MoKSkKKyAgICBpZiAoIXJlbmRlck9iamVjdC5pc1Byb2dyZXNzKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBwcm9ncmVzc0JhclJlY3RGb3JC
b3VuZHMocmVuZGVyT2JqZWN0LCByZWN0KTsKLSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXpl
ID0gY29udHJvbFNpemVGb3JGb250KCZyZW5kZXJPYmplY3QtPnN0eWxlKCkpOworICAgIE5TQ29u
dHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoJnJlbmRlck9iamVjdC5z
dHlsZSgpKTsKIAotICAgIFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVy
UHJvZ3Jlc3MocmVuZGVyT2JqZWN0KTsKKyAgICBjb25zdCBSZW5kZXJQcm9ncmVzcyYgcmVuZGVy
UHJvZ3Jlc3MgPSAqdG9SZW5kZXJQcm9ncmVzcygmcmVuZGVyT2JqZWN0KTsKICAgICBISVRoZW1l
VHJhY2tEcmF3SW5mbyB0cmFja0luZm87CiAgICAgdHJhY2tJbmZvLnZlcnNpb24gPSAwOwogICAg
IGlmIChjb250cm9sU2l6ZSA9PSBOU1JlZ3VsYXJDb250cm9sU2l6ZSkKLSAgICAgICAgdHJhY2tJ
bmZvLmtpbmQgPSByZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSA8IDAgPyBrVGhlbWVMYXJnZUlu
ZGV0ZXJtaW5hdGVCYXIgOiBrVGhlbWVMYXJnZVByb2dyZXNzQmFyOworICAgICAgICB0cmFja0lu
Zm8ua2luZCA9IHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCkgPCAwID8ga1RoZW1lTGFyZ2VJbmRl
dGVybWluYXRlQmFyIDoga1RoZW1lTGFyZ2VQcm9ncmVzc0JhcjsKICAgICBlbHNlCi0gICAgICAg
IHRyYWNrSW5mby5raW5kID0gcmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCkgPCAwID8ga1RoZW1l
TWVkaXVtSW5kZXRlcm1pbmF0ZUJhciA6IGtUaGVtZU1lZGl1bVByb2dyZXNzQmFyOworICAgICAg
ICB0cmFja0luZm8ua2luZCA9IHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCkgPCAwID8ga1RoZW1l
TWVkaXVtSW5kZXRlcm1pbmF0ZUJhciA6IGtUaGVtZU1lZGl1bVByb2dyZXNzQmFyOwogCi0gICAg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSByZW5kZXJPYmplY3QtPmRvY3VtZW50KCkuZGV2aWNl
U2NhbGVGYWN0b3IoKTsKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IHJlbmRlck9iamVj
dC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgdHJhY2tJbmZvLmJvdW5kcyA9
IEludFJlY3QoSW50UG9pbnQoKSwgaW5mbGF0ZWRSZWN0LnNpemUoKSk7CiAgICAgdHJhY2tJbmZv
Lm1pbiA9IDA7CiAgICAgdHJhY2tJbmZvLm1heCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8U0ludDMy
Pjo6bWF4KCk7Ci0gICAgdHJhY2tJbmZvLnZhbHVlID0gbHJvdW5kKHJlbmRlclByb2dyZXNzLT5w
b3NpdGlvbigpICogbmV4dGFmdGVyKHRyYWNrSW5mby5tYXgsIDApKTsKLSAgICB0cmFja0luZm8u
dHJhY2tJbmZvLnByb2dyZXNzLnBoYXNlID0gbHJvdW5kKHJlbmRlclByb2dyZXNzLT5hbmltYXRp
b25Qcm9ncmVzcygpICogbmV4dGFmdGVyKHByb2dyZXNzQW5pbWF0aW9uTnVtRnJhbWVzLCAwKSAq
IGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICB0cmFja0luZm8udmFsdWUgPSBscm91bmQocmVuZGVy
UHJvZ3Jlc3MucG9zaXRpb24oKSAqIG5leHRhZnRlcih0cmFja0luZm8ubWF4LCAwKSk7CisgICAg
dHJhY2tJbmZvLnRyYWNrSW5mby5wcm9ncmVzcy5waGFzZSA9IGxyb3VuZChyZW5kZXJQcm9ncmVz
cy5hbmltYXRpb25Qcm9ncmVzcygpICogbmV4dGFmdGVyKHByb2dyZXNzQW5pbWF0aW9uTnVtRnJh
bWVzLCAwKSAqIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICB0cmFja0luZm8uYXR0cmlidXRlcyA9
IGtUaGVtZVRyYWNrSG9yaXpvbnRhbDsKICAgICB0cmFja0luZm8uZW5hYmxlU3RhdGUgPSBpc0Fj
dGl2ZShyZW5kZXJPYmplY3QpID8ga1RoZW1lVHJhY2tBY3RpdmUgOiBrVGhlbWVUcmFja0luYWN0
aXZlOwogICAgIHRyYWNrSW5mby5yZXNlcnZlZCA9IDA7CkBAIC0xMTIwLDcgKzExMjAsNyBAQCBi
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZgogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAKLSAgICBpZiAoIXJlbmRlclByb2dyZXNz
LT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgeworICAgIGlmICghcmVuZGVyUHJv
Z3Jlc3Muc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgyICogaW5mbGF0ZWRSZWN0LngoKSArIGluZmxhdGVkUmVj
dC53aWR0aCgpLCAwKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6
ZSgtMSwgMSkpOwogICAgIH0KQEAgLTExODIsNyArMTE4Miw3IEBAIHN0YXRpYyB2b2lkIFRyYWNr
R3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0
KiBvdXRECiAgICAgICAgIG91dERhdGFbaV0gPSAoMS4wZiAtIGEpICogZGFya1tpXSArIGEgKiBs
aWdodFtpXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkdy
YWRpZW50cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByKQordm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkdy
YWRpZW50cyhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIGlmIChyLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTE5Miw3ICsxMTkyLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51
TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW4KIAogICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQp
OwogCi0gICAgRmxvYXRSb3VuZGVkUmVjdCBib3JkZXIgPSBGbG9hdFJvdW5kZWRSZWN0KG8tPnN0
eWxlKCkuZ2V0Um91bmRlZEJvcmRlckZvcihyLCAmby0+dmlldygpKSk7CisgICAgRmxvYXRSb3Vu
ZGVkUmVjdCBib3JkZXIgPSBGbG9hdFJvdW5kZWRSZWN0KG8uc3R5bGUoKS5nZXRSb3VuZGVkQm9y
ZGVyRm9yKHIsICZvLnZpZXcoKSkpOwogICAgIGludCByYWRpdXMgPSBib3JkZXIucmFkaWkoKS50
b3BMZWZ0KCkud2lkdGgoKTsKIAogICAgIENHQ29sb3JTcGFjZVJlZiBjc3BhY2UgPSBkZXZpY2VS
R0JDb2xvclNwYWNlUmVmKCk7CkBAIC0xMjQ5LDI5ICsxMjQ5LDI5IEBAIHZvaWQgUmVuZGVyVGhl
bWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0
QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJl
ciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0g
ICAgSW50UmVjdCBib3VuZHMgPSBJbnRSZWN0KHJlY3QueCgpICsgcmVuZGVyZXItPnN0eWxlKCku
Ym9yZGVyTGVmdFdpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgp
ICsgcmVuZGVyZXItPnN0eWxlKCkuYm9yZGVyVG9wV2lkdGgoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVjdC53aWR0aCgpIC0gcmVuZGVyZXItPnN0eWxlKCkuYm9yZGVyTGVmdFdp
ZHRoKCkgLSByZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJSaWdodFdpZHRoKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSByZW5kZXJlci0+c3R5bGUoKS5ib3Jk
ZXJUb3BXaWR0aCgpIC0gcmVuZGVyZXItPnN0eWxlKCkuYm9yZGVyQm90dG9tV2lkdGgoKSk7Cisg
ICAgSW50UmVjdCBib3VuZHMgPSBJbnRSZWN0KHJlY3QueCgpICsgcmVuZGVyZXIuc3R5bGUoKS5i
b3JkZXJMZWZ0V2lkdGgoKSwKKyAgICAgICAgcmVjdC55KCkgKyByZW5kZXJlci5zdHlsZSgpLmJv
cmRlclRvcFdpZHRoKCksCisgICAgICAgIHJlY3Qud2lkdGgoKSAtIHJlbmRlcmVyLnN0eWxlKCku
Ym9yZGVyTGVmdFdpZHRoKCkgLSByZW5kZXJlci5zdHlsZSgpLmJvcmRlclJpZ2h0V2lkdGgoKSwK
KyAgICAgICAgcmVjdC5oZWlnaHQoKSAtIHJlbmRlcmVyLnN0eWxlKCkuYm9yZGVyVG9wV2lkdGgo
KSAtIHJlbmRlcmVyLnN0eWxlKCkuYm9yZGVyQm90dG9tV2lkdGgoKSk7CiAgICAgLy8gRHJhdyB0
aGUgZ3JhZGllbnRzIHRvIGdpdmUgdGhlIHN0eWxlZCBwb3B1cCBtZW51IGEgYnV0dG9uIGFwcGVh
cmFuY2UKICAgICBwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKHJlbmRlcmVyLCBwYWludElu
Zm8sIGJvdW5kcyk7CiAKICAgICAvLyBTaW5jZSB3ZSBhY3R1YWxseSBrbm93IHRoZSBzaXplIG9m
IHRoZSBjb250cm9sIGhlcmUsIHdlIHJlc3RyaWN0IHRoZSBmb250IHNjYWxlIHRvIG1ha2Ugc3Vy
ZSB0aGUgYXJyb3dzIHdpbGwgZml0IHZlcnRpY2FsbHkgaW4gdGhlIGJvdW5kcwotICAgIGZsb2F0
IGZvbnRTY2FsZSA9IHN0ZDo6bWluKHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRTaXplKCkgLyBiYXNl
Rm9udFNpemUsIGJvdW5kcy5oZWlnaHQoKSAvIChiYXNlQXJyb3dIZWlnaHQgKiAyICsgYmFzZVNw
YWNlQmV0d2VlbkFycm93cykpOworICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0ZDo6bWluKHJlbmRl
cmVyLnN0eWxlKCkuZm9udFNpemUoKSAvIGJhc2VGb250U2l6ZSwgYm91bmRzLmhlaWdodCgpIC8g
KGJhc2VBcnJvd0hlaWdodCAqIDIgKyBiYXNlU3BhY2VCZXR3ZWVuQXJyb3dzKSk7CiAgICAgZmxv
YXQgY2VudGVyWSA9IGJvdW5kcy55KCkgKyBib3VuZHMuaGVpZ2h0KCkgLyAyLjBmOwogICAgIGZs
b2F0IGFycm93SGVpZ2h0ID0gYmFzZUFycm93SGVpZ2h0ICogZm9udFNjYWxlOwogICAgIGZsb2F0
IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIGZvbnRTY2FsZTsKLSAgICBmbG9hdCBsZWZ0
RWRnZSA9IGJvdW5kcy5tYXhYKCkgLSBhcnJvd1BhZGRpbmdSaWdodCAqIHJlbmRlcmVyLT5zdHls
ZSgpLmVmZmVjdGl2ZVpvb20oKSAtIGFycm93V2lkdGg7CisgICAgZmxvYXQgbGVmdEVkZ2UgPSBi
b3VuZHMubWF4WCgpIC0gYXJyb3dQYWRkaW5nUmlnaHQgKiByZW5kZXJlci5zdHlsZSgpLmVmZmVj
dGl2ZVpvb20oKSAtIGFycm93V2lkdGg7CiAgICAgZmxvYXQgc3BhY2VCZXR3ZWVuQXJyb3dzID0g
YmFzZVNwYWNlQmV0d2VlbkFycm93cyAqIGZvbnRTY2FsZTsKIAotICAgIGlmIChib3VuZHMud2lk
dGgoKSA8IGFycm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0ICogcmVuZGVyZXItPnN0eWxlKCku
ZWZmZWN0aXZlWm9vbSgpKQorICAgIGlmIChib3VuZHMud2lkdGgoKSA8IGFycm93V2lkdGggKyBh
cnJvd1BhZGRpbmdMZWZ0ICogcmVuZGVyZXIuc3R5bGUoKS5lZmZlY3RpdmVab29tKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZp
bGxDb2xvcihyZW5kZXJlci0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlDb2xvciksIHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yU3BhY2UoKSk7CisgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnNldEZpbGxDb2xvcihyZW5kZXJlci5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgcmVuZGVyZXIuc3R5bGUoKS5jb2xvclNwYWNlKCkpOwog
ICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VTdHlsZShOb1N0cm9rZSk7CiAKICAgICBG
bG9hdFBvaW50IGFycm93MVszXTsKQEAgLTEyOTUsNyArMTI5NSw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBjb25zCiAKICAgICAvLyBGSVhNRTogU2hvdWxkIHRoZSBzZXBhcmF0b3IgdGhpY2tuZXNz
IGFuZCBzcGFjZSBiZSBzY2FsZWQgdXAgYnkgZm9udFNjYWxlPwogICAgIGludCBzZXBhcmF0b3JT
cGFjZSA9IDI7IC8vIERlbGliZXJhdGVseSBpZ25vcmVzIHpvb20gc2luY2UgaXQgbG9va3Mgbmlj
ZXIgaWYgaXQgc3RheXMgdGhpbi4KLSAgICBpbnQgbGVmdEVkZ2VPZlNlcGFyYXRvciA9IHN0YXRp
Y19jYXN0PGludD4obGVmdEVkZ2UgLSBhcnJvd1BhZGRpbmdMZWZ0ICogcmVuZGVyZXItPnN0eWxl
KCkuZWZmZWN0aXZlWm9vbSgpKTsgLy8gRklYTUU6IFJvdW5kPworICAgIGludCBsZWZ0RWRnZU9m
U2VwYXJhdG9yID0gc3RhdGljX2Nhc3Q8aW50PihsZWZ0RWRnZSAtIGFycm93UGFkZGluZ0xlZnQg
KiByZW5kZXJlci5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7IC8vIEZJWE1FOiBSb3VuZD8KIAog
ICAgIC8vIERyYXcgdGhlIHNlcGFyYXRvciB0byB0aGUgbGVmdCBvZiB0aGUgYXJyb3dzCiAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcygxKTsgLy8gRGVsaWJlcmF0ZWx5
IGlnbm9yZXMgem9vbSBzaW5jZSBpdCBsb29rcyBuaWNlciBpZiBpdCBzdGF5cyB0aGluLgpAQCAt
MTM5NiwxMiArMTM5NiwxMiBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bAogICAgIHN0eWxlLT5z
ZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUoY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBJbnRSZWN0JiByKQordm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0UG9wdXBC
dXR0b25DZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBJbnRSZWN0JiByKQog
ewogICAgIE5TUG9wVXBCdXR0b25DZWxsKiBwb3B1cEJ1dHRvbiA9IHRoaXMtPnBvcHVwQnV0dG9u
KCk7CiAKICAgICAvLyBTZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIHJlY3Rhbmds
ZSB3ZSdyZSBwYWludGluZyBpbnRvLgotICAgIHNldENvbnRyb2xTaXplKHBvcHVwQnV0dG9uLCBw
b3B1cEJ1dHRvblNpemVzKCksIHIuc2l6ZSgpLCBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7
CisgICAgc2V0Q29udHJvbFNpemUocG9wdXBCdXR0b24sIHBvcHVwQnV0dG9uU2l6ZXMoKSwgci5z
aXplKCksIG8uc3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOwogCiAgICAgLy8gVXBkYXRlIHRoZSB2
YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgogICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKHBvcHVw
QnV0dG9uLCBvKTsKQEAgLTE0MjksMTYgKzE0MjksMTYgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LAogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50
U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBJbnRSZWN0IGJvdW5kcyA9IHI7Ci0gICAg
ZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQg
em9vbUxldmVsID0gby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKICAgICBmbG9hdCB6b29tZWRU
cmFja1dpZHRoID0gdHJhY2tXaWR0aCAqIHpvb21MZXZlbDsKIAotICAgIGlmIChvLT5zdHlsZSgp
LmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgby0+c3R5bGUoKS5hcHBl
YXJhbmNlKCkgPT0gIE1lZGlhU2xpZGVyUGFydCkgeworICAgIGlmIChvLnN0eWxlKCkuYXBwZWFy
YW5jZSgpID09ICBTbGlkZXJIb3Jpem9udGFsUGFydCB8fCBvLnN0eWxlKCkuYXBwZWFyYW5jZSgp
ID09ICBNZWRpYVNsaWRlclBhcnQpIHsKICAgICAgICAgYm91bmRzLnNldEhlaWdodCh6b29tZWRU
cmFja1dpZHRoKTsKICAgICAgICAgYm91bmRzLnNldFkoci55KCkgKyByLmhlaWdodCgpIC8gMiAt
IHpvb21lZFRyYWNrV2lkdGggLyAyKTsKLSAgICB9IGVsc2UgaWYgKG8tPnN0eWxlKCkuYXBwZWFy
YW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkgeworICAgIH0gZWxzZSBpZiAoby5zdHlsZSgp
LmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpIHsKICAgICAgICAgYm91bmRzLnNl
dFdpZHRoKHpvb21lZFRyYWNrV2lkdGgpOwogICAgICAgICBib3VuZHMuc2V0WChyLngoKSArIHIu
d2lkdGgoKSAvIDIgLSB6b29tZWRUcmFja1dpZHRoIC8gMik7CiAgICAgfQpAQCAtMTQ1Nyw3ICsx
NDU3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmYKICAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNh
bGxiYWNrcyBtYWluQ2FsbGJhY2tzID0geyAwLCBUcmFja0dyYWRpZW50SW50ZXJwb2xhdGUsIE5V
TEwgfTsKICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gbWFpbkZ1bmN0aW9uID0gYWRvcHRD
RihDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZtYWluQ2FsbGJhY2tz
KSk7CiAgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbWFpblNoYWRpbmc7Ci0gICAgaWYgKG8t
PnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkKKyAgICBpZiAoby5z
dHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCiAgICAgICAgIG1haW5T
aGFkaW5nID0gYWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtl
KGJvdW5kcy54KCksICBib3VuZHMubWF4WSgpKSwgQ0dQb2ludE1ha2UoYm91bmRzLm1heFgoKSwg
Ym91bmRzLm1heFkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAgICAg
ZWxzZQogICAgICAgICBtYWluU2hhZGluZyA9IGFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwo
Y3NwYWNlLCBDR1BvaW50TWFrZShib3VuZHMueCgpLCAgYm91bmRzLnkoKSksIENHUG9pbnRNYWtl
KGJvdW5kcy54KCksIGJvdW5kcy5tYXhZKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBm
YWxzZSkpOwpAQCAtMTQ3OCw5ICsxNDc4LDkgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXIKIAog
Y29uc3QgZmxvYXQgdmVydGljYWxTbGlkZXJIZWlnaHRQYWRkaW5nID0gMC4xZjsKIAotYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIE5TU2xpZGVyQ2VsbCogc2xp
ZGVyVGh1bWJDZWxsID0gby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0
aWNhbFBhcnQKKyAgICBOU1NsaWRlckNlbGwqIHNsaWRlclRodW1iQ2VsbCA9IG8uc3R5bGUoKS5h
cHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQKICAgICAgICAgPyBzbGlkZXJU
aHVtYlZlcnRpY2FsKCkKICAgICAgICAgOiBzbGlkZXJUaHVtYkhvcml6b250YWwoKTsKIApAQCAt
MTQ4OSwxOSArMTQ4OSwyMCBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRodW1i
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZgogICAgIC8vIFVwZGF0
ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KICAgICB1cGRhdGVBY3RpdmVTdGF0
ZShzbGlkZXJUaHVtYkNlbGwsIG8pOwogICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShzbGlkZXJUaHVt
YkNlbGwsIG8pOwotICAgIEVsZW1lbnQqIGZvY3VzRGVsZWdhdGUgPSAoby0+bm9kZSgpICYmIG8t
Pm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSA/IHRvRWxlbWVudChvLT5ub2RlKCkpLT5mb2N1c0Rl
bGVnYXRlKCkgOiAwOwotICAgIHVwZGF0ZUZvY3VzZWRTdGF0ZShzbGlkZXJUaHVtYkNlbGwsIGZv
Y3VzRGVsZWdhdGUgPyBmb2N1c0RlbGVnYXRlLT5yZW5kZXJlcigpIDogMCk7CisgICAgICAgIEVs
ZW1lbnQqIGZvY3VzRGVsZWdhdGUgPSAoby5ub2RlKCkgJiYgby5ub2RlKCktPmlzRWxlbWVudE5v
ZGUoKSkgPyB0b0VsZW1lbnQoby5ub2RlKCkpLT5mb2N1c0RlbGVnYXRlKCkgOiAwOworICAgIGlm
IChmb2N1c0RlbGVnYXRlKQorICAgICAgICB1cGRhdGVGb2N1c2VkU3RhdGUoc2xpZGVyVGh1bWJD
ZWxsLCAqZm9jdXNEZWxlZ2F0ZS0+cmVuZGVyZXIoKSk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHBy
ZXNzZWQgc3RhdGUgdXNpbmcgdGhlIE5TQ2VsbCB0cmFja2luZyBtZXRob2RzLCBzaW5jZSB0aGF0
J3MgaG93IE5TU2xpZGVyQ2VsbCBrZWVwcyB0cmFjayBvZiBpdC4KICAgICBib29sIG9sZFByZXNz
ZWQ7Ci0gICAgaWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0KQorICAgIGlmIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVy
dGljYWxQYXJ0KQogICAgICAgICBvbGRQcmVzc2VkID0gbV9pc1NsaWRlclRodW1iVmVydGljYWxQ
cmVzc2VkOwogICAgIGVsc2UKICAgICAgICAgb2xkUHJlc3NlZCA9IG1faXNTbGlkZXJUaHVtYkhv
cml6b250YWxQcmVzc2VkOwogCiAgICAgYm9vbCBwcmVzc2VkID0gaXNQcmVzc2VkKG8pOwogCi0g
ICAgaWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0
KQorICAgIGlmIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQ
YXJ0KQogICAgICAgICBtX2lzU2xpZGVyVGh1bWJWZXJ0aWNhbFByZXNzZWQgPSBwcmVzc2VkOwog
ICAgIGVsc2UKICAgICAgICAgbV9pc1NsaWRlclRodW1iSG9yaXpvbnRhbFByZXNzZWQgPSBwcmVz
c2VkOwpAQCAtMTUxNSwxMSArMTUxNiwxMSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNs
aWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZgogCiAg
ICAgRmxvYXRSZWN0IGJvdW5kcyA9IHI7CiAgICAgLy8gTWFrZSB0aGUgaGVpZ2h0IG9mIHRoZSB2
ZXJ0aWNhbCBzbGlkZXIgc2xpZ2h0bHkgbGFyZ2VyIHNvIE5TU2xpZGVyQ2VsbCB3aWxsIGRyYXcg
YSB2ZXJ0aWNhbCBzbGlkZXIuCi0gICAgaWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNs
aWRlclRodW1iVmVydGljYWxQYXJ0KQotICAgICAgICBib3VuZHMuc2V0SGVpZ2h0KGJvdW5kcy5o
ZWlnaHQoKSArIHZlcnRpY2FsU2xpZGVySGVpZ2h0UGFkZGluZyAqIG8tPnN0eWxlKCkuZWZmZWN0
aXZlWm9vbSgpKTsKKyAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVt
YlZlcnRpY2FsUGFydCkKKyAgICAgICAgYm91bmRzLnNldEhlaWdodChib3VuZHMuaGVpZ2h0KCkg
KyB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgKiBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgp
KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZv
LmNvbnRleHQpOwotICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCkuZWZmZWN0aXZlWm9v
bSgpOworICAgIGZsb2F0IHpvb21MZXZlbCA9IG8uc3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CiAK
ICAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gYm91bmRzOwogICAgIGlmICh6b29tTGV2ZWwg
IT0gMS4wZikgewpAQCAtMTUzNiw3ICsxNTM3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmYK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNo
RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGQoY29uc3Qg
UmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKIHsKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBh
aW50SW5mby5jb250ZXh0KTsKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+
c2VhcmNoKCk7CkBAIC0xNTQ1LDcgKzE1NDYsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZgog
CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29u
dGV4dCk7CiAKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20o
KTsKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwogCiAg
ICAgSW50UmVjdCB1bnpvb21lZFJlY3QgPSByOwogCkBAIC0xNTY4LDExICsxNTY5LDExIEBAIGJv
b2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRl
clRoZW1lTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJbnRS
ZWN0JikKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaENlbGxTdGF0ZShjb25zdCBSZW5k
ZXJPYmplY3QmIG8sIGNvbnN0IEludFJlY3QmKQogewogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBz
ZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIAotICAgIFtzZWFyY2ggc2V0Q29udHJvbFNpemU6Y29u
dHJvbFNpemVGb3JGb250KCZvLT5zdHlsZSgpKV07CisgICAgW3NlYXJjaCBzZXRDb250cm9sU2l6
ZTpjb250cm9sU2l6ZUZvckZvbnQoJm8uc3R5bGUoKSldOwogCiAgICAgLy8gVXBkYXRlIHRoZSB2
YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgogICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKHNlYXJj
aCwgbyk7CkBAIC0xNjI3LDE3ICsxNjI4LDE3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVz
dFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyCiAg
ICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIEVsZW1l
bnQqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dIb3N0KCk7CisgICAgRWxlbWVudCogaW5wdXQg
PSBvLm5vZGUoKS0+c2hhZG93SG9zdCgpOwogICAgIGlmICghaW5wdXQpCi0gICAgICAgIGlucHV0
ID0gdG9FbGVtZW50KG8tPm5vZGUoKSk7CisgICAgICAgIGlucHV0ID0gdG9FbGVtZW50KG8ubm9k
ZSgpKTsKIAogICAgIGlmICghaW5wdXQtPnJlbmRlcmVyKCktPmlzQm94KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRl
eHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHNldFNlYXJjaENlbGxTdGF0ZShpbnB1dC0+cmVu
ZGVyZXIoKSwgcik7CisgICAgc2V0U2VhcmNoQ2VsbFN0YXRlKCppbnB1dC0+cmVuZGVyZXIoKSwg
cik7CiAKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAK
QEAgLTE2NTAsNyArMTY1MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmll
bGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluCiAKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKIAot
ICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworICAgIGZs
b2F0IHpvb21MZXZlbCA9IG8uc3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CiAKICAgICBGbG9hdFJl
Y3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIGNhbmNlbEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0
KGlucHV0LT5yZW5kZXJCb3goKS0+cGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCgpKV07CiAKQEAg
LTE2NjMsNyArMTY2NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRD
YW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluCiAgICAgbG9jYWxCb3Vu
ZHMuc2V0WChsb2NhbEJvdW5kcy54KCkgLSBzcGFjZVRvUmlnaHRPZkNhbmNlbEJ1dHRvbik7CiAj
ZW5kaWYKIAotICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0LT5y
ZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7CisgICAgbG9jYWxCb3VuZHMgPSBjb252ZXJ0
VG9QYWludGluZ1JlY3QoKmlucHV0LT5yZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7CiAK
ICAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0KGxvY2FsQm91bmRzKTsKICAgICBpZiAoem9vbUxl
dmVsICE9IDEuMGYpIHsKQEAgLTE3MDgsNyArMTcwOSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6
OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyCiAgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTE3
MjEsMTYgKzE3MjIsMTYgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwKICAgICBzdHlsZS0+c2V0
Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYg
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAg
Tm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0hvc3QoKTsKKyAgICBOb2RlKiBpbnB1dCA9
IG8ubm9kZSgpLT5zaGFkb3dIb3N0KCk7CiAgICAgaWYgKCFpbnB1dCkKLSAgICAgICAgaW5wdXQg
PSBvLT5ub2RlKCk7CisgICAgICAgIGlucHV0ID0gby5ub2RlKCk7CiAgICAgaWYgKCFpbnB1dC0+
cmVuZGVyZXIoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTG9jYWxD
dXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0g
ICAgc2V0U2VhcmNoQ2VsbFN0YXRlKGlucHV0LT5yZW5kZXJlcigpLCByKTsKKyAgICBzZXRTZWFy
Y2hDZWxsU3RhdGUoKmlucHV0LT5yZW5kZXJlcigpLCByKTsKIAogICAgIE5TU2VhcmNoRmllbGRD
ZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIApAQCAtMTc0MCw3ICsxNzQxLDcgQEAgYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChS
ZW5kZXJPYmplY3QqIG8sIGNvbnMKICAgICB1cGRhdGVBY3RpdmVTdGF0ZShbc2VhcmNoIHNlYXJj
aEJ1dHRvbkNlbGxdLCBvKTsKIAogICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2gg
c2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5waXhl
bFNuYXBwZWRCb3JkZXJCb3hSZWN0KCkpXTsKLSAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRUb1Bh
aW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOworICAgIGxv
Y2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KCppbnB1dC0+cmVuZGVyZXIoKSwgbywg
bG9jYWxCb3VuZHMsIHIpOwogCiAgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gZHJhd1dp
dGhGcmFtZTpsb2NhbEJvdW5kcyBpblZpZXc6ZG9jdW1lbnRWaWV3Rm9yKG8pXTsKICAgICBbW3Nl
YXJjaCBzZWFyY2hCdXR0b25DZWxsXSBzZXRDb250cm9sVmlldzpuaWxdOwpAQCAtMTc1NiwxNiAr
MTc1NywxNiBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyUwogICAgIHN0eWxlLT5zZXRCb3hTaGFk
b3cobnVsbHB0cik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIE5vZGUqIGlucHV0ID0gby0+bm9kZSgp
LT5zaGFkb3dIb3N0KCk7CisgICAgTm9kZSogaW5wdXQgPSBvLm5vZGUoKS0+c2hhZG93SG9zdCgp
OwogICAgIGlmICghaW5wdXQpCi0gICAgICAgIGlucHV0ID0gby0+bm9kZSgpOworICAgICAgICBp
bnB1dCA9IG8ubm9kZSgpOwogICAgIGlmICghaW5wdXQtPnJlbmRlcmVyKCktPmlzQm94KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBs
b2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHNldFNlYXJjaENlbGxTdGF0ZShp
bnB1dC0+cmVuZGVyZXIoKSwgcik7CisgICAgc2V0U2VhcmNoQ2VsbFN0YXRlKCppbnB1dC0+cmVu
ZGVyZXIoKSwgcik7CiAKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2Vh
cmNoKCk7CiAKQEAgLTE3NzUsMTAgKzE3NzYsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEkK
ICAgICAgICAgW3NlYXJjaCBzZXRTZWFyY2hNZW51VGVtcGxhdGU6c2VhcmNoTWVudVRlbXBsYXRl
KCldOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludElu
Zm8uY29udGV4dCk7Ci0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS5lZmZlY3RpdmVa
b29tKCk7CisgICAgZmxvYXQgem9vbUxldmVsID0gby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsK
IAogICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZv
ckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5waXhlbFNuYXBwZWRCb3JkZXJCb3hS
ZWN0KCkpXTsKLSAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+
cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOworICAgIGxvY2FsQm91bmRzID0gY29udmVy
dFRvUGFpbnRpbmdSZWN0KCppbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOwog
CiAgICAgSW50UmVjdCB1bnpvb21lZFJlY3QobG9jYWxCb3VuZHMpOwogICAgIGlmICh6b29tTGV2
ZWwgIT0gMS4wZikgewpAQCAtMTc5NSwyNiArMTc5NiwyNiBAQCBib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBh
aW50SQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRT
bmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNu
YXBzaG90dGVkUGx1Z2luT3ZlcmxheShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JikKIHsKICAgICBpZiAocGFpbnRJbmZvLnBo
YXNlICE9IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgaWYgKCFvLT5pc1JlbmRlckJsb2NrKCkpCisgICAgaWYgKCFvLmlzUmVuZGVyQmxvY2so
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZW5kZXJCbG9jayogcmVuZGVyQmxvY2sg
PSB0b1JlbmRlckJsb2NrKG8pOworICAgIGNvbnN0IFJlbmRlckJsb2NrJiByZW5kZXJCbG9jayA9
ICp0b1JlbmRlckJsb2NrKCZvKTsKIAotICAgIExheW91dFVuaXQgY29udGVudFdpZHRoID0gcmVu
ZGVyQmxvY2stPmNvbnRlbnRXaWR0aCgpOwotICAgIExheW91dFVuaXQgY29udGVudEhlaWdodCA9
IHJlbmRlckJsb2NrLT5jb250ZW50SGVpZ2h0KCk7CisgICAgTGF5b3V0VW5pdCBjb250ZW50V2lk
dGggPSByZW5kZXJCbG9jay5jb250ZW50V2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IGNvbnRlbnRI
ZWlnaHQgPSByZW5kZXJCbG9jay5jb250ZW50SGVpZ2h0KCk7CiAgICAgaWYgKCFjb250ZW50V2lk
dGggfHwgIWNvbnRlbnRIZWlnaHQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CiAKICAgICBMYXlvdXRTaXpl
IGNvbnRlbnRTaXplKGNvbnRlbnRXaWR0aCwgY29udGVudEhlaWdodCk7Ci0gICAgTGF5b3V0UG9p
bnQgY29udGVudExvY2F0aW9uID0gcmVuZGVyQmxvY2stPmxvY2F0aW9uKCk7Ci0gICAgY29udGVu
dExvY2F0aW9uLm1vdmUocmVuZGVyQmxvY2stPmJvcmRlckxlZnQoKSArIHJlbmRlckJsb2NrLT5w
YWRkaW5nTGVmdCgpLCByZW5kZXJCbG9jay0+Ym9yZGVyVG9wKCkgKyByZW5kZXJCbG9jay0+cGFk
ZGluZ1RvcCgpKTsKKyAgICBMYXlvdXRQb2ludCBjb250ZW50TG9jYXRpb24gPSByZW5kZXJCbG9j
ay5sb2NhdGlvbigpOworICAgIGNvbnRlbnRMb2NhdGlvbi5tb3ZlKHJlbmRlckJsb2NrLmJvcmRl
ckxlZnQoKSArIHJlbmRlckJsb2NrLnBhZGRpbmdMZWZ0KCksIHJlbmRlckJsb2NrLmJvcmRlclRv
cCgpICsgcmVuZGVyQmxvY2sucGFkZGluZ1RvcCgpKTsKIAogICAgIExheW91dFJlY3QgcmVjdChj
b250ZW50TG9jYXRpb24sIGNvbnRlbnRTaXplKTsKICAgICBJbnRSZWN0IGFsaWduZWRSZWN0ID0g
cGl4ZWxTbmFwcGVkSW50UmVjdChyZWN0KTsKQEAgLTE4MjUsMTAgKzE4MjYsMTAgQEAgYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEkKICAgICAvLyBmcm9tIG91ciBub2RlLiBBc3N1bWluZyB0aGlzIG5v
ZGUgaXMgdGhlIHBsdWdpbiBvdmVybGF5IGVsZW1lbnQsIHdlIHNob3VsZCBnZXQgdG8gdGhlCiAg
ICAgLy8gcGx1Z2luIGl0c2VsZiBieSBhc2tpbmcgZm9yIHRoZSBzaGFkb3cgcm9vdCBwYXJlbnQs
IGFuZCB0aGVuIGl0cyBwYXJlbnQuCiAKLSAgICBpZiAoIXJlbmRlckJsb2NrLT5lbGVtZW50KCkt
PmlzSFRNTEVsZW1lbnQoKSkKKyAgICBpZiAoIXJlbmRlckJsb2NrLmVsZW1lbnQoKS0+aXNIVE1M
RWxlbWVudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEhUTUxFbGVtZW50KiBwbHVn
SW5PdmVybGF5ID0gdG9IVE1MRWxlbWVudChyZW5kZXJCbG9jay0+ZWxlbWVudCgpKTsKKyAgICBI
VE1MRWxlbWVudCogcGx1Z0luT3ZlcmxheSA9IHRvSFRNTEVsZW1lbnQocmVuZGVyQmxvY2suZWxl
bWVudCgpKTsKICAgICBFbGVtZW50KiBwYXJlbnQgPSBwbHVnSW5PdmVybGF5LT5wYXJlbnRPclNo
YWRvd0hvc3RFbGVtZW50KCk7CiAgICAgd2hpbGUgKHBhcmVudCAmJiAhcGFyZW50LT5pc1BsdWdp
bkVsZW1lbnQoKSkKICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPclNoYWRvd0hvc3RF
bGVtZW50KCk7CkBAIC0xODUyLDcgKzE4NTMsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SQog
CiAgICAgLy8gV2UgY291bGQgZHJhdyB0aGUgc25hcHNob3Qgd2l0aCB0aGF0IGNvb3JkaW5hdGVz
LCBidXQgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUKICAgICAvLyBpc24ndCBhIGNvbXBvc2l0
ZWQgbGF5ZXIgYmV0d2VlbiB1cyBhbmQgdGhlIHBsdWdJblJlbmRlcmVyLgotICAgIFJlbmRlckJv
eCogcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gobyk7CisgICAgY29uc3QgUmVuZGVyQm94KiByZW5k
ZXJCb3ggPSB0b1JlbmRlckJveCgmbyk7CiAgICAgd2hpbGUgKHJlbmRlckJveCAhPSBwbHVnSW5S
ZW5kZXJlcikgewogICAgICAgICBpZiAocmVuZGVyQm94LT5oYXNMYXllcigpICYmIHJlbmRlckJv
eC0+bGF5ZXIoKSAmJiByZW5kZXJCb3gtPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpKSB7CiAgICAg
ICAgICAgICBzbmFwc2hvdEFic1BvcyA9IC1yZW5kZXJCb3gtPmxvY2F0aW9uKCk7CkBAIC0yMDA0
LDcgKzIwMDUsNyBAQCBOU1NlcnZpY2VzUm9sbG92ZXJCdXR0b25DZWxsKiBSZW5kZXJUaGVtZU1h
Yzo6c2VydmljZXNSb2xsb3ZlckJ1dHRvbkNlbGwoKSBjb25zdAogI2VuZGlmCiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50SW1hZ2VDb250cm9sc0J1dHRvbihSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
K2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50SW1hZ2VDb250cm9sc0J1dHRvbihjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VCbG9j
a0JhY2tncm91bmQpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjAyOSw3ICsyMDMwLDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRJbWFnZUNvbnRyb2xzQnV0dG9uKFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIGNvbnN0IFBhaW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSW50U2l6ZSBS
ZW5kZXJUaGVtZU1hYzo6aW1hZ2VDb250cm9sc0J1dHRvblNpemUoY29uc3QgUmVuZGVyT2JqZWN0
KikgY29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWVNYWM6OmltYWdlQ29udHJvbHNCdXR0b25TaXpl
KGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0CiB7CiAjaWYgSEFWRShBUFBLSVRfSU1BR0VfQ09O
VFJPTFNfU1VQUE9SVCkKICAgICByZXR1cm4gSW50U2l6ZShzZXJ2aWNlc1JvbGxvdmVyQnV0dG9u
Q2VsbCgpLmNlbGxTaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZVNhZmFyaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVTYWZhcmkuY3BwCmluZGV4IDA3YWFiZjc4NmQ5OTEzMTlmMDA3OTA0MGFiN2U5ODdmOGQxYzU4
YTguLjFiN2UwNDAyMjlhMDU4ZDFmNzBiMzg1MjZiNjYwMmE4YzgyZGQ3N2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcApAQCAtMTE1LDcgKzEx
NSw3IEBAIHN0YXRpYyBSR0JBMzIgbWFrZVJHQkFGcm9tQ0dDb2xvcihDR0NvbG9yUmVmIGNvbG9y
KQogICAgIHJldHVybiBtYWtlUkdCQSgyNTUgKiBjb21wb25lbnRzWzBdLCAyNTUgKiBjb21wb25l
bnRzWzFdLCAyNTUgKiBjb21wb25lbnRzWzJdLCAyNTUgKiBjb21wb25lbnRzWzNdKTsKIH0KIAot
VGhlbWVDb250cm9sU3RhdGUgUmVuZGVyVGhlbWVTYWZhcmk6OmRldGVybWluZVN0YXRlKFJlbmRl
ck9iamVjdCogbykgY29uc3QKK1RoZW1lQ29udHJvbFN0YXRlIFJlbmRlclRoZW1lU2FmYXJpOjpk
ZXRlcm1pbmVTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7CiAgICAgVGhlbWVD
b250cm9sU3RhdGUgcmVzdWx0ID0gMDsKICAgICBpZiAoaXNBY3RpdmUobykpCkBAIC0yNjQsMTEg
KzI2NCwxMSBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjppc0NvbnRyb2xTdHlsZWQoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYQogICAgIHJldHVybiBSZW5kZXJUaGVt
ZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRD
b2xvcik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFJlcGFpbnRSZWN0KGNv
bnN0IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcikKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6
OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgSW50UmVjdCYgcikKIHsK
LSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KCZvLT5z
dHlsZSgpKTsKKyAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JG
b250KCZvLnN0eWxlKCkpOwogCi0gICAgc3dpdGNoIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSkg
eworICAgIHN3aXRjaCAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgewogICAgICAgICBjYXNlIENo
ZWNrYm94UGFydDogewogICAgICAgICAgICAgLy8gV2UgaW5mbGF0ZSB0aGUgcmVjdCBhcyBuZWVk
ZWQgdG8gYWNjb3VudCBmb3IgcGFkZGluZyBpbmNsdWRlZCBpbiB0aGUgY2VsbCB0byBhY2NvbW1v
ZGF0ZSB0aGUgY2hlY2tib3gKICAgICAgICAgICAgIC8vIHNoYWRvdyIgYW5kIHRoZSBjaGVjay4g
IFdlIGRvbid0IGNvbnNpZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91bmRzIG9mIHRoZSBjb250cm9s
IGluIFdlYktpdC4KQEAgLTMxNywyNiArMzE3LDI2IEBAIEludFJlY3QgUmVuZGVyVGhlbWVTYWZh
cmk6OmluZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUmIHNpemUsIGNv
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW50IFJlbmRlclRoZW1lU2FmYXJpOjpiYXNlbGlu
ZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2ludCBSZW5kZXJUaGVtZVNh
ZmFyaTo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0g
ICAgaWYgKCFvLT5pc0JveCgpKQorICAgIGlmICghby5pc0JveCgpKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIGlmIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQgfHwg
by0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KSB7Ci0gICAgICAgIGNvbnN0IFJl
bmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gobyk7CisgICAgaWYgKG8uc3R5bGUoKS5hcHBlYXJh
bmNlKCkgPT0gQ2hlY2tib3hQYXJ0IHx8IG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9Q
YXJ0KSB7CisgICAgICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3goJm8pOwog
ICAgICAgICByZXR1cm4gYm94LT5tYXJnaW5Ub3AoKSArIGJveC0+aGVpZ2h0KCkgLSAyOyAvLyBU
aGUgYmFzZWxpbmUgaXMgMnB4IHVwIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgY2hlY2tib3gvcmFk
aW8gaW4gQXBwS2l0LgogICAgIH0KIAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQ
b3NpdGlvbihvKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJvbFN1cHBvcnRz
VGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZVNhZmFy
aTo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewog
ICAgIGlmICghaXNFbmFibGVkKG8pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBD
aGVja2JveGVzIG9ubHkgaGF2ZSB0aW50IHdoZW4gY2hlY2tlZC4KLSAgICBpZiAoby0+c3R5bGUo
KS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0KQorICAgIGlmIChvLnN0eWxlKCkuYXBwZWFy
YW5jZSgpID09IENoZWNrYm94UGFydCkKICAgICAgICAgcmV0dXJuIGlzQ2hlY2tlZChvKTsKIAog
ICAgIC8vIEZvciBub3cgYXNzdW1lIG90aGVyIGNvbnRyb2xzIGhhdmUgdGludCBpZiBlbmFibGVk
LgpAQCAtNDE2LDExICs0MTYsMTEgQEAgTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZVNhZmFyaTo6
Y29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlKiBzdHlsZSkgY28KICAgICByZXR1
cm4gTlNNaW5pQ29udHJvbFNpemU7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50
Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50Q2hlY2tib3goY29u
c3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwogCi0gICAgTlND
b250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udCgmby0+c3R5bGUoKSk7
CisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udCgmby5z
dHlsZSgpKTsKIAogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0ZVJlY3QociwgY2hl
Y2tib3hTaXplcygpW2NvbnRyb2xTaXplXSwgY2hlY2tib3hNYXJnaW5zKGNvbnRyb2xTaXplKSk7
ICAKICAgICBwYWludFRoZW1lUGFydChTYWZhcmlUaGVtZTo6Q2hlY2tib3hQYXJ0LCBwYWludElu
Zm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGluZmxhdGVkUmVjdCwgY29udHJvbFNpemUs
IGRldGVybWluZVN0YXRlKG8pKTsKQEAgLTQ1NSwxMSArNDU1LDExIEBAIHZvaWQgUmVuZGVyVGhl
bWVTYWZhcmk6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAgICAg
c2V0U2l6ZUZyb21Gb250KHN0eWxlLCBjaGVja2JveFNpemVzKCkpOwogfQogCi1ib29sIFJlbmRl
clRoZW1lU2FmYXJpOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lU2FmYXJpOjpw
YWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgQVNTRVJUKFNhZmFyaVRoZW1lTGlicmFyeSgp
KTsKIAotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQo
Jm8tPnN0eWxlKCkpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6
ZUZvckZvbnQoJm8uc3R5bGUoKSk7CiAgCiAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBpbmZs
YXRlUmVjdChyLCByYWRpb1NpemVzKClbY29udHJvbFNpemVdLCByYWRpb01hcmdpbnMoY29udHJv
bFNpemUpKTsgICAgCiAgICAgcGFpbnRUaGVtZVBhcnQoUmFkaW9CdXR0b25QYXJ0LCBwYWludElu
Zm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGluZmxhdGVkUmVjdCwgY29udHJvbFNpemUs
IGRldGVybWluZVN0YXRlKG8pKTsKQEAgLTU3OSw3ICs1NzksNyBAQCB2b2lkIFJlbmRlclRoZW1l
U2FmYXJpOjpzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAgICBzZXRT
aXplRnJvbUZvbnQoc3R5bGUsIGJ1dHRvblNpemVzKCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1l
U2FmYXJpOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRC
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwog
CkBAIC02MTIsNyArNjEyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRCdXR0b24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50VGV4dEZpZWxkKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
Citib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmpl
Y3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewog
ICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7CiAKQEAgLTYyNCw3ICs2MjQsNyBAQCB2
b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZQogewogfQogCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpw
YWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWlu
dENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7ICAgIAogI2lmIGRlZmluZWQoU0FGQVJJ
X1RIRU1FX1ZFUlNJT04pICYmIFNBRkFSSV9USEVNRV9WRVJTSU9OID49IDEKICAgICBBU1NFUlQo
U2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwpAQCAtNjQwLDcgKzY0MCw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVTYWZhcmk6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mCiAjZW5kaWYKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRUZXh0
QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRUZXh0QXJlYShjb25zdCBS
ZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByKQogewogICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7CiAKQEAgLTY4MCw3ICs2
ODAsNyBAQCBjb25zdCBpbnQqIFJlbmRlclRoZW1lU2FmYXJpOjpwb3B1cEJ1dHRvblBhZGRpbmco
TlNDb250cm9sU2l6ZSBzaXplKSBjb25zdAogICAgIHJldHVybiBwYWRkaW5nW3NpemVdOwogfQog
Ci1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVt
ZVNhZmFyaTo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50
SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVM
aWJyYXJ5KCkpOwogCkBAIC02OTAsNyArNjkwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6
cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY28K
ICAgICBzaXplLnNldFdpZHRoKHIud2lkdGgoKSk7CiAKICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0
byBhY2NvdW50IGZvciB0aGUgc2hhZG93LgotICAgIGlmIChyLndpZHRoKCkgPj0gbWluaW11bU1l
bnVMaXN0U2l6ZSgmby0+c3R5bGUoKSkpCisgICAgaWYgKHIud2lkdGgoKSA+PSBtaW5pbXVtTWVu
dUxpc3RTaXplKCZvLnN0eWxlKCkpKQogICAgICAgICBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVj
dChpbmZsYXRlZFJlY3QsIHNpemUsIHBvcHVwQnV0dG9uTWFyZ2lucyhjb250cm9sU2l6ZSkpOwog
CiAgICAgcGFpbnRUaGVtZVBhcnQoRHJvcERvd25CdXR0b25QYXJ0LCBpbmZvLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLCBpbmZsYXRlZFJlY3QsIGNvbnRyb2xTaXplLCBkZXRlcm1pbmVTdGF0
ZShvKSk7CkBAIC03NDksNyArNzQ5LDcgQEAgc3RhdGljIHZvaWQgVHJhY2tHcmFkaWVudEludGVy
cG9sYXRlKHZvaWQqIGluZm8sIGNvbnN0IENHRmxvYXQqIGluRGF0YSwgQ0dGbG9hdCoKICAgICAg
ICAgb3V0RGF0YVtpXSA9ICgxLjBmIC0gYSkgKiBkYXJrW2ldICsgYSAqIGxpZ2h0W2ldOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRz
KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKHIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBA
IC03NTgsNyArNzU4LDcgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZW51TGlzdEJ1
dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW4KIAogICAgIHBhaW50SW5m
by5jb250ZXh0LT5zYXZlKCk7CiAKLSAgICBGbG9hdFJvdW5kZWRSZWN0IGJvdW5kID0gRmxvYXRS
b3VuZGVkUmVjdChvLT5zdHlsZSgpLmdldFJvdW5kZWRCb3JkZXJGb3IocikpOworICAgIEZsb2F0
Um91bmRlZFJlY3QgYm91bmQgPSBGbG9hdFJvdW5kZWRSZWN0KG8uc3R5bGUoKS5nZXRSb3VuZGVk
Qm9yZGVyRm9yKHIpKTsKICAgICBpbnQgcmFkaXVzID0gYm91bmQucmFkaWkoKS50b3BMZWZ0KCku
d2lkdGgoKTsKIAogICAgIENHQ29sb3JTcGFjZVJlZiBjc3BhY2UgPSBkZXZpY2VSR0JDb2xvclNw
YWNlUmVmKCk7CkBAIC04MTAsMTcgKzgxMCwxNyBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpw
YWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbgog
ICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVT
YWZhcmk6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jv
b2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBJbnRSZWN0IGJvdW5kcyA9IEludFJlY3QocmVjdC54
KCkgKyByZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVjdC55KCkgKyByZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJUb3BXaWR0
aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LndpZHRoKCkgLSByZW5kZXJl
ci0+c3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSAtIHJlbmRlcmVyLT5zdHlsZSgpLmJvcmRlclJp
Z2h0V2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5oZWlnaHQoKSAt
IHJlbmRlcmVyLT5zdHlsZSgpLmJvcmRlclRvcFdpZHRoKCkgLSByZW5kZXJlci0+c3R5bGUoKS5i
b3JkZXJCb3R0b21XaWR0aCgpKTsKKyAgICBJbnRSZWN0IGJvdW5kcyA9IEludFJlY3QocmVjdC54
KCkgKyByZW5kZXJlci5zdHlsZSgpLmJvcmRlckxlZnRXaWR0aCgpLAorICAgICAgICByZWN0Lnko
KSArIHJlbmRlcmVyLnN0eWxlKCkuYm9yZGVyVG9wV2lkdGgoKSwKKyAgICAgICAgcmVjdC53aWR0
aCgpIC0gcmVuZGVyZXIuc3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSAtIHJlbmRlcmVyLnN0eWxl
KCkuYm9yZGVyUmlnaHRXaWR0aCgpLAorICAgICAgICByZWN0LmhlaWdodCgpIC0gcmVuZGVyZXIu
c3R5bGUoKS5ib3JkZXJUb3BXaWR0aCgpIC0gcmVuZGVyZXIuc3R5bGUoKS5ib3JkZXJCb3R0b21X
aWR0aCgpKTsKICAgICAvLyBEcmF3IHRoZSBncmFkaWVudHMgdG8gZ2l2ZSB0aGUgc3R5bGVkIHBv
cHVwIG1lbnUgYSBidXR0b24gYXBwZWFyYW5jZQogICAgIHBhaW50TWVudUxpc3RCdXR0b25HcmFk
aWVudHMocmVuZGVyZXIsIHBhaW50SW5mbywgYm91bmRzKTsKIAogICAgIC8vIFNpbmNlIHdlIGFj
dHVhbGx5IGtub3cgdGhlIHNpemUgb2YgdGhlIGNvbnRyb2wgaGVyZSwgd2UgcmVzdHJpY3QgdGhl
IGZvbnQgc2NhbGUgdG8gbWFrZSBzdXJlIHRoZSBhcnJvdyB3aWxsIGZpdCB2ZXJ0aWNhbGx5IGlu
IHRoZSBib3VuZHMKLSAgICBmbG9hdCBmb250U2NhbGUgPSBtaW4ocmVuZGVyZXItPnN0eWxlKCku
Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZSwgYm91bmRzLmhlaWdodCgpIC8gYmFzZUFycm93SGVp
Z2h0KTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBtaW4ocmVuZGVyZXIuc3R5bGUoKS5mb250U2l6
ZSgpIC8gYmFzZUZvbnRTaXplLCBib3VuZHMuaGVpZ2h0KCkgLyBiYXNlQXJyb3dIZWlnaHQpOwog
ICAgIGZsb2F0IGNlbnRlclkgPSBib3VuZHMueSgpICsgYm91bmRzLmhlaWdodCgpIC8gMi4wZjsK
ICAgICBmbG9hdCBhcnJvd0hlaWdodCA9IGJhc2VBcnJvd0hlaWdodCAqIGZvbnRTY2FsZTsKICAg
ICBmbG9hdCBhcnJvd1dpZHRoID0gYmFzZUFycm93V2lkdGggKiBmb250U2NhbGU7CkBAIC04MzEs
NyArODMxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZW51TGlzdEJ1dHRvbkRl
Y29yYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGMKIAogICAgIHBhaW50SW5mby5jb250
ZXh0LT5zYXZlKCk7CiAKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKHJlbmRl
cmVyLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihy
ZW5kZXJlci5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwg
Q29sb3JTcGFjZURldmljZVJHQik7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNv
bG9yKE5vU3Ryb2tlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIAogICAgIEZsb2F0UG9pbnQgYXJy
b3dbM107CkBAIC05NTYsMjEgKzk1NiwxNSBAQCBpbnQgUmVuZGVyVGhlbWVTYWZhcmk6Om1pbmlt
dW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogY29uc3QgaW50IHRyYWNr
V2lkdGggPSA1OwogY29uc3QgaW50IHRyYWNrUmFkaXVzID0gMjsKIAotYm9vbCBSZW5kZXJUaGVt
ZVNhZmFyaTo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6
cGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIEludFNpemUgcmFkaXVzKHRyYWNr
UmFkaXVzLCB0cmFja1JhZGl1cyk7CiAgICAgRmxvYXRSb3VuZGVkUmVjdCBib3VuZHMociwgcmFk
aXVzLCByYWRpdXMsIHJhZGl1cywgcmFkaXVzKTsKIAotICAgIGlmIChvLT5zdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQpCi0gICAgICAgIGJvdW5kcy5zZXRSZWN0
KEludFJlY3Qoci54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci55KCkgKyBy
LmhlaWdodCgpIC8gMiAtIHRyYWNrV2lkdGggLyAyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHIud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja1dp
ZHRoKSk7Ci0gICAgZWxzZSBpZiAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVy
dGljYWxQYXJ0KQotICAgICAgICBib3VuZHMuc2V0UmVjdChJbnRSZWN0KHIueCgpICsgci53aWR0
aCgpIC8gMiAtIHRyYWNrV2lkdGggLyAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHIueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrV2lkdGgsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuaGVpZ2h0KCkpKTsKKyAgICBpZiAoby5zdHls
ZSgpLmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQpCisgICAgICAgIGJvdW5k
cy5zZXRSZWN0KEludFJlY3Qoci54KCksIHIueSgpICsgci5oZWlnaHQoKSAvIDIgLSB0cmFja1dp
ZHRoIC8gMiwgci53aWR0aCgpLCB0cmFja1dpZHRoKSk7CisgICAgZWxzZSBpZiAoby5zdHlsZSgp
LmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCisgICAgICAgIGJvdW5kcy5zZXRS
ZWN0KEludFJlY3Qoci54KCkgKyByLndpZHRoKCkgLyAyIC0gdHJhY2tXaWR0aCAvIDIsIHIueSgp
LCB0cmFja1dpZHRoLCByLmhlaWdodCgpKSk7CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDR0NvbG9yU3BhY2VS
ZWYgY3NwYWNlID0gZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpOwpAQCAtOTgxLDcgKzk3NSw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50CiAgICAgc3RydWN0IENHRnVuY3Rpb25DYWxsYmFja3Mg
bWFpbkNhbGxiYWNrcyA9IHsgMCwgVHJhY2tHcmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07CiAg
ICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IG1haW5GdW5jdGlvbiA9IGFkb3B0Q0YoQ0dGdW5j
dGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmbWFpbkNhbGxiYWNrcykpOwogICAg
IFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1haW5TaGFkaW5nOwotICAgIGlmIChvLT5zdHlsZSgp
LmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCisgICAgaWYgKG8uc3R5bGUoKS5h
cHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQogICAgICAgICBtYWluU2hhZGluZyA9
IGFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3VuZHMu
cmVjdCgpLngoKSwgIGJvdW5kcy5yZWN0KCkubWF4WSgpKSwgQ0dQb2ludE1ha2UoYm91bmRzLnJl
Y3QoKS5tYXhYKCksIGJvdW5kcy5yZWN0KCkubWF4WSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBm
YWxzZSwgZmFsc2UpKTsKICAgICBlbHNlCiAgICAgICAgIG1haW5TaGFkaW5nID0gYWRvcHRDRihD
R1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdW5kcy5yZWN0KCkueCgp
LCAgYm91bmRzLnJlY3QoKS55KCkpLCBDR1BvaW50TWFrZShib3VuZHMucmVjdCgpLngoKSwgYm91
bmRzLnJlY3QoKS5tYXhZKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwpA
QCAtMTAwMSw3ICs5OTUsNyBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTbGlkZXJU
aHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbgogCiBjb25zdCBmbG9h
dCB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgPSAwLjFmOwogCi1ib29sIFJlbmRlclRoZW1l
U2FmYXJpOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lU2FmYXJpOjpw
YWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgQVNTRVJUKFNhZmFyaVRoZW1lTGli
cmFyeSgpKTsKICAgICBwYWludFRoZW1lUGFydChTbGlkZXJUaHVtYlBhcnQsIHBhaW50SW5mby5j
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgTlNTbWFsbENvbnRyb2xTaXplLCBkZXRlcm1p
bmVTdGF0ZShvKSk7CkBAIC0xMDIzLDcgKzEwMTcsNyBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJp
OjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29u
cwogI2VuZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGQo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVu
ZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwogCkBAIC0xMDc2LDEzICsx
MDcwLDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUo
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuCiAgICAgc2V0Rm9udEZyb21Db250cm9s
U2l6ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgY29udHJvbFNpemUpOwogfQogCi1ib29sIFJlbmRl
clRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmKQorYm9vbCBSZW5k
ZXJUaGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJP
YmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JikKIHsK
ICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwogCi0gICAgTm9kZSogaW5wdXQgPSBv
LT5ub2RlKCktPnNoYWRvd0hvc3QoKTsKKyAgICBOb2RlKiBpbnB1dCA9IG8ubm9kZSgpLT5zaGFk
b3dIb3N0KCk7CiAgICAgaWYgKCFpbnB1dCkKLSAgICAgICAgaW5wdXQgPSBvLT5ub2RlKCk7Cisg
ICAgICAgIGlucHV0ID0gby5ub2RlKCk7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGlu
cHV0LT5yZW5kZXJlcigpOwogICAgIEFTU0VSVChyZW5kZXJlcik7CiAKQEAgLTExMTksNyArMTEx
Myw3IEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlv
blBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuCiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5n
dGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6
cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKQorYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTZWFy
Y2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTExMzEsMTMg
KzExMjUsMTMgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmUKICAgICBzdHlsZS0+c2V0SGVpZ2h0
KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lU2Fm
YXJpOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmKQorYm9vbCBSZW5k
ZXJUaGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25z
dCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwogCi0gICAgTm9kZSog
aW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0hvc3QoKTsKKyAgICBOb2RlKiBpbnB1dCA9IG8ubm9k
ZSgpLT5zaGFkb3dIb3N0KCk7CiAgICAgaWYgKCFpbnB1dCkKLSAgICAgICAgaW5wdXQgPSBvLT5u
b2RlKCk7CisgICAgICAgIGlucHV0ID0gby5ub2RlKCk7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IGlucHV0LT5yZW5kZXJlcigpOwogICAgIEFTU0VSVChyZW5kZXJlcik7CiAKQEAgLTEx
NTUsMTMgKzExNDksMTMgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmQKICAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JikKK2Jvb2wgUmVuZGVy
VGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9i
amVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmKQogewog
ICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7CiAKLSAgICBOb2RlKiBpbnB1dCA9IG8t
Pm5vZGUoKS0+c2hhZG93SG9zdCgpOworICAgIE5vZGUqIGlucHV0ID0gby5ub2RlKCktPnNoYWRv
d0hvc3QoKTsKICAgICBpZiAoIWlucHV0KQotICAgICAgICBpbnB1dCA9IG8tPm5vZGUoKTsKKyAg
ICAgICAgaW5wdXQgPSBvLm5vZGUoKTsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaW5w
dXQtPnJlbmRlcmVyKCk7CiAgICAgQVNTRVJUKHJlbmRlcmVyKTsKIApAQCAtMTIxNiwxNCArMTIx
MCwxNCBAQCBJbnRTaXplIFJlbmRlclRoZW1lU2FmYXJpOjptZXRlclNpemVGb3JCb3VuZHMoY29u
c3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JgogICAgIHJldHVybiBib3VuZHMuc2l6ZSgp
OwogfQogCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1ldGVyKFJlbmRlck9iamVjdCog
cmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2Jq
ZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogewogICAgIC8vIE5PVEU6IFRoaXMgcm91dGluZSBpcyBmb3IgdGVzdGluZyBv
bmx5LiBJdCBzaG91bGQgYmUgZmxlc2hlZCBvdXQgd2l0aCBhIHJlYWwgQ0ctYmFzZWQgaW1wbGVt
ZW50YXRpb24uCiAgICAgLy8gUmlnaHQgbm93IGl0IHVzZXMgYSBzbGlkZXIsIHdpdGggdGhlIHRo
dW1iIHBvc2l0aW9uZWQgYXQgdGhlIG1ldGVyIHBvaW50LgogICAgIGlmICghcmVuZGVyT2JqZWN0
LT5pc01ldGVyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSFRNTE1ldGVyRWxlbWVu
dCogZWxlbWVudCA9IHRvUmVuZGVyTWV0ZXIocmVuZGVyT2JqZWN0KS0+bWV0ZXJFbGVtZW50KCk7
CisgICAgSFRNTE1ldGVyRWxlbWVudCogZWxlbWVudCA9IHRvUmVuZGVyTWV0ZXIoJnJlbmRlck9i
amVjdCktPm1ldGVyRWxlbWVudCgpOwogCiAgICAgaW50IHJlbWFpbmluZyA9IHN0YXRpY19jYXN0
PGludD4oKDEuMCAtIGVsZW1lbnQtPnZhbHVlUmF0aW8oKSkgKiBzdGF0aWNfY2FzdDxkb3VibGU+
KHJlY3Quc2l6ZSgpLndpZHRoKCkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVTYWZhcmkuaAppbmRleCAyOTBjODJjMzE2ZjkzNTE2MjZmZjIwOTA3ZmNkZWE3NDUw
MmIxODUyLi4xZTg5ZmQ5ZjVjYzgyOTgzN2E2NTBhYjE5ZmIwZWE2M2M2MGE2OTMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuaApAQCAtNTIsMTUgKzUy
LDE1IEBAIHB1YmxpYzoKICAgICAvLyBBIG1ldGhvZCB0byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBv
c2l0aW9uIGZvciBhICJsZWFmIiBjb250cm9sLiAgVGhpcyB3aWxsIG9ubHkgYmUgdXNlZCBpZiBh
IGJhc2VsaW5lCiAgICAgLy8gcG9zaXRpb24gY2Fubm90IGJlIGRldGVybWluZWQgYnkgZXhhbWlu
aW5nIGNoaWxkIGNvbnRlbnQuIENoZWNrYm94ZXMgYW5kIHJhZGlvIGJ1dHRvbnMgYXJlIGV4YW1w
bGVzIG9mCiAgICAgLy8gY29udHJvbHMgdGhhdCBuZWVkIHRvIGRvIHRoaXMuCi0gICAgdmlydHVh
bCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0Owog
CiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQg
d2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCi0gICAgdmlydHVhbCBib29sIGNvbnRy
b2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKIAog
ICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMg
c3VwcG9ydGVkIGF0IGFsbC4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWlu
dFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QmLCBJbnRSZWN0Jik7CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9y
ZGVyRGF0YSYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxsTGF5
ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKQEAgLTg2LDQ3ICs4Niw0
NyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICAvLyBNZXRob2RzIGZvciBlYWNoIGFwcGVh
cmFuY2UgdmFsdWUuCi0gICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBw
YWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxl
KikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBXZWJDb3JlOjpFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBh
aW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0
b25TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0
RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRl
eHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0
QXJlYShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVh
bCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBh
aW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0
aW9uUGFydChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24o
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
IAotICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgdmlydHVhbCBTdHJp
bmcgbWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKSBvdmVycmlkZTsKQEAgLTEzNyw3ICsxMzcsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25z
dCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNNZXRlcihDb250cm9sUGFydCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIGFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1ldGVy
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KQEAgLTE3Miw3ICsxNzIsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IEludFNp
emUqIHBvcHVwQnV0dG9uU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBpbnQqIHBvcHVwQnV0dG9u
TWFyZ2lucyhOU0NvbnRyb2xTaXplKSBjb25zdDsKICAgICBjb25zdCBpbnQqIHBvcHVwQnV0dG9u
UGFkZGluZyhOU0NvbnRyb2xTaXplKSBjb25zdDsKLSAgICB2b2lkIHBhaW50TWVudUxpc3RCdXR0
b25HcmFkaWVudHMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgIHZvaWQgcGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgY29uc3QgSW50
U2l6ZSogbWVudUxpc3RTaXplcygpIGNvbnN0OwogCiAgICAgY29uc3QgSW50U2l6ZSogc2VhcmNo
RmllbGRTaXplcygpIGNvbnN0OwpAQCAtMTgwLDcgKzE4MCw3IEBAIHByaXZhdGU6CiAgICAgY29u
c3QgSW50U2l6ZSogcmVzdWx0c0J1dHRvblNpemVzKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTZWFy
Y2hGaWVsZFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKIAotICAgIFRoZW1lQ29udHJvbFN0YXRl
IGRldGVybWluZVN0YXRlKFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIFRoZW1lQ29udHJvbFN0
YXRlIGRldGVybWluZVN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OwogCiAgICAgU3Ry
aW5nIG1fbWVkaWFDb250cm9sc1NjcmlwdDsKICAgICBTdHJpbmcgbV9tZWRpYUNvbnRyb2xzU3R5
bGVTaGVldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCmlu
ZGV4IDZlMDViNDlhN2NmNTcwODU3NmFjMjVjNjY4N2Q2M2NmOGQwMDhhMTkuLjFiOTNlMDJiNzRi
MDVmZDg3OGMwNWE3MGJjN2Y3YmVmZGNjOTE4ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lV2luLmNwcApAQCAtNDM0LDEwICs0MzQsMTAgQEAgYm9vbCBSZW5kZXJU
aGVtZVdpbjo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAogICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkpOwogfQogCi11
bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lQ2xhc3NpY1N0YXRlKFJlbmRlck9iamVj
dCogbywgQ29udHJvbFN1YlBhcnQgc3ViUGFydCkKK3Vuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpk
ZXRlcm1pbmVDbGFzc2ljU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBDb250cm9sU3ViUGFy
dCBzdWJQYXJ0KQogewogICAgIHVuc2lnbmVkIHN0YXRlID0gMDsKLSAgICBzd2l0Y2ggKG8tPnN0
eWxlKCkuYXBwZWFyYW5jZSgpKSB7CisgICAgc3dpdGNoIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgp
KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CiAgICAgICAgIGNhc2UgQnV0dG9uUGFy
dDoKICAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKQEAgLTQ0OSw3ICs0NDksNyBAQCB1
bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lQ2xhc3NpY1N0YXRlKFJlbmRlck9iamVj
dCogbywgQ29udHJvbFN1YlBhcnQgcwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
UmFkaW9QYXJ0OgogICAgICAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgICAgIHN0YXRl
ID0gKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkgPyBERkNTX0JVVFRPTlJB
RElPIDogREZDU19CVVRUT05DSEVDSzsKKyAgICAgICAgICAgIHN0YXRlID0gKG8uc3R5bGUoKS5h
cHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KSA/IERGQ1NfQlVUVE9OUkFESU8gOiBERkNTX0JVVFRP
TkNIRUNLOwogICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZChvKSkKICAgICAgICAgICAgICAgICBz
dGF0ZSB8PSBERkNTX0NIRUNLRUQ7CiAgICAgICAgICAgICBpZiAoIWlzRW5hYmxlZChvKSkKQEAg
LTQ4MSwxMCArNDgxLDEwIEBAIHVuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVDbGFz
c2ljU3RhdGUoUmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3ViUGFydCBzCiAgICAgcmV0dXJuIHN0
YXRlOwogfQogCi11bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lU3RhdGUoUmVuZGVy
T2JqZWN0KiBvKQordW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVybWluZVN0YXRlKGNvbnN0
IFJlbmRlck9iamVjdCYgbykKIHsKICAgICB1bnNpZ25lZCByZXN1bHQgPSBUU19OT1JNQUw7Ci0g
ICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpOworICAg
IENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBvLnN0eWxlKCkuYXBwZWFyYW5jZSgpOwogICAgIGlm
ICghaXNFbmFibGVkKG8pKQogICAgICAgICByZXN1bHQgPSBUU19ESVNBQkxFRDsKICAgICBlbHNl
IGlmIChpc1JlYWRPbmx5Q29udHJvbChvKSAmJiAoVGV4dEZpZWxkUGFydCA9PSBhcHBlYXJhbmNl
IHx8IFRleHRBcmVhUGFydCA9PSBhcHBlYXJhbmNlIHx8IFNlYXJjaEZpZWxkUGFydCA9PSBhcHBl
YXJhbmNlKSkKQEAgLTUwMiwxMiArNTAyLDEyIEBAIHVuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpk
ZXRlcm1pbmVTdGF0ZShSZW5kZXJPYmplY3QqIG8pCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVybWluZVNsaWRlclRodW1iU3RhdGUoUmVuZGVy
T2JqZWN0KiBvKQordW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVybWluZVNsaWRlclRodW1i
U3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvKQogewogICAgIHVuc2lnbmVkIHJlc3VsdCA9IFRV
U19OT1JNQUw7CiAgICAgaWYgKCFpc0VuYWJsZWQobykpCiAgICAgICAgIHJlc3VsdCA9IFRVU19E
SVNBQkxFRDsKLSAgICBlbHNlIGlmIChzdXBwb3J0c0ZvY3VzKG8tPnN0eWxlKCkuYXBwZWFyYW5j
ZSgpKSAmJiBpc0ZvY3VzZWQobykpCisgICAgZWxzZSBpZiAoc3VwcG9ydHNGb2N1cyhvLnN0eWxl
KCkuYXBwZWFyYW5jZSgpKSAmJiBpc0ZvY3VzZWQobykpCiAgICAgICAgIHJlc3VsdCA9IFRVU19G
T0NVU0VEOwogICAgIGVsc2UgaWYgKGlzUHJlc3NlZChvKSkKICAgICAgICAgcmVzdWx0ID0gVFVT
X1BSRVNTRUQ7CkBAIC01MTYsMTQgKzUxNiwxNCBAQCB1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6
ZGV0ZXJtaW5lU2xpZGVyVGh1bWJTdGF0ZShSZW5kZXJPYmplY3QqIG8pCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotdW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVybWluZUJ1dHRvblN0YXRl
KFJlbmRlck9iamVjdCogbykKK3Vuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVCdXR0
b25TdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8pCiB7CiAgICAgdW5zaWduZWQgcmVzdWx0ID0g
UEJTX05PUk1BTDsKICAgICBpZiAoIWlzRW5hYmxlZChvKSkKICAgICAgICAgcmVzdWx0ID0gUEJT
X0RJU0FCTEVEOwogICAgIGVsc2UgaWYgKGlzUHJlc3NlZChvKSkKICAgICAgICAgcmVzdWx0ID0g
UEJTX1BSRVNTRUQ7Ci0gICAgZWxzZSBpZiAoc3VwcG9ydHNGb2N1cyhvLT5zdHlsZSgpLmFwcGVh
cmFuY2UoKSkgJiYgaXNGb2N1c2VkKG8pKQorICAgIGVsc2UgaWYgKHN1cHBvcnRzRm9jdXMoby5z
dHlsZSgpLmFwcGVhcmFuY2UoKSkgJiYgaXNGb2N1c2VkKG8pKQogICAgICAgICByZXN1bHQgPSBQ
QlNfREVGQVVMVEVEOwogICAgIGVsc2UgaWYgKGlzSG92ZXJlZChvKSkKICAgICAgICAgcmVzdWx0
ID0gUEJTX0hPVDsKQEAgLTUzMiw3ICs1MzIsNyBAQCB1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6
ZGV0ZXJtaW5lQnV0dG9uU3RhdGUoUmVuZGVyT2JqZWN0KiBvKQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXVuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVTcGluQnV0dG9uU3RhdGUo
UmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3ViUGFydCBzdWJQYXJ0KQordW5zaWduZWQgUmVuZGVy
VGhlbWVXaW46OmRldGVybWluZVNwaW5CdXR0b25TdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8s
IENvbnRyb2xTdWJQYXJ0IHN1YlBhcnQpCiB7CiAgICAgYm9vbCBpc1VwQnV0dG9uID0gc3ViUGFy
dCA9PSBTcGluQnV0dG9uVXA7CiAgICAgdW5zaWduZWQgcmVzdWx0ID0gaXNVcEJ1dHRvbiA/IFVQ
U19OT1JNQUwgOiBETlNfTk9STUFMOwpAQCAtNTQ1LDEwICs1NDUsMTAgQEAgdW5zaWduZWQgUmVu
ZGVyVGhlbWVXaW46OmRldGVybWluZVNwaW5CdXR0b25TdGF0ZShSZW5kZXJPYmplY3QqIG8sIENv
bnRyb2xTdWJQYXIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1UaGVtZURhdGEgUmVuZGVyVGhl
bWVXaW46OmdldENsYXNzaWNUaGVtZURhdGEoUmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3ViUGFy
dCBzdWJQYXJ0KQorVGhlbWVEYXRhIFJlbmRlclRoZW1lV2luOjpnZXRDbGFzc2ljVGhlbWVEYXRh
KGNvbnN0IFJlbmRlck9iamVjdCYgbywgQ29udHJvbFN1YlBhcnQgc3ViUGFydCkKIHsKICAgICBU
aGVtZURhdGEgcmVzdWx0OwotICAgIHN3aXRjaCAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkpIHsK
KyAgICBzd2l0Y2ggKG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkpIHsKICAgICAgICAgY2FzZSBQdXNo
QnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgogICAgICAgICBjYXNlIERlZmF1
bHRCdXR0b25QYXJ0OgpAQCAtNTk3LDEzICs1OTcsMTMgQEAgVGhlbWVEYXRhIFJlbmRlclRoZW1l
V2luOjpnZXRDbGFzc2ljVGhlbWVEYXRhKFJlbmRlck9iamVjdCogbywgQ29udHJvbFN1YlBhcnQg
c3UKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1UaGVtZURhdGEgUmVuZGVyVGhlbWVXaW46Omdl
dFRoZW1lRGF0YShSZW5kZXJPYmplY3QqIG8sIENvbnRyb2xTdWJQYXJ0IHN1YlBhcnQpCitUaGVt
ZURhdGEgUmVuZGVyVGhlbWVXaW46OmdldFRoZW1lRGF0YShjb25zdCBSZW5kZXJPYmplY3QmIG8s
IENvbnRyb2xTdWJQYXJ0IHN1YlBhcnQpCiB7CiAgICAgaWYgKCFoYXZlVGhlbWUpCiAgICAgICAg
IHJldHVybiBnZXRDbGFzc2ljVGhlbWVEYXRhKG8sIHN1YlBhcnQpOwogCiAgICAgVGhlbWVEYXRh
IHJlc3VsdDsKLSAgICBzd2l0Y2ggKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpKSB7CisgICAgc3dp
dGNoIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpKSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBh
cnQ6CiAgICAgICAgIGNhc2UgQnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9u
UGFydDoKQEAgLTYxOCw3ICs2MTgsNyBAQCBUaGVtZURhdGEgUmVuZGVyVGhlbWVXaW46OmdldFRo
ZW1lRGF0YShSZW5kZXJPYmplY3QqIG8sIENvbnRyb2xTdWJQYXJ0IHN1YlBhcnQpCiAgICAgICAg
IGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OiB7CiAgICAgICAgICAgICBjb25zdCBib29sIGlzVmlz
dGFPckxhdGVyID0gKHdpbmRvd3NWZXJzaW9uKCkgPj0gV2luZG93c1Zpc3RhKTsKICAgICAgICAg
ICAgIHJlc3VsdC5tX3BhcnQgPSBpc1Zpc3RhT3JMYXRlciA/IENQX0RST1BET1dOQlVUVE9OUklH
SFQgOiBDUF9EUk9QRE9XTkJVVFRPTjsKLSAgICAgICAgICAgIGlmIChpc1Zpc3RhT3JMYXRlciAm
JiBvLT5mcmFtZSgpLnNldHRpbmdzKCkuYXBwbGljYXRpb25DaHJvbWVNb2RlKCkpIHsKKyAgICAg
ICAgICAgIGlmIChpc1Zpc3RhT3JMYXRlciAmJiBvLmZyYW1lKCkuc2V0dGluZ3MoKS5hcHBsaWNh
dGlvbkNocm9tZU1vZGUoKSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSAicmVhZG9ubHkiIGxv
b2sgd2UgdXNlIGluIGFwcGxpY2F0aW9uIGNocm9tZSBtb2RlCiAgICAgICAgICAgICAgICAgLy8g
b25seSB1c2VzIGEgIm5vcm1hbCIgbG9vayBmb3IgdGhlIGRyb3AgZG93biBidXR0b24uCiAgICAg
ICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBUU19OT1JNQUw7CkBAIC02NjUsNyArNjY1LDcg
QEAgVGhlbWVEYXRhIFJlbmRlclRoZW1lV2luOjpnZXRUaGVtZURhdGEoUmVuZGVyT2JqZWN0KiBv
LCBDb250cm9sU3ViUGFydCBzdWJQYXJ0KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRp
YyB2b2lkIGRyYXdDb250cm9sKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyT2JqZWN0
KiBvLCBIQU5ETEUgdGhlbWUsIGNvbnN0IFRoZW1lRGF0YSYgdGhlbWVEYXRhLCBjb25zdCBJbnRS
ZWN0JiByKQorc3RhdGljIHZvaWQgZHJhd0NvbnRyb2woR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBSZW5kZXJPYmplY3QmIG8sIEhBTkRMRSB0aGVtZSwgY29uc3QgVGhlbWVEYXRhJiB0
aGVtZURhdGEsIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgYm9vbCBhbHBoYUJsZW5kID0gZmFs
c2U7CiAgICAgaWYgKHRoZW1lKQpAQCAtNjg1LDEwICs2ODUsMTAgQEAgc3RhdGljIHZvaWQgZHJh
d0NvbnRyb2woR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJPYmplY3QqIG8sIEhBTkRM
RSB0aGVtZSwKICAgICAgICAgfSBlbHNlIGlmICh0aGVtZURhdGEubV9wYXJ0ID09IFRLUF9UUkFD
SyB8fCB0aGVtZURhdGEubV9wYXJ0ID09IFRLUF9UUkFDS1ZFUlQpIHsKICAgICAgICAgICAgIDo6
RHJhd0VkZ2UoaGRjLCAmd2lkZ2V0UmVjdCwgRURHRV9TVU5LRU4sIEJGX1JFQ1QgfCBCRl9BREpV
U1QpOwogICAgICAgICAgICAgOjpGaWxsUmVjdChoZGMsICZ3aWRnZXRSZWN0LCAoSEJSVVNIKUdl
dFN0b2NrT2JqZWN0KEdSQVlfQlJVU0gpKTsKLSAgICAgICAgfSBlbHNlIGlmICgoby0+c3R5bGUo
KS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fAotICAgICAgICAg
ICAgICAgICAgICBvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2Fs
UGFydCkgJiYgCi0gICAgICAgICAgICAgICAgICAgKHRoZW1lRGF0YS5tX3BhcnQgPT0gVEtQX1RI
VU1CQk9UVE9NIHx8IHRoZW1lRGF0YS5tX3BhcnQgPT0gVEtQX1RIVU1CVE9QIHx8IAotICAgICAg
ICAgICAgICAgICAgICB0aGVtZURhdGEubV9wYXJ0ID09IFRLUF9USFVNQkxFRlQgfHwgdGhlbWVE
YXRhLm1fcGFydCA9PSBUS1BfVEhVTUJSSUdIVCkpIHsKKyAgICAgICAgfSBlbHNlIGlmICgoby5z
dHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0CisgICAgICAg
IHx8IG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCisg
ICAgICAgICYmICh0aGVtZURhdGEubV9wYXJ0ID09IFRLUF9USFVNQkJPVFRPTSB8fCB0aGVtZURh
dGEubV9wYXJ0ID09IFRLUF9USFVNQlRPUAorICAgICAgICB8fCB0aGVtZURhdGEubV9wYXJ0ID09
IFRLUF9USFVNQkxFRlQgfHwgdGhlbWVEYXRhLm1fcGFydCA9PSBUS1BfVEhVTUJSSUdIVCkpIHsK
ICAgICAgICAgICAgIDo6RHJhd0VkZ2UoaGRjLCAmd2lkZ2V0UmVjdCwgRURHRV9SQUlTRUQsIEJG
X1JFQ1QgfCBCRl9TT0ZUIHwgQkZfTUlERExFIHwgQkZfQURKVVNUKTsKICAgICAgICAgICAgIGlm
ICh0aGVtZURhdGEubV9zdGF0ZSA9PSBUVVNfRElTQUJMRUQpIHsKICAgICAgICAgICAgICAgICBz
dGF0aWMgV09SRCBwYXR0ZXJuQml0c1s4XSA9IHsweGFhLCAweDU1LCAweGFhLCAweDU1LCAweGFh
LCAweDU1LCAweGFhLCAweDU1fTsKQEAgLTcxMCw3ICs3MTAsNyBAQCBzdGF0aWMgdm9pZCBkcmF3
Q29udHJvbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJlbmRlck9iamVjdCogbywgSEFORExF
IHRoZW1lLAogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8g
UHVzaCBidXR0b25zLCBidXR0b25zLCBjaGVja2JveGVzIGFuZCByYWRpb3MsIGFuZCB0aGUgZHJv
cGRvd24gYXJyb3cgaW4gbWVudWxpc3RzLgotICAgICAgICAgICAgaWYgKG8tPnN0eWxlKCkuYXBw
ZWFyYW5jZSgpID09IERlZmF1bHRCdXR0b25QYXJ0KSB7CisgICAgICAgICAgICBpZiAoby5zdHls
ZSgpLmFwcGVhcmFuY2UoKSA9PSBEZWZhdWx0QnV0dG9uUGFydCkgewogICAgICAgICAgICAgICAg
IEhCUlVTSCBicnVzaCA9IDo6R2V0U3lzQ29sb3JCcnVzaChDT0xPUl8zRERLU0hBRE9XKTsKICAg
ICAgICAgICAgICAgICA6OkZyYW1lUmVjdChoZGMsICZ3aWRnZXRSZWN0LCBicnVzaCk7CiAgICAg
ICAgICAgICAgICAgOjpJbmZsYXRlUmVjdCgmd2lkZ2V0UmVjdCwgLTEsIC0xKTsKQEAgLTcyNCw3
ICs3MjQsNyBAQCBzdGF0aWMgdm9pZCBkcmF3Q29udHJvbChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIFJlbmRlck9iamVjdCogbywgSEFORExFIHRoZW1lLAogICAgICAgICBESUJQaXhlbERhdGE6
OnNldFJHQkFCaXRtYXBBbHBoYSh3aW5kb3dzQ29udGV4dC5oZGMoKSwgciwgMjU1KTsKIH0KIAot
Ym9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lV2luOjpwYWlu
dEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcikKIHsgIAogICAgIGRyYXdDb250cm9sKGkuY29udGV4dCwgIG8sIGJ1dHRvblRo
ZW1lKCksIGdldFRoZW1lRGF0YShvKSwgcik7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzM5LDcg
KzczOSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlCiAgICAgc3R5bGUtPnNldE1pbldpZHRo
KExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRJ
bm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lV2luOjpwYWludElubmVyU3BpbkJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cikKIHsKICAgICAvLyBXZSBzcGxpdCB0aGUgc3BlY2lmaWVkIHJlY3RhbmdsZSBpbnRvIHR3byB2
ZXJ0aWNhbGx5LiBXZSBjYW4ndCBkcmF3IGEKICAgICAvLyBzcGluIGJ1dHRvbiBvZiB3aGljaCBo
ZWlnaHQgaXMgbGVzcyB0aGFuIDJweC4KQEAgLTc3MSwxOSArNzcxLDE5IEBAIHZvaWQgUmVuZGVy
VGhlbWVXaW46OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAgICAg
ICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKDEzLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRl
clRoZW1lV2luOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50VGV4dEZp
ZWxkKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByKQogewogICAgIGRyYXdDb250cm9sKGkuY29udGV4dCwgIG8sIHRleHRGaWVsZFRoZW1l
KCksIGdldFRoZW1lRGF0YShvKSwgcik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJl
bmRlclRoZW1lV2luOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJU
aGVtZVdpbjo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBIQU5E
TEUgdGhlbWU7CiAgICAgaW50IHBhcnQ7CiAgICAgaWYgKGhhdmVUaGVtZSAmJiAod2luZG93c1Zl
cnNpb24oKSA+PSBXaW5kb3dzVmlzdGEpKSB7CiAgICAgICAgIHRoZW1lID0gbWVudUxpc3RUaGVt
ZSgpOwotICAgICAgICBpZiAocmVuZGVyZXItPmZyYW1lKCkuc2V0dGluZ3MoKS5hcHBsaWNhdGlv
bkNocm9tZU1vZGUoKSkKKyAgICAgICAgaWYgKHJlbmRlcmVyLmZyYW1lKCkuc2V0dGluZ3MoKS5h
cHBsaWNhdGlvbkNocm9tZU1vZGUoKSkKICAgICAgICAgICAgIHBhcnQgPSBDUF9SRUFET05MWTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgcGFydCA9IENQX0JPUkRFUjsKQEAgLTc5Miw3ICs3
OTIsNyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbgogICAgICAgICBwYXJ0ID0gVEZQX1RFWFRG
SUVMRDsKICAgICB9CiAKLSAgICBkcmF3Q29udHJvbChwYWludEluZm8uY29udGV4dCwgIHJlbmRl
cmVyLCB0aGVtZSwgVGhlbWVEYXRhKHBhcnQsIGRldGVybWluZVN0YXRlKHJlbmRlcmVyKSksIHJl
Y3QpOworICAgIGRyYXdDb250cm9sKHBhaW50SW5mby5jb250ZXh0LCByZW5kZXJlciwgdGhlbWUs
IFRoZW1lRGF0YShwYXJ0LCBkZXRlcm1pbmVTdGF0ZShyZW5kZXJlcikpLCByZWN0KTsKICAgICAK
ICAgICByZXR1cm4gcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKHJlbmRlcmVyLCBwYWlu
dEluZm8sIHJlY3QpOwogfQpAQCAtODM0LDcgKzgzNCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVXaW46
OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
UmVuCiAgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZVdpbjo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9v
bCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJl
bmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogICAgIC8vIEZJWE1FOiBEb24ndCBtYWtlIGhhcmRjb2RlZCBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgdGhpY2tuZXNzIG9mIHRoZSB0ZXh0ZmllbGQgYm9yZGVyLgogICAg
IGludCBib3JkZXJUaGlja25lc3MgPSBoYXZlVGhlbWUgPyAxIDogMjsKQEAgLTg0Myw3ICs4NDMs
NyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMo
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29ucwogICAgIC8vIGxlYXZpbmcgc3BhY2UgZm9yIHRo
ZSB0ZXh0IGZpZWxkJ3MgMXB4IGJvcmRlcgogICAgIEludFJlY3QgYnV0dG9uUmVjdChyZWN0KTsK
ICAgICBidXR0b25SZWN0LmluZmxhdGUoLWJvcmRlclRoaWNrbmVzcyk7Ci0gICAgaWYgKHJlbmRl
cmVyLT5zdHlsZSgpLmRpcmVjdGlvbigpID09IExUUikKKyAgICBpZiAocmVuZGVyZXIuc3R5bGUo
KS5kaXJlY3Rpb24oKSA9PSBMVFIpCiAgICAgICAgIGJ1dHRvblJlY3Quc2V0WChidXR0b25SZWN0
Lm1heFgoKSAtIGRyb3BEb3duQnV0dG9uV2lkdGgpOwogICAgIGJ1dHRvblJlY3Quc2V0V2lkdGgo
ZHJvcERvd25CdXR0b25XaWR0aCk7CiAKQEAgLTg2MSwxNCArODYxLDE0IEBAIGJvb2wgUmVuZGVy
VGhlbWVXaW46OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zCiAKIGNvbnN0IGludCB0cmFja1dpZHRoID0gNDsKIAotYm9vbCBSZW5kZXJU
aGVtZVdpbjo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2xpZGVy
VHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHIpCiB7CiAgICAgSW50UmVjdCBib3VuZHMgPSByOwogICAgIAotICAgIGlmIChvLT5z
dHlsZSgpLmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQpIHsKKyAgICBpZiAo
by5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQpIHsKICAgICAg
ICAgYm91bmRzLnNldEhlaWdodCh0cmFja1dpZHRoKTsKICAgICAgICAgYm91bmRzLnNldFkoci55
KCkgKyByLmhlaWdodCgpIC8gMiAtIHRyYWNrV2lkdGggLyAyKTsKLSAgICB9IGVsc2UgaWYgKG8t
PnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkgeworICAgIH0gZWxz
ZSBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpIHsKICAg
ICAgICAgYm91bmRzLnNldFdpZHRoKHRyYWNrV2lkdGgpOwogICAgICAgICBib3VuZHMuc2V0WChy
LngoKSArIHIud2lkdGgoKSAvIDIgLSB0cmFja1dpZHRoIC8gMik7CiAgICAgfQpAQCAtODc3LDcg
Kzg3Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVdp
bjo6cGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcikKIHsgICAKICAgICBkcmF3Q29udHJvbChpLmNvbnRleHQs
ICBvLCBzbGlkZXJUaGVtZSgpLCBnZXRUaGVtZURhdGEobyksIHIpOwogICAgIHJldHVybiBmYWxz
ZTsKQEAgLTkwMiw3ICs5MDIsNyBAQCB2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTbGlkZXJU
aHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKICNlbmRpZgogfQog
Ci1ib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVdp
bjo6cGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywg
aSwgcik7CiB9CkBAIC05MTksMTQgKzkxOSwxNCBAQCB2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlcgog
ICAgICAgICBzdHlsZS0+c2V0T3V0bGluZU9mZnNldCgtMik7CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVXaW46OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhl
bWVXaW46OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBJ
bnRSZWN0IGJvdW5kcyA9IHI7Ci0gICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKLSAgICBpZiAoIW8t
PnBhcmVudCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKKyAgICBBU1NFUlQoby5wYXJlbnQo
KSk7CisgICAgaWYgKCFvLnBhcmVudCgpIHx8ICFvLnBhcmVudCgpLT5pc0JveCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0
b1JlbmRlckJveChvLT5wYXJlbnQoKSk7CisgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3gg
PSB0b1JlbmRlckJveChvLnBhcmVudCgpKTsKIAogICAgIEludFJlY3QgcGFyZW50Qm94ID0gcGFy
ZW50UmVuZGVyQm94LT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKICAgICAKQEAgLTk0MCw3ICs5NDAs
NyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbgogCiAgICAgc3RhdGljIEltYWdlKiBjYW5jZWxJ
bWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsIikubGVha1Jl
ZigpOwogICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsUHJlc3NlZEltYWdlID0gSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxQcmVzc2VkIikubGVha1JlZigpOwotICAgIHBh
aW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2UoaXNQcmVzc2VkKG8pID8gY2FuY2VsUHJlc3NlZElt
YWdlIDogY2FuY2VsSW1hZ2UsIG8tPnN0eWxlKCkuY29sb3JTcGFjZSgpLCBib3VuZHMpOworICAg
IHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2UoaXNQcmVzc2VkKG8pID8gY2FuY2VsUHJlc3Nl
ZEltYWdlIDogY2FuY2VsSW1hZ2UsIG8uc3R5bGUoKS5jb2xvclNwYWNlKCksIGJvdW5kcyk7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC05NzAsMTQgKzk3MCwxNCBAQCB2b2lkIFJlbmRlclRo
ZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxl
UmVzb2x2ZXIqLAogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmllclNpemUsIEZp
eGVkKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmll
bGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBJbnRSZWN0IGJvdW5k
cyA9IHI7Ci0gICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKLSAgICBpZiAoIW8tPnBhcmVudCgpIHx8
ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKKyAgICBBU1NFUlQoby5wYXJlbnQoKSk7CisgICAgaWYg
KCFvLnBhcmVudCgpIHx8ICFvLnBhcmVudCgpLT5pc0JveCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCi0gICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChv
LT5wYXJlbnQoKSk7CisgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRlckJv
eChvLnBhcmVudCgpKTsKICAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+
YWJzb2x1dGVDb250ZW50Qm94KCk7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQg
ZGVjb3JhdGlvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gK
QEAgLTk4OSw3ICs5ODksNyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCogbywgY29ucwogICAgIGJvdW5kcy5z
ZXRZKHBhcmVudEJveC55KCkgKyAocGFyZW50Qm94LmhlaWdodCgpIC0gYm91bmRzLmhlaWdodCgp
ICsgMSkgLyAyKTsKICAgICAKICAgICBzdGF0aWMgSW1hZ2UqIG1hZ25pZmllckltYWdlID0gSW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hNYWduaWZpZXIiKS5sZWFrUmVmKCk7Ci0g
ICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZShtYWduaWZpZXJJbWFnZSwgby0+c3R5bGUo
KS5jb2xvclNwYWNlKCksIGJvdW5kcyk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFn
ZShtYWduaWZpZXJJbWFnZSwgby5zdHlsZSgpLmNvbG9yU3BhY2UoKSwgYm91bmRzKTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEwMDQsMTYgKzEwMDQsMTYgQEAgdm9pZCBSZW5kZXJUaGVt
ZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclMKICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJIZWlnaHQsIEZp
eGVkKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIEludFJlY3QgYm91bmRzID0gcjsKLSAgICBBU1NF
UlQoby0+cGFyZW50KCkpOwotICAgIGlmICghby0+cGFyZW50KCkpCisgICAgQVNTRVJUKG8ucGFy
ZW50KCkpOworICAgIGlmICghby5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghby0+cGFyZW50KCkgfHwgIW8tPnBhcmVudCgpLT5pc0JveCgpKQorICAgIGlmICghby5w
YXJlbnQoKSB8fCAhby5wYXJlbnQoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby0+cGFy
ZW50KCkpOworICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby5w
YXJlbnQoKSk7CiAgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29s
dXRlQ29udGVudEJveCgpOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGRlY29y
YXRpb24gd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveApAQCAtMTAyNSw3ICsxMDI1LDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEkKICAgICBib3VuZHMuc2V0WShwYXJlbnRCb3gueSgpICsg
KHBhcmVudEJveC5oZWlnaHQoKSAtIGJvdW5kcy5oZWlnaHQoKSArIDEpIC8gMik7CiAKICAgICBz
dGF0aWMgSW1hZ2UqIG1hZ25pZmllckltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNl
KCJzZWFyY2hNYWduaWZpZXJSZXN1bHRzIikubGVha1JlZigpOwotICAgIHBhaW50SW5mby5jb250
ZXh0LT5kcmF3SW1hZ2UobWFnbmlmaWVySW1hZ2UsIG8tPnN0eWxlKCkuY29sb3JTcGFjZSgpLCBi
b3VuZHMpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2UobWFnbmlmaWVySW1hZ2Us
IG8uc3R5bGUoKS5jb2xvclNwYWNlKCksIGJvdW5kcyk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CkBAIC0xMTc3LDEyICsxMTc3LDEyIEBAIEludFNpemUgUmVuZGVyVGhlbWVXaW46Om1ldGVyU2l6
ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJlY3QmIGJvCiAgICAgcmV0
dXJuIGJvdW5kcy5zaXplKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50TWV0ZXIo
UmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZXRlcihjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFyZW5kZXJPYmplY3QtPmlzTWV0ZXIo
KSkKKyAgICBpZiAoIXJlbmRlck9iamVjdC5pc01ldGVyKCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgSFRNTE1ldGVyRWxlbWVudCogZWxlbWVudCA9IHRvUmVuZGVyTWV0ZXIocmVuZGVy
T2JqZWN0KS0+bWV0ZXJFbGVtZW50KCk7CisgICAgSFRNTE1ldGVyRWxlbWVudCogZWxlbWVudCA9
IHRvUmVuZGVyTWV0ZXIoJnJlbmRlck9iamVjdCktPm1ldGVyRWxlbWVudCgpOwogCiAgICAgVGhl
bWVEYXRhIHRoZW1lID0gZ2V0VGhlbWVEYXRhKHJlbmRlck9iamVjdCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmgKaW5kZXggMTc5Y2YzMDVkOTg1N2EwMGZhNDFl
M2Q5NzRkN2YzMmUwYzI4YWVmNS4uZjUxNDI2ZDJiMzYwYjhjZDhlOGNlMDI5NmU5NzE3YWM5MzY2
MGZiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2lu
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmgKQEAgLTY2
LDUxICs2Niw1MSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoQ1NTVmFs
dWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CiAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1D
b2xvcihDU1NWYWx1ZUlEKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQor
ICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29u
c3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQogICAgIHsgcmV0dXJuIHBhaW50QnV0
dG9uKG8sIGksIHIpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJT
dHlsZSopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCisgICAgdmlydHVhbCBi
b29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHIpCiAgICAgeyByZXR1cm4gcGFpbnRCdXR0b24obywgaSwgcik7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
ICAgICB7IHJldHVybiBzZXRDaGVja2JveFNpemUoc3R5bGUpOyB9CiAKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFRl
eHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFRleHRBcmVhKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByKQorICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVj
dCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQogICAgIHsgcmV0dXJu
IHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVu
dUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRv
bkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcik7CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJh
Y2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAg
dmlydHVhbCBib29sIHBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBh
aW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25Q
YXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
ZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
UGFydChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7CiAKQEAg
LTEzMyw3ICsxMzMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZv
ckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNZXRlcihDb250cm9sUGFydCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9v
bCBwYWludE1ldGVyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5k
aWYKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTE1MSwxNiArMTUxLDE2IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBhZGRJbnRyaW5zaWNNYXJnaW5zKFJlbmRlclN0eWxlKikgY29uc3Q7CiAgICAgdm9p
ZCBjbG9zZSgpOwogCi0gICAgdW5zaWduZWQgZGV0ZXJtaW5lU3RhdGUoUmVuZGVyT2JqZWN0Kik7
Ci0gICAgdW5zaWduZWQgZGV0ZXJtaW5lQ2xhc3NpY1N0YXRlKFJlbmRlck9iamVjdCosIENvbnRy
b2xTdWJQYXJ0ID0gTm9uZSk7Ci0gICAgdW5zaWduZWQgZGV0ZXJtaW5lU2xpZGVyVGh1bWJTdGF0
ZShSZW5kZXJPYmplY3QqKTsKLSAgICB1bnNpZ25lZCBkZXRlcm1pbmVCdXR0b25TdGF0ZShSZW5k
ZXJPYmplY3QqKTsKLSAgICB1bnNpZ25lZCBkZXRlcm1pbmVTcGluQnV0dG9uU3RhdGUoUmVuZGVy
T2JqZWN0KiwgQ29udHJvbFN1YlBhcnQgPSBOb25lKTsKKyAgICB1bnNpZ25lZCBkZXRlcm1pbmVT
dGF0ZShjb25zdCBSZW5kZXJPYmplY3QmKTsKKyAgICB1bnNpZ25lZCBkZXRlcm1pbmVDbGFzc2lj
U3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiwgQ29udHJvbFN1YlBhcnQgPSBOb25lKTsKKyAgICB1
bnNpZ25lZCBkZXRlcm1pbmVTbGlkZXJUaHVtYlN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYpOwor
ICAgIHVuc2lnbmVkIGRldGVybWluZUJ1dHRvblN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYpOwor
ICAgIHVuc2lnbmVkIGRldGVybWluZVNwaW5CdXR0b25TdGF0ZShjb25zdCBSZW5kZXJPYmplY3Qm
LCBDb250cm9sU3ViUGFydCA9IE5vbmUpOwogCiAgICAgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRy
b2xQYXJ0KSBjb25zdDsKIAotICAgIFRoZW1lRGF0YSBnZXRUaGVtZURhdGEoUmVuZGVyT2JqZWN0
KiwgQ29udHJvbFN1YlBhcnQgPSBOb25lKTsKLSAgICBUaGVtZURhdGEgZ2V0Q2xhc3NpY1RoZW1l
RGF0YShSZW5kZXJPYmplY3QqIG8sIENvbnRyb2xTdWJQYXJ0ID0gTm9uZSk7CisgICAgVGhlbWVE
YXRhIGdldFRoZW1lRGF0YShjb25zdCBSZW5kZXJPYmplY3QmLCBDb250cm9sU3ViUGFydCA9IE5v
bmUpOworICAgIFRoZW1lRGF0YSBnZXRDbGFzc2ljVGhlbWVEYXRhKGNvbnN0IFJlbmRlck9iamVj
dCYsIENvbnRyb2xTdWJQYXJ0ID0gTm9uZSk7CiAKICAgICBIQU5ETEUgYnV0dG9uVGhlbWUoKSBj
b25zdDsKICAgICBIQU5ETEUgdGV4dEZpZWxkVGhlbWUoKSBjb25zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230048</attachid>
            <date>2014-04-23 21:49:15 -0700</date>
            <delta_ts>2014-04-23 22:14:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132037-20140423214853.patch</filename>
            <type>text/plain</type>
            <size>242005</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3Njc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWJlMGU5NWJiNmE3Mzcy
YTdkMmRmZjY2YjI1ZjAyYzhhMjEwODViNC4uMTI4YTk2NGQ2OWFmYzYzNjU2MmRmMGQ2MjY1NmEw
ZjhlMDVhMmQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MiBAQAorMjAxNC0wNC0yMyAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFRyYW5zaXRpb24gUmVuZGVy
VGhlbWUgQVBJIGZyb20gUmVuZGVyT2JqZWN0KiB0byBjb25zdCBSZW5kZXJPYmplY3QmCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzIwMzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEdvcmFuIEtsaW5nLgorCisgICAgICAgIFVzaW5nIGNv
bnN0IHJlZmVyZW5jZXMgcHJvdmlkZXMgYmV0dGVyIGVuY2Fwc3VsYXRpb24gYW5kIGltcHJvdmUg
c2VjdXJpdHkuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmJvdW5kaW5nQm94Rm9yUXVhZHMpOgorICAgICAgICAqIGRv
bS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEFjdGl2ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRIb3ZlcmVkKToKKyAgICAgICAgKiBlZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpm
b2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250
cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpyZWFkT25seUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRN
TElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpz
ZXRDaGVja2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0
ZXJtaW5hdGUpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmFkZFZpc3VhbE92ZXJmbG93RnJvbVRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCdXR0b246OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVw
bG9hZENvbnRyb2w6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdp
b25zVmlzdWFsT3ZlcmZsb3dGcm9tVGhlbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpkcmF3TGluZUZvckJv
eFNpZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJv
Z3Jlc3M6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVt
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50Qm9yZGVyT25seSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6YWRqdXN0UmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnN0
YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dXBkYXRlQ29udHJv
bFN0YXRlc0ZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpleHRy
YWN0Q29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lOjppc0FjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXNDaGVja2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0luZGV0ZXJtaW5hdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Ojppc1ByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0
dG9uUGFydFByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzUmVhZE9u
bHlDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0hvdmVyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRGVmYXVsdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRJbnB1dEZpZWxkU3BlZWNoQnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmNvbnRyb2xTdXBw
b3J0c1RpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludENhcHNMb2Nr
SW5kaWNhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEZpbGVVcGxv
YWRJY29uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmltYWdl
Q29udHJvbHNCdXR0b25TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWlu
dENoZWNrYm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFJhZGlvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRJbm5lclNwaW5CdXR0b24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRSYWRpb0RlY29yYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6cGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6cGFpbnRUZXh0QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6cGFpbnRUZXh0QXJlYURlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpw
YWludE1lbnVMaXN0RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50U3F1YXJlQnV0dG9uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6cGFpbnRTZWFyY2hGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6
cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlhRnVsbHNj
cmVlbkJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRpYVBs
YXlCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFPdmVy
bGF5UGxheUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRp
YU11dGVCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFT
ZWVrQmFja0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRp
YVNlZWtGb3J3YXJkQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWlu
dE1lZGlhU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50
TWVkaWFTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRN
ZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFSZXdpbmRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFDb250cm9sc0Jh
Y2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFDdXJy
ZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRpYVRpbWVS
ZW1haW5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFGdWxs
U2NyZWVuVm9sdW1lU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnBhaW50TWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWU6OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEltYWdlQ29udHJvbHNCdXR0b24pOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGRSb3Vu
ZGVkQm9yZGVyQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRD
aGVja2JveERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpi
YXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWlu
dFJhZGlvRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBh
aW50VGV4dEZpZWxkRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJ
T1M6OnBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRodW1iRGVjb3JhdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRCdXR0b25EZWNvcmF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50RmlsZVVwbG9hZElj
b25EZWNvcmF0aW9ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6dXBkYXRlQWN0aXZlU3RhdGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lTWFjOjpkb2N1bWVudFZpZXdGb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OmFkanVzdFJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjpjb252ZXJ0VG9QYWludGluZ1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnVwZGF0ZUNoZWNrZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjp1cGRhdGVGb2N1c2VkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnVwZGF0ZVByZXNzZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6Y29udHJvbFN1cHBvcnRzVGludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
OjpwYWludENhcHNMb2NrSW5kaWNhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjpwYWludFRleHRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpw
YWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1l
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwcm9ncmVzc0JhclJlY3RG
b3JCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50UHJvZ3Jl
c3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RC
dXR0b25HcmFkaWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50
TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnNldFNlYXJjaENlbGxTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFw
c2hvdHRlZFBsdWdpbk92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnBhaW50SW1hZ2VDb250cm9sc0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6aW1hZ2VDb250cm9sc0J1dHRvblNpemUpOgorCiAyMDE0LTA0LTIyICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGFuZ2UgSW1hZ2UgQ29udHJvbHMg
cmVwbGFjZW1lbnQgdG8gdXNlIHNlbGVjdGlvbiBhbmQgcGFzdGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDYxZjc0
YzliOGM5MWI0YmZlNWI2ODFiMzZmYzhlYWI2YmE5ZTIyZjcuLmI4ZDcyMDdmOTQ2ZWQ2MGExZDQ0
MGVjMzY0YTQwMWQ1ZDU4Yzk2NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNzExLDcgKzcxMSw3IEBAIEludFJl
Y3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6Ym91bmRpbmdCb3hGb3JRdWFkcyhSZW5kZXJPYmplY3Qq
IG9iaiwgY29uc3QgVmVjdG9yCiAgICAgICAgIEludFJlY3QgciA9IHF1YWQuZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKICAgICAgICAgaWYgKCFyLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYg
KG9iai0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICAgICAgb2JqLT50aGVt
ZSgpLmFkanVzdFJlcGFpbnRSZWN0KG9iaiwgcik7CisgICAgICAgICAgICAgICAgb2JqLT50aGVt
ZSgpLmFkanVzdFJlcGFpbnRSZWN0KCpvYmosIHIpOwogICAgICAgICAgICAgcmVzdWx0LnVuaXRl
KHIpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDFiYjg5OGZh
MWFjMThjOGMyYmY1ZjkyYjFmOTM2Zjk4MGExYzY3YTIuLmFjZGQzNjA2YTA4YzU3NDBlZTViMzU2
MTEzNTJlNWZmYTAzZWZkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTQ4OCw3ICs0ODgs
NyBAQCB2b2lkIEVsZW1lbnQ6OnNldEFjdGl2ZShib29sIGZsYWcsIGJvb2wgcGF1c2UpCiAgICAg
aWYgKHJlYWN0c1RvUHJlc3MpCiAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIAotICAg
IGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAmJiByZW5kZXJlcigpLT50
aGVtZSgpLnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBDb250cm9sU3RhdGVzOjpQcmVzc2VkU3Rh
dGUpKQorICAgIGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAmJiByZW5k
ZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6
UHJlc3NlZFN0YXRlKSkKICAgICAgICAgcmVhY3RzVG9QcmVzcyA9IHRydWU7CiAKICAgICAvLyBU
aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgYSBmZWF0dXJlIHRoYXQgb25seSB3
b3JrcyBpZiB0aGUKQEAgLTU1NCw3ICs1NTQsNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEhvdmVyZWQo
Ym9vbCBmbGFnKQogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKICAgICBpZiAocmVu
ZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIHJlbmRlcmVyKCktPnRo
ZW1lKCkuc3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkhvdmVyU3RhdGUp
OworICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwg
Q29udHJvbFN0YXRlczo6SG92ZXJTdGF0ZSk7CiB9CiAKIHZvaWQgRWxlbWVudDo6c2Nyb2xsSW50
b1ZpZXcoYm9vbCBhbGlnblRvVG9wKSAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAKaW5kZXggNDdiNmJlNjYwYWE2YzQ4OWE0NGE2Y2I4YTQ1ZWY2ZDQzZTg0NDkwYS4u
YmFjMmRmOWMxODcwN2FlYmViYzRiNmMxOTRjMDNjM2M1ZTBlY2NlMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTE3NDksNyArMTc0OSw3IEBAIHZvaWQg
RnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAgICAgIGVs
ZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgaWYgKHJlbmRlcmVy
ICYmIHJlbmRlcmVyLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgICAgICAgICBy
ZW5kZXJlci0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIsIENvbnRyb2xTdGF0ZXM6OkZv
Y3VzU3RhdGUpOworICAgICAgICAgICAgICAgIHJlbmRlcmVyLT50aGVtZSgpLnN0YXRlQ2hhbmdl
ZCgqcmVuZGVyZXIsIENvbnRyb2xTdGF0ZXM6OkZvY3VzU3RhdGUpOwogICAgIH0KICNlbmRpZgog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5k
ZXggZTBiODVkNTk3MGY4OGJkNGMwNTEyZjU3NGMyYWIxZDdmMGNhN2ZkYi4uODEwY2JhZDk3YWZl
NDhiOTRjN2NkMDU2NGIxYjg3MzY3NzQ3MWIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCgpCiAgICAgc2V0TmVlZHNX
aWxsVmFsaWRhdGVDaGVjaygpOwogICAgIGRpZEFmZmVjdFNlbGVjdG9yKEFmZmVjdGVkU2VsZWN0
b3JEaXNhYmxlZCB8IEFmZmVjdGVkU2VsZWN0b3JFbmFibGVkKTsKICAgICBpZiAocmVuZGVyZXIo
KSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgcmVuZGVy
ZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6RW5h
YmxlZFN0YXRlKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJl
bmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkVuYWJsZWRTdGF0ZSk7CiB9CiAKIHZvaWQgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6cmVhZE9ubHlBdHRyaWJ1dGVDaGFuZ2VkKCkKQEAgLTE2Myw3ICsx
NjMsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlYWRPbmx5QXR0cmlidXRlQ2hh
bmdlZCgpCiAgICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOwogICAgIHNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhh
c0FwcGVhcmFuY2UoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQo
cmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6UmVhZE9ubHlTdGF0ZSk7CisgICAgICAgIHJlbmRl
cmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlcigpLCBDb250cm9sU3RhdGVzOjpS
ZWFkT25seVN0YXRlKTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXF1aXJl
ZEF0dHJpYnV0ZUNoYW5nZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAKaW5kZXggNzAwMDI4YmI3MWUwMGIyNDZkZTk2NmRjYjEwMzJmODExOWQzY2I2Mi4uN2NiNmMy
MzA4MWFkZDNiMmI4ODJhYWY3NDQ2MTk0Y2IyM2ZkNGZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC04NTgsNyArODU4LDcgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpzZXRDaGVja2VkKGJvb2wgbm93Q2hlY2tlZCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlv
ciBldmVudEIKICAgICBpZiAoQ2hlY2tlZFJhZGlvQnV0dG9ucyogYnV0dG9ucyA9IGNoZWNrZWRS
YWRpb0J1dHRvbnMoKSkKICAgICAgICAgICAgIGJ1dHRvbnMtPnVwZGF0ZUNoZWNrZWRTdGF0ZSh0
aGlzKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVh
cmFuY2UoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVy
ZXIoKSwgQ29udHJvbFN0YXRlczo6Q2hlY2tlZFN0YXRlKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+
dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkNoZWNrZWRT
dGF0ZSk7CiAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiAKICAgICAvLyBJZGVhbGx5IHdl
J2QgZG8gdGhpcyBmcm9tIHRoZSByZW5kZXIgdHJlZSAobWF0Y2hpbmcKQEAgLTg5Miw3ICs4OTIs
NyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0ZXJtaW5hdGUoYm9vbCBuZXdWYWx1
ZSkKICAgICBkaWRBZmZlY3RTZWxlY3RvcihBZmZlY3RlZFNlbGVjdG9ySW5kZXRlcm1pbmF0ZSk7
CiAKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFu
Y2UoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIo
KSwgQ29udHJvbFN0YXRlczo6Q2hlY2tlZFN0YXRlKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+dGhl
bWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkNoZWNrZWRTdGF0
ZSk7CiB9CiAKIGludCBIVE1MSW5wdXRFbGVtZW50OjpzaXplKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKaW5kZXggNDlmNDhiZjM4MWU5YjQ1MDQ5NDRm
YmEwNTQwNWE5OWQ0NzkzMTY5My4uMjE5ZjNhMjUzMjRkNzExOGFiOTA5MTIwN2M4NDNmMTRiODhj
MDM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKQEAgLTE5
NSw3ICsxOTUsNyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdAogICAgICAgICBpZiAob2xkRGlz
YWJsZWQgIT0gbV9kaXNhYmxlZCkgewogICAgICAgICAgICAgZGlkQWZmZWN0U2VsZWN0b3IoQWZm
ZWN0ZWRTZWxlY3RvckRpc2FibGVkIHwgQWZmZWN0ZWRTZWxlY3RvckVuYWJsZWQpOwogICAgICAg
ICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVu
ZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6RW5hYmxlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICBy
ZW5kZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRl
czo6RW5hYmxlZFN0YXRlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBzZWxl
Y3RlZEF0dHIpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBtYXRjaCB3aGF0IHRo
ZSBIVE1MIHNwZWNpZmljYXRpb24gc2F5cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmgKaW5kZXggNDJiZjZhYzU2N2NjODIy
NGE5MDNkNTVkMzcyMTNmNzZlM2I3NGNkMy4uNWNjZTY2OTQwYTc1OGIwNzQzMTY0OTcyMDQwYjJj
NTk2MzdiZDkwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9sRWxlbWVudFR5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sRWxlbWVudFR5cGVzLmgKQEAgLTc1LDcgKzc1LDcgQEAgZW51bSBNZWRpYUNvbnRy
b2xFbGVtZW50VHlwZSB7CiB9OwogCiBIVE1MTWVkaWFFbGVtZW50KiBwYXJlbnRNZWRpYUVsZW1l
bnQoTm9kZSopOwotaW5saW5lIEhUTUxNZWRpYUVsZW1lbnQqIHBhcmVudE1lZGlhRWxlbWVudChS
ZW5kZXJPYmplY3QmIHJlbmRlcmVyKSB7IHJldHVybiBwYXJlbnRNZWRpYUVsZW1lbnQocmVuZGVy
ZXIubm9kZSgpKTsgfQoraW5saW5lIEhUTUxNZWRpYUVsZW1lbnQqIHBhcmVudE1lZGlhRWxlbWVu
dChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSB7IHJldHVybiBwYXJlbnRNZWRpYUVsZW1l
bnQocmVuZGVyZXIubm9kZSgpKTsgfQogCiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBtZWRpYUNv
bnRyb2xFbGVtZW50VHlwZShOb2RlKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
ZmwvUmVuZGVyVGhlbWVFZmwuY3BwCmluZGV4IDZmYzQ2M2VkYTBjNmQ4YmYxMjYzNWI1MTI3NjMy
YmNjODQ0Mjc5MWEuLjhlMDQ1ZWIwNDMxODg3ZGQ3YjQzNDk3N2JiYTA1ZDE4ZDdlNTc4ZWUgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcApAQCAt
Mjk5LDEzICsyOTksMTMgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplU3RhdGVGcm9t
Rm9ybShFdmFzX09iamVjdCogb2JqZWN0LCBjb25zdCBDb250cm9sU3QKICAgICAgICAgZWRqZV9v
YmplY3Rfc2lnbmFsX2VtaXQob2JqZWN0LCAic3R5bGVkIiwgIiIpOwogfQogCi12b2lkIFJlbmRl
clRoZW1lRWZsOjphcHBseUVkamVSVExTdGF0ZShFdmFzX09iamVjdCogZWRqZSwgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFJl
bmRlclRoZW1lRWZsOjphcHBseUVkamVSVExTdGF0ZShFdmFzX09iamVjdCogZWRqZSwgY29uc3Qg
UmVuZGVyT2JqZWN0JiBvYmplY3QsIEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgaWYgKHR5cGUgPT0gU2xpZGVyVmVydGljYWwgfHwgdHlwZSA9PSBTbGlkZXJIb3Jp
em9udGFsKSB7Ci0gICAgICAgIGlmICghb2JqZWN0LT5pc1NsaWRlcigpKQorICAgICAgICBpZiAo
IW9iamVjdC5pc1NsaWRlcigpKQogICAgICAgICAgICAgcmV0dXJuOyAvLyBwcm9iYWJseSBoYXZl
IC13ZWJraXQtYXBwZWFyYW5jZTogc2xpZGVyLi4KIAotICAgICAgICBSZW5kZXJTbGlkZXIqIHJl
bmRlclNsaWRlciA9IHRvUmVuZGVyU2xpZGVyKG9iamVjdCk7CisgICAgICAgIGNvbnN0IFJlbmRl
clNsaWRlciogcmVuZGVyU2xpZGVyID0gdG9SZW5kZXJTbGlkZXIoJm9iamVjdCk7CiAgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gcmVuZGVyU2xpZGVyLT5lbGVtZW50KCk7CiAgICAg
ICAgIGRvdWJsZSB2YWx1ZVJhbmdlID0gaW5wdXQubWF4aW11bSgpIC0gaW5wdXQubWluaW11bSgp
OwogCkBAIC0zMTYsNyArMzE2LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplUlRM
U3RhdGUoRXZhc19PYmplY3QqIGVkamUsIFJlbmRlck9iamVjdCogb2JqZWN0LAogICAgICAgICAv
LyBncm93cyBmcm9tIHRoZSBlbmQgb2YgdGhlIHNsaWRlciBvciBmcm9tIHRoZSBiZWdpbm5pbmcu
IE9uIHZlcnRpY2FsCiAgICAgICAgIC8vIHNsaWRlcnMsIGl0IHNob3VsZCBhbHdheXMgYmUgdGhl
IHNhbWUgYW5kIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5CiAgICAgICAgIC8vIHRleHQgZGlyZWN0
aW9uIHNldHRpbmdzLgotICAgICAgICBpZiAob2JqZWN0LT5zdHlsZSgpLmRpcmVjdGlvbigpID09
IFJUTCB8fCB0eXBlID09IFNsaWRlclZlcnRpY2FsKQorICAgICAgICBpZiAob2JqZWN0LnN0eWxl
KCkuZGlyZWN0aW9uKCkgPT0gUlRMIHx8IHR5cGUgPT0gU2xpZGVyVmVydGljYWwpCiAgICAgICAg
ICAgICBtc2ctPnZhbFswXSA9IDE7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1zZy0+dmFs
WzBdID0gMDsKQEAgLTMyNSw3ICszMjUsNyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseUVk
amVSVExTdGF0ZShFdmFzX09iamVjdCogZWRqZSwgUmVuZGVyT2JqZWN0KiBvYmplY3QsCiAgICAg
ICAgIGVkamVfb2JqZWN0X21lc3NhZ2Vfc2VuZChlZGplLCBFREpFX01FU1NBR0VfRkxPQVRfU0VU
LCAwLCBtc2cuZ2V0KCkpOwogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQogICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSBQcm9ncmVzc0JhcikgewotICAgICAgICBSZW5kZXJQcm9ncmVzcyogcmVu
ZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKG9iamVjdCk7CisgICAgICAgIGNvbnN0IFJl
bmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3MoJm9iamVjdCk7
CiAKICAgICAgICAgaW50IG1heCA9IHJlY3Qud2lkdGgoKTsKICAgICAgICAgZG91YmxlIHZhbHVl
ID0gcmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCk7CkBAIC0zMzMsNyArMzMzLDcgQEAgdm9pZCBS
ZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplUlRMU3RhdGUoRXZhc19PYmplY3QqIGVkamUsIFJlbmRl
ck9iamVjdCogb2JqZWN0LAogICAgICAgICBPd25QdHI8RWRqZV9NZXNzYWdlX0Zsb2F0X1NldD4g
bXNnID0gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RWRqZV9NZXNzYWdlX0Zsb2F0X1NldCo+KDo6b3Bl
cmF0b3IgbmV3IChzaXplb2YoRWRqZV9NZXNzYWdlX0Zsb2F0X1NldCkgKyBzaXplb2YoZG91Ymxl
KSkpKTsKICAgICAgICAgbXNnLT5jb3VudCA9IDI7CiAKLSAgICAgICAgaWYgKG9iamVjdC0+c3R5
bGUoKS5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgICAgIGlmIChvYmplY3Quc3R5bGUoKS5kaXJl
Y3Rpb24oKSA9PSBSVEwpCiAgICAgICAgICAgICBtc2ctPnZhbFswXSA9ICgxLjAgLSB2YWx1ZSkg
KiBtYXg7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1zZy0+dmFsWzBdID0gMDsKQEAgLTM1
MCw3ICszNTAsNyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjppc0NvbnRyb2xTdHlsZWQoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJgogICAgIHJldHVybiBSZW5kZXJU
aGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91
bmRDb2xvcikgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQ7CiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGhlbWVQYXJ0KFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBGb3JtVHlwZSB0eXBlLCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRoZW1lUGFydChjb25zdCBSZW5kZXJP
YmplY3QmIG9iamVjdCwgRm9ybVR5cGUgdHlwZSwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQogewogICAgIGxvYWRUaGVtZUlmTmVlZGVkKCk7CiAgICAgX0FTU0VS
VF9PTl9SRUxFQVNFX1JFVFVSTl9WQUwoZWRqZSgpLCBmYWxzZSwgIkNvdWxkIG5vdCBwYWludCBu
YXRpdmUgSFRNTCBwYXJ0IGR1ZSB0byBtaXNzaW5nIHRoZW1lLiIpOwpAQCAtMzU5LDcgKzM1OSw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGhlbWVQYXJ0KFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBGb3JtVHlwZSB0eXBlLCBjb25zdCBQCiAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYm9vbCBoYXZlQmFja2dyb3VuZENvbG9yID0gaXNDb250cm9sU3R5
bGVkKCZvYmplY3QtPnN0eWxlKCksIG9iamVjdC0+c3R5bGUoKS5ib3JkZXIoKSwgKm9iamVjdC0+
c3R5bGUoKS5iYWNrZ3JvdW5kTGF5ZXJzKCksIENvbG9yOjp3aGl0ZSk7CisgICAgYm9vbCBoYXZl
QmFja2dyb3VuZENvbG9yID0gaXNDb250cm9sU3R5bGVkKCZvYmplY3Quc3R5bGUoKSwgb2JqZWN0
LnN0eWxlKCkuYm9yZGVyKCksICpvYmplY3Quc3R5bGUoKS5iYWNrZ3JvdW5kTGF5ZXJzKCksIENv
bG9yOjp3aGl0ZSk7CiAgICAgQ29udHJvbFN0YXRlcyBzdGF0ZXMoZXh0cmFjdENvbnRyb2xTdGF0
ZXNGb3JSZW5kZXJlcihvYmplY3QpKTsKICAgICBhcHBseUVkamVTdGF0ZUZyb21Gb3JtKGVudHJ5
LT5lZGplKCksICZzdGF0ZXMsIGhhdmVCYWNrZ3JvdW5kQ29sb3IpOwogCkBAIC02MzEsMTkgKzYz
MSwxOSBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAgICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFw
cGVhcmFuY2UoKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OmNvbnRyb2xTdXBwb3J0c1Rp
bnRzKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZUVm
bDo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGlzRW5hYmxlZChvYmplY3QpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVF
Zmw6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpIGNvbnN0Citp
bnQgUmVuZGVyVGhlbWVFZmw6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JiBv
YmplY3QpIGNvbnN0CiB7Ci0gICAgaWYgKCFvYmplY3QtPmlzQm94KCkpCisgICAgaWYgKCFvYmpl
Y3QuaXNCb3goKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAob2JqZWN0LT5zdHlsZSgp
LmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQKLSAgICB8fCAgb2JqZWN0LT5zdHlsZSgpLmFw
cGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpCi0gICAgICAgIHJldHVybiB0b1JlbmRlckJveChvYmpl
Y3QpLT5tYXJnaW5Ub3AoKSArIHRvUmVuZGVyQm94KG9iamVjdCktPmhlaWdodCgpIC0gMzsKKyAg
ICBpZiAob2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydAorICAgIHx8
ICBvYmplY3Quc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KQorICAgICAgICByZXR1
cm4gdG9SZW5kZXJCb3goJm9iamVjdCktPm1hcmdpblRvcCgpICsgdG9SZW5kZXJCb3goJm9iamVj
dCktPmhlaWdodCgpIC0gMzsKIAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3Np
dGlvbihvYmplY3QpOwogfQpAQCAtNjg0LDkgKzY4NCw5IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6
OnN1cHBvcnRzU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9ycygpIGNvbnN0CiAgICAgcmV0dXJuIG1f
c3VwcG9ydHNTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3I7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVF
Zmw6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50
U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
aW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAob2JqZWN0LT5zdHlsZSgpLmFw
cGVhcmFuY2UoKSA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCkKKyAgICBpZiAob2JqZWN0LnN0eWxl
KCkuYXBwZWFyYW5jZSgpID09IFNsaWRlckhvcml6b250YWxQYXJ0KQogICAgICAgICBwYWludFRo
ZW1lUGFydChvYmplY3QsIFNsaWRlckhvcml6b250YWwsIGluZm8sIHJlY3QpOwogICAgIGVsc2UK
ICAgICAgICAgcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBTbGlkZXJWZXJ0aWNhbCwgaW5mbywgcmVj
dCk7CkBAIC03NTUsOSArNzU1LDkgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6c3VwcG9ydHNEYXRh
TGlzdFVJKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSkgY29uc3QKICNlbmRpZgogfQogCi1ib29s
IFJlbmRlclRoZW1lRWZsOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBj
b25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRo
ZW1lRWZsOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25z
dCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKG9iamVj
dC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkKKyAg
ICBpZiAob2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRh
bFBhcnQpCiAgICAgICAgIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgU2xpZGVyVGh1bWJIb3Jpem9u
dGFsLCBpbmZvLCByZWN0KTsKICAgICBlbHNlCiAgICAgICAgIHBhaW50VGhlbWVQYXJ0KG9iamVj
dCwgU2xpZGVyVGh1bWJWZXJ0aWNhbCwgaW5mbywgcmVjdCk7CkBAIC03ODMsNyArNzgzLDcgQEAg
dm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBSZW5kZXJTdHkKICAgICAgICAgc3R5bGUtPnNldEhlaWdodChkZXNjLT5t
aW4uaGVpZ2h0KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lRWZsOjpwYWludENoZWNrYm94KFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9i
amVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgQ2hlY2tCb3gsIGluZm8sIHJl
Y3QpOwogfQpAQCAtODA2LDcgKzgwNiw3IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFJh
ZGlvU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqCiAgICAg
ICAgIHN0eWxlLT5zZXRIZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZUVmbDo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFp
bnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmpl
Y3QsIFJhZGlvQnV0dG9uLCBpbmZvLCByZWN0KTsKIH0KQEAgLTgyMyw3ICs4MjMsNyBAQCB2b2lk
IFJlbmRlclRoZW1lRWZsOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZQogICAgICAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUs
IEJ1dHRvbik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50QnV0dG9uKFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Citib29sIFJlbmRlclRoZW1lRWZsOjpwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAg
IHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIEJ1dHRvbiwgaW5mbywgcmVjdCk7CiB9CkBA
IC04NDEsNyArODQxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxpc3RTdHls
ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHkKICAgICBzdHlsZS0+c2V0
TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWVFZmw6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVF
Zmw6OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gcGFpbnRUaGVt
ZVBhcnQob2JqZWN0LCBDb21ib0JveCwgaW5mbywgcmVjdCk7CiB9CkBAIC04NjIsNyArODYyLDcg
QEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW4KICAgICBhZGp1c3RNZW51TGlzdFN0eWxlKHN0eWxl
UmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFp
bnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZs
OjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBy
ZXR1cm4gcGFpbnRNZW51TGlzdChvYmplY3QsIGluZm8sIHJlY3QpOwogfQpAQCAtODc3LDcgKzg3
Nyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0CiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7
CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29s
IFJlbmRlclRoZW1lRWZsOjpwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJl
dHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFRleHRGaWVsZCwgaW5mbywgcmVjdCk7CiB9CkBA
IC04ODYsNyArODg2LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0VGV4dEFyZWFTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikKIHsKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZUVmbDo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUVm
bDo6cGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRleHRG
aWVsZChvYmplY3QsIGluZm8sIHJlY3QpOwogfQpAQCAtOTA4LDcgKzkwOCw3IEBAIHZvaWQgUmVu
ZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzCiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZGVjb3JhdGlvblNp
emUsIEZpeGVkKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRoZW1l
UGFydChvYmplY3QsIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbiwgaW5mbywgcmVjdCk7CiB9CkBA
IC05MzAsNyArOTMwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKgogICAgIHN0eWxlLT5zZXRI
ZWlnaHQoTGVuZ3RoKGRlY29yYXRpb25TaXplLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiti
b29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
KGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgU2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbiwgaW5mbywgcmVjdCk7CiB9CkBAIC05NTQsNyArOTU0
LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc28KICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0
aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lRWZsOjpw
YWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZs
OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0
LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0
dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgU2VhcmNoRmllbGRDYW5jZWxCdXR0b24sIGluZm8s
IHJlY3QpOwogfQpAQCAtOTcwLDcgKzk3MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVz
dFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyCiAg
ICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUVmbDo6
cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFy
Y2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmpl
Y3QsIFNlYXJjaEZpZWxkLCBpbmZvLCByZWN0KTsKIH0KQEAgLTk4NCw3ICs5ODQsNyBAQCB2b2lk
IFJlbmRlclRoZW1lRWZsOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBSZQogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgU3Bp
bm5lcik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50SW5uZXJTcGluQnV0dG9uKFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBS
ZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFNwaW5uZXIsIGlu
Zm8sIHJlY3QpOwogfQpAQCAtMTAyMiw5ICsxMDIyLDkgQEAgZG91YmxlIFJlbmRlclRoZW1lRWZs
OjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QK
ICAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0aW9u
RnJhbWVzICogMjsgLy8gIjIiIGZvciBiYWNrIGFuZCBmb3J0aDsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZUVmbDo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUVmbDo6
cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghb2JqZWN0LT5pc1By
b2dyZXNzKCkpCisgICAgaWYgKCFvYmplY3QuaXNQcm9ncmVzcygpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFByb2dyZXNzQmFyLCBp
bmZvLCByZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5k
ZXJUaGVtZUVmbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZs
LmgKaW5kZXggOWJhNjZjZTc0NDk1YWQ4N2Q5NTJjYzNmMzFiOWE3ZGFmN2U0ZmU4OC4uZDNlYzc1
NzFmNmZmMDdmN2YwOThjNTk0Zjk2YmI5Y2M1OTRkZTdlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmgKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNv
bnN0OwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRz
IHRpbnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCi0gICAgdmlydHVhbCBib29s
IGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25z
dDsKIAogICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRp
bmcgaXMgc3VwcG9ydGVkIGF0IGFsbC4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9s
VGludHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoK
ICAgICAvLyBBIG1ldGhvZCB0byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIGZvciBhICJs
ZWFmIiBjb250cm9sLiBUaGlzIHdpbGwgb25seSBiZSB1c2VkIGlmIGEgYmFzZWxpbmUKICAgICAv
LyBwb3NpdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgY2hpbGQgY29udGVu
dC4gQ2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucyBhcmUgZXhhbXBsZXMgb2YKICAgICAvLyBj
b250cm9scyB0aGF0IG5lZWQgdG8gZG8gdGhpcy4KLSAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBv
c2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGJhc2Vs
aW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIENv
bG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3Q7CkBAIC0xMTEsNDAgKzExMSw0MCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN5
c3RlbUZvbnQoQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CiAKICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
Ym9vbCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lk
IGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNv
cmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmll
bGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlk
ZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwogCkBAIC0xNTgsMTYgKzE1OCwxNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNEYXRhTGlzdFVJKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5C
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwogCiAgICAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdEZvbnRTaXplKGludCBmb250c2l6ZSk7
CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZv
clByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUg
YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Owog
I2VuZGlmCkBAIC0yMDAsOCArMjAwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGx5UGFydERl
c2NyaXB0aW9uc0Zyb20oY29uc3QgU3RyaW5nJiB0aGVtZVBhdGgpOwogCiAgICAgdm9pZCBhcHBs
eUVkamVTdGF0ZUZyb21Gb3JtKEV2YXNfT2JqZWN0KiwgY29uc3QgQ29udHJvbFN0YXRlcyosIGJv
b2wpOwotICAgIHZvaWQgYXBwbHlFZGplUlRMU3RhdGUoRXZhc19PYmplY3QqLCBSZW5kZXJPYmpl
Y3QqLCBGb3JtVHlwZSwgY29uc3QgSW50UmVjdCYpOwotICAgIGJvb2wgcGFpbnRUaGVtZVBhcnQo
UmVuZGVyT2JqZWN0KiwgRm9ybVR5cGUsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2b2lkIGFwcGx5RWRqZVJUTFN0YXRlKEV2YXNfT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0JiwgRm9ybVR5cGUsIGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIHBhaW50VGhlbWVQ
YXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIEZvcm1UeXBlLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CiAKICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgQ29sb3IgbV9hY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR3RrLmNwcAppbmRleCA4ZDA2OWI1YjAyMjEzNDI5YWQ0MjcyYmY1NzQ3MzVmZjY0
NzVmZTJlLi4wMjBmZTRhYjM4ODI3YmM0YzNjMzA0ZGZhZjEwNGM1MGViZDkyZmFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKQEAgLTY1LDkg
KzY1LDkgQEAgZXh0ZXJuIEdSZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9ja0ljb25Gb3JXaWRnZXRU
eXBlKEdUeXBlLCBjb25zdCBjaGFyKiBpY29uTmFtZSwKIGV4dGVybiBHUmVmUHRyPEdka1BpeGJ1
Zj4gZ2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5cGUsIGNv
bnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIqIGZhbGxiYWNrU3RvY2tJY29u
TmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQgc3RhdGUsIGdpbnQgaWNvblNpemUpOwogCiAjaWYg
RU5BQkxFKFZJREVPKQotc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIGdldE1lZGlhRWxlbWVudEZy
b21SZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiBvKQorc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQq
IGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3QoY29uc3QgUmVuZGVyT2JqZWN0JiBvKQog
ewotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IG8ubm9kZSgp
OwogICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUgPyBub2RlLT5zaGFkb3dIb3N0KCkgOiAwOwog
ICAgIGlmICghbWVkaWFOb2RlKQogICAgICAgICBtZWRpYU5vZGUgPSBub2RlOwpAQCAtMTczLDIw
ICsxNzMsMjAgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxl
LT5hcHBlYXJhbmNlKCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpjb250cm9sU3VwcG9y
dHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lR3Rr
Ojpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGlzRW5hYmxlZChvKTsKIH0KIAotaW50IFJlbmRlclRoZW1lR3RrOjpiYXNlbGlu
ZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0
azo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAg
aWYgKCFvLT5pc0JveCgpKQorICAgIGlmICghby5pc0JveCgpKQogICAgICAgICByZXR1cm4gMDsK
IAogICAgIC8vIEZJWE1FOiBUaGlzIHN0cmF0ZWd5IGlzIHBvc3NpYmx5IGluY29ycmVjdCBmb3Ig
dGhlIEdUSysgcG9ydC4KLSAgICBpZiAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2ti
b3hQYXJ0Ci0gICAgICAgIHx8IG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkg
ewotICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KG8pOworICAgIGlm
IChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydAorICAgICAgICB8fCBvLnN0
eWxlKCkuYXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkgeworICAgICAgICBjb25zdCBSZW5kZXJC
b3gqIGJveCA9IHRvUmVuZGVyQm94KCZvKTsKICAgICAgICAgcmV0dXJuIGJveC0+bWFyZ2luVG9w
KCkgKyBib3gtPmhlaWdodCgpIC0gMjsKICAgICB9CiAKQEAgLTIwOCw3ICsyMDgsNyBAQCBHdGtU
ZXh0RGlyZWN0aW9uIGd0a1RleHREaXJlY3Rpb24oVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiAg
ICAgfQogfQogCi1zdGF0aWMgR3RrU3RhdGVUeXBlIGd0a0ljb25TdGF0ZShSZW5kZXJUaGVtZSog
dGhlbWUsIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0KQorc3RhdGljIEd0a1N0YXRlVHlwZSBn
dGtJY29uU3RhdGUoUmVuZGVyVGhlbWUqIHRoZW1lLCBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
ck9iamVjdCkKIHsKICAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSkKICAg
ICAgICAgcmV0dXJuIEdUS19TVEFURV9JTlNFTlNJVElWRTsKQEAgLTI0MSwxMiArMjQxLDEyIEBA
IHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgUmVuCiAgICAgYWRqdXN0TWVudUxpc3RTdHlsZShzdHlsZVJl
c29sdmVyLCBzdHlsZSwgZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxp
c3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRN
ZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25z
dCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBh
aW50TWVudUxpc3Qob2JqZWN0LCBpbmZvLCByZWN0KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEFyZWEoY29uc3Qg
UmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCiB7
CiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwogfQpAQCAtMjk4LDcgKzI5OCw3
IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzCiAgICAgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBj
b25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBh
aW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQobywgaSwgcmVjdCk7CiB9CkBAIC0z
MjYsMTIgKzMyNiwxMiBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLAogICAgIGFkanVzdFNlYXJj
aEZpZWxkSWNvblN0eWxlKHN0eWxlKTsKIH0KIAotc3RhdGljIEludFJlY3QgY2VudGVyUmVjdFZl
cnRpY2FsbHlJblBhcmVudElucHV0RWxlbWVudChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyBJbnRSZWN0IGNlbnRlclJlY3RWZXJ0aWNhbGx5
SW5QYXJlbnRJbnB1dEVsZW1lbnQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgLy8gR2V0IHRoZSByZW5kZXJlciBvZiA8aW5wdXQ+
IGVsZW1lbnQuCi0gICAgTm9kZSogaW5wdXQgPSByZW5kZXJPYmplY3QtPm5vZGUoKS0+c2hhZG93
SG9zdCgpOworICAgIE5vZGUqIGlucHV0ID0gcmVuZGVyT2JqZWN0Lm5vZGUoKS0+c2hhZG93SG9z
dCgpOwogICAgIGlmICghaW5wdXQpCi0gICAgICAgIGlucHV0ID0gcmVuZGVyT2JqZWN0LT5ub2Rl
KCk7CisgICAgICAgIGlucHV0ID0gcmVuZGVyT2JqZWN0Lm5vZGUoKTsKICAgICBpZiAoIWlucHV0
LT5yZW5kZXJlcigpLT5pc0JveCgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCkBAIC0z
NDYsMTYgKzM0NiwxNiBAQCBzdGF0aWMgSW50UmVjdCBjZW50ZXJSZWN0VmVydGljYWxseUluUGFy
ZW50SW5wdXRFbGVtZW50KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZQogICAgIHJldHVybiBzY2Fs
ZWRSZWN0OwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIEludFJlY3QgaWNvblJlY3QgPSBjZW50ZXJSZWN0VmVydGljYWxseUlu
UGFyZW50SW5wdXRFbGVtZW50KHJlbmRlck9iamVjdCwgcmVjdCk7CiAgICAgaWYgKGljb25SZWN0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR1JlZlB0cjxHZGtQaXhi
dWY+IGljb24gPSBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtf
U1RPQ0tfRklORCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkuZGlyZWN0
aW9uKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SWNvblNpemVGb3JQ
aXhlbFNpemUocmVjdC5oZWlnaHQoKSkpOworICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRl
ck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSwKKyAgICAgICAgZ3RrSWNvblN0YXRlKHRoaXMs
IHJlbmRlck9iamVjdCksCisgICAgICAgIGdldEljb25TaXplRm9yUGl4ZWxTaXplKHJlY3QuaGVp
Z2h0KCkpKTsKICAgICBwYWludEdka1BpeGJ1ZihwYWludEluZm8uY29udGV4dCwgaWNvbi5nZXQo
KSwgaWNvblJlY3QpOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTM2NSwxNiArMzY1LDE2IEBA
IHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0CiAgICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUo
c3R5bGUpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIElu
dFJlY3QgaWNvblJlY3QgPSBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50
KHJlbmRlck9iamVjdCwgcmVjdCk7CiAgICAgaWYgKGljb25SZWN0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24gPSBnZXRTdG9j
a0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tfQ0xFQVIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a1Rl
eHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLmRpcmVjdGlvbigpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrSWNvblN0
YXRlKHRoaXMsIHJlbmRlck9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdldEljb25TaXplRm9yUGl4ZWxTaXplKHJlY3QuaGVp
Z2h0KCkpKTsKKyAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5k
aXJlY3Rpb24oKSksCisgICAgICAgIGd0a0ljb25TdGF0ZSh0aGlzLCByZW5kZXJPYmplY3QpLAor
ICAgICAgICBnZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShyZWN0LmhlaWdodCgpKSk7CiAgICAgcGFp
bnRHZGtQaXhidWYocGFpbnRJbmZvLmNvbnRleHQsIGljb24uZ2V0KCksIGljb25SZWN0KTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CkBAIC0zODYsMTIgKzM4NiwxMiBAQCB2b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSog
c3R5bGUsCiAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5l
SGVpZ2h0KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1
cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcmVjdCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
ck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgLy8gVGhlIG90aGVyIHBhaW50IG1ldGhvZHMgZG9uJ3QgbmVlZCB0byBjaGVjayB3
aGV0aGVyIHBhaW50aW5nIGlzIGRpc2FibGVkIGJlY2F1c2UgUmVuZGVyVGhlbWUgYWxyZWFkeSBj
aGVja3MgaXQKICAgICAvLyBiZWZvcmUgY2FsbGluZyB0aGVtLCBidXQgcGFpbnRDYXBzTG9ja0lu
ZGljYXRvcigpIGlzIGNhbGxlZCBieSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUgd2hpY2gg
ZG9lc24ndCBjaGVjayBpdC4KQEAgLTM5OSw5ICszOTksNyBAQCBib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25z
dCBQYQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGludCBpY29uU2l6ZSA9IHN0ZDo6bWlu
KHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgR1JlZlB0cjxHZGtQaXhidWY+IGlj
b24gPSBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tf
Q0FQU19MT0NLX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgp
LmRpcmVjdGlvbigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgZ2V0SWNvblNpemVGb3JQaXhlbFNpemUoaWNvblNpemUpKTsKKyAg
ICBHUmVmUHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1RL
X1RZUEVfRU5UUlksIEdUS19TVE9DS19DQVBTX0xPQ0tfV0FSTklORywgZ3RrVGV4dERpcmVjdGlv
bihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSksIDAsIGdldEljb25TaXplRm9yUGl4
ZWxTaXplKGljb25TaXplKSk7CiAKICAgICAvLyBPbmx5IHJlLXNjYWxlIHRoZSBpY29uIHdoZW4g
aXQncyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gaWNvbiBzaXplLgogICAgIGlmIChpY29uU2l6
ZSA+PSBndGtJY29uU2l6ZU1lbnUpCkBAIC01MDUsMTMgKzUwMywxMyBAQCBTdHJpbmcgUmVuZGVy
VGhlbWVHdGs6OmV4dHJhRnVsbFNjcmVlblN0eWxlU2hlZXQoKQogfQogI2VuZGlmCiAKLWJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
Y2hhciogc3ltYm9saWNJY29uTmFtZSwgY29uc3QgY2hhciogZmFsbGJhY2tTdG9ja0ljb25OYW1l
KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUJ1dHRvbihjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlck9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBjaGFyKiBzeW1ib2xpY0ljb25OYW1lLCBjb25zdCBjaGFyKiBmYWxsYmFj
a1N0b2NrSWNvbk5hbWUpCiB7CiAgICAgSW50UmVjdCBpY29uUmVjdChyZWN0LngoKSArIChyZWN0
LndpZHRoKCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKICAgICAgICAgICAgICAgICAgICAgIHJl
Y3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKICAgICAgICAg
ICAgICAgICAgICAgIG1fbWVkaWFJY29uU2l6ZSwgbV9tZWRpYUljb25TaXplKTsKICAgICBHUmVm
UHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrU3ltYm9saWNJY29uRm9yV2lkZ2V0VHlwZShH
VEtfVFlQRV9DT05UQUlORVIsIHN5bWJvbGljSWNvbk5hbWUsIGZhbGxiYWNrU3RvY2tJY29uTmFt
ZSwKLSAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkuZGlyZWN0
aW9uKCkpLCBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwgaWNvblJlY3Qud2lkdGgo
KSk7CisgICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0
aW9uKCkpLCBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwgaWNvblJlY3Qud2lkdGgo
KSk7CiAgICAgcGFpbnRHZGtQaXhidWYoY29udGV4dCwgaWNvbi5nZXQoKSwgaWNvblJlY3QpOwog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTIxLDEyICs1MTksMTIgQEAgYm9vbCBSZW5kZXJUaGVt
ZUd0azo6aGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKENvbnRyb2xQYXJ0IHBhcnQpIGNv
bnN0CiAgICAgcmV0dXJuIChwYXJ0ICE9IE1lZGlhTXV0ZUJ1dHRvblBhcnQpOwogfQogCi1ib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3Qq
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24o
cmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwgInZpZXctZnVsbHNjcmVlbi1z
eW1ib2xpYyIsIEdUS19TVE9DS19GVUxMU0NSRUVOKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRNZWRpYU11dGVCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQog
ewogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IGdldE1lZGlhRWxlbWVudEZy
b21SZW5kZXJPYmplY3QocmVuZGVyT2JqZWN0KTsKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKQEAg
LTUzOCw5ICs1MzYsOSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhTXV0ZUJ1dHRv
bihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbgogICAgICAgICBtdXRlZCA/
ICJhdWRpby12b2x1bWUtbXV0ZWQiIDogImF1ZGlvLXZvbHVtZS1oaWdoIik7CiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
K2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFQbGF5QnV0dG9uKGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKLSAgICBOb2RlKiBub2RlID0gcmVuZGVyT2JqZWN0LT5ub2RlKCk7Cisg
ICAgTm9kZSogbm9kZSA9IHJlbmRlck9iamVjdC5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTU1MywyNiArNTUxLDI2IEBAIGJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBj
b25zdCBQYWluCiAgICAgICAgIHNob3dQbGF5QnV0dG9uID8gR1RLX1NUT0NLX01FRElBX1BMQVkg
OiBHVEtfU1RPQ0tfTUVESUFfUEFVU0UpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKICAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5j
b250ZXh0LCByZWN0LCAibWVkaWEtc2Vlay1iYWNrd2FyZC1zeW1ib2xpYyIsIEdUS19TVE9DS19N
RURJQV9SRVdJTkQpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2Vla0Zv
cndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAg
ICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0
LCByZWN0LCAibWVkaWEtc2Vlay1mb3J3YXJkLXN5bWJvbGljIiwgR1RLX1NUT0NLX01FRElBX0ZP
UldBUkQpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFUb2dnbGVDbG9zZWRDYXB0aW9uc0J1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgSW50UmVjdCBpY29uUmVjdChy
ZWN0LngoKSArIChyZWN0LndpZHRoKCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwgcmVjdC55KCkg
KyAocmVjdC5oZWlnaHQoKSAtIG1fbWVkaWFJY29uU2l6ZSkgLyAyLAogICAgICAgICBtX21lZGlh
SWNvblNpemUsIG1fbWVkaWFJY29uU2l6ZSk7CiAgICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24g
PSBnZXRTdG9ja1N5bWJvbGljSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZUEVfQ09OVEFJTkVSLCAi
bWVkaWEtdmlldy1zdWJ0aXRsZXMtc3ltYm9saWMiLCBudWxscHRyLAotICAgICAgICBndGtUZXh0
RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS5kaXJlY3Rpb24oKSksIGd0a0ljb25TdGF0
ZSh0aGlzLCByZW5kZXJPYmplY3QpLCBpY29uUmVjdC53aWR0aCgpKTsKKyAgICAgICAgZ3RrVGV4
dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSksIGd0a0ljb25TdGF0
ZSh0aGlzLCByZW5kZXJPYmplY3QpLCBpY29uUmVjdC53aWR0aCgpKTsKICAgICBpZiAoIWljb24p
CiAgICAgICAgIGljb24gPSBnZXRTdG9ja1N5bWJvbGljSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZ
UEVfQ09OVEFJTkVSLCAidXNlci1pbnZpc2libGUtc3ltYm9saWMiLCBHVEtfU1RPQ0tfSlVTVElG
WV9GSUxMLAotICAgICAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxl
KCkuZGlyZWN0aW9uKCkpLCBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwgaWNvblJl
Y3Qud2lkdGgoKSk7CisgICAgICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5z
dHlsZSgpLmRpcmVjdGlvbigpKSwgZ3RrSWNvblN0YXRlKHRoaXMsIHJlbmRlck9iamVjdCksIGlj
b25SZWN0LndpZHRoKCkpOwogICAgIHBhaW50R2RrUGl4YnVmKHBhaW50SW5mby5jb250ZXh0LCBp
Y29uLmdldCgpLCBpY29uUmVjdCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01ODcsOSArNTg1
LDkgQEAgc3RhdGljIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpIGJvcmRlclJhZGlpRnJvbVN0eWxl
KFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICAgICAgSW50U2l6ZShzdHlsZS0+Ym9yZGVyQm90dG9t
UmlnaHRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLT5ib3JkZXJCb3R0b21SaWdo
dFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dE1lZGlhU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQoKm8pOworICAgIEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudChvKTsKICAgICBpZiAoIW1lZGlh
RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01OTksNyArNTk3LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWkKIAogICAgIGZsb2F0IG1lZGlhRHVyYXRpb24gPSBtZWRpYUVs
ZW1lbnQtPmR1cmF0aW9uKCk7CiAgICAgZmxvYXQgdG90YWxUcmFja1dpZHRoID0gci53aWR0aCgp
OwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZvLT5zdHlsZSgpOworICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9ICZvLnN0eWxlKCk7CiAgICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMg
PSBtZWRpYUVsZW1lbnQtPmJ1ZmZlcmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgdGltZVJhbmdlcy0+bGVuZ3RoKCk7ICsraW5kZXgpIHsKICAgICAgICAgZmxvYXQg
c3RhcnQgPSB0aW1lUmFuZ2VzLT5zdGFydChpbmRleCwgSUdOT1JFX0VYQ0VQVElPTik7CkBAIC02
MjAsMjEgKzYxOCwyMSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJh
Y2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
Citib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoY29uc3QgUmVuZGVy
T2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikK
IHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmby0+c3R5bGUoKTsKKyAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSAmby5zdHlsZSgpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUm91bmRl
ZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChyLCBib3JkZXJSYWRpaUZyb21TdHlsZShzdHlsZSkpLCBz
dHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS0+Y29s
b3JTcGFjZSgpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlh
Vm9sdW1lU2xpZGVyQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQoKnJlbmRlck9iamVjdCk7CisgICAgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHJlbmRlck9iamVjdCk7CiAg
ICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC02NDgsNyAr
NjQ2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNr
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb24KIAogICAgIGludCByZWN0SGVpZ2h0ID0g
cmVjdC5oZWlnaHQoKTsKICAgICBmbG9hdCB0cmFja0hlaWdodCA9IHJlY3RIZWlnaHQgKiB2b2x1
bWU7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gJnJlbmRlck9iamVjdC0+c3R5bGUoKTsKKyAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmcmVuZGVyT2JqZWN0LnN0eWxlKCk7CiAgICAgSW50UmVj
dCB2b2x1bWVSZWN0KHJlY3QpOwogICAgIHZvbHVtZVJlY3QubW92ZSgwLCByZWN0SGVpZ2h0IC0g
dHJhY2tIZWlnaHQpOwogICAgIHZvbHVtZVJlY3Quc2V0SGVpZ2h0KGNlaWwodHJhY2tIZWlnaHQp
KTsKQEAgLTY2MCw3ICs2NTgsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9s
dW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbgogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRodW1iKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVk
aWFWb2x1bWVTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0
dXJuIHBhaW50TWVkaWFTbGlkZXJUaHVtYihyZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7
CiB9CkBAIC02NzAsNyArNjY4LDcgQEAgU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpmb3JtYXRNZWRp
YUNvbnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGQKICAgICByZXR1
cm4gZm9ybWF0TWVkaWFDb250cm9sc1RpbWUoY3VycmVudFRpbWUpICsgIiAvICIgKyBmb3JtYXRN
ZWRpYUNvbnRyb2xzVGltZShkdXJhdGlvbik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFDdXJyZW50VGltZShj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKIHsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC02OTYsMTMgKzY5NCwxMyBAQCBkb3VibGUgUmVuZGVy
VGhlbWVHdGs6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mq
KSBjb25zdAogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsICogcHJvZ3Jlc3NB
bmltYXRpb25GcmFtZXMgKiAyOyAvLyAiMiIgZm9yIGJhY2sgYW5kIGZvcnRoOwogfQogCi1JbnRS
ZWN0IFJlbmRlclRoZW1lR3RrOjpjYWxjdWxhdGVQcm9ncmVzc1JlY3QoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJPYmplY3QsIGNvbnN0IEludFJlY3QmIGZ1bGxCYXJSZWN0KQorSW50UmVjdCBSZW5kZXJU
aGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
T2JqZWN0LCBjb25zdCBJbnRSZWN0JiBmdWxsQmFyUmVjdCkKIHsKICAgICBJbnRSZWN0IHByb2dy
ZXNzUmVjdChmdWxsQmFyUmVjdCk7Ci0gICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNz
ID0gdG9SZW5kZXJQcm9ncmVzcyhyZW5kZXJPYmplY3QpOworICAgIGNvbnN0IFJlbmRlclByb2dy
ZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3MoJnJlbmRlck9iamVjdCk7CiAg
ICAgaWYgKHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCkpIHsKICAgICAgICAgaW50IHBy
b2dyZXNzV2lkdGggPSBwcm9ncmVzc1JlY3Qud2lkdGgoKSAqIHJlbmRlclByb2dyZXNzLT5wb3Np
dGlvbigpOwotICAgICAgICBpZiAocmVuZGVyT2JqZWN0LT5zdHlsZSgpLmRpcmVjdGlvbigpID09
IFJUTCkKKyAgICAgICAgaWYgKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpID09IFJU
TCkKICAgICAgICAgICAgIHByb2dyZXNzUmVjdC5zZXRYKHByb2dyZXNzUmVjdC54KCkgKyBwcm9n
cmVzc1JlY3Qud2lkdGgoKSAtIHByb2dyZXNzV2lkdGgpOwogICAgICAgICBwcm9ncmVzc1JlY3Qu
c2V0V2lkdGgocHJvZ3Jlc3NXaWR0aCk7CiAgICAgICAgIHJldHVybiBwcm9ncmVzc1JlY3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCmluZGV4IGIxNzA3
ZjRiMmQxMWIyZDI2NDc4ZTBjOGFhYWM1N2YxYWUxM2FiNDQuLjFjYTUwMjA1YzQxNmU4OWFlMTI0
OTMzNzlkZjUyM2M4NDQyYWRiZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9SZW5kZXJUaGVtZUd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0ay5oCkBAIC01MCwxNyArNTAsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAg
Ly8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0
aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCi0gICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBw
b3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBj
b250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKIAogICAgIC8v
IEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMgc3VwcG9y
dGVkIGF0IGFsbC4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3Qo
Y29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RS
ZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QmLCBJbnRSZWN0Jik7CiAKICAgICAvLyBBIG1l
dGhvZCB0byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIGZvciBhICJsZWFmIiBjb250cm9s
LiAgVGhpcyB3aWxsIG9ubHkgYmUgdXNlZCBpZiBhIGJhc2VsaW5lCiAgICAgLy8gcG9zaXRpb24g
Y2Fubm90IGJlIGRldGVybWluZWQgYnkgZXhhbWluaW5nIGNoaWxkIGNvbnRlbnQuIENoZWNrYm94
ZXMgYW5kIHJhZGlvIGJ1dHRvbnMgYXJlIGV4YW1wbGVzIG9mCiAgICAgLy8gY29udHJvbHMgdGhh
dCBuZWVkIHRvIGRvIHRoaXMuCi0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25z
dCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9u
KGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OwogCiAgICAgLy8gVGhlIHBsYXRmb3JtIHNlbGVj
dGlvbiBjb2xvci4KICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkgY29uc3Q7CkBAIC0xMTQsMTcgKzExNCwxNyBAQCBwdWJsaWM6CiAjZW5k
aWYKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXpl
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAg
IHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAg
ICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0OwogICAg
IGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Q7CkBAIC0x
MzcsMjUgKzEzNywyNSBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gd2UgZG9uJ3QgbWFpbnRhaW4gdGhp
cyBkaWZmZXJlbnRpYXRpb24uCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmly
dHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKQEAgLTE2NCwxOSArMTY0LDE5
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGluaXRNZWRpYUNvbG9ycygpOwogICAgIHZvaWQgaW5p
dE1lZGlhQnV0dG9ucygpOwogICAgIHZpcnR1YWwgYm9vbCBoYXNPd25EaXNhYmxlZFN0YXRlSGFu
ZGxpbmdGb3IoQ29udHJvbFBhcnQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlh
RnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0JhY2tCdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1i
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1
bGxzY3JlZW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYVNlZWtCYWNrQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtGb3J3YXJk
QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRyYWNrKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYVNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZv
bHVtZVNsaWRlckNvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlk
ZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFDdXJyZW50VGltZShjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24oY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogI2VuZGlmCiAj
ZW5kaWYKIApAQCAtMTg0LDEzICsxODQsMTMgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgZG91
YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mq
KSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNz
QmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dy
ZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9n
cmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9y
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVh
bCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmlu
ZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZvbnQmLCBpbnQg
d2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMjAw
LDExICsyMDAsMTEgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgZG91YmxlIGdldFNjcmVlbkRQSSgp
OwogCiAjaWYgRU5BQkxFKFZJREVPKQotICAgIGJvb2wgcGFpbnRNZWRpYUJ1dHRvbihSZW5kZXJP
YmplY3QqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgY2hhciogc3lt
Ym9saWNJY29uTmFtZSwgY29uc3QgY2hhciogZmFsbGJhY2tTdG9ja0ljb25OYW1lKTsKKyAgICBi
b29sIHBhaW50TWVkaWFCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNo
YXIqIGZhbGxiYWNrU3RvY2tJY29uTmFtZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQUk9HUkVT
U19FTEVNRU5UKQotICAgIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVByb2dyZXNzUmVjdChSZW5k
ZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRl
UHJvZ3Jlc3NSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRp
ZgogCiAgICAgbXV0YWJsZSBDb2xvciBtX3BhbmVsQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwCmluZGV4IGE5YjM4OGM4MmU4ZTVhODZl
NjliNTBjOTM3YzBkOWJjMTdmMWRlNmEuLjQ3MDI5OWY3NDVmYzIwMmE2NzJkYTA5NTZkZjJkODdl
NDc4MmViNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJU
aGVtZUd0azIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0azIuY3BwCkBAIC0xMTAsOSArMTEwLDkgQEAgc3RhdGljIHZvaWQgYWRqdXN0UmVjdEZvckZv
Y3VzKEd0a1dpZGdldCogd2lkZ2V0LCBJbnRSZWN0JiByZWN0LCBib29sIGlnbm9yZUludGUKICAg
ICByZWN0LmluZmxhdGUoZm9jdXNXaWR0aCArIGZvY3VzUGFkKTsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIEludFJlY3QmIHJlY3QpCit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RSZXBhaW50UmVj
dChjb25zdCBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgSW50UmVjdCYgcmVjdCkK
IHsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpLmFwcGVhcmFu
Y2UoKTsKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LnN0eWxlKCkuYXBwZWFy
YW5jZSgpOwogICAgIHN3aXRjaCAocGFydCkgewogICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgogICAg
IGNhc2UgUmFkaW9QYXJ0OiB7CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIElu
dFJlY3QKICAgICB9CiB9CiAKLXN0YXRpYyBHdGtTdGF0ZVR5cGUgZ2V0R3RrU3RhdGVUeXBlKFJl
bmRlclRoZW1lR3RrKiB0aGVtZSwgUmVuZGVyT2JqZWN0KiBvYmplY3QpCitzdGF0aWMgR3RrU3Rh
dGVUeXBlIGdldEd0a1N0YXRlVHlwZShSZW5kZXJUaGVtZUd0ayogdGhlbWUsIGNvbnN0IFJlbmRl
ck9iamVjdCYgb2JqZWN0KQogewogICAgIGlmICghdGhlbWUtPmlzRW5hYmxlZChvYmplY3QpIHx8
IHRoZW1lLT5pc1JlYWRPbmx5Q29udHJvbChvYmplY3QpKQogICAgICAgICByZXR1cm4gR1RLX1NU
QVRFX0lOU0VOU0lUSVZFOwpAQCAtMTU2LDE0ICsxNTYsMTQgQEAgc3RhdGljIHZvaWQgc2V0VG9n
Z2xlU2l6ZShjb25zdCBSZW5kZXJUaGVtZUd0ayosIFJlbmRlclN0eWxlKiBzdHlsZSwgR3RrV2lk
Z2V0KgogICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhl
ZCkpOwogfQogCi1zdGF0aWMgdm9pZCBwYWludFRvZ2dsZShSZW5kZXJUaGVtZUd0ayogdGhlbWUs
IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0KQorc3RhdGljIHZvaWQgcGFpbnRUb2dn
bGUoUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQq
IHdpZGdldCkKIHsKICAgICAvLyBXZSBkbyBub3QgY2FsbCBndGtfdG9nZ2xlX2J1dHRvbl9zZXRf
YWN0aXZlIGhlcmUsIGJlY2F1c2Ugc29tZSB0aGVtZXMgYmVnaW4gYSBzZXJpZXMgb2YKICAgICAv
LyBhbmltYXRpb24gZnJhbWVzIGluIGEgInRvZ2dsZWQiIHNpZ25hbCBoYW5kbGVyLiBUaGlzIHB1
dHMgc29tZSBjaGVja2JveGVzIGluIGEgaGFsZi13YXkKICAgICAvLyBjaGVja2VkIHN0YXRlLiBF
dmVyeSBHVEsrIHRoZW1lIEkgdGVzdGVkIG1lcmVseSBsb29rcyBhdCB0aGUgc2hhZG93IHR5cGUg
KGFuZCBub3QgdGhlCiAgICAgLy8gJ2FjdGl2ZScgcHJvcGVydHkpIHRvIGRldGVybWluZSB3aGV0
aGVyIG9yIG5vdCB0byBkcmF3IHRoZSBjaGVjay4KICAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRp
dmUod2lkZ2V0LCB0aGVtZS0+aXNFbmFibGVkKHJlbmRlck9iamVjdCkgJiYgIXRoZW1lLT5pc1Jl
YWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKTsKLSAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rp
b24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS5kaXJlY3Rp
b24oKSkpOworICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJl
Y3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsKIAogICAgIGJvb2wgaW5k
ZXRlcm1pbmF0ZSA9IHRoZW1lLT5pc0luZGV0ZXJtaW5hdGUocmVuZGVyT2JqZWN0KTsKICAgICBn
dGtfdG9nZ2xlX2J1dHRvbl9zZXRfaW5jb25zaXN0ZW50KEdUS19UT0dHTEVfQlVUVE9OKHdpZGdl
dCksIGluZGV0ZXJtaW5hdGUpOwpAQCAtMTk4LDcgKzE5OCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVH
dGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAgICAgc2V0VG9n
Z2xlU2l6ZSh0aGlzLCBzdHlsZSwgZ3RrQ2hlY2tCdXR0b24oKSk7CiB9CiAKLWJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBwYWludFRvZ2ds
ZSh0aGlzLCByZW5kZXJPYmplY3QsIGluZm8sIHJlY3QsIGd0a0NoZWNrQnV0dG9uKCkpOwogICAg
IHJldHVybiBmYWxzZTsKQEAgLTIwOSw3ICsyMDksNyBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjpz
ZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHNldFRvZ2dsZVNpemUo
dGhpcywgc3R5bGUsIGd0a1JhZGlvQnV0dG9uKCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8m
IGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJh
ZGlvKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGlu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcGFpbnRUb2dnbGUodGhpcywgcmVuZGVy
T2JqZWN0LCBpbmZvLCByZWN0LCBndGtSYWRpb0J1dHRvbigpKTsKICAgICByZXR1cm4gZmFsc2U7
CkBAIC0yMjcsNyArMjI3LDcgQEAgc3RhdGljIHZvaWQgc2V0V2lkZ2V0SGFzRm9jdXMoR3RrV2lk
Z2V0KiB3aWRnZXQsIGdib29sZWFuIGhhc0ZvY3VzKQogICAgICAgICBHVEtfV0lER0VUX1VOU0VU
X0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjM4LDcgKzIzOCw3IEBAIGJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIGluZm8sIGNvCiAKICAgICBHdGtTdGF0ZVR5cGUgc3RhdGUgPSBnZXRHdGtTdGF0ZVR5cGUo
dGhpcywgb2JqZWN0KTsKICAgICBndGtfd2lkZ2V0X3NldF9zdGF0ZSh3aWRnZXQsIHN0YXRlKTsK
LSAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKG9i
amVjdC0+c3R5bGUoKS5kaXJlY3Rpb24oKSkpOworICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlv
bih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsK
IAogICAgIGlmIChpc0ZvY3VzZWQob2JqZWN0KSkgewogICAgICAgICBzZXRXaWRnZXRIYXNGb2N1
cyh3aWRnZXQsIFRSVUUpOwpAQCAtMzY1LDcgKzM2NSw3IEBAIGludCBSZW5kZXJUaGVtZUd0azo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAg
IHJldHVybiBib3R0b207CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3Qo
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVy
T2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKICAgICBpZiAocGFpbnRCdXR0b24ob2JqZWN0LCBpbmZvLCByZWN0KSkKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0zNzgsNyArMzc4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLAog
CiAgICAgaW50IGxlZnRCb3JkZXIgPSAwLCByaWdodEJvcmRlciA9IDAsIGJvdHRvbUJvcmRlciA9
IDAsIHRvcEJvcmRlciA9IDA7CiAgICAgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoZ3RrQ29tYm9Cb3hC
dXR0b24oKSwgbGVmdEJvcmRlciwgdG9wQm9yZGVyLCByaWdodEJvcmRlciwgYm90dG9tQm9yZGVy
KTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmb2JqZWN0LT5zdHlsZSgpOworICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9ICZvYmplY3Quc3R5bGUoKTsKICAgICBpbnQgYXJyb3dTaXplID0gY29t
Ym9Cb3hBcnJvd1NpemUoc3R5bGUpOwogICAgIEd0a1N0eWxlKiBidXR0b25TdHlsZSA9IGd0a193
aWRnZXRfZ2V0X3N0eWxlKGd0a0NvbWJvQm94QnV0dG9uKCkpOwogCkBAIC00MjIsMTQgKzQyMiwx
NCBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBH
dGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7CiAKICAgICBib29sIGVuYWJsZWQgPSBpc0Vu
YWJsZWQocmVuZGVyT2JqZWN0KSAmJiAhaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KTsK
ICAgICBHdGtTdGF0ZVR5cGUgYmFja2dyb3VuZFN0YXRlID0gZW5hYmxlZCA/IEdUS19TVEFURV9O
T1JNQUwgOiBHVEtfU1RBVEVfSU5TRU5TSVRJVkU7CiAgICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0
aXZlKHdpZGdldCwgZW5hYmxlZCk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdl
dCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsK
KyAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKHJl
bmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSk7CiAgICAgc2V0V2lkZ2V0SGFzRm9jdXMo
d2lkZ2V0LCBpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSk7CiAKICAgICBXaWRnZXRSZW5kZXJpbmdD
b250ZXh0IHdpZGdldENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0KTsKQEAgLTQ2NSwxMiArNDY1
LDEyIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCog
cmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBj
b25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGlu
Zm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBDb250cm9sUGFydCBwYXJ0ID0gb2JqZWN0LT5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKKyAg
ICBDb250cm9sUGFydCBwYXJ0ID0gb2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpOwogICAgIEFT
U0VSVChwYXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVmVydGlj
YWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KTsKIAogICAgIC8vIFdlIHNo
cmluayB0aGUgdHJvdWdoIHJlY3Qgc2xpZ2h0bHkgdG8gbWFrZSByb29tIGZvciB0aGUgZm9jdXMg
aW5kaWNhdG9yLgpAQCAtNDgzLDcgKzQ4Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mCiAg
ICAgICAgIHdpZGdldCA9IGd0a1ZTY2FsZSgpOwogICAgICAgICB0cm91Z2hSZWN0LmluZmxhdGVZ
KC1ndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT55dGhpY2tuZXNzKTsKICAgICB9Ci0gICAg
Z3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihvYmplY3Qt
PnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsKKyAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lk
Z2V0LCBndGtUZXh0RGlyZWN0aW9uKG9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSk7CiAKICAg
ICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0
KTsKICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KHRyb3VnaFJlY3QsIHdpZGdldCwgR1RL
X1NUQVRFX0FDVElWRSwgR1RLX1NIQURPV19PVVQsICJ0cm91Z2giKTsKQEAgLTQ5MywxMiArNDkz
LDEyIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBj
b25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGlu
Zm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBDb250cm9sUGFydCBwYXJ0ID0gb2JqZWN0LT5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKKyAg
ICBDb250cm9sUGFydCBwYXJ0ID0gb2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpOwogICAgIEFT
U0VSVChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJU
aHVtYlZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsK
IAogICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gMDsKQEAgLTUxMyw3ICs1MTMsNyBAQCBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25z
dCBQYWludEluZm8mIGluZgogICAgICAgICBkZXRhaWwgPSAidnNjYWxlIjsKICAgICAgICAgb3Jp
ZW50YXRpb24gPSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUw7CiAgICAgfQotICAgIGd0a193aWRn
ZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgp
LmRpcmVjdGlvbigpKSk7CisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3Rr
VGV4dERpcmVjdGlvbihvYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwogCiAgICAgLy8gT25s
eSBzb21lIHRoZW1lcyBoYXZlIHNsaWRlciB0aHVtYnMgcmVzcG9uZCB0byBjbGlja3MgYW5kIHNv
bWUgZG9uJ3QuIFRoaXMgaW5mb3JtYXRpb24gaXMKICAgICAvLyBnYXRoZXJlZCB2aWEgdGhlICdh
Y3RpdmF0ZS1zbGlkZXInIHByb3BlcnR5LCBidXQgaXQncyBkZXByZWNhdGVkIGluIEdUSysgMi4y
MiBhbmQgcmVtb3ZlZCBpbgpAQCAtNTQ5LDEwICs1NDksMTAgQEAgdm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0CiB9CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLWJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAg
R3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtQcm9ncmVzc0JhcigpOwotICAgIGd0a193aWRnZXRfc2V0
X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgp
LmRpcmVjdGlvbigpKSk7CisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3Rr
VGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwogCiAgICAg
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KHBhaW50SW5mby5jb250ZXh0LCBy
ZWN0KTsKICAgICBJbnRSZWN0IGZ1bGxQcm9ncmVzc0JhclJlY3QoSW50UG9pbnQoKSwgcmVjdC5z
aXplKCkpOwpAQCAtNTg2LDcgKzU4Niw3IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElu
bmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5CiAgICAg
c3R5bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIC8vIFdlIGV4cGFuZCB0aGUgcGFpbnRlZCBhcmVhIGJ5IDIgcGl4ZWxz
IG9uIHRoZSB0b3AgYW5kIGJvdHRvbSBhbmQgMiBwaXhlbHMgb24gdGhlIHJpZ2h0LiBUaGlzCiAg
ICAgLy8gaXMgYmVjYXVzZSBHVEsrIHRoZW1lcyB3YW50IHRvIGRyYXcgb3ZlciB0aGUgdGV4dCBi
b3ggYm9yZGVycywgYnV0IFdlYkNvcmUgcmVuZGVycyB0aGUgaW5uZXIKQEAgLTU5Nyw3ICs1OTcs
NyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmpl
Y3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbgogCiAgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4
dCB3aWRnZXRDb250ZXh0KHBhaW50SW5mby5jb250ZXh0LCBleHBhbmRlZFJlY3QpOwogICAgIEd0
a1dpZGdldCogd2lkZ2V0ID0gZ3RrU3BpbkJ1dHRvbigpOwotICAgIGd0a193aWRnZXRfc2V0X2Rp
cmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLmRp
cmVjdGlvbigpKSk7CisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4
dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwogCiAgICAgSW50
UmVjdCBmdWxsU3BpbkJ1dHRvblJlY3QoSW50UG9pbnQoKSwgZXhwYW5kZWRSZWN0LnNpemUoKSk7
CiAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChmdWxsU3BpbkJ1dHRvblJlY3QsIHdpZGdl
dCwgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19JTiwgInNwaW5idXR0b24iKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKaW5kZXggZDcz
ZjZjNGEwYWI2M2ZlZGE3Y2QwOTM2ZTc3ZjJlZjc1NjRmNDFiNi4uZTRhMzZlMjlkZWZlZThkNzNh
N2M5NzI0ZDM0NjY3NDE3NjY1NTA2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKQEAgLTE1NywxMSArMTU3LDExIEBAIHN0YXRpYyB2b2lk
IGFkanVzdFJlY3RGb3JGb2N1cyhHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIEludFJlY3QmIHJl
Y3QpCiAgICAgcmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVHdGs6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBJbnRSZWN0JiByZWN0KQordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UmVw
YWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gMDsKICAgICBib29sIGNoZWNrSW50
ZXJpb3JGb2N1cyA9IGZhbHNlOwotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSByZW5kZXJPYmplY3Qt
PnN0eWxlKCkuYXBwZWFyYW5jZSgpOworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSByZW5kZXJPYmpl
Y3Quc3R5bGUoKS5hcHBlYXJhbmNlKCk7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgY2FzZSBD
aGVja2JveFBhcnQ6CiAgICAgY2FzZSBSYWRpb1BhcnQ6CkBAIC0yMjAsNyArMjIwLDcgQEAgc3Rh
dGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRlclN0
eWxlKiBzdHlsZSkKICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoaW5kaWNhdG9yU2l6
ZSwgRml4ZWQpKTsKIH0KIAotc3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoY29uc3QgUmVuZGVyVGhl
bWVHdGsqIHRoZW1lLCBHVHlwZSB3aWRnZXRUeXBlLCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIGZ1bGxSZWN0KQor
c3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBHVHlw
ZSB3aWRnZXRUeXBlLCBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIGZ1bGxSZWN0KQogewogICAgIEd0a1N0
eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dCh3aWRnZXRUeXBlKTsKICAgICBn
dGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwpAQCAtMjQyLDcgKzI0Miw3IEBAIHN0YXRp
YyB2b2lkIHBhaW50VG9nZ2xlKGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgR1R5cGUgd2lk
Z2V0VHlwZSwgUmVuZGVyT2JqCiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGluZGljYXRvclNpemUp
OyAvLyBJbiBjYXNlIHJlY3QuaGVpZ2h0KCkgd2FzIGVxdWFsIHRvIGluZGljYXRvclNpemUgKyAx
LgogICAgIH0KIAotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwg
c3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmpl
Y3QtPnN0eWxlKCkuZGlyZWN0aW9uKCkpKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2Rp
cmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGly
ZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSkpOwogICAgIGd0a19zdHls
ZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCB3aWRnZXRUeXBlID09IEdUS19UWVBFX0NIRUNL
X0JVVFRPTiA/IEdUS19TVFlMRV9DTEFTU19DSEVDSyA6IEdUS19TVFlMRV9DTEFTU19SQURJTyk7
CiAKICAgICBndWludCBmbGFncyA9IDA7CkBAIC0yODAsNyArMjgwLDcgQEAgdm9pZCBSZW5kZXJU
aGVtZUd0azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAgICBz
ZXRUb2dnbGVTaXplKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9DSEVDS19CVVRUT04pLCBzdHls
ZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0
KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgcGFpbnRUb2dnbGUodGhpcywgR1RLX1RZUEVfQ0hFQ0tfQlVU
VE9OLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMjkxLDEzICsyOTEsMTMgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAgICBzZXRUb2dnbGVTaXplKGdldFN0eWxlQ29udGV4
dChHVEtfVFlQRV9SQURJT19CVVRUT04pLCBzdHlsZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcGFpbnRUb2dnbGUo
dGhpcywgR1RLX1RZUEVfUkFESU9fQlVUVE9OLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVj
dCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCByZW5kZXJCdXR0b24oUmVu
ZGVyVGhlbWUqIHRoZW1lLCBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRlck9iamVjdCog
cmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKK3N0YXRpYyB2b2lkIHJlbmRlckJ1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1N0
eWxlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIElu
dFJlY3QgYnV0dG9uUmVjdChyZWN0KTsKIApAQCAtMzYzLDEyICszNjMsMTIgQEAgc3RhdGljIHZv
aWQgcmVuZGVyQnV0dG9uKFJlbmRlclRoZW1lKiB0aGVtZSwgR3RrU3R5bGVDb250ZXh0KiBjb250
ZXh0LCBSZW5kZXJPYmoKICAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LCBwYWludElu
Zm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0
b25SZWN0LnkoKSwgYnV0dG9uUmVjdC53aWR0aCgpLCBidXR0b25SZWN0LmhlaWdodCgpKTsKICAg
ICB9CiB9Ci1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIHJl
bmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7CiAgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0
KEdUS19UWVBFX0JVVFRPTik7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsK
IAotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nh
c3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxl
KCkuZGlyZWN0aW9uKCkpKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihj
b250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJl
bmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSkpOwogICAgIGd0a19zdHlsZV9jb250ZXh0
X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKIAogICAgIHJlbmRl
ckJ1dHRvbih0aGlzLCBjb250ZXh0LCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CkBA
IC00NjQsMTAgKzQ2NCwxMCBAQCBpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAgICByZXR1cm4gYm9yZGVyV2lk
dGguYm90dG9tICsgZm9jdXNXaWR0aDsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRN
ZW51TGlzdChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1l
bnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBjYWlyb190KiBjYWlyb0Nv
bnRleHQgPSBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7Ci0gICAg
R3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9u
PihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS5kaXJlY3Rpb24oKSkpOwor
ICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVj
dGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkp
OwogCiAgICAgLy8gUGFpbnQgdGhlIGJ1dHRvbi4KICAgICBHdGtTdHlsZUNvbnRleHQqIGJ1dHRv
blN0eWxlQ29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pOwpAQCAtNTk1
LDEyICs1OTUsMTIgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdChSZW5kZXJP
YmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJgogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2Jq
ZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogewogICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29u
dGV4dChHVEtfVFlQRV9FTlRSWSk7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0
KTsKIAotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGlj
X2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0
eWxlKCkuZGlyZWN0aW9uKCkpKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlv
bihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9u
KHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSkpOwogICAgIGd0a19zdHlsZV9jb250
ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfRU5UUlkpOwogCiAgICAgZ3Vp
bnQgZmxhZ3MgPSAwOwpAQCAtNjQzLDE1ICs2NDMsMTUgQEAgc3RhdGljIHZvaWQgYXBwbHlTbGlk
ZXJTdHlsZUNvbnRleHRDbGFzc2VzKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgQ29udHJvbFBh
cnQKICAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlM
RV9DTEFTU19WRVJUSUNBTCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVy
VHJhY2soUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlk
ZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQ29udHJvbFBhcnQgcGFy
dCA9IHJlbmRlck9iamVjdC0+c3R5bGUoKS5hcHBlYXJhbmNlKCk7CisgICAgQ29udHJvbFBhcnQg
cGFydCA9IHJlbmRlck9iamVjdC5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKICAgICBBU1NFUlRfVU5V
U0VEKHBhcnQsIHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJW
ZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpOwogCiAgICAgR3Rr
U3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKTsK
ICAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwogCi0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVj
dC0+c3R5bGUoKS5kaXJlY3Rpb24oKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJl
Y3Rpb24oY29udGV4dCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJl
Y3Rpb24oKSkpOwogICAgIGFwcGx5U2xpZGVyU3R5bGVDb250ZXh0Q2xhc3Nlcyhjb250ZXh0LCBw
YXJ0KTsKICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxF
X0NMQVNTX1RST1VHSCk7CiAKQEAgLTY3OCwxNSArNjc4LDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIENvbnRyb2xQ
YXJ0IHBhcnQgPSByZW5kZXJPYmplY3QtPnN0eWxlKCkuYXBwZWFyYW5jZSgpOworICAgIENvbnRy
b2xQYXJ0IHBhcnQgPSByZW5kZXJPYmplY3Quc3R5bGUoKS5hcHBlYXJhbmNlKCk7CiAgICAgQVNT
RVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRo
dW1iVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwog
CiAgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBF
X1NDQUxFKTsKICAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwogCi0gICAgZ3Rr
X3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBndGtUZXh0RGlyZWN0aW9uKHJl
bmRlck9iamVjdC0+c3R5bGUoKS5kaXJlY3Rpb24oKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0
X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5
bGUoKS5kaXJlY3Rpb24oKSkpOwogICAgIGFwcGx5U2xpZGVyU3R5bGVDb250ZXh0Q2xhc3Nlcyhj
b250ZXh0LCBwYXJ0KTsKICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwg
R1RLX1NUWUxFX0NMQVNTX1NMSURFUik7CiAKQEAgLTcyOSw5ICs3MjksOSBAQCB2b2lkIFJlbmRl
clRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKIH0KIAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKLSAgICBpZiAoIXJlbmRlck9iamVjdC0+aXNQcm9ncmVzcygpKQorICAgIGlmICghcmVuZGVy
T2JqZWN0LmlzUHJvZ3Jlc3MoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBHdGtTdHls
ZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfUFJPR1JFU1NfQkFS
KTsKQEAgLTc4Niw3ICs3ODYsNyBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNw
aW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eQogICAgIHN0eWxl
LT5zZXRNaW5XaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBh
aW50U3BpbkFycm93QnV0dG9uKFJlbmRlclRoZW1lKiB0aGVtZSwgR3RrU3R5bGVDb250ZXh0KiBj
b250ZXh0LCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a0Fycm93VHlwZSBhcnJvd1R5cGUpCitzdGF0
aWMgdm9pZCBwYWludFNwaW5BcnJvd0J1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1N0eWxl
Q29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtBcnJvd1R5cGUg
YXJyb3dUeXBlKQogewogICAgIEFTU0VSVChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQIHx8IGFy
cm93VHlwZSA9PSBHVEtfQVJST1dfRE9XTik7CiAKQEAgLTg1MiwxMiArODUyLDEyIEBAIHN0YXRp
YyB2b2lkIHBhaW50U3BpbkFycm93QnV0dG9uKFJlbmRlclRoZW1lKiB0aGVtZSwgR3RrU3R5bGVD
b250ZXh0KiBjb250ZXh0LCBSCiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0
KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVy
T2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24o
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4
dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TUElOX0JVVFRPTik7CiAgICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2F2ZShjb250ZXh0KTsKIAotICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9u
ID0gc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJP
YmplY3QtPnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsKKyAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbiA9IHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVu
ZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsKICAgICBndGtfc3R5bGVfY29udGV4dF9z
ZXRfZGlyZWN0aW9uKGNvbnRleHQsIGRpcmVjdGlvbik7CiAKICAgICBndWludCBmbGFncyA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBkZDVjNDAwYWVh
MjE0ZmYyMGM5MDE4ZDI0YmEyMzlkNWY2ZjVkNGZhLi41MDY2YWVjYzE1Y2JjYWU0NmY4OGUxZTg1
YjU5MTA0MmI4NzcxOTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKQEAgLTE0MzgsNyArMTQzOCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZFZpc3VhbE92ZXJm
bG93RnJvbVRoZW1lKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBpbmZsYXRlZFJl
Y3QgPSBwaXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0KCk7Ci0gICAgdGhlbWUoKS5hZGp1c3RSZXBh
aW50UmVjdCh0aGlzLCBpbmZsYXRlZFJlY3QpOworICAgIHRoZW1lKCkuYWRqdXN0UmVwYWludFJl
Y3QoKnRoaXMsIGluZmxhdGVkUmVjdCk7CiAgICAgYWRkVmlzdWFsT3ZlcmZsb3coaW5mbGF0ZWRS
ZWN0KTsKIAogICAgIGlmIChSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVh
ZENvbnRhaW5pbmdCbG9jaygpKQpAQCAtNDI5NCw3ICs0Mjk0LDcgQEAgaW50IFJlbmRlckJsb2Nr
OjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGJvb2wgZmlyc3RM
aW5lLCBMaW4KICAgICAgICAgLy8gaXMgdHVybmVkIG9mZiwgY2hlY2tib3hlcy9yYWRpb3Mgd2ls
bCBzdGlsbCBoYXZlIGRlY2VudCBiYXNlbGluZXMuCiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRv
IHBhdGNoIGZvcm0gY29udHJvbHMgdG8gZGVhbCB3aXRoIHZlcnRpY2FsIGxpbmVzLgogICAgICAg
ICBpZiAoc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkgJiYgIXRoZW1lKCkuaXNDb250cm9sQ29udGFp
bmVyKHN0eWxlKCkuYXBwZWFyYW5jZSgpKSkKLSAgICAgICAgICAgIHJldHVybiB0aGVtZSgpLmJh
c2VsaW5lUG9zaXRpb24odGhpcyk7CisgICAgICAgICAgICByZXR1cm4gdGhlbWUoKS5iYXNlbGlu
ZVBvc2l0aW9uKCp0aGlzKTsKICAgICAgICAgICAgIAogICAgICAgICAvLyBDU1MyLjEgc3RhdGVz
IHRoYXQgdGhlIGJhc2VsaW5lIG9mIGFuIGlubGluZSBibG9jayBpcyB0aGUgYmFzZWxpbmUgb2Yg
dGhlIGxhc3QgbGluZSBib3ggaW4KICAgICAgICAgLy8gdGhlIG5vcm1hbCBmbG93LiAgV2UgbWFr
ZSBhbiBleGNlcHRpb24gZm9yIG1hcnF1ZWVzLCBzaW5jZSB0aGVpciBiYXNlbGluZXMgYXJlIG1l
YW5pbmdsZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGI3ZTNk
Y2IyNjQyNGE0ZDY0YjNkNjgxMjE4MTRiMjU0NDg4MTA5NjQuLjYzYTI4ZDMxOGZlOWI0MTIwMmZi
NmFkMGQxNTYzY2U5ZWI4ZmNiYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCkBAIC0xMjI3LDcgKzEyMjcsNyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0
aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgYm9vbCB0aGVtZVBhaW50ZWQgPSBzdHlsZSgpLmhhc0FwcGVhcmFu
Y2UoKSAmJiAhdGhlbWUoKS5wYWludCh0aGlzLCBjb250cm9sU3RhdGVzLCBwYWludEluZm8sIHNu
YXBwZWRQYWludFJlY3QpOworICAgIGJvb2wgdGhlbWVQYWludGVkID0gc3R5bGUoKS5oYXNBcHBl
YXJhbmNlKCkgJiYgIXRoZW1lKCkucGFpbnQoKnRoaXMsIGNvbnRyb2xTdGF0ZXMsIHBhaW50SW5m
bywgc25hcHBlZFBhaW50UmVjdCk7CiAKICAgICBpZiAoY29udHJvbFN0YXRlcyAmJiBjb250cm9s
U3RhdGVzLT5uZWVkc1JlcGFpbnQoKSkKICAgICAgICAgbV9yZXBhaW50VGltZXIuc3RhcnRPbmVT
aG90KDApOwpAQCAtMTIzOSwxMiArMTIzOSwxMiBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCb3hE
ZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaQog
ICAgICAgICBwYWludEJhY2tncm91bmQocGFpbnRJbmZvLCBwYWludFJlY3QsIGJsZWVkQXZvaWRh
bmNlKTsKIAogICAgICAgICBpZiAoc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAg
ICB0aGVtZSgpLnBhaW50RGVjb3JhdGlvbnModGhpcywgcGFpbnRJbmZvLCBzbmFwcGVkUGFpbnRS
ZWN0KTsKKyAgICAgICAgICAgIHRoZW1lKCkucGFpbnREZWNvcmF0aW9ucygqdGhpcywgcGFpbnRJ
bmZvLCBzbmFwcGVkUGFpbnRSZWN0KTsKICAgICB9CiAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJ
bmZvLCBwYWludFJlY3QsIHN0eWxlKCksIEluc2V0KTsKIAogICAgIC8vIFRoZSB0aGVtZSB3aWxs
IHRlbGwgdXMgd2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGFsc28gcGFpbnQgdGhlIENTUyBib3Jk
ZXIuCi0gICAgaWYgKGJsZWVkQXZvaWRhbmNlICE9IEJhY2tncm91bmRCbGVlZEJhY2tncm91bmRP
dmVyQm9yZGVyICYmICghc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkgfHwgKCF0aGVtZVBhaW50ZWQg
JiYgdGhlbWUoKS5wYWludEJvcmRlck9ubHkodGhpcywgcGFpbnRJbmZvLCBzbmFwcGVkUGFpbnRS
ZWN0KSkpICYmIHN0eWxlKCkuaGFzQm9yZGVyKCkpCisgICAgaWYgKGJsZWVkQXZvaWRhbmNlICE9
IEJhY2tncm91bmRCbGVlZEJhY2tncm91bmRPdmVyQm9yZGVyICYmICghc3R5bGUoKS5oYXNBcHBl
YXJhbmNlKCkgfHwgKCF0aGVtZVBhaW50ZWQgJiYgdGhlbWUoKS5wYWludEJvcmRlck9ubHkoKnRo
aXMsIHBhaW50SW5mbywgc25hcHBlZFBhaW50UmVjdCkpKSAmJiBzdHlsZSgpLmhhc0JvcmRlcigp
KQogICAgICAgICBwYWludEJvcmRlcihwYWludEluZm8sIHBhaW50UmVjdCwgc3R5bGUoKSwgYmxl
ZWRBdm9pZGFuY2UpOwogCiAgICAgaWYgKGJsZWVkQXZvaWRhbmNlID09IEJhY2tncm91bmRCbGVl
ZFVzZVRyYW5zcGFyZW5jeUxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJ1dHRvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0
dG9uLmNwcAppbmRleCA3MzcyZGQwM2FjNzFjMTI2YTg2ZTMxMDFlYzc5NzQwZjMwYWM3YzIzLi44
ZmM4MzMwOTE4NjdhZDFmMGFhNGE5MWZlMzJhYTQyMjA1Yjg3NjJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcApAQCAtMTEyLDEyICsxMTIsMTIgQEAgdm9pZCBS
ZW5kZXJCdXR0b246OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3QKICAgICBpZiAobV9pbm5lcikgLy8gUmVuZGVyQmxvY2sgaGFuZGxl
ZCB1cGRhdGluZyB0aGUgYW5vbnltb3VzIGJsb2NrJ3Mgc3R5bGUuCiAgICAgICAgIHNldHVwSW5u
ZXJTdHlsZSgmbV9pbm5lci0+c3R5bGUoKSk7CiAKLSAgICBpZiAoIW1fZGVmYXVsdCAmJiB0aGVt
ZSgpLmlzRGVmYXVsdCh0aGlzKSkgeworICAgIGlmICghbV9kZWZhdWx0ICYmIHRoZW1lKCkuaXNE
ZWZhdWx0KCp0aGlzKSkgewogICAgICAgICBpZiAoIW1fdGltZXIpCiAgICAgICAgICAgICBtX3Rp
bWVyID0gc3RkOjptYWtlX3VuaXF1ZTxUaW1lcjxSZW5kZXJCdXR0b24+Pih0aGlzLCAmUmVuZGVy
QnV0dG9uOjp0aW1lckZpcmVkKTsKICAgICAgICAgbV90aW1lci0+c3RhcnRSZXBlYXRpbmcoMC4w
Myk7CiAgICAgICAgIG1fZGVmYXVsdCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChtX2RlZmF1bHQg
JiYgIXRoZW1lKCkuaXNEZWZhdWx0KHRoaXMpKSB7CisgICAgfSBlbHNlIGlmIChtX2RlZmF1bHQg
JiYgIXRoZW1lKCkuaXNEZWZhdWx0KCp0aGlzKSkgewogICAgICAgICBtX2RlZmF1bHQgPSBmYWxz
ZTsKICAgICAgICAgbV90aW1lciA9IG51bGxwdHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKaW5kZXggNzY4ZDE4
OWY1ZTRiMTYxZDYzYmQ4OWYxZDg5MmJhYTQ3OTQ1ZmNlNy4uZTNlOWE5ZTA3YTUyYjM2NDE2OGYw
MmYwYjc1MWEzNTM0NmEyMzMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IExheW91dFBvaW4KICAgICAgICAgICAgICAgICAvLyBEcmF3IHRoZSBmaWxlIGljb24g
YW5kIGRlY29yYXRpb25zLgogICAgICAgICAgICAgICAgIEludFJlY3QgaWNvblJlY3QoaWNvblgs
IGljb25ZLCBpY29uV2lkdGgsIGljb25IZWlnaHQpOwogICAgICAgICAgICAgICAgIFJlbmRlclRo
ZW1lOjpGaWxlVXBsb2FkRGVjb3JhdGlvbnMgZGVjb3JhdGlvbnNUeXBlID0gaW5wdXRFbGVtZW50
KCkuZmlsZXMoKS0+bGVuZ3RoKCkgPT0gMSA/IFJlbmRlclRoZW1lOjpTaW5nbGVGaWxlIDogUmVu
ZGVyVGhlbWU6Ok11bHRpcGxlRmlsZXM7Ci0gICAgICAgICAgICAgICAgdGhlbWUoKS5wYWludEZp
bGVVcGxvYWRJY29uRGVjb3JhdGlvbnModGhpcywgYnV0dG9uUmVuZGVyZXIsIHBhaW50SW5mbywg
aWNvblJlY3QsIGlucHV0RWxlbWVudCgpLmljb24oKSwgZGVjb3JhdGlvbnNUeXBlKTsKKyAgICAg
ICAgICAgICAgICB0aGVtZSgpLnBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucygqdGhpcywg
KmJ1dHRvblJlbmRlcmVyLCBwYWludEluZm8sIGljb25SZWN0LCBpbnB1dEVsZW1lbnQoKS5pY29u
KCksIGRlY29yYXRpb25zVHlwZSk7CiAgICAgICAgICAgICB9CiAjZWxzZQogICAgICAgICAgICAg
Ly8gRHJhdyB0aGUgZmlsZSBpY29uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rmxvd1RocmVhZC5jcHAKaW5kZXggY2Y5NGQ1ZTRiNzNkYzU0MTY2MGQ1ZWY1MWE1NWNmNWU1YTQ5
ZDNmZC4uMTU5NjgyMTZmMGM1OGU3YzM2YzkzN2UzYzgzMTNkYWQ4MTRjZjg0OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcApAQCAtMTI4NSw3ICsx
Mjg1LDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdpb25zVmlzdWFsT3ZlcmZsb3dG
cm9tVGhlbWUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2MKICAgICAgICAgYm9yZGVyQm94ID0gcmVn
aW9uLT5yZWN0Rmxvd1BvcnRpb25Gb3JCb3goYmxvY2ssIGJvcmRlckJveCk7CiAKICAgICAgICAg
SW50UmVjdCBpbmZsYXRlZFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGJvcmRlckJveCk7Ci0g
ICAgICAgIGJsb2NrLT50aGVtZSgpLmFkanVzdFJlcGFpbnRSZWN0KGJsb2NrLCBpbmZsYXRlZFJl
Y3QpOworICAgICAgICBibG9jay0+dGhlbWUoKS5hZGp1c3RSZXBhaW50UmVjdCgqYmxvY2ssIGlu
ZmxhdGVkUmVjdCk7CiAKICAgICAgICAgcmVnaW9uLT5hZGRWaXN1YWxPdmVyZmxvd0ZvckJveChi
bG9jaywgaW5mbGF0ZWRSZWN0KTsKICAgICAgICAgaWYgKHJlZ2lvbiA9PSBlbmRSZWdpb24pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAKaW5k
ZXggY2FmZDBjMGU3Y2RkMzBlOGZiMjZmNmZiNTMxOTg3MTZiZjhmOWI5NS4uYzBjMmQzOTQ5NzA3
ZDlmMjllZmQ2MGQzYTgyMWU1OWFkZTAxMDMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcApAQCAtNzAsMTAgKzcwLDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENHKQogCi1zdGF0aWMg
V0tNZWRpYUNvbnRyb2xsZXJUaGVtZVN0YXRlIGRldGVybWluZVN0YXRlKFJlbmRlck9iamVjdCog
bykKK3N0YXRpYyBXS01lZGlhQ29udHJvbGxlclRoZW1lU3RhdGUgZGV0ZXJtaW5lU3RhdGUoY29u
c3QgUmVuZGVyT2JqZWN0JiBvKQogewogICAgIGludCByZXN1bHQgPSAwOwotICAgIGNvbnN0IFJl
bmRlclRoZW1lJiB0aGVtZSA9IG8tPnRoZW1lKCk7CisgICAgY29uc3QgUmVuZGVyVGhlbWUmIHRo
ZW1lID0gby50aGVtZSgpOwogICAgIGlmICghdGhlbWUuaXNFbmFibGVkKG8pIHx8IHRoZW1lLmlz
UmVhZE9ubHlDb250cm9sKG8pKQogICAgICAgICByZXN1bHQgfD0gV0tNZWRpYUNvbnRyb2xsZXJG
bGFnRGlzYWJsZWQ7CiAgICAgaWYgKHRoZW1lLmlzUHJlc3NlZChvKSkKQEAgLTg0LDkgKzg0LDkg
QEAgc3RhdGljIFdLTWVkaWFDb250cm9sbGVyVGhlbWVTdGF0ZSBkZXRlcm1pbmVTdGF0ZShSZW5k
ZXJPYmplY3QqIG8pCiB9CiAKIC8vIFV0aWxpdHkgdG8gc2NhbGUgd2hlbiB0aGUgVUkgcGFydCBh
cmUgbm90IHNjYWxlZCBieSB3a0RyYXdNZWRpYVVJUGFydAotc3RhdGljIEZsb2F0UmVjdCBnZXRV
bnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZvcmlnaW5hbFJlY3QpCitzdGF0
aWMgRmxvYXRSZWN0IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KGNvbnN0
IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QgJm9yaWdpbmFsUmVjdCkKIHsKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLmVm
ZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLnN0eWxlKCkuZWZmZWN0aXZl
Wm9vbSgpOwogICAgIEZsb2F0UmVjdCB1bnpvb21lZFJlY3Qob3JpZ2luYWxSZWN0KTsKICAgICBp
ZiAoem9vbUxldmVsICE9IDEuMGYpIHsKICAgICAgICAgdW56b29tZWRSZWN0LnNldFdpZHRoKHVu
em9vbWVkUmVjdC53aWR0aCgpIC8gem9vbUxldmVsKTsKQEAgLTEyNiwzNSArMTI2LDM1IEBAIHZv
aWQgUmVuZGVyTWVkaWFDb250cm9sczo6YWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVy
U3R5bGUqIHN0eWxlKQogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGlu
dD4oc2l6ZS5oZWlnaHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlck1l
ZGlhQ29udHJvbHM6OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5
cGUgcGFydCwgUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyTWVkaWFDb250cm9sczo6cGFpbnRNZWRpYUNvbnRy
b2xzUGFydChNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBwYXJ0LCBjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQp
OwogCiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgY2FzZSBNZWRpYUVudGVyRnVsbHNjcmVlbkJ1
dHRvbjoKICAgICBjYXNlIE1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b246Ci0gICAgICAgIGlmIChN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8TWVk
aWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQqPihvLT5ub2RlKCkpKSB7CisgICAgICAg
IGlmIChNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nh
c3Q8TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQqPihvLm5vZGUoKSkpIHsKICAg
ICAgICAgICAgIGJvb2wgZW50ZXJCdXR0b24gPSBidG4tPmRpc3BsYXlUeXBlKCkgPT0gTWVkaWFF
bnRlckZ1bGxzY3JlZW5CdXR0b247CiAgICAgICAgICAgICB3a0RyYXdNZWRpYVVJUGFydChlbnRl
ckJ1dHRvbiA/IFdLTWVkaWFVSVBhcnRGdWxsc2NyZWVuQnV0dG9uIDogV0tNZWRpYVVJUGFydEV4
aXRGdWxsc2NyZWVuQnV0dG9uLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCks
IHIsIGRldGVybWluZVN0YXRlKG8pKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBj
YXNlIE1lZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uOgogICAgIGNhc2UgTWVkaWFIaWRlQ2xv
c2VkQ2FwdGlvbnNCdXR0b246Ci0gICAgICAgIGlmIChNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRD
YXB0aW9uc0J1dHRvbkVsZW1lbnQqIGJ0biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbFRvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudCo+KG8tPm5vZGUoKSkpIHsKKyAgICAgICAgaWYg
KE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudCogYnRuID0gc3Rh
dGljX2Nhc3Q8TWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50Kj4o
by5ub2RlKCkpKSB7CiAgICAgICAgICAgICBib29sIGNhcHRpb25zVmlzaWJsZSA9IGJ0bi0+ZGlz
cGxheVR5cGUoKSA9PSBNZWRpYUhpZGVDbG9zZWRDYXB0aW9uc0J1dHRvbjsKICAgICAgICAgICAg
IHdrRHJhd01lZGlhVUlQYXJ0KGNhcHRpb25zVmlzaWJsZSA/IFdLTWVkaWFVSVBhcnRIaWRlQ2xv
c2VkQ2FwdGlvbnNCdXR0b24gOiBXS01lZGlhVUlQYXJ0U2hvd0Nsb3NlZENhcHRpb25zQnV0dG9u
LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGRldGVybWluZVN0YXRl
KG8pKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhTXV0ZUJ1dHRv
bjoKICAgICBjYXNlIE1lZGlhVW5NdXRlQnV0dG9uOgotICAgICAgICBpZiAoTWVkaWFDb250cm9s
TXV0ZUJ1dHRvbkVsZW1lbnQqIGJ0biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbE11dGVCdXR0
b25FbGVtZW50Kj4oby0+bm9kZSgpKSkgeworICAgICAgICBpZiAoTWVkaWFDb250cm9sTXV0ZUJ1
dHRvbkVsZW1lbnQqIGJ0biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVt
ZW50Kj4oby5ub2RlKCkpKSB7CiAgICAgICAgICAgICBib29sIGF1ZGlvRW5hYmxlZCA9IGJ0bi0+
ZGlzcGxheVR5cGUoKSA9PSBNZWRpYU11dGVCdXR0b247CiAgICAgICAgICAgICB3a0RyYXdNZWRp
YVVJUGFydChhdWRpb0VuYWJsZWQgPyBXS01lZGlhVUlQYXJ0TXV0ZUJ1dHRvbiA6IFdLTWVkaWFV
SVBhcnRVbk11dGVCdXR0b24sIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwg
ciwgZGV0ZXJtaW5lU3RhdGUobykpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgTWVkaWFQYXVzZUJ1dHRvbjoKICAgICBjYXNlIE1lZGlhUGxheUJ1dHRvbjoKLSAgICAgICAg
aWYgKE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50KiBidG4gPSBzdGF0aWNfY2FzdDxNZWRp
YUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCo+KG8tPm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKE1l
ZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50KiBidG4gPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRy
b2xQbGF5QnV0dG9uRWxlbWVudCo+KG8ubm9kZSgpKSkgewogICAgICAgICAgICAgYm9vbCBjYW5Q
bGF5ID0gYnRuLT5kaXNwbGF5VHlwZSgpID09IE1lZGlhUGxheUJ1dHRvbjsKICAgICAgICAgICAg
IHdrRHJhd01lZGlhVUlQYXJ0KGNhblBsYXkgPyBXS01lZGlhVUlQYXJ0UGxheUJ1dHRvbiA6IFdL
TWVkaWFVSVBhcnRQYXVzZUJ1dHRvbiwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLCByLCBkZXRlcm1pbmVTdGF0ZShvKSk7CiAgICAgICAgIH0KQEAgLTE3Miw3ICsxNzIsNyBA
QCBib29sIFJlbmRlck1lZGlhQ29udHJvbHM6OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFD
b250cm9sRWxlbWVudFR5cGUgcGFydCwgUgogICAgICAgICB3a0RyYXdNZWRpYVVJUGFydChXS01l
ZGlhVUlQYXJ0U2Vla0ZvcndhcmRCdXR0b24sIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSwgciwgZGV0ZXJtaW5lU3RhdGUobykpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IE1lZGlhU2xpZGVyOiB7Ci0gICAgICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQoKm8pKSB7CisgICAgICAgIGlmIChIVE1MTWVkaWFFbGVt
ZW50KiBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQobykpIHsKICAgICAgICAgICAg
IEZsb2F0UmVjdCB1bnpvb21lZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50
Q29udGV4dChvLCBwYWludEluZm8sIHIpOwogICAgICAgICAgICAgd2tEcmF3TWVkaWFTbGlkZXJU
cmFjayhwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHVuem9vbWVkUmVjdCwg
bWVkaWFFbGVtZW50LT5wZXJjZW50TG9hZGVkKCkgKiBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCks
IG1lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSwgbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpLCBk
ZXRlcm1pbmVTdGF0ZShvKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWVkaWFDb250cm9scy5oCmluZGV4IDhhMTZjMmY3ODdkOTllNTVhZmU3ODE0MWUz
OGZhY2E3OWEzMTYyNTAuLmRlMDJmMmFhM2VjY2Q4MGMzNDc1YWFlNzE5ZTlmOTI4YmUzYWFjYTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaApA
QCAtNDUsNyArNDUsNyBAQCBjbGFzcyBSZW5kZXJNZWRpYUNvbnRyb2xzIHsKIHB1YmxpYzoKIAog
I2lmIFBMQVRGT1JNKFdJTikKLSAgICBzdGF0aWMgYm9vbCBwYWludE1lZGlhQ29udHJvbHNQYXJ0
KE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlLCBSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgc3RhdGljIGJvb2wgcGFpbnRNZWRpYUNvbnRyb2xzUGFy
dChNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSwgY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHN0YXRpYyB2b2lkIGFkanVzdE1lZGlhU2xp
ZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKik7CiAjZW5kaWYKICAgICBzdGF0aWMgSW50UG9pbnQg
dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oUmVuZGVyQm94KiwgY29uc3QgSW50U2l6
ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCBhMDAz
MDdjMTk1MGFlMDRiNDhhMWNmYzRmNTc5MTU4MTg4NTJkODc5Li43YmVmZGM1ZGExNDkzN2MwYmMy
MmYwMTY3YzhlZjk1NDdjZjM0MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcApAQCAtNzI1LDcgKzcyNSw3IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6
OmNvbnRhaW5pbmdCbG9jaygpIGNvbnN0CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3TGlu
ZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGZsb2F0IHgxLCBm
bG9hdCB5MSwgZmxvYXQgeDIsIGZsb2F0IHkyLAotICAgIEJveFNpZGUgc2lkZSwgQ29sb3IgY29s
b3IsIEVCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSwgZmxvYXQgYWRqYWNlbnRXaWR0aDEsIGZsb2F0
IGFkamFjZW50V2lkdGgyLCBib29sIGFudGlhbGlhcykKKyAgICBCb3hTaWRlIHNpZGUsIENvbG9y
IGNvbG9yLCBFQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUsIGZsb2F0IGFkamFjZW50V2lkdGgxLCBm
bG9hdCBhZGphY2VudFdpZHRoMiwgYm9vbCBhbnRpYWxpYXMpIGNvbnN0CiB7CiAgICAgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IgPSBkb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAg
ZmxvYXQgdGhpY2tuZXNzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmlu
ZGV4IGNhOGE2ZGVhN2M2ODk0OWM3YmUwMDc4MmQzZDRiNGZhOTlkYmJhZTYuLmU1ODAzZTBkYjZi
MDY4YTQ4OTE3NTA5NmUzYzNkNDU1YjQ5YmIyNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKQEAgLTg3OSw3ICs4NzksNyBAQCBwdWJsaWM6CiAKICAgICBSZXNwZWN0
SW1hZ2VPcmllbnRhdGlvbkVudW0gc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSBjb25z
dDsKIAotICAgIHZvaWQgZHJhd0xpbmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCosIGZsb2F0
IHgxLCBmbG9hdCB5MSwgZmxvYXQgeDIsIGZsb2F0IHkyLCBCb3hTaWRlLCBDb2xvciwgRUJvcmRl
clN0eWxlLCBmbG9hdCBhZGpidzEsIGZsb2F0IGFkamJ3MiwgYm9vbCBhbnRpYWxpYXMgPSBmYWxz
ZSk7CisgICAgdm9pZCBkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0KiwgZmxvYXQg
eDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIsIEJveFNpZGUsIENvbG9yLCBFQm9yZGVy
U3R5bGUsIGZsb2F0IGFkamJ3MSwgZmxvYXQgYWRqYncyLCBib29sIGFudGlhbGlhcyA9IGZhbHNl
KSBjb25zdDsKIHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50Rm9jdXNSaW5nKFBhaW50SW5mbyYs
IGNvbnN0IExheW91dFBvaW50JiwgUmVuZGVyU3R5bGUqKTsKICAgICB2b2lkIHBhaW50T3V0bGlu
ZShQYWludEluZm8mLCBjb25zdCBMYXlvdXRSZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclByb2dyZXNzLmNwcAppbmRleCA0MTM5ZDI1ZDk5MmQ2MmI3NDg2YjFkMzE4NWYw
NjAzN2M1MjRkZmZlLi44NDMyZjYwNGY0MzhhMjJjMzc2NGNlOThhMzU3MDUzOTY3ZTA3ZWYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAKQEAgLTY3LDcg
KzY3LDcgQEAgdm9pZCBSZW5kZXJQcm9ncmVzczo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IGwKICAgICAgICAgZnJhbWUuc2V0SGVpZ2h0
KGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50KTsKICAgICBlbHNlCiAgICAgICAgIGZyYW1lLnNldFdp
ZHRoKGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50KTsKLSAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IHRo
ZW1lKCkucHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKHRoaXMsIHBpeGVsU25hcHBlZEludFJlY3Qo
ZnJhbWUpKS5zaXplKCk7CisgICAgSW50U2l6ZSBmcmFtZVNpemUgPSB0aGVtZSgpLnByb2dyZXNz
QmFyUmVjdEZvckJvdW5kcygqdGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFtZSkpLnNpemUo
KTsKICAgICBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBmcmFtZVNpemUuaGVpZ2h0KCkgOiBmcmFtZVNpemUud2lkdGgoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmNwcAppbmRleCA0YWJlNzk2ZDNhNWU2NjA2Yzc5YmQ0Y2VhMTQxNDI4ZjZhMjM1NTFjLi5j
NzdjNzIxZDQyZWVlZTYxZWEyYzFiNWI3OWMyZGU3YzkyNWY5MzU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cApAQCAtODQsNyArODQsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JgogCiAgICAgICAgIC8v
IENvbnZlcnQgdGhlIHJlY3QgaW50byB0aGUgY29vcmRzIHVzZWQgZm9yIHBhaW50aW5nIHRoZSBj
b250ZW50CiAgICAgICAgIGNvbnRlbnRzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQgKyBsb2NhdGlv
bigpKTsKLSAgICAgICAgdGhlbWUoKS5wYWludENhcHNMb2NrSW5kaWNhdG9yKHRoaXMsIHBhaW50
SW5mbywgcGl4ZWxTbmFwcGVkSW50UmVjdChjb250ZW50c1JlY3QpKTsKKyAgICAgICAgdGhlbWUo
KS5wYWludENhcHNMb2NrSW5kaWNhdG9yKCp0aGlzLCBwYWludEluZm8sIHBpeGVsU25hcHBlZElu
dFJlY3QoY29udGVudHNSZWN0KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmNwcAppbmRleCBjNzlkYmNiY2U0MTMwM2VmNzQwOTNmM2E5ZjdmYmI0YWZk
MzZjODlmLi5jMDFkZDQzYWFkZjk1NDlmNDBkYmY5OWY3YTQzMDg2ZDE0OTFhZDAxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKQEAgLTI2MywyMCArMjYzLDIwIEBA
IHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OnBh
aW50KFJlbmRlck9iamVjdCogbywgQ29udHJvbFN0YXRlcyogY29udHJvbFN0YXRlcywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1l
OjpwYWludChjb25zdCBSZW5kZXJPYmplY3QmIG8sIENvbnRyb2xTdGF0ZXMqIGNvbnRyb2xTdGF0
ZXMsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAg
IC8vIElmIHBhaW50aW5nIGlzIGRpc2FibGVkLCBidXQgd2UgYXJlbid0IHVwZGF0aW5nIGNvbnRy
b2wgdGludHMsIHRoZW4ganVzdCBiYWlsLgogICAgIC8vIElmIHdlIGFyZSB1cGRhdGluZyBjb250
cm9sIHRpbnRzLCBqdXN0IHNjaGVkdWxlIGEgcmVwYWludCBpZiB0aGUgdGhlbWUgc3VwcG9ydHMg
dGludGluZwogICAgIC8vIGZvciB0aGF0IGNvbnRyb2wuCiAgICAgaWYgKHBhaW50SW5mby5jb250
ZXh0LT51cGRhdGluZ0NvbnRyb2xUaW50cygpKSB7CiAgICAgICAgIGlmIChjb250cm9sU3VwcG9y
dHNUaW50cyhvKSkKLSAgICAgICAgICAgIG8tPnJlcGFpbnQoKTsKKyAgICAgICAgICAgIG8ucmVw
YWludCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmIChwYWludEluZm8u
Y29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBDb250cm9sUGFydCBwYXJ0ID0gby0+c3R5bGUoKS5hcHBlYXJhbmNlKCk7CisgICAgQ29udHJv
bFBhcnQgcGFydCA9IG8uc3R5bGUoKS5hcHBlYXJhbmNlKCk7CiAKICNpZiBVU0UoTkVXX1RIRU1F
KQogICAgIHN3aXRjaCAocGFydCkgewpAQCAtMjg4LDcgKzI4OCw3IEBAIGJvb2wgUmVuZGVyVGhl
bWU6OnBhaW50KFJlbmRlck9iamVjdCogbywgQ29udHJvbFN0YXRlcyogY29udHJvbFN0YXRlcywg
Y29uc3QgUGFpCiAgICAgY2FzZSBCdXR0b25QYXJ0OgogICAgIGNhc2UgSW5uZXJTcGluQnV0dG9u
UGFydDoKICAgICAgICAgdXBkYXRlQ29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKG8sIGNvbnRyb2xT
dGF0ZXMpOwotICAgICAgICBtX3RoZW1lLT5wYWludChwYXJ0LCBjb250cm9sU3RhdGVzLCBjb25z
dF9jYXN0PEdyYXBoaWNzQ29udGV4dCo+KHBhaW50SW5mby5jb250ZXh0KSwgciwgby0+c3R5bGUo
KS5lZmZlY3RpdmVab29tKCksICZvLT52aWV3KCkuZnJhbWVWaWV3KCkpOworICAgICAgICBtX3Ro
ZW1lLT5wYWludChwYXJ0LCBjb250cm9sU3RhdGVzLCBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4
dCo+KHBhaW50SW5mby5jb250ZXh0KSwgciwgby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSwgJm8u
dmlldygpLmZyYW1lVmlldygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwpAQCAtNDA1LDE3ICs0MDUsMTcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6
cGFpbnQoUmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3RhdGVzKiBjb250cm9sU3RhdGVzLCBjb25z
dCBQYWkKICAgICByZXR1cm4gdHJ1ZTsgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aGUgYXBwZWFyYW5j
ZSwgc28gbGV0IHRoZSBub3JtYWwgYmFja2dyb3VuZC9ib3JkZXIgcGFpbnQuCiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWU6OnBhaW50Qm9yZGVyT25seShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZTo6cGFp
bnRCb3JkZXJPbmx5KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5w
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIFBMQVRGT1JN
KElPUykKICAgICBVTlVTRURfUEFSQU0ocik7Ci0gICAgcmV0dXJuIG8tPnN0eWxlKCkuYXBwZWFy
YW5jZSgpICE9IE5vQ29udHJvbFBhcnQ7CisgICAgcmV0dXJuIG8uc3R5bGUoKS5hcHBlYXJhbmNl
KCkgIT0gTm9Db250cm9sUGFydDsKICNlbHNlCiAgICAgLy8gQ2FsbCB0aGUgYXBwcm9wcmlhdGUg
cGFpbnQgbWV0aG9kIGJhc2VkIG9mZiB0aGUgYXBwZWFyYW5jZSB2YWx1ZS4KLSAgICBzd2l0Y2gg
KG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpKSB7CisgICAgc3dpdGNoIChvLnN0eWxlKCkuYXBwZWFy
YW5jZSgpKSB7CiAgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgogICAgICAgICByZXR1cm4gcGFpbnRU
ZXh0RmllbGQobywgcGFpbnRJbmZvLCByKTsKICAgICBjYXNlIExpc3Rib3hQYXJ0OgpAQCAtNDYz
LDEzICs0NjMsMTMgQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRCb3JkZXJPbmx5KFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGMKICNlbmRpZgogfQogCi1ib29s
IFJlbmRlclRoZW1lOjpwYWludERlY29yYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5k
ZXJUaGVtZTo6cGFpbnREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBp
ZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgLy8gQ2FsbCB0aGUgYXBwcm9wcmlhdGUgcGFpbnQgbWV0aG9kIGJhc2Vk
IG9mZiB0aGUgYXBwZWFyYW5jZSB2YWx1ZS4KLSAgICBzd2l0Y2ggKHJlbmRlcmVyLT5zdHlsZSgp
LmFwcGVhcmFuY2UoKSkgeworICAgIHN3aXRjaCAocmVuZGVyZXIuc3R5bGUoKS5hcHBlYXJhbmNl
KCkpIHsKICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKICAgICAgICAgcmV0dXJuIHBhaW50
TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhyZW5kZXJlciwgcGFpbnRJbmZvLCByZWN0KTsKICAg
ICBjYXNlIFRleHRGaWVsZFBhcnQ6CkBAIC02NjYsMTcgKzY2NiwxNyBAQCBDb2xvciBSZW5kZXJU
aGVtZTo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBj
b25zdAogICAgIHJldHVybiBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCk7CiB9CiAKLWludCBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJP
YmplY3QqIG8pIGNvbnN0CitpbnQgUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24oY29uc3Qg
UmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIGlmICghby0+aXNCb3goKSkKKyAgICBpZiAo
IW8uaXNCb3goKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBSZW5kZXJCb3gqIGJv
eCA9IHRvUmVuZGVyQm94KG8pOworICAgIGNvbnN0IFJlbmRlckJveCYgYm94ID0gKnRvUmVuZGVy
Qm94KCZvKTsKIAogI2lmIFVTRShORVdfVEhFTUUpCi0gICAgcmV0dXJuIGJveC0+aGVpZ2h0KCkg
KyBib3gtPm1hcmdpblRvcCgpICsgbV90aGVtZS0+YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQo
by0+c3R5bGUoKS5hcHBlYXJhbmNlKCkpICogby0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7Cisg
ICAgcmV0dXJuIGJveC5oZWlnaHQoKSArIGJveC5tYXJnaW5Ub3AoKSArIG1fdGhlbWUtPmJhc2Vs
aW5lUG9zaXRpb25BZGp1c3RtZW50KG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkpICogby5zdHlsZSgp
LmVmZmVjdGl2ZVpvb20oKTsKICNlbHNlCi0gICAgcmV0dXJuIGJveC0+aGVpZ2h0KCkgKyBib3gt
Pm1hcmdpblRvcCgpOworICAgIHJldHVybiBib3guaGVpZ2h0KCkgKyBib3gubWFyZ2luVG9wKCk7
CiAjZW5kaWYKIH0KIApAQCAtNzE0LDExICs3MTQsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXND
b250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYg
Ym8KICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0
IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcikKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJl
cGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgSW50UmVjdCYgcikKIHsKICNpZiBVU0Uo
TkVXX1RIRU1FKQogICAgIENvbnRyb2xTdGF0ZXMgc3RhdGVzKGV4dHJhY3RDb250cm9sU3RhdGVz
Rm9yUmVuZGVyZXIobykpOwotICAgIG1fdGhlbWUtPmluZmxhdGVDb250cm9sUGFpbnRSZWN0KG8t
PnN0eWxlKCkuYXBwZWFyYW5jZSgpLCAmc3RhdGVzLCByLCBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpv
b20oKSk7CisgICAgbV90aGVtZS0+aW5mbGF0ZUNvbnRyb2xQYWludFJlY3Qoby5zdHlsZSgpLmFw
cGVhcmFuY2UoKSwgJnN0YXRlcywgciwgby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAjZWxz
ZQogICAgIFVOVVNFRF9QQVJBTShvKTsKICAgICBVTlVTRURfUEFSQU0ocik7CkBAIC03MzAsMTAg
KzczMCwxMCBAQCBib29sIFJlbmRlclRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAgICAgcmV0dXJuIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgp
ICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gVGV4dEZpZWxkUGFydCAmJiBzdHlsZS0+YXBwZWFy
YW5jZSgpICE9IFRleHRBcmVhUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IE1lbnVsaXN0
QnV0dG9uUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IExpc3Rib3hQYXJ0KTsKIH0KIAot
Ym9vbCBSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKFJlbmRlck9iamVjdCogbywgQ29udHJvbFN0
YXRlczo6U3RhdGVzIHN0YXRlKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2Vk
KGNvbnN0IFJlbmRlck9iamVjdCYgbywgQ29udHJvbFN0YXRlczo6U3RhdGVzIHN0YXRlKSBjb25z
dAogewogICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGUgY29udHJvbHMg
ZG9uJ3QgcmVzcG9uZCB0byBjaGFuZ2VzIGluIDpob3ZlciBzdGF0ZQotICAgIGlmIChzdGF0ZSA9
PSBDb250cm9sU3RhdGVzOjpIb3ZlclN0YXRlICYmICFzdXBwb3J0c0hvdmVyKCZvLT5zdHlsZSgp
KSkKKyAgICBpZiAoc3RhdGUgPT0gQ29udHJvbFN0YXRlczo6SG92ZXJTdGF0ZSAmJiAhc3VwcG9y
dHNIb3Zlcigmby5zdHlsZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQXNz
dW1lIHByZXNzZWQgc3RhdGUgaXMgb25seSByZXNwb25kZWQgdG8gaWYgdGhlIGNvbnRyb2wgaXMg
ZW5hYmxlZC4KQEAgLTc0MSwxNyArNzQxLDE3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnN0YXRlQ2hh
bmdlZChSZW5kZXJPYmplY3QqIG8sIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBzdGF0ZSkgY29uCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFJlcGFpbnQgdGhlIGNvbnRyb2wuCi0gICAg
by0+cmVwYWludCgpOworICAgIG8ucmVwYWludCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIFJlbmRlclRoZW1lOjp1cGRhdGVDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVu
ZGVyT2JqZWN0KiBvLCBDb250cm9sU3RhdGVzKiBjb250cm9sU3RhdGVzKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZTo6dXBkYXRlQ29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9i
amVjdCYgbywgQ29udHJvbFN0YXRlcyogY29udHJvbFN0YXRlcykgY29uc3QKIHsKICAgICBDb250
cm9sU3RhdGVzIG5ld1N0YXRlcyA9IGV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIobyk7
CiAgICAgY29udHJvbFN0YXRlcy0+c2V0U3RhdGVzKG5ld1N0YXRlcy5zdGF0ZXMoKSk7CiB9CiAK
LUNvbnRyb2xTdGF0ZXM6OlN0YXRlcyBSZW5kZXJUaGVtZTo6ZXh0cmFjdENvbnRyb2xTdGF0ZXNG
b3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CitDb250cm9sU3RhdGVzOjpT
dGF0ZXMgUmVuZGVyVGhlbWU6OmV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3Qg
UmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewogICAgIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBzdGF0
ZXMgPSAwOwogICAgIGlmIChpc0hvdmVyZWQobykpIHsKQEAgLTc2NCw3ICs3NjQsNyBAQCBDb250
cm9sU3RhdGVzOjpTdGF0ZXMgUmVuZGVyVGhlbWU6OmV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVu
ZGVyZXIoY29uc3QgUmVuZGVyTwogICAgICAgICBpZiAoaXNTcGluVXBCdXR0b25QYXJ0UHJlc3Nl
ZChvKSkKICAgICAgICAgICAgIHN0YXRlcyB8PSBDb250cm9sU3RhdGVzOjpTcGluVXBTdGF0ZTsK
ICAgICB9Ci0gICAgaWYgKGlzRm9jdXNlZChvKSAmJiBvLT5zdHlsZSgpLm91dGxpbmVTdHlsZUlz
QXV0bygpKQorICAgIGlmIChpc0ZvY3VzZWQobykgJiYgby5zdHlsZSgpLm91dGxpbmVTdHlsZUlz
QXV0bygpKQogICAgICAgICBzdGF0ZXMgfD0gQ29udHJvbFN0YXRlczo6Rm9jdXNTdGF0ZTsKICAg
ICBpZiAoaXNFbmFibGVkKG8pKQogICAgICAgICBzdGF0ZXMgfD0gQ29udHJvbFN0YXRlczo6RW5h
YmxlZFN0YXRlOwpAQCAtNzgxLDkgKzc4MSw5IEBAIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBSZW5k
ZXJUaGVtZTo6ZXh0cmFjdENvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPCiAg
ICAgcmV0dXJuIHN0YXRlczsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNBY3RpdmUoY29uc3Qg
UmVuZGVyT2JqZWN0KiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6aXNBY3RpdmUoY29uc3Qg
UmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7Cisg
ICAgTm9kZSogbm9kZSA9IG8ubm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC03OTgsNDEgKzc5OCw0MSBAQCBib29sIFJlbmRlclRoZW1lOjppc0FjdGl2
ZShjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiAgICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLmlzQWN0aXZlKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzQ2hlY2tlZChj
b25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc0NoZWNrZWQo
Y29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIGlmICghby0+bm9kZSgpKQorICAg
IGlmICghby5ub2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxJbnB1dEVs
ZW1lbnQqIGlucHV0RWxlbWVudCA9IG8tPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBI
VE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBvLm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQo
KTsKICAgICBpZiAoIWlucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
cmV0dXJuIGlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpOwogfQogCi1ib29sIFJl
bmRlclRoZW1lOjppc0luZGV0ZXJtaW5hdGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAor
Ym9vbCBSZW5kZXJUaGVtZTo6aXNJbmRldGVybWluYXRlKGNvbnN0IFJlbmRlck9iamVjdCYgbykg
Y29uc3QKIHsKLSAgICBpZiAoIW8tPm5vZGUoKSkKKyAgICBpZiAoIW8ubm9kZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBv
LT5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0gby5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKCFpbnB1dEVsZW1l
bnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPnNo
b3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNFbmFi
bGVkKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzRW5h
YmxlZChjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IG8t
Pm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gby5ub2RlKCk7CiAgICAgaWYgKCFub2RlIHx8ICFu
b2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiAh
dG9FbGVtZW50KG5vZGUpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZTo6aXNGb2N1c2VkKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVu
ZGVyVGhlbWU6OmlzRm9jdXNlZChjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAg
Tm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gby5ub2RlKCk7CiAgICAg
aWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtODQyLDE2ICs4NDIsMTYgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKGNv
bnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKICAgICByZXR1cm4gZm9jdXNEZWxlZ2F0ZSA9PSBk
b2N1bWVudC5mb2N1c2VkRWxlbWVudCgpICYmIGZyYW1lICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5p
c0ZvY3VzZWRBbmRBY3RpdmUoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNQcmVzc2VkKGNv
bnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzUHJlc3NlZChj
b25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgaWYgKCFvLT5ub2RlKCkgfHwgIW8t
Pm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghby5ub2RlKCkgfHwgIW8ubm9kZSgp
LT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdG9F
bGVtZW50KG8tPm5vZGUoKSktPmFjdGl2ZSgpOworICAgIHJldHVybiB0b0VsZW1lbnQoby5ub2Rl
KCkpLT5hY3RpdmUoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNTcGluVXBCdXR0b25QYXJ0
UHJlc3NlZChjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjpp
c1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKIHsK
LSAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsK
ICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CkBAIC04NjAs
MTcgKzg2MCwxNyBAQCBib29sIFJlbmRlclRoZW1lOjppc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2Vk
KGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3Bp
bkJ1dHRvbkVsZW1lbnQqPihlbGVtZW50KS0+dXBEb3duU3RhdGUoKSA9PSBTcGluQnV0dG9uRWxl
bWVudDo6VXA7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzUmVhZE9ubHlDb250cm9sKGNvbnN0
IFJlbmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzUmVhZE9ubHlDb250
cm9sKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKIHsKLSAgICBOb2RlKiBub2RlID0gby0+
bm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5v
ZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0
b0VsZW1lbnQobm9kZSktPm1hdGNoZXNSZWFkT25seVBzZXVkb0NsYXNzKCk7CiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWU6OmlzSG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29s
IFJlbmRlclRoZW1lOjppc0hvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewot
ICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IG8ubm9kZSgpOwog
ICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaWYgKCF0b0VsZW1lbnQobm9kZSktPmlzU3BpbkJ1dHRvbkVsZW1lbnQoKSkK
QEAgLTg3OSwyNSArODc5LDI1IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzSG92ZXJlZChjb25zdCBS
ZW5kZXJPYmplY3QqIG8pIGNvbnN0CiAgICAgcmV0dXJuIGVsZW1lbnQtPmhvdmVyZWQoKSAmJiBl
bGVtZW50LT51cERvd25TdGF0ZSgpICE9IFNwaW5CdXR0b25FbGVtZW50OjpJbmRldGVybWluYXRl
OwogfQogCi1ib29sIFJlbmRlclRoZW1lOjppc1NwaW5VcEJ1dHRvblBhcnRIb3ZlcmVkKGNvbnN0
IFJlbmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9u
UGFydEhvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIE5vZGUqIG5v
ZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IG8ubm9kZSgpOwogICAgIGlmICghbm9k
ZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8ICF0b0VsZW1lbnQobm9kZSktPmlzU3BpbkJ1
dHRvbkVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFNwaW5CdXR0b25FbGVt
ZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U3BpbkJ1dHRvbkVsZW1lbnQqPihub2RlKTsKICAg
ICByZXR1cm4gZWxlbWVudC0+dXBEb3duU3RhdGUoKSA9PSBTcGluQnV0dG9uRWxlbWVudDo6VXA7
CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzRGVmYXVsdChjb25zdCBSZW5kZXJPYmplY3QqIG8p
IGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc0RlZmF1bHQoY29uc3QgUmVuZGVyT2JqZWN0JiBv
KSBjb25zdAogewogICAgIC8vIEEgYnV0dG9uIHNob3VsZCBvbmx5IGhhdmUgdGhlIGRlZmF1bHQg
YXBwZWFyYW5jZSBpZiB0aGUgcGFnZSBpcyBhY3RpdmUKICAgICBpZiAoIWlzQWN0aXZlKG8pKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIW8tPmZyYW1lKCkuc2V0dGluZ3MoKS5h
cHBsaWNhdGlvbkNocm9tZU1vZGUoKSkKKyAgICBpZiAoIW8uZnJhbWUoKS5zZXR0aW5ncygpLmFw
cGxpY2F0aW9uQ2hyb21lTW9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAg
cmV0dXJuIG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IERlZmF1bHRCdXR0b25QYXJ0OworICAg
IHJldHVybiBvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IERlZmF1bHRCdXR0b25QYXJ0OwogfQog
CiAjaWYgIVVTRShORVdfVEhFTUUpCkBAIC05NjcsNyArOTY3LDcgQEAgdm9pZCBSZW5kZXJUaGVt
ZTo6YWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIKICAgICBSZW5kZXJJbnB1dFNwZWVjaDo6YWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1
dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZTo6cGFpbnRJbnB1dEZpZWxkU3BlZWNoQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wg
UmVuZGVyVGhlbWU6OnBhaW50SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbihjb25zdCBSZW5kZXJPYmpl
Y3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7CiAgICAgcmV0dXJuIFJlbmRlcklucHV0U3BlZWNoOjpwYWludElucHV0RmllbGRTcGVl
Y2hCdXR0b24ob2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwogfQpAQCAtOTg5LDcgKzk4OSw3IEBA
IGJvb2wgUmVuZGVyVGhlbWU6OnN1cHBvcnRzTWV0ZXIoQ29udHJvbFBhcnQpIGNvbnN0CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjpwYWludE1ldGVyKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQorYm9vbCBSZW5kZXJUaGVt
ZTo6cGFpbnRNZXRlcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwMDIsOSArMTAwMiw5IEBA
IExheW91dFVuaXQgUmVuZGVyVGhlbWU6OnNsaWRlclRpY2tTbmFwcGluZ1RocmVzaG9sZCgpIGNv
bnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlj
a3MoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3ZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3MoY29uc3QgUmVu
ZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKLSAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBv
Lm5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTAxOCwxNCAr
MTAxOCwxNCBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sCiAKICAgICBkb3VibGUgbWluID0gaW5w
dXQtPm1pbmltdW0oKTsKICAgICBkb3VibGUgbWF4ID0gaW5wdXQtPm1heGltdW0oKTsKLSAgICBD
b250cm9sUGFydCBwYXJ0ID0gby0+c3R5bGUoKS5hcHBlYXJhbmNlKCk7CisgICAgQ29udHJvbFBh
cnQgcGFydCA9IG8uc3R5bGUoKS5hcHBlYXJhbmNlKCk7CiAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9y
dCB0aWNrcyBvbiBhbHRlcm5hdGUgc2xpZGVycyBsaWtlIE1lZGlhVm9sdW1lU2xpZGVycy4KICAg
ICBpZiAocGFydCAhPSAgU2xpZGVySG9yaXpvbnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJWZXJ0
aWNhbFBhcnQpCiAgICAgICAgIHJldHVybjsKICAgICBib29sIGlzSG9yaXpvbnRhbCA9IHBhcnQg
PT0gIFNsaWRlckhvcml6b250YWxQYXJ0OwogCiAgICAgSW50U2l6ZSB0aHVtYlNpemU7Ci0gICAg
UmVuZGVyT2JqZWN0KiB0aHVtYlJlbmRlcmVyID0gaW5wdXQtPnNsaWRlclRodW1iRWxlbWVudCgp
LT5yZW5kZXJlcigpOworICAgIGNvbnN0IFJlbmRlck9iamVjdCogdGh1bWJSZW5kZXJlciA9IGlu
cHV0LT5zbGlkZXJUaHVtYkVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAodGh1bWJSZW5k
ZXJlcikgewogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgdGh1bWJTdHlsZSA9IHRodW1iUmVu
ZGVyZXItPnN0eWxlKCk7CiAgICAgICAgIGludCB0aHVtYldpZHRoID0gdGh1bWJTdHlsZS53aWR0
aCgpLmludFZhbHVlKCk7CkBAIC0xMDM1LDcgKzEwMzUsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjpw
YWludFNsaWRlclRpY2tzKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sCiAgICAgfQogCiAgICAgSW50U2l6ZSB0aWNrU2l6ZSA9IHNsaWRlclRpY2tTaXplKCk7Ci0g
ICAgZmxvYXQgem9vbUZhY3RvciA9IG8tPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworICAgIGZs
b2F0IHpvb21GYWN0b3IgPSBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwogICAgIEZsb2F0UmVj
dCB0aWNrUmVjdDsKICAgICBpbnQgdGlja1JlZ2lvblNpZGVNYXJnaW4gPSAwOwogICAgIGludCB0
aWNrUmVnaW9uV2lkdGggPSAwOwpAQCAtMTA0NCw3ICsxMDQ0LDcgQEAgdm9pZCBSZW5kZXJUaGVt
ZTo6cGFpbnRTbGlkZXJUaWNrcyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLAogICAgIC8vIFdlIGNhbiBpZ25vcmluZyB0cmFuc2Zvcm1zIGJlY2F1c2UgdHJhbnNm
b3JtIGlzIGhhbmRsZWQgYnkgdGhlIGdyYXBoaWNzIGNvbnRleHQuCiAgICAgaWYgKHRyYWNrUmVu
ZGVyZXIpCiAgICAgICAgIHRyYWNrQm91bmRzID0gdHJhY2tSZW5kZXJlci0+YWJzb2x1dGVCb3Vu
ZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKTsKLSAgICBJbnRSZWN0IHNsaWRlckJvdW5k
cyA9IG8tPmFic29sdXRlQm91bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCk7CisgICAg
SW50UmVjdCBzbGlkZXJCb3VuZHMgPSBvLmFic29sdXRlQm91bmRpbmdCb3hSZWN0SWdub3JpbmdU
cmFuc2Zvcm1zKCk7CiAKICAgICAvLyBNYWtlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSB0cmFu
c2Zvcm1lZCBhbmNlc3RvciBlbGVtZW50LgogICAgIHRyYWNrQm91bmRzLnNldFgodHJhY2tCb3Vu
ZHMueCgpIC0gc2xpZGVyQm91bmRzLngoKSArIHJlY3QueCgpKTsKQEAgLTEwNjUsNyArMTA2NSw3
IEBAIHZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3MoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywKICAgICB9CiAgICAgUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPiBvcHRpb25zID0gZGF0YUxpc3QtPm9wdGlvbnMoKTsKICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKLSAgICBwYWludEluZm8u
Y29udGV4dC0+c2V0RmlsbENvbG9yKG8tPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBwYWludEluZm8uY29u
dGV4dC0+c2V0RmlsbENvbG9yKG8uc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvciksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IE5vZGUqIG5vZGUgPSBvcHRpb25zLT5pdGVtKGkpOyBpKyspIHsKICAgICAgICAgQVNTRVJU
KGlzSFRNTE9wdGlvbkVsZW1lbnQobm9kZSkpOwogICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCog
b3B0aW9uRWxlbWVudCA9IHRvSFRNTE9wdGlvbkVsZW1lbnQobm9kZSk7CkBAIC0xMDc0LDcgKzEw
NzQsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgZG91YmxlIHBhcnNlZFZhbHVlID0gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoaW5w
dXQtPnNhbml0aXplVmFsdWUodmFsdWUpKTsKICAgICAgICAgZG91YmxlIHRpY2tGcmFjdGlvbiA9
IChwYXJzZWRWYWx1ZSAtIG1pbikgLyAobWF4IC0gbWluKTsKLSAgICAgICAgZG91YmxlIHRpY2tS
YXRpbyA9IGlzSG9yaXpvbnRhbCAmJiBvLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IHRpY2tGcmFjdGlvbiA6IDEuMCAtIHRpY2tGcmFjdGlvbjsKKyAgICAgICAgZG91YmxlIHRp
Y2tSYXRpbyA9IGlzSG9yaXpvbnRhbCAmJiBvLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gdGlja0ZyYWN0aW9uIDogMS4wIC0gdGlja0ZyYWN0aW9uOwogICAgICAgICBkb3VibGUg
dGlja1Bvc2l0aW9uID0gcm91bmQodGlja1JlZ2lvblNpZGVNYXJnaW4gKyB0aWNrUmVnaW9uV2lk
dGggKiB0aWNrUmF0aW8pOwogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQogICAgICAgICAgICAg
dGlja1JlY3Quc2V0WCh0aWNrUG9zaXRpb24pOwpAQCAtMTEwMCw3ICsxMTAwLDcgQEAgdm9pZCBS
ZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikKIHsKIH0KIAotSW50UmVjdCBSZW5kZXJUaGVtZTo6cHJvZ3Jlc3NC
YXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmIGJvdW5k
cykgY29uc3QKK0ludFJlY3QgUmVuZGVyVGhlbWU6OnByb2dyZXNzQmFyUmVjdEZvckJvdW5kcyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGJvdW5kczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKaW5k
ZXggOWJkODBlOThjMWEzYjQxNDA4Yzg3ZTMwNmFlNTBlYWQyZGVjYjM5OS4uYzdkZTJkNTM2YmI5
ZWI1NTU2YTI0ZmUxMTI5ZjZkYzQ0ODI3NmU0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmgKQEAgLTc5LDkgKzc5LDkgQEAgcHVibGljOgogICAgIC8vIFRoaXMgbWV0aG9k
IGlzIGNhbGxlZCB0byBwYWludCB0aGUgd2lkZ2V0IGFzIGEgYmFja2dyb3VuZCBvZiB0aGUgUmVu
ZGVyT2JqZWN0LiAgQSB3aWRnZXQncyBmb3JlZ3JvdW5kLCBlLmcuLCB0aGUKICAgICAvLyB0ZXh0
IG9mIGEgYnV0dG9uLCBpcyBhbHdheXMgcmVuZGVyZWQgYnkgdGhlIGVuZ2luZSBpdHNlbGYuICBU
aGUgYm9vbGVhbiByZXR1cm4gdmFsdWUgaW5kaWNhdGVzCiAgICAgLy8gd2hldGhlciB0aGUgQ1NT
IGJvcmRlci9iYWNrZ3JvdW5kIHNob3VsZCBhbHNvIGJlIHBhaW50ZWQuCi0gICAgYm9vbCBwYWlu
dChSZW5kZXJPYmplY3QqLCBDb250cm9sU3RhdGVzKiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgIGJvb2wgcGFpbnRCb3JkZXJPbmx5KFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICBib29sIHBhaW50RGVjb3JhdGlvbnMo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIGJv
b2wgcGFpbnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgQ29udHJvbFN0YXRlcyosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIHBhaW50Qm9yZGVyT25seShjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgYm9v
bCBwYWludERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKIAogICAgIC8vIFRoZSByZW1haW5pbmcgbWV0aG9kcyBzaG91bGQg
YmUgaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHBvcnRpb24gb2YgdGhlIHRo
ZW1lLCBlLmcuLAogICAgIC8vIFJlbmRlclRoZW1lTWFjLmNwcCBmb3IgTWFjIE9TIFguCkBAIC0x
MDYsMTQgKzEwNiwxNCBAQCBwdWJsaWM6CiAgICAgLy8gQSBtZXRob2QgdG8gb2J0YWluIHRoZSBi
YXNlbGluZSBwb3NpdGlvbiBmb3IgYSAibGVhZiIgY29udHJvbC4gIFRoaXMgd2lsbCBvbmx5IGJl
IHVzZWQgaWYgYSBiYXNlbGluZQogICAgIC8vIHBvc2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVk
IGJ5IGV4YW1pbmluZyBjaGlsZCBjb250ZW50LiBDaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25z
IGFyZSBleGFtcGxlcyBvZgogICAgIC8vIGNvbnRyb2xzIHRoYXQgbmVlZCB0byBkbyB0aGlzLgot
ICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KikgY29u
c3Q7CisgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3Qm
KSBjb25zdDsKIAogICAgIC8vIEEgbWV0aG9kIGZvciBhc2tpbmcgaWYgYSBjb250cm9sIGlzIGEg
Y29udGFpbmVyIG9yIG5vdC4gIExlYWYgY29udHJvbHMgaGF2ZSB0byBoYXZlIHNvbWUgc3BlY2lh
bCBiZWhhdmlvciAobGlrZQogICAgIC8vIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBBUEkgYWJvdmUp
LgogICAgIGJvb2wgaXNDb250cm9sQ29udGFpbmVyKENvbnRyb2xQYXJ0KSBjb25zdDsKIAogICAg
IC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4g
dGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgotICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3Vw
cG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3Qm
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIGNv
bnRyb2wgaGFzIGJlZW4gc3R5bGVkIGVub3VnaCBieSB0aGUgYXV0aG9yIHRvIGRpc2FibGUgdGhl
IG5hdGl2ZSBhcHBlYXJhbmNlLgogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29u
c3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29u
c3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CkBAIC0xMjMsMTEgKzEyMywxMSBAQCBw
dWJsaWM6CiAKICAgICAvLyBTb21lIGNvbnRyb2xzIG1heSBzcGlsbCBvdXQgb2YgdGhlaXIgY29u
dGFpbmVycyAoZS5nLiwgdGhlIGNoZWNrIG9uIGFuIE9TIFggY2hlY2tib3gpLiAgV2hlbiB0aGVz
ZSBjb250cm9scyByZXBhaW50LAogICAgIC8vIHRoZSB0aGVtZSBuZWVkcyB0byBjb21tdW5pY2F0
ZSB0aGlzIGluZmxhdGVkIHJlY3QgdG8gdGhlIGVuZ2luZSBzbyB0aGF0IGl0IGNhbiBpbnZhbGlk
YXRlIHRoZSB3aG9sZSBjb250cm9sLgotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVj
dChjb25zdCBSZW5kZXJPYmplY3QqLCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIEludFJlY3QmKTsKIAogICAgIC8vIFRo
aXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBhIHJlbGV2YW50IHN0YXRlIGNoYW5nZXMgb24g
YSBwYXJ0aWN1bGFyIHRoZW1lZCBvYmplY3QsIGUuZy4sIHRoZSBtb3VzZSBiZWNvbWVzIHByZXNz
ZWQKICAgICAvLyBvciBhIGNvbnRyb2wgYmVjb21lcyBkaXNhYmxlZC4KLSAgICB2aXJ0dWFsIGJv
b2wgc3RhdGVDaGFuZ2VkKFJlbmRlck9iamVjdCosIENvbnRyb2xTdGF0ZXM6OlN0YXRlcykgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIHN0YXRlQ2hhbmdlZChjb25zdCBSZW5kZXJPYmplY3QmLCBD
b250cm9sU3RhdGVzOjpTdGF0ZXMpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2Fs
bGVkIHdoZW5ldmVyIHRoZSB0aGVtZSBjaGFuZ2VzIG9uIHRoZSBzeXN0ZW0gaW4gb3JkZXIgdG8g
Zmx1c2ggY2FjaGVkIHJlc291cmNlcyBmcm9tIHRoZQogICAgIC8vIG9sZCB0aGVtZS4KQEAgLTE4
OCwxNCArMTg4LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXpl
IHNjcm9sbGJhckNvbnRyb2xTaXplRm9yUGFydChDb250cm9sUGFydCkgeyByZXR1cm4gUmVndWxh
clNjcm9sbGJhcjsgfQogCiAgICAgLy8gTWV0aG9kIGZvciBwYWludGluZyB0aGUgY2FwcyBsb2Nr
IGluZGljYXRvcgotICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiAwOyB9
OworICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiAwOyB9Owog
CiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCiAgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0
IGludGVydmFsIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCiAgICAgdmly
dHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQ
cm9ncmVzcyopIGNvbnN0OwogICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmlt
YXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCiAgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9u
RHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OwotICAgIHZpcnR1
YWwgSW50UmVjdCBwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCBwcm9ncmVzc0JhclJl
Y3RGb3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgSW50UmVjdCYpIGNvbnN0Owog
I2VuZGlmCiAKICNpZiBFTkFCTEUoVklERU8pCkBAIC0yMjgsNyArMjI4LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgSW50U2l6ZSBzbGlkZXJUaWNrU2l6ZSgpIGNvbnN0ID0gMDsKICAgICAvLyBS
ZXR1cm5zIHRoZSBkaXN0YW5jZSBvZiBzbGlkZXIgdGljayBvcmlnaW4gZnJvbSB0aGUgc2xpZGVy
IHRyYWNrIGNlbnRlci4KICAgICB2aXJ0dWFsIGludCBzbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNr
Q2VudGVyKCkgY29uc3QgPSAwOwotICAgIHZvaWQgcGFpbnRTbGlkZXJUaWNrcyhSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBwYWludFNs
aWRlclRpY2tzKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKICNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFNob3dQbGFjZWhvbGRl
cldoZW5Gb2N1c2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI0MywxMCArMjQzLDEw
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25z
dCBGaWxlTGlzdCosIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0Fs
bG93ZWQpIGNvbnN0OwogCiAgICAgZW51bSBGaWxlVXBsb2FkRGVjb3JhdGlvbnMgeyBTaW5nbGVG
aWxlLCBNdWx0aXBsZUZpbGVzIH07Ci0gICAgdmlydHVhbCBib29sIHBhaW50RmlsZVVwbG9hZElj
b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIC8qaW5wdXRSZW5kZXJlciovLCBSZW5kZXJPYmpl
Y3QqIC8qYnV0dG9uUmVuZGVyZXIqLywgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYs
IEljb24qLCBGaWxlVXBsb2FkRGVjb3JhdGlvbnMpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRGaWxlVXBsb2FkSWNvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVj
dCYgLyppbnB1dFJlbmRlcmVyKi8sIGNvbnN0IFJlbmRlck9iamVjdCYgLypidXR0b25SZW5kZXJl
ciovLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JiwgSWNvbiosIEZpbGVVcGxvYWRE
ZWNvcmF0aW9ucykgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgRU5BQkxFKElNQUdFX0NPTlRST0xT
KQotICAgIHZpcnR1YWwgSW50U2l6ZSBpbWFnZUNvbnRyb2xzQnV0dG9uU2l6ZShjb25zdCBSZW5k
ZXJPYmplY3QqKSBjb25zdCB7IHJldHVybiBJbnRTaXplKCk7IH0KKyAgICB2aXJ0dWFsIEludFNp
emUgaW1hZ2VDb250cm9sc0J1dHRvblNpemUoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3QgeyBy
ZXR1cm4gSW50U2l6ZSgpOyB9CiAjZW5kaWYKIAogcHJvdGVjdGVkOgpAQCAtMjY3LDEyMiArMjY3
LDEyMiBAQCBwcm90ZWN0ZWQ6CiAjaWYgIVVTRShORVdfVEhFTUUpCiAgICAgLy8gTWV0aG9kcyBm
b3IgZWFjaCBhcHBlYXJhbmNlIHZhbHVlLgogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVja2Jv
eFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBw
YWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94
U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFJh
ZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBh
aW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJl
bmRlclN0eWxlKikgY29uc3QgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRl
clN0eWxlKikgY29uc3QgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmly
dHVhbCBib29sIHBhaW50UmFkaW9EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9v
bCBwYWludEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50
Q2hlY2tib3hEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFJhZGlvRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRC
dXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVz
dFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFRleHRGaWVsZERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYURlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRUZXh0QXJlYURlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBib29sIHBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZW51TGlzdERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNv
cmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVj
b3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFB1c2hCdXR0
b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNxdWFyZUJ1dHRv
bkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50UHVzaEJ1dHRvbkRl
Y29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50U3F1YXJlQnV0
dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogI2lmIEVOQUJMRShNRVRFUl9FTEVNRU5U
KQogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCBib29sIHBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVO
VCkKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50
UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dElucHV0RmllbGRTcGVlY2hCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludElucHV0RmllbGRTcGVlY2hC
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRT
bGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRl
clRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBib29sIHBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBh
aW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVl
OyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBi
b29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
dHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZWRpYUNvbnRyb2xTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFPdmVy
bGF5UGxheUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1
dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0
cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFSZXdpbmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFDb250cm9sc0JhY2tncm91bmQoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFUaW1lUmVtYWluaW5nKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAg
dmlydHVhbCBib29sIHBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFPdmVybGF5UGxheUJ1dHRvbihjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFSZXdpbmRCdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVJldHVyblRvUmVhbHRpbWVC
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVRvZ2dsZUNs
b3NlZENhcHRpb25zQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFDb250cm9sc0JhY2tncm91bmQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYUN1cnJlbnRUaW1lKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFUaW1lUmVtYWluaW5nKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJUaHVtYihjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgdmlydHVhbCBib29sIHBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CiAKICNpZiBFTkFCTEUoSU1BR0VfQ09OVFJPTFMpCi0gICAgdmlydHVh
bCBib29sIHBhaW50SW1hZ2VDb250cm9sc0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBwYWludEltYWdlQ29udHJvbHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCiBwdWJs
aWM6Ci0gICAgdm9pZCB1cGRhdGVDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVy
T2JqZWN0KiwgQ29udHJvbFN0YXRlcyopIGNvbnN0OwotICAgIENvbnRyb2xTdGF0ZXM6OlN0YXRl
cyBleHRyYWN0Q29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCopIGNv
bnN0OwotICAgIGJvb2wgaXNBY3RpdmUoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAg
Ym9vbCBpc0NoZWNrZWQoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc0lu
ZGV0ZXJtaW5hdGUoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc0VuYWJs
ZWQoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc0ZvY3VzZWQoY29uc3Qg
UmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc1ByZXNzZWQoY29uc3QgUmVuZGVyT2Jq
ZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKGNvbnN0IFJl
bmRlck9iamVjdCopIGNvbnN0OwotICAgIGJvb2wgaXNIb3ZlcmVkKGNvbnN0IFJlbmRlck9iamVj
dCopIGNvbnN0OwotICAgIGJvb2wgaXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChjb25zdCBSZW5k
ZXJPYmplY3QqKSBjb25zdDsKLSAgICBib29sIGlzUmVhZE9ubHlDb250cm9sKGNvbnN0IFJlbmRl
ck9iamVjdCopIGNvbnN0OwotICAgIGJvb2wgaXNEZWZhdWx0KGNvbnN0IFJlbmRlck9iamVjdCop
IGNvbnN0OworICAgIHZvaWQgdXBkYXRlQ29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJl
bmRlck9iamVjdCYsIENvbnRyb2xTdGF0ZXMqKSBjb25zdDsKKyAgICBDb250cm9sU3RhdGVzOjpT
dGF0ZXMgZXh0cmFjdENvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3Qm
KSBjb25zdDsKKyAgICBib29sIGlzQWN0aXZlKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0Owor
ICAgIGJvb2wgaXNDaGVja2VkKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wg
aXNJbmRldGVybWluYXRlKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNF
bmFibGVkKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNGb2N1c2VkKGNv
bnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNQcmVzc2VkKGNvbnN0IFJlbmRl
ck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChjb25z
dCBSZW5kZXJPYmplY3QmKSBjb25zdDsKKyAgICBib29sIGlzSG92ZXJlZChjb25zdCBSZW5kZXJP
YmplY3QmKSBjb25zdDsKKyAgICBib29sIGlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQoY29uc3Qg
UmVuZGVyT2JqZWN0JikgY29uc3Q7CisgICAgYm9vbCBpc1JlYWRPbmx5Q29udHJvbChjb25zdCBS
ZW5kZXJPYmplY3QmKSBjb25zdDsKKyAgICBib29sIGlzRGVmYXVsdChjb25zdCBSZW5kZXJPYmpl
Y3QmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBtdXRhYmxlIENvbG9yIG1fYWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJ
T1MuaAppbmRleCA1YjlkODE1Yjg2MzM5M2VhYmNiNDdlYmNmYTJjZmUzZGI1YTllYTJhLi5mMzdm
M2Y4YzM5ZmRjNTUyOTg0MDkzMWVhMjZhYjZmNWY2ZjNhZWE4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaApAQCAtNDgsMzUgKzQ4LDM1IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgQ0ZTdHJpbmdSZWYgY29udGVudFNpemVDYXRlZ29yeSgpOwogCiBwcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJl
bmRlck9iamVjdCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIGlzQ29udHJv
bFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxs
TGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZhbHVlLgogICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRD
aGVja2JveERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveERlY29y
YXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRSYWRpb0RlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRSYWRpb0RlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgYm9vbCBwYWludFB1c2hCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IHBhaW50QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFB1
c2hCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNp
emUoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dEZpbGVVcGxvYWRJY29uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBS
ZW5kZXJPYmplY3QqIGJ1dHRvblJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JiwgSWNvbiosIEZpbGVVcGxvYWREZWNvcmF0aW9ucykgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBib29sIHBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3Qm
IGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCYgYnV0dG9uUmVuZGVyZXIsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmLCBJY29uKiwgRmlsZVVwbG9hZERlY29yYXRpb25z
KSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZERlY29yYXRpb25z
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYURlY29yYXRpb25zKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBi
b29sIHBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RC
dXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25E
ZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9v
bCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlk
ZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBi
b29sIHBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoUFJP
R1JFU1NfRUxFTUVOVCkKICAgICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhl
IGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KQEAgLTg0LDcgKzg0LDcgQEAgcHJvdGVj
dGVkOgogICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRo
ZSBwcm9ncmVzcyBiYXIuCiAgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQ
cm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVh
bCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNz
QmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSBvdmVycmlkZTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCkBAIC05
Myw3ICs5Myw3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIGFkanVz
dFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3Jh
dGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwogCiAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFj
dGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTE1LDcg
KzExNSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVJT1MoKSB7IH0KIAog
ICAgIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcigpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBhZGRS
b3VuZGVkQm9yZGVyQ2xpcChSZW5kZXJPYmplY3QqIGJveCwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYpOworICAgIEZsb2F0UmVjdCBhZGRSb3VuZGVkQm9yZGVyQ2xpcChjb25zdCBS
ZW5kZXJPYmplY3QmIGJveCwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCiAg
ICAgU3RyaW5nIG1fbWVkaWFDb250cm9sc1NjcmlwdDsKICAgICBTdHJpbmcgbV9tZWRpYUNvbnRy
b2xzU3R5bGVTaGVldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5t
bQppbmRleCAyNmYyZjU0MDY3N2U4MGM3NTMzMGJmZTljMzRkY2VlZjM0YjU3OTExLi5lOWVjMmJh
MjljODYwZjFiZmE1NTUzZTk2MjViNWZjMDFlZGM3ODEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCkBAIC0zMTYsMTEgKzMxNiwxMSBAQCBjb25zdCBDb2xv
ciYgUmVuZGVyVGhlbWVJT1M6OnNoYWRvd0NvbG9yKCkgY29uc3QKICAgICByZXR1cm4gY29sb3I7
CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJvcmRlckNsaXAoUmVu
ZGVyT2JqZWN0KiBib3gsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cmVjdCkKK0Zsb2F0UmVjdCBSZW5kZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJvcmRlckNsaXAoY29u
c3QgUmVuZGVyT2JqZWN0JiBib3gsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKICAgICAvLyBUbyBmaXggaW5uZXIgYm9yZGVyIGJsZWVkaW5nIGlzc3Vl
cyA8cmRhcjovL3Byb2JsZW0vOTgxMjUwNz4sIHdlIGNsaXAgdG8gdGhlIG91dGVyIGJvcmRlciBh
bmQgYXNzZXJ0IHRoYXQKICAgICAvLyB0aGUgYm9yZGVyIGlzIG9wYXF1ZSBvciB0cmFuc3BhcmVu
dCwgdW5sZXNzIHdlJ3JlIGNoZWNrZWQgYmVjYXVzZSBjaGVja2VkIHJhZGlvL2NoZWNrYm94ZXMg
c2hvdyBubyBibGVlZGluZy4KLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnN0eWxlKCk7
CisgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gYm94LnN0eWxlKCk7CiAgICAgUm91bmRlZFJlY3Qg
Ym9yZGVyID0gaXNDaGVja2VkKGJveCkgPyBzdHlsZS5nZXRSb3VuZGVkSW5uZXJCb3JkZXJGb3Io
cmVjdCkgOiBzdHlsZS5nZXRSb3VuZGVkQm9yZGVyRm9yKHJlY3QpOwogCiAgICAgaWYgKGJvcmRl
ci5pc1JvdW5kZWQoKSkKQEAgLTM1Nyw3ICszNTcsNyBAQCBzdGF0aWMgQ0dQb2ludCBzaG9ydGVu
ZWQoQ0dQb2ludCBzdGFydCwgQ0dQb2ludCBlbmQsIGZsb2F0IHdpZHRoKQogICAgIHJldHVybiBD
R1BvaW50TWFrZShzdGFydC54ICsgeCAqIHJhdGlvLCBzdGFydC55ICsgeSAqIHJhdGlvKTsKIH0K
IAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveERlY29yYXRpb25zKFJlbmRlck9i
amVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhjb25zdCBS
ZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpw
YWludEluZm8uY29udGV4dCk7CiAgICAgRmxvYXRSZWN0IGNsaXAgPSBhZGRSb3VuZGVkQm9yZGVy
Q2xpcChib3gsIHBhaW50SW5mby5jb250ZXh0LCByZWN0KTsKQEAgLTQwOCwxNyArNDA4LDE3IEBA
IGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhSZW5kZXJPYmpl
Y3QqIGJveCwgY29uc3QgUGFpbnRJbmZvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbnQgUmVu
ZGVyVGhlbWVJT1M6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikgY29uc3QKK2ludCBSZW5kZXJUaGVtZUlPUzo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyKSBjb25zdAogewotICAgIGlmICghcmVuZGVyZXItPmlzQm94KCkp
CisgICAgaWYgKCFyZW5kZXJlci5pc0JveCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGNv
bnN0IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOworICAgIGNvbnN0IFJl
bmRlckJveCYgYm94ID0gKnRvUmVuZGVyQm94KCZyZW5kZXJlcik7CiAKLSAgICBpZiAoYm94LT5z
dHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQgfHwgYm94LT5zdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSBSYWRpb1BhcnQpCi0gICAgICAgIHJldHVybiBib3gtPm1hcmdpblRvcCgpICsg
Ym94LT5oZWlnaHQoKSAtIDI7IC8vIFRoZSBiYXNlbGluZSBpcyAycHggdXAgZnJvbSB0aGUgYm90
dG9tIG9mIHRoZSBjaGVja2JveC9yYWRpbyBpbiBBcHBLaXQuCi0gICAgaWYgKGJveC0+c3R5bGUo
KS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gYm94LT5tYXJn
aW5Ub3AoKSArIGJveC0+aGVpZ2h0KCkgLSA1OyAvLyBUaGlzIGlzIHRvIG1hdGNoIEFwcEtpdC4g
VGhlcmUgbWlnaHQgYmUgYSBiZXR0ZXIgd2F5IHRvIGNhbGN1bGF0ZSB0aGlzIHRob3VnaC4KKyAg
ICBpZiAoYm94LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydCB8fCBib3guc3R5
bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KQorICAgICAgICByZXR1cm4gYm94Lm1hcmdp
blRvcCgpICsgYm94LmhlaWdodCgpIC0gMjsgLy8gVGhlIGJhc2VsaW5lIGlzIDJweCB1cCBmcm9t
IHRoZSBib3R0b20gb2YgdGhlIGNoZWNrYm94L3JhZGlvIGluIEFwcEtpdC4KKyAgICBpZiAoYm94
LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICAgICAgcmV0dXJuIGJv
eC5tYXJnaW5Ub3AoKSArIGJveC5oZWlnaHQoKSAtIDU7IC8vIFRoaXMgaXMgdG8gbWF0Y2ggQXBw
S2l0LiBUaGVyZSBtaWdodCBiZSBhIGJldHRlciB3YXkgdG8gY2FsY3VsYXRlIHRoaXMgdGhvdWdo
LgogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihib3gpOwogfQogCkBA
IC00NDUsNyArNDQ1LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0UmFkaW9TdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW4KICAgICBzdHlsZS0+c2V0
Qm9yZGVyUmFkaXVzKEludFNpemUobGVuZ3RoLnZhbHVlKCkgLyAyLjBmLCBsZW5ndGgudmFsdWUo
KSAvIDIuMGYpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRSYWRpb0RlY29yYXRp
b25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UmFkaW9EZWNvcmF0aW9u
cyhjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAgICAgRmxvYXRSZWN0IGNsaXAgPSBhZGRSb3Vu
ZGVkQm9yZGVyQ2xpcChib3gsIHBhaW50SW5mby5jb250ZXh0LCByZWN0KTsKQEAgLTQ3Myw5ICs0
NzMsOSBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvbnMoUmVuZGVy
T2JqZWN0KiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmpl
Y3QqIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Citib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFRleHRGaWVsZERlY29yYXRpb25zKGNvbnN0IFJl
bmRlck9iamVjdCYgYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnN0eWxlKCk7CisgICAg
UmVuZGVyU3R5bGUmIHN0eWxlID0gYm94LnN0eWxlKCk7CiAgICAgSW50UG9pbnQgcG9pbnQocmVj
dC54KCkgKyBzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSwgcmVjdC55KCkgKyBzdHlsZS5ib3JkZXJU
b3BXaWR0aCgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigq
cGFpbnRJbmZvLmNvbnRleHQpOwpAQCAtNDg1LDE0ICs0ODUsMTQgQEAgYm9vbCBSZW5kZXJUaGVt
ZUlPUzo6cGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3Qg
UGFpbnRJbmYKICAgICAvLyBUaGlzIGdyYWRpZW50IGdldHMgZHJhd24gYmxhY2sgd2hlbiBwcmlu
dGluZy4KICAgICAvLyBEbyBub3QgZHJhdyB0aGUgZ3JhZGllbnQgaWYgdGhlcmUgaXMgbm8gdmlz
aWJsZSB0b3AgYm9yZGVyLgogICAgIGJvb2wgdG9wQm9yZGVySXNJbnZpc2libGUgPSAhc3R5bGUu
aGFzQm9yZGVyKCkgfHwgIXN0eWxlLmJvcmRlclRvcFdpZHRoKCkgfHwgc3R5bGUuYm9yZGVyVG9w
SXNUcmFuc3BhcmVudCgpOwotICAgIGlmICghYm94LT52aWV3KCkucHJpbnRpbmcoKSAmJiAhdG9w
Qm9yZGVySXNJbnZpc2libGUpCisgICAgaWYgKCFib3gudmlldygpLnByaW50aW5nKCkgJiYgIXRv
cEJvcmRlcklzSW52aXNpYmxlKQogICAgICAgICBkcmF3QXhpYWxHcmFkaWVudChwYWludEluZm8u
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGdyYWRpZW50V2l0aE5hbWUoSW5zZXRHcmFkaWVu
dCksIHBvaW50LCBGbG9hdFBvaW50KENHUG9pbnRNYWtlKHBvaW50LngoKSwgcG9pbnQueSgpICsg
My4wZikpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhjb25zdCBS
ZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMocmVuZGVy
ZXIsIHBhaW50SW5mbywgcmVjdCk7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkRGVjb3JhdGlv
bnMoYm94LCBwYWludEluZm8sIHJlY3QpOwogfQogCiBjb25zdCBpbnQgTWVudUxpc3RNaW5IZWln
aHQgPSAxNTsKQEAgLTU4Miw5ICs1ODIsOSBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RN
ZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bAogICAg
IH0KIH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRp
b25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25E
ZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0g
Ym94LT5zdHlsZSgpOworICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IGJveC5zdHlsZSgpOwogICAg
IGZsb2F0IGJvcmRlclRvcFdpZHRoID0gc3R5bGUuYm9yZGVyVG9wV2lkdGgoKTsKICAgICBGbG9h
dFJlY3QgY2xpcChyZWN0LngoKSArIHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpLCByZWN0LnkoKSAr
IHN0eWxlLmJvcmRlclRvcFdpZHRoKCksIHJlY3Qud2lkdGgoKSAtIHN0eWxlLmJvcmRlckxlZnRX
aWR0aCgpIC0gc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCgpLCByZWN0LmhlaWdodCgpIC0gc3R5bGUu
Ym9yZGVyVG9wV2lkdGgoKSAtIHN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKCkpOwogICAgIENHQ29u
dGV4dFJlZiBjZ0NvbnRleHQgPSBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
CkBAIC02MTIsNyArNjEyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1
dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWkKIAogICAgIGZsb2F0
IHNlcGFyYXRvciA9IGNsaXAubWF4WCgpIC0gTWVudUxpc3RCdXR0b25QYWRkaW5nUmlnaHQ7CiAK
LSAgICBib3gtPmRyYXdMaW5lRm9yQm94U2lkZShwYWludEluZm8uY29udGV4dCwgc2VwYXJhdG9y
IC0gYm9yZGVyVG9wV2lkdGgsIGNsaXAueSgpLCBzZXBhcmF0b3IsIGNsaXAubWF4WSgpLCBCU1Jp
Z2h0LCBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xv
ciksIHN0eWxlLmJvcmRlclRvcFN0eWxlKCksIDAsIDApOworICAgIGJveC5kcmF3TGluZUZvckJv
eFNpZGUocGFpbnRJbmZvLmNvbnRleHQsIHNlcGFyYXRvciAtIGJvcmRlclRvcFdpZHRoLCBjbGlw
LnkoKSwgc2VwYXJhdG9yLCBjbGlwLm1heFkoKSwgQlNSaWdodCwgc3R5bGUudmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpLCBzdHlsZS5ib3JkZXJUb3BTdHls
ZSgpLCAwLCAwKTsKIAogICAgIEZsb2F0UmVjdCBidXR0b25DbGlwKHNlcGFyYXRvciAtIGFkanVz
dFRvcCwgY2xpcC55KCkgLSBhZGp1c3RUb3AsIE1lbnVMaXN0QnV0dG9uUGFkZGluZ1JpZ2h0ICsg
YWRqdXN0VG9wICsgYWRqdXN0UmlnaHQsIGNsaXAuaGVpZ2h0KCkgKyBhZGp1c3RUb3AgKyBhZGp1
c3RCb3R0b20pOwogCkBAIC02MzEsNyArNjMxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFp
bnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWkK
IAogICAgIC8vIFBhaW50IEluZGljYXRvcnMuCiAKLSAgICBpZiAoYm94LT5pc01lbnVMaXN0KCkg
JiYgdG9IVE1MU2VsZWN0RWxlbWVudChib3gtPm5vZGUoKSktPm11bHRpcGxlKCkpIHsKKyAgICBp
ZiAoYm94LmlzTWVudUxpc3QoKSAmJiB0b0hUTUxTZWxlY3RFbGVtZW50KGJveC5ub2RlKCkpLT5t
dWx0aXBsZSgpKSB7CiAgICAgICAgIGludCBzaXplID0gMjsKICAgICAgICAgaW50IGNvdW50ID0g
MzsKICAgICAgICAgaW50IHBhZGRpbmcgPSAzOwpAQCAtNjg0LDEwICs2ODQsMTAgQEAgdm9pZCBS
ZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiBzZWxl
Y3RvciwgUmVuZGVyU3R5bGUKICAgICBzdHlsZS0+c2V0Qm9yZGVyUmFkaXVzKExlbmd0aFNpemUo
cmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lSU9TOjpw
YWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xp
ZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEludFJlY3QgdHJhY2tDbGlwID0gcmVj
dDsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnN0eWxlKCk7CisgICAgUmVuZGVyU3R5
bGUmIHN0eWxlID0gYm94LnN0eWxlKCk7CiAKICAgICBib29sIGlzSG9yaXpvbnRhbCA9IHRydWU7
CiAgICAgc3dpdGNoIChzdHlsZS5hcHBlYXJhbmNlKCkpIHsKQEAgLTc3OSw3ICs3NzksNyBAQCB2
b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBh
aW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lSU9T
OjpwYWludFNsaWRlclRodW1iRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwog
ICAgIEZsb2F0UmVjdCBjbGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8u
Y29udGV4dCwgcmVjdCk7CkBAIC04MDcsOSArODA3LDkgQEAgZG91YmxlIFJlbmRlclRoZW1lSU9T
OjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QK
ICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jh
cihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIo
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFyZW5kZXJlci0+aXNQcm9ncmVzcygp
KQorICAgIGlmICghcmVuZGVyZXIuaXNQcm9ncmVzcygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGNvbnN0IGludCBwcm9ncmVzc0JhckhlaWdodCA9IDk7CkBAIC04MzYsNyArODM2LDcg
QEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBQYWludEluZm8mIHAKICAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JT
dG9wKDEuMCwgQ29sb3IoMHg4ZCwgMHg4ZCwgMHg4ZCkpOwogICAgIGNvbnRleHQtPnNldFN0cm9r
ZUdyYWRpZW50KHN0cm9rZUdyYWRpZW50LnJlbGVhc2UoKSk7CiAKLSAgICBDb2xvclNwYWNlIGNv
bG9yU3BhY2UgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvclNwYWNlKCk7CisgICAgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlID0gcmVuZGVyZXIuc3R5bGUoKS5jb2xvclNwYWNlKCk7CiAgICAgY29udGV4
dC0+c2V0RmlsbENvbG9yKENvbG9yKDI1NSwgMjU1LCAyNTUpLCBjb2xvclNwYWNlKTsKIAogICAg
IFBhdGggdHJhY2tQYXRoOwpAQCAtODU3LDEwICs4NTcsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludElu
Zm8mIHAKIAogICAgIGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0LngoKSwgdmVydGlj
YWxSZW5kZXJpbmdQb3NpdGlvbiwgcmVjdC53aWR0aCgpLCB1cHBlckdyYWRpZW50SGVpZ2h0KSk7
CiAKLSAgICBSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNz
KHJlbmRlcmVyKTsKLSAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkgewor
ICAgIGNvbnN0IFJlbmRlclByb2dyZXNzJiByZW5kZXJQcm9ncmVzcyA9ICp0b1JlbmRlclByb2dy
ZXNzKCZyZW5kZXJlcik7CisgICAgaWYgKHJlbmRlclByb2dyZXNzLmlzRGV0ZXJtaW5hdGUoKSkg
ewogICAgICAgICAvLyAyKSBEcmF3IHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgICAgIGRvdWJsZSBw
b3NpdGlvbiA9IGNsYW1wVG8ocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCksIDAuMCwgMS4wKTsK
KyAgICAgICAgZG91YmxlIHBvc2l0aW9uID0gY2xhbXBUbyhyZW5kZXJQcm9ncmVzcy5wb3NpdGlv
bigpLCAwLjAsIDEuMCk7CiAgICAgICAgIGRvdWJsZSBiYXJXaWR0aCA9IHBvc2l0aW9uICogcmVj
dC53aWR0aCgpOwogICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGJhckdyYWRpZW50ID0gR3JhZGll
bnQ6OmNyZWF0ZShGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9u
ICsgMC41KSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiAr
IHByb2dyZXNzQmFySGVpZ2h0IC0gMSkpOwogICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JT
dG9wKDAuMCwgQ29sb3IoMTk1LCAyMTcsIDI0NykpOwpAQCAtODc5LDcgKzg3OSw3IEBAIGJvb2wg
UmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwg
Y29uc3QgUGFpbnRJbmZvJiBwCiAKICAgICAgICAgUGF0aCBiYXJQYXRoOwogICAgICAgICBpbnQg
bGVmdCA9IHJlY3QueCgpOwotICAgICAgICBpZiAoIXJlbmRlclByb2dyZXNzLT5zdHlsZSgpLmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICAgICAgaWYgKCFyZW5kZXJQcm9ncmVzcy5zdHls
ZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIGxlZnQgPSByZWN0Lm1h
eFgoKSAtIGJhcldpZHRoOwogICAgICAgICBGbG9hdFJlY3QgYmFyUmVjdChsZWZ0ICsgMC4yNSwg
dmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuMjUsIHN0ZDo6bWF4KGJhcldpZHRoIC0gMC41
LCAwLjApLCBwcm9ncmVzc0JhckhlaWdodCAtIDAuNSk7CiAgICAgICAgIGJhclBhdGguYWRkUm91
bmRlZFJlY3QoYmFyUmVjdCwgcm91bmRlZENvcm5lclJhZGl1cyk7CkBAIC05MjEsNyArOTIxLDcg
QEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29s
dmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUKICAgICBhZGp1c3RSb3VuZEJvcmRlclJhZGl1cygq
c3R5bGUsIGJveCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2VhcmNoRmllbGRE
ZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNlYXJjaEZp
ZWxkRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRleHRG
aWVsZERlY29yYXRpb25zKGJveCwgcGFpbnRJbmZvLCByZWN0KTsKIH0KQEAgLTk0NywxOCArOTQ3
LDE4IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5CiAgICAgYWRqdXN0Um91bmRCb3JkZXJSYWRp
dXMoKnN0eWxlLCBib3gpOwogfQogCi1ib29sIFJlbmRlclRoZW1lSU9TOjpwYWludEJ1dHRvbkRl
Y29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50QnV0dG9uRGVj
b3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFB1c2hCdXR0b25E
ZWNvcmF0aW9ucyhib3gsIHBhaW50SW5mbywgcmVjdCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJ
T1M6OnBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhl
bWVJT1M6OnBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgYm94
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0
KTsKICAgICBGbG9hdFJlY3QgY2xpcCA9IGFkZFJvdW5kZWRCb3JkZXJDbGlwKGJveCwgcGFpbnRJ
bmZvLmNvbnRleHQsIHJlY3QpOwogCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBhaW50
SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBpZiAoYm94LT5zdHlsZSgpLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuaXNEYXJrKCkp
CisgICAgaWYgKGJveC5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDb2xvcikuaXNEYXJrKCkpCiAgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50KGNnQ29u
dGV4dCwgZ3JhZGllbnRXaXRoTmFtZShDb252ZXhHcmFkaWVudCksIGNsaXAubG9jYXRpb24oKSwg
RmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5tYXhZKCkpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsK
ICAgICBlbHNlIHsKICAgICAgICAgZHJhd0F4aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVu
dFdpdGhOYW1lKFNoYWRlR3JhZGllbnQpLCBjbGlwLmxvY2F0aW9uKCksIEZsb2F0UG9pbnQoY2xp
cC54KCksIGNsaXAubWF4WSgpKSwgTGluZWFySW50ZXJwb2xhdGlvbik7CkBAIC05ODIsMTIgKzk4
MiwxMiBAQCBjb25zdCBpbnQga1RodW1ibmFpbEJvcmRlckNvcm5lclJhZGl1cyA9IDE7CiBjb25z
dCBpbnQga1Zpc2libGVCYWNrZ3JvdW5kSW1hZ2VXaWR0aCA9IDE7CiBjb25zdCBpbnQga011bHRp
cGxlVGh1bWJuYWlsU2hyaW5rU2l6ZSA9IDI7CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50
RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBSZW5kZXJPYmplY3QqIGJ1
dHRvblJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCwgSWNvbiogaWNvbiwgRmlsZVVwbG9hZERlY29yYXRpb25zIGZpbGVVcGxvYWREZWNvcmF0
aW9ucykKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9u
cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5kZXJPYmplY3QmIGJ1dHRvblJlbmRlcmVy
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCwgSWNvbiog
aWNvbiwgRmlsZVVwbG9hZERlY29yYXRpb25zIGZpbGVVcGxvYWREZWNvcmF0aW9ucykKIHsKICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0
KTsKIAogICAgIEludFNpemUgY29ybmVyU2l6ZShrVGh1bWJuYWlsQm9yZGVyQ29ybmVyUmFkaXVz
LCBrVGh1bWJuYWlsQm9yZGVyQ29ybmVyUmFkaXVzKTsKLSAgICBDb2xvciBwaWN0dXJlRnJhbWVD
b2xvciA9IGJ1dHRvblJlbmRlcmVyID8gYnV0dG9uUmVuZGVyZXItPnN0eWxlKCkudmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpIDogQ29sb3IoNzYuMGYsIDc2
LjBmLCA3Ni4wZik7CisgICAgQ29sb3IgcGljdHVyZUZyYW1lQ29sb3IgPSBidXR0b25SZW5kZXJl
ci5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9y
KTsKIAogICAgIEludFJlY3QgdGh1bWJuYWlsUGljdHVyZUZyYW1lUmVjdCA9IHJlY3Q7CiAgICAg
SW50UmVjdCB0aHVtYm5haWxSZWN0ID0gcmVjdDsKQEAgLTEwMDAsNyArMTAwMCw3IEBAIGJvb2wg
UmVuZGVyVGhlbWVJT1M6OnBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucyhSZW5kZXJPYmpl
Y3QqLCBSZW5kZXJPYmplY3QqCiAgICAgICAgIHRodW1ibmFpbFJlY3QuY29udHJhY3Qoa011bHRp
cGxlVGh1bWJuYWlsU2hyaW5rU2l6ZSwga011bHRpcGxlVGh1bWJuYWlsU2hyaW5rU2l6ZSk7CiAK
ICAgICAgICAgLy8gQmFja2dyb3VuZCBwaWN0dXJlIGZyYW1lIGFuZCBzaW1wbGUgYmFja2dyb3Vu
ZCBpY29uIHdpdGggYSBncmFkaWVudCBtYXRjaGluZyB0aGUgYnV0dG9uLgotICAgICAgICBDb2xv
ciBiYWNrZ3JvdW5kSW1hZ2VDb2xvciA9IGJ1dHRvblJlbmRlcmVyID8gQ29sb3IoYnV0dG9uUmVu
ZGVyZXItPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKS5yZ2IoKSkgOiBDb2xvcigyMDYuMGYsIDIwNi4wZiwgMjA2LjBmKTsKKyAgICAgICAg
Q29sb3IgYmFja2dyb3VuZEltYWdlQ29sb3IgPSBDb2xvcihidXR0b25SZW5kZXJlci5zdHlsZSgp
LnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikucmdiKCkp
OwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRl
ZFJlY3QodGh1bWJuYWlsUGljdHVyZUZyYW1lUmVjdCwgY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSwg
Y29ybmVyU2l6ZSwgY29ybmVyU2l6ZSksIHBpY3R1cmVGcmFtZUNvbG9yLCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KHRodW1ibmFpbFJl
Y3QsIGJhY2tncm91bmRJbWFnZUNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAppbmRleCAwZmJlNjEx
YTJiY2Y4NDNjMjA2YWU5ZmZjMTA1ZDE1ZmJjNjBjYWM0Li4yYjE5ZDQ3ZDY5NWMzOWQyZjg4NzY5
ZTMyNDE4Y2Y0M2JiZTIyYTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMuaApAQCAtNDQsMTIgKzQ0LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxSZW5kZXJUaGVtZT4gY3JlYXRlKCk7CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhl
IGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5v
dC4KLSAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2Jq
ZWN0KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0
IFJlbmRlck9iamVjdCYpIGNvbnN0OwogCiAgICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcg
aWYgYW55IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgogICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqLCBJbnRS
ZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0
IFJlbmRlck9iamVjdCYsIEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBp
c0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwgY29u
c3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CiAKQEAg
LTgyLDEzICs4MiwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBh
ZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVy
bmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29s
IHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2Nr
SW5kaWNhdG9yKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwb3BzTWVudUJ5QXJyb3dLZXlz
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgRU5BQkxFKE1FVEVSX0VM
RU1FTlQpCiAgICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5k
ZXJNZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZXRlcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c01ldGVyKENvbnRyb2xQYXJ0KSBjb25zdDsKICNlbmRpZgogCkBAIC05NywxNCArOTcsMTQg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9y
UHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKICAgICAvLyBSZXR1cm5zIHRoZSBk
dXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgogICAgIHZpcnR1
YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFJlY3QgcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNv
bnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIEludFJlY3QgcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgdmlydHVh
bCBDb2xvciBzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEKSBjb25zdDsKICAgICAvLyBDb250cm9scyBj
b2xvciB2YWx1ZXMgcmV0dXJuZWQgZnJvbSBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKCkuIHN5c3Rl
bUNvbG9yKCkgd2lsbCBiZSB1c2VkIHdoZW4gZmFsc2UuCiAgICAgdmlydHVhbCBib29sIHVzZXNU
ZXN0TW9kZUZvY3VzUmluZ0NvbG9yKCkgY29uc3Q7CiAgICAgLy8gQSB2aWV3IGFzc29jaWF0ZWQg
dG8gdGhlIGNvbnRhaW5lZCBkb2N1bWVudC4gU3ViY2xhc3NlcyBtYXkgbm90IGhhdmUgc3VjaCBh
IHZpZXcgYW5kIHJldHVybiBhIGZha2UuCi0gICAgTlNWaWV3KiBkb2N1bWVudFZpZXdGb3IoUmVu
ZGVyT2JqZWN0KikgY29uc3Q7CisgICAgTlNWaWV3KiBkb2N1bWVudFZpZXdGb3IoY29uc3QgUmVu
ZGVyT2JqZWN0JikgY29uc3Q7CiAKIAogcHJvdGVjdGVkOgpAQCAtMTIzLDQzICsxMjMsNDMgQEAg
cHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2VsZWN0aW9uRm9yZWdyb3Vu
ZENvbG9ycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29s
IHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRp
b25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jl
c3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRpZgogCi0gICAgdmlydHVhbCBi
b29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVt
YihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlk
ZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRT
ZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
bihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRT
ZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9v
bCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzQ2xvc2VkQ2FwdGlvbmluZygpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KQEAgLTE2NywxNCArMTY3LDE0IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNvbnN0OwogCi0gICAgdmlydHVh
bCBib29sIHBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbmFw
c2hvdHRlZFBsdWdpbk92ZXJsYXkoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVM
aXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0aCwg
Ym9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRSZWN0
IGluZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgaW50KiBt
YXJnaW5zLCBmbG9hdCB6b29tTGV2ZWwgPSAxLjBmKSBjb25zdDsKIAotICAgIEZsb2F0UmVjdCBj
b252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBj
b25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBpbnB1dFJl
Y3QsIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgY29udmVydFRvUGFpbnRp
bmdSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2Jq
ZWN0JiBwYXJ0UmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRS
ZWN0JikgY29uc3Q7CiAKICAgICAvLyBHZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhl
IGZvbnQuIFVzZWQgYnkgc29tZSBvZiB0aGUgY29udHJvbHMgKGxpa2UgYnV0dG9ucykuCiAgICAg
TlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKQEAg
LTE4NSwyNiArMTg1LDI2IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBzaXplRm9yU3lzdGVtRm9u
dChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKICAgICB2b2lkIHNl
dEZvbnRGcm9tQ29udHJvbFNpemUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgTlNDb250
cm9sU2l6ZSkgY29uc3Q7CiAKLSAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqLCBj
b25zdCBSZW5kZXJPYmplY3QqKTsKLSAgICB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwq
LCBjb25zdCBSZW5kZXJPYmplY3QqKTsKLSAgICB2b2lkIHVwZGF0ZUZvY3VzZWRTdGF0ZShOU0Nl
bGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKLSAgICB2b2lkIHVwZGF0ZVByZXNzZWRTdGF0ZShO
U0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0
ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QmKTsKKyAgICB2b2lkIHVwZGF0ZUVuYWJsZWRT
dGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QmKTsKKyAgICB2b2lkIHVwZGF0ZUZvY3Vz
ZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVBy
ZXNzZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QmKTsKICAgICAvLyBBbiBvcHRp
b25hbCBob29rIGZvciBzdWJjbGFzc2VzIHRvIHVwZGF0ZSB0aGUgY29udHJvbCB0aW50IG9mIE5T
Q2VsbC4KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQWN0aXZlU3RhdGUoTlNDZWxsKiwgY29uc3Qg
UmVuZGVyT2JqZWN0KikgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFjdGl2ZVN0YXRlKE5T
Q2VsbCosIGNvbnN0IFJlbmRlck9iamVjdCYpIHsgfQogCiAgICAgLy8gSGVscGVycyBmb3IgYWRq
dXN0aW5nIGFwcGVhcmFuY2UgYW5kIGZvciBwYWludGluZwogCi0gICAgdm9pZCBzZXRQb3B1cEJ1
dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dm9pZCBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJ
bnRSZWN0Jik7CiAgICAgY29uc3QgSW50U2l6ZSogcG9wdXBCdXR0b25TaXplcygpIGNvbnN0Owog
ICAgIGNvbnN0IGludCogcG9wdXBCdXR0b25NYXJnaW5zKCkgY29uc3Q7CiAgICAgY29uc3QgaW50
KiBwb3B1cEJ1dHRvblBhZGRpbmcoTlNDb250cm9sU2l6ZSkgY29uc3Q7Ci0gICAgdm9pZCBwYWlu
dE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
ICAgIGNvbnN0IEludFNpemUqIG1lbnVMaXN0U2l6ZXMoKSBjb25zdDsKIAogICAgIGNvbnN0IElu
dFNpemUqIHNlYXJjaEZpZWxkU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBJbnRTaXplKiBjYW5j
ZWxCdXR0b25TaXplcygpIGNvbnN0OwogICAgIGNvbnN0IEludFNpemUqIHJlc3VsdHNCdXR0b25T
aXplcygpIGNvbnN0OwotICAgIHZvaWQgc2V0U2VhcmNoQ2VsbFN0YXRlKFJlbmRlck9iamVjdCos
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHNldFNlYXJjaENlbGxTdGF0ZShjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdm9pZCBzZXRTZWFyY2hGaWVsZFNpemUo
UmVuZGVyU3R5bGUqKSBjb25zdDsKIAogICAgIE5TUG9wVXBCdXR0b25DZWxsICpwb3B1cEJ1dHRv
bigpIGNvbnN0OwpAQCAtMjI2LDggKzIyNiw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShJTUFHRV9DT05UUk9MUykKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbWFnZUNvbnRyb2xz
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIEludFNpemUgaW1hZ2VDb250cm9sc0J1dHRvblNpemUoY29u
c3QgUmVuZGVyT2JqZWN0KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50
SW1hZ2VDb250cm9sc0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBJbnRTaXplIGltYWdlQ29u
dHJvbHNCdXR0b25TaXplKGNvbnN0IGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0IG92ZXJyaWRl
OwogICAgIE5TU2VydmljZXNSb2xsb3ZlckJ1dHRvbkNlbGwgKnNlcnZpY2VzUm9sbG92ZXJCdXR0
b25DZWxsKCkgY29uc3Q7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCmluZGV4IDI1OGM3YWUyYjJmYmFkYjI1MGIxYjQ0OGU0MDg2MmE5OWVjMDY4
MGMuLmNkMGU3OTE0ODA4ZTJlYTI2ZWZkZWM5ZjE0ODE1MzQwZWI1OWVlYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTIxNywxMCArMjE3LDEwIEBA
IFJlbmRlclRoZW1lTWFjOjp+UmVuZGVyVGhlbWVNYWMoKQogICAgIFtbTlNOb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9ub3RpZmljYXRpb25PYnNlcnZl
ci5nZXQoKV07CiB9CiAKLU5TVmlldyogUmVuZGVyVGhlbWVNYWM6OmRvY3VtZW50Vmlld0ZvcihS
ZW5kZXJPYmplY3QqIG8pIGNvbnN0CitOU1ZpZXcqIFJlbmRlclRoZW1lTWFjOjpkb2N1bWVudFZp
ZXdGb3IoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewogICAgIENvbnRyb2xTdGF0ZXMg
c3RhdGVzKGV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIobykpOwotICAgIHJldHVybiBU
aGVtZU1hYzo6ZW5zdXJlZFZpZXcoJm8tPnZpZXcoKS5mcmFtZVZpZXcoKSwgJnN0YXRlcyk7Cisg
ICAgcmV0dXJuIFRoZW1lTWFjOjplbnN1cmVkVmlldygmby52aWV3KCkuZnJhbWVWaWV3KCksICZz
dGF0ZXMpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNjAyLDkgKzYwMiw5IEBAIGJvb2wg
UmVuZGVyVGhlbWVNYWM6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IGNvbnN0IEJvcmRlckRhdGEmCiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHls
ZWQoc3R5bGUsIGJvcmRlciwgYmFja2dyb3VuZCwgYmFja2dyb3VuZENvbG9yKTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBv
LCBJbnRSZWN0JiByKQordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UmVwYWludFJlY3QoY29u
c3QgUmVuZGVyT2JqZWN0JiBvLCBJbnRSZWN0JiByKQogewotICAgIENvbnRyb2xQYXJ0IHBhcnQg
PSBvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gby5zdHls
ZSgpLmFwcGVhcmFuY2UoKTsKIAogI2lmIFVTRShORVdfVEhFTUUpCiAgICAgc3dpdGNoIChwYXJ0
KSB7CkBAIC02MjEsNyArNjIxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UmVwYWlu
dFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBJbnRSZWN0JiByKQogICAgIH0KICNlbmRpZgog
Ci0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAg
ZmxvYXQgem9vbUxldmVsID0gby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIGlmIChw
YXJ0ID09IE1lbnVsaXN0UGFydCkgewogICAgICAgICBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShv
LCByKTsKQEAgLTY1MCwyMCArNjUwLDIwIEBAIEludFJlY3QgUmVuZGVyVGhlbWVNYWM6OmluZmxh
dGVSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotRmxvYXRSZWN0IFJlbmRlclRoZW1lTWFjOjpjb252ZXJ0VG9Q
YWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5k
ZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0
IEludFJlY3QmIHIpIGNvbnN0CitGbG9hdFJlY3QgUmVuZGVyVGhlbWVNYWM6OmNvbnZlcnRUb1Bh
aW50aW5nUmVjdChjb25zdCBSZW5kZXJPYmplY3QmIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRl
ck9iamVjdCYgcGFydFJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3Qg
SW50UmVjdCYgcikgY29uc3QKIHsKICAgICBGbG9hdFJlY3QgcGFydFJlY3QoaW5wdXRSZWN0KTsK
IAogICAgIC8vIENvbXB1dGUgYW4gb2Zmc2V0IGJldHdlZW4gdGhlIHBhcnQgcmVuZGVyZXIgYW5k
IHRoZSBpbnB1dCByZW5kZXJlcgogICAgIEZsb2F0U2l6ZSBvZmZzZXRGcm9tSW5wdXRSZW5kZXJl
cjsKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcGFydFJlbmRlcmVyOwotICAg
IHdoaWxlIChyZW5kZXJlciAmJiByZW5kZXJlciAhPSBpbnB1dFJlbmRlcmVyKSB7CisgICAgY29u
c3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9ICZwYXJ0UmVuZGVyZXI7CisgICAgd2hpbGUgKHJl
bmRlcmVyICYmIHJlbmRlcmVyICE9ICZpbnB1dFJlbmRlcmVyKSB7CiAgICAgICAgIFJlbmRlckVs
ZW1lbnQqIGNvbnRhaW5pbmdSZW5kZXJlciA9IHJlbmRlcmVyLT5jb250YWluZXIoKTsKICAgICAg
ICAgb2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIgLT0gcm91bmRlZEludFNpemUocmVuZGVyZXItPm9m
ZnNldEZyb21Db250YWluZXIoY29udGFpbmluZ1JlbmRlcmVyLCBMYXlvdXRQb2ludCgpKSk7CiAg
ICAgICAgIHJlbmRlcmVyID0gY29udGFpbmluZ1JlbmRlcmVyOwogICAgIH0KICAgICAvLyBJZiB0
aGUgaW5wdXQgcmVuZGVyZXIgd2FzIG5vdCBhIGNvbnRhaW5lciwgc29tZXRoaW5nIHdlbnQgd3Jv
bmcKLSAgICBBU1NFUlQocmVuZGVyZXIgPT0gaW5wdXRSZW5kZXJlcik7CisgICAgQVNTRVJUKHJl
bmRlcmVyID09ICZpbnB1dFJlbmRlcmVyKTsKICAgICAvLyBNb3ZlIHRoZSByZWN0IGludG8gcGFy
dFJlbmRlcmVyJ3MgY29vcmRzCiAgICAgcGFydFJlY3QubW92ZShvZmZzZXRGcm9tSW5wdXRSZW5k
ZXJlcik7CiAgICAgLy8gQWNjb3VudCBmb3IgdGhlIGxvY2FsIGRyYXdpbmcgb2Zmc2V0ICh0eCwg
dHkpCkBAIC02NzIsNyArNjcyLDcgQEAgRmxvYXRSZWN0IFJlbmRlclRoZW1lTWFjOjpjb252ZXJ0
VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmUKICAgICByZXR1
cm4gcGFydFJlY3Q7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUNoZWNrZWRTdGF0
ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJlbmRlck9iamVjdCogbykKK3ZvaWQgUmVuZGVyVGhlbWVN
YWM6OnVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJlbmRlck9iamVjdCYg
bykKIHsKICAgICBib29sIG9sZEluZGV0ZXJtaW5hdGUgPSBbY2VsbCBzdGF0ZV0gPT0gTlNNaXhl
ZFN0YXRlOwogICAgIGJvb2wgaW5kZXRlcm1pbmF0ZSA9IGlzSW5kZXRlcm1pbmF0ZShvKTsKQEAg
LTY4OCw3ICs2ODgsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVDaGVja2VkU3RhdGUo
TlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCiAgICAgICAgIFtjZWxsIHNldFN0
YXRlOmNoZWNrZWQgPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvKQordm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKE5TQ2VsbCog
Y2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0JiBvKQogewogICAgIGJvb2wgb2xkRW5hYmxlZCA9IFtj
ZWxsIGlzRW5hYmxlZF07CiAgICAgYm9vbCBlbmFibGVkID0gaXNFbmFibGVkKG8pOwpAQCAtNjk2
LDIzICs2OTYsMjMgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKE5T
Q2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvKQogICAgICAgICBbY2VsbCBzZXRFbmFi
bGVkOmVuYWJsZWRdOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVGb2N1c2VkU3Rh
dGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCit2b2lkIFJlbmRlclRoZW1l
TWFjOjp1cGRhdGVGb2N1c2VkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3Qm
IG8pCiB7CiAgICAgYm9vbCBvbGRGb2N1c2VkID0gW2NlbGwgc2hvd3NGaXJzdFJlc3BvbmRlcl07
Ci0gICAgYm9vbCBmb2N1c2VkID0gaXNGb2N1c2VkKG8pICYmIG8tPnN0eWxlKCkub3V0bGluZVN0
eWxlSXNBdXRvKCk7CisgICAgYm9vbCBmb2N1c2VkID0gaXNGb2N1c2VkKG8pICYmIG8uc3R5bGUo
KS5vdXRsaW5lU3R5bGVJc0F1dG8oKTsKICAgICBpZiAoZm9jdXNlZCAhPSBvbGRGb2N1c2VkKQog
ICAgICAgICBbY2VsbCBzZXRTaG93c0ZpcnN0UmVzcG9uZGVyOmZvY3VzZWRdOwogfQogCi12b2lk
IFJlbmRlclRoZW1lTWFjOjp1cGRhdGVQcmVzc2VkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBS
ZW5kZXJPYmplY3QqIG8pCit2b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVQcmVzc2VkU3RhdGUo
TlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QmIG8pCiB7CiAgICAgYm9vbCBvbGRQcmVz
c2VkID0gW2NlbGwgaXNIaWdobGlnaHRlZF07Ci0gICAgYm9vbCBwcmVzc2VkID0gby0+bm9kZSgp
ICYmIG8tPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChvLT5ub2RlKCkpLT5h
Y3RpdmUoKTsKKyAgICBib29sIHByZXNzZWQgPSBvLm5vZGUoKSAmJiBvLm5vZGUoKS0+aXNFbGVt
ZW50Tm9kZSgpICYmIHRvRWxlbWVudChvLm5vZGUoKSktPmFjdGl2ZSgpOwogICAgIGlmIChwcmVz
c2VkICE9IG9sZFByZXNzZWQpCiAgICAgICAgIFtjZWxsIHNldEhpZ2hsaWdodGVkOnByZXNzZWRd
OwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBS
ZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU3VwcG9y
dHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7CiAgICAgLy8gQW4gYWx0ZXJu
YXRlIHdheSB0byBpbXBsZW1lbnQgdGhpcyB3b3VsZCBiZSB0byBnZXQgdGhlIGFwcHJvcHJpYXRl
IGNlbGwgb2JqZWN0CiAgICAgLy8gYW5kIGNhbGwgdGhlIHByaXZhdGUgX25lZWRSZWRyYXdPbldp
bmRvd0NoYW5nZWRLZXlTdGF0ZSBtZXRob2QuIEFuIGFkdmFudGFnZSBvZgpAQCAtNzIzLDcgKzcy
Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJl
bmRlck9iamVjdCogbykgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQ2hl
Y2tib3hlcyBvbmx5IGhhdmUgdGludCB3aGVuIGNoZWNrZWQuCi0gICAgaWYgKG8tPnN0eWxlKCku
YXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydCkKKyAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFu
Y2UoKSA9PSBDaGVja2JveFBhcnQpCiAgICAgICAgIHJldHVybiBpc0NoZWNrZWQobyk7CiAKICAg
ICAvLyBGb3Igbm93IGFzc3VtZSBvdGhlciBjb250cm9scyBoYXZlIHRpbnQgaWYgZW5hYmxlZC4K
QEAgLTgxMSw3ICs4MTEsNyBAQCBOU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9s
U2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHJldHVybiBO
U01pbmlDb250cm9sU2l6ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0Rmll
bGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
CiB7CiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludElu
Zm8uY29udGV4dCk7CiAKQEAgLTgzMSw3ICs4MzEsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjph
ZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KgogewogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikK
IHsKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC04NDIsNyArODQyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6
cGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mIHBh
aW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4
dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEFyZWEoY29uc3QgUmVu
ZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKIHsKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50
SW5mby5jb250ZXh0KTsKICAgICB3a0RyYXdCZXplbGVkVGV4dEFyZWEociwgaXNFbmFibGVkKG8p
ICYmICFpc1JlYWRPbmx5Q29udHJvbChvKSk7CkBAIC04ODEsMjEgKzg4MSwyMSBAQCBjb25zdCBp
bnQqIFJlbmRlclRoZW1lTWFjOjpwb3B1cEJ1dHRvblBhZGRpbmcoTlNDb250cm9sU2l6ZSBzaXpl
KSBjb25zdAogICAgIHJldHVybiBwYWRkaW5nW3NpemVdOwogfQogCi1ib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVM
aXN0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHIpCiB7CiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2Fs
Q29udGV4dChwYWludEluZm8uY29udGV4dCk7CiAgICAgc2V0UG9wdXBCdXR0b25DZWxsU3RhdGUo
bywgcik7CiAKICAgICBOU1BvcFVwQnV0dG9uQ2VsbCogcG9wdXBCdXR0b24gPSB0aGlzLT5wb3B1
cEJ1dHRvbigpOwogCi0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS5lZmZlY3RpdmVa
b29tKCk7CisgICAgZmxvYXQgem9vbUxldmVsID0gby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsK
ICAgICBJbnRTaXplIHNpemUgPSBwb3B1cEJ1dHRvblNpemVzKClbW3BvcHVwQnV0dG9uIGNvbnRy
b2xTaXplXV07CiAgICAgc2l6ZS5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSAqIHpvb21MZXZlbCk7
CiAgICAgc2l6ZS5zZXRXaWR0aChyLndpZHRoKCkpOwogCiAgICAgLy8gTm93IGluZmxhdGUgaXQg
dG8gYWNjb3VudCBmb3IgdGhlIHNoYWRvdy4KICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHI7
Ci0gICAgaWYgKHIud2lkdGgoKSA+PSBtaW5pbXVtTWVudUxpc3RTaXplKCZvLT5zdHlsZSgpKSkK
KyAgICBpZiAoci53aWR0aCgpID49IG1pbmltdW1NZW51TGlzdFNpemUoJm8uc3R5bGUoKSkpCiAg
ICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgcG9w
dXBCdXR0b25NYXJnaW5zKCksIHpvb21MZXZlbCk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKQEAgLTkxMyw3ICs5MTMsNyBA
QCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sCiAKICAgICBOU1ZpZXcgKnZpZXcgPSBkb2N1bWVudFZp
ZXdGb3Iobyk7CiAgICAgW3BvcHVwQnV0dG9uIGRyYXdXaXRoRnJhbWU6aW5mbGF0ZWRSZWN0IGlu
Vmlldzp2aWV3XTsKLSAgICBpZiAoaXNGb2N1c2VkKG8pICYmIG8tPnN0eWxlKCkub3V0bGluZVN0
eWxlSXNBdXRvKCkpCisgICAgaWYgKGlzRm9jdXNlZChvKSAmJiBvLnN0eWxlKCkub3V0bGluZVN0
eWxlSXNBdXRvKCkpCiAgICAgICAgIFtwb3B1cEJ1dHRvbiBfd2ViX2RyYXdGb2N1c1JpbmdXaXRo
RnJhbWU6aW5mbGF0ZWRSZWN0IGluVmlldzp2aWV3XTsKICAgICBbcG9wdXBCdXR0b24gc2V0Q29u
dHJvbFZpZXc6bmlsXTsKIApAQCAtOTM0LDE0ICs5MzQsMTQgQEAgSW50U2l6ZSBSZW5kZXJUaGVt
ZU1hYzo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiByZW5kZXJNZXRlciwg
Y29uc3QKICAgICAgICAgICAgICAgICAgICBib3VuZHMuaGVpZ2h0KCkgPCBjZWxsU2l6ZS5oZWln
aHQgPyBjZWxsU2l6ZS5oZWlnaHQgOiBib3VuZHMuaGVpZ2h0KCkpOwogfQogCi1ib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludE1ldGVyKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICgh
cmVuZGVyT2JqZWN0LT5pc01ldGVyKCkpCisgICAgaWYgKCFyZW5kZXJPYmplY3QuaXNNZXRlcigp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4
dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwogCi0gICAgTlNMZXZlbEluZGljYXRv
ckNlbGwqIGNlbGwgPSBsZXZlbEluZGljYXRvckZvcih0b1JlbmRlck1ldGVyKHJlbmRlck9iamVj
dCkpOworICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxsID0gbGV2ZWxJbmRpY2F0b3JGb3Io
dG9SZW5kZXJNZXRlcigmcmVuZGVyT2JqZWN0KSk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAKICAgICBbY2VsbCBkcmF3V2l0
aEZyYW1lOnJlY3QgaW5WaWV3OmRvY3VtZW50Vmlld0ZvcihyZW5kZXJPYmplY3QpXTsKQEAgLTEw
NDIsMjMgKzEwNDIsMjMgQEAgY29uc3QgaW50KiBSZW5kZXJUaGVtZU1hYzo6cHJvZ3Jlc3NCYXJN
YXJnaW5zKE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0CiAgICAgcmV0dXJuIG1hcmdp
bnNbY29udHJvbFNpemVdOwogfQogCi1JbnRSZWN0IFJlbmRlclRoZW1lTWFjOjpwcm9ncmVzc0Jh
clJlY3RGb3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IElu
dFJlY3QmIGJvdW5kcykgY29uc3QKK0ludFJlY3QgUmVuZGVyVGhlbWVNYWM6OnByb2dyZXNzQmFy
UmVjdEZvckJvdW5kcyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgSW50
UmVjdCYgYm91bmRzKSBjb25zdAogewogICAgIC8vIFdvcmthcm91bmQgdW50aWwgPHJkYXI6Ly9w
cm9ibGVtLzE1ODU1MDg2PiBpcyBmaXhlZC4KICAgICBpbnQgbWF4RGltZW5zaW9uID0gc3RhdGlj
X2Nhc3Q8aW50PihzdGQ6Om51bWVyaWNfbGltaXRzPHVzaG9ydD46Om1heCgpKTsKICAgICBJbnRS
ZWN0IHByb2dyZXNzQmFyQm91bmRzKGJvdW5kcy54KCksIGJvdW5kcy55KCksIHN0ZDo6bWluKGJv
dW5kcy53aWR0aCgpLCBtYXhEaW1lbnNpb24pLCBzdGQ6Om1pbihib3VuZHMuaGVpZ2h0KCksIG1h
eERpbWVuc2lvbikpOwotICAgIGlmIChOb0NvbnRyb2xQYXJ0ID09IHJlbmRlck9iamVjdC0+c3R5
bGUoKS5hcHBlYXJhbmNlKCkpCisgICAgaWYgKE5vQ29udHJvbFBhcnQgPT0gcmVuZGVyT2JqZWN0
LnN0eWxlKCkuYXBwZWFyYW5jZSgpKQogICAgICAgICByZXR1cm4gcHJvZ3Jlc3NCYXJCb3VuZHM7
CiAKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSByZW5kZXJPYmplY3QtPnN0eWxlKCkuZWZmZWN0aXZl
Wm9vbSgpOwotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZv
bnQoJnJlbmRlck9iamVjdC0+c3R5bGUoKSk7CisgICAgZmxvYXQgem9vbUxldmVsID0gcmVuZGVy
T2JqZWN0LnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworICAgIE5TQ29udHJvbFNpemUgY29udHJv
bFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoJnJlbmRlck9iamVjdC5zdHlsZSgpKTsKICAgICBJ
bnRTaXplIHNpemUgPSBwcm9ncmVzc0JhclNpemVzKClbY29udHJvbFNpemVdOwogICAgIHNpemUu
c2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwogICAgIHNpemUuc2V0V2lkdGgo
cHJvZ3Jlc3NCYXJCb3VuZHMud2lkdGgoKSk7CiAKICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBh
Y2NvdW50IGZvciB0aGUgc2hhZG93LgogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gcHJvZ3Jl
c3NCYXJCb3VuZHM7Ci0gICAgaWYgKHByb2dyZXNzQmFyQm91bmRzLmhlaWdodCgpIDw9IG1pbmlt
dW1Qcm9ncmVzc0JhckhlaWdodCgmcmVuZGVyT2JqZWN0LT5zdHlsZSgpKSkKKyAgICBpZiAocHJv
Z3Jlc3NCYXJCb3VuZHMuaGVpZ2h0KCkgPD0gbWluaW11bVByb2dyZXNzQmFySGVpZ2h0KCZyZW5k
ZXJPYmplY3Quc3R5bGUoKSkpCiAgICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGlu
ZmxhdGVkUmVjdCwgc2l6ZSwgcHJvZ3Jlc3NCYXJNYXJnaW5zKGNvbnRyb2xTaXplKSwgem9vbUxl
dmVsKTsKIAogICAgIHJldHVybiBpbmZsYXRlZFJlY3Q7CkBAIC0xMDgzLDI4ICsxMDgzLDI4IEBA
IHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVuCiB7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6
cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFy
ZW5kZXJPYmplY3QtPmlzUHJvZ3Jlc3MoKSkKKyAgICBpZiAoIXJlbmRlck9iamVjdC5pc1Byb2dy
ZXNzKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3Qg
PSBwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMocmVuZGVyT2JqZWN0LCByZWN0KTsKLSAgICBOU0Nv
bnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KCZyZW5kZXJPYmplY3Qt
PnN0eWxlKCkpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZv
ckZvbnQoJnJlbmRlck9iamVjdC5zdHlsZSgpKTsKIAotICAgIFJlbmRlclByb2dyZXNzKiByZW5k
ZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3MocmVuZGVyT2JqZWN0KTsKKyAgICBjb25zdCBS
ZW5kZXJQcm9ncmVzcyYgcmVuZGVyUHJvZ3Jlc3MgPSAqdG9SZW5kZXJQcm9ncmVzcygmcmVuZGVy
T2JqZWN0KTsKICAgICBISVRoZW1lVHJhY2tEcmF3SW5mbyB0cmFja0luZm87CiAgICAgdHJhY2tJ
bmZvLnZlcnNpb24gPSAwOwogICAgIGlmIChjb250cm9sU2l6ZSA9PSBOU1JlZ3VsYXJDb250cm9s
U2l6ZSkKLSAgICAgICAgdHJhY2tJbmZvLmtpbmQgPSByZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24o
KSA8IDAgPyBrVGhlbWVMYXJnZUluZGV0ZXJtaW5hdGVCYXIgOiBrVGhlbWVMYXJnZVByb2dyZXNz
QmFyOworICAgICAgICB0cmFja0luZm8ua2luZCA9IHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCkg
PCAwID8ga1RoZW1lTGFyZ2VJbmRldGVybWluYXRlQmFyIDoga1RoZW1lTGFyZ2VQcm9ncmVzc0Jh
cjsKICAgICBlbHNlCi0gICAgICAgIHRyYWNrSW5mby5raW5kID0gcmVuZGVyUHJvZ3Jlc3MtPnBv
c2l0aW9uKCkgPCAwID8ga1RoZW1lTWVkaXVtSW5kZXRlcm1pbmF0ZUJhciA6IGtUaGVtZU1lZGl1
bVByb2dyZXNzQmFyOworICAgICAgICB0cmFja0luZm8ua2luZCA9IHJlbmRlclByb2dyZXNzLnBv
c2l0aW9uKCkgPCAwID8ga1RoZW1lTWVkaXVtSW5kZXRlcm1pbmF0ZUJhciA6IGtUaGVtZU1lZGl1
bVByb2dyZXNzQmFyOwogCi0gICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSByZW5kZXJPYmpl
Y3QtPmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvciA9IHJlbmRlck9iamVjdC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CiAg
ICAgdHJhY2tJbmZvLmJvdW5kcyA9IEludFJlY3QoSW50UG9pbnQoKSwgaW5mbGF0ZWRSZWN0LnNp
emUoKSk7CiAgICAgdHJhY2tJbmZvLm1pbiA9IDA7CiAgICAgdHJhY2tJbmZvLm1heCA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8U0ludDMyPjo6bWF4KCk7Ci0gICAgdHJhY2tJbmZvLnZhbHVlID0gbHJv
dW5kKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpICogbmV4dGFmdGVyKHRyYWNrSW5mby5tYXgs
IDApKTsKLSAgICB0cmFja0luZm8udHJhY2tJbmZvLnByb2dyZXNzLnBoYXNlID0gbHJvdW5kKHJl
bmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpICogbmV4dGFmdGVyKHByb2dyZXNzQW5p
bWF0aW9uTnVtRnJhbWVzLCAwKSAqIGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICB0cmFja0luZm8u
dmFsdWUgPSBscm91bmQocmVuZGVyUHJvZ3Jlc3MucG9zaXRpb24oKSAqIG5leHRhZnRlcih0cmFj
a0luZm8ubWF4LCAwKSk7CisgICAgdHJhY2tJbmZvLnRyYWNrSW5mby5wcm9ncmVzcy5waGFzZSA9
IGxyb3VuZChyZW5kZXJQcm9ncmVzcy5hbmltYXRpb25Qcm9ncmVzcygpICogbmV4dGFmdGVyKHBy
b2dyZXNzQW5pbWF0aW9uTnVtRnJhbWVzLCAwKSAqIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICB0
cmFja0luZm8uYXR0cmlidXRlcyA9IGtUaGVtZVRyYWNrSG9yaXpvbnRhbDsKICAgICB0cmFja0lu
Zm8uZW5hYmxlU3RhdGUgPSBpc0FjdGl2ZShyZW5kZXJPYmplY3QpID8ga1RoZW1lVHJhY2tBY3Rp
dmUgOiBrVGhlbWVUcmFja0luYWN0aXZlOwogICAgIHRyYWNrSW5mby5yZXNlcnZlZCA9IDA7CkBA
IC0xMTIwLDcgKzExMjAsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFy
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZgogCiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAKLSAg
ICBpZiAoIXJlbmRlclByb2dyZXNzLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkg
eworICAgIGlmICghcmVuZGVyUHJvZ3Jlc3Muc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkpIHsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgyICogaW5mbGF0ZWRS
ZWN0LngoKSArIGluZmxhdGVkUmVjdC53aWR0aCgpLCAwKTsKICAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgtMSwgMSkpOwogICAgIH0KQEAgLTExODIsNyArMTE4Miw3
IEBAIHN0YXRpYyB2b2lkIFRyYWNrR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiwgY29uc3QgQ0dG
bG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXRECiAgICAgICAgIG91dERhdGFbaV0gPSAoMS4wZiAt
IGEpICogZGFya1tpXSArIGEgKiBsaWdodFtpXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6
cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQordm9pZCBSZW5kZXJUaGVtZU1hYzo6
cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIGlmIChyLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE5Miw3ICsxMTkyLDcgQEAgdm9pZCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW4KIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cigqcGFpbnRJbmZvLmNvbnRleHQpOwogCi0gICAgRmxvYXRSb3VuZGVkUmVjdCBib3JkZXIgPSBG
bG9hdFJvdW5kZWRSZWN0KG8tPnN0eWxlKCkuZ2V0Um91bmRlZEJvcmRlckZvcihyLCAmby0+dmll
dygpKSk7CisgICAgRmxvYXRSb3VuZGVkUmVjdCBib3JkZXIgPSBGbG9hdFJvdW5kZWRSZWN0KG8u
c3R5bGUoKS5nZXRSb3VuZGVkQm9yZGVyRm9yKHIsICZvLnZpZXcoKSkpOwogICAgIGludCByYWRp
dXMgPSBib3JkZXIucmFkaWkoKS50b3BMZWZ0KCkud2lkdGgoKTsKIAogICAgIENHQ29sb3JTcGFj
ZVJlZiBjc3BhY2UgPSBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCk7CkBAIC0xMjQ5LDI5ICsxMjQ5
LDI5IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiti
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgSW50UmVjdCBib3VuZHMgPSBJbnRSZWN0KHJlY3QueCgp
ICsgcmVuZGVyZXItPnN0eWxlKCkuYm9yZGVyTGVmdFdpZHRoKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlY3QueSgpICsgcmVuZGVyZXItPnN0eWxlKCkuYm9yZGVyVG9wV2lkdGgo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpIC0gcmVuZGVyZXIt
PnN0eWxlKCkuYm9yZGVyTGVmdFdpZHRoKCkgLSByZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJSaWdo
dFdpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSBy
ZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJUb3BXaWR0aCgpIC0gcmVuZGVyZXItPnN0eWxlKCkuYm9y
ZGVyQm90dG9tV2lkdGgoKSk7CisgICAgSW50UmVjdCBib3VuZHMgPSBJbnRSZWN0KHJlY3QueCgp
ICsgcmVuZGVyZXIuc3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSwKKyAgICAgICAgcmVjdC55KCkg
KyByZW5kZXJlci5zdHlsZSgpLmJvcmRlclRvcFdpZHRoKCksCisgICAgICAgIHJlY3Qud2lkdGgo
KSAtIHJlbmRlcmVyLnN0eWxlKCkuYm9yZGVyTGVmdFdpZHRoKCkgLSByZW5kZXJlci5zdHlsZSgp
LmJvcmRlclJpZ2h0V2lkdGgoKSwKKyAgICAgICAgcmVjdC5oZWlnaHQoKSAtIHJlbmRlcmVyLnN0
eWxlKCkuYm9yZGVyVG9wV2lkdGgoKSAtIHJlbmRlcmVyLnN0eWxlKCkuYm9yZGVyQm90dG9tV2lk
dGgoKSk7CiAgICAgLy8gRHJhdyB0aGUgZ3JhZGllbnRzIHRvIGdpdmUgdGhlIHN0eWxlZCBwb3B1
cCBtZW51IGEgYnV0dG9uIGFwcGVhcmFuY2UKICAgICBwYWludE1lbnVMaXN0QnV0dG9uR3JhZGll
bnRzKHJlbmRlcmVyLCBwYWludEluZm8sIGJvdW5kcyk7CiAKICAgICAvLyBTaW5jZSB3ZSBhY3R1
YWxseSBrbm93IHRoZSBzaXplIG9mIHRoZSBjb250cm9sIGhlcmUsIHdlIHJlc3RyaWN0IHRoZSBm
b250IHNjYWxlIHRvIG1ha2Ugc3VyZSB0aGUgYXJyb3dzIHdpbGwgZml0IHZlcnRpY2FsbHkgaW4g
dGhlIGJvdW5kcwotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0ZDo6bWluKHJlbmRlcmVyLT5zdHls
ZSgpLmZvbnRTaXplKCkgLyBiYXNlRm9udFNpemUsIGJvdW5kcy5oZWlnaHQoKSAvIChiYXNlQXJy
b3dIZWlnaHQgKiAyICsgYmFzZVNwYWNlQmV0d2VlbkFycm93cykpOworICAgIGZsb2F0IGZvbnRT
Y2FsZSA9IHN0ZDo6bWluKHJlbmRlcmVyLnN0eWxlKCkuZm9udFNpemUoKSAvIGJhc2VGb250U2l6
ZSwgYm91bmRzLmhlaWdodCgpIC8gKGJhc2VBcnJvd0hlaWdodCAqIDIgKyBiYXNlU3BhY2VCZXR3
ZWVuQXJyb3dzKSk7CiAgICAgZmxvYXQgY2VudGVyWSA9IGJvdW5kcy55KCkgKyBib3VuZHMuaGVp
Z2h0KCkgLyAyLjBmOwogICAgIGZsb2F0IGFycm93SGVpZ2h0ID0gYmFzZUFycm93SGVpZ2h0ICog
Zm9udFNjYWxlOwogICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIGZvbnRT
Y2FsZTsKLSAgICBmbG9hdCBsZWZ0RWRnZSA9IGJvdW5kcy5tYXhYKCkgLSBhcnJvd1BhZGRpbmdS
aWdodCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSAtIGFycm93V2lkdGg7Cisg
ICAgZmxvYXQgbGVmdEVkZ2UgPSBib3VuZHMubWF4WCgpIC0gYXJyb3dQYWRkaW5nUmlnaHQgKiBy
ZW5kZXJlci5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSAtIGFycm93V2lkdGg7CiAgICAgZmxvYXQg
c3BhY2VCZXR3ZWVuQXJyb3dzID0gYmFzZVNwYWNlQmV0d2VlbkFycm93cyAqIGZvbnRTY2FsZTsK
IAotICAgIGlmIChib3VuZHMud2lkdGgoKSA8IGFycm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0
ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKQorICAgIGlmIChib3VuZHMud2lk
dGgoKSA8IGFycm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0ICogcmVuZGVyZXIuc3R5bGUoKS5l
ZmZlY3RpdmVab29tKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogCi0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihyZW5kZXJlci0+c3R5bGUoKS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yU3Bh
Y2UoKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihyZW5kZXJlci5zdHls
ZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgcmVuZGVyZXIuc3R5
bGUoKS5jb2xvclNwYWNlKCkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VTdHls
ZShOb1N0cm9rZSk7CiAKICAgICBGbG9hdFBvaW50IGFycm93MVszXTsKQEAgLTEyOTUsNyArMTI5
NSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9u
cyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zCiAKICAgICAvLyBGSVhNRTogU2hvdWxkIHRo
ZSBzZXBhcmF0b3IgdGhpY2tuZXNzIGFuZCBzcGFjZSBiZSBzY2FsZWQgdXAgYnkgZm9udFNjYWxl
PwogICAgIGludCBzZXBhcmF0b3JTcGFjZSA9IDI7IC8vIERlbGliZXJhdGVseSBpZ25vcmVzIHpv
b20gc2luY2UgaXQgbG9va3MgbmljZXIgaWYgaXQgc3RheXMgdGhpbi4KLSAgICBpbnQgbGVmdEVk
Z2VPZlNlcGFyYXRvciA9IHN0YXRpY19jYXN0PGludD4obGVmdEVkZ2UgLSBhcnJvd1BhZGRpbmdM
ZWZ0ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsgLy8gRklYTUU6IFJvdW5k
PworICAgIGludCBsZWZ0RWRnZU9mU2VwYXJhdG9yID0gc3RhdGljX2Nhc3Q8aW50PihsZWZ0RWRn
ZSAtIGFycm93UGFkZGluZ0xlZnQgKiByZW5kZXJlci5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7
IC8vIEZJWE1FOiBSb3VuZD8KIAogICAgIC8vIERyYXcgdGhlIHNlcGFyYXRvciB0byB0aGUgbGVm
dCBvZiB0aGUgYXJyb3dzCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVz
cygxKTsgLy8gRGVsaWJlcmF0ZWx5IGlnbm9yZXMgem9vbSBzaW5jZSBpdCBsb29rcyBuaWNlciBp
ZiBpdCBzdGF5cyB0aGluLgpAQCAtMTM5NiwxMiArMTM5NiwxMiBAQCB2b2lkIFJlbmRlclRoZW1l
TWFjOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSogc3R5bAogICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodCgpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxs
U3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJbnRSZWN0JiByKQordm9pZCBSZW5k
ZXJUaGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiBv
LCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIE5TUG9wVXBCdXR0b25DZWxsKiBwb3B1cEJ1dHRv
biA9IHRoaXMtPnBvcHVwQnV0dG9uKCk7CiAKICAgICAvLyBTZXQgdGhlIGNvbnRyb2wgc2l6ZSBi
YXNlZCBvZmYgdGhlIHJlY3RhbmdsZSB3ZSdyZSBwYWludGluZyBpbnRvLgotICAgIHNldENvbnRy
b2xTaXplKHBvcHVwQnV0dG9uLCBwb3B1cEJ1dHRvblNpemVzKCksIHIuc2l6ZSgpLCBvLT5zdHls
ZSgpLmVmZmVjdGl2ZVpvb20oKSk7CisgICAgc2V0Q29udHJvbFNpemUocG9wdXBCdXR0b24sIHBv
cHVwQnV0dG9uU2l6ZXMoKSwgci5zaXplKCksIG8uc3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOwog
CiAgICAgLy8gVXBkYXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgogICAgIHVw
ZGF0ZUFjdGl2ZVN0YXRlKHBvcHVwQnV0dG9uLCBvKTsKQEAgLTE0MjksMTYgKzE0MjksMTYgQEAg
dm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqIHN0eWxlLAogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7
CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBJbnRS
ZWN0IGJvdW5kcyA9IHI7Ci0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS5lZmZlY3Rp
dmVab29tKCk7CisgICAgZmxvYXQgem9vbUxldmVsID0gby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20o
KTsKICAgICBmbG9hdCB6b29tZWRUcmFja1dpZHRoID0gdHJhY2tXaWR0aCAqIHpvb21MZXZlbDsK
IAotICAgIGlmIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRhbFBh
cnQgfHwgby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gIE1lZGlhU2xpZGVyUGFydCkgeworICAg
IGlmIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09ICBTbGlkZXJIb3Jpem9udGFsUGFydCB8fCBv
LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09ICBNZWRpYVNsaWRlclBhcnQpIHsKICAgICAgICAgYm91
bmRzLnNldEhlaWdodCh6b29tZWRUcmFja1dpZHRoKTsKICAgICAgICAgYm91bmRzLnNldFkoci55
KCkgKyByLmhlaWdodCgpIC8gMiAtIHpvb21lZFRyYWNrV2lkdGggLyAyKTsKLSAgICB9IGVsc2Ug
aWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkgeworICAg
IH0gZWxzZSBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQp
IHsKICAgICAgICAgYm91bmRzLnNldFdpZHRoKHpvb21lZFRyYWNrV2lkdGgpOwogICAgICAgICBi
b3VuZHMuc2V0WChyLngoKSArIHIud2lkdGgoKSAvIDIgLSB6b29tZWRUcmFja1dpZHRoIC8gMik7
CiAgICAgfQpAQCAtMTQ1Nyw3ICsxNDU3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRT
bGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmYKICAg
ICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyBtYWluQ2FsbGJhY2tzID0geyAwLCBUcmFja0dy
YWRpZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4g
bWFpbkZ1bmN0aW9uID0gYWRvcHRDRihDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQs
IE5VTEwsICZtYWluQ2FsbGJhY2tzKSk7CiAgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbWFp
blNoYWRpbmc7Ci0gICAgaWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRp
Y2FsUGFydCkKKyAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNh
bFBhcnQpCiAgICAgICAgIG1haW5TaGFkaW5nID0gYWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlh
bChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdW5kcy54KCksICBib3VuZHMubWF4WSgpKSwgQ0dQb2lu
dE1ha2UoYm91bmRzLm1heFgoKSwgYm91bmRzLm1heFkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwg
ZmFsc2UsIGZhbHNlKSk7CiAgICAgZWxzZQogICAgICAgICBtYWluU2hhZGluZyA9IGFkb3B0Q0Yo
Q0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3VuZHMueCgpLCAgYm91
bmRzLnkoKSksIENHUG9pbnRNYWtlKGJvdW5kcy54KCksIGJvdW5kcy5tYXhZKCkpLCBtYWluRnVu
Y3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwpAQCAtMTQ3OCw5ICsxNDc4LDkgQEAgdm9pZCBS
ZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBSZW5kZXIKIAogY29uc3QgZmxvYXQgdmVydGljYWxTbGlkZXJIZWlnaHRQYWRk
aW5nID0gMC4xZjsKIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmpl
Y3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewot
ICAgIE5TU2xpZGVyQ2VsbCogc2xpZGVyVGh1bWJDZWxsID0gby0+c3R5bGUoKS5hcHBlYXJhbmNl
KCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQKKyAgICBOU1NsaWRlckNlbGwqIHNsaWRlclRo
dW1iQ2VsbCA9IG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBh
cnQKICAgICAgICAgPyBzbGlkZXJUaHVtYlZlcnRpY2FsKCkKICAgICAgICAgOiBzbGlkZXJUaHVt
Ykhvcml6b250YWwoKTsKIApAQCAtMTQ4OSwxOSArMTQ4OSwyMCBAQCBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZgogICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4K
ICAgICB1cGRhdGVBY3RpdmVTdGF0ZShzbGlkZXJUaHVtYkNlbGwsIG8pOwogICAgIHVwZGF0ZUVu
YWJsZWRTdGF0ZShzbGlkZXJUaHVtYkNlbGwsIG8pOwotICAgIEVsZW1lbnQqIGZvY3VzRGVsZWdh
dGUgPSAoby0+bm9kZSgpICYmIG8tPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSA/IHRvRWxlbWVu
dChvLT5ub2RlKCkpLT5mb2N1c0RlbGVnYXRlKCkgOiAwOwotICAgIHVwZGF0ZUZvY3VzZWRTdGF0
ZShzbGlkZXJUaHVtYkNlbGwsIGZvY3VzRGVsZWdhdGUgPyBmb2N1c0RlbGVnYXRlLT5yZW5kZXJl
cigpIDogMCk7CisgICAgICAgIEVsZW1lbnQqIGZvY3VzRGVsZWdhdGUgPSAoby5ub2RlKCkgJiYg
by5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSkgPyB0b0VsZW1lbnQoby5ub2RlKCkpLT5mb2N1c0Rl
bGVnYXRlKCkgOiAwOworICAgIGlmIChmb2N1c0RlbGVnYXRlKQorICAgICAgICB1cGRhdGVGb2N1
c2VkU3RhdGUoc2xpZGVyVGh1bWJDZWxsLCAqZm9jdXNEZWxlZ2F0ZS0+cmVuZGVyZXIoKSk7CiAK
ICAgICAvLyBVcGRhdGUgdGhlIHByZXNzZWQgc3RhdGUgdXNpbmcgdGhlIE5TQ2VsbCB0cmFja2lu
ZyBtZXRob2RzLCBzaW5jZSB0aGF0J3MgaG93IE5TU2xpZGVyQ2VsbCBrZWVwcyB0cmFjayBvZiBp
dC4KICAgICBib29sIG9sZFByZXNzZWQ7Ci0gICAgaWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgp
ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgIGlmIChvLnN0eWxlKCkuYXBwZWFyYW5j
ZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQogICAgICAgICBvbGRQcmVzc2VkID0gbV9p
c1NsaWRlclRodW1iVmVydGljYWxQcmVzc2VkOwogICAgIGVsc2UKICAgICAgICAgb2xkUHJlc3Nl
ZCA9IG1faXNTbGlkZXJUaHVtYkhvcml6b250YWxQcmVzc2VkOwogCiAgICAgYm9vbCBwcmVzc2Vk
ID0gaXNQcmVzc2VkKG8pOwogCi0gICAgaWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNs
aWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgIGlmIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQogICAgICAgICBtX2lzU2xpZGVyVGh1bWJWZXJ0aWNh
bFByZXNzZWQgPSBwcmVzc2VkOwogICAgIGVsc2UKICAgICAgICAgbV9pc1NsaWRlclRodW1iSG9y
aXpvbnRhbFByZXNzZWQgPSBwcmVzc2VkOwpAQCAtMTUxNSwxMSArMTUxNiwxMSBAQCBib29sIFJl
bmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZgogCiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IHI7CiAgICAgLy8gTWFr
ZSB0aGUgaGVpZ2h0IG9mIHRoZSB2ZXJ0aWNhbCBzbGlkZXIgc2xpZ2h0bHkgbGFyZ2VyIHNvIE5T
U2xpZGVyQ2VsbCB3aWxsIGRyYXcgYSB2ZXJ0aWNhbCBzbGlkZXIuCi0gICAgaWYgKG8tPnN0eWxl
KCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQotICAgICAgICBib3Vu
ZHMuc2V0SGVpZ2h0KGJvdW5kcy5oZWlnaHQoKSArIHZlcnRpY2FsU2xpZGVySGVpZ2h0UGFkZGlu
ZyAqIG8tPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBpZiAoby5zdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKKyAgICAgICAgYm91bmRzLnNldEhl
aWdodChib3VuZHMuaGVpZ2h0KCkgKyB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgKiBvLnN0
eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwotICAgIGZsb2F0IHpvb21MZXZlbCA9IG8t
PnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21MZXZlbCA9IG8uc3R5bGUo
KS5lZmZlY3RpdmVab29tKCk7CiAKICAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gYm91bmRz
OwogICAgIGlmICh6b29tTGV2ZWwgIT0gMS4wZikgewpAQCAtMTUzNiw3ICsxNTM3LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVy
VGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0Nv
bnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKICAgICBOU1NlYXJjaEZpZWxk
Q2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CkBAIC0xNTQ1LDcgKzE1NDYsNyBAQCBib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZgogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5z
dHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLnN0eWxlKCku
ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgSW50UmVjdCB1bnpvb21lZFJlY3QgPSByOwogCkBAIC0x
NTY4LDExICsxNTY5LDExIEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGQo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBJbnRSZWN0JikKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNlYXJj
aENlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IEludFJlY3QmKQogewogICAg
IE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIAotICAgIFtzZWFy
Y2ggc2V0Q29udHJvbFNpemU6Y29udHJvbFNpemVGb3JGb250KCZvLT5zdHlsZSgpKV07CisgICAg
W3NlYXJjaCBzZXRDb250cm9sU2l6ZTpjb250cm9sU2l6ZUZvckZvbnQoJm8uc3R5bGUoKSldOwog
CiAgICAgLy8gVXBkYXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgogICAgIHVw
ZGF0ZUFjdGl2ZVN0YXRlKHNlYXJjaCwgbyk7CkBAIC0xNjI3LDE3ICsxNjI4LDE3IEBAIHZvaWQg
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgUmVuZGVyCiAgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0K
IAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25z
dCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByKQogewotICAgIEVsZW1lbnQqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dIb3N0KCk7
CisgICAgRWxlbWVudCogaW5wdXQgPSBvLm5vZGUoKS0+c2hhZG93SG9zdCgpOwogICAgIGlmICgh
aW5wdXQpCi0gICAgICAgIGlucHV0ID0gdG9FbGVtZW50KG8tPm5vZGUoKSk7CisgICAgICAgIGlu
cHV0ID0gdG9FbGVtZW50KG8ubm9kZSgpKTsKIAogICAgIGlmICghaW5wdXQtPnJlbmRlcmVyKCkt
PmlzQm94KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBo
aWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHNldFNlYXJj
aENlbGxTdGF0ZShpbnB1dC0+cmVuZGVyZXIoKSwgcik7CisgICAgc2V0U2VhcmNoQ2VsbFN0YXRl
KCppbnB1dC0+cmVuZGVyZXIoKSwgcik7CiAKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNo
ID0gdGhpcy0+c2VhcmNoKCk7CiAKQEAgLTE2NTAsNyArMTY1MSw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluCiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBh
aW50SW5mby5jb250ZXh0KTsKIAotICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCkuZWZm
ZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21MZXZlbCA9IG8uc3R5bGUoKS5lZmZlY3RpdmVa
b29tKCk7CiAKICAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIGNhbmNlbEJ1dHRv
blJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+cGl4ZWxTbmFwcGVkQm9y
ZGVyQm94UmVjdCgpKV07CiAKQEAgLTE2NjMsNyArMTY2NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluCiAgICAgbG9jYWxCb3VuZHMuc2V0WChsb2NhbEJvdW5kcy54KCkgLSBzcGFjZVRvUmln
aHRPZkNhbmNlbEJ1dHRvbik7CiAjZW5kaWYKIAotICAgIGxvY2FsQm91bmRzID0gY29udmVydFRv
UGFpbnRpbmdSZWN0KGlucHV0LT5yZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7CisgICAg
bG9jYWxCb3VuZHMgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoKmlucHV0LT5yZW5kZXJlcigpLCBv
LCBsb2NhbEJvdW5kcywgcik7CiAKICAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0KGxvY2FsQm91
bmRzKTsKICAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKQEAgLTE3MDgsNyArMTcwOSw3IEBA
IHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyCiAgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRy
KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25Q
YXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQorYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQogewogICAgIHJl
dHVybiBmYWxzZTsKIH0KQEAgLTE3MjEsMTYgKzE3MjIsMTYgQEAgdm9pZCBSZW5kZXJUaGVtZU1h
Yzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29s
dmVyKiwKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi1ib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiti
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCiB7Ci0gICAgTm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0hvc3Qo
KTsKKyAgICBOb2RlKiBpbnB1dCA9IG8ubm9kZSgpLT5zaGFkb3dIb3N0KCk7CiAgICAgaWYgKCFp
bnB1dCkKLSAgICAgICAgaW5wdXQgPSBvLT5ub2RlKCk7CisgICAgICAgIGlucHV0ID0gby5ub2Rl
KCk7CiAgICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChw
YWludEluZm8uY29udGV4dCk7Ci0gICAgc2V0U2VhcmNoQ2VsbFN0YXRlKGlucHV0LT5yZW5kZXJl
cigpLCByKTsKKyAgICBzZXRTZWFyY2hDZWxsU3RhdGUoKmlucHV0LT5yZW5kZXJlcigpLCByKTsK
IAogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIApAQCAt
MTc0MCw3ICsxNzQxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydChSZW5kZXJPYmplY3QqIG8sIGNvbnMKICAgICB1cGRhdGVBY3Rp
dmVTdGF0ZShbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdLCBvKTsKIAogICAgIEZsb2F0UmVjdCBs
b2NhbEJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5w
dXQtPnJlbmRlckJveCgpLT5waXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0KCkpXTsKLSAgICBsb2Nh
bEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9j
YWxCb3VuZHMsIHIpOworICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KCpp
bnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOwogCiAgICAgW1tzZWFyY2ggc2Vh
cmNoQnV0dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTpsb2NhbEJvdW5kcyBpblZpZXc6ZG9jdW1lbnRW
aWV3Rm9yKG8pXTsKICAgICBbW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxsXSBzZXRDb250cm9sVmll
dzpuaWxdOwpAQCAtMTc1NiwxNiArMTc1NywxNiBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyUwog
ICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIE5v
ZGUqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dIb3N0KCk7CisgICAgTm9kZSogaW5wdXQgPSBv
Lm5vZGUoKS0+c2hhZG93SG9zdCgpOwogICAgIGlmICghaW5wdXQpCi0gICAgICAgIGlucHV0ID0g
by0+bm9kZSgpOworICAgICAgICBpbnB1dCA9IG8ubm9kZSgpOwogICAgIGlmICghaW5wdXQtPnJl
bmRlcmVyKCktPmlzQm94KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3Vy
cmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAg
IHNldFNlYXJjaENlbGxTdGF0ZShpbnB1dC0+cmVuZGVyZXIoKSwgcik7CisgICAgc2V0U2VhcmNo
Q2VsbFN0YXRlKCppbnB1dC0+cmVuZGVyZXIoKSwgcik7CiAKICAgICBOU1NlYXJjaEZpZWxkQ2Vs
bCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAKQEAgLTE3NzUsMTAgKzE3NzYsMTAgQEAgYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEkKICAgICAgICAgW3NlYXJjaCBzZXRTZWFyY2hNZW51VGVtcGxh
dGU6c2VhcmNoTWVudVRlbXBsYXRlKCldOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7Ci0gICAgZmxvYXQgem9vbUxldmVsID0g
by0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9vbUxldmVsID0gby5zdHls
ZSgpLmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFy
Y2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5w
aXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0KCkpXTsKLSAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRU
b1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOworICAg
IGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KCppbnB1dC0+cmVuZGVyZXIoKSwg
bywgbG9jYWxCb3VuZHMsIHIpOwogCiAgICAgSW50UmVjdCB1bnpvb21lZFJlY3QobG9jYWxCb3Vu
ZHMpOwogICAgIGlmICh6b29tTGV2ZWwgIT0gMS4wZikgewpAQCAtMTc5NSwyNiArMTc5NiwyNiBA
QCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYpCitib29sIFJl
bmRlclRoZW1lTWFjOjpwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShjb25zdCBSZW5kZXJP
YmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JikKIHsK
ICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFvLT5pc1JlbmRlckJsb2NrKCkpCisgICAg
aWYgKCFvLmlzUmVuZGVyQmxvY2soKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZW5k
ZXJCbG9jayogcmVuZGVyQmxvY2sgPSB0b1JlbmRlckJsb2NrKG8pOworICAgIGNvbnN0IFJlbmRl
ckJsb2NrJiByZW5kZXJCbG9jayA9ICp0b1JlbmRlckJsb2NrKCZvKTsKIAotICAgIExheW91dFVu
aXQgY29udGVudFdpZHRoID0gcmVuZGVyQmxvY2stPmNvbnRlbnRXaWR0aCgpOwotICAgIExheW91
dFVuaXQgY29udGVudEhlaWdodCA9IHJlbmRlckJsb2NrLT5jb250ZW50SGVpZ2h0KCk7CisgICAg
TGF5b3V0VW5pdCBjb250ZW50V2lkdGggPSByZW5kZXJCbG9jay5jb250ZW50V2lkdGgoKTsKKyAg
ICBMYXlvdXRVbml0IGNvbnRlbnRIZWlnaHQgPSByZW5kZXJCbG9jay5jb250ZW50SGVpZ2h0KCk7
CiAgICAgaWYgKCFjb250ZW50V2lkdGggfHwgIWNvbnRlbnRIZWlnaHQpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRl
eHQ7CiAKICAgICBMYXlvdXRTaXplIGNvbnRlbnRTaXplKGNvbnRlbnRXaWR0aCwgY29udGVudEhl
aWdodCk7Ci0gICAgTGF5b3V0UG9pbnQgY29udGVudExvY2F0aW9uID0gcmVuZGVyQmxvY2stPmxv
Y2F0aW9uKCk7Ci0gICAgY29udGVudExvY2F0aW9uLm1vdmUocmVuZGVyQmxvY2stPmJvcmRlckxl
ZnQoKSArIHJlbmRlckJsb2NrLT5wYWRkaW5nTGVmdCgpLCByZW5kZXJCbG9jay0+Ym9yZGVyVG9w
KCkgKyByZW5kZXJCbG9jay0+cGFkZGluZ1RvcCgpKTsKKyAgICBMYXlvdXRQb2ludCBjb250ZW50
TG9jYXRpb24gPSByZW5kZXJCbG9jay5sb2NhdGlvbigpOworICAgIGNvbnRlbnRMb2NhdGlvbi5t
b3ZlKHJlbmRlckJsb2NrLmJvcmRlckxlZnQoKSArIHJlbmRlckJsb2NrLnBhZGRpbmdMZWZ0KCks
IHJlbmRlckJsb2NrLmJvcmRlclRvcCgpICsgcmVuZGVyQmxvY2sucGFkZGluZ1RvcCgpKTsKIAog
ICAgIExheW91dFJlY3QgcmVjdChjb250ZW50TG9jYXRpb24sIGNvbnRlbnRTaXplKTsKICAgICBJ
bnRSZWN0IGFsaWduZWRSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChyZWN0KTsKQEAgLTE4MjUs
MTAgKzE4MjYsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdp
bk92ZXJsYXkoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEkKICAgICAvLyBmcm9tIG91ciBu
b2RlLiBBc3N1bWluZyB0aGlzIG5vZGUgaXMgdGhlIHBsdWdpbiBvdmVybGF5IGVsZW1lbnQsIHdl
IHNob3VsZCBnZXQgdG8gdGhlCiAgICAgLy8gcGx1Z2luIGl0c2VsZiBieSBhc2tpbmcgZm9yIHRo
ZSBzaGFkb3cgcm9vdCBwYXJlbnQsIGFuZCB0aGVuIGl0cyBwYXJlbnQuCiAKLSAgICBpZiAoIXJl
bmRlckJsb2NrLT5lbGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSkKKyAgICBpZiAoIXJlbmRlckJs
b2NrLmVsZW1lbnQoKS0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIEhUTUxFbGVtZW50KiBwbHVnSW5PdmVybGF5ID0gdG9IVE1MRWxlbWVudChyZW5kZXJCbG9j
ay0+ZWxlbWVudCgpKTsKKyAgICBIVE1MRWxlbWVudCogcGx1Z0luT3ZlcmxheSA9IHRvSFRNTEVs
ZW1lbnQocmVuZGVyQmxvY2suZWxlbWVudCgpKTsKICAgICBFbGVtZW50KiBwYXJlbnQgPSBwbHVn
SW5PdmVybGF5LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CiAgICAgd2hpbGUgKHBhcmVu
dCAmJiAhcGFyZW50LT5pc1BsdWdpbkVsZW1lbnQoKSkKICAgICAgICAgcGFyZW50ID0gcGFyZW50
LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CkBAIC0xODUyLDcgKzE4NTMsNyBAQCBib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SQogCiAgICAgLy8gV2UgY291bGQgZHJhdyB0aGUgc25hcHNob3Qg
d2l0aCB0aGF0IGNvb3JkaW5hdGVzLCBidXQgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUKICAg
ICAvLyBpc24ndCBhIGNvbXBvc2l0ZWQgbGF5ZXIgYmV0d2VlbiB1cyBhbmQgdGhlIHBsdWdJblJl
bmRlcmVyLgotICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gobyk7CisgICAg
Y29uc3QgUmVuZGVyQm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveCgmbyk7CiAgICAgd2hpbGUg
KHJlbmRlckJveCAhPSBwbHVnSW5SZW5kZXJlcikgewogICAgICAgICBpZiAocmVuZGVyQm94LT5o
YXNMYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIoKSAmJiByZW5kZXJCb3gtPmxheWVyKCktPmlz
Q29tcG9zaXRlZCgpKSB7CiAgICAgICAgICAgICBzbmFwc2hvdEFic1BvcyA9IC1yZW5kZXJCb3gt
PmxvY2F0aW9uKCk7CkBAIC0yMDA0LDcgKzIwMDUsNyBAQCBOU1NlcnZpY2VzUm9sbG92ZXJCdXR0
b25DZWxsKiBSZW5kZXJUaGVtZU1hYzo6c2VydmljZXNSb2xsb3ZlckJ1dHRvbkNlbGwoKSBjb25z
dAogI2VuZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50SW1hZ2VDb250cm9sc0J1
dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50SW1hZ2VDb250
cm9sc0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRJbmZvLnBo
YXNlICE9IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQpCiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMjAyOSw3ICsyMDMwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRJbWFnZUNvbnRy
b2xzQnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW4KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6aW1hZ2VDb250cm9sc0J1dHRvblNp
emUoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWVNYWM6Omlt
YWdlQ29udHJvbHNCdXR0b25TaXplKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0CiB7CiAjaWYg
SEFWRShBUFBLSVRfSU1BR0VfQ09OVFJPTFNfU1VQUE9SVCkKICAgICByZXR1cm4gSW50U2l6ZShz
ZXJ2aWNlc1JvbGxvdmVyQnV0dG9uQ2VsbCgpLmNlbGxTaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCmluZGV4IDA3YWFiZjc4NmQ5OTEzMTlm
MDA3OTA0MGFiN2U5ODdmOGQxYzU4YTguLjgzMjk3MzM1NzQ1N2U2OTE1NDE5Y2UxYWYxZTYyYmM0
Y2QzMzFiOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZVNhZmFyaS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2Fm
YXJpLmNwcApAQCAtMTE1LDcgKzExNSw3IEBAIHN0YXRpYyBSR0JBMzIgbWFrZVJHQkFGcm9tQ0dD
b2xvcihDR0NvbG9yUmVmIGNvbG9yKQogICAgIHJldHVybiBtYWtlUkdCQSgyNTUgKiBjb21wb25l
bnRzWzBdLCAyNTUgKiBjb21wb25lbnRzWzFdLCAyNTUgKiBjb21wb25lbnRzWzJdLCAyNTUgKiBj
b21wb25lbnRzWzNdKTsKIH0KIAotVGhlbWVDb250cm9sU3RhdGUgUmVuZGVyVGhlbWVTYWZhcmk6
OmRldGVybWluZVN0YXRlKFJlbmRlck9iamVjdCogbykgY29uc3QKK1RoZW1lQ29udHJvbFN0YXRl
IFJlbmRlclRoZW1lU2FmYXJpOjpkZXRlcm1pbmVTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8p
IGNvbnN0CiB7CiAgICAgVGhlbWVDb250cm9sU3RhdGUgcmVzdWx0ID0gMDsKICAgICBpZiAoaXNB
Y3RpdmUobykpCkBAIC0yNjQsMTEgKzI2NCwxMSBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpp
c0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYQog
ICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJh
Y2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6
OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcikKK3Zv
aWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVj
dCYgbywgSW50UmVjdCYgcikKIHsKLSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29u
dHJvbFNpemVGb3JGb250KCZvLT5zdHlsZSgpKTsKKyAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xT
aXplID0gY29udHJvbFNpemVGb3JGb250KCZvLnN0eWxlKCkpOwogCi0gICAgc3dpdGNoIChvLT5z
dHlsZSgpLmFwcGVhcmFuY2UoKSkgeworICAgIHN3aXRjaCAoby5zdHlsZSgpLmFwcGVhcmFuY2Uo
KSkgewogICAgICAgICBjYXNlIENoZWNrYm94UGFydDogewogICAgICAgICAgICAgLy8gV2UgaW5m
bGF0ZSB0aGUgcmVjdCBhcyBuZWVkZWQgdG8gYWNjb3VudCBmb3IgcGFkZGluZyBpbmNsdWRlZCBp
biB0aGUgY2VsbCB0byBhY2NvbW1vZGF0ZSB0aGUgY2hlY2tib3gKICAgICAgICAgICAgIC8vIHNo
YWRvdyIgYW5kIHRoZSBjaGVjay4gIFdlIGRvbid0IGNvbnNpZGVyIHRoaXMgcGFydCBvZiB0aGUg
Ym91bmRzIG9mIHRoZSBjb250cm9sIGluIFdlYktpdC4KQEAgLTMxNywyNiArMzE3LDI2IEBAIElu
dFJlY3QgUmVuZGVyVGhlbWVTYWZhcmk6OmluZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNv
bnN0IEludFNpemUmIHNpemUsIGNvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW50IFJlbmRl
clRoZW1lU2FmYXJpOjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29u
c3QKK2ludCBSZW5kZXJUaGVtZVNhZmFyaTo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJP
YmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgaWYgKCFvLT5pc0JveCgpKQorICAgIGlmICghby5pc0Jv
eCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmIChvLT5zdHlsZSgpLmFwcGVhcmFuY2Uo
KSA9PSBDaGVja2JveFBhcnQgfHwgby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0
KSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gobyk7CisgICAg
aWYgKG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0IHx8IG8uc3R5bGUoKS5h
cHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KSB7CisgICAgICAgIGNvbnN0IFJlbmRlckJveCogYm94
ID0gdG9SZW5kZXJCb3goJm8pOwogICAgICAgICByZXR1cm4gYm94LT5tYXJnaW5Ub3AoKSArIGJv
eC0+aGVpZ2h0KCkgLSAyOyAvLyBUaGUgYmFzZWxpbmUgaXMgMnB4IHVwIGZyb20gdGhlIGJvdHRv
bSBvZiB0aGUgY2hlY2tib3gvcmFkaW8gaW4gQXBwS2l0LgogICAgIH0KIAogICAgIHJldHVybiBS
ZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihvKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVNh
ZmFyaTo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAor
Ym9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVy
T2JqZWN0JiBvKSBjb25zdAogewogICAgIGlmICghaXNFbmFibGVkKG8pKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAvLyBDaGVja2JveGVzIG9ubHkgaGF2ZSB0aW50IHdoZW4gY2hlY2tl
ZC4KLSAgICBpZiAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0KQorICAg
IGlmIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydCkKICAgICAgICAgcmV0
dXJuIGlzQ2hlY2tlZChvKTsKIAogICAgIC8vIEZvciBub3cgYXNzdW1lIG90aGVyIGNvbnRyb2xz
IGhhdmUgdGludCBpZiBlbmFibGVkLgpAQCAtNDE2LDExICs0MTYsMTEgQEAgTlNDb250cm9sU2l6
ZSBSZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxl
KiBzdHlsZSkgY28KICAgICByZXR1cm4gTlNNaW5pQ29udHJvbFNpemU7CiB9CiAKLWJvb2wgUmVu
ZGVyVGhlbWVTYWZhcmk6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVTYWZh
cmk6OnBhaW50Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVM
aWJyYXJ5KCkpOwogCi0gICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXpl
Rm9yRm9udCgmby0+c3R5bGUoKSk7CisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNv
bnRyb2xTaXplRm9yRm9udCgmby5zdHlsZSgpKTsKIAogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0
ID0gaW5mbGF0ZVJlY3QociwgY2hlY2tib3hTaXplcygpW2NvbnRyb2xTaXplXSwgY2hlY2tib3hN
YXJnaW5zKGNvbnRyb2xTaXplKSk7ICAKICAgICBwYWludFRoZW1lUGFydChTYWZhcmlUaGVtZTo6
Q2hlY2tib3hQYXJ0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGluZmxh
dGVkUmVjdCwgY29udHJvbFNpemUsIGRldGVybWluZVN0YXRlKG8pKTsKQEAgLTQ1NSwxMSArNDU1
LDExIEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0CiAgICAgc2V0U2l6ZUZyb21Gb250KHN0eWxlLCBjaGVja2JveFNpemVz
KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFJhZGlvKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29s
IFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgQVNTRVJU
KFNhZmFyaVRoZW1lTGlicmFyeSgpKTsKIAotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUg
PSBjb250cm9sU2l6ZUZvckZvbnQoJm8tPnN0eWxlKCkpOworICAgIE5TQ29udHJvbFNpemUgY29u
dHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoJm8uc3R5bGUoKSk7CiAgCiAgICAgSW50UmVj
dCBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdChyLCByYWRpb1NpemVzKClbY29udHJvbFNpemVd
LCByYWRpb01hcmdpbnMoY29udHJvbFNpemUpKTsgICAgCiAgICAgcGFpbnRUaGVtZVBhcnQoUmFk
aW9CdXR0b25QYXJ0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGluZmxh
dGVkUmVjdCwgY29udHJvbFNpemUsIGRldGVybWluZVN0YXRlKG8pKTsKQEAgLTU3OSw3ICs1Nzks
NyBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKICAgICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIGJ1dHRvblNpemVzKCkpOwog
fQogCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5k
ZXJUaGVtZVNhZmFyaTo6cGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBBU1NFUlQoU2Fm
YXJpVGhlbWVMaWJyYXJ5KCkpOwogCkBAIC02MTIsNyArNjEyLDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZVNhZmFyaTo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6
OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFRleHRG
aWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQogewogICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7CiAK
QEAgLTYyNCw3ICs2MjQsNyBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RUZXh0Rmll
bGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZQogewogfQogCi1ib29s
IFJlbmRlclRoZW1lU2FmYXJpOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJl
bmRlclRoZW1lU2FmYXJpOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRlck9iamVj
dCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7ICAg
IAogI2lmIGRlZmluZWQoU0FGQVJJX1RIRU1FX1ZFUlNJT04pICYmIFNBRkFSSV9USEVNRV9WRVJT
SU9OID49IDEKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwpAQCAtNjQwLDcgKzY0
MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mCiAjZW5kaWYKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZVNhZmFyaTo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6
cGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJh
cnkoKSk7CiAKQEAgLTY4MCw3ICs2ODAsNyBAQCBjb25zdCBpbnQqIFJlbmRlclRoZW1lU2FmYXJp
Ojpwb3B1cEJ1dHRvblBhZGRpbmcoTlNDb250cm9sU2l6ZSBzaXplKSBjb25zdAogICAgIHJldHVy
biBwYWRkaW5nW3NpemVdOwogfQogCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVM
aXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0
JiByKQorYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJP
YmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAg
ICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwogCkBAIC02OTAsNyArNjkwLDcgQEAgYm9v
bCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgaW5mbywgY28KICAgICBzaXplLnNldFdpZHRoKHIud2lkdGgoKSk7CiAKICAg
ICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBhY2NvdW50IGZvciB0aGUgc2hhZG93LgotICAgIGlmIChy
LndpZHRoKCkgPj0gbWluaW11bU1lbnVMaXN0U2l6ZSgmby0+c3R5bGUoKSkpCisgICAgaWYgKHIu
d2lkdGgoKSA+PSBtaW5pbXVtTWVudUxpc3RTaXplKCZvLnN0eWxlKCkpKQogICAgICAgICBpbmZs
YXRlZFJlY3QgPSBpbmZsYXRlUmVjdChpbmZsYXRlZFJlY3QsIHNpemUsIHBvcHVwQnV0dG9uTWFy
Z2lucyhjb250cm9sU2l6ZSkpOwogCiAgICAgcGFpbnRUaGVtZVBhcnQoRHJvcERvd25CdXR0b25Q
YXJ0LCBpbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBpbmZsYXRlZFJlY3QsIGNvbnRy
b2xTaXplLCBkZXRlcm1pbmVTdGF0ZShvKSk7CkBAIC03NDksNyArNzQ5LDcgQEAgc3RhdGljIHZv
aWQgVHJhY2tHcmFkaWVudEludGVycG9sYXRlKHZvaWQqIGluZm8sIGNvbnN0IENHRmxvYXQqIGlu
RGF0YSwgQ0dGbG9hdCoKICAgICAgICAgb3V0RGF0YVtpXSA9ICgxLjBmIC0gYSkgKiBkYXJrW2ld
ICsgYSAqIGxpZ2h0W2ldOwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVM
aXN0QnV0dG9uR3JhZGllbnRzKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1l
bnVMaXN0QnV0dG9uR3JhZGllbnRzKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKHIuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CkBAIC03NTgsNyArNzU4LDcgQEAgdm9pZCBSZW5kZXJUaGVtZVNh
ZmFyaTo6cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW4KIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAKLSAgICBGbG9hdFJvdW5k
ZWRSZWN0IGJvdW5kID0gRmxvYXRSb3VuZGVkUmVjdChvLT5zdHlsZSgpLmdldFJvdW5kZWRCb3Jk
ZXJGb3IocikpOworICAgIEZsb2F0Um91bmRlZFJlY3QgYm91bmQgPSBGbG9hdFJvdW5kZWRSZWN0
KG8uc3R5bGUoKS5nZXRSb3VuZGVkQm9yZGVyRm9yKHIpKTsKICAgICBpbnQgcmFkaXVzID0gYm91
bmQucmFkaWkoKS50b3BMZWZ0KCkud2lkdGgoKTsKIAogICAgIENHQ29sb3JTcGFjZVJlZiBjc3Bh
Y2UgPSBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCk7CkBAIC04MTAsMTcgKzgxMCwxNyBAQCB2b2lk
IFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbgogICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9u
cyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3RC
dXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBJbnRSZWN0IGJv
dW5kcyA9IEludFJlY3QocmVjdC54KCkgKyByZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJMZWZ0V2lk
dGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkgKyByZW5kZXJlci0+
c3R5bGUoKS5ib3JkZXJUb3BXaWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWN0LndpZHRoKCkgLSByZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSAtIHJlbmRl
cmVyLT5zdHlsZSgpLmJvcmRlclJpZ2h0V2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVjdC5oZWlnaHQoKSAtIHJlbmRlcmVyLT5zdHlsZSgpLmJvcmRlclRvcFdpZHRoKCkg
LSByZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJCb3R0b21XaWR0aCgpKTsKKyAgICBJbnRSZWN0IGJv
dW5kcyA9IEludFJlY3QocmVjdC54KCkgKyByZW5kZXJlci5zdHlsZSgpLmJvcmRlckxlZnRXaWR0
aCgpLAorICAgICAgICByZWN0LnkoKSArIHJlbmRlcmVyLnN0eWxlKCkuYm9yZGVyVG9wV2lkdGgo
KSwKKyAgICAgICAgcmVjdC53aWR0aCgpIC0gcmVuZGVyZXIuc3R5bGUoKS5ib3JkZXJMZWZ0V2lk
dGgoKSAtIHJlbmRlcmVyLnN0eWxlKCkuYm9yZGVyUmlnaHRXaWR0aCgpLAorICAgICAgICByZWN0
LmhlaWdodCgpIC0gcmVuZGVyZXIuc3R5bGUoKS5ib3JkZXJUb3BXaWR0aCgpIC0gcmVuZGVyZXIu
c3R5bGUoKS5ib3JkZXJCb3R0b21XaWR0aCgpKTsKICAgICAvLyBEcmF3IHRoZSBncmFkaWVudHMg
dG8gZ2l2ZSB0aGUgc3R5bGVkIHBvcHVwIG1lbnUgYSBidXR0b24gYXBwZWFyYW5jZQogICAgIHBh
aW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMocmVuZGVyZXIsIHBhaW50SW5mbywgYm91bmRzKTsK
IAogICAgIC8vIFNpbmNlIHdlIGFjdHVhbGx5IGtub3cgdGhlIHNpemUgb2YgdGhlIGNvbnRyb2wg
aGVyZSwgd2UgcmVzdHJpY3QgdGhlIGZvbnQgc2NhbGUgdG8gbWFrZSBzdXJlIHRoZSBhcnJvdyB3
aWxsIGZpdCB2ZXJ0aWNhbGx5IGluIHRoZSBib3VuZHMKLSAgICBmbG9hdCBmb250U2NhbGUgPSBt
aW4ocmVuZGVyZXItPnN0eWxlKCkuZm9udFNpemUoKSAvIGJhc2VGb250U2l6ZSwgYm91bmRzLmhl
aWdodCgpIC8gYmFzZUFycm93SGVpZ2h0KTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBtaW4ocmVu
ZGVyZXIuc3R5bGUoKS5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplLCBib3VuZHMuaGVpZ2h0KCkg
LyBiYXNlQXJyb3dIZWlnaHQpOwogICAgIGZsb2F0IGNlbnRlclkgPSBib3VuZHMueSgpICsgYm91
bmRzLmhlaWdodCgpIC8gMi4wZjsKICAgICBmbG9hdCBhcnJvd0hlaWdodCA9IGJhc2VBcnJvd0hl
aWdodCAqIGZvbnRTY2FsZTsKICAgICBmbG9hdCBhcnJvd1dpZHRoID0gYmFzZUFycm93V2lkdGgg
KiBmb250U2NhbGU7CkBAIC04MzEsNyArODMxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6
cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGMK
IAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAKLSAgICBwYWludEluZm8uY29udGV4
dC0+c2V0RmlsbENvbG9yKHJlbmRlcmVyLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUNvbG9yKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnNldEZpbGxDb2xvcihyZW5kZXJlci5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKE5vU3Ryb2tlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsK
IAogICAgIEZsb2F0UG9pbnQgYXJyb3dbM107CkBAIC05NTYsMjEgKzk1NiwxNSBAQCBpbnQgUmVu
ZGVyVGhlbWVTYWZhcmk6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAogY29uc3QgaW50IHRyYWNrV2lkdGggPSA1OwogY29uc3QgaW50IHRyYWNrUmFkaXVzID0g
MjsKIAotYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9v
bCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAg
IEludFNpemUgcmFkaXVzKHRyYWNrUmFkaXVzLCB0cmFja1JhZGl1cyk7CiAgICAgRmxvYXRSb3Vu
ZGVkUmVjdCBib3VuZHMociwgcmFkaXVzLCByYWRpdXMsIHJhZGl1cywgcmFkaXVzKTsKIAotICAg
IGlmIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQpCi0g
ICAgICAgIGJvdW5kcy5zZXRSZWN0KEludFJlY3Qoci54KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgci55KCkgKyByLmhlaWdodCgpIC8gMiAtIHRyYWNrV2lkdGggLyAyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cmFja1dpZHRoKSk7Ci0gICAgZWxzZSBpZiAoby0+c3R5bGUoKS5hcHBl
YXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAgICBib3VuZHMuc2V0UmVjdChJ
bnRSZWN0KHIueCgpICsgci53aWR0aCgpIC8gMiAtIHRyYWNrV2lkdGggLyAyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHIueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRyYWNrV2lkdGgsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuaGVpZ2h0
KCkpKTsKKyAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRh
bFBhcnQpCisgICAgICAgIGJvdW5kcy5zZXRSZWN0KEludFJlY3Qoci54KCksIHIueSgpICsgci5o
ZWlnaHQoKSAvIDIgLSB0cmFja1dpZHRoIC8gMiwgci53aWR0aCgpLCB0cmFja1dpZHRoKSk7Cisg
ICAgZWxzZSBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQp
CisgICAgICAgIGJvdW5kcy5zZXRSZWN0KEludFJlY3Qoci54KCkgKyByLndpZHRoKCkgLyAyIC0g
dHJhY2tXaWR0aCAvIDIsIHIueSgpLCB0cmFja1dpZHRoLCByLmhlaWdodCgpKSk7CiAKICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKICAgICBDR0NvbG9yU3BhY2VSZWYgY3NwYWNlID0gZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigp
OwpAQCAtOTgxLDcgKzk3NSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2xpZGVy
VHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50CiAgICAgc3RydWN0
IENHRnVuY3Rpb25DYWxsYmFja3MgbWFpbkNhbGxiYWNrcyA9IHsgMCwgVHJhY2tHcmFkaWVudElu
dGVycG9sYXRlLCBOVUxMIH07CiAgICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IG1haW5GdW5j
dGlvbiA9IGFkb3B0Q0YoQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAm
bWFpbkNhbGxiYWNrcykpOwogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1haW5TaGFkaW5n
OwotICAgIGlmIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQp
CisgICAgaWYgKG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQog
ICAgICAgICBtYWluU2hhZGluZyA9IGFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNl
LCBDR1BvaW50TWFrZShib3VuZHMucmVjdCgpLngoKSwgIGJvdW5kcy5yZWN0KCkubWF4WSgpKSwg
Q0dQb2ludE1ha2UoYm91bmRzLnJlY3QoKS5tYXhYKCksIGJvdW5kcy5yZWN0KCkubWF4WSgpKSwg
bWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKICAgICBlbHNlCiAgICAgICAgIG1h
aW5TaGFkaW5nID0gYWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRN
YWtlKGJvdW5kcy5yZWN0KCkueCgpLCAgYm91bmRzLnJlY3QoKS55KCkpLCBDR1BvaW50TWFrZShi
b3VuZHMucmVjdCgpLngoKSwgYm91bmRzLnJlY3QoKS5tYXhZKCkpLCBtYWluRnVuY3Rpb24uZ2V0
KCksIGZhbHNlLCBmYWxzZSkpOwpAQCAtMTAwMSw3ICs5OTUsNyBAQCB2b2lkIFJlbmRlclRoZW1l
U2FmYXJpOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIFJlbgogCiBjb25zdCBmbG9hdCB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgPSAwLjFm
OwogCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29s
IFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYg
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAg
QVNTRVJUKFNhZmFyaVRoZW1lTGlicmFyeSgpKTsKICAgICBwYWludFRoZW1lUGFydChTbGlkZXJU
aHVtYlBhcnQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgTlNTbWFs
bENvbnRyb2xTaXplLCBkZXRlcm1pbmVTdGF0ZShvKSk7CkBAIC0xMDIzLDcgKzEwMTcsNyBAQCB2
b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KikgY29ucwogI2VuZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVTYWZh
cmk6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50
U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5
KCkpOwogCkBAIC0xMDc2LDEzICsxMDcwLDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFk
anVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuCiAg
ICAgc2V0Rm9udEZyb21Db250cm9sU2l6ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgY29udHJvbFNp
emUpOwogfQogCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmKQorYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwog
Ci0gICAgTm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0hvc3QoKTsKKyAgICBOb2RlKiBp
bnB1dCA9IG8ubm9kZSgpLT5zaGFkb3dIb3N0KCk7CiAgICAgaWYgKCFpbnB1dCkKLSAgICAgICAg
aW5wdXQgPSBvLT5ub2RlKCk7CisgICAgICAgIGlucHV0ID0gby5ub2RlKCk7CiAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IGlucHV0LT5yZW5kZXJlcigpOwogICAgIEFTU0VSVChyZW5kZXJl
cik7CiAKQEAgLTExMTksNyArMTExMyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVz
dFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuCiAgICAg
c3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKIH0KIAotYm9v
bCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQorYm9vbCBSZW5kZXJU
aGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQogewogICAgIHJldHVybiBm
YWxzZTsKIH0KQEAgLTExMzEsMTMgKzExMjUsMTMgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmUK
ICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQog
Ci1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25QYXJ0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmKQorYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJy
YXJ5KCkpOwogCi0gICAgTm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0hvc3QoKTsKKyAg
ICBOb2RlKiBpbnB1dCA9IG8ubm9kZSgpLT5zaGFkb3dIb3N0KCk7CiAgICAgaWYgKCFpbnB1dCkK
LSAgICAgICAgaW5wdXQgPSBvLT5ub2RlKCk7CisgICAgICAgIGlucHV0ID0gby5ub2RlKCk7CiAg
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGlucHV0LT5yZW5kZXJlcigpOwogICAgIEFTU0VS
VChyZW5kZXJlcik7CiAKQEAgLTExNTUsMTMgKzExNDksMTMgQEAgdm9pZCBSZW5kZXJUaGVtZVNh
ZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmQKICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkp
OwogfQogCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JikKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmKQogewogICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7CiAK
LSAgICBOb2RlKiBpbnB1dCA9IG8tPm5vZGUoKS0+c2hhZG93SG9zdCgpOworICAgIE5vZGUqIGlu
cHV0ID0gby5ub2RlKCktPnNoYWRvd0hvc3QoKTsKICAgICBpZiAoIWlucHV0KQotICAgICAgICBp
bnB1dCA9IG8tPm5vZGUoKTsKKyAgICAgICAgaW5wdXQgPSBvLm5vZGUoKTsKICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gaW5wdXQtPnJlbmRlcmVyKCk7CiAgICAgQVNTRVJUKHJlbmRlcmVy
KTsKIApAQCAtMTIxNiwxNCArMTIxMCwxNCBAQCBJbnRTaXplIFJlbmRlclRoZW1lU2FmYXJpOjpt
ZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JgogICAg
IHJldHVybiBib3VuZHMuc2l6ZSgpOwogfQogCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWlu
dE1ldGVyKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50
TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIC8vIE5PVEU6IFRoaXMgcm91
dGluZSBpcyBmb3IgdGVzdGluZyBvbmx5LiBJdCBzaG91bGQgYmUgZmxlc2hlZCBvdXQgd2l0aCBh
IHJlYWwgQ0ctYmFzZWQgaW1wbGVtZW50YXRpb24uCiAgICAgLy8gUmlnaHQgbm93IGl0IHVzZXMg
YSBzbGlkZXIsIHdpdGggdGhlIHRodW1iIHBvc2l0aW9uZWQgYXQgdGhlIG1ldGVyIHBvaW50Lgot
ICAgIGlmICghcmVuZGVyT2JqZWN0LT5pc01ldGVyKCkpCisgICAgaWYgKCFyZW5kZXJPYmplY3Qu
aXNNZXRlcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEhUTUxNZXRlckVsZW1lbnQq
IGVsZW1lbnQgPSB0b1JlbmRlck1ldGVyKHJlbmRlck9iamVjdCktPm1ldGVyRWxlbWVudCgpOwor
ICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVyKCZyZW5kZXJPYmpl
Y3QpLT5tZXRlckVsZW1lbnQoKTsKIAogICAgIGludCByZW1haW5pbmcgPSBzdGF0aWNfY2FzdDxp
bnQ+KCgxLjAgLSBlbGVtZW50LT52YWx1ZVJhdGlvKCkpICogc3RhdGljX2Nhc3Q8ZG91YmxlPihy
ZWN0LnNpemUoKS53aWR0aCgpKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZVNhZmFyaS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lU2FmYXJpLmgKaW5kZXggMjkwYzgyYzMxNmY5MzUxNjI2ZmYyMDkwN2ZjZGVhNzQ1MDJi
MTg1Mi4uMWU4OWZkOWY1Y2M4Mjk4MzdhNjUwYWIxOWZiMGVhNjNjNjBhNjkzMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmgKQEAgLTUyLDE1ICs1Miwx
NSBAQCBwdWJsaWM6CiAgICAgLy8gQSBtZXRob2QgdG8gb2J0YWluIHRoZSBiYXNlbGluZSBwb3Np
dGlvbiBmb3IgYSAibGVhZiIgY29udHJvbC4gIFRoaXMgd2lsbCBvbmx5IGJlIHVzZWQgaWYgYSBi
YXNlbGluZQogICAgIC8vIHBvc2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmlu
ZyBjaGlsZCBjb250ZW50LiBDaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBleGFtcGxl
cyBvZgogICAgIC8vIGNvbnRyb2xzIHRoYXQgbmVlZCB0byBkbyB0aGlzLgotICAgIHZpcnR1YWwg
aW50IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisgICAgdmly
dHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKIAog
ICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdo
ZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgotICAgIHZpcnR1YWwgYm9vbCBjb250cm9s
U3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7CiAKICAg
ICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlzIHN1
cHBvcnRlZCBhdCBhbGwuCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRS
ZWN0KGNvbnN0IFJlbmRlck9iamVjdCosIEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgSW50UmVjdCYpOwogCiAgICAgdmly
dHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRl
ckRhdGEmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsbExheWVy
JiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CkBAIC04Niw0NyArODYsNDcg
QEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJh
bmNlIHZhbHVlLgotICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSop
IGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFJh
ZGlvKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9u
U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZp
ZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0
RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFy
ZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
bnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1l
bnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVh
bCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlv
blBhcnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
Q2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwgU3RyaW5n
IG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkgb3ZlcnJpZGU7CkBAIC0xMzcsNyArMTM3LDcgQEAg
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRlclNpemVGb3JCb3VuZHMoY29uc3Qg
UmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzTWV0ZXIoQ29udHJvbFBhcnQpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBib29sIHBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CkBAIC0xNzIsNyArMTcyLDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBJbnRTaXpl
KiBwb3B1cEJ1dHRvblNpemVzKCkgY29uc3Q7CiAgICAgY29uc3QgaW50KiBwb3B1cEJ1dHRvbk1h
cmdpbnMoTlNDb250cm9sU2l6ZSkgY29uc3Q7CiAgICAgY29uc3QgaW50KiBwb3B1cEJ1dHRvblBh
ZGRpbmcoTlNDb250cm9sU2l6ZSkgY29uc3Q7Ci0gICAgdm9pZCBwYWludE1lbnVMaXN0QnV0dG9u
R3JhZGllbnRzKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2b2lkIHBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIGNvbnN0IEludFNp
emUqIG1lbnVMaXN0U2l6ZXMoKSBjb25zdDsKIAogICAgIGNvbnN0IEludFNpemUqIHNlYXJjaEZp
ZWxkU2l6ZXMoKSBjb25zdDsKQEAgLTE4MCw3ICsxODAsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0
IEludFNpemUqIHJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VhcmNo
RmllbGRTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CiAKLSAgICBUaGVtZUNvbnRyb2xTdGF0ZSBk
ZXRlcm1pbmVTdGF0ZShSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICBUaGVtZUNvbnRyb2xTdGF0
ZSBkZXRlcm1pbmVTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKIAogICAgIFN0cmlu
ZyBtX21lZGlhQ29udHJvbHNTY3JpcHQ7CiAgICAgU3RyaW5nIG1fbWVkaWFDb250cm9sc1N0eWxl
U2hlZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVX
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAppbmRl
eCA2ZTA1YjQ5YTdjZjU3MDg1NzZhYzI1YzY2ODdkNjNjZjhkMDA4YTE5Li4xYjkzZTAyYjc0YjA1
ZmQ4NzhjMDVhNzBiYzdmN2JlZmRjYzkxOGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZVdpbi5jcHAKQEAgLTQzNCwxMCArNDM0LDEwIEBAIGJvb2wgUmVuZGVyVGhl
bWVXaW46OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
ICAgICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHlsZS0+YXBwZWFyYW5jZSgpKTsKIH0KIAotdW5z
aWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVybWluZUNsYXNzaWNTdGF0ZShSZW5kZXJPYmplY3Qq
IG8sIENvbnRyb2xTdWJQYXJ0IHN1YlBhcnQpCit1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0
ZXJtaW5lQ2xhc3NpY1N0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYgbywgQ29udHJvbFN1YlBhcnQg
c3ViUGFydCkKIHsKICAgICB1bnNpZ25lZCBzdGF0ZSA9IDA7Ci0gICAgc3dpdGNoIChvLT5zdHls
ZSgpLmFwcGVhcmFuY2UoKSkgeworICAgIHN3aXRjaCAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSkg
ewogICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgogICAgICAgICBjYXNlIEJ1dHRvblBhcnQ6
CiAgICAgICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CkBAIC00NDksNyArNDQ5LDcgQEAgdW5z
aWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVybWluZUNsYXNzaWNTdGF0ZShSZW5kZXJPYmplY3Qq
IG8sIENvbnRyb2xTdWJQYXJ0IHMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJh
ZGlvUGFydDoKICAgICAgICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgICAgICAgICBzdGF0ZSA9
IChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpID8gREZDU19CVVRUT05SQURJ
TyA6IERGQ1NfQlVUVE9OQ0hFQ0s7CisgICAgICAgICAgICBzdGF0ZSA9IChvLnN0eWxlKCkuYXBw
ZWFyYW5jZSgpID09IFJhZGlvUGFydCkgPyBERkNTX0JVVFRPTlJBRElPIDogREZDU19CVVRUT05D
SEVDSzsKICAgICAgICAgICAgIGlmIChpc0NoZWNrZWQobykpCiAgICAgICAgICAgICAgICAgc3Rh
dGUgfD0gREZDU19DSEVDS0VEOwogICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQobykpCkBAIC00
ODEsMTAgKzQ4MSwxMCBAQCB1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lQ2xhc3Np
Y1N0YXRlKFJlbmRlck9iamVjdCogbywgQ29udHJvbFN1YlBhcnQgcwogICAgIHJldHVybiBzdGF0
ZTsKIH0KIAotdW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVybWluZVN0YXRlKFJlbmRlck9i
amVjdCogbykKK3Vuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVTdGF0ZShjb25zdCBS
ZW5kZXJPYmplY3QmIG8pCiB7CiAgICAgdW5zaWduZWQgcmVzdWx0ID0gVFNfTk9STUFMOwotICAg
IENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKKyAgICBD
b250cm9sUGFydCBhcHBlYXJhbmNlID0gby5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKICAgICBpZiAo
IWlzRW5hYmxlZChvKSkKICAgICAgICAgcmVzdWx0ID0gVFNfRElTQUJMRUQ7CiAgICAgZWxzZSBp
ZiAoaXNSZWFkT25seUNvbnRyb2wobykgJiYgKFRleHRGaWVsZFBhcnQgPT0gYXBwZWFyYW5jZSB8
fCBUZXh0QXJlYVBhcnQgPT0gYXBwZWFyYW5jZSB8fCBTZWFyY2hGaWVsZFBhcnQgPT0gYXBwZWFy
YW5jZSkpCkBAIC01MDIsMTIgKzUwMiwxMiBAQCB1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0
ZXJtaW5lU3RhdGUoUmVuZGVyT2JqZWN0KiBvKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXVu
c2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVTbGlkZXJUaHVtYlN0YXRlKFJlbmRlck9i
amVjdCogbykKK3Vuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVTbGlkZXJUaHVtYlN0
YXRlKGNvbnN0IFJlbmRlck9iamVjdCYgbykKIHsKICAgICB1bnNpZ25lZCByZXN1bHQgPSBUVVNf
Tk9STUFMOwogICAgIGlmICghaXNFbmFibGVkKG8pKQogICAgICAgICByZXN1bHQgPSBUVVNfRElT
QUJMRUQ7Ci0gICAgZWxzZSBpZiAoc3VwcG9ydHNGb2N1cyhvLT5zdHlsZSgpLmFwcGVhcmFuY2Uo
KSkgJiYgaXNGb2N1c2VkKG8pKQorICAgIGVsc2UgaWYgKHN1cHBvcnRzRm9jdXMoby5zdHlsZSgp
LmFwcGVhcmFuY2UoKSkgJiYgaXNGb2N1c2VkKG8pKQogICAgICAgICByZXN1bHQgPSBUVVNfRk9D
VVNFRDsKICAgICBlbHNlIGlmIChpc1ByZXNzZWQobykpCiAgICAgICAgIHJlc3VsdCA9IFRVU19Q
UkVTU0VEOwpAQCAtNTE2LDE0ICs1MTYsMTQgQEAgdW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRl
dGVybWluZVNsaWRlclRodW1iU3RhdGUoUmVuZGVyT2JqZWN0KiBvKQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXVuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVCdXR0b25TdGF0ZShS
ZW5kZXJPYmplY3QqIG8pCit1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lQnV0dG9u
U3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvKQogewogICAgIHVuc2lnbmVkIHJlc3VsdCA9IFBC
U19OT1JNQUw7CiAgICAgaWYgKCFpc0VuYWJsZWQobykpCiAgICAgICAgIHJlc3VsdCA9IFBCU19E
SVNBQkxFRDsKICAgICBlbHNlIGlmIChpc1ByZXNzZWQobykpCiAgICAgICAgIHJlc3VsdCA9IFBC
U19QUkVTU0VEOwotICAgIGVsc2UgaWYgKHN1cHBvcnRzRm9jdXMoby0+c3R5bGUoKS5hcHBlYXJh
bmNlKCkpICYmIGlzRm9jdXNlZChvKSkKKyAgICBlbHNlIGlmIChzdXBwb3J0c0ZvY3VzKG8uc3R5
bGUoKS5hcHBlYXJhbmNlKCkpICYmIGlzRm9jdXNlZChvKSkKICAgICAgICAgcmVzdWx0ID0gUEJT
X0RFRkFVTFRFRDsKICAgICBlbHNlIGlmIChpc0hvdmVyZWQobykpCiAgICAgICAgIHJlc3VsdCA9
IFBCU19IT1Q7CkBAIC01MzIsNyArNTMyLDcgQEAgdW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRl
dGVybWluZUJ1dHRvblN0YXRlKFJlbmRlck9iamVjdCogbykKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi11bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lU3BpbkJ1dHRvblN0YXRlKFJl
bmRlck9iamVjdCogbywgQ29udHJvbFN1YlBhcnQgc3ViUGFydCkKK3Vuc2lnbmVkIFJlbmRlclRo
ZW1lV2luOjpkZXRlcm1pbmVTcGluQnV0dG9uU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBD
b250cm9sU3ViUGFydCBzdWJQYXJ0KQogewogICAgIGJvb2wgaXNVcEJ1dHRvbiA9IHN1YlBhcnQg
PT0gU3BpbkJ1dHRvblVwOwogICAgIHVuc2lnbmVkIHJlc3VsdCA9IGlzVXBCdXR0b24gPyBVUFNf
Tk9STUFMIDogRE5TX05PUk1BTDsKQEAgLTU0NSwxMCArNTQ1LDEwIEBAIHVuc2lnbmVkIFJlbmRl
clRoZW1lV2luOjpkZXRlcm1pbmVTcGluQnV0dG9uU3RhdGUoUmVuZGVyT2JqZWN0KiBvLCBDb250
cm9sU3ViUGFyCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVGhlbWVEYXRhIFJlbmRlclRoZW1l
V2luOjpnZXRDbGFzc2ljVGhlbWVEYXRhKFJlbmRlck9iamVjdCogbywgQ29udHJvbFN1YlBhcnQg
c3ViUGFydCkKK1RoZW1lRGF0YSBSZW5kZXJUaGVtZVdpbjo6Z2V0Q2xhc3NpY1RoZW1lRGF0YShj
b25zdCBSZW5kZXJPYmplY3QmIG8sIENvbnRyb2xTdWJQYXJ0IHN1YlBhcnQpCiB7CiAgICAgVGhl
bWVEYXRhIHJlc3VsdDsKLSAgICBzd2l0Y2ggKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpKSB7Cisg
ICAgc3dpdGNoIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpKSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1
dHRvblBhcnQ6CiAgICAgICAgIGNhc2UgQnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBEZWZhdWx0
QnV0dG9uUGFydDoKQEAgLTU5NywxMyArNTk3LDEzIEBAIFRoZW1lRGF0YSBSZW5kZXJUaGVtZVdp
bjo6Z2V0Q2xhc3NpY1RoZW1lRGF0YShSZW5kZXJPYmplY3QqIG8sIENvbnRyb2xTdWJQYXJ0IHN1
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVGhlbWVEYXRhIFJlbmRlclRoZW1lV2luOjpnZXRU
aGVtZURhdGEoUmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3ViUGFydCBzdWJQYXJ0KQorVGhlbWVE
YXRhIFJlbmRlclRoZW1lV2luOjpnZXRUaGVtZURhdGEoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBD
b250cm9sU3ViUGFydCBzdWJQYXJ0KQogewogICAgIGlmICghaGF2ZVRoZW1lKQogICAgICAgICBy
ZXR1cm4gZ2V0Q2xhc3NpY1RoZW1lRGF0YShvLCBzdWJQYXJ0KTsKIAogICAgIFRoZW1lRGF0YSBy
ZXN1bHQ7Ci0gICAgc3dpdGNoIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgeworICAgIHN3aXRj
aCAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgewogICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0
OgogICAgICAgICBjYXNlIEJ1dHRvblBhcnQ6CiAgICAgICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBh
cnQ6CkBAIC02MTgsNyArNjE4LDcgQEAgVGhlbWVEYXRhIFJlbmRlclRoZW1lV2luOjpnZXRUaGVt
ZURhdGEoUmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3ViUGFydCBzdWJQYXJ0KQogICAgICAgICBj
YXNlIE1lbnVsaXN0QnV0dG9uUGFydDogewogICAgICAgICAgICAgY29uc3QgYm9vbCBpc1Zpc3Rh
T3JMYXRlciA9ICh3aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0YSk7CiAgICAgICAgICAg
ICByZXN1bHQubV9wYXJ0ID0gaXNWaXN0YU9yTGF0ZXIgPyBDUF9EUk9QRE9XTkJVVFRPTlJJR0hU
IDogQ1BfRFJPUERPV05CVVRUT047Ci0gICAgICAgICAgICBpZiAoaXNWaXN0YU9yTGF0ZXIgJiYg
by0+ZnJhbWUoKS5zZXR0aW5ncygpLmFwcGxpY2F0aW9uQ2hyb21lTW9kZSgpKSB7CisgICAgICAg
ICAgICBpZiAoaXNWaXN0YU9yTGF0ZXIgJiYgby5mcmFtZSgpLnNldHRpbmdzKCkuYXBwbGljYXRp
b25DaHJvbWVNb2RlKCkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgInJlYWRvbmx5IiBsb29r
IHdlIHVzZSBpbiBhcHBsaWNhdGlvbiBjaHJvbWUgbW9kZQogICAgICAgICAgICAgICAgIC8vIG9u
bHkgdXNlcyBhICJub3JtYWwiIGxvb2sgZm9yIHRoZSBkcm9wIGRvd24gYnV0dG9uLgogICAgICAg
ICAgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gVFNfTk9STUFMOwpAQCAtNjY1LDcgKzY2NSw3IEBA
IFRoZW1lRGF0YSBSZW5kZXJUaGVtZVdpbjo6Z2V0VGhlbWVEYXRhKFJlbmRlck9iamVjdCogbywg
Q29udHJvbFN1YlBhcnQgc3ViUGFydCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMg
dm9pZCBkcmF3Q29udHJvbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJlbmRlck9iamVjdCog
bywgSEFORExFIHRoZW1lLCBjb25zdCBUaGVtZURhdGEmIHRoZW1lRGF0YSwgY29uc3QgSW50UmVj
dCYgcikKK3N0YXRpYyB2b2lkIGRyYXdDb250cm9sKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgUmVuZGVyT2JqZWN0JiBvLCBIQU5ETEUgdGhlbWUsIGNvbnN0IFRoZW1lRGF0YSYgdGhl
bWVEYXRhLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIGJvb2wgYWxwaGFCbGVuZCA9IGZhbHNl
OwogICAgIGlmICh0aGVtZSkKQEAgLTY4NSwxMCArNjg1LDEwIEBAIHN0YXRpYyB2b2lkIGRyYXdD
b250cm9sKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyT2JqZWN0KiBvLCBIQU5ETEUg
dGhlbWUsCiAgICAgICAgIH0gZWxzZSBpZiAodGhlbWVEYXRhLm1fcGFydCA9PSBUS1BfVFJBQ0sg
fHwgdGhlbWVEYXRhLm1fcGFydCA9PSBUS1BfVFJBQ0tWRVJUKSB7CiAgICAgICAgICAgICA6OkRy
YXdFZGdlKGhkYywgJndpZGdldFJlY3QsIEVER0VfU1VOS0VOLCBCRl9SRUNUIHwgQkZfQURKVVNU
KTsKICAgICAgICAgICAgIDo6RmlsbFJlY3QoaGRjLCAmd2lkZ2V0UmVjdCwgKEhCUlVTSClHZXRT
dG9ja09iamVjdChHUkFZX0JSVVNIKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKG8tPnN0eWxlKCku
YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwKLSAgICAgICAgICAg
ICAgICAgICAgby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBh
cnQpICYmIAotICAgICAgICAgICAgICAgICAgICh0aGVtZURhdGEubV9wYXJ0ID09IFRLUF9USFVN
QkJPVFRPTSB8fCB0aGVtZURhdGEubV9wYXJ0ID09IFRLUF9USFVNQlRPUCB8fCAKLSAgICAgICAg
ICAgICAgICAgICAgdGhlbWVEYXRhLm1fcGFydCA9PSBUS1BfVEhVTUJMRUZUIHx8IHRoZW1lRGF0
YS5tX3BhcnQgPT0gVEtQX1RIVU1CUklHSFQpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoKG8uc3R5
bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydAorICAgICAgICB8
fCBvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAg
ICAgICAmJiAodGhlbWVEYXRhLm1fcGFydCA9PSBUS1BfVEhVTUJCT1RUT00gfHwgdGhlbWVEYXRh
Lm1fcGFydCA9PSBUS1BfVEhVTUJUT1AKKyAgICAgICAgfHwgdGhlbWVEYXRhLm1fcGFydCA9PSBU
S1BfVEhVTUJMRUZUIHx8IHRoZW1lRGF0YS5tX3BhcnQgPT0gVEtQX1RIVU1CUklHSFQpKSB7CiAg
ICAgICAgICAgICA6OkRyYXdFZGdlKGhkYywgJndpZGdldFJlY3QsIEVER0VfUkFJU0VELCBCRl9S
RUNUIHwgQkZfU09GVCB8IEJGX01JRERMRSB8IEJGX0FESlVTVCk7CiAgICAgICAgICAgICBpZiAo
dGhlbWVEYXRhLm1fc3RhdGUgPT0gVFVTX0RJU0FCTEVEKSB7CiAgICAgICAgICAgICAgICAgc3Rh
dGljIFdPUkQgcGF0dGVybkJpdHNbOF0gPSB7MHhhYSwgMHg1NSwgMHhhYSwgMHg1NSwgMHhhYSwg
MHg1NSwgMHhhYSwgMHg1NX07CkBAIC03MTAsNyArNzEwLDcgQEAgc3RhdGljIHZvaWQgZHJhd0Nv
bnRyb2woR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJPYmplY3QqIG8sIEhBTkRMRSB0
aGVtZSwKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFB1
c2ggYnV0dG9ucywgYnV0dG9ucywgY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBhbmQgdGhlIGRyb3Bk
b3duIGFycm93IGluIG1lbnVsaXN0cy4KLSAgICAgICAgICAgIGlmIChvLT5zdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSBEZWZhdWx0QnV0dG9uUGFydCkgeworICAgICAgICAgICAgaWYgKG8uc3R5bGUo
KS5hcHBlYXJhbmNlKCkgPT0gRGVmYXVsdEJ1dHRvblBhcnQpIHsKICAgICAgICAgICAgICAgICBI
QlJVU0ggYnJ1c2ggPSA6OkdldFN5c0NvbG9yQnJ1c2goQ09MT1JfM0RES1NIQURPVyk7CiAgICAg
ICAgICAgICAgICAgOjpGcmFtZVJlY3QoaGRjLCAmd2lkZ2V0UmVjdCwgYnJ1c2gpOwogICAgICAg
ICAgICAgICAgIDo6SW5mbGF0ZVJlY3QoJndpZGdldFJlY3QsIC0xLCAtMSk7CkBAIC03MjQsNyAr
NzI0LDcgQEAgc3RhdGljIHZvaWQgZHJhd0NvbnRyb2woR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBSZW5kZXJPYmplY3QqIG8sIEhBTkRMRSB0aGVtZSwKICAgICAgICAgRElCUGl4ZWxEYXRhOjpz
ZXRSR0JBQml0bWFwQWxwaGEod2luZG93c0NvbnRleHQuaGRjKCksIHIsIDI1NSk7CiB9CiAKLWJv
b2wgUmVuZGVyVGhlbWVXaW46OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRC
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHIpCiB7ICAKICAgICBkcmF3Q29udHJvbChpLmNvbnRleHQsICBvLCBidXR0b25UaGVt
ZSgpLCBnZXRUaGVtZURhdGEobyksIHIpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTczOSw3ICs3
MzksNyBAQCB2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZQogICAgIHN0eWxlLT5zZXRNaW5XaWR0aChM
ZW5ndGgod2lkdGgsIEZpeGVkKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50SW5u
ZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRJbm5lclNwaW5CdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIp
CiB7CiAgICAgLy8gV2Ugc3BsaXQgdGhlIHNwZWNpZmllZCByZWN0YW5nbGUgaW50byB0d28gdmVy
dGljYWxseS4gV2UgY2FuJ3QgZHJhdyBhCiAgICAgLy8gc3BpbiBidXR0b24gb2Ygd2hpY2ggaGVp
Z2h0IGlzIGxlc3MgdGhhbiAycHguCkBAIC03NzEsMTkgKzc3MSwxOSBAQCB2b2lkIFJlbmRlclRo
ZW1lV2luOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgICAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCgxMywgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZVdpbjo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lV2luOjpwYWludFRleHRGaWVs
ZChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcikKIHsKICAgICBkcmF3Q29udHJvbChpLmNvbnRleHQsICBvLCB0ZXh0RmllbGRUaGVtZSgp
LCBnZXRUaGVtZURhdGEobyksIHIpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhl
bWVXaW46OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgSEFORExF
IHRoZW1lOwogICAgIGludCBwYXJ0OwogICAgIGlmIChoYXZlVGhlbWUgJiYgKHdpbmRvd3NWZXJz
aW9uKCkgPj0gV2luZG93c1Zpc3RhKSkgewogICAgICAgICB0aGVtZSA9IG1lbnVMaXN0VGhlbWUo
KTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5mcmFtZSgpLnNldHRpbmdzKCkuYXBwbGljYXRpb25D
aHJvbWVNb2RlKCkpCisgICAgICAgIGlmIChyZW5kZXJlci5mcmFtZSgpLnNldHRpbmdzKCkuYXBw
bGljYXRpb25DaHJvbWVNb2RlKCkpCiAgICAgICAgICAgICBwYXJ0ID0gQ1BfUkVBRE9OTFk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHBhcnQgPSBDUF9CT1JERVI7CkBAIC03OTIsNyArNzky
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW4KICAgICAgICAgcGFydCA9IFRGUF9URVhURklF
TEQ7CiAgICAgfQogCi0gICAgZHJhd0NvbnRyb2wocGFpbnRJbmZvLmNvbnRleHQsICByZW5kZXJl
ciwgdGhlbWUsIFRoZW1lRGF0YShwYXJ0LCBkZXRlcm1pbmVTdGF0ZShyZW5kZXJlcikpLCByZWN0
KTsKKyAgICBkcmF3Q29udHJvbChwYWludEluZm8uY29udGV4dCwgcmVuZGVyZXIsIHRoZW1lLCBU
aGVtZURhdGEocGFydCwgZGV0ZXJtaW5lU3RhdGUocmVuZGVyZXIpKSwgcmVjdCk7CiAgICAgCiAg
ICAgcmV0dXJuIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhyZW5kZXJlciwgcGFpbnRJ
bmZvLCByZWN0KTsKIH0KQEAgLTgzNCw3ICs4MzQsNyBAQCB2b2lkIFJlbmRlclRoZW1lV2luOjph
ZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJl
bgogICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVX
aW46OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wg
UmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKICAgICAvLyBGSVhNRTogRG9uJ3QgbWFrZSBoYXJkY29kZWQgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHRoaWNrbmVzcyBvZiB0aGUgdGV4dGZpZWxkIGJvcmRlci4KICAgICBp
bnQgYm9yZGVyVGhpY2tuZXNzID0gaGF2ZVRoZW1lID8gMSA6IDI7CkBAIC04NDMsNyArODQzLDcg
QEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnMKICAgICAvLyBsZWF2aW5nIHNwYWNlIGZvciB0aGUg
dGV4dCBmaWVsZCdzIDFweCBib3JkZXIKICAgICBJbnRSZWN0IGJ1dHRvblJlY3QocmVjdCk7CiAg
ICAgYnV0dG9uUmVjdC5pbmZsYXRlKC1ib3JkZXJUaGlja25lc3MpOwotICAgIGlmIChyZW5kZXJl
ci0+c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCku
ZGlyZWN0aW9uKCkgPT0gTFRSKQogICAgICAgICBidXR0b25SZWN0LnNldFgoYnV0dG9uUmVjdC5t
YXhYKCkgLSBkcm9wRG93bkJ1dHRvbldpZHRoKTsKICAgICBidXR0b25SZWN0LnNldFdpZHRoKGRy
b3BEb3duQnV0dG9uV2lkdGgpOwogCkBAIC04NjEsMTQgKzg2MSwxNCBAQCBib29sIFJlbmRlclRo
ZW1lV2luOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgY29ucwogCiBjb25zdCBpbnQgdHJhY2tXaWR0aCA9IDQ7CiAKLWJvb2wgUmVuZGVyVGhl
bWVXaW46OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNsaWRlclRy
YWNrKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByKQogewogICAgIEludFJlY3QgYm91bmRzID0gcjsKICAgICAKLSAgICBpZiAoby0+c3R5
bGUoKS5hcHBlYXJhbmNlKCkgPT0gIFNsaWRlckhvcml6b250YWxQYXJ0KSB7CisgICAgaWYgKG8u
c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gIFNsaWRlckhvcml6b250YWxQYXJ0KSB7CiAgICAgICAg
IGJvdW5kcy5zZXRIZWlnaHQodHJhY2tXaWR0aCk7CiAgICAgICAgIGJvdW5kcy5zZXRZKHIueSgp
ICsgci5oZWlnaHQoKSAvIDIgLSB0cmFja1dpZHRoIC8gMik7Ci0gICAgfSBlbHNlIGlmIChvLT5z
dHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpIHsKKyAgICB9IGVsc2Ug
aWYgKG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KSB7CiAgICAg
ICAgIGJvdW5kcy5zZXRXaWR0aCh0cmFja1dpZHRoKTsKICAgICAgICAgYm91bmRzLnNldFgoci54
KCkgKyByLndpZHRoKCkgLyAyIC0gdHJhY2tXaWR0aCAvIDIpOwogICAgIH0KQEAgLTg3Nyw3ICs4
NzcsNyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVXaW46
OnBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCiB7ICAgCiAgICAgZHJhd0NvbnRyb2woaS5jb250ZXh0LCAg
bywgc2xpZGVyVGhlbWUoKSwgZ2V0VGhlbWVEYXRhKG8pLCByKTsKICAgICByZXR1cm4gZmFsc2U7
CkBAIC05MDIsNyArOTAyLDcgQEAgdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2xpZGVyVGh1
bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiAjZW5kaWYKIH0KIAot
Ym9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVXaW46
OnBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGks
IHIpOwogfQpAQCAtOTE5LDE0ICs5MTksMTQgQEAgdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0
U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXIKICAg
ICAgICAgc3R5bGUtPnNldE91dGxpbmVPZmZzZXQoLTIpOwogfQogCi1ib29sIFJlbmRlclRoZW1l
V2luOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1l
V2luOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgSW50
UmVjdCBib3VuZHMgPSByOwotICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7Ci0gICAgaWYgKCFvLT5w
YXJlbnQoKSB8fCAhby0+cGFyZW50KCktPmlzQm94KCkpCisgICAgQVNTRVJUKG8ucGFyZW50KCkp
OworICAgIGlmICghby5wYXJlbnQoKSB8fCAhby5wYXJlbnQoKS0+aXNCb3goKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAotICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9S
ZW5kZXJCb3goby0+cGFyZW50KCkpOworICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0g
dG9SZW5kZXJCb3goby5wYXJlbnQoKSk7CiAKICAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVu
dFJlbmRlckJveC0+YWJzb2x1dGVDb250ZW50Qm94KCk7CiAgICAgCkBAIC05NDAsNyArOTQwLDcg
QEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW4KIAogICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsSW1h
Z2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbCIpLmxlYWtSZWYo
KTsKICAgICBzdGF0aWMgSW1hZ2UqIGNhbmNlbFByZXNzZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxh
dGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsUHJlc3NlZCIpLmxlYWtSZWYoKTsKLSAgICBwYWlu
dEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKGlzUHJlc3NlZChvKSA/IGNhbmNlbFByZXNzZWRJbWFn
ZSA6IGNhbmNlbEltYWdlLCBvLT5zdHlsZSgpLmNvbG9yU3BhY2UoKSwgYm91bmRzKTsKKyAgICBw
YWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKGlzUHJlc3NlZChvKSA/IGNhbmNlbFByZXNzZWRJ
bWFnZSA6IGNhbmNlbEltYWdlLCBvLnN0eWxlKCkuY29sb3JTcGFjZSgpLCBib3VuZHMpOwogICAg
IHJldHVybiBmYWxzZTsKIH0KIApAQCAtOTcwLDE0ICs5NzAsMTQgQEAgdm9pZCBSZW5kZXJUaGVt
ZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJl
c29sdmVyKiwKICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhl
ZCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgSW50UmVjdCBib3VuZHMg
PSByOwotICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7Ci0gICAgaWYgKCFvLT5wYXJlbnQoKSB8fCAh
by0+cGFyZW50KCktPmlzQm94KCkpCisgICAgQVNTRVJUKG8ucGFyZW50KCkpOworICAgIGlmICgh
by5wYXJlbnQoKSB8fCAhby5wYXJlbnQoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby0+
cGFyZW50KCkpOworICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3go
by5wYXJlbnQoKSk7CiAgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFi
c29sdXRlQ29udGVudEJveCgpOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGRl
Y29yYXRpb24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94CkBA
IC05ODksNyArOTg5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydChSZW5kZXJPYmplY3QqIG8sIGNvbnMKICAgICBib3VuZHMuc2V0
WShwYXJlbnRCb3gueSgpICsgKHBhcmVudEJveC5oZWlnaHQoKSAtIGJvdW5kcy5oZWlnaHQoKSAr
IDEpIC8gMik7CiAgICAgCiAgICAgc3RhdGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoTWFnbmlmaWVyIikubGVha1JlZigpOwotICAg
IHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2UobWFnbmlmaWVySW1hZ2UsIG8tPnN0eWxlKCku
Y29sb3JTcGFjZSgpLCBib3VuZHMpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2Uo
bWFnbmlmaWVySW1hZ2UsIG8uc3R5bGUoKS5jb2xvclNwYWNlKCksIGJvdW5kcyk7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCkBAIC0xMDA0LDE2ICsxMDA0LDE2IEBAIHZvaWQgUmVuZGVyVGhlbWVX
aW46OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTCiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVySGVpZ2h0LCBGaXhl
ZCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcikKIHsKICAgICBJbnRSZWN0IGJvdW5kcyA9IHI7Ci0gICAgQVNTRVJU
KG8tPnBhcmVudCgpKTsKLSAgICBpZiAoIW8tPnBhcmVudCgpKQorICAgIEFTU0VSVChvLnBhcmVu
dCgpKTsKKyAgICBpZiAoIW8ucGFyZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIW8tPnBhcmVudCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKKyAgICBpZiAoIW8ucGFy
ZW50KCkgfHwgIW8ucGFyZW50KCktPmlzQm94KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8tPnBhcmVu
dCgpKTsKKyAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8ucGFy
ZW50KCkpOwogICAgIEludFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVyQm94LT5hYnNvbHV0
ZUNvbnRlbnRCb3goKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0
aW9uIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKQEAgLTEwMjUsNyArMTAyNSw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJCiAgICAgYm91bmRzLnNldFkocGFyZW50Qm94LnkoKSArIChw
YXJlbnRCb3guaGVpZ2h0KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAvIDIpOwogCiAgICAgc3Rh
dGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgi
c2VhcmNoTWFnbmlmaWVyUmVzdWx0cyIpLmxlYWtSZWYoKTsKLSAgICBwYWludEluZm8uY29udGV4
dC0+ZHJhd0ltYWdlKG1hZ25pZmllckltYWdlLCBvLT5zdHlsZSgpLmNvbG9yU3BhY2UoKSwgYm91
bmRzKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKG1hZ25pZmllckltYWdlLCBv
LnN0eWxlKCkuY29sb3JTcGFjZSgpLCBib3VuZHMpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApA
QCAtMTE3NywxMiArMTE3NywxMiBAQCBJbnRTaXplIFJlbmRlclRoZW1lV2luOjptZXRlclNpemVG
b3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JiBibwogICAgIHJldHVy
biBib3VuZHMuc2l6ZSgpOwogfQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpwYWludE1ldGVyKFJl
bmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50TWV0ZXIoY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghcmVuZGVyT2JqZWN0LT5pc01ldGVyKCkp
CisgICAgaWYgKCFyZW5kZXJPYmplY3QuaXNNZXRlcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVyKHJlbmRlck9i
amVjdCktPm1ldGVyRWxlbWVudCgpOworICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSB0
b1JlbmRlck1ldGVyKCZyZW5kZXJPYmplY3QpLT5tZXRlckVsZW1lbnQoKTsKIAogICAgIFRoZW1l
RGF0YSB0aGVtZSA9IGdldFRoZW1lRGF0YShyZW5kZXJPYmplY3QpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCmluZGV4IDE3OWNmMzA1ZDk4NTdhMDBmYTQxZTNk
OTc0ZDdmMzJlMGMyOGFlZjUuLmY1MTQyNmQyYjM2MGI4Y2Q4ZThjZTAyOTZlOTcxN2FjOTM2NjBm
YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCkBAIC02Niw1
MSArNjYsNTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KENTU1ZhbHVl
SUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwogICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29s
b3IoQ1NTVmFsdWVJRCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0
IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKICAgICB7IHJldHVybiBwYWludEJ1dHRv
bihvLCBpLCByKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5
bGUqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorICAgIHZpcnR1YWwgYm9v
bCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByKQogICAgIHsgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAg
ICAgeyByZXR1cm4gc2V0Q2hlY2tib3hTaXplKHN0eWxlKTsgfQogCi0gICAgdmlydHVhbCBib29s
IHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0
RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRU
ZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcikKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKICAgICB7IHJldHVybiBw
YWludFRleHRGaWVsZChvLCBpLCByKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVM
aXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAg
ICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25E
ZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7Ci0gICAgdmlydHVh
bCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNr
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVz
dFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHZp
cnR1YWwgYm9vbCBwb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFy
dFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIGZh
bHNlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBh
cnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOwogCkBAIC0x
MzMsNyArMTMzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRlclNpemVGb3JC
b3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTWV0ZXIoQ29udHJvbFBhcnQpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZXRlcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlm
CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC0xNTEsMTYgKzE1MSwxNiBAQCBwcml2YXRlOgogICAg
IHZvaWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSopIGNvbnN0OwogICAgIHZvaWQg
Y2xvc2UoKTsKIAotICAgIHVuc2lnbmVkIGRldGVybWluZVN0YXRlKFJlbmRlck9iamVjdCopOwot
ICAgIHVuc2lnbmVkIGRldGVybWluZUNsYXNzaWNTdGF0ZShSZW5kZXJPYmplY3QqLCBDb250cm9s
U3ViUGFydCA9IE5vbmUpOwotICAgIHVuc2lnbmVkIGRldGVybWluZVNsaWRlclRodW1iU3RhdGUo
UmVuZGVyT2JqZWN0Kik7Ci0gICAgdW5zaWduZWQgZGV0ZXJtaW5lQnV0dG9uU3RhdGUoUmVuZGVy
T2JqZWN0Kik7Ci0gICAgdW5zaWduZWQgZGV0ZXJtaW5lU3BpbkJ1dHRvblN0YXRlKFJlbmRlck9i
amVjdCosIENvbnRyb2xTdWJQYXJ0ID0gTm9uZSk7CisgICAgdW5zaWduZWQgZGV0ZXJtaW5lU3Rh
dGUoY29uc3QgUmVuZGVyT2JqZWN0Jik7CisgICAgdW5zaWduZWQgZGV0ZXJtaW5lQ2xhc3NpY1N0
YXRlKGNvbnN0IFJlbmRlck9iamVjdCYsIENvbnRyb2xTdWJQYXJ0ID0gTm9uZSk7CisgICAgdW5z
aWduZWQgZGV0ZXJtaW5lU2xpZGVyVGh1bWJTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmKTsKKyAg
ICB1bnNpZ25lZCBkZXRlcm1pbmVCdXR0b25TdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmKTsKKyAg
ICB1bnNpZ25lZCBkZXRlcm1pbmVTcGluQnV0dG9uU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Q29udHJvbFN1YlBhcnQgPSBOb25lKTsKIAogICAgIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9s
UGFydCkgY29uc3Q7CiAKLSAgICBUaGVtZURhdGEgZ2V0VGhlbWVEYXRhKFJlbmRlck9iamVjdCos
IENvbnRyb2xTdWJQYXJ0ID0gTm9uZSk7Ci0gICAgVGhlbWVEYXRhIGdldENsYXNzaWNUaGVtZURh
dGEoUmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3ViUGFydCA9IE5vbmUpOworICAgIFRoZW1lRGF0
YSBnZXRUaGVtZURhdGEoY29uc3QgUmVuZGVyT2JqZWN0JiwgQ29udHJvbFN1YlBhcnQgPSBOb25l
KTsKKyAgICBUaGVtZURhdGEgZ2V0Q2xhc3NpY1RoZW1lRGF0YShjb25zdCBSZW5kZXJPYmplY3Qm
LCBDb250cm9sU3ViUGFydCA9IE5vbmUpOwogCiAgICAgSEFORExFIGJ1dHRvblRoZW1lKCkgY29u
c3Q7CiAgICAgSEFORExFIHRleHRGaWVsZFRoZW1lKCkgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230049</attachid>
            <date>2014-04-23 22:14:05 -0700</date>
            <delta_ts>2014-04-24 06:50:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132037-20140423221343.patch</filename>
            <type>text/plain</type>
            <size>241999</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3Njc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWJlMGU5NWJiNmE3Mzcy
YTdkMmRmZjY2YjI1ZjAyYzhhMjEwODViNC4uMTI4YTk2NGQ2OWFmYzYzNjU2MmRmMGQ2MjY1NmEw
ZjhlMDVhMmQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MiBAQAorMjAxNC0wNC0yMyAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFRyYW5zaXRpb24gUmVuZGVy
VGhlbWUgQVBJIGZyb20gUmVuZGVyT2JqZWN0KiB0byBjb25zdCBSZW5kZXJPYmplY3QmCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzIwMzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEdvcmFuIEtsaW5nLgorCisgICAgICAgIFVzaW5nIGNv
bnN0IHJlZmVyZW5jZXMgcHJvdmlkZXMgYmV0dGVyIGVuY2Fwc3VsYXRpb24gYW5kIGltcHJvdmUg
c2VjdXJpdHkuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmJvdW5kaW5nQm94Rm9yUXVhZHMpOgorICAgICAgICAqIGRv
bS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEFjdGl2ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRIb3ZlcmVkKToKKyAgICAgICAgKiBlZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpm
b2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250
cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpyZWFkT25seUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRN
TElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpz
ZXRDaGVja2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0
ZXJtaW5hdGUpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmFkZFZpc3VhbE92ZXJmbG93RnJvbVRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCdXR0b246OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVw
bG9hZENvbnRyb2w6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdp
b25zVmlzdWFsT3ZlcmZsb3dGcm9tVGhlbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpkcmF3TGluZUZvckJv
eFNpZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJv
Z3Jlc3M6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVt
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50Qm9yZGVyT25seSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6YWRqdXN0UmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnN0
YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dXBkYXRlQ29udHJv
bFN0YXRlc0ZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpleHRy
YWN0Q29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lOjppc0FjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXNDaGVja2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0luZGV0ZXJtaW5hdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Ojppc1ByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0
dG9uUGFydFByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzUmVhZE9u
bHlDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0hvdmVyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRGVmYXVsdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRJbnB1dEZpZWxkU3BlZWNoQnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmNvbnRyb2xTdXBw
b3J0c1RpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludENhcHNMb2Nr
SW5kaWNhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEZpbGVVcGxv
YWRJY29uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmltYWdl
Q29udHJvbHNCdXR0b25TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWlu
dENoZWNrYm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFJhZGlvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRJbm5lclNwaW5CdXR0b24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRSYWRpb0RlY29yYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6cGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6cGFpbnRUZXh0QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6cGFpbnRUZXh0QXJlYURlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpw
YWludE1lbnVMaXN0RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50U3F1YXJlQnV0dG9uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6cGFpbnRTZWFyY2hGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6
cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlhRnVsbHNj
cmVlbkJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRpYVBs
YXlCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFPdmVy
bGF5UGxheUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRp
YU11dGVCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFT
ZWVrQmFja0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRp
YVNlZWtGb3J3YXJkQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWlu
dE1lZGlhU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50
TWVkaWFTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRN
ZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFSZXdpbmRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFDb250cm9sc0Jh
Y2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFDdXJy
ZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRpYVRpbWVS
ZW1haW5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFGdWxs
U2NyZWVuVm9sdW1lU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnBhaW50TWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWU6OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEltYWdlQ29udHJvbHNCdXR0b24pOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGRSb3Vu
ZGVkQm9yZGVyQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRD
aGVja2JveERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpi
YXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWlu
dFJhZGlvRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBh
aW50VGV4dEZpZWxkRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJ
T1M6OnBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRodW1iRGVjb3JhdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRCdXR0b25EZWNvcmF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50RmlsZVVwbG9hZElj
b25EZWNvcmF0aW9ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6dXBkYXRlQWN0aXZlU3RhdGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lTWFjOjpkb2N1bWVudFZpZXdGb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OmFkanVzdFJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjpjb252ZXJ0VG9QYWludGluZ1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnVwZGF0ZUNoZWNrZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjp1cGRhdGVGb2N1c2VkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnVwZGF0ZVByZXNzZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6Y29udHJvbFN1cHBvcnRzVGludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
OjpwYWludENhcHNMb2NrSW5kaWNhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjpwYWludFRleHRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpw
YWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1l
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwcm9ncmVzc0JhclJlY3RG
b3JCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50UHJvZ3Jl
c3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RC
dXR0b25HcmFkaWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50
TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnNldFNlYXJjaENlbGxTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFw
c2hvdHRlZFBsdWdpbk92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnBhaW50SW1hZ2VDb250cm9sc0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6aW1hZ2VDb250cm9sc0J1dHRvblNpemUpOgorCiAyMDE0LTA0LTIyICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGFuZ2UgSW1hZ2UgQ29udHJvbHMg
cmVwbGFjZW1lbnQgdG8gdXNlIHNlbGVjdGlvbiBhbmQgcGFzdGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDYxZjc0
YzliOGM5MWI0YmZlNWI2ODFiMzZmYzhlYWI2YmE5ZTIyZjcuLmI4ZDcyMDdmOTQ2ZWQ2MGExZDQ0
MGVjMzY0YTQwMWQ1ZDU4Yzk2NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNzExLDcgKzcxMSw3IEBAIEludFJl
Y3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6Ym91bmRpbmdCb3hGb3JRdWFkcyhSZW5kZXJPYmplY3Qq
IG9iaiwgY29uc3QgVmVjdG9yCiAgICAgICAgIEludFJlY3QgciA9IHF1YWQuZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKICAgICAgICAgaWYgKCFyLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYg
KG9iai0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICAgICAgb2JqLT50aGVt
ZSgpLmFkanVzdFJlcGFpbnRSZWN0KG9iaiwgcik7CisgICAgICAgICAgICAgICAgb2JqLT50aGVt
ZSgpLmFkanVzdFJlcGFpbnRSZWN0KCpvYmosIHIpOwogICAgICAgICAgICAgcmVzdWx0LnVuaXRl
KHIpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDFiYjg5OGZh
MWFjMThjOGMyYmY1ZjkyYjFmOTM2Zjk4MGExYzY3YTIuLmFjZGQzNjA2YTA4YzU3NDBlZTViMzU2
MTEzNTJlNWZmYTAzZWZkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTQ4OCw3ICs0ODgs
NyBAQCB2b2lkIEVsZW1lbnQ6OnNldEFjdGl2ZShib29sIGZsYWcsIGJvb2wgcGF1c2UpCiAgICAg
aWYgKHJlYWN0c1RvUHJlc3MpCiAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIAotICAg
IGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAmJiByZW5kZXJlcigpLT50
aGVtZSgpLnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBDb250cm9sU3RhdGVzOjpQcmVzc2VkU3Rh
dGUpKQorICAgIGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAmJiByZW5k
ZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6
UHJlc3NlZFN0YXRlKSkKICAgICAgICAgcmVhY3RzVG9QcmVzcyA9IHRydWU7CiAKICAgICAvLyBU
aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgYSBmZWF0dXJlIHRoYXQgb25seSB3
b3JrcyBpZiB0aGUKQEAgLTU1NCw3ICs1NTQsNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEhvdmVyZWQo
Ym9vbCBmbGFnKQogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKICAgICBpZiAocmVu
ZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIHJlbmRlcmVyKCktPnRo
ZW1lKCkuc3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkhvdmVyU3RhdGUp
OworICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwg
Q29udHJvbFN0YXRlczo6SG92ZXJTdGF0ZSk7CiB9CiAKIHZvaWQgRWxlbWVudDo6c2Nyb2xsSW50
b1ZpZXcoYm9vbCBhbGlnblRvVG9wKSAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAKaW5kZXggNDdiNmJlNjYwYWE2YzQ4OWE0NGE2Y2I4YTQ1ZWY2ZDQzZTg0NDkwYS4u
YmFjMmRmOWMxODcwN2FlYmViYzRiNmMxOTRjMDNjM2M1ZTBlY2NlMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTE3NDksNyArMTc0OSw3IEBAIHZvaWQg
RnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAgICAgIGVs
ZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgaWYgKHJlbmRlcmVy
ICYmIHJlbmRlcmVyLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgICAgICAgICBy
ZW5kZXJlci0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIsIENvbnRyb2xTdGF0ZXM6OkZv
Y3VzU3RhdGUpOworICAgICAgICAgICAgICAgIHJlbmRlcmVyLT50aGVtZSgpLnN0YXRlQ2hhbmdl
ZCgqcmVuZGVyZXIsIENvbnRyb2xTdGF0ZXM6OkZvY3VzU3RhdGUpOwogICAgIH0KICNlbmRpZgog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5k
ZXggZTBiODVkNTk3MGY4OGJkNGMwNTEyZjU3NGMyYWIxZDdmMGNhN2ZkYi4uODEwY2JhZDk3YWZl
NDhiOTRjN2NkMDU2NGIxYjg3MzY3NzQ3MWIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCgpCiAgICAgc2V0TmVlZHNX
aWxsVmFsaWRhdGVDaGVjaygpOwogICAgIGRpZEFmZmVjdFNlbGVjdG9yKEFmZmVjdGVkU2VsZWN0
b3JEaXNhYmxlZCB8IEFmZmVjdGVkU2VsZWN0b3JFbmFibGVkKTsKICAgICBpZiAocmVuZGVyZXIo
KSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgcmVuZGVy
ZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6RW5h
YmxlZFN0YXRlKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJl
bmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkVuYWJsZWRTdGF0ZSk7CiB9CiAKIHZvaWQgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6cmVhZE9ubHlBdHRyaWJ1dGVDaGFuZ2VkKCkKQEAgLTE2Myw3ICsx
NjMsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlYWRPbmx5QXR0cmlidXRlQ2hh
bmdlZCgpCiAgICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOwogICAgIHNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhh
c0FwcGVhcmFuY2UoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQo
cmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6UmVhZE9ubHlTdGF0ZSk7CisgICAgICAgIHJlbmRl
cmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlcigpLCBDb250cm9sU3RhdGVzOjpS
ZWFkT25seVN0YXRlKTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXF1aXJl
ZEF0dHJpYnV0ZUNoYW5nZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAKaW5kZXggNzAwMDI4YmI3MWUwMGIyNDZkZTk2NmRjYjEwMzJmODExOWQzY2I2Mi4uN2NiNmMy
MzA4MWFkZDNiMmI4ODJhYWY3NDQ2MTk0Y2IyM2ZkNGZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC04NTgsNyArODU4LDcgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpzZXRDaGVja2VkKGJvb2wgbm93Q2hlY2tlZCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlv
ciBldmVudEIKICAgICBpZiAoQ2hlY2tlZFJhZGlvQnV0dG9ucyogYnV0dG9ucyA9IGNoZWNrZWRS
YWRpb0J1dHRvbnMoKSkKICAgICAgICAgICAgIGJ1dHRvbnMtPnVwZGF0ZUNoZWNrZWRTdGF0ZSh0
aGlzKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVh
cmFuY2UoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVy
ZXIoKSwgQ29udHJvbFN0YXRlczo6Q2hlY2tlZFN0YXRlKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+
dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkNoZWNrZWRT
dGF0ZSk7CiAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiAKICAgICAvLyBJZGVhbGx5IHdl
J2QgZG8gdGhpcyBmcm9tIHRoZSByZW5kZXIgdHJlZSAobWF0Y2hpbmcKQEAgLTg5Miw3ICs4OTIs
NyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0ZXJtaW5hdGUoYm9vbCBuZXdWYWx1
ZSkKICAgICBkaWRBZmZlY3RTZWxlY3RvcihBZmZlY3RlZFNlbGVjdG9ySW5kZXRlcm1pbmF0ZSk7
CiAKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFu
Y2UoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIo
KSwgQ29udHJvbFN0YXRlczo6Q2hlY2tlZFN0YXRlKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+dGhl
bWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkNoZWNrZWRTdGF0
ZSk7CiB9CiAKIGludCBIVE1MSW5wdXRFbGVtZW50OjpzaXplKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKaW5kZXggNDlmNDhiZjM4MWU5YjQ1MDQ5NDRm
YmEwNTQwNWE5OWQ0NzkzMTY5My4uMjE5ZjNhMjUzMjRkNzExOGFiOTA5MTIwN2M4NDNmMTRiODhj
MDM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKQEAgLTE5
NSw3ICsxOTUsNyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdAogICAgICAgICBpZiAob2xkRGlz
YWJsZWQgIT0gbV9kaXNhYmxlZCkgewogICAgICAgICAgICAgZGlkQWZmZWN0U2VsZWN0b3IoQWZm
ZWN0ZWRTZWxlY3RvckRpc2FibGVkIHwgQWZmZWN0ZWRTZWxlY3RvckVuYWJsZWQpOwogICAgICAg
ICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVu
ZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6RW5hYmxlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICBy
ZW5kZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRl
czo6RW5hYmxlZFN0YXRlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBzZWxl
Y3RlZEF0dHIpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBtYXRjaCB3aGF0IHRo
ZSBIVE1MIHNwZWNpZmljYXRpb24gc2F5cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmgKaW5kZXggNDJiZjZhYzU2N2NjODIy
NGE5MDNkNTVkMzcyMTNmNzZlM2I3NGNkMy4uNWNjZTY2OTQwYTc1OGIwNzQzMTY0OTcyMDQwYjJj
NTk2MzdiZDkwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9sRWxlbWVudFR5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sRWxlbWVudFR5cGVzLmgKQEAgLTc1LDcgKzc1LDcgQEAgZW51bSBNZWRpYUNvbnRy
b2xFbGVtZW50VHlwZSB7CiB9OwogCiBIVE1MTWVkaWFFbGVtZW50KiBwYXJlbnRNZWRpYUVsZW1l
bnQoTm9kZSopOwotaW5saW5lIEhUTUxNZWRpYUVsZW1lbnQqIHBhcmVudE1lZGlhRWxlbWVudChS
ZW5kZXJPYmplY3QmIHJlbmRlcmVyKSB7IHJldHVybiBwYXJlbnRNZWRpYUVsZW1lbnQocmVuZGVy
ZXIubm9kZSgpKTsgfQoraW5saW5lIEhUTUxNZWRpYUVsZW1lbnQqIHBhcmVudE1lZGlhRWxlbWVu
dChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSB7IHJldHVybiBwYXJlbnRNZWRpYUVsZW1l
bnQocmVuZGVyZXIubm9kZSgpKTsgfQogCiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBtZWRpYUNv
bnRyb2xFbGVtZW50VHlwZShOb2RlKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
ZmwvUmVuZGVyVGhlbWVFZmwuY3BwCmluZGV4IDZmYzQ2M2VkYTBjNmQ4YmYxMjYzNWI1MTI3NjMy
YmNjODQ0Mjc5MWEuLjhlMDQ1ZWIwNDMxODg3ZGQ3YjQzNDk3N2JiYTA1ZDE4ZDdlNTc4ZWUgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcApAQCAt
Mjk5LDEzICsyOTksMTMgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplU3RhdGVGcm9t
Rm9ybShFdmFzX09iamVjdCogb2JqZWN0LCBjb25zdCBDb250cm9sU3QKICAgICAgICAgZWRqZV9v
YmplY3Rfc2lnbmFsX2VtaXQob2JqZWN0LCAic3R5bGVkIiwgIiIpOwogfQogCi12b2lkIFJlbmRl
clRoZW1lRWZsOjphcHBseUVkamVSVExTdGF0ZShFdmFzX09iamVjdCogZWRqZSwgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFJl
bmRlclRoZW1lRWZsOjphcHBseUVkamVSVExTdGF0ZShFdmFzX09iamVjdCogZWRqZSwgY29uc3Qg
UmVuZGVyT2JqZWN0JiBvYmplY3QsIEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgaWYgKHR5cGUgPT0gU2xpZGVyVmVydGljYWwgfHwgdHlwZSA9PSBTbGlkZXJIb3Jp
em9udGFsKSB7Ci0gICAgICAgIGlmICghb2JqZWN0LT5pc1NsaWRlcigpKQorICAgICAgICBpZiAo
IW9iamVjdC5pc1NsaWRlcigpKQogICAgICAgICAgICAgcmV0dXJuOyAvLyBwcm9iYWJseSBoYXZl
IC13ZWJraXQtYXBwZWFyYW5jZTogc2xpZGVyLi4KIAotICAgICAgICBSZW5kZXJTbGlkZXIqIHJl
bmRlclNsaWRlciA9IHRvUmVuZGVyU2xpZGVyKG9iamVjdCk7CisgICAgICAgIGNvbnN0IFJlbmRl
clNsaWRlciogcmVuZGVyU2xpZGVyID0gdG9SZW5kZXJTbGlkZXIoJm9iamVjdCk7CiAgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gcmVuZGVyU2xpZGVyLT5lbGVtZW50KCk7CiAgICAg
ICAgIGRvdWJsZSB2YWx1ZVJhbmdlID0gaW5wdXQubWF4aW11bSgpIC0gaW5wdXQubWluaW11bSgp
OwogCkBAIC0zMTYsNyArMzE2LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplUlRM
U3RhdGUoRXZhc19PYmplY3QqIGVkamUsIFJlbmRlck9iamVjdCogb2JqZWN0LAogICAgICAgICAv
LyBncm93cyBmcm9tIHRoZSBlbmQgb2YgdGhlIHNsaWRlciBvciBmcm9tIHRoZSBiZWdpbm5pbmcu
IE9uIHZlcnRpY2FsCiAgICAgICAgIC8vIHNsaWRlcnMsIGl0IHNob3VsZCBhbHdheXMgYmUgdGhl
IHNhbWUgYW5kIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5CiAgICAgICAgIC8vIHRleHQgZGlyZWN0
aW9uIHNldHRpbmdzLgotICAgICAgICBpZiAob2JqZWN0LT5zdHlsZSgpLmRpcmVjdGlvbigpID09
IFJUTCB8fCB0eXBlID09IFNsaWRlclZlcnRpY2FsKQorICAgICAgICBpZiAob2JqZWN0LnN0eWxl
KCkuZGlyZWN0aW9uKCkgPT0gUlRMIHx8IHR5cGUgPT0gU2xpZGVyVmVydGljYWwpCiAgICAgICAg
ICAgICBtc2ctPnZhbFswXSA9IDE7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1zZy0+dmFs
WzBdID0gMDsKQEAgLTMyNSw3ICszMjUsNyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseUVk
amVSVExTdGF0ZShFdmFzX09iamVjdCogZWRqZSwgUmVuZGVyT2JqZWN0KiBvYmplY3QsCiAgICAg
ICAgIGVkamVfb2JqZWN0X21lc3NhZ2Vfc2VuZChlZGplLCBFREpFX01FU1NBR0VfRkxPQVRfU0VU
LCAwLCBtc2cuZ2V0KCkpOwogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQogICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSBQcm9ncmVzc0JhcikgewotICAgICAgICBSZW5kZXJQcm9ncmVzcyogcmVu
ZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKG9iamVjdCk7CisgICAgICAgIGNvbnN0IFJl
bmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3MoJm9iamVjdCk7
CiAKICAgICAgICAgaW50IG1heCA9IHJlY3Qud2lkdGgoKTsKICAgICAgICAgZG91YmxlIHZhbHVl
ID0gcmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCk7CkBAIC0zMzMsNyArMzMzLDcgQEAgdm9pZCBS
ZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplUlRMU3RhdGUoRXZhc19PYmplY3QqIGVkamUsIFJlbmRl
ck9iamVjdCogb2JqZWN0LAogICAgICAgICBPd25QdHI8RWRqZV9NZXNzYWdlX0Zsb2F0X1NldD4g
bXNnID0gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RWRqZV9NZXNzYWdlX0Zsb2F0X1NldCo+KDo6b3Bl
cmF0b3IgbmV3IChzaXplb2YoRWRqZV9NZXNzYWdlX0Zsb2F0X1NldCkgKyBzaXplb2YoZG91Ymxl
KSkpKTsKICAgICAgICAgbXNnLT5jb3VudCA9IDI7CiAKLSAgICAgICAgaWYgKG9iamVjdC0+c3R5
bGUoKS5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgICAgIGlmIChvYmplY3Quc3R5bGUoKS5kaXJl
Y3Rpb24oKSA9PSBSVEwpCiAgICAgICAgICAgICBtc2ctPnZhbFswXSA9ICgxLjAgLSB2YWx1ZSkg
KiBtYXg7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1zZy0+dmFsWzBdID0gMDsKQEAgLTM1
MCw3ICszNTAsNyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjppc0NvbnRyb2xTdHlsZWQoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJgogICAgIHJldHVybiBSZW5kZXJU
aGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91
bmRDb2xvcikgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQ7CiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGhlbWVQYXJ0KFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBGb3JtVHlwZSB0eXBlLCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRoZW1lUGFydChjb25zdCBSZW5kZXJP
YmplY3QmIG9iamVjdCwgRm9ybVR5cGUgdHlwZSwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQogewogICAgIGxvYWRUaGVtZUlmTmVlZGVkKCk7CiAgICAgX0FTU0VS
VF9PTl9SRUxFQVNFX1JFVFVSTl9WQUwoZWRqZSgpLCBmYWxzZSwgIkNvdWxkIG5vdCBwYWludCBu
YXRpdmUgSFRNTCBwYXJ0IGR1ZSB0byBtaXNzaW5nIHRoZW1lLiIpOwpAQCAtMzU5LDcgKzM1OSw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGhlbWVQYXJ0KFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBGb3JtVHlwZSB0eXBlLCBjb25zdCBQCiAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYm9vbCBoYXZlQmFja2dyb3VuZENvbG9yID0gaXNDb250cm9sU3R5
bGVkKCZvYmplY3QtPnN0eWxlKCksIG9iamVjdC0+c3R5bGUoKS5ib3JkZXIoKSwgKm9iamVjdC0+
c3R5bGUoKS5iYWNrZ3JvdW5kTGF5ZXJzKCksIENvbG9yOjp3aGl0ZSk7CisgICAgYm9vbCBoYXZl
QmFja2dyb3VuZENvbG9yID0gaXNDb250cm9sU3R5bGVkKCZvYmplY3Quc3R5bGUoKSwgb2JqZWN0
LnN0eWxlKCkuYm9yZGVyKCksICpvYmplY3Quc3R5bGUoKS5iYWNrZ3JvdW5kTGF5ZXJzKCksIENv
bG9yOjp3aGl0ZSk7CiAgICAgQ29udHJvbFN0YXRlcyBzdGF0ZXMoZXh0cmFjdENvbnRyb2xTdGF0
ZXNGb3JSZW5kZXJlcihvYmplY3QpKTsKICAgICBhcHBseUVkamVTdGF0ZUZyb21Gb3JtKGVudHJ5
LT5lZGplKCksICZzdGF0ZXMsIGhhdmVCYWNrZ3JvdW5kQ29sb3IpOwogCkBAIC02MzEsMTkgKzYz
MSwxOSBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAgICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFw
cGVhcmFuY2UoKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OmNvbnRyb2xTdXBwb3J0c1Rp
bnRzKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZUVm
bDo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGlzRW5hYmxlZChvYmplY3QpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVF
Zmw6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpIGNvbnN0Citp
bnQgUmVuZGVyVGhlbWVFZmw6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JiBv
YmplY3QpIGNvbnN0CiB7Ci0gICAgaWYgKCFvYmplY3QtPmlzQm94KCkpCisgICAgaWYgKCFvYmpl
Y3QuaXNCb3goKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAob2JqZWN0LT5zdHlsZSgp
LmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQKLSAgICB8fCAgb2JqZWN0LT5zdHlsZSgpLmFw
cGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpCi0gICAgICAgIHJldHVybiB0b1JlbmRlckJveChvYmpl
Y3QpLT5tYXJnaW5Ub3AoKSArIHRvUmVuZGVyQm94KG9iamVjdCktPmhlaWdodCgpIC0gMzsKKyAg
ICBpZiAob2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydAorICAgIHx8
ICBvYmplY3Quc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KQorICAgICAgICByZXR1
cm4gdG9SZW5kZXJCb3goJm9iamVjdCktPm1hcmdpblRvcCgpICsgdG9SZW5kZXJCb3goJm9iamVj
dCktPmhlaWdodCgpIC0gMzsKIAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3Np
dGlvbihvYmplY3QpOwogfQpAQCAtNjg0LDkgKzY4NCw5IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6
OnN1cHBvcnRzU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9ycygpIGNvbnN0CiAgICAgcmV0dXJuIG1f
c3VwcG9ydHNTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3I7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVF
Zmw6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50
U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
aW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAob2JqZWN0LT5zdHlsZSgpLmFw
cGVhcmFuY2UoKSA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCkKKyAgICBpZiAob2JqZWN0LnN0eWxl
KCkuYXBwZWFyYW5jZSgpID09IFNsaWRlckhvcml6b250YWxQYXJ0KQogICAgICAgICBwYWludFRo
ZW1lUGFydChvYmplY3QsIFNsaWRlckhvcml6b250YWwsIGluZm8sIHJlY3QpOwogICAgIGVsc2UK
ICAgICAgICAgcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBTbGlkZXJWZXJ0aWNhbCwgaW5mbywgcmVj
dCk7CkBAIC03NTUsOSArNzU1LDkgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6c3VwcG9ydHNEYXRh
TGlzdFVJKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSkgY29uc3QKICNlbmRpZgogfQogCi1ib29s
IFJlbmRlclRoZW1lRWZsOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBj
b25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRo
ZW1lRWZsOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25z
dCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKG9iamVj
dC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkKKyAg
ICBpZiAob2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRh
bFBhcnQpCiAgICAgICAgIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgU2xpZGVyVGh1bWJIb3Jpem9u
dGFsLCBpbmZvLCByZWN0KTsKICAgICBlbHNlCiAgICAgICAgIHBhaW50VGhlbWVQYXJ0KG9iamVj
dCwgU2xpZGVyVGh1bWJWZXJ0aWNhbCwgaW5mbywgcmVjdCk7CkBAIC03ODMsNyArNzgzLDcgQEAg
dm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBSZW5kZXJTdHkKICAgICAgICAgc3R5bGUtPnNldEhlaWdodChkZXNjLT5t
aW4uaGVpZ2h0KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lRWZsOjpwYWludENoZWNrYm94KFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9i
amVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgQ2hlY2tCb3gsIGluZm8sIHJl
Y3QpOwogfQpAQCAtODA2LDcgKzgwNiw3IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFJh
ZGlvU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqCiAgICAg
ICAgIHN0eWxlLT5zZXRIZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZUVmbDo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFp
bnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmpl
Y3QsIFJhZGlvQnV0dG9uLCBpbmZvLCByZWN0KTsKIH0KQEAgLTgyMyw3ICs4MjMsNyBAQCB2b2lk
IFJlbmRlclRoZW1lRWZsOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZQogICAgICAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUs
IEJ1dHRvbik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50QnV0dG9uKFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Citib29sIFJlbmRlclRoZW1lRWZsOjpwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAg
IHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIEJ1dHRvbiwgaW5mbywgcmVjdCk7CiB9CkBA
IC04NDEsNyArODQxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxpc3RTdHls
ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHkKICAgICBzdHlsZS0+c2V0
TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWVFZmw6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVF
Zmw6OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gcGFpbnRUaGVt
ZVBhcnQob2JqZWN0LCBDb21ib0JveCwgaW5mbywgcmVjdCk7CiB9CkBAIC04NjIsNyArODYyLDcg
QEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW4KICAgICBhZGp1c3RNZW51TGlzdFN0eWxlKHN0eWxl
UmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFp
bnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZs
OjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBy
ZXR1cm4gcGFpbnRNZW51TGlzdChvYmplY3QsIGluZm8sIHJlY3QpOwogfQpAQCAtODc3LDcgKzg3
Nyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0CiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7
CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29s
IFJlbmRlclRoZW1lRWZsOjpwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJl
dHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFRleHRGaWVsZCwgaW5mbywgcmVjdCk7CiB9CkBA
IC04ODYsNyArODg2LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0VGV4dEFyZWFTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikKIHsKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZUVmbDo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUVm
bDo6cGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRleHRG
aWVsZChvYmplY3QsIGluZm8sIHJlY3QpOwogfQpAQCAtOTA4LDcgKzkwOCw3IEBAIHZvaWQgUmVu
ZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzCiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZGVjb3JhdGlvblNp
emUsIEZpeGVkKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRoZW1l
UGFydChvYmplY3QsIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbiwgaW5mbywgcmVjdCk7CiB9CkBA
IC05MzAsNyArOTMwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKgogICAgIHN0eWxlLT5zZXRI
ZWlnaHQoTGVuZ3RoKGRlY29yYXRpb25TaXplLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiti
b29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
KGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgU2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbiwgaW5mbywgcmVjdCk7CiB9CkBAIC05NTQsNyArOTU0
LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc28KICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0
aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lRWZsOjpw
YWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZs
OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0
LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0
dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgU2VhcmNoRmllbGRDYW5jZWxCdXR0b24sIGluZm8s
IHJlY3QpOwogfQpAQCAtOTcwLDcgKzk3MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVz
dFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyCiAg
ICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUVmbDo6
cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFy
Y2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmpl
Y3QsIFNlYXJjaEZpZWxkLCBpbmZvLCByZWN0KTsKIH0KQEAgLTk4NCw3ICs5ODQsNyBAQCB2b2lk
IFJlbmRlclRoZW1lRWZsOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBSZQogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgU3Bp
bm5lcik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50SW5uZXJTcGluQnV0dG9uKFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBS
ZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFNwaW5uZXIsIGlu
Zm8sIHJlY3QpOwogfQpAQCAtMTAyMiw5ICsxMDIyLDkgQEAgZG91YmxlIFJlbmRlclRoZW1lRWZs
OjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QK
ICAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0aW9u
RnJhbWVzICogMjsgLy8gIjIiIGZvciBiYWNrIGFuZCBmb3J0aDsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZUVmbDo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUVmbDo6
cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghb2JqZWN0LT5pc1By
b2dyZXNzKCkpCisgICAgaWYgKCFvYmplY3QuaXNQcm9ncmVzcygpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFByb2dyZXNzQmFyLCBp
bmZvLCByZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5k
ZXJUaGVtZUVmbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZs
LmgKaW5kZXggOWJhNjZjZTc0NDk1YWQ4N2Q5NTJjYzNmMzFiOWE3ZGFmN2U0ZmU4OC4uZDNlYzc1
NzFmNmZmMDdmN2YwOThjNTk0Zjk2YmI5Y2M1OTRkZTdlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmgKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNv
bnN0OwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRz
IHRpbnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCi0gICAgdmlydHVhbCBib29s
IGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25z
dDsKIAogICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRp
bmcgaXMgc3VwcG9ydGVkIGF0IGFsbC4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9s
VGludHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoK
ICAgICAvLyBBIG1ldGhvZCB0byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIGZvciBhICJs
ZWFmIiBjb250cm9sLiBUaGlzIHdpbGwgb25seSBiZSB1c2VkIGlmIGEgYmFzZWxpbmUKICAgICAv
LyBwb3NpdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgY2hpbGQgY29udGVu
dC4gQ2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucyBhcmUgZXhhbXBsZXMgb2YKICAgICAvLyBj
b250cm9scyB0aGF0IG5lZWQgdG8gZG8gdGhpcy4KLSAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBv
c2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGJhc2Vs
aW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIENv
bG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3Q7CkBAIC0xMTEsNDAgKzExMSw0MCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN5
c3RlbUZvbnQoQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CiAKICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
Ym9vbCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lk
IGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNv
cmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmll
bGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlk
ZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwogCkBAIC0xNTgsMTYgKzE1OCwxNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNEYXRhTGlzdFVJKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5C
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwogCiAgICAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdEZvbnRTaXplKGludCBmb250c2l6ZSk7
CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZv
clByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUg
YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Owog
I2VuZGlmCkBAIC0yMDAsOCArMjAwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGx5UGFydERl
c2NyaXB0aW9uc0Zyb20oY29uc3QgU3RyaW5nJiB0aGVtZVBhdGgpOwogCiAgICAgdm9pZCBhcHBs
eUVkamVTdGF0ZUZyb21Gb3JtKEV2YXNfT2JqZWN0KiwgY29uc3QgQ29udHJvbFN0YXRlcyosIGJv
b2wpOwotICAgIHZvaWQgYXBwbHlFZGplUlRMU3RhdGUoRXZhc19PYmplY3QqLCBSZW5kZXJPYmpl
Y3QqLCBGb3JtVHlwZSwgY29uc3QgSW50UmVjdCYpOwotICAgIGJvb2wgcGFpbnRUaGVtZVBhcnQo
UmVuZGVyT2JqZWN0KiwgRm9ybVR5cGUsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2b2lkIGFwcGx5RWRqZVJUTFN0YXRlKEV2YXNfT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0JiwgRm9ybVR5cGUsIGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIHBhaW50VGhlbWVQ
YXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIEZvcm1UeXBlLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CiAKICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgQ29sb3IgbV9hY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR3RrLmNwcAppbmRleCA4ZDA2OWI1YjAyMjEzNDI5YWQ0MjcyYmY1NzQ3MzVmZjY0
NzVmZTJlLi4wMjBmZTRhYjM4ODI3YmM0YzNjMzA0ZGZhZjEwNGM1MGViZDkyZmFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKQEAgLTY1LDkg
KzY1LDkgQEAgZXh0ZXJuIEdSZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9ja0ljb25Gb3JXaWRnZXRU
eXBlKEdUeXBlLCBjb25zdCBjaGFyKiBpY29uTmFtZSwKIGV4dGVybiBHUmVmUHRyPEdka1BpeGJ1
Zj4gZ2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5cGUsIGNv
bnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIqIGZhbGxiYWNrU3RvY2tJY29u
TmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQgc3RhdGUsIGdpbnQgaWNvblNpemUpOwogCiAjaWYg
RU5BQkxFKFZJREVPKQotc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIGdldE1lZGlhRWxlbWVudEZy
b21SZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiBvKQorc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQq
IGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3QoY29uc3QgUmVuZGVyT2JqZWN0JiBvKQog
ewotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IG8ubm9kZSgp
OwogICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUgPyBub2RlLT5zaGFkb3dIb3N0KCkgOiAwOwog
ICAgIGlmICghbWVkaWFOb2RlKQogICAgICAgICBtZWRpYU5vZGUgPSBub2RlOwpAQCAtMTczLDIw
ICsxNzMsMjAgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxl
LT5hcHBlYXJhbmNlKCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpjb250cm9sU3VwcG9y
dHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lR3Rr
Ojpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGlzRW5hYmxlZChvKTsKIH0KIAotaW50IFJlbmRlclRoZW1lR3RrOjpiYXNlbGlu
ZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0
azo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAg
aWYgKCFvLT5pc0JveCgpKQorICAgIGlmICghby5pc0JveCgpKQogICAgICAgICByZXR1cm4gMDsK
IAogICAgIC8vIEZJWE1FOiBUaGlzIHN0cmF0ZWd5IGlzIHBvc3NpYmx5IGluY29ycmVjdCBmb3Ig
dGhlIEdUSysgcG9ydC4KLSAgICBpZiAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2ti
b3hQYXJ0Ci0gICAgICAgIHx8IG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkg
ewotICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KG8pOworICAgIGlm
IChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydAorICAgICAgICB8fCBvLnN0
eWxlKCkuYXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkgeworICAgICAgICBjb25zdCBSZW5kZXJC
b3gqIGJveCA9IHRvUmVuZGVyQm94KCZvKTsKICAgICAgICAgcmV0dXJuIGJveC0+bWFyZ2luVG9w
KCkgKyBib3gtPmhlaWdodCgpIC0gMjsKICAgICB9CiAKQEAgLTIwOCw3ICsyMDgsNyBAQCBHdGtU
ZXh0RGlyZWN0aW9uIGd0a1RleHREaXJlY3Rpb24oVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiAg
ICAgfQogfQogCi1zdGF0aWMgR3RrU3RhdGVUeXBlIGd0a0ljb25TdGF0ZShSZW5kZXJUaGVtZSog
dGhlbWUsIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0KQorc3RhdGljIEd0a1N0YXRlVHlwZSBn
dGtJY29uU3RhdGUoUmVuZGVyVGhlbWUqIHRoZW1lLCBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
ck9iamVjdCkKIHsKICAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSkKICAg
ICAgICAgcmV0dXJuIEdUS19TVEFURV9JTlNFTlNJVElWRTsKQEAgLTI0MSwxMiArMjQxLDEyIEBA
IHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgUmVuCiAgICAgYWRqdXN0TWVudUxpc3RTdHlsZShzdHlsZVJl
c29sdmVyLCBzdHlsZSwgZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxp
c3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRN
ZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25z
dCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBh
aW50TWVudUxpc3Qob2JqZWN0LCBpbmZvLCByZWN0KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEFyZWEoY29uc3Qg
UmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCiB7
CiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwogfQpAQCAtMjk4LDcgKzI5OCw3
IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzCiAgICAgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBj
b25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBh
aW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQobywgaSwgcmVjdCk7CiB9CkBAIC0z
MjYsMTIgKzMyNiwxMiBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLAogICAgIGFkanVzdFNlYXJj
aEZpZWxkSWNvblN0eWxlKHN0eWxlKTsKIH0KIAotc3RhdGljIEludFJlY3QgY2VudGVyUmVjdFZl
cnRpY2FsbHlJblBhcmVudElucHV0RWxlbWVudChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyBJbnRSZWN0IGNlbnRlclJlY3RWZXJ0aWNhbGx5
SW5QYXJlbnRJbnB1dEVsZW1lbnQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgLy8gR2V0IHRoZSByZW5kZXJlciBvZiA8aW5wdXQ+
IGVsZW1lbnQuCi0gICAgTm9kZSogaW5wdXQgPSByZW5kZXJPYmplY3QtPm5vZGUoKS0+c2hhZG93
SG9zdCgpOworICAgIE5vZGUqIGlucHV0ID0gcmVuZGVyT2JqZWN0Lm5vZGUoKS0+c2hhZG93SG9z
dCgpOwogICAgIGlmICghaW5wdXQpCi0gICAgICAgIGlucHV0ID0gcmVuZGVyT2JqZWN0LT5ub2Rl
KCk7CisgICAgICAgIGlucHV0ID0gcmVuZGVyT2JqZWN0Lm5vZGUoKTsKICAgICBpZiAoIWlucHV0
LT5yZW5kZXJlcigpLT5pc0JveCgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCkBAIC0z
NDYsMTYgKzM0NiwxNiBAQCBzdGF0aWMgSW50UmVjdCBjZW50ZXJSZWN0VmVydGljYWxseUluUGFy
ZW50SW5wdXRFbGVtZW50KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZQogICAgIHJldHVybiBzY2Fs
ZWRSZWN0OwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIEludFJlY3QgaWNvblJlY3QgPSBjZW50ZXJSZWN0VmVydGljYWxseUlu
UGFyZW50SW5wdXRFbGVtZW50KHJlbmRlck9iamVjdCwgcmVjdCk7CiAgICAgaWYgKGljb25SZWN0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR1JlZlB0cjxHZGtQaXhi
dWY+IGljb24gPSBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtf
U1RPQ0tfRklORCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkuZGlyZWN0
aW9uKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SWNvblNpemVGb3JQ
aXhlbFNpemUocmVjdC5oZWlnaHQoKSkpOworICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRl
ck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSwKKyAgICAgICAgZ3RrSWNvblN0YXRlKHRoaXMs
IHJlbmRlck9iamVjdCksCisgICAgICAgIGdldEljb25TaXplRm9yUGl4ZWxTaXplKHJlY3QuaGVp
Z2h0KCkpKTsKICAgICBwYWludEdka1BpeGJ1ZihwYWludEluZm8uY29udGV4dCwgaWNvbi5nZXQo
KSwgaWNvblJlY3QpOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTM2NSwxNiArMzY1LDE2IEBA
IHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0CiAgICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUo
c3R5bGUpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIElu
dFJlY3QgaWNvblJlY3QgPSBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50
KHJlbmRlck9iamVjdCwgcmVjdCk7CiAgICAgaWYgKGljb25SZWN0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24gPSBnZXRTdG9j
a0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tfQ0xFQVIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a1Rl
eHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLmRpcmVjdGlvbigpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrSWNvblN0
YXRlKHRoaXMsIHJlbmRlck9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdldEljb25TaXplRm9yUGl4ZWxTaXplKHJlY3QuaGVp
Z2h0KCkpKTsKKyAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5k
aXJlY3Rpb24oKSksCisgICAgICAgIGd0a0ljb25TdGF0ZSh0aGlzLCByZW5kZXJPYmplY3QpLAor
ICAgICAgICBnZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShyZWN0LmhlaWdodCgpKSk7CiAgICAgcGFp
bnRHZGtQaXhidWYocGFpbnRJbmZvLmNvbnRleHQsIGljb24uZ2V0KCksIGljb25SZWN0KTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CkBAIC0zODYsMTIgKzM4NiwxMiBAQCB2b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSog
c3R5bGUsCiAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5l
SGVpZ2h0KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1
cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcmVjdCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
ck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgLy8gVGhlIG90aGVyIHBhaW50IG1ldGhvZHMgZG9uJ3QgbmVlZCB0byBjaGVjayB3
aGV0aGVyIHBhaW50aW5nIGlzIGRpc2FibGVkIGJlY2F1c2UgUmVuZGVyVGhlbWUgYWxyZWFkeSBj
aGVja3MgaXQKICAgICAvLyBiZWZvcmUgY2FsbGluZyB0aGVtLCBidXQgcGFpbnRDYXBzTG9ja0lu
ZGljYXRvcigpIGlzIGNhbGxlZCBieSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUgd2hpY2gg
ZG9lc24ndCBjaGVjayBpdC4KQEAgLTM5OSw5ICszOTksNyBAQCBib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25z
dCBQYQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGludCBpY29uU2l6ZSA9IHN0ZDo6bWlu
KHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgR1JlZlB0cjxHZGtQaXhidWY+IGlj
b24gPSBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tf
Q0FQU19MT0NLX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgp
LmRpcmVjdGlvbigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgZ2V0SWNvblNpemVGb3JQaXhlbFNpemUoaWNvblNpemUpKTsKKyAg
ICBHUmVmUHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1RL
X1RZUEVfRU5UUlksIEdUS19TVE9DS19DQVBTX0xPQ0tfV0FSTklORywgZ3RrVGV4dERpcmVjdGlv
bihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSksIDAsIGdldEljb25TaXplRm9yUGl4
ZWxTaXplKGljb25TaXplKSk7CiAKICAgICAvLyBPbmx5IHJlLXNjYWxlIHRoZSBpY29uIHdoZW4g
aXQncyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gaWNvbiBzaXplLgogICAgIGlmIChpY29uU2l6
ZSA+PSBndGtJY29uU2l6ZU1lbnUpCkBAIC01MDUsMTMgKzUwMywxMyBAQCBTdHJpbmcgUmVuZGVy
VGhlbWVHdGs6OmV4dHJhRnVsbFNjcmVlblN0eWxlU2hlZXQoKQogfQogI2VuZGlmCiAKLWJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
Y2hhciogc3ltYm9saWNJY29uTmFtZSwgY29uc3QgY2hhciogZmFsbGJhY2tTdG9ja0ljb25OYW1l
KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUJ1dHRvbihjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlck9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBjaGFyKiBzeW1ib2xpY0ljb25OYW1lLCBjb25zdCBjaGFyKiBmYWxsYmFj
a1N0b2NrSWNvbk5hbWUpCiB7CiAgICAgSW50UmVjdCBpY29uUmVjdChyZWN0LngoKSArIChyZWN0
LndpZHRoKCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKICAgICAgICAgICAgICAgICAgICAgIHJl
Y3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKICAgICAgICAg
ICAgICAgICAgICAgIG1fbWVkaWFJY29uU2l6ZSwgbV9tZWRpYUljb25TaXplKTsKICAgICBHUmVm
UHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrU3ltYm9saWNJY29uRm9yV2lkZ2V0VHlwZShH
VEtfVFlQRV9DT05UQUlORVIsIHN5bWJvbGljSWNvbk5hbWUsIGZhbGxiYWNrU3RvY2tJY29uTmFt
ZSwKLSAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkuZGlyZWN0
aW9uKCkpLCBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwgaWNvblJlY3Qud2lkdGgo
KSk7CisgICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0
aW9uKCkpLCBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwgaWNvblJlY3Qud2lkdGgo
KSk7CiAgICAgcGFpbnRHZGtQaXhidWYoY29udGV4dCwgaWNvbi5nZXQoKSwgaWNvblJlY3QpOwog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTIxLDEyICs1MTksMTIgQEAgYm9vbCBSZW5kZXJUaGVt
ZUd0azo6aGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKENvbnRyb2xQYXJ0IHBhcnQpIGNv
bnN0CiAgICAgcmV0dXJuIChwYXJ0ICE9IE1lZGlhTXV0ZUJ1dHRvblBhcnQpOwogfQogCi1ib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3Qq
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24o
cmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwgInZpZXctZnVsbHNjcmVlbi1z
eW1ib2xpYyIsIEdUS19TVE9DS19GVUxMU0NSRUVOKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRNZWRpYU11dGVCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQog
ewogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IGdldE1lZGlhRWxlbWVudEZy
b21SZW5kZXJPYmplY3QocmVuZGVyT2JqZWN0KTsKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKQEAg
LTUzOCw5ICs1MzYsOSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhTXV0ZUJ1dHRv
bihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbgogICAgICAgICBtdXRlZCA/
ICJhdWRpby12b2x1bWUtbXV0ZWQiIDogImF1ZGlvLXZvbHVtZS1oaWdoIik7CiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
K2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFQbGF5QnV0dG9uKGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKLSAgICBOb2RlKiBub2RlID0gcmVuZGVyT2JqZWN0LT5ub2RlKCk7Cisg
ICAgTm9kZSogbm9kZSA9IHJlbmRlck9iamVjdC5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTU1MywyNiArNTUxLDI2IEBAIGJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBj
b25zdCBQYWluCiAgICAgICAgIHNob3dQbGF5QnV0dG9uID8gR1RLX1NUT0NLX01FRElBX1BMQVkg
OiBHVEtfU1RPQ0tfTUVESUFfUEFVU0UpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKICAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5j
b250ZXh0LCByZWN0LCAibWVkaWEtc2Vlay1iYWNrd2FyZC1zeW1ib2xpYyIsIEdUS19TVE9DS19N
RURJQV9SRVdJTkQpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2Vla0Zv
cndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAg
ICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0
LCByZWN0LCAibWVkaWEtc2Vlay1mb3J3YXJkLXN5bWJvbGljIiwgR1RLX1NUT0NLX01FRElBX0ZP
UldBUkQpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFUb2dnbGVDbG9zZWRDYXB0aW9uc0J1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgSW50UmVjdCBpY29uUmVjdChy
ZWN0LngoKSArIChyZWN0LndpZHRoKCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwgcmVjdC55KCkg
KyAocmVjdC5oZWlnaHQoKSAtIG1fbWVkaWFJY29uU2l6ZSkgLyAyLAogICAgICAgICBtX21lZGlh
SWNvblNpemUsIG1fbWVkaWFJY29uU2l6ZSk7CiAgICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24g
PSBnZXRTdG9ja1N5bWJvbGljSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZUEVfQ09OVEFJTkVSLCAi
bWVkaWEtdmlldy1zdWJ0aXRsZXMtc3ltYm9saWMiLCBudWxscHRyLAotICAgICAgICBndGtUZXh0
RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS5kaXJlY3Rpb24oKSksIGd0a0ljb25TdGF0
ZSh0aGlzLCByZW5kZXJPYmplY3QpLCBpY29uUmVjdC53aWR0aCgpKTsKKyAgICAgICAgZ3RrVGV4
dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSksIGd0a0ljb25TdGF0
ZSh0aGlzLCByZW5kZXJPYmplY3QpLCBpY29uUmVjdC53aWR0aCgpKTsKICAgICBpZiAoIWljb24p
CiAgICAgICAgIGljb24gPSBnZXRTdG9ja1N5bWJvbGljSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZ
UEVfQ09OVEFJTkVSLCAidXNlci1pbnZpc2libGUtc3ltYm9saWMiLCBHVEtfU1RPQ0tfSlVTVElG
WV9GSUxMLAotICAgICAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxl
KCkuZGlyZWN0aW9uKCkpLCBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwgaWNvblJl
Y3Qud2lkdGgoKSk7CisgICAgICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5z
dHlsZSgpLmRpcmVjdGlvbigpKSwgZ3RrSWNvblN0YXRlKHRoaXMsIHJlbmRlck9iamVjdCksIGlj
b25SZWN0LndpZHRoKCkpOwogICAgIHBhaW50R2RrUGl4YnVmKHBhaW50SW5mby5jb250ZXh0LCBp
Y29uLmdldCgpLCBpY29uUmVjdCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01ODcsOSArNTg1
LDkgQEAgc3RhdGljIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpIGJvcmRlclJhZGlpRnJvbVN0eWxl
KFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICAgICAgSW50U2l6ZShzdHlsZS0+Ym9yZGVyQm90dG9t
UmlnaHRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLT5ib3JkZXJCb3R0b21SaWdo
dFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dE1lZGlhU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQoKm8pOworICAgIEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudChvKTsKICAgICBpZiAoIW1lZGlh
RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01OTksNyArNTk3LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWkKIAogICAgIGZsb2F0IG1lZGlhRHVyYXRpb24gPSBtZWRpYUVs
ZW1lbnQtPmR1cmF0aW9uKCk7CiAgICAgZmxvYXQgdG90YWxUcmFja1dpZHRoID0gci53aWR0aCgp
OwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZvLT5zdHlsZSgpOworICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9ICZvLnN0eWxlKCk7CiAgICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMg
PSBtZWRpYUVsZW1lbnQtPmJ1ZmZlcmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgdGltZVJhbmdlcy0+bGVuZ3RoKCk7ICsraW5kZXgpIHsKICAgICAgICAgZmxvYXQg
c3RhcnQgPSB0aW1lUmFuZ2VzLT5zdGFydChpbmRleCwgSUdOT1JFX0VYQ0VQVElPTik7CkBAIC02
MjAsMjEgKzYxOCwyMSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJh
Y2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
Citib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoY29uc3QgUmVuZGVy
T2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikK
IHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmby0+c3R5bGUoKTsKKyAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSAmby5zdHlsZSgpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUm91bmRl
ZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChyLCBib3JkZXJSYWRpaUZyb21TdHlsZShzdHlsZSkpLCBz
dHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS0+Y29s
b3JTcGFjZSgpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlh
Vm9sdW1lU2xpZGVyQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQoKnJlbmRlck9iamVjdCk7CisgICAgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHJlbmRlck9iamVjdCk7CiAg
ICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC02NDgsNyAr
NjQ2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNr
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb24KIAogICAgIGludCByZWN0SGVpZ2h0ID0g
cmVjdC5oZWlnaHQoKTsKICAgICBmbG9hdCB0cmFja0hlaWdodCA9IHJlY3RIZWlnaHQgKiB2b2x1
bWU7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gJnJlbmRlck9iamVjdC0+c3R5bGUoKTsKKyAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmcmVuZGVyT2JqZWN0LnN0eWxlKCk7CiAgICAgSW50UmVj
dCB2b2x1bWVSZWN0KHJlY3QpOwogICAgIHZvbHVtZVJlY3QubW92ZSgwLCByZWN0SGVpZ2h0IC0g
dHJhY2tIZWlnaHQpOwogICAgIHZvbHVtZVJlY3Quc2V0SGVpZ2h0KGNlaWwodHJhY2tIZWlnaHQp
KTsKQEAgLTY2MCw3ICs2NTgsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9s
dW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbgogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRodW1iKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVk
aWFWb2x1bWVTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0
dXJuIHBhaW50TWVkaWFTbGlkZXJUaHVtYihyZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7
CiB9CkBAIC02NzAsNyArNjY4LDcgQEAgU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpmb3JtYXRNZWRp
YUNvbnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGQKICAgICByZXR1
cm4gZm9ybWF0TWVkaWFDb250cm9sc1RpbWUoY3VycmVudFRpbWUpICsgIiAvICIgKyBmb3JtYXRN
ZWRpYUNvbnRyb2xzVGltZShkdXJhdGlvbik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFDdXJyZW50VGltZShj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKIHsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC02OTYsMTMgKzY5NCwxMyBAQCBkb3VibGUgUmVuZGVy
VGhlbWVHdGs6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mq
KSBjb25zdAogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsICogcHJvZ3Jlc3NB
bmltYXRpb25GcmFtZXMgKiAyOyAvLyAiMiIgZm9yIGJhY2sgYW5kIGZvcnRoOwogfQogCi1JbnRS
ZWN0IFJlbmRlclRoZW1lR3RrOjpjYWxjdWxhdGVQcm9ncmVzc1JlY3QoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJPYmplY3QsIGNvbnN0IEludFJlY3QmIGZ1bGxCYXJSZWN0KQorSW50UmVjdCBSZW5kZXJU
aGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
T2JqZWN0LCBjb25zdCBJbnRSZWN0JiBmdWxsQmFyUmVjdCkKIHsKICAgICBJbnRSZWN0IHByb2dy
ZXNzUmVjdChmdWxsQmFyUmVjdCk7Ci0gICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNz
ID0gdG9SZW5kZXJQcm9ncmVzcyhyZW5kZXJPYmplY3QpOworICAgIGNvbnN0IFJlbmRlclByb2dy
ZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3MoJnJlbmRlck9iamVjdCk7CiAg
ICAgaWYgKHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCkpIHsKICAgICAgICAgaW50IHBy
b2dyZXNzV2lkdGggPSBwcm9ncmVzc1JlY3Qud2lkdGgoKSAqIHJlbmRlclByb2dyZXNzLT5wb3Np
dGlvbigpOwotICAgICAgICBpZiAocmVuZGVyT2JqZWN0LT5zdHlsZSgpLmRpcmVjdGlvbigpID09
IFJUTCkKKyAgICAgICAgaWYgKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpID09IFJU
TCkKICAgICAgICAgICAgIHByb2dyZXNzUmVjdC5zZXRYKHByb2dyZXNzUmVjdC54KCkgKyBwcm9n
cmVzc1JlY3Qud2lkdGgoKSAtIHByb2dyZXNzV2lkdGgpOwogICAgICAgICBwcm9ncmVzc1JlY3Qu
c2V0V2lkdGgocHJvZ3Jlc3NXaWR0aCk7CiAgICAgICAgIHJldHVybiBwcm9ncmVzc1JlY3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCmluZGV4IGIxNzA3
ZjRiMmQxMWIyZDI2NDc4ZTBjOGFhYWM1N2YxYWUxM2FiNDQuLjFjYTUwMjA1YzQxNmU4OWFlMTI0
OTMzNzlkZjUyM2M4NDQyYWRiZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9SZW5kZXJUaGVtZUd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0ay5oCkBAIC01MCwxNyArNTAsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAg
Ly8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0
aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCi0gICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBw
b3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBj
b250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKIAogICAgIC8v
IEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMgc3VwcG9y
dGVkIGF0IGFsbC4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3Qo
Y29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RS
ZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QmLCBJbnRSZWN0Jik7CiAKICAgICAvLyBBIG1l
dGhvZCB0byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIGZvciBhICJsZWFmIiBjb250cm9s
LiAgVGhpcyB3aWxsIG9ubHkgYmUgdXNlZCBpZiBhIGJhc2VsaW5lCiAgICAgLy8gcG9zaXRpb24g
Y2Fubm90IGJlIGRldGVybWluZWQgYnkgZXhhbWluaW5nIGNoaWxkIGNvbnRlbnQuIENoZWNrYm94
ZXMgYW5kIHJhZGlvIGJ1dHRvbnMgYXJlIGV4YW1wbGVzIG9mCiAgICAgLy8gY29udHJvbHMgdGhh
dCBuZWVkIHRvIGRvIHRoaXMuCi0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25z
dCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9u
KGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OwogCiAgICAgLy8gVGhlIHBsYXRmb3JtIHNlbGVj
dGlvbiBjb2xvci4KICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkgY29uc3Q7CkBAIC0xMTQsMTcgKzExNCwxNyBAQCBwdWJsaWM6CiAjZW5k
aWYKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXpl
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAg
IHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAg
ICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0OwogICAg
IGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Q7CkBAIC0x
MzcsMjUgKzEzNywyNSBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gd2UgZG9uJ3QgbWFpbnRhaW4gdGhp
cyBkaWZmZXJlbnRpYXRpb24uCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmly
dHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKQEAgLTE2NCwxOSArMTY0LDE5
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGluaXRNZWRpYUNvbG9ycygpOwogICAgIHZvaWQgaW5p
dE1lZGlhQnV0dG9ucygpOwogICAgIHZpcnR1YWwgYm9vbCBoYXNPd25EaXNhYmxlZFN0YXRlSGFu
ZGxpbmdGb3IoQ29udHJvbFBhcnQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlh
RnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0JhY2tCdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1i
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1
bGxzY3JlZW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYVNlZWtCYWNrQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtGb3J3YXJk
QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRyYWNrKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYVNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZv
bHVtZVNsaWRlckNvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlk
ZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFDdXJyZW50VGltZShjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24oY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogI2VuZGlmCiAj
ZW5kaWYKIApAQCAtMTg0LDEzICsxODQsMTMgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgZG91
YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mq
KSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNz
QmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dy
ZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9n
cmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9y
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVh
bCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmlu
ZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZvbnQmLCBpbnQg
d2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMjAw
LDExICsyMDAsMTEgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgZG91YmxlIGdldFNjcmVlbkRQSSgp
OwogCiAjaWYgRU5BQkxFKFZJREVPKQotICAgIGJvb2wgcGFpbnRNZWRpYUJ1dHRvbihSZW5kZXJP
YmplY3QqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgY2hhciogc3lt
Ym9saWNJY29uTmFtZSwgY29uc3QgY2hhciogZmFsbGJhY2tTdG9ja0ljb25OYW1lKTsKKyAgICBi
b29sIHBhaW50TWVkaWFCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNo
YXIqIGZhbGxiYWNrU3RvY2tJY29uTmFtZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQUk9HUkVT
U19FTEVNRU5UKQotICAgIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVByb2dyZXNzUmVjdChSZW5k
ZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRl
UHJvZ3Jlc3NSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRp
ZgogCiAgICAgbXV0YWJsZSBDb2xvciBtX3BhbmVsQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwCmluZGV4IGE5YjM4OGM4MmU4ZTVhODZl
NjliNTBjOTM3YzBkOWJjMTdmMWRlNmEuLmYyY2IyMDI5OWUzY2UwMGEyZGE4NjFjZGM0MGQzZmY0
MjllOTU2ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJU
aGVtZUd0azIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0azIuY3BwCkBAIC0xMTAsOSArMTEwLDkgQEAgc3RhdGljIHZvaWQgYWRqdXN0UmVjdEZvckZv
Y3VzKEd0a1dpZGdldCogd2lkZ2V0LCBJbnRSZWN0JiByZWN0LCBib29sIGlnbm9yZUludGUKICAg
ICByZWN0LmluZmxhdGUoZm9jdXNXaWR0aCArIGZvY3VzUGFkKTsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIEludFJlY3QmIHJlY3QpCit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RSZXBhaW50UmVj
dChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgSW50UmVjdCYgcmVjdCkKIHsKLSAg
ICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpLmFwcGVhcmFuY2UoKTsK
KyAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgp
OwogICAgIHN3aXRjaCAocGFydCkgewogICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgogICAgIGNhc2Ug
UmFkaW9QYXJ0OiB7CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRq
dXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEludFJlY3QK
ICAgICB9CiB9CiAKLXN0YXRpYyBHdGtTdGF0ZVR5cGUgZ2V0R3RrU3RhdGVUeXBlKFJlbmRlclRo
ZW1lR3RrKiB0aGVtZSwgUmVuZGVyT2JqZWN0KiBvYmplY3QpCitzdGF0aWMgR3RrU3RhdGVUeXBl
IGdldEd0a1N0YXRlVHlwZShSZW5kZXJUaGVtZUd0ayogdGhlbWUsIGNvbnN0IFJlbmRlck9iamVj
dCYgb2JqZWN0KQogewogICAgIGlmICghdGhlbWUtPmlzRW5hYmxlZChvYmplY3QpIHx8IHRoZW1l
LT5pc1JlYWRPbmx5Q29udHJvbChvYmplY3QpKQogICAgICAgICByZXR1cm4gR1RLX1NUQVRFX0lO
U0VOU0lUSVZFOwpAQCAtMTU2LDE0ICsxNTYsMTQgQEAgc3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6
ZShjb25zdCBSZW5kZXJUaGVtZUd0ayosIFJlbmRlclN0eWxlKiBzdHlsZSwgR3RrV2lkZ2V0Kgog
ICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOwog
fQogCi1zdGF0aWMgdm9pZCBwYWludFRvZ2dsZShSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJlbmRl
ck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0KQorc3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoUmVu
ZGVyVGhlbWVHdGsqIHRoZW1lLCBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdl
dCkKIHsKICAgICAvLyBXZSBkbyBub3QgY2FsbCBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfYWN0aXZl
IGhlcmUsIGJlY2F1c2Ugc29tZSB0aGVtZXMgYmVnaW4gYSBzZXJpZXMgb2YKICAgICAvLyBhbmlt
YXRpb24gZnJhbWVzIGluIGEgInRvZ2dsZWQiIHNpZ25hbCBoYW5kbGVyLiBUaGlzIHB1dHMgc29t
ZSBjaGVja2JveGVzIGluIGEgaGFsZi13YXkKICAgICAvLyBjaGVja2VkIHN0YXRlLiBFdmVyeSBH
VEsrIHRoZW1lIEkgdGVzdGVkIG1lcmVseSBsb29rcyBhdCB0aGUgc2hhZG93IHR5cGUgKGFuZCBu
b3QgdGhlCiAgICAgLy8gJ2FjdGl2ZScgcHJvcGVydHkpIHRvIGRldGVybWluZSB3aGV0aGVyIG9y
IG5vdCB0byBkcmF3IHRoZSBjaGVjay4KICAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUod2lk
Z2V0LCB0aGVtZS0+aXNFbmFibGVkKHJlbmRlck9iamVjdCkgJiYgIXRoZW1lLT5pc1JlYWRPbmx5
Q29udHJvbChyZW5kZXJPYmplY3QpKTsKLSAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lk
Z2V0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS5kaXJlY3Rpb24oKSkp
OworICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24o
cmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsKIAogICAgIGJvb2wgaW5kZXRlcm1p
bmF0ZSA9IHRoZW1lLT5pc0luZGV0ZXJtaW5hdGUocmVuZGVyT2JqZWN0KTsKICAgICBndGtfdG9n
Z2xlX2J1dHRvbl9zZXRfaW5jb25zaXN0ZW50KEdUS19UT0dHTEVfQlVUVE9OKHdpZGdldCksIGlu
ZGV0ZXJtaW5hdGUpOwpAQCAtMTk4LDcgKzE5OCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OnNl
dENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAgICAgc2V0VG9nZ2xlU2l6
ZSh0aGlzLCBzdHlsZSwgZ3RrQ2hlY2tCdXR0b24oKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBwYWludFRvZ2dsZSh0aGlz
LCByZW5kZXJPYmplY3QsIGluZm8sIHJlY3QsIGd0a0NoZWNrQnV0dG9uKCkpOwogICAgIHJldHVy
biBmYWxzZTsKQEAgLTIwOSw3ICsyMDksNyBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRp
b1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHNldFRvZ2dsZVNpemUodGhpcywg
c3R5bGUsIGd0a1JhZGlvQnV0dG9uKCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dFJhZGlvKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJhZGlvKGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcGFpbnRUb2dnbGUodGhpcywgcmVuZGVyT2JqZWN0
LCBpbmZvLCByZWN0LCBndGtSYWRpb0J1dHRvbigpKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0y
MjcsNyArMjI3LDcgQEAgc3RhdGljIHZvaWQgc2V0V2lkZ2V0SGFzRm9jdXMoR3RrV2lkZ2V0KiB3
aWRnZXQsIGdib29sZWFuIGhhc0ZvY3VzKQogICAgICAgICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdT
KHdpZGdldCwgR1RLX0hBU19GT0NVUyk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihjb25zdCBS
ZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjM4LDcgKzIzOCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGlu
Zm8sIGNvCiAKICAgICBHdGtTdGF0ZVR5cGUgc3RhdGUgPSBnZXRHdGtTdGF0ZVR5cGUodGhpcywg
b2JqZWN0KTsKICAgICBndGtfd2lkZ2V0X3NldF9zdGF0ZSh3aWRnZXQsIHN0YXRlKTsKLSAgICBn
dGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKG9iamVjdC0+
c3R5bGUoKS5kaXJlY3Rpb24oKSkpOworICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRn
ZXQsIGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsKIAogICAg
IGlmIChpc0ZvY3VzZWQob2JqZWN0KSkgewogICAgICAgICBzZXRXaWRnZXRIYXNGb2N1cyh3aWRn
ZXQsIFRSVUUpOwpAQCAtMzY1LDcgKzM2NSw3IEBAIGludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJ
bnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHJldHVy
biBib3R0b207CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0
JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
ICAgICBpZiAocGFpbnRCdXR0b24ob2JqZWN0LCBpbmZvLCByZWN0KSkKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0zNzgsNyArMzc4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51
TGlzdChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLAogCiAgICAg
aW50IGxlZnRCb3JkZXIgPSAwLCByaWdodEJvcmRlciA9IDAsIGJvdHRvbUJvcmRlciA9IDAsIHRv
cEJvcmRlciA9IDA7CiAgICAgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoZ3RrQ29tYm9Cb3hCdXR0b24o
KSwgbGVmdEJvcmRlciwgdG9wQm9yZGVyLCByaWdodEJvcmRlciwgYm90dG9tQm9yZGVyKTsKLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmb2JqZWN0LT5zdHlsZSgpOworICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9ICZvYmplY3Quc3R5bGUoKTsKICAgICBpbnQgYXJyb3dTaXplID0gY29tYm9Cb3hB
cnJvd1NpemUoc3R5bGUpOwogICAgIEd0a1N0eWxlKiBidXR0b25TdHlsZSA9IGd0a193aWRnZXRf
Z2V0X3N0eWxlKGd0a0NvbWJvQm94QnV0dG9uKCkpOwogCkBAIC00MjIsMTQgKzQyMiwxNCBAQCBi
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogb2JqZWN0LCBj
b25zdCBQYWludEluZm8mIGluZm8sCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBHdGtXaWRn
ZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7CiAKICAgICBib29sIGVuYWJsZWQgPSBpc0VuYWJsZWQo
cmVuZGVyT2JqZWN0KSAmJiAhaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KTsKICAgICBH
dGtTdGF0ZVR5cGUgYmFja2dyb3VuZFN0YXRlID0gZW5hYmxlZCA/IEdUS19TVEFURV9OT1JNQUwg
OiBHVEtfU1RBVEVfSU5TRU5TSVRJVkU7CiAgICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKHdp
ZGdldCwgZW5hYmxlZCk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3Rr
VGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsKKyAgICBn
dGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9i
amVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSk7CiAgICAgc2V0V2lkZ2V0SGFzRm9jdXMod2lkZ2V0
LCBpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSk7CiAKICAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0
IHdpZGdldENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0KTsKQEAgLTQ2NSwxMiArNDY1LDEyIEBA
IGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25z
dCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGluZm8uY29u
dGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBD
b250cm9sUGFydCBwYXJ0ID0gb2JqZWN0LT5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKKyAgICBDb250
cm9sUGFydCBwYXJ0ID0gb2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpOwogICAgIEFTU0VSVChw
YXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVmVydGljYWxQYXJ0
IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KTsKIAogICAgIC8vIFdlIHNocmluayB0
aGUgdHJvdWdoIHJlY3Qgc2xpZ2h0bHkgdG8gbWFrZSByb29tIGZvciB0aGUgZm9jdXMgaW5kaWNh
dG9yLgpAQCAtNDgzLDcgKzQ4Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVy
VHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mCiAgICAgICAg
IHdpZGdldCA9IGd0a1ZTY2FsZSgpOwogICAgICAgICB0cm91Z2hSZWN0LmluZmxhdGVZKC1ndGtf
d2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT55dGhpY2tuZXNzKTsKICAgICB9Ci0gICAgZ3RrX3dp
ZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihvYmplY3QtPnN0eWxl
KCkuZGlyZWN0aW9uKCkpKTsKKyAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBn
dGtUZXh0RGlyZWN0aW9uKG9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSk7CiAKICAgICBXaWRn
ZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0KTsKICAg
ICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KHRyb3VnaFJlY3QsIHdpZGdldCwgR1RLX1NUQVRF
X0FDVElWRSwgR1RLX1NIQURPV19PVVQsICJ0cm91Z2giKTsKQEAgLTQ5MywxMiArNDkzLDEyIEBA
IGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25z
dCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGluZm8uY29u
dGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBD
b250cm9sUGFydCBwYXJ0ID0gb2JqZWN0LT5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKKyAgICBDb250
cm9sUGFydCBwYXJ0ID0gb2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpOwogICAgIEFTU0VSVChw
YXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZl
cnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKIAogICAg
IEd0a1dpZGdldCogd2lkZ2V0ID0gMDsKQEAgLTUxMyw3ICs1MTMsNyBAQCBib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIGluZgogICAgICAgICBkZXRhaWwgPSAidnNjYWxlIjsKICAgICAgICAgb3JpZW50YXRp
b24gPSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUw7CiAgICAgfQotICAgIGd0a193aWRnZXRfc2V0
X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLmRpcmVj
dGlvbigpKSk7CisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERp
cmVjdGlvbihvYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwogCiAgICAgLy8gT25seSBzb21l
IHRoZW1lcyBoYXZlIHNsaWRlciB0aHVtYnMgcmVzcG9uZCB0byBjbGlja3MgYW5kIHNvbWUgZG9u
J3QuIFRoaXMgaW5mb3JtYXRpb24gaXMKICAgICAvLyBnYXRoZXJlZCB2aWEgdGhlICdhY3RpdmF0
ZS1zbGlkZXInIHByb3BlcnR5LCBidXQgaXQncyBkZXByZWNhdGVkIGluIEdUSysgMi4yMiBhbmQg
cmVtb3ZlZCBpbgpAQCAtNTQ5LDEwICs1NDksMTAgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRq
dXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB9
CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgR3RrV2lk
Z2V0KiB3aWRnZXQgPSBndGtQcm9ncmVzc0JhcigpOwotICAgIGd0a193aWRnZXRfc2V0X2RpcmVj
dGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLmRpcmVj
dGlvbigpKSk7CisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERp
cmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwogCiAgICAgV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KHBhaW50SW5mby5jb250ZXh0LCByZWN0KTsK
ICAgICBJbnRSZWN0IGZ1bGxQcm9ncmVzc0JhclJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkp
OwpAQCAtNTg2LDcgKzU4Niw3IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3Bp
bkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5CiAgICAgc3R5bGUt
PnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogewogICAgIC8vIFdlIGV4cGFuZCB0aGUgcGFpbnRlZCBhcmVhIGJ5IDIgcGl4ZWxzIG9uIHRo
ZSB0b3AgYW5kIGJvdHRvbSBhbmQgMiBwaXhlbHMgb24gdGhlIHJpZ2h0LiBUaGlzCiAgICAgLy8g
aXMgYmVjYXVzZSBHVEsrIHRoZW1lcyB3YW50IHRvIGRyYXcgb3ZlciB0aGUgdGV4dCBib3ggYm9y
ZGVycywgYnV0IFdlYkNvcmUgcmVuZGVycyB0aGUgaW5uZXIKQEAgLTU5Nyw3ICs1OTcsNyBAQCBi
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqIHJl
bmRlck9iamVjdCwgY29uc3QgUGFpbgogCiAgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRn
ZXRDb250ZXh0KHBhaW50SW5mby5jb250ZXh0LCBleHBhbmRlZFJlY3QpOwogICAgIEd0a1dpZGdl
dCogd2lkZ2V0ID0gZ3RrU3BpbkJ1dHRvbigpOwotICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlv
bih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLmRpcmVjdGlv
bigpKSk7CisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVj
dGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwogCiAgICAgSW50UmVjdCBm
dWxsU3BpbkJ1dHRvblJlY3QoSW50UG9pbnQoKSwgZXhwYW5kZWRSZWN0LnNpemUoKSk7CiAgICAg
d2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChmdWxsU3BpbkJ1dHRvblJlY3QsIHdpZGdldCwgR1RL
X1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19JTiwgInNwaW5idXR0b24iKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKaW5kZXggZDczZjZjNGEw
YWI2M2ZlZGE3Y2QwOTM2ZTc3ZjJlZjc1NjRmNDFiNi4uZTRhMzZlMjlkZWZlZThkNzNhN2M5NzI0
ZDM0NjY3NDE3NjY1NTA2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1JlbmRlclRoZW1lR3RrMy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR3RrMy5jcHAKQEAgLTE1NywxMSArMTU3LDExIEBAIHN0YXRpYyB2b2lkIGFkanVz
dFJlY3RGb3JGb2N1cyhHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIEludFJlY3QmIHJlY3QpCiAg
ICAgcmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVHdGs6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0LCBJbnRSZWN0JiByZWN0KQordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UmVwYWludFJl
Y3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIEludFJlY3QmIHJlY3QpCiB7CiAg
ICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gMDsKICAgICBib29sIGNoZWNrSW50ZXJpb3JG
b2N1cyA9IGZhbHNlOwotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSByZW5kZXJPYmplY3QtPnN0eWxl
KCkuYXBwZWFyYW5jZSgpOworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSByZW5kZXJPYmplY3Quc3R5
bGUoKS5hcHBlYXJhbmNlKCk7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgY2FzZSBDaGVja2Jv
eFBhcnQ6CiAgICAgY2FzZSBSYWRpb1BhcnQ6CkBAIC0yMjAsNyArMjIwLDcgQEAgc3RhdGljIHZv
aWQgc2V0VG9nZ2xlU2l6ZShHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRlclN0eWxlKiBz
dHlsZSkKICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4
ZWQpKTsKIH0KIAotc3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoY29uc3QgUmVuZGVyVGhlbWVHdGsq
IHRoZW1lLCBHVHlwZSB3aWRnZXRUeXBlLCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIGZ1bGxSZWN0KQorc3RhdGlj
IHZvaWQgcGFpbnRUb2dnbGUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBHVHlwZSB3aWRn
ZXRUeXBlLCBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIGZ1bGxSZWN0KQogewogICAgIEd0a1N0eWxlQ29u
dGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dCh3aWRnZXRUeXBlKTsKICAgICBndGtfc3R5
bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwpAQCAtMjQyLDcgKzI0Miw3IEBAIHN0YXRpYyB2b2lk
IHBhaW50VG9nZ2xlKGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgR1R5cGUgd2lkZ2V0VHlw
ZSwgUmVuZGVyT2JqCiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGluZGljYXRvclNpemUpOyAvLyBJ
biBjYXNlIHJlY3QuaGVpZ2h0KCkgd2FzIGVxdWFsIHRvIGluZGljYXRvclNpemUgKyAxLgogICAg
IH0KIAotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGlj
X2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0
eWxlKCkuZGlyZWN0aW9uKCkpKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlv
bihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9u
KHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSkpOwogICAgIGd0a19zdHlsZV9jb250
ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCB3aWRnZXRUeXBlID09IEdUS19UWVBFX0NIRUNLX0JVVFRP
TiA/IEdUS19TVFlMRV9DTEFTU19DSEVDSyA6IEdUS19TVFlMRV9DTEFTU19SQURJTyk7CiAKICAg
ICBndWludCBmbGFncyA9IDA7CkBAIC0yODAsNyArMjgwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUd0
azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAgICBzZXRUb2dn
bGVTaXplKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9DSEVDS19CVVRUT04pLCBzdHlsZSk7CiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7CiAgICAgcGFpbnRUb2dnbGUodGhpcywgR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OLCBy
ZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjkx
LDEzICsyOTEsMTMgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKICAgICBzZXRUb2dnbGVTaXplKGdldFN0eWxlQ29udGV4dChHVEtf
VFlQRV9SQURJT19CVVRUT04pLCBzdHlsZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50UmFkaW8oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRS
YWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcGFpbnRUb2dnbGUodGhpcywg
R1RLX1RZUEVfUkFESU9fQlVUVE9OLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCByZW5kZXJCdXR0b24oUmVuZGVyVGhl
bWUqIHRoZW1lLCBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3N0YXRpYyB2b2lkIHJlbmRlckJ1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1N0eWxlQ29u
dGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEludFJlY3Qg
YnV0dG9uUmVjdChyZWN0KTsKIApAQCAtMzYzLDEyICszNjMsMTIgQEAgc3RhdGljIHZvaWQgcmVu
ZGVyQnV0dG9uKFJlbmRlclRoZW1lKiB0aGVtZSwgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBS
ZW5kZXJPYmoKICAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LCBwYWludEluZm8uY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25SZWN0
LnkoKSwgYnV0dG9uUmVjdC53aWR0aCgpLCBidXR0b25SZWN0LmhlaWdodCgpKTsKICAgICB9CiB9
Ci1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiti
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
ck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19U
WVBFX0JVVFRPTik7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKIAotICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3Rr
VGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkuZGly
ZWN0aW9uKCkpKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9i
amVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSkpOwogICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9j
bGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKIAogICAgIHJlbmRlckJ1dHRv
bih0aGlzLCBjb250ZXh0LCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CkBAIC00NjQs
MTAgKzQ2NCwxMCBAQCBpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90
dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAgICByZXR1cm4gYm9yZGVyV2lkdGguYm90
dG9tICsgZm9jdXNXaWR0aDsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlz
dChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0
KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBjYWlyb190KiBjYWlyb0NvbnRleHQg
PSBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7Ci0gICAgR3RrVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtU
ZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS5kaXJlY3Rpb24oKSkpOworICAgIEd0
a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4o
Z3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwogCiAg
ICAgLy8gUGFpbnQgdGhlIGJ1dHRvbi4KICAgICBHdGtTdHlsZUNvbnRleHQqIGJ1dHRvblN0eWxl
Q29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pOwpAQCAtNTk1LDEyICs1
OTUsMTIgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3Qq
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJgogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBy
ZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewogICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChH
VEtfVFlQRV9FTlRSWSk7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKIAot
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8
R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCku
ZGlyZWN0aW9uKCkpKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250
ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRl
ck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSkpOwogICAgIGd0a19zdHlsZV9jb250ZXh0X2Fk
ZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfRU5UUlkpOwogCiAgICAgZ3VpbnQgZmxh
Z3MgPSAwOwpAQCAtNjQzLDE1ICs2NDMsMTUgQEAgc3RhdGljIHZvaWQgYXBwbHlTbGlkZXJTdHls
ZUNvbnRleHRDbGFzc2VzKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgQ29udHJvbFBhcnQKICAg
ICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFT
U19WRVJUSUNBTCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVHJhY2so
UmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUcmFj
ayhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IHJl
bmRlck9iamVjdC0+c3R5bGUoKS5hcHBlYXJhbmNlKCk7CisgICAgQ29udHJvbFBhcnQgcGFydCA9
IHJlbmRlck9iamVjdC5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKICAgICBBU1NFUlRfVU5VU0VEKHBh
cnQsIHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJWZXJ0aWNh
bFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpOwogCiAgICAgR3RrU3R5bGVD
b250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKTsKICAgICBn
dGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwogCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
c2V0X2RpcmVjdGlvbihjb250ZXh0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5
bGUoKS5kaXJlY3Rpb24oKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24o
Y29udGV4dCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24o
KSkpOwogICAgIGFwcGx5U2xpZGVyU3R5bGVDb250ZXh0Q2xhc3Nlcyhjb250ZXh0LCBwYXJ0KTsK
ICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNT
X1RST1VHSCk7CiAKQEAgLTY3OCwxNSArNjc4LDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRl
clRodW1iKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xp
ZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIENvbnRyb2xQYXJ0IHBh
cnQgPSByZW5kZXJPYmplY3QtPnN0eWxlKCkuYXBwZWFyYW5jZSgpOworICAgIENvbnRyb2xQYXJ0
IHBhcnQgPSByZW5kZXJPYmplY3Quc3R5bGUoKS5hcHBlYXJhbmNlKCk7CiAgICAgQVNTRVJUKHBh
cnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVy
dGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwogCiAgICAg
R3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxF
KTsKICAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwogCi0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9i
amVjdC0+c3R5bGUoKS5kaXJlY3Rpb24oKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9k
aXJlY3Rpb24oY29udGV4dCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5k
aXJlY3Rpb24oKSkpOwogICAgIGFwcGx5U2xpZGVyU3R5bGVDb250ZXh0Q2xhc3Nlcyhjb250ZXh0
LCBwYXJ0KTsKICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NU
WUxFX0NMQVNTX1NMSURFUik7CiAKQEAgLTcyOSw5ICs3MjksOSBAQCB2b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKIH0KIAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAg
ICBpZiAoIXJlbmRlck9iamVjdC0+aXNQcm9ncmVzcygpKQorICAgIGlmICghcmVuZGVyT2JqZWN0
LmlzUHJvZ3Jlc3MoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBHdGtTdHlsZUNvbnRl
eHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfUFJPR1JFU1NfQkFSKTsKQEAg
LTc4Niw3ICs3ODYsNyBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eQogICAgIHN0eWxlLT5zZXRN
aW5XaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhaW50U3Bp
bkFycm93QnV0dG9uKFJlbmRlclRoZW1lKiB0aGVtZSwgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0
LCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a0Fycm93VHlwZSBhcnJvd1R5cGUpCitzdGF0aWMgdm9p
ZCBwYWludFNwaW5BcnJvd0J1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1N0eWxlQ29udGV4
dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtBcnJvd1R5cGUgYXJyb3dU
eXBlKQogewogICAgIEFTU0VSVChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQIHx8IGFycm93VHlw
ZSA9PSBHVEtfQVJST1dfRE9XTik7CiAKQEAgLTg1MiwxMiArODUyLDEyIEBAIHN0YXRpYyB2b2lk
IHBhaW50U3BpbkFycm93QnV0dG9uKFJlbmRlclRoZW1lKiB0aGVtZSwgR3RrU3R5bGVDb250ZXh0
KiBjb250ZXh0LCBSCiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKIH0K
IAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0
KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdl
dFN0eWxlQ29udGV4dChHVEtfVFlQRV9TUElOX0JVVFRPTik7CiAgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2F2ZShjb250ZXh0KTsKIAotICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3Rh
dGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Qt
PnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsKKyAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9
IHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2Jq
ZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsKICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGly
ZWN0aW9uKGNvbnRleHQsIGRpcmVjdGlvbik7CiAKICAgICBndWludCBmbGFncyA9IDA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBkZDVjNDAwYWVhMjE0ZmYy
MGM5MDE4ZDI0YmEyMzlkNWY2ZjVkNGZhLi41MDY2YWVjYzE1Y2JjYWU0NmY4OGUxZTg1YjU5MTA0
MmI4NzcxOTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAg
LTE0MzgsNyArMTQzOCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZFZpc3VhbE92ZXJmbG93RnJv
bVRoZW1lKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBw
aXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0KCk7Ci0gICAgdGhlbWUoKS5hZGp1c3RSZXBhaW50UmVj
dCh0aGlzLCBpbmZsYXRlZFJlY3QpOworICAgIHRoZW1lKCkuYWRqdXN0UmVwYWludFJlY3QoKnRo
aXMsIGluZmxhdGVkUmVjdCk7CiAgICAgYWRkVmlzdWFsT3ZlcmZsb3coaW5mbGF0ZWRSZWN0KTsK
IAogICAgIGlmIChSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRh
aW5pbmdCbG9jaygpKQpAQCAtNDI5NCw3ICs0Mjk0LDcgQEAgaW50IFJlbmRlckJsb2NrOjpiYXNl
bGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGJvb2wgZmlyc3RMaW5lLCBM
aW4KICAgICAgICAgLy8gaXMgdHVybmVkIG9mZiwgY2hlY2tib3hlcy9yYWRpb3Mgd2lsbCBzdGls
bCBoYXZlIGRlY2VudCBiYXNlbGluZXMuCiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIHBhdGNo
IGZvcm0gY29udHJvbHMgdG8gZGVhbCB3aXRoIHZlcnRpY2FsIGxpbmVzLgogICAgICAgICBpZiAo
c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkgJiYgIXRoZW1lKCkuaXNDb250cm9sQ29udGFpbmVyKHN0
eWxlKCkuYXBwZWFyYW5jZSgpKSkKLSAgICAgICAgICAgIHJldHVybiB0aGVtZSgpLmJhc2VsaW5l
UG9zaXRpb24odGhpcyk7CisgICAgICAgICAgICByZXR1cm4gdGhlbWUoKS5iYXNlbGluZVBvc2l0
aW9uKCp0aGlzKTsKICAgICAgICAgICAgIAogICAgICAgICAvLyBDU1MyLjEgc3RhdGVzIHRoYXQg
dGhlIGJhc2VsaW5lIG9mIGFuIGlubGluZSBibG9jayBpcyB0aGUgYmFzZWxpbmUgb2YgdGhlIGxh
c3QgbGluZSBib3ggaW4KICAgICAgICAgLy8gdGhlIG5vcm1hbCBmbG93LiAgV2UgbWFrZSBhbiBl
eGNlcHRpb24gZm9yIG1hcnF1ZWVzLCBzaW5jZSB0aGVpciBiYXNlbGluZXMgYXJlIG1lYW5pbmds
ZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGI3ZTNkY2IyNjQy
NGE0ZDY0YjNkNjgxMjE4MTRiMjU0NDg4MTA5NjQuLjYzYTI4ZDMxOGZlOWI0MTIwMmZiNmFkMGQx
NTYzY2U5ZWI4ZmNiYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBA
IC0xMjI3LDcgKzEyMjcsNyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaQogICAgICAgICB9CiAg
ICAgfQogCi0gICAgYm9vbCB0aGVtZVBhaW50ZWQgPSBzdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAm
JiAhdGhlbWUoKS5wYWludCh0aGlzLCBjb250cm9sU3RhdGVzLCBwYWludEluZm8sIHNuYXBwZWRQ
YWludFJlY3QpOworICAgIGJvb2wgdGhlbWVQYWludGVkID0gc3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkgJiYgIXRoZW1lKCkucGFpbnQoKnRoaXMsIGNvbnRyb2xTdGF0ZXMsIHBhaW50SW5mbywgc25h
cHBlZFBhaW50UmVjdCk7CiAKICAgICBpZiAoY29udHJvbFN0YXRlcyAmJiBjb250cm9sU3RhdGVz
LT5uZWVkc1JlcGFpbnQoKSkKICAgICAgICAgbV9yZXBhaW50VGltZXIuc3RhcnRPbmVTaG90KDAp
OwpAQCAtMTIzOSwxMiArMTIzOSwxMiBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0
aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaQogICAgICAg
ICBwYWludEJhY2tncm91bmQocGFpbnRJbmZvLCBwYWludFJlY3QsIGJsZWVkQXZvaWRhbmNlKTsK
IAogICAgICAgICBpZiAoc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICB0aGVt
ZSgpLnBhaW50RGVjb3JhdGlvbnModGhpcywgcGFpbnRJbmZvLCBzbmFwcGVkUGFpbnRSZWN0KTsK
KyAgICAgICAgICAgIHRoZW1lKCkucGFpbnREZWNvcmF0aW9ucygqdGhpcywgcGFpbnRJbmZvLCBz
bmFwcGVkUGFpbnRSZWN0KTsKICAgICB9CiAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLCBw
YWludFJlY3QsIHN0eWxlKCksIEluc2V0KTsKIAogICAgIC8vIFRoZSB0aGVtZSB3aWxsIHRlbGwg
dXMgd2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGFsc28gcGFpbnQgdGhlIENTUyBib3JkZXIuCi0g
ICAgaWYgKGJsZWVkQXZvaWRhbmNlICE9IEJhY2tncm91bmRCbGVlZEJhY2tncm91bmRPdmVyQm9y
ZGVyICYmICghc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkgfHwgKCF0aGVtZVBhaW50ZWQgJiYgdGhl
bWUoKS5wYWludEJvcmRlck9ubHkodGhpcywgcGFpbnRJbmZvLCBzbmFwcGVkUGFpbnRSZWN0KSkp
ICYmIHN0eWxlKCkuaGFzQm9yZGVyKCkpCisgICAgaWYgKGJsZWVkQXZvaWRhbmNlICE9IEJhY2tn
cm91bmRCbGVlZEJhY2tncm91bmRPdmVyQm9yZGVyICYmICghc3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkgfHwgKCF0aGVtZVBhaW50ZWQgJiYgdGhlbWUoKS5wYWludEJvcmRlck9ubHkoKnRoaXMsIHBh
aW50SW5mbywgc25hcHBlZFBhaW50UmVjdCkpKSAmJiBzdHlsZSgpLmhhc0JvcmRlcigpKQogICAg
ICAgICBwYWludEJvcmRlcihwYWludEluZm8sIHBhaW50UmVjdCwgc3R5bGUoKSwgYmxlZWRBdm9p
ZGFuY2UpOwogCiAgICAgaWYgKGJsZWVkQXZvaWRhbmNlID09IEJhY2tncm91bmRCbGVlZFVzZVRy
YW5zcGFyZW5jeUxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJ1dHRvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNw
cAppbmRleCA3MzcyZGQwM2FjNzFjMTI2YTg2ZTMxMDFlYzc5NzQwZjMwYWM3YzIzLi44ZmM4MzMw
OTE4NjdhZDFmMGFhNGE5MWZlMzJhYTQyMjA1Yjg3NjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQnV0dG9uLmNwcApAQCAtMTEyLDEyICsxMTIsMTIgQEAgdm9pZCBSZW5kZXJC
dXR0b246OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3QKICAgICBpZiAobV9pbm5lcikgLy8gUmVuZGVyQmxvY2sgaGFuZGxlZCB1cGRh
dGluZyB0aGUgYW5vbnltb3VzIGJsb2NrJ3Mgc3R5bGUuCiAgICAgICAgIHNldHVwSW5uZXJTdHls
ZSgmbV9pbm5lci0+c3R5bGUoKSk7CiAKLSAgICBpZiAoIW1fZGVmYXVsdCAmJiB0aGVtZSgpLmlz
RGVmYXVsdCh0aGlzKSkgeworICAgIGlmICghbV9kZWZhdWx0ICYmIHRoZW1lKCkuaXNEZWZhdWx0
KCp0aGlzKSkgewogICAgICAgICBpZiAoIW1fdGltZXIpCiAgICAgICAgICAgICBtX3RpbWVyID0g
c3RkOjptYWtlX3VuaXF1ZTxUaW1lcjxSZW5kZXJCdXR0b24+Pih0aGlzLCAmUmVuZGVyQnV0dG9u
Ojp0aW1lckZpcmVkKTsKICAgICAgICAgbV90aW1lci0+c3RhcnRSZXBlYXRpbmcoMC4wMyk7CiAg
ICAgICAgIG1fZGVmYXVsdCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChtX2RlZmF1bHQgJiYgIXRo
ZW1lKCkuaXNEZWZhdWx0KHRoaXMpKSB7CisgICAgfSBlbHNlIGlmIChtX2RlZmF1bHQgJiYgIXRo
ZW1lKCkuaXNEZWZhdWx0KCp0aGlzKSkgewogICAgICAgICBtX2RlZmF1bHQgPSBmYWxzZTsKICAg
ICAgICAgbV90aW1lciA9IG51bGxwdHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKaW5kZXggNzY4ZDE4OWY1ZTRi
MTYxZDYzYmQ4OWYxZDg5MmJhYTQ3OTQ1ZmNlNy4uZTNlOWE5ZTA3YTUyYjM2NDE2OGYwMmYwYjc1
MWEzNTM0NmEyMzMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZpbGVVcGxvYWRDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW4KICAgICAgICAgICAgICAgICAvLyBEcmF3IHRoZSBmaWxlIGljb24gYW5kIGRl
Y29yYXRpb25zLgogICAgICAgICAgICAgICAgIEludFJlY3QgaWNvblJlY3QoaWNvblgsIGljb25Z
LCBpY29uV2lkdGgsIGljb25IZWlnaHQpOwogICAgICAgICAgICAgICAgIFJlbmRlclRoZW1lOjpG
aWxlVXBsb2FkRGVjb3JhdGlvbnMgZGVjb3JhdGlvbnNUeXBlID0gaW5wdXRFbGVtZW50KCkuZmls
ZXMoKS0+bGVuZ3RoKCkgPT0gMSA/IFJlbmRlclRoZW1lOjpTaW5nbGVGaWxlIDogUmVuZGVyVGhl
bWU6Ok11bHRpcGxlRmlsZXM7Ci0gICAgICAgICAgICAgICAgdGhlbWUoKS5wYWludEZpbGVVcGxv
YWRJY29uRGVjb3JhdGlvbnModGhpcywgYnV0dG9uUmVuZGVyZXIsIHBhaW50SW5mbywgaWNvblJl
Y3QsIGlucHV0RWxlbWVudCgpLmljb24oKSwgZGVjb3JhdGlvbnNUeXBlKTsKKyAgICAgICAgICAg
ICAgICB0aGVtZSgpLnBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucygqdGhpcywgKmJ1dHRv
blJlbmRlcmVyLCBwYWludEluZm8sIGljb25SZWN0LCBpbnB1dEVsZW1lbnQoKS5pY29uKCksIGRl
Y29yYXRpb25zVHlwZSk7CiAgICAgICAgICAgICB9CiAjZWxzZQogICAgICAgICAgICAgLy8gRHJh
dyB0aGUgZmlsZSBpY29uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1Ro
cmVhZC5jcHAKaW5kZXggY2Y5NGQ1ZTRiNzNkYzU0MTY2MGQ1ZWY1MWE1NWNmNWU1YTQ5ZDNmZC4u
MTU5NjgyMTZmMGM1OGU3YzM2YzkzN2UzYzgzMTNkYWQ4MTRjZjg0OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcApAQCAtMTI4NSw3ICsxMjg1LDcg
QEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdpb25zVmlzdWFsT3ZlcmZsb3dGcm9tVGhl
bWUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2MKICAgICAgICAgYm9yZGVyQm94ID0gcmVnaW9uLT5y
ZWN0Rmxvd1BvcnRpb25Gb3JCb3goYmxvY2ssIGJvcmRlckJveCk7CiAKICAgICAgICAgSW50UmVj
dCBpbmZsYXRlZFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGJvcmRlckJveCk7Ci0gICAgICAg
IGJsb2NrLT50aGVtZSgpLmFkanVzdFJlcGFpbnRSZWN0KGJsb2NrLCBpbmZsYXRlZFJlY3QpOwor
ICAgICAgICBibG9jay0+dGhlbWUoKS5hZGp1c3RSZXBhaW50UmVjdCgqYmxvY2ssIGluZmxhdGVk
UmVjdCk7CiAKICAgICAgICAgcmVnaW9uLT5hZGRWaXN1YWxPdmVyZmxvd0ZvckJveChibG9jaywg
aW5mbGF0ZWRSZWN0KTsKICAgICAgICAgaWYgKHJlZ2lvbiA9PSBlbmRSZWdpb24pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAKaW5kZXggY2Fm
ZDBjMGU3Y2RkMzBlOGZiMjZmNmZiNTMxOTg3MTZiZjhmOWI5NS4uYzBjMmQzOTQ5NzA3ZDlmMjll
ZmQ2MGQzYTgyMWU1OWFkZTAxMDMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcApAQCAtNzAsMTAgKzcwLDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENHKQogCi1zdGF0aWMgV0tNZWRp
YUNvbnRyb2xsZXJUaGVtZVN0YXRlIGRldGVybWluZVN0YXRlKFJlbmRlck9iamVjdCogbykKK3N0
YXRpYyBXS01lZGlhQ29udHJvbGxlclRoZW1lU3RhdGUgZGV0ZXJtaW5lU3RhdGUoY29uc3QgUmVu
ZGVyT2JqZWN0JiBvKQogewogICAgIGludCByZXN1bHQgPSAwOwotICAgIGNvbnN0IFJlbmRlclRo
ZW1lJiB0aGVtZSA9IG8tPnRoZW1lKCk7CisgICAgY29uc3QgUmVuZGVyVGhlbWUmIHRoZW1lID0g
by50aGVtZSgpOwogICAgIGlmICghdGhlbWUuaXNFbmFibGVkKG8pIHx8IHRoZW1lLmlzUmVhZE9u
bHlDb250cm9sKG8pKQogICAgICAgICByZXN1bHQgfD0gV0tNZWRpYUNvbnRyb2xsZXJGbGFnRGlz
YWJsZWQ7CiAgICAgaWYgKHRoZW1lLmlzUHJlc3NlZChvKSkKQEAgLTg0LDkgKzg0LDkgQEAgc3Rh
dGljIFdLTWVkaWFDb250cm9sbGVyVGhlbWVTdGF0ZSBkZXRlcm1pbmVTdGF0ZShSZW5kZXJPYmpl
Y3QqIG8pCiB9CiAKIC8vIFV0aWxpdHkgdG8gc2NhbGUgd2hlbiB0aGUgVUkgcGFydCBhcmUgbm90
IHNjYWxlZCBieSB3a0RyYXdNZWRpYVVJUGFydAotc3RhdGljIEZsb2F0UmVjdCBnZXRVbnpvb21l
ZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZvcmlnaW5hbFJlY3QpCitzdGF0aWMgRmxv
YXRSZWN0IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QgJm9y
aWdpbmFsUmVjdCkKIHsKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLmVmZmVjdGl2
ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgp
OwogICAgIEZsb2F0UmVjdCB1bnpvb21lZFJlY3Qob3JpZ2luYWxSZWN0KTsKICAgICBpZiAoem9v
bUxldmVsICE9IDEuMGYpIHsKICAgICAgICAgdW56b29tZWRSZWN0LnNldFdpZHRoKHVuem9vbWVk
UmVjdC53aWR0aCgpIC8gem9vbUxldmVsKTsKQEAgLTEyNiwzNSArMTI2LDM1IEBAIHZvaWQgUmVu
ZGVyTWVkaWFDb250cm9sczo6YWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUq
IHN0eWxlKQogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2l6
ZS5oZWlnaHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlck1lZGlhQ29u
dHJvbHM6OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUgcGFy
dCwgUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcikKK2Jvb2wgUmVuZGVyTWVkaWFDb250cm9sczo6cGFpbnRNZWRpYUNvbnRyb2xzUGFy
dChNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBwYXJ0LCBjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogCiAg
ICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgY2FzZSBNZWRpYUVudGVyRnVsbHNjcmVlbkJ1dHRvbjoK
ICAgICBjYXNlIE1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b246Ci0gICAgICAgIGlmIChNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250
cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQqPihvLT5ub2RlKCkpKSB7CisgICAgICAgIGlmIChN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8TWVk
aWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQqPihvLm5vZGUoKSkpIHsKICAgICAgICAg
ICAgIGJvb2wgZW50ZXJCdXR0b24gPSBidG4tPmRpc3BsYXlUeXBlKCkgPT0gTWVkaWFFbnRlckZ1
bGxzY3JlZW5CdXR0b247CiAgICAgICAgICAgICB3a0RyYXdNZWRpYVVJUGFydChlbnRlckJ1dHRv
biA/IFdLTWVkaWFVSVBhcnRGdWxsc2NyZWVuQnV0dG9uIDogV0tNZWRpYVVJUGFydEV4aXRGdWxs
c2NyZWVuQnV0dG9uLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGRl
dGVybWluZVN0YXRlKG8pKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIE1l
ZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uOgogICAgIGNhc2UgTWVkaWFIaWRlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b246Ci0gICAgICAgIGlmIChNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9u
c0J1dHRvbkVsZW1lbnQqIGJ0biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbFRvZ2dsZUNsb3Nl
ZENhcHRpb25zQnV0dG9uRWxlbWVudCo+KG8tPm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKE1lZGlh
Q29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nh
c3Q8TWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50Kj4oby5ub2Rl
KCkpKSB7CiAgICAgICAgICAgICBib29sIGNhcHRpb25zVmlzaWJsZSA9IGJ0bi0+ZGlzcGxheVR5
cGUoKSA9PSBNZWRpYUhpZGVDbG9zZWRDYXB0aW9uc0J1dHRvbjsKICAgICAgICAgICAgIHdrRHJh
d01lZGlhVUlQYXJ0KGNhcHRpb25zVmlzaWJsZSA/IFdLTWVkaWFVSVBhcnRIaWRlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b24gOiBXS01lZGlhVUlQYXJ0U2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uLCBwYWlu
dEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGRldGVybWluZVN0YXRlKG8pKTsK
ICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhTXV0ZUJ1dHRvbjoKICAg
ICBjYXNlIE1lZGlhVW5NdXRlQnV0dG9uOgotICAgICAgICBpZiAoTWVkaWFDb250cm9sTXV0ZUJ1
dHRvbkVsZW1lbnQqIGJ0biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVt
ZW50Kj4oby0+bm9kZSgpKSkgeworICAgICAgICBpZiAoTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVs
ZW1lbnQqIGJ0biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50Kj4o
by5ub2RlKCkpKSB7CiAgICAgICAgICAgICBib29sIGF1ZGlvRW5hYmxlZCA9IGJ0bi0+ZGlzcGxh
eVR5cGUoKSA9PSBNZWRpYU11dGVCdXR0b247CiAgICAgICAgICAgICB3a0RyYXdNZWRpYVVJUGFy
dChhdWRpb0VuYWJsZWQgPyBXS01lZGlhVUlQYXJ0TXV0ZUJ1dHRvbiA6IFdLTWVkaWFVSVBhcnRV
bk11dGVCdXR0b24sIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZGV0
ZXJtaW5lU3RhdGUobykpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVk
aWFQYXVzZUJ1dHRvbjoKICAgICBjYXNlIE1lZGlhUGxheUJ1dHRvbjoKLSAgICAgICAgaWYgKE1l
ZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50KiBidG4gPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRy
b2xQbGF5QnV0dG9uRWxlbWVudCo+KG8tPm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKE1lZGlhQ29u
dHJvbFBsYXlCdXR0b25FbGVtZW50KiBidG4gPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xQbGF5
QnV0dG9uRWxlbWVudCo+KG8ubm9kZSgpKSkgewogICAgICAgICAgICAgYm9vbCBjYW5QbGF5ID0g
YnRuLT5kaXNwbGF5VHlwZSgpID09IE1lZGlhUGxheUJ1dHRvbjsKICAgICAgICAgICAgIHdrRHJh
d01lZGlhVUlQYXJ0KGNhblBsYXkgPyBXS01lZGlhVUlQYXJ0UGxheUJ1dHRvbiA6IFdLTWVkaWFV
SVBhcnRQYXVzZUJ1dHRvbiwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBy
LCBkZXRlcm1pbmVTdGF0ZShvKSk7CiAgICAgICAgIH0KQEAgLTE3Miw3ICsxNzIsNyBAQCBib29s
IFJlbmRlck1lZGlhQ29udHJvbHM6OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9s
RWxlbWVudFR5cGUgcGFydCwgUgogICAgICAgICB3a0RyYXdNZWRpYVVJUGFydChXS01lZGlhVUlQ
YXJ0U2Vla0ZvcndhcmRCdXR0b24sIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgciwgZGV0ZXJtaW5lU3RhdGUobykpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlh
U2xpZGVyOiB7Ci0gICAgICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBw
YXJlbnRNZWRpYUVsZW1lbnQoKm8pKSB7CisgICAgICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQobykpIHsKICAgICAgICAgICAgIEZsb2F0
UmVjdCB1bnpvb21lZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4
dChvLCBwYWludEluZm8sIHIpOwogICAgICAgICAgICAgd2tEcmF3TWVkaWFTbGlkZXJUcmFjayhw
YWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHVuem9vbWVkUmVjdCwgbWVkaWFF
bGVtZW50LT5wZXJjZW50TG9hZGVkKCkgKiBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCksIG1lZGlh
RWxlbWVudC0+Y3VycmVudFRpbWUoKSwgbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpLCBkZXRlcm1p
bmVTdGF0ZShvKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVkaWFDb250cm9scy5oCmluZGV4IDhhMTZjMmY3ODdkOTllNTVhZmU3ODE0MWUzOGZhY2E3
OWEzMTYyNTAuLmRlMDJmMmFhM2VjY2Q4MGMzNDc1YWFlNzE5ZTlmOTI4YmUzYWFjYTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaApAQCAtNDUs
NyArNDUsNyBAQCBjbGFzcyBSZW5kZXJNZWRpYUNvbnRyb2xzIHsKIHB1YmxpYzoKIAogI2lmIFBM
QVRGT1JNKFdJTikKLSAgICBzdGF0aWMgYm9vbCBwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlh
Q29udHJvbEVsZW1lbnRUeXBlLCBSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgc3RhdGljIGJvb2wgcGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRp
YUNvbnRyb2xFbGVtZW50VHlwZSwgY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwogICAgIHN0YXRpYyB2b2lkIGFkanVzdE1lZGlhU2xpZGVyVGh1
bWJTaXplKFJlbmRlclN0eWxlKik7CiAjZW5kaWYKICAgICBzdGF0aWMgSW50UG9pbnQgdm9sdW1l
U2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oUmVuZGVyQm94KiwgY29uc3QgSW50U2l6ZSYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCBhMDAzMDdjMTk1
MGFlMDRiNDhhMWNmYzRmNTc5MTU4MTg4NTJkODc5Li43YmVmZGM1ZGExNDkzN2MwYmMyMmYwMTY3
YzhlZjk1NDdjZjM0MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcApAQCAtNzI1LDcgKzcyNSw3IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6OmNvbnRh
aW5pbmdCbG9jaygpIGNvbnN0CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3TGluZUZvckJv
eFNpZGUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGZsb2F0IHgxLCBmbG9hdCB5
MSwgZmxvYXQgeDIsIGZsb2F0IHkyLAotICAgIEJveFNpZGUgc2lkZSwgQ29sb3IgY29sb3IsIEVC
b3JkZXJTdHlsZSBib3JkZXJTdHlsZSwgZmxvYXQgYWRqYWNlbnRXaWR0aDEsIGZsb2F0IGFkamFj
ZW50V2lkdGgyLCBib29sIGFudGlhbGlhcykKKyAgICBCb3hTaWRlIHNpZGUsIENvbG9yIGNvbG9y
LCBFQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUsIGZsb2F0IGFkamFjZW50V2lkdGgxLCBmbG9hdCBh
ZGphY2VudFdpZHRoMiwgYm9vbCBhbnRpYWxpYXMpIGNvbnN0CiB7CiAgICAgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IgPSBkb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgZmxvYXQg
dGhpY2tuZXNzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGNh
OGE2ZGVhN2M2ODk0OWM3YmUwMDc4MmQzZDRiNGZhOTlkYmJhZTYuLmU1ODAzZTBkYjZiMDY4YTQ4
OTE3NTA5NmUzYzNkNDU1YjQ5YmIyNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmgKQEAgLTg3OSw3ICs4NzksNyBAQCBwdWJsaWM6CiAKICAgICBSZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbkVudW0gc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSBjb25zdDsKIAot
ICAgIHZvaWQgZHJhd0xpbmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHgxLCBm
bG9hdCB5MSwgZmxvYXQgeDIsIGZsb2F0IHkyLCBCb3hTaWRlLCBDb2xvciwgRUJvcmRlclN0eWxl
LCBmbG9hdCBhZGpidzEsIGZsb2F0IGFkamJ3MiwgYm9vbCBhbnRpYWxpYXMgPSBmYWxzZSk7Cisg
ICAgdm9pZCBkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0KiwgZmxvYXQgeDEsIGZs
b2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIsIEJveFNpZGUsIENvbG9yLCBFQm9yZGVyU3R5bGUs
IGZsb2F0IGFkamJ3MSwgZmxvYXQgYWRqYncyLCBib29sIGFudGlhbGlhcyA9IGZhbHNlKSBjb25z
dDsKIHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50Rm9jdXNSaW5nKFBhaW50SW5mbyYsIGNvbnN0
IExheW91dFBvaW50JiwgUmVuZGVyU3R5bGUqKTsKICAgICB2b2lkIHBhaW50T3V0bGluZShQYWlu
dEluZm8mLCBjb25zdCBMYXlvdXRSZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclByb2dyZXNzLmNwcAppbmRleCA0MTM5ZDI1ZDk5MmQ2MmI3NDg2YjFkMzE4NWYwNjAzN2M1
MjRkZmZlLi44NDMyZjYwNGY0MzhhMjJjMzc2NGNlOThhMzU3MDUzOTY3ZTA3ZWYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAKQEAgLTY3LDcgKzY3LDcg
QEAgdm9pZCBSZW5kZXJQcm9ncmVzczo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBs
b2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IGwKICAgICAgICAgZnJhbWUuc2V0SGVpZ2h0KGNvbXB1
dGVkVmFsdWVzLm1fZXh0ZW50KTsKICAgICBlbHNlCiAgICAgICAgIGZyYW1lLnNldFdpZHRoKGNv
bXB1dGVkVmFsdWVzLm1fZXh0ZW50KTsKLSAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IHRoZW1lKCku
cHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKHRoaXMsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhbWUp
KS5zaXplKCk7CisgICAgSW50U2l6ZSBmcmFtZVNpemUgPSB0aGVtZSgpLnByb2dyZXNzQmFyUmVj
dEZvckJvdW5kcygqdGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFtZSkpLnNpemUoKTsKICAg
ICBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBm
cmFtZVNpemUuaGVpZ2h0KCkgOiBmcmFtZVNpemUud2lkdGgoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cAppbmRleCA0YWJlNzk2ZDNhNWU2NjA2Yzc5YmQ0Y2VhMTQxNDI4ZjZhMjM1NTFjLi5jNzdjNzIx
ZDQyZWVlZTYxZWEyYzFiNWI3OWMyZGU3YzkyNWY5MzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcApAQCAt
ODQsNyArODQsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JgogCiAgICAgICAgIC8vIENvbnZl
cnQgdGhlIHJlY3QgaW50byB0aGUgY29vcmRzIHVzZWQgZm9yIHBhaW50aW5nIHRoZSBjb250ZW50
CiAgICAgICAgIGNvbnRlbnRzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpKTsK
LSAgICAgICAgdGhlbWUoKS5wYWludENhcHNMb2NrSW5kaWNhdG9yKHRoaXMsIHBhaW50SW5mbywg
cGl4ZWxTbmFwcGVkSW50UmVjdChjb250ZW50c1JlY3QpKTsKKyAgICAgICAgdGhlbWUoKS5wYWlu
dENhcHNMb2NrSW5kaWNhdG9yKCp0aGlzLCBwYWludEluZm8sIHBpeGVsU25hcHBlZEludFJlY3Qo
Y29udGVudHNSZWN0KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lLmNwcAppbmRleCBjNzlkYmNiY2U0MTMwM2VmNzQwOTNmM2E5ZjdmYmI0YWZkMzZjODlm
Li5jMDFkZDQzYWFkZjk1NDlmNDBkYmY5OWY3YTQzMDg2ZDE0OTFhZDAxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKQEAgLTI2MywyMCArMjYzLDIwIEBAIHZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlclN0eWxlJiBzdHlsZSwKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OnBhaW50KFJl
bmRlck9iamVjdCogbywgQ29udHJvbFN0YXRlcyogY29udHJvbFN0YXRlcywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lOjpwYWlu
dChjb25zdCBSZW5kZXJPYmplY3QmIG8sIENvbnRyb2xTdGF0ZXMqIGNvbnRyb2xTdGF0ZXMsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIC8vIElm
IHBhaW50aW5nIGlzIGRpc2FibGVkLCBidXQgd2UgYXJlbid0IHVwZGF0aW5nIGNvbnRyb2wgdGlu
dHMsIHRoZW4ganVzdCBiYWlsLgogICAgIC8vIElmIHdlIGFyZSB1cGRhdGluZyBjb250cm9sIHRp
bnRzLCBqdXN0IHNjaGVkdWxlIGEgcmVwYWludCBpZiB0aGUgdGhlbWUgc3VwcG9ydHMgdGludGlu
ZwogICAgIC8vIGZvciB0aGF0IGNvbnRyb2wuCiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT51
cGRhdGluZ0NvbnRyb2xUaW50cygpKSB7CiAgICAgICAgIGlmIChjb250cm9sU3VwcG9ydHNUaW50
cyhvKSkKLSAgICAgICAgICAgIG8tPnJlcGFpbnQoKTsKKyAgICAgICAgICAgIG8ucmVwYWludCgp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmIChwYWludEluZm8uY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDb250
cm9sUGFydCBwYXJ0ID0gby0+c3R5bGUoKS5hcHBlYXJhbmNlKCk7CisgICAgQ29udHJvbFBhcnQg
cGFydCA9IG8uc3R5bGUoKS5hcHBlYXJhbmNlKCk7CiAKICNpZiBVU0UoTkVXX1RIRU1FKQogICAg
IHN3aXRjaCAocGFydCkgewpAQCAtMjg4LDcgKzI4OCw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnBh
aW50KFJlbmRlck9iamVjdCogbywgQ29udHJvbFN0YXRlcyogY29udHJvbFN0YXRlcywgY29uc3Qg
UGFpCiAgICAgY2FzZSBCdXR0b25QYXJ0OgogICAgIGNhc2UgSW5uZXJTcGluQnV0dG9uUGFydDoK
ICAgICAgICAgdXBkYXRlQ29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKG8sIGNvbnRyb2xTdGF0ZXMp
OwotICAgICAgICBtX3RoZW1lLT5wYWludChwYXJ0LCBjb250cm9sU3RhdGVzLCBjb25zdF9jYXN0
PEdyYXBoaWNzQ29udGV4dCo+KHBhaW50SW5mby5jb250ZXh0KSwgciwgby0+c3R5bGUoKS5lZmZl
Y3RpdmVab29tKCksICZvLT52aWV3KCkuZnJhbWVWaWV3KCkpOworICAgICAgICBtX3RoZW1lLT5w
YWludChwYXJ0LCBjb250cm9sU3RhdGVzLCBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dCo+KHBh
aW50SW5mby5jb250ZXh0KSwgciwgby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSwgJm8udmlldygp
LmZyYW1lVmlldygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIGJyZWFrOwpAQCAtNDA1LDE3ICs0MDUsMTcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnQo
UmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3RhdGVzKiBjb250cm9sU3RhdGVzLCBjb25zdCBQYWkK
ICAgICByZXR1cm4gdHJ1ZTsgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aGUgYXBwZWFyYW5jZSwgc28g
bGV0IHRoZSBub3JtYWwgYmFja2dyb3VuZC9ib3JkZXIgcGFpbnQuCiB9CiAKLWJvb2wgUmVuZGVy
VGhlbWU6OnBhaW50Qm9yZGVyT25seShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRCb3Jk
ZXJPbmx5KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIFBMQVRGT1JNKElPUykK
ICAgICBVTlVTRURfUEFSQU0ocik7Ci0gICAgcmV0dXJuIG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgp
ICE9IE5vQ29udHJvbFBhcnQ7CisgICAgcmV0dXJuIG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgIT0g
Tm9Db250cm9sUGFydDsKICNlbHNlCiAgICAgLy8gQ2FsbCB0aGUgYXBwcm9wcmlhdGUgcGFpbnQg
bWV0aG9kIGJhc2VkIG9mZiB0aGUgYXBwZWFyYW5jZSB2YWx1ZS4KLSAgICBzd2l0Y2ggKG8tPnN0
eWxlKCkuYXBwZWFyYW5jZSgpKSB7CisgICAgc3dpdGNoIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgp
KSB7CiAgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgogICAgICAgICByZXR1cm4gcGFpbnRUZXh0Rmll
bGQobywgcGFpbnRJbmZvLCByKTsKICAgICBjYXNlIExpc3Rib3hQYXJ0OgpAQCAtNDYzLDEzICs0
NjMsMTMgQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRCb3JkZXJPbmx5KFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGMKICNlbmRpZgogfQogCi1ib29sIFJlbmRl
clRoZW1lOjpwYWludERlY29yYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVt
ZTo6cGFpbnREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFp
bnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgLy8gQ2FsbCB0aGUgYXBwcm9wcmlhdGUgcGFpbnQgbWV0aG9kIGJhc2VkIG9mZiB0
aGUgYXBwZWFyYW5jZSB2YWx1ZS4KLSAgICBzd2l0Y2ggKHJlbmRlcmVyLT5zdHlsZSgpLmFwcGVh
cmFuY2UoKSkgeworICAgIHN3aXRjaCAocmVuZGVyZXIuc3R5bGUoKS5hcHBlYXJhbmNlKCkpIHsK
ICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKICAgICAgICAgcmV0dXJuIHBhaW50TWVudUxp
c3RCdXR0b25EZWNvcmF0aW9ucyhyZW5kZXJlciwgcGFpbnRJbmZvLCByZWN0KTsKICAgICBjYXNl
IFRleHRGaWVsZFBhcnQ6CkBAIC02NjYsMTcgKzY2NiwxNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6
cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAog
ICAgIHJldHVybiBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7CiB9
CiAKLWludCBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3Qq
IG8pIGNvbnN0CitpbnQgUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVy
T2JqZWN0JiBvKSBjb25zdAogewotICAgIGlmICghby0+aXNCb3goKSkKKyAgICBpZiAoIW8uaXNC
b3goKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IHRv
UmVuZGVyQm94KG8pOworICAgIGNvbnN0IFJlbmRlckJveCYgYm94ID0gKnRvUmVuZGVyQm94KCZv
KTsKIAogI2lmIFVTRShORVdfVEhFTUUpCi0gICAgcmV0dXJuIGJveC0+aGVpZ2h0KCkgKyBib3gt
Pm1hcmdpblRvcCgpICsgbV90aGVtZS0+YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQoby0+c3R5
bGUoKS5hcHBlYXJhbmNlKCkpICogby0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgcmV0
dXJuIGJveC5oZWlnaHQoKSArIGJveC5tYXJnaW5Ub3AoKSArIG1fdGhlbWUtPmJhc2VsaW5lUG9z
aXRpb25BZGp1c3RtZW50KG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkpICogby5zdHlsZSgpLmVmZmVj
dGl2ZVpvb20oKTsKICNlbHNlCi0gICAgcmV0dXJuIGJveC0+aGVpZ2h0KCkgKyBib3gtPm1hcmdp
blRvcCgpOworICAgIHJldHVybiBib3guaGVpZ2h0KCkgKyBib3gubWFyZ2luVG9wKCk7CiAjZW5k
aWYKIH0KIApAQCAtNzE0LDExICs3MTQsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNDb250cm9s
U3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm8KICAg
ICB9CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRl
ck9iamVjdCogbywgSW50UmVjdCYgcikKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRS
ZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgSW50UmVjdCYgcikKIHsKICNpZiBVU0UoTkVXX1RI
RU1FKQogICAgIENvbnRyb2xTdGF0ZXMgc3RhdGVzKGV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVu
ZGVyZXIobykpOwotICAgIG1fdGhlbWUtPmluZmxhdGVDb250cm9sUGFpbnRSZWN0KG8tPnN0eWxl
KCkuYXBwZWFyYW5jZSgpLCAmc3RhdGVzLCByLCBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7
CisgICAgbV90aGVtZS0+aW5mbGF0ZUNvbnRyb2xQYWludFJlY3Qoby5zdHlsZSgpLmFwcGVhcmFu
Y2UoKSwgJnN0YXRlcywgciwgby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTShvKTsKICAgICBVTlVTRURfUEFSQU0ocik7CkBAIC03MzAsMTAgKzczMCwx
MCBAQCBib29sIFJlbmRlclRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0CiAgICAgcmV0dXJuIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpICYmIHN0
eWxlLT5hcHBlYXJhbmNlKCkgIT0gVGV4dEZpZWxkUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgp
ICE9IFRleHRBcmVhUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IE1lbnVsaXN0QnV0dG9u
UGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IExpc3Rib3hQYXJ0KTsKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKFJlbmRlck9iamVjdCogbywgQ29udHJvbFN0YXRlczo6
U3RhdGVzIHN0YXRlKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKGNvbnN0
IFJlbmRlck9iamVjdCYgbywgQ29udHJvbFN0YXRlczo6U3RhdGVzIHN0YXRlKSBjb25zdAogewog
ICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGUgY29udHJvbHMgZG9uJ3Qg
cmVzcG9uZCB0byBjaGFuZ2VzIGluIDpob3ZlciBzdGF0ZQotICAgIGlmIChzdGF0ZSA9PSBDb250
cm9sU3RhdGVzOjpIb3ZlclN0YXRlICYmICFzdXBwb3J0c0hvdmVyKCZvLT5zdHlsZSgpKSkKKyAg
ICBpZiAoc3RhdGUgPT0gQ29udHJvbFN0YXRlczo6SG92ZXJTdGF0ZSAmJiAhc3VwcG9ydHNIb3Zl
cigmby5zdHlsZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQXNzdW1lIHBy
ZXNzZWQgc3RhdGUgaXMgb25seSByZXNwb25kZWQgdG8gaWYgdGhlIGNvbnRyb2wgaXMgZW5hYmxl
ZC4KQEAgLTc0MSwxNyArNzQxLDE3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnN0YXRlQ2hhbmdlZChS
ZW5kZXJPYmplY3QqIG8sIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBzdGF0ZSkgY29uCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIC8vIFJlcGFpbnQgdGhlIGNvbnRyb2wuCi0gICAgby0+cmVw
YWludCgpOworICAgIG8ucmVwYWludCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJl
bmRlclRoZW1lOjp1cGRhdGVDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvLCBDb250cm9sU3RhdGVzKiBjb250cm9sU3RhdGVzKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZTo6dXBkYXRlQ29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCYg
bywgQ29udHJvbFN0YXRlcyogY29udHJvbFN0YXRlcykgY29uc3QKIHsKICAgICBDb250cm9sU3Rh
dGVzIG5ld1N0YXRlcyA9IGV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIobyk7CiAgICAg
Y29udHJvbFN0YXRlcy0+c2V0U3RhdGVzKG5ld1N0YXRlcy5zdGF0ZXMoKSk7CiB9CiAKLUNvbnRy
b2xTdGF0ZXM6OlN0YXRlcyBSZW5kZXJUaGVtZTo6ZXh0cmFjdENvbnRyb2xTdGF0ZXNGb3JSZW5k
ZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CitDb250cm9sU3RhdGVzOjpTdGF0ZXMg
UmVuZGVyVGhlbWU6OmV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVy
T2JqZWN0JiBvKSBjb25zdAogewogICAgIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBzdGF0ZXMgPSAw
OwogICAgIGlmIChpc0hvdmVyZWQobykpIHsKQEAgLTc2NCw3ICs3NjQsNyBAQCBDb250cm9sU3Rh
dGVzOjpTdGF0ZXMgUmVuZGVyVGhlbWU6OmV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIo
Y29uc3QgUmVuZGVyTwogICAgICAgICBpZiAoaXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChvKSkK
ICAgICAgICAgICAgIHN0YXRlcyB8PSBDb250cm9sU3RhdGVzOjpTcGluVXBTdGF0ZTsKICAgICB9
Ci0gICAgaWYgKGlzRm9jdXNlZChvKSAmJiBvLT5zdHlsZSgpLm91dGxpbmVTdHlsZUlzQXV0bygp
KQorICAgIGlmIChpc0ZvY3VzZWQobykgJiYgby5zdHlsZSgpLm91dGxpbmVTdHlsZUlzQXV0bygp
KQogICAgICAgICBzdGF0ZXMgfD0gQ29udHJvbFN0YXRlczo6Rm9jdXNTdGF0ZTsKICAgICBpZiAo
aXNFbmFibGVkKG8pKQogICAgICAgICBzdGF0ZXMgfD0gQ29udHJvbFN0YXRlczo6RW5hYmxlZFN0
YXRlOwpAQCAtNzgxLDkgKzc4MSw5IEBAIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBSZW5kZXJUaGVt
ZTo6ZXh0cmFjdENvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPCiAgICAgcmV0
dXJuIHN0YXRlczsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNBY3RpdmUoY29uc3QgUmVuZGVy
T2JqZWN0KiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6aXNBY3RpdmUoY29uc3QgUmVuZGVy
T2JqZWN0JiBvKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9k
ZSogbm9kZSA9IG8ubm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC03OTgsNDEgKzc5OCw0MSBAQCBib29sIFJlbmRlclRoZW1lOjppc0FjdGl2ZShjb25z
dCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiAgICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLmlzQWN0aXZlKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzQ2hlY2tlZChjb25zdCBS
ZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc0NoZWNrZWQoY29uc3Qg
UmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIGlmICghby0+bm9kZSgpKQorICAgIGlmICgh
by5ub2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCA9IG8tPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBvLm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKICAg
ICBpZiAoIWlucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJu
IGlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lOjppc0luZGV0ZXJtaW5hdGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAorYm9vbCBS
ZW5kZXJUaGVtZTo6aXNJbmRldGVybWluYXRlKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QK
IHsKLSAgICBpZiAoIW8tPm5vZGUoKSkKKyAgICBpZiAoIW8ubm9kZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBvLT5ub2Rl
KCktPnRvSW5wdXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50
ID0gby5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKCFpbnB1dEVsZW1lbnQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPnNob3VsZEFw
cGVhckluZGV0ZXJtaW5hdGUoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNFbmFibGVkKGNv
bnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzRW5hYmxlZChj
b25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IG8tPm5vZGUo
KTsKKyAgICBOb2RlKiBub2RlID0gby5ub2RlKCk7CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5p
c0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiAhdG9FbGVt
ZW50KG5vZGUpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZTo6aXNGb2N1c2VkKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhl
bWU6OmlzRm9jdXNlZChjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgTm9kZSog
bm9kZSA9IG8tPm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gby5ub2RlKCk7CiAgICAgaWYgKCFu
b2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtODQyLDE2ICs4NDIsMTYgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKGNvbnN0IFJl
bmRlck9iamVjdCogbykgY29uc3QKICAgICByZXR1cm4gZm9jdXNEZWxlZ2F0ZSA9PSBkb2N1bWVu
dC5mb2N1c2VkRWxlbWVudCgpICYmIGZyYW1lICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0ZvY3Vz
ZWRBbmRBY3RpdmUoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNQcmVzc2VkKGNvbnN0IFJl
bmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzUHJlc3NlZChjb25zdCBS
ZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgaWYgKCFvLT5ub2RlKCkgfHwgIW8tPm5vZGUo
KS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghby5ub2RlKCkgfHwgIW8ubm9kZSgpLT5pc0Vs
ZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdG9FbGVtZW50
KG8tPm5vZGUoKSktPmFjdGl2ZSgpOworICAgIHJldHVybiB0b0VsZW1lbnQoby5ub2RlKCkpLT5h
Y3RpdmUoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNTcGluVXBCdXR0b25QYXJ0UHJlc3Nl
ZChjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc1NwaW5V
cEJ1dHRvblBhcnRQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKIHsKLSAgICBO
b2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsKICAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CkBAIC04NjAsMTcgKzg2
MCwxNyBAQCBib29sIFJlbmRlclRoZW1lOjppc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKGNvbnN0
IFJlbmRlck9iamVjdCogbykgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3BpbkJ1dHRv
bkVsZW1lbnQqPihlbGVtZW50KS0+dXBEb3duU3RhdGUoKSA9PSBTcGluQnV0dG9uRWxlbWVudDo6
VXA7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzUmVhZE9ubHlDb250cm9sKGNvbnN0IFJlbmRl
ck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzUmVhZE9ubHlDb250cm9sKGNv
bnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKIHsKLSAgICBOb2RlKiBub2RlID0gby0+bm9kZSgp
OworICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0b0VsZW1l
bnQobm9kZSktPm1hdGNoZXNSZWFkT25seVBzZXVkb0NsYXNzKCk7CiB9CiAKLWJvb2wgUmVuZGVy
VGhlbWU6OmlzSG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRl
clRoZW1lOjppc0hvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIE5v
ZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IG8ubm9kZSgpOwogICAgIGlm
ICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCF0b0VsZW1lbnQobm9kZSktPmlzU3BpbkJ1dHRvbkVsZW1lbnQoKSkKQEAgLTg3
OSwyNSArODc5LDI1IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzSG92ZXJlZChjb25zdCBSZW5kZXJP
YmplY3QqIG8pIGNvbnN0CiAgICAgcmV0dXJuIGVsZW1lbnQtPmhvdmVyZWQoKSAmJiBlbGVtZW50
LT51cERvd25TdGF0ZSgpICE9IFNwaW5CdXR0b25FbGVtZW50OjpJbmRldGVybWluYXRlOwogfQog
Ci1ib29sIFJlbmRlclRoZW1lOjppc1NwaW5VcEJ1dHRvblBhcnRIb3ZlcmVkKGNvbnN0IFJlbmRl
ck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydEhv
dmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBv
LT5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IG8ubm9kZSgpOwogICAgIGlmICghbm9kZSB8fCAh
bm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8ICF0b0VsZW1lbnQobm9kZSktPmlzU3BpbkJ1dHRvbkVs
ZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFNwaW5CdXR0b25FbGVtZW50KiBl
bGVtZW50ID0gc3RhdGljX2Nhc3Q8U3BpbkJ1dHRvbkVsZW1lbnQqPihub2RlKTsKICAgICByZXR1
cm4gZWxlbWVudC0+dXBEb3duU3RhdGUoKSA9PSBTcGluQnV0dG9uRWxlbWVudDo6VXA7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWU6OmlzRGVmYXVsdChjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0
Citib29sIFJlbmRlclRoZW1lOjppc0RlZmF1bHQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25z
dAogewogICAgIC8vIEEgYnV0dG9uIHNob3VsZCBvbmx5IGhhdmUgdGhlIGRlZmF1bHQgYXBwZWFy
YW5jZSBpZiB0aGUgcGFnZSBpcyBhY3RpdmUKICAgICBpZiAoIWlzQWN0aXZlKG8pKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIW8tPmZyYW1lKCkuc2V0dGluZ3MoKS5hcHBsaWNh
dGlvbkNocm9tZU1vZGUoKSkKKyAgICBpZiAoIW8uZnJhbWUoKS5zZXR0aW5ncygpLmFwcGxpY2F0
aW9uQ2hyb21lTW9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJu
IG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IERlZmF1bHRCdXR0b25QYXJ0OworICAgIHJldHVy
biBvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IERlZmF1bHRCdXR0b25QYXJ0OwogfQogCiAjaWYg
IVVTRShORVdfVEhFTUUpCkBAIC05NjcsNyArOTY3LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIKICAgICBSZW5kZXJJbnB1dFNwZWVjaDo6YWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0
eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZTo6cGFpbnRJbnB1dEZpZWxkU3BlZWNoQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVy
VGhlbWU6OnBhaW50SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CiAgICAgcmV0dXJuIFJlbmRlcklucHV0U3BlZWNoOjpwYWludElucHV0RmllbGRTcGVlY2hCdXR0
b24ob2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwogfQpAQCAtOTg5LDcgKzk4OSw3IEBAIGJvb2wg
UmVuZGVyVGhlbWU6OnN1cHBvcnRzTWV0ZXIoQ29udHJvbFBhcnQpIGNvbnN0CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjpwYWludE1ldGVyKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQorYm9vbCBSZW5kZXJUaGVtZTo6cGFp
bnRNZXRlcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwMDIsOSArMTAwMiw5IEBAIExheW91
dFVuaXQgUmVuZGVyVGhlbWU6OnNsaWRlclRpY2tTbmFwcGluZ1RocmVzaG9sZCgpIGNvbnN0CiAg
ICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3MoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKK3ZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3MoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKLSAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUo
KTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTAxOCwxNCArMTAxOCwx
NCBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sCiAKICAgICBkb3VibGUgbWluID0gaW5wdXQtPm1p
bmltdW0oKTsKICAgICBkb3VibGUgbWF4ID0gaW5wdXQtPm1heGltdW0oKTsKLSAgICBDb250cm9s
UGFydCBwYXJ0ID0gby0+c3R5bGUoKS5hcHBlYXJhbmNlKCk7CisgICAgQ29udHJvbFBhcnQgcGFy
dCA9IG8uc3R5bGUoKS5hcHBlYXJhbmNlKCk7CiAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aWNr
cyBvbiBhbHRlcm5hdGUgc2xpZGVycyBsaWtlIE1lZGlhVm9sdW1lU2xpZGVycy4KICAgICBpZiAo
cGFydCAhPSAgU2xpZGVySG9yaXpvbnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJWZXJ0aWNhbFBh
cnQpCiAgICAgICAgIHJldHVybjsKICAgICBib29sIGlzSG9yaXpvbnRhbCA9IHBhcnQgPT0gIFNs
aWRlckhvcml6b250YWxQYXJ0OwogCiAgICAgSW50U2l6ZSB0aHVtYlNpemU7Ci0gICAgUmVuZGVy
T2JqZWN0KiB0aHVtYlJlbmRlcmVyID0gaW5wdXQtPnNsaWRlclRodW1iRWxlbWVudCgpLT5yZW5k
ZXJlcigpOworICAgIGNvbnN0IFJlbmRlck9iamVjdCogdGh1bWJSZW5kZXJlciA9IGlucHV0LT5z
bGlkZXJUaHVtYkVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAodGh1bWJSZW5kZXJlcikg
ewogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgdGh1bWJTdHlsZSA9IHRodW1iUmVuZGVyZXIt
PnN0eWxlKCk7CiAgICAgICAgIGludCB0aHVtYldpZHRoID0gdGh1bWJTdHlsZS53aWR0aCgpLmlu
dFZhbHVlKCk7CkBAIC0xMDM1LDcgKzEwMzUsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNs
aWRlclRpY2tzKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sCiAg
ICAgfQogCiAgICAgSW50U2l6ZSB0aWNrU2l6ZSA9IHNsaWRlclRpY2tTaXplKCk7Ci0gICAgZmxv
YXQgem9vbUZhY3RvciA9IG8tPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpv
b21GYWN0b3IgPSBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwogICAgIEZsb2F0UmVjdCB0aWNr
UmVjdDsKICAgICBpbnQgdGlja1JlZ2lvblNpZGVNYXJnaW4gPSAwOwogICAgIGludCB0aWNrUmVn
aW9uV2lkdGggPSAwOwpAQCAtMTA0NCw3ICsxMDQ0LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6cGFp
bnRTbGlkZXJUaWNrcyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LAogICAgIC8vIFdlIGNhbiBpZ25vcmluZyB0cmFuc2Zvcm1zIGJlY2F1c2UgdHJhbnNmb3JtIGlz
IGhhbmRsZWQgYnkgdGhlIGdyYXBoaWNzIGNvbnRleHQuCiAgICAgaWYgKHRyYWNrUmVuZGVyZXIp
CiAgICAgICAgIHRyYWNrQm91bmRzID0gdHJhY2tSZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0Jv
eFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKTsKLSAgICBJbnRSZWN0IHNsaWRlckJvdW5kcyA9IG8t
PmFic29sdXRlQm91bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCk7CisgICAgSW50UmVj
dCBzbGlkZXJCb3VuZHMgPSBvLmFic29sdXRlQm91bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zv
cm1zKCk7CiAKICAgICAvLyBNYWtlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSB0cmFuc2Zvcm1l
ZCBhbmNlc3RvciBlbGVtZW50LgogICAgIHRyYWNrQm91bmRzLnNldFgodHJhY2tCb3VuZHMueCgp
IC0gc2xpZGVyQm91bmRzLngoKSArIHJlY3QueCgpKTsKQEAgLTEwNjUsNyArMTA2NSw3IEBAIHZv
aWQgUmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3MoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywKICAgICB9CiAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBv
cHRpb25zID0gZGF0YUxpc3QtPm9wdGlvbnMoKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKLSAgICBwYWludEluZm8uY29udGV4
dC0+c2V0RmlsbENvbG9yKG8tPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5Q29sb3IpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+
c2V0RmlsbENvbG9yKG8uc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlD
b2xvciksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IE5v
ZGUqIG5vZGUgPSBvcHRpb25zLT5pdGVtKGkpOyBpKyspIHsKICAgICAgICAgQVNTRVJUKGlzSFRN
TE9wdGlvbkVsZW1lbnQobm9kZSkpOwogICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9u
RWxlbWVudCA9IHRvSFRNTE9wdGlvbkVsZW1lbnQobm9kZSk7CkBAIC0xMDc0LDcgKzEwNzQsNyBA
QCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ZG91YmxlIHBhcnNlZFZhbHVlID0gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoaW5wdXQtPnNh
bml0aXplVmFsdWUodmFsdWUpKTsKICAgICAgICAgZG91YmxlIHRpY2tGcmFjdGlvbiA9IChwYXJz
ZWRWYWx1ZSAtIG1pbikgLyAobWF4IC0gbWluKTsKLSAgICAgICAgZG91YmxlIHRpY2tSYXRpbyA9
IGlzSG9yaXpvbnRhbCAmJiBvLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHRp
Y2tGcmFjdGlvbiA6IDEuMCAtIHRpY2tGcmFjdGlvbjsKKyAgICAgICAgZG91YmxlIHRpY2tSYXRp
byA9IGlzSG9yaXpvbnRhbCAmJiBvLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
dGlja0ZyYWN0aW9uIDogMS4wIC0gdGlja0ZyYWN0aW9uOwogICAgICAgICBkb3VibGUgdGlja1Bv
c2l0aW9uID0gcm91bmQodGlja1JlZ2lvblNpZGVNYXJnaW4gKyB0aWNrUmVnaW9uV2lkdGggKiB0
aWNrUmF0aW8pOwogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQogICAgICAgICAgICAgdGlja1Jl
Y3Quc2V0WCh0aWNrUG9zaXRpb24pOwpAQCAtMTEwMCw3ICsxMTAwLDcgQEAgdm9pZCBSZW5kZXJU
aGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikKIHsKIH0KIAotSW50UmVjdCBSZW5kZXJUaGVtZTo6cHJvZ3Jlc3NCYXJSZWN0
Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmIGJvdW5kcykgY29u
c3QKK0ludFJlY3QgUmVuZGVyVGhlbWU6OnByb2dyZXNzQmFyUmVjdEZvckJvdW5kcyhjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGJvdW5kczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKaW5kZXggOWJk
ODBlOThjMWEzYjQxNDA4Yzg3ZTMwNmFlNTBlYWQyZGVjYjM5OS4uYzdkZTJkNTM2YmI5ZWI1NTU2
YTI0ZmUxMTI5ZjZkYzQ0ODI3NmU0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmgKQEAgLTc5LDkgKzc5LDkgQEAgcHVibGljOgogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNh
bGxlZCB0byBwYWludCB0aGUgd2lkZ2V0IGFzIGEgYmFja2dyb3VuZCBvZiB0aGUgUmVuZGVyT2Jq
ZWN0LiAgQSB3aWRnZXQncyBmb3JlZ3JvdW5kLCBlLmcuLCB0aGUKICAgICAvLyB0ZXh0IG9mIGEg
YnV0dG9uLCBpcyBhbHdheXMgcmVuZGVyZWQgYnkgdGhlIGVuZ2luZSBpdHNlbGYuICBUaGUgYm9v
bGVhbiByZXR1cm4gdmFsdWUgaW5kaWNhdGVzCiAgICAgLy8gd2hldGhlciB0aGUgQ1NTIGJvcmRl
ci9iYWNrZ3JvdW5kIHNob3VsZCBhbHNvIGJlIHBhaW50ZWQuCi0gICAgYm9vbCBwYWludChSZW5k
ZXJPYmplY3QqLCBDb250cm9sU3RhdGVzKiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotICAgIGJvb2wgcGFpbnRCb3JkZXJPbmx5KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICBib29sIHBhaW50RGVjb3JhdGlvbnMoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIGJvb2wgcGFp
bnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgQ29udHJvbFN0YXRlcyosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIHBhaW50Qm9yZGVyT25seShjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgYm9vbCBwYWlu
dERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKIAogICAgIC8vIFRoZSByZW1haW5pbmcgbWV0aG9kcyBzaG91bGQgYmUgaW1w
bGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHBvcnRpb24gb2YgdGhlIHRoZW1lLCBl
LmcuLAogICAgIC8vIFJlbmRlclRoZW1lTWFjLmNwcCBmb3IgTWFjIE9TIFguCkBAIC0xMDYsMTQg
KzEwNiwxNCBAQCBwdWJsaWM6CiAgICAgLy8gQSBtZXRob2QgdG8gb2J0YWluIHRoZSBiYXNlbGlu
ZSBwb3NpdGlvbiBmb3IgYSAibGVhZiIgY29udHJvbC4gIFRoaXMgd2lsbCBvbmx5IGJlIHVzZWQg
aWYgYSBiYXNlbGluZQogICAgIC8vIHBvc2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGV4
YW1pbmluZyBjaGlsZCBjb250ZW50LiBDaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBl
eGFtcGxlcyBvZgogICAgIC8vIGNvbnRyb2xzIHRoYXQgbmVlZCB0byBkbyB0aGlzLgotICAgIHZp
cnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Cisg
ICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmKSBjb25z
dDsKIAogICAgIC8vIEEgbWV0aG9kIGZvciBhc2tpbmcgaWYgYSBjb250cm9sIGlzIGEgY29udGFp
bmVyIG9yIG5vdC4gIExlYWYgY29udHJvbHMgaGF2ZSB0byBoYXZlIHNvbWUgc3BlY2lhbCBiZWhh
dmlvciAobGlrZQogICAgIC8vIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBBUEkgYWJvdmUpLgogICAg
IGJvb2wgaXNDb250cm9sQ29udGFpbmVyKENvbnRyb2xQYXJ0KSBjb25zdDsKIAogICAgIC8vIEEg
bWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdp
bmRvdyBoYXMgZm9jdXMgb3Igbm90LgotICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNU
aW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIGNvbnRyb2wg
aGFzIGJlZW4gc3R5bGVkIGVub3VnaCBieSB0aGUgYXV0aG9yIHRvIGRpc2FibGUgdGhlIG5hdGl2
ZSBhcHBlYXJhbmNlLgogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVu
ZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29s
b3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CkBAIC0xMjMsMTEgKzEyMywxMSBAQCBwdWJsaWM6
CiAKICAgICAvLyBTb21lIGNvbnRyb2xzIG1heSBzcGlsbCBvdXQgb2YgdGhlaXIgY29udGFpbmVy
cyAoZS5nLiwgdGhlIGNoZWNrIG9uIGFuIE9TIFggY2hlY2tib3gpLiAgV2hlbiB0aGVzZSBjb250
cm9scyByZXBhaW50LAogICAgIC8vIHRoZSB0aGVtZSBuZWVkcyB0byBjb21tdW5pY2F0ZSB0aGlz
IGluZmxhdGVkIHJlY3QgdG8gdGhlIGVuZ2luZSBzbyB0aGF0IGl0IGNhbiBpbnZhbGlkYXRlIHRo
ZSB3aG9sZSBjb250cm9sLgotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25z
dCBSZW5kZXJPYmplY3QqLCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFp
bnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIEludFJlY3QmKTsKIAogICAgIC8vIFRoaXMgbWV0
aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBhIHJlbGV2YW50IHN0YXRlIGNoYW5nZXMgb24gYSBwYXJ0
aWN1bGFyIHRoZW1lZCBvYmplY3QsIGUuZy4sIHRoZSBtb3VzZSBiZWNvbWVzIHByZXNzZWQKICAg
ICAvLyBvciBhIGNvbnRyb2wgYmVjb21lcyBkaXNhYmxlZC4KLSAgICB2aXJ0dWFsIGJvb2wgc3Rh
dGVDaGFuZ2VkKFJlbmRlck9iamVjdCosIENvbnRyb2xTdGF0ZXM6OlN0YXRlcykgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIHN0YXRlQ2hhbmdlZChjb25zdCBSZW5kZXJPYmplY3QmLCBDb250cm9s
U3RhdGVzOjpTdGF0ZXMpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdo
ZW5ldmVyIHRoZSB0aGVtZSBjaGFuZ2VzIG9uIHRoZSBzeXN0ZW0gaW4gb3JkZXIgdG8gZmx1c2gg
Y2FjaGVkIHJlc291cmNlcyBmcm9tIHRoZQogICAgIC8vIG9sZCB0aGVtZS4KQEAgLTE4OCwxNCAr
MTg4LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNjcm9s
bGJhckNvbnRyb2xTaXplRm9yUGFydChDb250cm9sUGFydCkgeyByZXR1cm4gUmVndWxhclNjcm9s
bGJhcjsgfQogCiAgICAgLy8gTWV0aG9kIGZvciBwYWludGluZyB0aGUgY2FwcyBsb2NrIGluZGlj
YXRvcgotICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiAwOyB9OworICAg
IHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiAwOyB9OwogCiAjaWYg
RU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCiAgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVy
dmFsIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCiAgICAgdmlydHVhbCBk
b3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVz
cyopIGNvbnN0OwogICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24g
Zm9yIHRoZSBwcm9ncmVzcyBiYXIuCiAgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRp
b25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OwotICAgIHZpcnR1YWwgSW50
UmVjdCBwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3Qg
SW50UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCBwcm9ncmVzc0JhclJlY3RGb3JC
b3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoVklERU8pCkBAIC0yMjgsNyArMjI4LDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgSW50U2l6ZSBzbGlkZXJUaWNrU2l6ZSgpIGNvbnN0ID0gMDsKICAgICAvLyBSZXR1cm5z
IHRoZSBkaXN0YW5jZSBvZiBzbGlkZXIgdGljayBvcmlnaW4gZnJvbSB0aGUgc2xpZGVyIHRyYWNr
IGNlbnRlci4KICAgICB2aXJ0dWFsIGludCBzbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2VudGVy
KCkgY29uc3QgPSAwOwotICAgIHZvaWQgcGFpbnRTbGlkZXJUaWNrcyhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBwYWludFNsaWRlclRp
Y2tzKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKICNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFNob3dQbGFjZWhvbGRlcldoZW5G
b2N1c2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI0MywxMCArMjQzLDEwIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxl
TGlzdCosIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQp
IGNvbnN0OwogCiAgICAgZW51bSBGaWxlVXBsb2FkRGVjb3JhdGlvbnMgeyBTaW5nbGVGaWxlLCBN
dWx0aXBsZUZpbGVzIH07Ci0gICAgdmlydHVhbCBib29sIHBhaW50RmlsZVVwbG9hZEljb25EZWNv
cmF0aW9ucyhSZW5kZXJPYmplY3QqIC8qaW5wdXRSZW5kZXJlciovLCBSZW5kZXJPYmplY3QqIC8q
YnV0dG9uUmVuZGVyZXIqLywgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYsIEljb24q
LCBGaWxlVXBsb2FkRGVjb3JhdGlvbnMpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRGaWxlVXBsb2FkSWNvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgLypp
bnB1dFJlbmRlcmVyKi8sIGNvbnN0IFJlbmRlck9iamVjdCYgLypidXR0b25SZW5kZXJlciovLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JiwgSWNvbiosIEZpbGVVcGxvYWREZWNvcmF0
aW9ucykgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgRU5BQkxFKElNQUdFX0NPTlRST0xTKQotICAg
IHZpcnR1YWwgSW50U2l6ZSBpbWFnZUNvbnRyb2xzQnV0dG9uU2l6ZShjb25zdCBSZW5kZXJPYmpl
Y3QqKSBjb25zdCB7IHJldHVybiBJbnRTaXplKCk7IH0KKyAgICB2aXJ0dWFsIEludFNpemUgaW1h
Z2VDb250cm9sc0J1dHRvblNpemUoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3QgeyByZXR1cm4g
SW50U2l6ZSgpOyB9CiAjZW5kaWYKIAogcHJvdGVjdGVkOgpAQCAtMjY3LDEyMiArMjY3LDEyMiBA
QCBwcm90ZWN0ZWQ6CiAjaWYgIVVTRShORVdfVEhFTUUpCiAgICAgLy8gTWV0aG9kcyBmb3IgZWFj
aCBhcHBlYXJhbmNlIHZhbHVlLgogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludENo
ZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShS
ZW5kZXJTdHlsZSopIGNvbnN0IHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50UmFk
aW8oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0
eWxlKikgY29uc3QgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxl
KikgY29uc3QgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRDaGVja2JveERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBi
b29sIHBhaW50UmFkaW9EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2ti
b3hEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlv
RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b25E
ZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRG
aWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBw
YWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRG
aWVsZERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRUZXh0QXJlYURlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29s
IHBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0
QXJlYURlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZW51TGlzdERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29s
IHBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51
TGlzdERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9u
cyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlv
bnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFB1c2hCdXR0b25EZWNv
cmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNxdWFyZUJ1dHRvbkRlY29y
YXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50UHVzaEJ1dHRvbkRlY29yYXRp
b25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50U3F1YXJlQnV0dG9uRGVj
b3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogI2lmIEVOQUJMRShNRVRFUl9FTEVNRU5UKQogICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBi
b29sIHBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jl
c3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
dHJ1ZTsgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludElucHV0
RmllbGRTcGVlY2hCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludElucHV0RmllbGRTcGVlY2hCdXR0b24o
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
I2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJU
cmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1i
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29s
IHBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBw
YWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50U2xp
ZGVyVGh1bWJEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBh
aW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRT
ZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBh
aW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZWRpYUNvbnRyb2xTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQ
bGF5QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFPdmVybGF5UGxh
eUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
dHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFSZXdpbmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFDb250cm9sc0JhY2tncm91bmQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFUaW1lUmVtYWluaW5nKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFG
dWxsU2NyZWVuVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVh
bCBib29sIHBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFPdmVybGF5UGxheUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0
cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFSZXdpbmRCdXR0b24oY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24o
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVRvZ2dsZUNsb3NlZENh
cHRpb25zQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFD
b250cm9sc0JhY2tncm91bmQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYUN1cnJlbnRUaW1lKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFUaW1lUmVtYWluaW5nKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgdmlydHVhbCBib29sIHBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVy
biB0cnVlOyB9CiAKICNpZiBFTkFCTEUoSU1BR0VfQ09OVFJPTFMpCi0gICAgdmlydHVhbCBib29s
IHBhaW50SW1hZ2VDb250cm9sc0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWlu
dEltYWdlQ29udHJvbHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCiBwdWJsaWM6Ci0g
ICAgdm9pZCB1cGRhdGVDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0
KiwgQ29udHJvbFN0YXRlcyopIGNvbnN0OwotICAgIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBleHRy
YWN0Q29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0Owot
ICAgIGJvb2wgaXNBY3RpdmUoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBp
c0NoZWNrZWQoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc0luZGV0ZXJt
aW5hdGUoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc0VuYWJsZWQoY29u
c3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc0ZvY3VzZWQoY29uc3QgUmVuZGVy
T2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc1ByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0Kikg
Y29uc3Q7Ci0gICAgYm9vbCBpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKGNvbnN0IFJlbmRlck9i
amVjdCopIGNvbnN0OwotICAgIGJvb2wgaXNIb3ZlcmVkKGNvbnN0IFJlbmRlck9iamVjdCopIGNv
bnN0OwotICAgIGJvb2wgaXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChjb25zdCBSZW5kZXJPYmpl
Y3QqKSBjb25zdDsKLSAgICBib29sIGlzUmVhZE9ubHlDb250cm9sKGNvbnN0IFJlbmRlck9iamVj
dCopIGNvbnN0OwotICAgIGJvb2wgaXNEZWZhdWx0KGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0
OworICAgIHZvaWQgdXBkYXRlQ29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9i
amVjdCYsIENvbnRyb2xTdGF0ZXMqKSBjb25zdDsKKyAgICBDb250cm9sU3RhdGVzOjpTdGF0ZXMg
ZXh0cmFjdENvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QmKSBjb25z
dDsKKyAgICBib29sIGlzQWN0aXZlKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJv
b2wgaXNDaGVja2VkKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNJbmRl
dGVybWluYXRlKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNFbmFibGVk
KGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNGb2N1c2VkKGNvbnN0IFJl
bmRlck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVj
dCYpIGNvbnN0OworICAgIGJvb2wgaXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChjb25zdCBSZW5k
ZXJPYmplY3QmKSBjb25zdDsKKyAgICBib29sIGlzSG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3Qm
KSBjb25zdDsKKyAgICBib29sIGlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQoY29uc3QgUmVuZGVy
T2JqZWN0JikgY29uc3Q7CisgICAgYm9vbCBpc1JlYWRPbmx5Q29udHJvbChjb25zdCBSZW5kZXJP
YmplY3QmKSBjb25zdDsKKyAgICBib29sIGlzRGVmYXVsdChjb25zdCBSZW5kZXJPYmplY3QmKSBj
b25zdDsKIAogcHJpdmF0ZToKICAgICBtdXRhYmxlIENvbG9yIG1fYWN0aXZlU2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaApp
bmRleCA1YjlkODE1Yjg2MzM5M2VhYmNiNDdlYmNmYTJjZmUzZGI1YTllYTJhLi5mMzdmM2Y4YzM5
ZmRjNTUyOTg0MDkzMWVhMjZhYjZmNWY2ZjNhZWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MuaApAQCAtNDgsMzUgKzQ4LDM1IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgQ0ZTdHJpbmdSZWYgY29udGVudFNpemVDYXRlZ29yeSgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAg
dmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9i
amVjdCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxl
ZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXIm
IGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZhbHVlLgogICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2Jv
eERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveERlY29yYXRpb25z
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBv
dmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRSYWRpb0RlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRp
b0RlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFB1c2hCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50
QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFB1c2hCdXR0
b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVu
ZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludEZpbGVV
cGxvYWRJY29uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBSZW5kZXJP
YmplY3QqIGJ1dHRvblJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jiwg
SWNvbiosIEZpbGVVcGxvYWREZWNvcmF0aW9ucykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IHBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIGlucHV0
UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCYgYnV0dG9uUmVuZGVyZXIsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmLCBJY29uKiwgRmlsZVVwbG9hZERlY29yYXRpb25zKSBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZERlY29yYXRpb25zKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYURlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBh
aW50VGV4dEFyZWFEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25E
ZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0
aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVt
YlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBib29sIHBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBh
aW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1Nf
RUxFTUVOVCkKICAgICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhlIGFuaW1h
dGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KQEAgLTg0LDcgKzg0LDcgQEAgcHJvdGVjdGVkOgog
ICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9n
cmVzcyBiYXIuCiAgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVz
c0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBib29s
IHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCkBAIC05Myw3ICs5
Myw3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwog
CiAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNl
bGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTE1LDcgKzExNSw3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVJT1MoKSB7IH0KIAogICAgIGNv
bnN0IENvbG9yJiBzaGFkb3dDb2xvcigpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBhZGRSb3VuZGVk
Qm9yZGVyQ2xpcChSZW5kZXJPYmplY3QqIGJveCwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50
UmVjdCYpOworICAgIEZsb2F0UmVjdCBhZGRSb3VuZGVkQm9yZGVyQ2xpcChjb25zdCBSZW5kZXJP
YmplY3QmIGJveCwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgU3Ry
aW5nIG1fbWVkaWFDb250cm9sc1NjcmlwdDsKICAgICBTdHJpbmcgbV9tZWRpYUNvbnRyb2xzU3R5
bGVTaGVldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQppbmRl
eCAyNmYyZjU0MDY3N2U4MGM3NTMzMGJmZTljMzRkY2VlZjM0YjU3OTExLi5lOWVjMmJhMjljODYw
ZjFiZmE1NTUzZTk2MjViNWZjMDFlZGM3ODEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLm1tCkBAIC0zMTYsMTEgKzMxNiwxMSBAQCBjb25zdCBDb2xvciYgUmVu
ZGVyVGhlbWVJT1M6OnNoYWRvd0NvbG9yKCkgY29uc3QKICAgICByZXR1cm4gY29sb3I7CiB9CiAK
LUZsb2F0UmVjdCBSZW5kZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJvcmRlckNsaXAoUmVuZGVyT2Jq
ZWN0KiBib3gsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkK
K0Zsb2F0UmVjdCBSZW5kZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJvcmRlckNsaXAoY29uc3QgUmVu
ZGVyT2JqZWN0JiBib3gsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKICAgICAvLyBUbyBmaXggaW5uZXIgYm9yZGVyIGJsZWVkaW5nIGlzc3VlcyA8cmRh
cjovL3Byb2JsZW0vOTgxMjUwNz4sIHdlIGNsaXAgdG8gdGhlIG91dGVyIGJvcmRlciBhbmQgYXNz
ZXJ0IHRoYXQKICAgICAvLyB0aGUgYm9yZGVyIGlzIG9wYXF1ZSBvciB0cmFuc3BhcmVudCwgdW5s
ZXNzIHdlJ3JlIGNoZWNrZWQgYmVjYXVzZSBjaGVja2VkIHJhZGlvL2NoZWNrYm94ZXMgc2hvdyBu
byBibGVlZGluZy4KLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnN0eWxlKCk7CisgICAg
UmVuZGVyU3R5bGUmIHN0eWxlID0gYm94LnN0eWxlKCk7CiAgICAgUm91bmRlZFJlY3QgYm9yZGVy
ID0gaXNDaGVja2VkKGJveCkgPyBzdHlsZS5nZXRSb3VuZGVkSW5uZXJCb3JkZXJGb3IocmVjdCkg
OiBzdHlsZS5nZXRSb3VuZGVkQm9yZGVyRm9yKHJlY3QpOwogCiAgICAgaWYgKGJvcmRlci5pc1Jv
dW5kZWQoKSkKQEAgLTM1Nyw3ICszNTcsNyBAQCBzdGF0aWMgQ0dQb2ludCBzaG9ydGVuZWQoQ0dQ
b2ludCBzdGFydCwgQ0dQb2ludCBlbmQsIGZsb2F0IHdpZHRoKQogICAgIHJldHVybiBDR1BvaW50
TWFrZShzdGFydC54ICsgeCAqIHJhdGlvLCBzdGFydC55ICsgeSAqIHJhdGlvKTsKIH0KIAotYm9v
bCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveERlY29yYXRpb25zKFJlbmRlck9iamVjdCog
Ym94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jv
b2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJP
YmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludElu
Zm8uY29udGV4dCk7CiAgICAgRmxvYXRSZWN0IGNsaXAgPSBhZGRSb3VuZGVkQm9yZGVyQ2xpcChi
b3gsIHBhaW50SW5mby5jb250ZXh0LCByZWN0KTsKQEAgLTQwOCwxNyArNDA4LDE3IEBAIGJvb2wg
UmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJv
eCwgY29uc3QgUGFpbnRJbmZvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbnQgUmVuZGVyVGhl
bWVJT1M6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29u
c3QKK2ludCBSZW5kZXJUaGVtZUlPUzo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyKSBjb25zdAogewotICAgIGlmICghcmVuZGVyZXItPmlzQm94KCkpCisgICAg
aWYgKCFyZW5kZXJlci5pc0JveCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGNvbnN0IFJl
bmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOworICAgIGNvbnN0IFJlbmRlckJv
eCYgYm94ID0gKnRvUmVuZGVyQm94KCZyZW5kZXJlcik7CiAKLSAgICBpZiAoYm94LT5zdHlsZSgp
LmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQgfHwgYm94LT5zdHlsZSgpLmFwcGVhcmFuY2Uo
KSA9PSBSYWRpb1BhcnQpCi0gICAgICAgIHJldHVybiBib3gtPm1hcmdpblRvcCgpICsgYm94LT5o
ZWlnaHQoKSAtIDI7IC8vIFRoZSBiYXNlbGluZSBpcyAycHggdXAgZnJvbSB0aGUgYm90dG9tIG9m
IHRoZSBjaGVja2JveC9yYWRpbyBpbiBBcHBLaXQuCi0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBl
YXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gYm94LT5tYXJnaW5Ub3Ao
KSArIGJveC0+aGVpZ2h0KCkgLSA1OyAvLyBUaGlzIGlzIHRvIG1hdGNoIEFwcEtpdC4gVGhlcmUg
bWlnaHQgYmUgYSBiZXR0ZXIgd2F5IHRvIGNhbGN1bGF0ZSB0aGlzIHRob3VnaC4KKyAgICBpZiAo
Ym94LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydCB8fCBib3guc3R5bGUoKS5h
cHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KQorICAgICAgICByZXR1cm4gYm94Lm1hcmdpblRvcCgp
ICsgYm94LmhlaWdodCgpIC0gMjsgLy8gVGhlIGJhc2VsaW5lIGlzIDJweCB1cCBmcm9tIHRoZSBi
b3R0b20gb2YgdGhlIGNoZWNrYm94L3JhZGlvIGluIEFwcEtpdC4KKyAgICBpZiAoYm94LnN0eWxl
KCkuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICAgICAgcmV0dXJuIGJveC5tYXJn
aW5Ub3AoKSArIGJveC5oZWlnaHQoKSAtIDU7IC8vIFRoaXMgaXMgdG8gbWF0Y2ggQXBwS2l0LiBU
aGVyZSBtaWdodCBiZSBhIGJldHRlciB3YXkgdG8gY2FsY3VsYXRlIHRoaXMgdGhvdWdoLgogICAg
IHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihib3gpOwogfQogCkBAIC00NDUs
NyArNDQ1LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW4KICAgICBzdHlsZS0+c2V0Qm9yZGVy
UmFkaXVzKEludFNpemUobGVuZ3RoLnZhbHVlKCkgLyAyLjBmLCBsZW5ndGgudmFsdWUoKSAvIDIu
MGYpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRSYWRpb0RlY29yYXRpb25zKFJl
bmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UmFkaW9EZWNvcmF0aW9ucyhjb25z
dCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KCpwYWludEluZm8uY29udGV4dCk7CiAgICAgRmxvYXRSZWN0IGNsaXAgPSBhZGRSb3VuZGVkQm9y
ZGVyQ2xpcChib3gsIHBhaW50SW5mby5jb250ZXh0LCByZWN0KTsKQEAgLTQ3Myw5ICs0NzMsOSBA
QCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0
KiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJv
eCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29s
IFJlbmRlclRoZW1lSU9TOjpwYWludFRleHRGaWVsZERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9i
amVjdCYgYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnN0eWxlKCk7CisgICAgUmVuZGVy
U3R5bGUmIHN0eWxlID0gYm94LnN0eWxlKCk7CiAgICAgSW50UG9pbnQgcG9pbnQocmVjdC54KCkg
KyBzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSwgcmVjdC55KCkgKyBzdHlsZS5ib3JkZXJUb3BXaWR0
aCgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJ
bmZvLmNvbnRleHQpOwpAQCAtNDg1LDE0ICs0ODUsMTQgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6
cGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJ
bmYKICAgICAvLyBUaGlzIGdyYWRpZW50IGdldHMgZHJhd24gYmxhY2sgd2hlbiBwcmludGluZy4K
ICAgICAvLyBEbyBub3QgZHJhdyB0aGUgZ3JhZGllbnQgaWYgdGhlcmUgaXMgbm8gdmlzaWJsZSB0
b3AgYm9yZGVyLgogICAgIGJvb2wgdG9wQm9yZGVySXNJbnZpc2libGUgPSAhc3R5bGUuaGFzQm9y
ZGVyKCkgfHwgIXN0eWxlLmJvcmRlclRvcFdpZHRoKCkgfHwgc3R5bGUuYm9yZGVyVG9wSXNUcmFu
c3BhcmVudCgpOwotICAgIGlmICghYm94LT52aWV3KCkucHJpbnRpbmcoKSAmJiAhdG9wQm9yZGVy
SXNJbnZpc2libGUpCisgICAgaWYgKCFib3gudmlldygpLnByaW50aW5nKCkgJiYgIXRvcEJvcmRl
cklzSW52aXNpYmxlKQogICAgICAgICBkcmF3QXhpYWxHcmFkaWVudChwYWludEluZm8uY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCksIGdyYWRpZW50V2l0aE5hbWUoSW5zZXRHcmFkaWVudCksIHBv
aW50LCBGbG9hdFBvaW50KENHUG9pbnRNYWtlKHBvaW50LngoKSwgcG9pbnQueSgpICsgMy4wZikp
LCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVu
ZGVyVGhlbWVJT1M6OnBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jv
b2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJP
YmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7Ci0gICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMocmVuZGVyZXIsIHBh
aW50SW5mbywgcmVjdCk7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMoYm94
LCBwYWludEluZm8sIHJlY3QpOwogfQogCiBjb25zdCBpbnQgTWVudUxpc3RNaW5IZWlnaHQgPSAx
NTsKQEAgLTU4Miw5ICs1ODIsOSBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RNZW51TGlz
dEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bAogICAgIH0KIH0K
IAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJl
bmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0
aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gYm94LT5z
dHlsZSgpOworICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IGJveC5zdHlsZSgpOwogICAgIGZsb2F0
IGJvcmRlclRvcFdpZHRoID0gc3R5bGUuYm9yZGVyVG9wV2lkdGgoKTsKICAgICBGbG9hdFJlY3Qg
Y2xpcChyZWN0LngoKSArIHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpLCByZWN0LnkoKSArIHN0eWxl
LmJvcmRlclRvcFdpZHRoKCksIHJlY3Qud2lkdGgoKSAtIHN0eWxlLmJvcmRlckxlZnRXaWR0aCgp
IC0gc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCgpLCByZWN0LmhlaWdodCgpIC0gc3R5bGUuYm9yZGVy
VG9wV2lkdGgoKSAtIHN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKCkpOwogICAgIENHQ29udGV4dFJl
ZiBjZ0NvbnRleHQgPSBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CkBAIC02
MTIsNyArNjEyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRl
Y29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWkKIAogICAgIGZsb2F0IHNlcGFy
YXRvciA9IGNsaXAubWF4WCgpIC0gTWVudUxpc3RCdXR0b25QYWRkaW5nUmlnaHQ7CiAKLSAgICBi
b3gtPmRyYXdMaW5lRm9yQm94U2lkZShwYWludEluZm8uY29udGV4dCwgc2VwYXJhdG9yIC0gYm9y
ZGVyVG9wV2lkdGgsIGNsaXAueSgpLCBzZXBhcmF0b3IsIGNsaXAubWF4WSgpLCBCU1JpZ2h0LCBz
dHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciksIHN0
eWxlLmJvcmRlclRvcFN0eWxlKCksIDAsIDApOworICAgIGJveC5kcmF3TGluZUZvckJveFNpZGUo
cGFpbnRJbmZvLmNvbnRleHQsIHNlcGFyYXRvciAtIGJvcmRlclRvcFdpZHRoLCBjbGlwLnkoKSwg
c2VwYXJhdG9yLCBjbGlwLm1heFkoKSwgQlNSaWdodCwgc3R5bGUudmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpLCBzdHlsZS5ib3JkZXJUb3BTdHlsZSgpLCAw
LCAwKTsKIAogICAgIEZsb2F0UmVjdCBidXR0b25DbGlwKHNlcGFyYXRvciAtIGFkanVzdFRvcCwg
Y2xpcC55KCkgLSBhZGp1c3RUb3AsIE1lbnVMaXN0QnV0dG9uUGFkZGluZ1JpZ2h0ICsgYWRqdXN0
VG9wICsgYWRqdXN0UmlnaHQsIGNsaXAuaGVpZ2h0KCkgKyBhZGp1c3RUb3AgKyBhZGp1c3RCb3R0
b20pOwogCkBAIC02MzEsNyArNjMxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51
TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWkKIAogICAg
IC8vIFBhaW50IEluZGljYXRvcnMuCiAKLSAgICBpZiAoYm94LT5pc01lbnVMaXN0KCkgJiYgdG9I
VE1MU2VsZWN0RWxlbWVudChib3gtPm5vZGUoKSktPm11bHRpcGxlKCkpIHsKKyAgICBpZiAoYm94
LmlzTWVudUxpc3QoKSAmJiB0b0hUTUxTZWxlY3RFbGVtZW50KGJveC5ub2RlKCkpLT5tdWx0aXBs
ZSgpKSB7CiAgICAgICAgIGludCBzaXplID0gMjsKICAgICAgICAgaW50IGNvdW50ID0gMzsKICAg
ICAgICAgaW50IHBhZGRpbmcgPSAzOwpAQCAtNjg0LDEwICs2ODQsMTAgQEAgdm9pZCBSZW5kZXJU
aGVtZUlPUzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3Rvciwg
UmVuZGVyU3R5bGUKICAgICBzdHlsZS0+c2V0Qm9yZGVyUmFkaXVzKExlbmd0aFNpemUocmFkaXVz
V2lkdGgsIHJhZGl1c0hlaWdodCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNs
aWRlclRyYWNrKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xpZGVyVHJh
Y2soY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEludFJlY3QgdHJhY2tDbGlwID0gcmVjdDsKLSAg
ICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnN0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUmIHN0
eWxlID0gYm94LnN0eWxlKCk7CiAKICAgICBib29sIGlzSG9yaXpvbnRhbCA9IHRydWU7CiAgICAg
c3dpdGNoIChzdHlsZS5hcHBlYXJhbmNlKCkpIHsKQEAgLTc3OSw3ICs3NzksNyBAQCB2b2lkIFJl
bmRlclRoZW1lSU9TOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xp
ZGVyVGh1bWJEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lSU9TOjpwYWlu
dFNsaWRlclRodW1iRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAgIEZs
b2F0UmVjdCBjbGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8uY29udGV4
dCwgcmVjdCk7CkBAIC04MDcsOSArODA3LDkgQEAgZG91YmxlIFJlbmRlclRoZW1lSU9TOjphbmlt
YXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKICAgICBy
ZXR1cm4gMDsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0JhcihSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFyZW5kZXJlci0+aXNQcm9ncmVzcygpKQorICAg
IGlmICghcmVuZGVyZXIuaXNQcm9ncmVzcygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IGNvbnN0IGludCBwcm9ncmVzc0JhckhlaWdodCA9IDk7CkBAIC04MzYsNyArODM2LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBjb25zdCBQYWludEluZm8mIHAKICAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEu
MCwgQ29sb3IoMHg4ZCwgMHg4ZCwgMHg4ZCkpOwogICAgIGNvbnRleHQtPnNldFN0cm9rZUdyYWRp
ZW50KHN0cm9rZUdyYWRpZW50LnJlbGVhc2UoKSk7CiAKLSAgICBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvclNwYWNlKCk7CisgICAgQ29sb3JTcGFjZSBjb2xv
clNwYWNlID0gcmVuZGVyZXIuc3R5bGUoKS5jb2xvclNwYWNlKCk7CiAgICAgY29udGV4dC0+c2V0
RmlsbENvbG9yKENvbG9yKDI1NSwgMjU1LCAyNTUpLCBjb2xvclNwYWNlKTsKIAogICAgIFBhdGgg
dHJhY2tQYXRoOwpAQCAtODU3LDEwICs4NTcsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFp
bnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHAK
IAogICAgIGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0LngoKSwgdmVydGljYWxSZW5k
ZXJpbmdQb3NpdGlvbiwgcmVjdC53aWR0aCgpLCB1cHBlckdyYWRpZW50SGVpZ2h0KSk7CiAKLSAg
ICBSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKHJlbmRl
cmVyKTsKLSAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkgeworICAgIGNv
bnN0IFJlbmRlclByb2dyZXNzJiByZW5kZXJQcm9ncmVzcyA9ICp0b1JlbmRlclByb2dyZXNzKCZy
ZW5kZXJlcik7CisgICAgaWYgKHJlbmRlclByb2dyZXNzLmlzRGV0ZXJtaW5hdGUoKSkgewogICAg
ICAgICAvLyAyKSBEcmF3IHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgICAgIGRvdWJsZSBwb3NpdGlv
biA9IGNsYW1wVG8ocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCksIDAuMCwgMS4wKTsKKyAgICAg
ICAgZG91YmxlIHBvc2l0aW9uID0gY2xhbXBUbyhyZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpLCAw
LjAsIDEuMCk7CiAgICAgICAgIGRvdWJsZSBiYXJXaWR0aCA9IHBvc2l0aW9uICogcmVjdC53aWR0
aCgpOwogICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGJhckdyYWRpZW50ID0gR3JhZGllbnQ6OmNy
ZWF0ZShGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC41
KSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dy
ZXNzQmFySGVpZ2h0IC0gMSkpOwogICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAu
MCwgQ29sb3IoMTk1LCAyMTcsIDI0NykpOwpAQCAtODc5LDcgKzg3OSw3IEBAIGJvb2wgUmVuZGVy
VGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3Qg
UGFpbnRJbmZvJiBwCiAKICAgICAgICAgUGF0aCBiYXJQYXRoOwogICAgICAgICBpbnQgbGVmdCA9
IHJlY3QueCgpOwotICAgICAgICBpZiAoIXJlbmRlclByb2dyZXNzLT5zdHlsZSgpLmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSkKKyAgICAgICAgaWYgKCFyZW5kZXJQcm9ncmVzcy5zdHlsZSgpLmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIGxlZnQgPSByZWN0Lm1heFgoKSAt
IGJhcldpZHRoOwogICAgICAgICBGbG9hdFJlY3QgYmFyUmVjdChsZWZ0ICsgMC4yNSwgdmVydGlj
YWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuMjUsIHN0ZDo6bWF4KGJhcldpZHRoIC0gMC41LCAwLjAp
LCBwcm9ncmVzc0JhckhlaWdodCAtIDAuNSk7CiAgICAgICAgIGJhclBhdGguYWRkUm91bmRlZFJl
Y3QoYmFyUmVjdCwgcm91bmRlZENvcm5lclJhZGl1cyk7CkBAIC05MjEsNyArOTIxLDcgQEAgdm9p
ZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUKICAgICBhZGp1c3RSb3VuZEJvcmRlclJhZGl1cygqc3R5bGUs
IGJveCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0
aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNlYXJjaEZpZWxkRGVj
b3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRleHRGaWVsZERl
Y29yYXRpb25zKGJveCwgcGFpbnRJbmZvLCByZWN0KTsKIH0KQEAgLTk0NywxOCArOTQ3LDE4IEBA
IHZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNl
bGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5CiAgICAgYWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoKnN0
eWxlLCBib3gpOwogfQogCi1ib29sIFJlbmRlclRoZW1lSU9TOjpwYWludEJ1dHRvbkRlY29yYXRp
b25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50QnV0dG9uRGVjb3JhdGlv
bnMoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFB1c2hCdXR0b25EZWNvcmF0
aW9ucyhib3gsIHBhaW50SW5mbywgcmVjdCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBh
aW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6
OnBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgYm94LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKICAg
ICBGbG9hdFJlY3QgY2xpcCA9IGFkZFJvdW5kZWRCb3JkZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNv
bnRleHQsIHJlY3QpOwogCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5j
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBpZiAoYm94LT5zdHlsZSgpLnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuaXNEYXJrKCkpCisgICAg
aWYgKGJveC5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcikuaXNEYXJrKCkpCiAgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50KGNnQ29udGV4dCwg
Z3JhZGllbnRXaXRoTmFtZShDb252ZXhHcmFkaWVudCksIGNsaXAubG9jYXRpb24oKSwgRmxvYXRQ
b2ludChjbGlwLngoKSwgY2xpcC5tYXhZKCkpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKICAgICBl
bHNlIHsKICAgICAgICAgZHJhd0F4aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhO
YW1lKFNoYWRlR3JhZGllbnQpLCBjbGlwLmxvY2F0aW9uKCksIEZsb2F0UG9pbnQoY2xpcC54KCks
IGNsaXAubWF4WSgpKSwgTGluZWFySW50ZXJwb2xhdGlvbik7CkBAIC05ODIsMTIgKzk4MiwxMiBA
QCBjb25zdCBpbnQga1RodW1ibmFpbEJvcmRlckNvcm5lclJhZGl1cyA9IDE7CiBjb25zdCBpbnQg
a1Zpc2libGVCYWNrZ3JvdW5kSW1hZ2VXaWR0aCA9IDE7CiBjb25zdCBpbnQga011bHRpcGxlVGh1
bWJuYWlsU2hyaW5rU2l6ZSA9IDI7CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50RmlsZVVw
bG9hZEljb25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBSZW5kZXJPYmplY3QqIGJ1dHRvblJl
bmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCwg
SWNvbiogaWNvbiwgRmlsZVVwbG9hZERlY29yYXRpb25zIGZpbGVVcGxvYWREZWNvcmF0aW9ucykK
K2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucyhjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5kZXJPYmplY3QmIGJ1dHRvblJlbmRlcmVyLCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCwgSWNvbiogaWNvbiwg
RmlsZVVwbG9hZERlY29yYXRpb25zIGZpbGVVcGxvYWREZWNvcmF0aW9ucykKIHsKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKIAog
ICAgIEludFNpemUgY29ybmVyU2l6ZShrVGh1bWJuYWlsQm9yZGVyQ29ybmVyUmFkaXVzLCBrVGh1
bWJuYWlsQm9yZGVyQ29ybmVyUmFkaXVzKTsKLSAgICBDb2xvciBwaWN0dXJlRnJhbWVDb2xvciA9
IGJ1dHRvblJlbmRlcmVyID8gYnV0dG9uUmVuZGVyZXItPnN0eWxlKCkudmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpIDogQ29sb3IoNzYuMGYsIDc2LjBmLCA3
Ni4wZik7CisgICAgQ29sb3IgcGljdHVyZUZyYW1lQ29sb3IgPSBidXR0b25SZW5kZXJlci5zdHls
ZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yKTsKIAog
ICAgIEludFJlY3QgdGh1bWJuYWlsUGljdHVyZUZyYW1lUmVjdCA9IHJlY3Q7CiAgICAgSW50UmVj
dCB0aHVtYm5haWxSZWN0ID0gcmVjdDsKQEAgLTEwMDAsNyArMTAwMCw3IEBAIGJvb2wgUmVuZGVy
VGhlbWVJT1M6OnBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBS
ZW5kZXJPYmplY3QqCiAgICAgICAgIHRodW1ibmFpbFJlY3QuY29udHJhY3Qoa011bHRpcGxlVGh1
bWJuYWlsU2hyaW5rU2l6ZSwga011bHRpcGxlVGh1bWJuYWlsU2hyaW5rU2l6ZSk7CiAKICAgICAg
ICAgLy8gQmFja2dyb3VuZCBwaWN0dXJlIGZyYW1lIGFuZCBzaW1wbGUgYmFja2dyb3VuZCBpY29u
IHdpdGggYSBncmFkaWVudCBtYXRjaGluZyB0aGUgYnV0dG9uLgotICAgICAgICBDb2xvciBiYWNr
Z3JvdW5kSW1hZ2VDb2xvciA9IGJ1dHRvblJlbmRlcmVyID8gQ29sb3IoYnV0dG9uUmVuZGVyZXIt
PnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KS5yZ2IoKSkgOiBDb2xvcigyMDYuMGYsIDIwNi4wZiwgMjA2LjBmKTsKKyAgICAgICAgQ29sb3Ig
YmFja2dyb3VuZEltYWdlQ29sb3IgPSBDb2xvcihidXR0b25SZW5kZXJlci5zdHlsZSgpLnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikucmdiKCkpOwogICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3Qo
dGh1bWJuYWlsUGljdHVyZUZyYW1lUmVjdCwgY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSwgY29ybmVy
U2l6ZSwgY29ybmVyU2l6ZSksIHBpY3R1cmVGcmFtZUNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KHRodW1ibmFpbFJlY3QsIGJh
Y2tncm91bmRJbWFnZUNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAppbmRleCAwZmJlNjExYTJiY2Y4
NDNjMjA2YWU5ZmZjMTA1ZDE1ZmJjNjBjYWM0Li4yYjE5ZDQ3ZDY5NWMzOWQyZjg4NzY5ZTMyNDE4
Y2Y0M2JiZTIyYTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
aApAQCAtNDQsMTIgKzQ0LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5k
ZXJUaGVtZT4gY3JlYXRlKCk7CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRy
b2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KLSAg
ICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0Kikg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRl
ck9iamVjdCYpIGNvbnN0OwogCiAgICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55
IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgogICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqLCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRl
ck9iamVjdCYsIEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRy
b2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmls
bExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CiAKQEAgLTgyLDEz
ICs4MiwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdU
b3AoUmVuZGVyU3R5bGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFk
ZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50
Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNh
dG9yKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwb3BzTWVudUJ5QXJyb3dLZXlzKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQp
CiAgICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRl
ciosIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZXRlcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01l
dGVyKENvbnRyb2xQYXJ0KSBjb25zdDsKICNlbmRpZgogCkBAIC05NywxNCArOTcsMTQgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jl
c3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKICAgICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlv
biBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgogICAgIHZpcnR1YWwgZG91
YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25z
dDsKLSAgICB2aXJ0dWFsIEludFJlY3QgcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJl
bmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IEludFJlY3QgcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgdmlydHVhbCBDb2xv
ciBzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEKSBjb25zdDsKICAgICAvLyBDb250cm9scyBjb2xvciB2
YWx1ZXMgcmV0dXJuZWQgZnJvbSBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKCkuIHN5c3RlbUNvbG9y
KCkgd2lsbCBiZSB1c2VkIHdoZW4gZmFsc2UuCiAgICAgdmlydHVhbCBib29sIHVzZXNUZXN0TW9k
ZUZvY3VzUmluZ0NvbG9yKCkgY29uc3Q7CiAgICAgLy8gQSB2aWV3IGFzc29jaWF0ZWQgdG8gdGhl
IGNvbnRhaW5lZCBkb2N1bWVudC4gU3ViY2xhc3NlcyBtYXkgbm90IGhhdmUgc3VjaCBhIHZpZXcg
YW5kIHJldHVybiBhIGZha2UuCi0gICAgTlNWaWV3KiBkb2N1bWVudFZpZXdGb3IoUmVuZGVyT2Jq
ZWN0KikgY29uc3Q7CisgICAgTlNWaWV3KiBkb2N1bWVudFZpZXdGb3IoY29uc3QgUmVuZGVyT2Jq
ZWN0JikgY29uc3Q7CiAKIAogcHJvdGVjdGVkOgpAQCAtMTIzLDQzICsxMjMsNDMgQEAgcHJvdGVj
dGVkOgogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0
RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRl
eHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0
QXJlYShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRpZgogCi0gICAgdmlydHVhbCBib29sIHBh
aW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVh
bCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVt
YlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hG
aWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hG
aWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzQ2xvc2VkQ2FwdGlvbmluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
QEAgLTE2NywxNCArMTY3LDE0IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29s
IHBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbmFwc2hvdHRl
ZFBsdWdpbk92ZXJsYXkoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFt
ZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0aCwgYm9vbCBt
dWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRSZWN0IGluZmxh
dGVSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgaW50KiBtYXJnaW5z
LCBmbG9hdCB6b29tTGV2ZWwgPSAxLjBmKSBjb25zdDsKIAotICAgIEZsb2F0UmVjdCBjb252ZXJ0
VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBS
ZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNv
bnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0
KGNvbnN0IFJlbmRlck9iamVjdCYgaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0JiBw
YXJ0UmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Q7CiAKICAgICAvLyBHZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIGZvbnQu
IFVzZWQgYnkgc29tZSBvZiB0aGUgY29udHJvbHMgKGxpa2UgYnV0dG9ucykuCiAgICAgTlNDb250
cm9sU2l6ZSBjb250cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKQEAgLTE4NSwy
NiArMTg1LDI2IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBzaXplRm9yU3lzdGVtRm9udChSZW5k
ZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKICAgICB2b2lkIHNldEZvbnRG
cm9tQ29udHJvbFNpemUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgTlNDb250cm9sU2l6
ZSkgY29uc3Q7CiAKLSAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBS
ZW5kZXJPYmplY3QqKTsKLSAgICB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwqLCBjb25z
dCBSZW5kZXJPYmplY3QqKTsKLSAgICB2b2lkIHVwZGF0ZUZvY3VzZWRTdGF0ZShOU0NlbGwqLCBj
b25zdCBSZW5kZXJPYmplY3QqKTsKLSAgICB2b2lkIHVwZGF0ZVByZXNzZWRTdGF0ZShOU0NlbGwq
LCBjb25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShOU0Nl
bGwqLCBjb25zdCBSZW5kZXJPYmplY3QmKTsKKyAgICB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShO
U0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QmKTsKKyAgICB2b2lkIHVwZGF0ZUZvY3VzZWRTdGF0
ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVByZXNzZWRT
dGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QmKTsKICAgICAvLyBBbiBvcHRpb25hbCBo
b29rIGZvciBzdWJjbGFzc2VzIHRvIHVwZGF0ZSB0aGUgY29udHJvbCB0aW50IG9mIE5TQ2VsbC4K
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQWN0aXZlU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVy
T2JqZWN0KikgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFjdGl2ZVN0YXRlKE5TQ2VsbCos
IGNvbnN0IFJlbmRlck9iamVjdCYpIHsgfQogCiAgICAgLy8gSGVscGVycyBmb3IgYWRqdXN0aW5n
IGFwcGVhcmFuY2UgYW5kIGZvciBwYWludGluZwogCi0gICAgdm9pZCBzZXRQb3B1cEJ1dHRvbkNl
bGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBz
ZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0
Jik7CiAgICAgY29uc3QgSW50U2l6ZSogcG9wdXBCdXR0b25TaXplcygpIGNvbnN0OwogICAgIGNv
bnN0IGludCogcG9wdXBCdXR0b25NYXJnaW5zKCkgY29uc3Q7CiAgICAgY29uc3QgaW50KiBwb3B1
cEJ1dHRvblBhZGRpbmcoTlNDb250cm9sU2l6ZSkgY29uc3Q7Ci0gICAgdm9pZCBwYWludE1lbnVM
aXN0QnV0dG9uR3JhZGllbnRzKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2b2lkIHBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIGNv
bnN0IEludFNpemUqIG1lbnVMaXN0U2l6ZXMoKSBjb25zdDsKIAogICAgIGNvbnN0IEludFNpemUq
IHNlYXJjaEZpZWxkU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBJbnRTaXplKiBjYW5jZWxCdXR0
b25TaXplcygpIGNvbnN0OwogICAgIGNvbnN0IEludFNpemUqIHJlc3VsdHNCdXR0b25TaXplcygp
IGNvbnN0OwotICAgIHZvaWQgc2V0U2VhcmNoQ2VsbFN0YXRlKFJlbmRlck9iamVjdCosIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2b2lkIHNldFNlYXJjaENlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdm9pZCBzZXRTZWFyY2hGaWVsZFNpemUoUmVuZGVy
U3R5bGUqKSBjb25zdDsKIAogICAgIE5TUG9wVXBCdXR0b25DZWxsICpwb3B1cEJ1dHRvbigpIGNv
bnN0OwpAQCAtMjI2LDggKzIyNiw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShJ
TUFHRV9DT05UUk9MUykKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbWFnZUNvbnRyb2xzQnV0dG9u
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIEludFNpemUgaW1hZ2VDb250cm9sc0J1dHRvblNpemUoY29uc3QgUmVu
ZGVyT2JqZWN0KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50SW1hZ2VD
b250cm9sc0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBJbnRTaXplIGltYWdlQ29udHJvbHNC
dXR0b25TaXplKGNvbnN0IGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAg
IE5TU2VydmljZXNSb2xsb3ZlckJ1dHRvbkNlbGwgKnNlcnZpY2VzUm9sbG92ZXJCdXR0b25DZWxs
KCkgY29uc3Q7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLm1tCmluZGV4IDI1OGM3YWUyYjJmYmFkYjI1MGIxYjQ0OGU0MDg2MmE5OWVjMDY4MGMuLmNk
MGU3OTE0ODA4ZTJlYTI2ZWZkZWM5ZjE0ODE1MzQwZWI1OWVlYjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTIxNywxMCArMjE3LDEwIEBAIFJlbmRl
clRoZW1lTWFjOjp+UmVuZGVyVGhlbWVNYWMoKQogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9ub3RpZmljYXRpb25PYnNlcnZlci5nZXQo
KV07CiB9CiAKLU5TVmlldyogUmVuZGVyVGhlbWVNYWM6OmRvY3VtZW50Vmlld0ZvcihSZW5kZXJP
YmplY3QqIG8pIGNvbnN0CitOU1ZpZXcqIFJlbmRlclRoZW1lTWFjOjpkb2N1bWVudFZpZXdGb3Io
Y29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewogICAgIENvbnRyb2xTdGF0ZXMgc3RhdGVz
KGV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIobykpOwotICAgIHJldHVybiBUaGVtZU1h
Yzo6ZW5zdXJlZFZpZXcoJm8tPnZpZXcoKS5mcmFtZVZpZXcoKSwgJnN0YXRlcyk7CisgICAgcmV0
dXJuIFRoZW1lTWFjOjplbnN1cmVkVmlldygmby52aWV3KCkuZnJhbWVWaWV3KCksICZzdGF0ZXMp
OwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNjAyLDkgKzYwMiw5IEBAIGJvb2wgUmVuZGVy
VGhlbWVNYWM6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0
IEJvcmRlckRhdGEmCiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5
bGUsIGJvcmRlciwgYmFja2dyb3VuZCwgYmFja2dyb3VuZENvbG9yKTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBJbnRS
ZWN0JiByKQordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVu
ZGVyT2JqZWN0JiBvLCBJbnRSZWN0JiByKQogewotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvLT5z
dHlsZSgpLmFwcGVhcmFuY2UoKTsKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gby5zdHlsZSgpLmFw
cGVhcmFuY2UoKTsKIAogI2lmIFVTRShORVdfVEhFTUUpCiAgICAgc3dpdGNoIChwYXJ0KSB7CkBA
IC02MjEsNyArNjIxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UmVwYWludFJlY3Qo
Y29uc3QgUmVuZGVyT2JqZWN0KiBvLCBJbnRSZWN0JiByKQogICAgIH0KICNlbmRpZgogCi0gICAg
ZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQg
em9vbUxldmVsID0gby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIGlmIChwYXJ0ID09
IE1lbnVsaXN0UGFydCkgewogICAgICAgICBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShvLCByKTsK
QEAgLTY1MCwyMCArNjUwLDIwIEBAIEludFJlY3QgUmVuZGVyVGhlbWVNYWM6OmluZmxhdGVSZWN0
KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotRmxvYXRSZWN0IFJlbmRlclRoZW1lTWFjOjpjb252ZXJ0VG9QYWludGlu
Z1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmpl
Y3QqIHBhcnRSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJl
Y3QmIHIpIGNvbnN0CitGbG9hdFJlY3QgUmVuZGVyVGhlbWVNYWM6OmNvbnZlcnRUb1BhaW50aW5n
UmVjdChjb25zdCBSZW5kZXJPYmplY3QmIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVj
dCYgcGFydFJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVj
dCYgcikgY29uc3QKIHsKICAgICBGbG9hdFJlY3QgcGFydFJlY3QoaW5wdXRSZWN0KTsKIAogICAg
IC8vIENvbXB1dGUgYW4gb2Zmc2V0IGJldHdlZW4gdGhlIHBhcnQgcmVuZGVyZXIgYW5kIHRoZSBp
bnB1dCByZW5kZXJlcgogICAgIEZsb2F0U2l6ZSBvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcjsKLSAg
ICBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcGFydFJlbmRlcmVyOwotICAgIHdoaWxl
IChyZW5kZXJlciAmJiByZW5kZXJlciAhPSBpbnB1dFJlbmRlcmVyKSB7CisgICAgY29uc3QgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9ICZwYXJ0UmVuZGVyZXI7CisgICAgd2hpbGUgKHJlbmRlcmVy
ICYmIHJlbmRlcmVyICE9ICZpbnB1dFJlbmRlcmVyKSB7CiAgICAgICAgIFJlbmRlckVsZW1lbnQq
IGNvbnRhaW5pbmdSZW5kZXJlciA9IHJlbmRlcmVyLT5jb250YWluZXIoKTsKICAgICAgICAgb2Zm
c2V0RnJvbUlucHV0UmVuZGVyZXIgLT0gcm91bmRlZEludFNpemUocmVuZGVyZXItPm9mZnNldEZy
b21Db250YWluZXIoY29udGFpbmluZ1JlbmRlcmVyLCBMYXlvdXRQb2ludCgpKSk7CiAgICAgICAg
IHJlbmRlcmVyID0gY29udGFpbmluZ1JlbmRlcmVyOwogICAgIH0KICAgICAvLyBJZiB0aGUgaW5w
dXQgcmVuZGVyZXIgd2FzIG5vdCBhIGNvbnRhaW5lciwgc29tZXRoaW5nIHdlbnQgd3JvbmcKLSAg
ICBBU1NFUlQocmVuZGVyZXIgPT0gaW5wdXRSZW5kZXJlcik7CisgICAgQVNTRVJUKHJlbmRlcmVy
ID09ICZpbnB1dFJlbmRlcmVyKTsKICAgICAvLyBNb3ZlIHRoZSByZWN0IGludG8gcGFydFJlbmRl
cmVyJ3MgY29vcmRzCiAgICAgcGFydFJlY3QubW92ZShvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcik7
CiAgICAgLy8gQWNjb3VudCBmb3IgdGhlIGxvY2FsIGRyYXdpbmcgb2Zmc2V0ICh0eCwgdHkpCkBA
IC02NzIsNyArNjcyLDcgQEAgRmxvYXRSZWN0IFJlbmRlclRoZW1lTWFjOjpjb252ZXJ0VG9QYWlu
dGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmUKICAgICByZXR1cm4gcGFy
dFJlY3Q7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUNoZWNrZWRTdGF0ZShOU0Nl
bGwqIGNlbGwsIGNvbnN0IFJlbmRlck9iamVjdCogbykKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnVw
ZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJlbmRlck9iamVjdCYgbykKIHsK
ICAgICBib29sIG9sZEluZGV0ZXJtaW5hdGUgPSBbY2VsbCBzdGF0ZV0gPT0gTlNNaXhlZFN0YXRl
OwogICAgIGJvb2wgaW5kZXRlcm1pbmF0ZSA9IGlzSW5kZXRlcm1pbmF0ZShvKTsKQEAgLTY4OCw3
ICs2ODgsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxs
KiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCiAgICAgICAgIFtjZWxsIHNldFN0YXRlOmNo
ZWNrZWQgPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1h
Yzo6dXBkYXRlRW5hYmxlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0KiBv
KQordm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKE5TQ2VsbCogY2VsbCwg
Y29uc3QgUmVuZGVyT2JqZWN0JiBvKQogewogICAgIGJvb2wgb2xkRW5hYmxlZCA9IFtjZWxsIGlz
RW5hYmxlZF07CiAgICAgYm9vbCBlbmFibGVkID0gaXNFbmFibGVkKG8pOwpAQCAtNjk2LDIzICs2
OTYsMjMgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKE5TQ2VsbCog
Y2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvKQogICAgICAgICBbY2VsbCBzZXRFbmFibGVkOmVu
YWJsZWRdOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVGb2N1c2VkU3RhdGUoTlND
ZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCit2b2lkIFJlbmRlclRoZW1lTWFjOjp1
cGRhdGVGb2N1c2VkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QmIG8pCiB7
CiAgICAgYm9vbCBvbGRGb2N1c2VkID0gW2NlbGwgc2hvd3NGaXJzdFJlc3BvbmRlcl07Ci0gICAg
Ym9vbCBmb2N1c2VkID0gaXNGb2N1c2VkKG8pICYmIG8tPnN0eWxlKCkub3V0bGluZVN0eWxlSXNB
dXRvKCk7CisgICAgYm9vbCBmb2N1c2VkID0gaXNGb2N1c2VkKG8pICYmIG8uc3R5bGUoKS5vdXRs
aW5lU3R5bGVJc0F1dG8oKTsKICAgICBpZiAoZm9jdXNlZCAhPSBvbGRGb2N1c2VkKQogICAgICAg
ICBbY2VsbCBzZXRTaG93c0ZpcnN0UmVzcG9uZGVyOmZvY3VzZWRdOwogfQogCi12b2lkIFJlbmRl
clRoZW1lTWFjOjp1cGRhdGVQcmVzc2VkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJP
YmplY3QqIG8pCit2b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVQcmVzc2VkU3RhdGUoTlNDZWxs
KiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QmIG8pCiB7CiAgICAgYm9vbCBvbGRQcmVzc2VkID0g
W2NlbGwgaXNIaWdobGlnaHRlZF07Ci0gICAgYm9vbCBwcmVzc2VkID0gby0+bm9kZSgpICYmIG8t
Pm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChvLT5ub2RlKCkpLT5hY3RpdmUo
KTsKKyAgICBib29sIHByZXNzZWQgPSBvLm5vZGUoKSAmJiBvLm5vZGUoKS0+aXNFbGVtZW50Tm9k
ZSgpICYmIHRvRWxlbWVudChvLm5vZGUoKSktPmFjdGl2ZSgpOwogICAgIGlmIChwcmVzc2VkICE9
IG9sZFByZXNzZWQpCiAgICAgICAgIFtjZWxsIHNldEhpZ2hsaWdodGVkOnByZXNzZWRdOwogfQog
Ci1ib29sIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJP
YmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU3VwcG9ydHNUaW50
cyhjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7CiAgICAgLy8gQW4gYWx0ZXJuYXRlIHdh
eSB0byBpbXBsZW1lbnQgdGhpcyB3b3VsZCBiZSB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIGNlbGwg
b2JqZWN0CiAgICAgLy8gYW5kIGNhbGwgdGhlIHByaXZhdGUgX25lZWRSZWRyYXdPbldpbmRvd0No
YW5nZWRLZXlTdGF0ZSBtZXRob2QuIEFuIGFkdmFudGFnZSBvZgpAQCAtNzIzLDcgKzcyMyw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9i
amVjdCogbykgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQ2hlY2tib3hl
cyBvbmx5IGhhdmUgdGludCB3aGVuIGNoZWNrZWQuCi0gICAgaWYgKG8tPnN0eWxlKCkuYXBwZWFy
YW5jZSgpID09IENoZWNrYm94UGFydCkKKyAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9
PSBDaGVja2JveFBhcnQpCiAgICAgICAgIHJldHVybiBpc0NoZWNrZWQobyk7CiAKICAgICAvLyBG
b3Igbm93IGFzc3VtZSBvdGhlciBjb250cm9scyBoYXZlIHRpbnQgaWYgZW5hYmxlZC4KQEAgLTgx
MSw3ICs4MTEsNyBAQCBOU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZv
clN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHJldHVybiBOU01pbmlD
b250cm9sU2l6ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0RmllbGQoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVj
dCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAg
ICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29u
dGV4dCk7CiAKQEAgLTgzMSw3ICs4MzEsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RU
ZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kgogewog
fQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAg
ICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC04NDIsNyArODQyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRD
YXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mIHBhaW4KICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEFyZWEo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsK
ICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5j
b250ZXh0KTsKICAgICB3a0RyYXdCZXplbGVkVGV4dEFyZWEociwgaXNFbmFibGVkKG8pICYmICFp
c1JlYWRPbmx5Q29udHJvbChvKSk7CkBAIC04ODEsMjEgKzg4MSwyMSBAQCBjb25zdCBpbnQqIFJl
bmRlclRoZW1lTWFjOjpwb3B1cEJ1dHRvblBhZGRpbmcoTlNDb250cm9sU2l6ZSBzaXplKSBjb25z
dAogICAgIHJldHVybiBwYWRkaW5nW3NpemVdOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KGNv
bnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHIpCiB7CiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4
dChwYWludEluZm8uY29udGV4dCk7CiAgICAgc2V0UG9wdXBCdXR0b25DZWxsU3RhdGUobywgcik7
CiAKICAgICBOU1BvcFVwQnV0dG9uQ2VsbCogcG9wdXBCdXR0b24gPSB0aGlzLT5wb3B1cEJ1dHRv
bigpOwogCi0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7
CisgICAgZmxvYXQgem9vbUxldmVsID0gby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKICAgICBJ
bnRTaXplIHNpemUgPSBwb3B1cEJ1dHRvblNpemVzKClbW3BvcHVwQnV0dG9uIGNvbnRyb2xTaXpl
XV07CiAgICAgc2l6ZS5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSAqIHpvb21MZXZlbCk7CiAgICAg
c2l6ZS5zZXRXaWR0aChyLndpZHRoKCkpOwogCiAgICAgLy8gTm93IGluZmxhdGUgaXQgdG8gYWNj
b3VudCBmb3IgdGhlIHNoYWRvdy4KICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHI7Ci0gICAg
aWYgKHIud2lkdGgoKSA+PSBtaW5pbXVtTWVudUxpc3RTaXplKCZvLT5zdHlsZSgpKSkKKyAgICBp
ZiAoci53aWR0aCgpID49IG1pbmltdW1NZW51TGlzdFNpemUoJm8uc3R5bGUoKSkpCiAgICAgICAg
IGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgcG9wdXBCdXR0
b25NYXJnaW5zKCksIHpvb21MZXZlbCk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKQEAgLTkxMyw3ICs5MTMsNyBAQCBib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sCiAKICAgICBOU1ZpZXcgKnZpZXcgPSBkb2N1bWVudFZpZXdGb3Io
byk7CiAgICAgW3BvcHVwQnV0dG9uIGRyYXdXaXRoRnJhbWU6aW5mbGF0ZWRSZWN0IGluVmlldzp2
aWV3XTsKLSAgICBpZiAoaXNGb2N1c2VkKG8pICYmIG8tPnN0eWxlKCkub3V0bGluZVN0eWxlSXNB
dXRvKCkpCisgICAgaWYgKGlzRm9jdXNlZChvKSAmJiBvLnN0eWxlKCkub3V0bGluZVN0eWxlSXNB
dXRvKCkpCiAgICAgICAgIFtwb3B1cEJ1dHRvbiBfd2ViX2RyYXdGb2N1c1JpbmdXaXRoRnJhbWU6
aW5mbGF0ZWRSZWN0IGluVmlldzp2aWV3XTsKICAgICBbcG9wdXBCdXR0b24gc2V0Q29udHJvbFZp
ZXc6bmlsXTsKIApAQCAtOTM0LDE0ICs5MzQsMTQgQEAgSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6
bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiByZW5kZXJNZXRlciwgY29uc3QK
ICAgICAgICAgICAgICAgICAgICBib3VuZHMuaGVpZ2h0KCkgPCBjZWxsU2l6ZS5oZWlnaHQgPyBj
ZWxsU2l6ZS5oZWlnaHQgOiBib3VuZHMuaGVpZ2h0KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludE1ldGVyKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6
OnBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghcmVuZGVy
T2JqZWN0LT5pc01ldGVyKCkpCisgICAgaWYgKCFyZW5kZXJPYmplY3QuaXNNZXRlcigpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2Nh
bENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwogCi0gICAgTlNMZXZlbEluZGljYXRvckNlbGwq
IGNlbGwgPSBsZXZlbEluZGljYXRvckZvcih0b1JlbmRlck1ldGVyKHJlbmRlck9iamVjdCkpOwor
ICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxsID0gbGV2ZWxJbmRpY2F0b3JGb3IodG9SZW5k
ZXJNZXRlcigmcmVuZGVyT2JqZWN0KSk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAKICAgICBbY2VsbCBkcmF3V2l0aEZyYW1l
OnJlY3QgaW5WaWV3OmRvY3VtZW50Vmlld0ZvcihyZW5kZXJPYmplY3QpXTsKQEAgLTEwNDIsMjMg
KzEwNDIsMjMgQEAgY29uc3QgaW50KiBSZW5kZXJUaGVtZU1hYzo6cHJvZ3Jlc3NCYXJNYXJnaW5z
KE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0CiAgICAgcmV0dXJuIG1hcmdpbnNbY29u
dHJvbFNpemVdOwogfQogCi1JbnRSZWN0IFJlbmRlclRoZW1lTWFjOjpwcm9ncmVzc0JhclJlY3RG
b3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IEludFJlY3Qm
IGJvdW5kcykgY29uc3QKK0ludFJlY3QgUmVuZGVyVGhlbWVNYWM6OnByb2dyZXNzQmFyUmVjdEZv
ckJvdW5kcyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgSW50UmVjdCYg
Ym91bmRzKSBjb25zdAogewogICAgIC8vIFdvcmthcm91bmQgdW50aWwgPHJkYXI6Ly9wcm9ibGVt
LzE1ODU1MDg2PiBpcyBmaXhlZC4KICAgICBpbnQgbWF4RGltZW5zaW9uID0gc3RhdGljX2Nhc3Q8
aW50PihzdGQ6Om51bWVyaWNfbGltaXRzPHVzaG9ydD46Om1heCgpKTsKICAgICBJbnRSZWN0IHBy
b2dyZXNzQmFyQm91bmRzKGJvdW5kcy54KCksIGJvdW5kcy55KCksIHN0ZDo6bWluKGJvdW5kcy53
aWR0aCgpLCBtYXhEaW1lbnNpb24pLCBzdGQ6Om1pbihib3VuZHMuaGVpZ2h0KCksIG1heERpbWVu
c2lvbikpOwotICAgIGlmIChOb0NvbnRyb2xQYXJ0ID09IHJlbmRlck9iamVjdC0+c3R5bGUoKS5h
cHBlYXJhbmNlKCkpCisgICAgaWYgKE5vQ29udHJvbFBhcnQgPT0gcmVuZGVyT2JqZWN0LnN0eWxl
KCkuYXBwZWFyYW5jZSgpKQogICAgICAgICByZXR1cm4gcHJvZ3Jlc3NCYXJCb3VuZHM7CiAKLSAg
ICBmbG9hdCB6b29tTGV2ZWwgPSByZW5kZXJPYmplY3QtPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgp
OwotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoJnJl
bmRlck9iamVjdC0+c3R5bGUoKSk7CisgICAgZmxvYXQgem9vbUxldmVsID0gcmVuZGVyT2JqZWN0
LnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUg
PSBjb250cm9sU2l6ZUZvckZvbnQoJnJlbmRlck9iamVjdC5zdHlsZSgpKTsKICAgICBJbnRTaXpl
IHNpemUgPSBwcm9ncmVzc0JhclNpemVzKClbY29udHJvbFNpemVdOwogICAgIHNpemUuc2V0SGVp
Z2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwogICAgIHNpemUuc2V0V2lkdGgocHJvZ3Jl
c3NCYXJCb3VuZHMud2lkdGgoKSk7CiAKICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBhY2NvdW50
IGZvciB0aGUgc2hhZG93LgogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gcHJvZ3Jlc3NCYXJC
b3VuZHM7Ci0gICAgaWYgKHByb2dyZXNzQmFyQm91bmRzLmhlaWdodCgpIDw9IG1pbmltdW1Qcm9n
cmVzc0JhckhlaWdodCgmcmVuZGVyT2JqZWN0LT5zdHlsZSgpKSkKKyAgICBpZiAocHJvZ3Jlc3NC
YXJCb3VuZHMuaGVpZ2h0KCkgPD0gbWluaW11bVByb2dyZXNzQmFySGVpZ2h0KCZyZW5kZXJPYmpl
Y3Quc3R5bGUoKSkpCiAgICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVk
UmVjdCwgc2l6ZSwgcHJvZ3Jlc3NCYXJNYXJnaW5zKGNvbnRyb2xTaXplKSwgem9vbUxldmVsKTsK
IAogICAgIHJldHVybiBpbmZsYXRlZFJlY3Q7CkBAIC0xMDgzLDI4ICsxMDgzLDI4IEBAIHZvaWQg
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVuCiB7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50UHJv
Z3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQ
cm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFyZW5kZXJP
YmplY3QtPmlzUHJvZ3Jlc3MoKSkKKyAgICBpZiAoIXJlbmRlck9iamVjdC5pc1Byb2dyZXNzKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBwcm9n
cmVzc0JhclJlY3RGb3JCb3VuZHMocmVuZGVyT2JqZWN0LCByZWN0KTsKLSAgICBOU0NvbnRyb2xT
aXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KCZyZW5kZXJPYmplY3QtPnN0eWxl
KCkpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQo
JnJlbmRlck9iamVjdC5zdHlsZSgpKTsKIAotICAgIFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9n
cmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3MocmVuZGVyT2JqZWN0KTsKKyAgICBjb25zdCBSZW5kZXJQ
cm9ncmVzcyYgcmVuZGVyUHJvZ3Jlc3MgPSAqdG9SZW5kZXJQcm9ncmVzcygmcmVuZGVyT2JqZWN0
KTsKICAgICBISVRoZW1lVHJhY2tEcmF3SW5mbyB0cmFja0luZm87CiAgICAgdHJhY2tJbmZvLnZl
cnNpb24gPSAwOwogICAgIGlmIChjb250cm9sU2l6ZSA9PSBOU1JlZ3VsYXJDb250cm9sU2l6ZSkK
LSAgICAgICAgdHJhY2tJbmZvLmtpbmQgPSByZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSA8IDAg
PyBrVGhlbWVMYXJnZUluZGV0ZXJtaW5hdGVCYXIgOiBrVGhlbWVMYXJnZVByb2dyZXNzQmFyOwor
ICAgICAgICB0cmFja0luZm8ua2luZCA9IHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCkgPCAwID8g
a1RoZW1lTGFyZ2VJbmRldGVybWluYXRlQmFyIDoga1RoZW1lTGFyZ2VQcm9ncmVzc0JhcjsKICAg
ICBlbHNlCi0gICAgICAgIHRyYWNrSW5mby5raW5kID0gcmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9u
KCkgPCAwID8ga1RoZW1lTWVkaXVtSW5kZXRlcm1pbmF0ZUJhciA6IGtUaGVtZU1lZGl1bVByb2dy
ZXNzQmFyOworICAgICAgICB0cmFja0luZm8ua2luZCA9IHJlbmRlclByb2dyZXNzLnBvc2l0aW9u
KCkgPCAwID8ga1RoZW1lTWVkaXVtSW5kZXRlcm1pbmF0ZUJhciA6IGtUaGVtZU1lZGl1bVByb2dy
ZXNzQmFyOwogCi0gICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSByZW5kZXJPYmplY3QtPmRv
Y3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rv
ciA9IHJlbmRlck9iamVjdC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgdHJh
Y2tJbmZvLmJvdW5kcyA9IEludFJlY3QoSW50UG9pbnQoKSwgaW5mbGF0ZWRSZWN0LnNpemUoKSk7
CiAgICAgdHJhY2tJbmZvLm1pbiA9IDA7CiAgICAgdHJhY2tJbmZvLm1heCA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8U0ludDMyPjo6bWF4KCk7Ci0gICAgdHJhY2tJbmZvLnZhbHVlID0gbHJvdW5kKHJl
bmRlclByb2dyZXNzLT5wb3NpdGlvbigpICogbmV4dGFmdGVyKHRyYWNrSW5mby5tYXgsIDApKTsK
LSAgICB0cmFja0luZm8udHJhY2tJbmZvLnByb2dyZXNzLnBoYXNlID0gbHJvdW5kKHJlbmRlclBy
b2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpICogbmV4dGFmdGVyKHByb2dyZXNzQW5pbWF0aW9u
TnVtRnJhbWVzLCAwKSAqIGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICB0cmFja0luZm8udmFsdWUg
PSBscm91bmQocmVuZGVyUHJvZ3Jlc3MucG9zaXRpb24oKSAqIG5leHRhZnRlcih0cmFja0luZm8u
bWF4LCAwKSk7CisgICAgdHJhY2tJbmZvLnRyYWNrSW5mby5wcm9ncmVzcy5waGFzZSA9IGxyb3Vu
ZChyZW5kZXJQcm9ncmVzcy5hbmltYXRpb25Qcm9ncmVzcygpICogbmV4dGFmdGVyKHByb2dyZXNz
QW5pbWF0aW9uTnVtRnJhbWVzLCAwKSAqIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICB0cmFja0lu
Zm8uYXR0cmlidXRlcyA9IGtUaGVtZVRyYWNrSG9yaXpvbnRhbDsKICAgICB0cmFja0luZm8uZW5h
YmxlU3RhdGUgPSBpc0FjdGl2ZShyZW5kZXJPYmplY3QpID8ga1RoZW1lVHJhY2tBY3RpdmUgOiBr
VGhlbWVUcmFja0luYWN0aXZlOwogICAgIHRyYWNrSW5mby5yZXNlcnZlZCA9IDA7CkBAIC0xMTIw
LDcgKzExMjAsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFyKFJlbmRl
ck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZgogCiAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAKLSAgICBpZiAo
IXJlbmRlclByb2dyZXNzLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgeworICAg
IGlmICghcmVuZGVyUHJvZ3Jlc3Muc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsK
ICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgyICogaW5mbGF0ZWRSZWN0Lngo
KSArIGluZmxhdGVkUmVjdC53aWR0aCgpLCAwKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNjYWxlKEZsb2F0U2l6ZSgtMSwgMSkpOwogICAgIH0KQEAgLTExODIsNyArMTE4Miw3IEBAIHN0
YXRpYyB2b2lkIFRyYWNrR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCog
aW5EYXRhLCBDR0Zsb2F0KiBvdXRECiAgICAgICAgIG91dERhdGFbaV0gPSAoMS4wZiAtIGEpICog
ZGFya1tpXSArIGEgKiBsaWdodFtpXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRN
ZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQordm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRN
ZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIGlmIChyLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE5Miw3ICsxMTkyLDcgQEAgdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW4KIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFp
bnRJbmZvLmNvbnRleHQpOwogCi0gICAgRmxvYXRSb3VuZGVkUmVjdCBib3JkZXIgPSBGbG9hdFJv
dW5kZWRSZWN0KG8tPnN0eWxlKCkuZ2V0Um91bmRlZEJvcmRlckZvcihyLCAmby0+dmlldygpKSk7
CisgICAgRmxvYXRSb3VuZGVkUmVjdCBib3JkZXIgPSBGbG9hdFJvdW5kZWRSZWN0KG8uc3R5bGUo
KS5nZXRSb3VuZGVkQm9yZGVyRm9yKHIsICZvLnZpZXcoKSkpOwogICAgIGludCByYWRpdXMgPSBi
b3JkZXIucmFkaWkoKS50b3BMZWZ0KCkud2lkdGgoKTsKIAogICAgIENHQ29sb3JTcGFjZVJlZiBj
c3BhY2UgPSBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCk7CkBAIC0xMjQ5LDI5ICsxMjQ5LDI5IEBA
IHZvaWQgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJl
bmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7Ci0gICAgSW50UmVjdCBib3VuZHMgPSBJbnRSZWN0KHJlY3QueCgpICsgcmVu
ZGVyZXItPnN0eWxlKCkuYm9yZGVyTGVmdFdpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlY3QueSgpICsgcmVuZGVyZXItPnN0eWxlKCkuYm9yZGVyVG9wV2lkdGgoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpIC0gcmVuZGVyZXItPnN0eWxl
KCkuYm9yZGVyTGVmdFdpZHRoKCkgLSByZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJSaWdodFdpZHRo
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSByZW5kZXJl
ci0+c3R5bGUoKS5ib3JkZXJUb3BXaWR0aCgpIC0gcmVuZGVyZXItPnN0eWxlKCkuYm9yZGVyQm90
dG9tV2lkdGgoKSk7CisgICAgSW50UmVjdCBib3VuZHMgPSBJbnRSZWN0KHJlY3QueCgpICsgcmVu
ZGVyZXIuc3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSwKKyAgICAgICAgcmVjdC55KCkgKyByZW5k
ZXJlci5zdHlsZSgpLmJvcmRlclRvcFdpZHRoKCksCisgICAgICAgIHJlY3Qud2lkdGgoKSAtIHJl
bmRlcmVyLnN0eWxlKCkuYm9yZGVyTGVmdFdpZHRoKCkgLSByZW5kZXJlci5zdHlsZSgpLmJvcmRl
clJpZ2h0V2lkdGgoKSwKKyAgICAgICAgcmVjdC5oZWlnaHQoKSAtIHJlbmRlcmVyLnN0eWxlKCku
Ym9yZGVyVG9wV2lkdGgoKSAtIHJlbmRlcmVyLnN0eWxlKCkuYm9yZGVyQm90dG9tV2lkdGgoKSk7
CiAgICAgLy8gRHJhdyB0aGUgZ3JhZGllbnRzIHRvIGdpdmUgdGhlIHN0eWxlZCBwb3B1cCBtZW51
IGEgYnV0dG9uIGFwcGVhcmFuY2UKICAgICBwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKHJl
bmRlcmVyLCBwYWludEluZm8sIGJvdW5kcyk7CiAKICAgICAvLyBTaW5jZSB3ZSBhY3R1YWxseSBr
bm93IHRoZSBzaXplIG9mIHRoZSBjb250cm9sIGhlcmUsIHdlIHJlc3RyaWN0IHRoZSBmb250IHNj
YWxlIHRvIG1ha2Ugc3VyZSB0aGUgYXJyb3dzIHdpbGwgZml0IHZlcnRpY2FsbHkgaW4gdGhlIGJv
dW5kcwotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0ZDo6bWluKHJlbmRlcmVyLT5zdHlsZSgpLmZv
bnRTaXplKCkgLyBiYXNlRm9udFNpemUsIGJvdW5kcy5oZWlnaHQoKSAvIChiYXNlQXJyb3dIZWln
aHQgKiAyICsgYmFzZVNwYWNlQmV0d2VlbkFycm93cykpOworICAgIGZsb2F0IGZvbnRTY2FsZSA9
IHN0ZDo6bWluKHJlbmRlcmVyLnN0eWxlKCkuZm9udFNpemUoKSAvIGJhc2VGb250U2l6ZSwgYm91
bmRzLmhlaWdodCgpIC8gKGJhc2VBcnJvd0hlaWdodCAqIDIgKyBiYXNlU3BhY2VCZXR3ZWVuQXJy
b3dzKSk7CiAgICAgZmxvYXQgY2VudGVyWSA9IGJvdW5kcy55KCkgKyBib3VuZHMuaGVpZ2h0KCkg
LyAyLjBmOwogICAgIGZsb2F0IGFycm93SGVpZ2h0ID0gYmFzZUFycm93SGVpZ2h0ICogZm9udFNj
YWxlOwogICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIGZvbnRTY2FsZTsK
LSAgICBmbG9hdCBsZWZ0RWRnZSA9IGJvdW5kcy5tYXhYKCkgLSBhcnJvd1BhZGRpbmdSaWdodCAq
IHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSAtIGFycm93V2lkdGg7CisgICAgZmxv
YXQgbGVmdEVkZ2UgPSBib3VuZHMubWF4WCgpIC0gYXJyb3dQYWRkaW5nUmlnaHQgKiByZW5kZXJl
ci5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSAtIGFycm93V2lkdGg7CiAgICAgZmxvYXQgc3BhY2VC
ZXR3ZWVuQXJyb3dzID0gYmFzZVNwYWNlQmV0d2VlbkFycm93cyAqIGZvbnRTY2FsZTsKIAotICAg
IGlmIChib3VuZHMud2lkdGgoKSA8IGFycm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0ICogcmVu
ZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKQorICAgIGlmIChib3VuZHMud2lkdGgoKSA8
IGFycm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0ICogcmVuZGVyZXIuc3R5bGUoKS5lZmZlY3Rp
dmVab29tKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogCi0gICAgcGFpbnRJbmZv
LmNvbnRleHQtPnNldEZpbGxDb2xvcihyZW5kZXJlci0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yU3BhY2UoKSk7
CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihyZW5kZXJlci5zdHlsZSgpLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgcmVuZGVyZXIuc3R5bGUoKS5j
b2xvclNwYWNlKCkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VTdHlsZShOb1N0
cm9rZSk7CiAKICAgICBGbG9hdFBvaW50IGFycm93MVszXTsKQEAgLTEyOTUsNyArMTI5NSw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zCiAKICAgICAvLyBGSVhNRTogU2hvdWxkIHRoZSBzZXBh
cmF0b3IgdGhpY2tuZXNzIGFuZCBzcGFjZSBiZSBzY2FsZWQgdXAgYnkgZm9udFNjYWxlPwogICAg
IGludCBzZXBhcmF0b3JTcGFjZSA9IDI7IC8vIERlbGliZXJhdGVseSBpZ25vcmVzIHpvb20gc2lu
Y2UgaXQgbG9va3MgbmljZXIgaWYgaXQgc3RheXMgdGhpbi4KLSAgICBpbnQgbGVmdEVkZ2VPZlNl
cGFyYXRvciA9IHN0YXRpY19jYXN0PGludD4obGVmdEVkZ2UgLSBhcnJvd1BhZGRpbmdMZWZ0ICog
cmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsgLy8gRklYTUU6IFJvdW5kPworICAg
IGludCBsZWZ0RWRnZU9mU2VwYXJhdG9yID0gc3RhdGljX2Nhc3Q8aW50PihsZWZ0RWRnZSAtIGFy
cm93UGFkZGluZ0xlZnQgKiByZW5kZXJlci5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7IC8vIEZJ
WE1FOiBSb3VuZD8KIAogICAgIC8vIERyYXcgdGhlIHNlcGFyYXRvciB0byB0aGUgbGVmdCBvZiB0
aGUgYXJyb3dzCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcygxKTsg
Ly8gRGVsaWJlcmF0ZWx5IGlnbm9yZXMgem9vbSBzaW5jZSBpdCBsb29rcyBuaWNlciBpZiBpdCBz
dGF5cyB0aGluLgpAQCAtMTM5NiwxMiArMTM5NiwxMiBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjph
ZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5
bAogICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdo
dCgpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUo
Y29uc3QgUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJbnRSZWN0JiByKQordm9pZCBSZW5kZXJUaGVt
ZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25z
dCBJbnRSZWN0JiByKQogewogICAgIE5TUG9wVXBCdXR0b25DZWxsKiBwb3B1cEJ1dHRvbiA9IHRo
aXMtPnBvcHVwQnV0dG9uKCk7CiAKICAgICAvLyBTZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBv
ZmYgdGhlIHJlY3RhbmdsZSB3ZSdyZSBwYWludGluZyBpbnRvLgotICAgIHNldENvbnRyb2xTaXpl
KHBvcHVwQnV0dG9uLCBwb3B1cEJ1dHRvblNpemVzKCksIHIuc2l6ZSgpLCBvLT5zdHlsZSgpLmVm
ZmVjdGl2ZVpvb20oKSk7CisgICAgc2V0Q29udHJvbFNpemUocG9wdXBCdXR0b24sIHBvcHVwQnV0
dG9uU2l6ZXMoKSwgci5zaXplKCksIG8uc3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOwogCiAgICAg
Ly8gVXBkYXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgogICAgIHVwZGF0ZUFj
dGl2ZVN0YXRlKHBvcHVwQnV0dG9uLCBvKTsKQEAgLTE0MjksMTYgKzE0MjksMTYgQEAgdm9pZCBS
ZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLAogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVy
VGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBJbnRSZWN0IGJv
dW5kcyA9IHI7Ci0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS5lZmZlY3RpdmVab29t
KCk7CisgICAgZmxvYXQgem9vbUxldmVsID0gby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKICAg
ICBmbG9hdCB6b29tZWRUcmFja1dpZHRoID0gdHJhY2tXaWR0aCAqIHpvb21MZXZlbDsKIAotICAg
IGlmIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwg
by0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gIE1lZGlhU2xpZGVyUGFydCkgeworICAgIGlmIChv
LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09ICBTbGlkZXJIb3Jpem9udGFsUGFydCB8fCBvLnN0eWxl
KCkuYXBwZWFyYW5jZSgpID09ICBNZWRpYVNsaWRlclBhcnQpIHsKICAgICAgICAgYm91bmRzLnNl
dEhlaWdodCh6b29tZWRUcmFja1dpZHRoKTsKICAgICAgICAgYm91bmRzLnNldFkoci55KCkgKyBy
LmhlaWdodCgpIC8gMiAtIHpvb21lZFRyYWNrV2lkdGggLyAyKTsKLSAgICB9IGVsc2UgaWYgKG8t
PnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkgeworICAgIH0gZWxz
ZSBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpIHsKICAg
ICAgICAgYm91bmRzLnNldFdpZHRoKHpvb21lZFRyYWNrV2lkdGgpOwogICAgICAgICBib3VuZHMu
c2V0WChyLngoKSArIHIud2lkdGgoKSAvIDIgLSB6b29tZWRUcmFja1dpZHRoIC8gMik7CiAgICAg
fQpAQCAtMTQ1Nyw3ICsxNDU3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJU
cmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmYKICAgICBzdHJ1
Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyBtYWluQ2FsbGJhY2tzID0geyAwLCBUcmFja0dyYWRpZW50
SW50ZXJwb2xhdGUsIE5VTEwgfTsKICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gbWFpbkZ1
bmN0aW9uID0gYWRvcHRDRihDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEws
ICZtYWluQ2FsbGJhY2tzKSk7CiAgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbWFpblNoYWRp
bmc7Ci0gICAgaWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFy
dCkKKyAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQp
CiAgICAgICAgIG1haW5TaGFkaW5nID0gYWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3Bh
Y2UsIENHUG9pbnRNYWtlKGJvdW5kcy54KCksICBib3VuZHMubWF4WSgpKSwgQ0dQb2ludE1ha2Uo
Ym91bmRzLm1heFgoKSwgYm91bmRzLm1heFkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2Us
IGZhbHNlKSk7CiAgICAgZWxzZQogICAgICAgICBtYWluU2hhZGluZyA9IGFkb3B0Q0YoQ0dTaGFk
aW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3VuZHMueCgpLCAgYm91bmRzLnko
KSksIENHUG9pbnRNYWtlKGJvdW5kcy54KCksIGJvdW5kcy5tYXhZKCkpLCBtYWluRnVuY3Rpb24u
Z2V0KCksIGZhbHNlLCBmYWxzZSkpOwpAQCAtMTQ3OCw5ICsxNDc4LDkgQEAgdm9pZCBSZW5kZXJU
aGVtZU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBSZW5kZXIKIAogY29uc3QgZmxvYXQgdmVydGljYWxTbGlkZXJIZWlnaHRQYWRkaW5nID0g
MC4xZjsKIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIE5T
U2xpZGVyQ2VsbCogc2xpZGVyVGh1bWJDZWxsID0gby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0g
U2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQKKyAgICBOU1NsaWRlckNlbGwqIHNsaWRlclRodW1iQ2Vs
bCA9IG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQKICAg
ICAgICAgPyBzbGlkZXJUaHVtYlZlcnRpY2FsKCkKICAgICAgICAgOiBzbGlkZXJUaHVtYkhvcml6
b250YWwoKTsKIApAQCAtMTQ4OSwxOSArMTQ4OSwyMCBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
ZgogICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KICAgICB1
cGRhdGVBY3RpdmVTdGF0ZShzbGlkZXJUaHVtYkNlbGwsIG8pOwogICAgIHVwZGF0ZUVuYWJsZWRT
dGF0ZShzbGlkZXJUaHVtYkNlbGwsIG8pOwotICAgIEVsZW1lbnQqIGZvY3VzRGVsZWdhdGUgPSAo
by0+bm9kZSgpICYmIG8tPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSA/IHRvRWxlbWVudChvLT5u
b2RlKCkpLT5mb2N1c0RlbGVnYXRlKCkgOiAwOwotICAgIHVwZGF0ZUZvY3VzZWRTdGF0ZShzbGlk
ZXJUaHVtYkNlbGwsIGZvY3VzRGVsZWdhdGUgPyBmb2N1c0RlbGVnYXRlLT5yZW5kZXJlcigpIDog
MCk7CisgICAgICAgIEVsZW1lbnQqIGZvY3VzRGVsZWdhdGUgPSAoby5ub2RlKCkgJiYgby5ub2Rl
KCktPmlzRWxlbWVudE5vZGUoKSkgPyB0b0VsZW1lbnQoby5ub2RlKCkpLT5mb2N1c0RlbGVnYXRl
KCkgOiAwOworICAgIGlmIChmb2N1c0RlbGVnYXRlKQorICAgICAgICB1cGRhdGVGb2N1c2VkU3Rh
dGUoc2xpZGVyVGh1bWJDZWxsLCAqZm9jdXNEZWxlZ2F0ZS0+cmVuZGVyZXIoKSk7CiAKICAgICAv
LyBVcGRhdGUgdGhlIHByZXNzZWQgc3RhdGUgdXNpbmcgdGhlIE5TQ2VsbCB0cmFja2luZyBtZXRo
b2RzLCBzaW5jZSB0aGF0J3MgaG93IE5TU2xpZGVyQ2VsbCBrZWVwcyB0cmFjayBvZiBpdC4KICAg
ICBib29sIG9sZFByZXNzZWQ7Ci0gICAgaWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNs
aWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgIGlmIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQogICAgICAgICBvbGRQcmVzc2VkID0gbV9pc1NsaWRl
clRodW1iVmVydGljYWxQcmVzc2VkOwogICAgIGVsc2UKICAgICAgICAgb2xkUHJlc3NlZCA9IG1f
aXNTbGlkZXJUaHVtYkhvcml6b250YWxQcmVzc2VkOwogCiAgICAgYm9vbCBwcmVzc2VkID0gaXNQ
cmVzc2VkKG8pOwogCi0gICAgaWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRo
dW1iVmVydGljYWxQYXJ0KQorICAgIGlmIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRl
clRodW1iVmVydGljYWxQYXJ0KQogICAgICAgICBtX2lzU2xpZGVyVGh1bWJWZXJ0aWNhbFByZXNz
ZWQgPSBwcmVzc2VkOwogICAgIGVsc2UKICAgICAgICAgbV9pc1NsaWRlclRodW1iSG9yaXpvbnRh
bFByZXNzZWQgPSBwcmVzc2VkOwpAQCAtMTUxNSwxMSArMTUxNiwxMSBAQCBib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZgogCiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IHI7CiAgICAgLy8gTWFrZSB0aGUg
aGVpZ2h0IG9mIHRoZSB2ZXJ0aWNhbCBzbGlkZXIgc2xpZ2h0bHkgbGFyZ2VyIHNvIE5TU2xpZGVy
Q2VsbCB3aWxsIGRyYXcgYSB2ZXJ0aWNhbCBzbGlkZXIuCi0gICAgaWYgKG8tPnN0eWxlKCkuYXBw
ZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQotICAgICAgICBib3VuZHMuc2V0
SGVpZ2h0KGJvdW5kcy5oZWlnaHQoKSArIHZlcnRpY2FsU2xpZGVySGVpZ2h0UGFkZGluZyAqIG8t
PnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2Uo
KSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKKyAgICAgICAgYm91bmRzLnNldEhlaWdodChi
b3VuZHMuaGVpZ2h0KCkgKyB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgKiBvLnN0eWxlKCku
ZWZmZWN0aXZlWm9vbSgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwotICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxl
KCkuZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21MZXZlbCA9IG8uc3R5bGUoKS5lZmZl
Y3RpdmVab29tKCk7CiAKICAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gYm91bmRzOwogICAg
IGlmICh6b29tTGV2ZWwgIT0gMS4wZikgewpAQCAtMTUzNiw3ICsxNTM3LDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2Vh
cmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQg
bG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCog
c2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CkBAIC0xNTQ1LDcgKzE1NDYsNyBAQCBib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZgogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KCpwYWludEluZm8uY29udGV4dCk7CiAKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgp
LmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLnN0eWxlKCkuZWZmZWN0
aXZlWm9vbSgpOwogCiAgICAgSW50UmVjdCB1bnpvb21lZFJlY3QgPSByOwogCkBAIC0xNTY4LDEx
ICsxNTY5LDExIEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBJbnRSZWN0JikKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaENlbGxT
dGF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IEludFJlY3QmKQogewogICAgIE5TU2Vh
cmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIAotICAgIFtzZWFyY2ggc2V0
Q29udHJvbFNpemU6Y29udHJvbFNpemVGb3JGb250KCZvLT5zdHlsZSgpKV07CisgICAgW3NlYXJj
aCBzZXRDb250cm9sU2l6ZTpjb250cm9sU2l6ZUZvckZvbnQoJm8uc3R5bGUoKSldOwogCiAgICAg
Ly8gVXBkYXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgogICAgIHVwZGF0ZUFj
dGl2ZVN0YXRlKHNlYXJjaCwgbyk7CkBAIC0xNjI3LDE3ICsxNjI4LDE3IEBAIHZvaWQgUmVuZGVy
VGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgUmVuZGVyCiAgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5k
ZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQogewotICAgIEVsZW1lbnQqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dIb3N0KCk7CisgICAg
RWxlbWVudCogaW5wdXQgPSBvLm5vZGUoKS0+c2hhZG93SG9zdCgpOwogICAgIGlmICghaW5wdXQp
Ci0gICAgICAgIGlucHV0ID0gdG9FbGVtZW50KG8tPm5vZGUoKSk7CisgICAgICAgIGlucHV0ID0g
dG9FbGVtZW50KG8ubm9kZSgpKTsKIAogICAgIGlmICghaW5wdXQtPnJlbmRlcmVyKCktPmlzQm94
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29u
dGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHNldFNlYXJjaENlbGxT
dGF0ZShpbnB1dC0+cmVuZGVyZXIoKSwgcik7CisgICAgc2V0U2VhcmNoQ2VsbFN0YXRlKCppbnB1
dC0+cmVuZGVyZXIoKSwgcik7CiAKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhp
cy0+c2VhcmNoKCk7CiAKQEAgLTE2NTAsNyArMTY1MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6
OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWlu
dEluCiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5m
by5jb250ZXh0KTsKIAotICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCkuZWZmZWN0aXZl
Wm9vbSgpOworICAgIGZsb2F0IHpvb21MZXZlbCA9IG8uc3R5bGUoKS5lZmZlY3RpdmVab29tKCk7
CiAKICAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIGNhbmNlbEJ1dHRvblJlY3RG
b3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+cGl4ZWxTbmFwcGVkQm9yZGVyQm94
UmVjdCgpKV07CiAKQEAgLTE2NjMsNyArMTY2NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
CiAgICAgbG9jYWxCb3VuZHMuc2V0WChsb2NhbEJvdW5kcy54KCkgLSBzcGFjZVRvUmlnaHRPZkNh
bmNlbEJ1dHRvbik7CiAjZW5kaWYKIAotICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRp
bmdSZWN0KGlucHV0LT5yZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7CisgICAgbG9jYWxC
b3VuZHMgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoKmlucHV0LT5yZW5kZXJlcigpLCBvLCBsb2Nh
bEJvdW5kcywgcik7CiAKICAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0KGxvY2FsQm91bmRzKTsK
ICAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKQEAgLTE3MDgsNyArMTcwOSw3IEBAIHZvaWQg
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyCiAgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0K
IAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQorYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQogewogICAgIHJldHVybiBm
YWxzZTsKIH0KQEAgLTE3MjEsMTYgKzE3MjIsMTYgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwK
ICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi1ib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJl
bmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0
IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCiB7Ci0gICAgTm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0hvc3QoKTsKKyAg
ICBOb2RlKiBpbnB1dCA9IG8ubm9kZSgpLT5zaGFkb3dIb3N0KCk7CiAgICAgaWYgKCFpbnB1dCkK
LSAgICAgICAgaW5wdXQgPSBvLT5ub2RlKCk7CisgICAgICAgIGlucHV0ID0gby5ub2RlKCk7CiAg
ICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludElu
Zm8uY29udGV4dCk7Ci0gICAgc2V0U2VhcmNoQ2VsbFN0YXRlKGlucHV0LT5yZW5kZXJlcigpLCBy
KTsKKyAgICBzZXRTZWFyY2hDZWxsU3RhdGUoKmlucHV0LT5yZW5kZXJlcigpLCByKTsKIAogICAg
IE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIApAQCAtMTc0MCw3
ICsxNzQxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydChSZW5kZXJPYmplY3QqIG8sIGNvbnMKICAgICB1cGRhdGVBY3RpdmVTdGF0
ZShbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdLCBvKTsKIAogICAgIEZsb2F0UmVjdCBsb2NhbEJv
dW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJl
bmRlckJveCgpLT5waXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0KCkpXTsKLSAgICBsb2NhbEJvdW5k
cyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxCb3Vu
ZHMsIHIpOworICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KCppbnB1dC0+
cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOwogCiAgICAgW1tzZWFyY2ggc2VhcmNoQnV0
dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTpsb2NhbEJvdW5kcyBpblZpZXc6ZG9jdW1lbnRWaWV3Rm9y
KG8pXTsKICAgICBbW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxsXSBzZXRDb250cm9sVmlldzpuaWxd
OwpAQCAtMTc1NiwxNiArMTc1NywxNiBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFy
Y2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyUwogICAgIHN0
eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIE5vZGUqIGlu
cHV0ID0gby0+bm9kZSgpLT5zaGFkb3dIb3N0KCk7CisgICAgTm9kZSogaW5wdXQgPSBvLm5vZGUo
KS0+c2hhZG93SG9zdCgpOwogICAgIGlmICghaW5wdXQpCi0gICAgICAgIGlucHV0ID0gby0+bm9k
ZSgpOworICAgICAgICBpbnB1dCA9IG8ubm9kZSgpOwogICAgIGlmICghaW5wdXQtPnJlbmRlcmVy
KCktPmlzQm94KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdy
YXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHNldFNl
YXJjaENlbGxTdGF0ZShpbnB1dC0+cmVuZGVyZXIoKSwgcik7CisgICAgc2V0U2VhcmNoQ2VsbFN0
YXRlKCppbnB1dC0+cmVuZGVyZXIoKSwgcik7CiAKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2Vh
cmNoID0gdGhpcy0+c2VhcmNoKCk7CiAKQEAgLTE3NzUsMTAgKzE3NzYsMTAgQEAgYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBQYWludEkKICAgICAgICAgW3NlYXJjaCBzZXRTZWFyY2hNZW51VGVtcGxhdGU6c2Vh
cmNoTWVudVRlbXBsYXRlKCldOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7Ci0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5
bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9vbUxldmVsID0gby5zdHlsZSgpLmVm
ZmVjdGl2ZVpvb20oKTsKIAogICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggc2Vh
cmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5waXhlbFNu
YXBwZWRCb3JkZXJCb3hSZWN0KCkpXTsKLSAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50
aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOworICAgIGxvY2Fs
Qm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KCppbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9j
YWxCb3VuZHMsIHIpOwogCiAgICAgSW50UmVjdCB1bnpvb21lZFJlY3QobG9jYWxCb3VuZHMpOwog
ICAgIGlmICh6b29tTGV2ZWwgIT0gMS4wZikgewpAQCAtMTc5NSwyNiArMTc5NiwyNiBAQCBib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYpCitib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JikKIHsKICAgICBp
ZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFvLT5pc1JlbmRlckJsb2NrKCkpCisgICAgaWYgKCFv
LmlzUmVuZGVyQmxvY2soKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZW5kZXJCbG9j
ayogcmVuZGVyQmxvY2sgPSB0b1JlbmRlckJsb2NrKG8pOworICAgIGNvbnN0IFJlbmRlckJsb2Nr
JiByZW5kZXJCbG9jayA9ICp0b1JlbmRlckJsb2NrKCZvKTsKIAotICAgIExheW91dFVuaXQgY29u
dGVudFdpZHRoID0gcmVuZGVyQmxvY2stPmNvbnRlbnRXaWR0aCgpOwotICAgIExheW91dFVuaXQg
Y29udGVudEhlaWdodCA9IHJlbmRlckJsb2NrLT5jb250ZW50SGVpZ2h0KCk7CisgICAgTGF5b3V0
VW5pdCBjb250ZW50V2lkdGggPSByZW5kZXJCbG9jay5jb250ZW50V2lkdGgoKTsKKyAgICBMYXlv
dXRVbml0IGNvbnRlbnRIZWlnaHQgPSByZW5kZXJCbG9jay5jb250ZW50SGVpZ2h0KCk7CiAgICAg
aWYgKCFjb250ZW50V2lkdGggfHwgIWNvbnRlbnRIZWlnaHQpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CiAK
ICAgICBMYXlvdXRTaXplIGNvbnRlbnRTaXplKGNvbnRlbnRXaWR0aCwgY29udGVudEhlaWdodCk7
Ci0gICAgTGF5b3V0UG9pbnQgY29udGVudExvY2F0aW9uID0gcmVuZGVyQmxvY2stPmxvY2F0aW9u
KCk7Ci0gICAgY29udGVudExvY2F0aW9uLm1vdmUocmVuZGVyQmxvY2stPmJvcmRlckxlZnQoKSAr
IHJlbmRlckJsb2NrLT5wYWRkaW5nTGVmdCgpLCByZW5kZXJCbG9jay0+Ym9yZGVyVG9wKCkgKyBy
ZW5kZXJCbG9jay0+cGFkZGluZ1RvcCgpKTsKKyAgICBMYXlvdXRQb2ludCBjb250ZW50TG9jYXRp
b24gPSByZW5kZXJCbG9jay5sb2NhdGlvbigpOworICAgIGNvbnRlbnRMb2NhdGlvbi5tb3ZlKHJl
bmRlckJsb2NrLmJvcmRlckxlZnQoKSArIHJlbmRlckJsb2NrLnBhZGRpbmdMZWZ0KCksIHJlbmRl
ckJsb2NrLmJvcmRlclRvcCgpICsgcmVuZGVyQmxvY2sucGFkZGluZ1RvcCgpKTsKIAogICAgIExh
eW91dFJlY3QgcmVjdChjb250ZW50TG9jYXRpb24sIGNvbnRlbnRTaXplKTsKICAgICBJbnRSZWN0
IGFsaWduZWRSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChyZWN0KTsKQEAgLTE4MjUsMTAgKzE4
MjYsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJs
YXkoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEkKICAgICAvLyBmcm9tIG91ciBub2RlLiBB
c3N1bWluZyB0aGlzIG5vZGUgaXMgdGhlIHBsdWdpbiBvdmVybGF5IGVsZW1lbnQsIHdlIHNob3Vs
ZCBnZXQgdG8gdGhlCiAgICAgLy8gcGx1Z2luIGl0c2VsZiBieSBhc2tpbmcgZm9yIHRoZSBzaGFk
b3cgcm9vdCBwYXJlbnQsIGFuZCB0aGVuIGl0cyBwYXJlbnQuCiAKLSAgICBpZiAoIXJlbmRlckJs
b2NrLT5lbGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSkKKyAgICBpZiAoIXJlbmRlckJsb2NrLmVs
ZW1lbnQoKS0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEhU
TUxFbGVtZW50KiBwbHVnSW5PdmVybGF5ID0gdG9IVE1MRWxlbWVudChyZW5kZXJCbG9jay0+ZWxl
bWVudCgpKTsKKyAgICBIVE1MRWxlbWVudCogcGx1Z0luT3ZlcmxheSA9IHRvSFRNTEVsZW1lbnQo
cmVuZGVyQmxvY2suZWxlbWVudCgpKTsKICAgICBFbGVtZW50KiBwYXJlbnQgPSBwbHVnSW5PdmVy
bGF5LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CiAgICAgd2hpbGUgKHBhcmVudCAmJiAh
cGFyZW50LT5pc1BsdWdpbkVsZW1lbnQoKSkKICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJl
bnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CkBAIC0xODUyLDcgKzE4NTMsNyBAQCBib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SQogCiAgICAgLy8gV2UgY291bGQgZHJhdyB0aGUgc25hcHNob3Qgd2l0aCB0
aGF0IGNvb3JkaW5hdGVzLCBidXQgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUKICAgICAvLyBp
c24ndCBhIGNvbXBvc2l0ZWQgbGF5ZXIgYmV0d2VlbiB1cyBhbmQgdGhlIHBsdWdJblJlbmRlcmVy
LgotICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gobyk7CisgICAgY29uc3Qg
UmVuZGVyQm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveCgmbyk7CiAgICAgd2hpbGUgKHJlbmRl
ckJveCAhPSBwbHVnSW5SZW5kZXJlcikgewogICAgICAgICBpZiAocmVuZGVyQm94LT5oYXNMYXll
cigpICYmIHJlbmRlckJveC0+bGF5ZXIoKSAmJiByZW5kZXJCb3gtPmxheWVyKCktPmlzQ29tcG9z
aXRlZCgpKSB7CiAgICAgICAgICAgICBzbmFwc2hvdEFic1BvcyA9IC1yZW5kZXJCb3gtPmxvY2F0
aW9uKCk7CkBAIC0yMDA0LDcgKzIwMDUsNyBAQCBOU1NlcnZpY2VzUm9sbG92ZXJCdXR0b25DZWxs
KiBSZW5kZXJUaGVtZU1hYzo6c2VydmljZXNSb2xsb3ZlckJ1dHRvbkNlbGwoKSBjb25zdAogI2Vu
ZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50SW1hZ2VDb250cm9sc0J1dHRvbihS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50SW1hZ2VDb250cm9sc0J1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9
IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjAy
OSw3ICsyMDMwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRJbWFnZUNvbnRyb2xzQnV0
dG9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW4KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6aW1hZ2VDb250cm9sc0J1dHRvblNpemUoY29u
c3QgUmVuZGVyT2JqZWN0KikgY29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWVNYWM6OmltYWdlQ29u
dHJvbHNCdXR0b25TaXplKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0CiB7CiAjaWYgSEFWRShB
UFBLSVRfSU1BR0VfQ09OVFJPTFNfU1VQUE9SVCkKICAgICByZXR1cm4gSW50U2l6ZShzZXJ2aWNl
c1JvbGxvdmVyQnV0dG9uQ2VsbCgpLmNlbGxTaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCmluZGV4IDA3YWFiZjc4NmQ5OTEzMTlmMDA3OTA0
MGFiN2U5ODdmOGQxYzU4YTguLjgzMjk3MzM1NzQ1N2U2OTE1NDE5Y2UxYWYxZTYyYmM0Y2QzMzFi
OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFy
aS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNw
cApAQCAtMTE1LDcgKzExNSw3IEBAIHN0YXRpYyBSR0JBMzIgbWFrZVJHQkFGcm9tQ0dDb2xvcihD
R0NvbG9yUmVmIGNvbG9yKQogICAgIHJldHVybiBtYWtlUkdCQSgyNTUgKiBjb21wb25lbnRzWzBd
LCAyNTUgKiBjb21wb25lbnRzWzFdLCAyNTUgKiBjb21wb25lbnRzWzJdLCAyNTUgKiBjb21wb25l
bnRzWzNdKTsKIH0KIAotVGhlbWVDb250cm9sU3RhdGUgUmVuZGVyVGhlbWVTYWZhcmk6OmRldGVy
bWluZVN0YXRlKFJlbmRlck9iamVjdCogbykgY29uc3QKK1RoZW1lQ29udHJvbFN0YXRlIFJlbmRl
clRoZW1lU2FmYXJpOjpkZXRlcm1pbmVTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0
CiB7CiAgICAgVGhlbWVDb250cm9sU3RhdGUgcmVzdWx0ID0gMDsKICAgICBpZiAoaXNBY3RpdmUo
bykpCkBAIC0yNjQsMTEgKzI2NCwxMSBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjppc0NvbnRy
b2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYQogICAgIHJl
dHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91
bmQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVz
dFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcikKK3ZvaWQgUmVu
ZGVyVGhlbWVTYWZhcmk6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgbywg
SW50UmVjdCYgcikKIHsKLSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNp
emVGb3JGb250KCZvLT5zdHlsZSgpKTsKKyAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0g
Y29udHJvbFNpemVGb3JGb250KCZvLnN0eWxlKCkpOwogCi0gICAgc3dpdGNoIChvLT5zdHlsZSgp
LmFwcGVhcmFuY2UoKSkgeworICAgIHN3aXRjaCAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgewog
ICAgICAgICBjYXNlIENoZWNrYm94UGFydDogewogICAgICAgICAgICAgLy8gV2UgaW5mbGF0ZSB0
aGUgcmVjdCBhcyBuZWVkZWQgdG8gYWNjb3VudCBmb3IgcGFkZGluZyBpbmNsdWRlZCBpbiB0aGUg
Y2VsbCB0byBhY2NvbW1vZGF0ZSB0aGUgY2hlY2tib3gKICAgICAgICAgICAgIC8vIHNoYWRvdyIg
YW5kIHRoZSBjaGVjay4gIFdlIGRvbid0IGNvbnNpZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91bmRz
IG9mIHRoZSBjb250cm9sIGluIFdlYktpdC4KQEAgLTMxNywyNiArMzE3LDI2IEBAIEludFJlY3Qg
UmVuZGVyVGhlbWVTYWZhcmk6OmluZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IElu
dFNpemUmIHNpemUsIGNvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW50IFJlbmRlclRoZW1l
U2FmYXJpOjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2lu
dCBSZW5kZXJUaGVtZVNhZmFyaTo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3Qm
IG8pIGNvbnN0CiB7Ci0gICAgaWYgKCFvLT5pc0JveCgpKQorICAgIGlmICghby5pc0JveCgpKQog
ICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBD
aGVja2JveFBhcnQgfHwgby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KSB7Ci0g
ICAgICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gobyk7CisgICAgaWYgKG8u
c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0IHx8IG8uc3R5bGUoKS5hcHBlYXJh
bmNlKCkgPT0gUmFkaW9QYXJ0KSB7CisgICAgICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0gdG9S
ZW5kZXJCb3goJm8pOwogICAgICAgICByZXR1cm4gYm94LT5tYXJnaW5Ub3AoKSArIGJveC0+aGVp
Z2h0KCkgLSAyOyAvLyBUaGUgYmFzZWxpbmUgaXMgMnB4IHVwIGZyb20gdGhlIGJvdHRvbSBvZiB0
aGUgY2hlY2tib3gvcmFkaW8gaW4gQXBwS2l0LgogICAgIH0KIAogICAgIHJldHVybiBSZW5kZXJU
aGVtZTo6YmFzZWxpbmVQb3NpdGlvbihvKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6
Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAorYm9vbCBS
ZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0
JiBvKSBjb25zdAogewogICAgIGlmICghaXNFbmFibGVkKG8pKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyBDaGVja2JveGVzIG9ubHkgaGF2ZSB0aW50IHdoZW4gY2hlY2tlZC4KLSAg
ICBpZiAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0KQorICAgIGlmIChv
LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydCkKICAgICAgICAgcmV0dXJuIGlz
Q2hlY2tlZChvKTsKIAogICAgIC8vIEZvciBub3cgYXNzdW1lIG90aGVyIGNvbnRyb2xzIGhhdmUg
dGludCBpZiBlbmFibGVkLgpAQCAtNDE2LDExICs0MTYsMTEgQEAgTlNDb250cm9sU2l6ZSBSZW5k
ZXJUaGVtZVNhZmFyaTo6Y29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlKiBzdHls
ZSkgY28KICAgICByZXR1cm4gTlNNaW5pQ29udHJvbFNpemU7CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVTYWZhcmk6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBh
aW50Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5
KCkpOwogCi0gICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9u
dCgmby0+c3R5bGUoKSk7CisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xT
aXplRm9yRm9udCgmby5zdHlsZSgpKTsKIAogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gaW5m
bGF0ZVJlY3QociwgY2hlY2tib3hTaXplcygpW2NvbnRyb2xTaXplXSwgY2hlY2tib3hNYXJnaW5z
KGNvbnRyb2xTaXplKSk7ICAKICAgICBwYWludFRoZW1lUGFydChTYWZhcmlUaGVtZTo6Q2hlY2ti
b3hQYXJ0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGluZmxhdGVkUmVj
dCwgY29udHJvbFNpemUsIGRldGVybWluZVN0YXRlKG8pKTsKQEAgLTQ1NSwxMSArNDU1LDExIEBA
IHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0CiAgICAgc2V0U2l6ZUZyb21Gb250KHN0eWxlLCBjaGVja2JveFNpemVzKCkpOwog
fQogCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRl
clRoZW1lU2FmYXJpOjpwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgQVNTRVJUKFNhZmFy
aVRoZW1lTGlicmFyeSgpKTsKIAotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250
cm9sU2l6ZUZvckZvbnQoJm8tPnN0eWxlKCkpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNp
emUgPSBjb250cm9sU2l6ZUZvckZvbnQoJm8uc3R5bGUoKSk7CiAgCiAgICAgSW50UmVjdCBpbmZs
YXRlZFJlY3QgPSBpbmZsYXRlUmVjdChyLCByYWRpb1NpemVzKClbY29udHJvbFNpemVdLCByYWRp
b01hcmdpbnMoY29udHJvbFNpemUpKTsgICAgCiAgICAgcGFpbnRUaGVtZVBhcnQoUmFkaW9CdXR0
b25QYXJ0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGluZmxhdGVkUmVj
dCwgY29udHJvbFNpemUsIGRldGVybWluZVN0YXRlKG8pKTsKQEAgLTU3OSw3ICs1NzksNyBAQCB2
b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKICAgICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIGJ1dHRvblNpemVzKCkpOwogfQogCi1i
b29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVt
ZVNhZmFyaTo6cGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhl
bWVMaWJyYXJ5KCkpOwogCkBAIC02MTIsNyArNjEyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFy
aTo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50
VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFRleHRGaWVsZChj
b25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByKQogewogICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7CiAKQEAgLTYy
NCw3ICs2MjQsNyBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RUZXh0RmllbGRTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZQogewogfQogCi1ib29sIFJlbmRl
clRoZW1lU2FmYXJpOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRo
ZW1lU2FmYXJpOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRlck9iamVjdCYgbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7ICAgIAogI2lm
IGRlZmluZWQoU0FGQVJJX1RIRU1FX1ZFUlNJT04pICYmIFNBRkFSSV9USEVNRV9WRVJTSU9OID49
IDEKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwpAQCAtNjQwLDcgKzY0MCw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mCiAjZW5kaWYKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVNh
ZmFyaTo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRU
ZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7
CiAKQEAgLTY4MCw3ICs2ODAsNyBAQCBjb25zdCBpbnQqIFJlbmRlclRoZW1lU2FmYXJpOjpwb3B1
cEJ1dHRvblBhZGRpbmcoTlNDb250cm9sU2l6ZSBzaXplKSBjb25zdAogICAgIHJldHVybiBwYWRk
aW5nW3NpemVdOwogfQogCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0KFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByKQor
Ym9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBBU1NF
UlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwogCkBAIC02OTAsNyArNjkwLDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZVNhZmFyaTo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgaW5mbywgY28KICAgICBzaXplLnNldFdpZHRoKHIud2lkdGgoKSk7CiAKICAgICAvLyBO
b3cgaW5mbGF0ZSBpdCB0byBhY2NvdW50IGZvciB0aGUgc2hhZG93LgotICAgIGlmIChyLndpZHRo
KCkgPj0gbWluaW11bU1lbnVMaXN0U2l6ZSgmby0+c3R5bGUoKSkpCisgICAgaWYgKHIud2lkdGgo
KSA+PSBtaW5pbXVtTWVudUxpc3RTaXplKCZvLnN0eWxlKCkpKQogICAgICAgICBpbmZsYXRlZFJl
Y3QgPSBpbmZsYXRlUmVjdChpbmZsYXRlZFJlY3QsIHNpemUsIHBvcHVwQnV0dG9uTWFyZ2lucyhj
b250cm9sU2l6ZSkpOwogCiAgICAgcGFpbnRUaGVtZVBhcnQoRHJvcERvd25CdXR0b25QYXJ0LCBp
bmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBpbmZsYXRlZFJlY3QsIGNvbnRyb2xTaXpl
LCBkZXRlcm1pbmVTdGF0ZShvKSk7CkBAIC03NDksNyArNzQ5LDcgQEAgc3RhdGljIHZvaWQgVHJh
Y2tHcmFkaWVudEludGVycG9sYXRlKHZvaWQqIGluZm8sIGNvbnN0IENHRmxvYXQqIGluRGF0YSwg
Q0dGbG9hdCoKICAgICAgICAgb3V0RGF0YVtpXSA9ICgxLjBmIC0gYSkgKiBkYXJrW2ldICsgYSAq
IGxpZ2h0W2ldOwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0QnV0
dG9uR3JhZGllbnRzKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0
QnV0dG9uR3JhZGllbnRzKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKHIuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CkBAIC03NTgsNyArNzU4LDcgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6
cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW4K
IAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAKLSAgICBGbG9hdFJvdW5kZWRSZWN0
IGJvdW5kID0gRmxvYXRSb3VuZGVkUmVjdChvLT5zdHlsZSgpLmdldFJvdW5kZWRCb3JkZXJGb3Io
cikpOworICAgIEZsb2F0Um91bmRlZFJlY3QgYm91bmQgPSBGbG9hdFJvdW5kZWRSZWN0KG8uc3R5
bGUoKS5nZXRSb3VuZGVkQm9yZGVyRm9yKHIpKTsKICAgICBpbnQgcmFkaXVzID0gYm91bmQucmFk
aWkoKS50b3BMZWZ0KCkud2lkdGgoKTsKIAogICAgIENHQ29sb3JTcGFjZVJlZiBjc3BhY2UgPSBk
ZXZpY2VSR0JDb2xvclNwYWNlUmVmKCk7CkBAIC04MTAsMTcgKzgxMCwxNyBAQCB2b2lkIFJlbmRl
clRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbgogICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKLWJv
b2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3RCdXR0b25E
ZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBJbnRSZWN0IGJvdW5kcyA9
IEludFJlY3QocmVjdC54KCkgKyByZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkgKyByZW5kZXJlci0+c3R5bGUo
KS5ib3JkZXJUb3BXaWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0Lndp
ZHRoKCkgLSByZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSAtIHJlbmRlcmVyLT5z
dHlsZSgpLmJvcmRlclJpZ2h0V2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVjdC5oZWlnaHQoKSAtIHJlbmRlcmVyLT5zdHlsZSgpLmJvcmRlclRvcFdpZHRoKCkgLSByZW5k
ZXJlci0+c3R5bGUoKS5ib3JkZXJCb3R0b21XaWR0aCgpKTsKKyAgICBJbnRSZWN0IGJvdW5kcyA9
IEludFJlY3QocmVjdC54KCkgKyByZW5kZXJlci5zdHlsZSgpLmJvcmRlckxlZnRXaWR0aCgpLAor
ICAgICAgICByZWN0LnkoKSArIHJlbmRlcmVyLnN0eWxlKCkuYm9yZGVyVG9wV2lkdGgoKSwKKyAg
ICAgICAgcmVjdC53aWR0aCgpIC0gcmVuZGVyZXIuc3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSAt
IHJlbmRlcmVyLnN0eWxlKCkuYm9yZGVyUmlnaHRXaWR0aCgpLAorICAgICAgICByZWN0LmhlaWdo
dCgpIC0gcmVuZGVyZXIuc3R5bGUoKS5ib3JkZXJUb3BXaWR0aCgpIC0gcmVuZGVyZXIuc3R5bGUo
KS5ib3JkZXJCb3R0b21XaWR0aCgpKTsKICAgICAvLyBEcmF3IHRoZSBncmFkaWVudHMgdG8gZ2l2
ZSB0aGUgc3R5bGVkIHBvcHVwIG1lbnUgYSBidXR0b24gYXBwZWFyYW5jZQogICAgIHBhaW50TWVu
dUxpc3RCdXR0b25HcmFkaWVudHMocmVuZGVyZXIsIHBhaW50SW5mbywgYm91bmRzKTsKIAogICAg
IC8vIFNpbmNlIHdlIGFjdHVhbGx5IGtub3cgdGhlIHNpemUgb2YgdGhlIGNvbnRyb2wgaGVyZSwg
d2UgcmVzdHJpY3QgdGhlIGZvbnQgc2NhbGUgdG8gbWFrZSBzdXJlIHRoZSBhcnJvdyB3aWxsIGZp
dCB2ZXJ0aWNhbGx5IGluIHRoZSBib3VuZHMKLSAgICBmbG9hdCBmb250U2NhbGUgPSBtaW4ocmVu
ZGVyZXItPnN0eWxlKCkuZm9udFNpemUoKSAvIGJhc2VGb250U2l6ZSwgYm91bmRzLmhlaWdodCgp
IC8gYmFzZUFycm93SGVpZ2h0KTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBtaW4ocmVuZGVyZXIu
c3R5bGUoKS5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplLCBib3VuZHMuaGVpZ2h0KCkgLyBiYXNl
QXJyb3dIZWlnaHQpOwogICAgIGZsb2F0IGNlbnRlclkgPSBib3VuZHMueSgpICsgYm91bmRzLmhl
aWdodCgpIC8gMi4wZjsKICAgICBmbG9hdCBhcnJvd0hlaWdodCA9IGJhc2VBcnJvd0hlaWdodCAq
IGZvbnRTY2FsZTsKICAgICBmbG9hdCBhcnJvd1dpZHRoID0gYmFzZUFycm93V2lkdGggKiBmb250
U2NhbGU7CkBAIC04MzEsNyArODMxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRN
ZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGMKIAogICAg
IHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0
RmlsbENvbG9yKHJlbmRlcmVyLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNldEZpbGxDb2xvcihyZW5kZXJlci5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUNvbG9yKSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNldFN0cm9rZUNvbG9yKE5vU3Ryb2tlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIAogICAg
IEZsb2F0UG9pbnQgYXJyb3dbM107CkBAIC05NTYsMjEgKzk1NiwxNSBAQCBpbnQgUmVuZGVyVGhl
bWVTYWZhcmk6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAog
Y29uc3QgaW50IHRyYWNrV2lkdGggPSA1OwogY29uc3QgaW50IHRyYWNrUmFkaXVzID0gMjsKIAot
Ym9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5k
ZXJUaGVtZVNhZmFyaTo6cGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIEludFNp
emUgcmFkaXVzKHRyYWNrUmFkaXVzLCB0cmFja1JhZGl1cyk7CiAgICAgRmxvYXRSb3VuZGVkUmVj
dCBib3VuZHMociwgcmFkaXVzLCByYWRpdXMsIHJhZGl1cywgcmFkaXVzKTsKIAotICAgIGlmIChv
LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQpCi0gICAgICAg
IGJvdW5kcy5zZXRSZWN0KEludFJlY3Qoci54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgci55KCkgKyByLmhlaWdodCgpIC8gMiAtIHRyYWNrV2lkdGggLyAyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHIud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cmFja1dpZHRoKSk7Ci0gICAgZWxzZSBpZiAoby0+c3R5bGUoKS5hcHBlYXJhbmNl
KCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAgICBib3VuZHMuc2V0UmVjdChJbnRSZWN0
KHIueCgpICsgci53aWR0aCgpIC8gMiAtIHRyYWNrV2lkdGggLyAyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHIueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy
YWNrV2lkdGgsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuaGVpZ2h0KCkpKTsK
KyAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQp
CisgICAgICAgIGJvdW5kcy5zZXRSZWN0KEludFJlY3Qoci54KCksIHIueSgpICsgci5oZWlnaHQo
KSAvIDIgLSB0cmFja1dpZHRoIC8gMiwgci53aWR0aCgpLCB0cmFja1dpZHRoKSk7CisgICAgZWxz
ZSBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCisgICAg
ICAgIGJvdW5kcy5zZXRSZWN0KEludFJlY3Qoci54KCkgKyByLndpZHRoKCkgLyAyIC0gdHJhY2tX
aWR0aCAvIDIsIHIueSgpLCB0cmFja1dpZHRoLCByLmhlaWdodCgpKSk7CiAKICAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAg
ICBDR0NvbG9yU3BhY2VSZWYgY3NwYWNlID0gZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpOwpAQCAt
OTgxLDcgKzk3NSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2xpZGVyVHJhY2so
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50CiAgICAgc3RydWN0IENHRnVu
Y3Rpb25DYWxsYmFja3MgbWFpbkNhbGxiYWNrcyA9IHsgMCwgVHJhY2tHcmFkaWVudEludGVycG9s
YXRlLCBOVUxMIH07CiAgICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IG1haW5GdW5jdGlvbiA9
IGFkb3B0Q0YoQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmbWFpbkNh
bGxiYWNrcykpOwogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1haW5TaGFkaW5nOwotICAg
IGlmIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCisgICAg
aWYgKG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQogICAgICAg
ICBtYWluU2hhZGluZyA9IGFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1Bv
aW50TWFrZShib3VuZHMucmVjdCgpLngoKSwgIGJvdW5kcy5yZWN0KCkubWF4WSgpKSwgQ0dQb2lu
dE1ha2UoYm91bmRzLnJlY3QoKS5tYXhYKCksIGJvdW5kcy5yZWN0KCkubWF4WSgpKSwgbWFpbkZ1
bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKICAgICBlbHNlCiAgICAgICAgIG1haW5TaGFk
aW5nID0gYWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJv
dW5kcy5yZWN0KCkueCgpLCAgYm91bmRzLnJlY3QoKS55KCkpLCBDR1BvaW50TWFrZShib3VuZHMu
cmVjdCgpLngoKSwgYm91bmRzLnJlY3QoKS5tYXhZKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZh
bHNlLCBmYWxzZSkpOwpAQCAtMTAwMSw3ICs5OTUsNyBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJp
OjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJl
bgogCiBjb25zdCBmbG9hdCB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgPSAwLjFmOwogCi1i
b29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRl
clRoZW1lU2FmYXJpOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgQVNTRVJU
KFNhZmFyaVRoZW1lTGlicmFyeSgpKTsKICAgICBwYWludFRoZW1lUGFydChTbGlkZXJUaHVtYlBh
cnQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgTlNTbWFsbENvbnRy
b2xTaXplLCBkZXRlcm1pbmVTdGF0ZShvKSk7CkBAIC0xMDIzLDcgKzEwMTcsNyBAQCB2b2lkIFJl
bmRlclRoZW1lU2FmYXJpOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29ucwogI2VuZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBh
aW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2VhcmNo
RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwog
CkBAIC0xMDc2LDEzICsxMDcwLDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNl
YXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuCiAgICAgc2V0
Rm9udEZyb21Db250cm9sU2l6ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgY29udHJvbFNpemUpOwog
fQogCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmKQorYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
bihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwogCi0gICAg
Tm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0hvc3QoKTsKKyAgICBOb2RlKiBpbnB1dCA9
IG8ubm9kZSgpLT5zaGFkb3dIb3N0KCk7CiAgICAgaWYgKCFpbnB1dCkKLSAgICAgICAgaW5wdXQg
PSBvLT5ub2RlKCk7CisgICAgICAgIGlucHV0ID0gby5ub2RlKCk7CiAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IGlucHV0LT5yZW5kZXJlcigpOwogICAgIEFTU0VSVChyZW5kZXJlcik7CiAK
QEAgLTExMTksNyArMTExMyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJj
aEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuCiAgICAgc3R5bGUt
PnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQorYm9vbCBSZW5kZXJUaGVtZVNh
ZmFyaTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQogewogICAgIHJldHVybiBmYWxzZTsK
IH0KQEAgLTExMzEsMTMgKzExMjUsMTMgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmUKICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi1ib29s
IFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmKQorYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkp
OwogCi0gICAgTm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0hvc3QoKTsKKyAgICBOb2Rl
KiBpbnB1dCA9IG8ubm9kZSgpLT5zaGFkb3dIb3N0KCk7CiAgICAgaWYgKCFpbnB1dCkKLSAgICAg
ICAgaW5wdXQgPSBvLT5ub2RlKCk7CisgICAgICAgIGlucHV0ID0gby5ub2RlKCk7CiAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IGlucHV0LT5yZW5kZXJlcigpOwogICAgIEFTU0VSVChyZW5k
ZXJlcik7CiAKQEAgLTExNTUsMTMgKzExNDksMTMgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmQK
ICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQog
Ci1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JikKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmKQogewogICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7CiAKLSAgICBO
b2RlKiBpbnB1dCA9IG8tPm5vZGUoKS0+c2hhZG93SG9zdCgpOworICAgIE5vZGUqIGlucHV0ID0g
by5ub2RlKCktPnNoYWRvd0hvc3QoKTsKICAgICBpZiAoIWlucHV0KQotICAgICAgICBpbnB1dCA9
IG8tPm5vZGUoKTsKKyAgICAgICAgaW5wdXQgPSBvLm5vZGUoKTsKICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gaW5wdXQtPnJlbmRlcmVyKCk7CiAgICAgQVNTRVJUKHJlbmRlcmVyKTsKIApA
QCAtMTIxNiwxNCArMTIxMCwxNCBAQCBJbnRTaXplIFJlbmRlclRoZW1lU2FmYXJpOjptZXRlclNp
emVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JgogICAgIHJldHVy
biBib3VuZHMuc2l6ZSgpOwogfQogCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1ldGVy
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWV0ZXIo
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIC8vIE5PVEU6IFRoaXMgcm91dGluZSBp
cyBmb3IgdGVzdGluZyBvbmx5LiBJdCBzaG91bGQgYmUgZmxlc2hlZCBvdXQgd2l0aCBhIHJlYWwg
Q0ctYmFzZWQgaW1wbGVtZW50YXRpb24uCiAgICAgLy8gUmlnaHQgbm93IGl0IHVzZXMgYSBzbGlk
ZXIsIHdpdGggdGhlIHRodW1iIHBvc2l0aW9uZWQgYXQgdGhlIG1ldGVyIHBvaW50LgotICAgIGlm
ICghcmVuZGVyT2JqZWN0LT5pc01ldGVyKCkpCisgICAgaWYgKCFyZW5kZXJPYmplY3QuaXNNZXRl
cigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1l
bnQgPSB0b1JlbmRlck1ldGVyKHJlbmRlck9iamVjdCktPm1ldGVyRWxlbWVudCgpOworICAgIEhU
TUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVyKCZyZW5kZXJPYmplY3QpLT5t
ZXRlckVsZW1lbnQoKTsKIAogICAgIGludCByZW1haW5pbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KCgx
LjAgLSBlbGVtZW50LT52YWx1ZVJhdGlvKCkpICogc3RhdGljX2Nhc3Q8ZG91YmxlPihyZWN0LnNp
emUoKS53aWR0aCgpKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZVNhZmFyaS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
U2FmYXJpLmgKaW5kZXggMjkwYzgyYzMxNmY5MzUxNjI2ZmYyMDkwN2ZjZGVhNzQ1MDJiMTg1Mi4u
MWU4OWZkOWY1Y2M4Mjk4MzdhNjUwYWIxOWZiMGVhNjNjNjBhNjkzMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmgKQEAgLTUyLDE1ICs1MiwxNSBAQCBw
dWJsaWM6CiAgICAgLy8gQSBtZXRob2QgdG8gb2J0YWluIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBm
b3IgYSAibGVhZiIgY29udHJvbC4gIFRoaXMgd2lsbCBvbmx5IGJlIHVzZWQgaWYgYSBiYXNlbGlu
ZQogICAgIC8vIHBvc2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyBjaGls
ZCBjb250ZW50LiBDaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBleGFtcGxlcyBvZgog
ICAgIC8vIGNvbnRyb2xzIHRoYXQgbmVlZCB0byBkbyB0aGlzLgotICAgIHZpcnR1YWwgaW50IGJh
c2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisgICAgdmlydHVhbCBp
bnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKIAogICAgIC8v
IEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhl
IHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgotICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9y
dHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgY29u
dHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7CiAKICAgICAvLyBB
IGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlzIHN1cHBvcnRl
ZCBhdCBhbGwuCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNv
bnN0IFJlbmRlck9iamVjdCosIEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVw
YWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCBi
b29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEm
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsbExheWVyJiwgY29u
c3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CkBAIC04Niw0NyArODYsNDcgQEAgcHVi
bGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZh
bHVlLgotICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVj
a2JveChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0
OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShS
ZW5kZXJTdHlsZSopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0g
ICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29s
IHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1l
bnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBw
YWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBi
b29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERl
Y29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50Q2Fwc0xv
Y2tJbmRpY2F0b3IoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlh
Q29udHJvbHNTdHlsZVNoZWV0KCkgb3ZlcnJpZGU7CkBAIC0xMzcsNyArMTM3LDcgQEAgcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVy
TWV0ZXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzTWV0ZXIoQ29udHJvbFBhcnQpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBib29sIHBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CkBAIC0xNzIsNyArMTcyLDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBJbnRTaXplKiBwb3B1
cEJ1dHRvblNpemVzKCkgY29uc3Q7CiAgICAgY29uc3QgaW50KiBwb3B1cEJ1dHRvbk1hcmdpbnMo
TlNDb250cm9sU2l6ZSkgY29uc3Q7CiAgICAgY29uc3QgaW50KiBwb3B1cEJ1dHRvblBhZGRpbmco
TlNDb250cm9sU2l6ZSkgY29uc3Q7Ci0gICAgdm9pZCBwYWludE1lbnVMaXN0QnV0dG9uR3JhZGll
bnRzKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2b2lkIHBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIGNvbnN0IEludFNpemUqIG1l
bnVMaXN0U2l6ZXMoKSBjb25zdDsKIAogICAgIGNvbnN0IEludFNpemUqIHNlYXJjaEZpZWxkU2l6
ZXMoKSBjb25zdDsKQEAgLTE4MCw3ICsxODAsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IEludFNp
emUqIHJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VhcmNoRmllbGRT
aXplKFJlbmRlclN0eWxlKikgY29uc3Q7CiAKLSAgICBUaGVtZUNvbnRyb2xTdGF0ZSBkZXRlcm1p
bmVTdGF0ZShSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICBUaGVtZUNvbnRyb2xTdGF0ZSBkZXRl
cm1pbmVTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKIAogICAgIFN0cmluZyBtX21l
ZGlhQ29udHJvbHNTY3JpcHQ7CiAgICAgU3RyaW5nIG1fbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAppbmRleCA2ZTA1
YjQ5YTdjZjU3MDg1NzZhYzI1YzY2ODdkNjNjZjhkMDA4YTE5Li4xYjkzZTAyYjc0YjA1ZmQ4Nzhj
MDVhNzBiYzdmN2JlZmRjYzkxOGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZVdpbi5jcHAKQEAgLTQzNCwxMCArNDM0LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46
OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAgICBy
ZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHlsZS0+YXBwZWFyYW5jZSgpKTsKIH0KIAotdW5zaWduZWQg
UmVuZGVyVGhlbWVXaW46OmRldGVybWluZUNsYXNzaWNTdGF0ZShSZW5kZXJPYmplY3QqIG8sIENv
bnRyb2xTdWJQYXJ0IHN1YlBhcnQpCit1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5l
Q2xhc3NpY1N0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYgbywgQ29udHJvbFN1YlBhcnQgc3ViUGFy
dCkKIHsKICAgICB1bnNpZ25lZCBzdGF0ZSA9IDA7Ci0gICAgc3dpdGNoIChvLT5zdHlsZSgpLmFw
cGVhcmFuY2UoKSkgeworICAgIHN3aXRjaCAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgewogICAg
ICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgogICAgICAgICBjYXNlIEJ1dHRvblBhcnQ6CiAgICAg
ICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CkBAIC00NDksNyArNDQ5LDcgQEAgdW5zaWduZWQg
UmVuZGVyVGhlbWVXaW46OmRldGVybWluZUNsYXNzaWNTdGF0ZShSZW5kZXJPYmplY3QqIG8sIENv
bnRyb2xTdWJQYXJ0IHMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJhZGlvUGFy
dDoKICAgICAgICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgICAgICAgICBzdGF0ZSA9IChvLT5z
dHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpID8gREZDU19CVVRUT05SQURJTyA6IERG
Q1NfQlVUVE9OQ0hFQ0s7CisgICAgICAgICAgICBzdGF0ZSA9IChvLnN0eWxlKCkuYXBwZWFyYW5j
ZSgpID09IFJhZGlvUGFydCkgPyBERkNTX0JVVFRPTlJBRElPIDogREZDU19CVVRUT05DSEVDSzsK
ICAgICAgICAgICAgIGlmIChpc0NoZWNrZWQobykpCiAgICAgICAgICAgICAgICAgc3RhdGUgfD0g
REZDU19DSEVDS0VEOwogICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQobykpCkBAIC00ODEsMTAg
KzQ4MSwxMCBAQCB1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lQ2xhc3NpY1N0YXRl
KFJlbmRlck9iamVjdCogbywgQ29udHJvbFN1YlBhcnQgcwogICAgIHJldHVybiBzdGF0ZTsKIH0K
IAotdW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVybWluZVN0YXRlKFJlbmRlck9iamVjdCog
bykKK3Vuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVTdGF0ZShjb25zdCBSZW5kZXJP
YmplY3QmIG8pCiB7CiAgICAgdW5zaWduZWQgcmVzdWx0ID0gVFNfTk9STUFMOwotICAgIENvbnRy
b2xQYXJ0IGFwcGVhcmFuY2UgPSBvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKKyAgICBDb250cm9s
UGFydCBhcHBlYXJhbmNlID0gby5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKICAgICBpZiAoIWlzRW5h
YmxlZChvKSkKICAgICAgICAgcmVzdWx0ID0gVFNfRElTQUJMRUQ7CiAgICAgZWxzZSBpZiAoaXNS
ZWFkT25seUNvbnRyb2wobykgJiYgKFRleHRGaWVsZFBhcnQgPT0gYXBwZWFyYW5jZSB8fCBUZXh0
QXJlYVBhcnQgPT0gYXBwZWFyYW5jZSB8fCBTZWFyY2hGaWVsZFBhcnQgPT0gYXBwZWFyYW5jZSkp
CkBAIC01MDIsMTIgKzUwMiwxMiBAQCB1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5l
U3RhdGUoUmVuZGVyT2JqZWN0KiBvKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXVuc2lnbmVk
IFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVTbGlkZXJUaHVtYlN0YXRlKFJlbmRlck9iamVjdCog
bykKK3Vuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVTbGlkZXJUaHVtYlN0YXRlKGNv
bnN0IFJlbmRlck9iamVjdCYgbykKIHsKICAgICB1bnNpZ25lZCByZXN1bHQgPSBUVVNfTk9STUFM
OwogICAgIGlmICghaXNFbmFibGVkKG8pKQogICAgICAgICByZXN1bHQgPSBUVVNfRElTQUJMRUQ7
Ci0gICAgZWxzZSBpZiAoc3VwcG9ydHNGb2N1cyhvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgJiYg
aXNGb2N1c2VkKG8pKQorICAgIGVsc2UgaWYgKHN1cHBvcnRzRm9jdXMoby5zdHlsZSgpLmFwcGVh
cmFuY2UoKSkgJiYgaXNGb2N1c2VkKG8pKQogICAgICAgICByZXN1bHQgPSBUVVNfRk9DVVNFRDsK
ICAgICBlbHNlIGlmIChpc1ByZXNzZWQobykpCiAgICAgICAgIHJlc3VsdCA9IFRVU19QUkVTU0VE
OwpAQCAtNTE2LDE0ICs1MTYsMTQgQEAgdW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVybWlu
ZVNsaWRlclRodW1iU3RhdGUoUmVuZGVyT2JqZWN0KiBvKQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXVuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVCdXR0b25TdGF0ZShSZW5kZXJP
YmplY3QqIG8pCit1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lQnV0dG9uU3RhdGUo
Y29uc3QgUmVuZGVyT2JqZWN0JiBvKQogewogICAgIHVuc2lnbmVkIHJlc3VsdCA9IFBCU19OT1JN
QUw7CiAgICAgaWYgKCFpc0VuYWJsZWQobykpCiAgICAgICAgIHJlc3VsdCA9IFBCU19ESVNBQkxF
RDsKICAgICBlbHNlIGlmIChpc1ByZXNzZWQobykpCiAgICAgICAgIHJlc3VsdCA9IFBCU19QUkVT
U0VEOwotICAgIGVsc2UgaWYgKHN1cHBvcnRzRm9jdXMoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkp
ICYmIGlzRm9jdXNlZChvKSkKKyAgICBlbHNlIGlmIChzdXBwb3J0c0ZvY3VzKG8uc3R5bGUoKS5h
cHBlYXJhbmNlKCkpICYmIGlzRm9jdXNlZChvKSkKICAgICAgICAgcmVzdWx0ID0gUEJTX0RFRkFV
TFRFRDsKICAgICBlbHNlIGlmIChpc0hvdmVyZWQobykpCiAgICAgICAgIHJlc3VsdCA9IFBCU19I
T1Q7CkBAIC01MzIsNyArNTMyLDcgQEAgdW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVybWlu
ZUJ1dHRvblN0YXRlKFJlbmRlck9iamVjdCogbykKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi11
bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lU3BpbkJ1dHRvblN0YXRlKFJlbmRlck9i
amVjdCogbywgQ29udHJvbFN1YlBhcnQgc3ViUGFydCkKK3Vuc2lnbmVkIFJlbmRlclRoZW1lV2lu
OjpkZXRlcm1pbmVTcGluQnV0dG9uU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBDb250cm9s
U3ViUGFydCBzdWJQYXJ0KQogewogICAgIGJvb2wgaXNVcEJ1dHRvbiA9IHN1YlBhcnQgPT0gU3Bp
bkJ1dHRvblVwOwogICAgIHVuc2lnbmVkIHJlc3VsdCA9IGlzVXBCdXR0b24gPyBVUFNfTk9STUFM
IDogRE5TX05PUk1BTDsKQEAgLTU0NSwxMCArNTQ1LDEwIEBAIHVuc2lnbmVkIFJlbmRlclRoZW1l
V2luOjpkZXRlcm1pbmVTcGluQnV0dG9uU3RhdGUoUmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3Vi
UGFyCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVGhlbWVEYXRhIFJlbmRlclRoZW1lV2luOjpn
ZXRDbGFzc2ljVGhlbWVEYXRhKFJlbmRlck9iamVjdCogbywgQ29udHJvbFN1YlBhcnQgc3ViUGFy
dCkKK1RoZW1lRGF0YSBSZW5kZXJUaGVtZVdpbjo6Z2V0Q2xhc3NpY1RoZW1lRGF0YShjb25zdCBS
ZW5kZXJPYmplY3QmIG8sIENvbnRyb2xTdWJQYXJ0IHN1YlBhcnQpCiB7CiAgICAgVGhlbWVEYXRh
IHJlc3VsdDsKLSAgICBzd2l0Y2ggKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpKSB7CisgICAgc3dp
dGNoIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpKSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBh
cnQ6CiAgICAgICAgIGNhc2UgQnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9u
UGFydDoKQEAgLTU5NywxMyArNTk3LDEzIEBAIFRoZW1lRGF0YSBSZW5kZXJUaGVtZVdpbjo6Z2V0
Q2xhc3NpY1RoZW1lRGF0YShSZW5kZXJPYmplY3QqIG8sIENvbnRyb2xTdWJQYXJ0IHN1CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotVGhlbWVEYXRhIFJlbmRlclRoZW1lV2luOjpnZXRUaGVtZURh
dGEoUmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3ViUGFydCBzdWJQYXJ0KQorVGhlbWVEYXRhIFJl
bmRlclRoZW1lV2luOjpnZXRUaGVtZURhdGEoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBDb250cm9s
U3ViUGFydCBzdWJQYXJ0KQogewogICAgIGlmICghaGF2ZVRoZW1lKQogICAgICAgICByZXR1cm4g
Z2V0Q2xhc3NpY1RoZW1lRGF0YShvLCBzdWJQYXJ0KTsKIAogICAgIFRoZW1lRGF0YSByZXN1bHQ7
Ci0gICAgc3dpdGNoIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgeworICAgIHN3aXRjaCAoby5z
dHlsZSgpLmFwcGVhcmFuY2UoKSkgewogICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgogICAg
ICAgICBjYXNlIEJ1dHRvblBhcnQ6CiAgICAgICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CkBA
IC02MTgsNyArNjE4LDcgQEAgVGhlbWVEYXRhIFJlbmRlclRoZW1lV2luOjpnZXRUaGVtZURhdGEo
UmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3ViUGFydCBzdWJQYXJ0KQogICAgICAgICBjYXNlIE1l
bnVsaXN0QnV0dG9uUGFydDogewogICAgICAgICAgICAgY29uc3QgYm9vbCBpc1Zpc3RhT3JMYXRl
ciA9ICh3aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0YSk7CiAgICAgICAgICAgICByZXN1
bHQubV9wYXJ0ID0gaXNWaXN0YU9yTGF0ZXIgPyBDUF9EUk9QRE9XTkJVVFRPTlJJR0hUIDogQ1Bf
RFJPUERPV05CVVRUT047Ci0gICAgICAgICAgICBpZiAoaXNWaXN0YU9yTGF0ZXIgJiYgby0+ZnJh
bWUoKS5zZXR0aW5ncygpLmFwcGxpY2F0aW9uQ2hyb21lTW9kZSgpKSB7CisgICAgICAgICAgICBp
ZiAoaXNWaXN0YU9yTGF0ZXIgJiYgby5mcmFtZSgpLnNldHRpbmdzKCkuYXBwbGljYXRpb25DaHJv
bWVNb2RlKCkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgInJlYWRvbmx5IiBsb29rIHdlIHVz
ZSBpbiBhcHBsaWNhdGlvbiBjaHJvbWUgbW9kZQogICAgICAgICAgICAgICAgIC8vIG9ubHkgdXNl
cyBhICJub3JtYWwiIGxvb2sgZm9yIHRoZSBkcm9wIGRvd24gYnV0dG9uLgogICAgICAgICAgICAg
ICAgIHJlc3VsdC5tX3N0YXRlID0gVFNfTk9STUFMOwpAQCAtNjY1LDcgKzY2NSw3IEBAIFRoZW1l
RGF0YSBSZW5kZXJUaGVtZVdpbjo6Z2V0VGhlbWVEYXRhKFJlbmRlck9iamVjdCogbywgQ29udHJv
bFN1YlBhcnQgc3ViUGFydCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBk
cmF3Q29udHJvbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJlbmRlck9iamVjdCogbywgSEFO
RExFIHRoZW1lLCBjb25zdCBUaGVtZURhdGEmIHRoZW1lRGF0YSwgY29uc3QgSW50UmVjdCYgcikK
K3N0YXRpYyB2b2lkIGRyYXdDb250cm9sKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
UmVuZGVyT2JqZWN0JiBvLCBIQU5ETEUgdGhlbWUsIGNvbnN0IFRoZW1lRGF0YSYgdGhlbWVEYXRh
LCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIGJvb2wgYWxwaGFCbGVuZCA9IGZhbHNlOwogICAg
IGlmICh0aGVtZSkKQEAgLTY4NSwxMCArNjg1LDEwIEBAIHN0YXRpYyB2b2lkIGRyYXdDb250cm9s
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyT2JqZWN0KiBvLCBIQU5ETEUgdGhlbWUs
CiAgICAgICAgIH0gZWxzZSBpZiAodGhlbWVEYXRhLm1fcGFydCA9PSBUS1BfVFJBQ0sgfHwgdGhl
bWVEYXRhLm1fcGFydCA9PSBUS1BfVFJBQ0tWRVJUKSB7CiAgICAgICAgICAgICA6OkRyYXdFZGdl
KGhkYywgJndpZGdldFJlY3QsIEVER0VfU1VOS0VOLCBCRl9SRUNUIHwgQkZfQURKVVNUKTsKICAg
ICAgICAgICAgIDo6RmlsbFJlY3QoaGRjLCAmd2lkZ2V0UmVjdCwgKEhCUlVTSClHZXRTdG9ja09i
amVjdChHUkFZX0JSVVNIKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKG8tPnN0eWxlKCkuYXBwZWFy
YW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwKLSAgICAgICAgICAgICAgICAg
ICAgby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpICYm
IAotICAgICAgICAgICAgICAgICAgICh0aGVtZURhdGEubV9wYXJ0ID09IFRLUF9USFVNQkJPVFRP
TSB8fCB0aGVtZURhdGEubV9wYXJ0ID09IFRLUF9USFVNQlRPUCB8fCAKLSAgICAgICAgICAgICAg
ICAgICAgdGhlbWVEYXRhLm1fcGFydCA9PSBUS1BfVEhVTUJMRUZUIHx8IHRoZW1lRGF0YS5tX3Bh
cnQgPT0gVEtQX1RIVU1CUklHSFQpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoKG8uc3R5bGUoKS5h
cHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydAorICAgICAgICB8fCBvLnN0
eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICAm
JiAodGhlbWVEYXRhLm1fcGFydCA9PSBUS1BfVEhVTUJCT1RUT00gfHwgdGhlbWVEYXRhLm1fcGFy
dCA9PSBUS1BfVEhVTUJUT1AKKyAgICAgICAgfHwgdGhlbWVEYXRhLm1fcGFydCA9PSBUS1BfVEhV
TUJMRUZUIHx8IHRoZW1lRGF0YS5tX3BhcnQgPT0gVEtQX1RIVU1CUklHSFQpKSB7CiAgICAgICAg
ICAgICA6OkRyYXdFZGdlKGhkYywgJndpZGdldFJlY3QsIEVER0VfUkFJU0VELCBCRl9SRUNUIHwg
QkZfU09GVCB8IEJGX01JRERMRSB8IEJGX0FESlVTVCk7CiAgICAgICAgICAgICBpZiAodGhlbWVE
YXRhLm1fc3RhdGUgPT0gVFVTX0RJU0FCTEVEKSB7CiAgICAgICAgICAgICAgICAgc3RhdGljIFdP
UkQgcGF0dGVybkJpdHNbOF0gPSB7MHhhYSwgMHg1NSwgMHhhYSwgMHg1NSwgMHhhYSwgMHg1NSwg
MHhhYSwgMHg1NX07CkBAIC03MTAsNyArNzEwLDcgQEAgc3RhdGljIHZvaWQgZHJhd0NvbnRyb2wo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJPYmplY3QqIG8sIEhBTkRMRSB0aGVtZSwK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFB1c2ggYnV0
dG9ucywgYnV0dG9ucywgY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBhbmQgdGhlIGRyb3Bkb3duIGFy
cm93IGluIG1lbnVsaXN0cy4KLSAgICAgICAgICAgIGlmIChvLT5zdHlsZSgpLmFwcGVhcmFuY2Uo
KSA9PSBEZWZhdWx0QnV0dG9uUGFydCkgeworICAgICAgICAgICAgaWYgKG8uc3R5bGUoKS5hcHBl
YXJhbmNlKCkgPT0gRGVmYXVsdEJ1dHRvblBhcnQpIHsKICAgICAgICAgICAgICAgICBIQlJVU0gg
YnJ1c2ggPSA6OkdldFN5c0NvbG9yQnJ1c2goQ09MT1JfM0RES1NIQURPVyk7CiAgICAgICAgICAg
ICAgICAgOjpGcmFtZVJlY3QoaGRjLCAmd2lkZ2V0UmVjdCwgYnJ1c2gpOwogICAgICAgICAgICAg
ICAgIDo6SW5mbGF0ZVJlY3QoJndpZGdldFJlY3QsIC0xLCAtMSk7CkBAIC03MjQsNyArNzI0LDcg
QEAgc3RhdGljIHZvaWQgZHJhd0NvbnRyb2woR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5k
ZXJPYmplY3QqIG8sIEhBTkRMRSB0aGVtZSwKICAgICAgICAgRElCUGl4ZWxEYXRhOjpzZXRSR0JB
Qml0bWFwQWxwaGEod2luZG93c0NvbnRleHQuaGRjKCksIHIsIDI1NSk7CiB9CiAKLWJvb2wgUmVu
ZGVyVGhlbWVXaW46OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRCdXR0b24o
Y29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCiB7ICAKICAgICBkcmF3Q29udHJvbChpLmNvbnRleHQsICBvLCBidXR0b25UaGVtZSgpLCBn
ZXRUaGVtZURhdGEobyksIHIpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTczOSw3ICs3MzksNyBA
QCB2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZQogICAgIHN0eWxlLT5zZXRNaW5XaWR0aChMZW5ndGgo
d2lkdGgsIEZpeGVkKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50SW5uZXJTcGlu
QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByKQorYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVu
ZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCiB7CiAg
ICAgLy8gV2Ugc3BsaXQgdGhlIHNwZWNpZmllZCByZWN0YW5nbGUgaW50byB0d28gdmVydGljYWxs
eS4gV2UgY2FuJ3QgZHJhdyBhCiAgICAgLy8gc3BpbiBidXR0b24gb2Ygd2hpY2ggaGVpZ2h0IGlz
IGxlc3MgdGhhbiAycHguCkBAIC03NzEsMTkgKzc3MSwxOSBAQCB2b2lkIFJlbmRlclRoZW1lV2lu
OjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgICAgICBzdHls
ZS0+c2V0SGVpZ2h0KExlbmd0aCgxMywgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdp
bjo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lV2luOjpwYWludFRleHRGaWVsZChjb25z
dCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikK
IHsKICAgICBkcmF3Q29udHJvbChpLmNvbnRleHQsICBvLCB0ZXh0RmllbGRUaGVtZSgpLCBnZXRU
aGVtZURhdGEobyksIHIpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZVdpbjo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVXaW46
OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgSEFORExFIHRoZW1l
OwogICAgIGludCBwYXJ0OwogICAgIGlmIChoYXZlVGhlbWUgJiYgKHdpbmRvd3NWZXJzaW9uKCkg
Pj0gV2luZG93c1Zpc3RhKSkgewogICAgICAgICB0aGVtZSA9IG1lbnVMaXN0VGhlbWUoKTsKLSAg
ICAgICAgaWYgKHJlbmRlcmVyLT5mcmFtZSgpLnNldHRpbmdzKCkuYXBwbGljYXRpb25DaHJvbWVN
b2RlKCkpCisgICAgICAgIGlmIChyZW5kZXJlci5mcmFtZSgpLnNldHRpbmdzKCkuYXBwbGljYXRp
b25DaHJvbWVNb2RlKCkpCiAgICAgICAgICAgICBwYXJ0ID0gQ1BfUkVBRE9OTFk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHBhcnQgPSBDUF9CT1JERVI7CkBAIC03OTIsNyArNzkyLDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBjb25zdCBQYWludEluZm8mIHBhaW4KICAgICAgICAgcGFydCA9IFRGUF9URVhURklFTEQ7CiAg
ICAgfQogCi0gICAgZHJhd0NvbnRyb2wocGFpbnRJbmZvLmNvbnRleHQsICByZW5kZXJlciwgdGhl
bWUsIFRoZW1lRGF0YShwYXJ0LCBkZXRlcm1pbmVTdGF0ZShyZW5kZXJlcikpLCByZWN0KTsKKyAg
ICBkcmF3Q29udHJvbChwYWludEluZm8uY29udGV4dCwgcmVuZGVyZXIsIHRoZW1lLCBUaGVtZURh
dGEocGFydCwgZGV0ZXJtaW5lU3RhdGUocmVuZGVyZXIpKSwgcmVjdCk7CiAgICAgCiAgICAgcmV0
dXJuIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhyZW5kZXJlciwgcGFpbnRJbmZvLCBy
ZWN0KTsKIH0KQEAgLTgzNCw3ICs4MzQsNyBAQCB2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RN
ZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbgogICAg
IHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVXaW46OnBh
aW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVy
VGhlbWVXaW46OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKICAgICAvLyBGSVhNRTogRG9uJ3QgbWFrZSBoYXJkY29kZWQgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHRoaWNrbmVzcyBvZiB0aGUgdGV4dGZpZWxkIGJvcmRlci4KICAgICBpbnQgYm9y
ZGVyVGhpY2tuZXNzID0gaGF2ZVRoZW1lID8gMSA6IDI7CkBAIC04NDMsNyArODQzLDcgQEAgYm9v
bCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIGNvbnMKICAgICAvLyBsZWF2aW5nIHNwYWNlIGZvciB0aGUgdGV4dCBm
aWVsZCdzIDFweCBib3JkZXIKICAgICBJbnRSZWN0IGJ1dHRvblJlY3QocmVjdCk7CiAgICAgYnV0
dG9uUmVjdC5pbmZsYXRlKC1ib3JkZXJUaGlja25lc3MpOwotICAgIGlmIChyZW5kZXJlci0+c3R5
bGUoKS5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkuZGlyZWN0
aW9uKCkgPT0gTFRSKQogICAgICAgICBidXR0b25SZWN0LnNldFgoYnV0dG9uUmVjdC5tYXhYKCkg
LSBkcm9wRG93bkJ1dHRvbldpZHRoKTsKICAgICBidXR0b25SZWN0LnNldFdpZHRoKGRyb3BEb3du
QnV0dG9uV2lkdGgpOwogCkBAIC04NjEsMTQgKzg2MSwxNCBAQCBib29sIFJlbmRlclRoZW1lV2lu
OjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwg
Y29ucwogCiBjb25zdCBpbnQgdHJhY2tXaWR0aCA9IDQ7CiAKLWJvb2wgUmVuZGVyVGhlbWVXaW46
OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNsaWRlclRyYWNrKGNv
bnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBy
KQogewogICAgIEludFJlY3QgYm91bmRzID0gcjsKICAgICAKLSAgICBpZiAoby0+c3R5bGUoKS5h
cHBlYXJhbmNlKCkgPT0gIFNsaWRlckhvcml6b250YWxQYXJ0KSB7CisgICAgaWYgKG8uc3R5bGUo
KS5hcHBlYXJhbmNlKCkgPT0gIFNsaWRlckhvcml6b250YWxQYXJ0KSB7CiAgICAgICAgIGJvdW5k
cy5zZXRIZWlnaHQodHJhY2tXaWR0aCk7CiAgICAgICAgIGJvdW5kcy5zZXRZKHIueSgpICsgci5o
ZWlnaHQoKSAvIDIgLSB0cmFja1dpZHRoIC8gMik7Ci0gICAgfSBlbHNlIGlmIChvLT5zdHlsZSgp
LmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpIHsKKyAgICB9IGVsc2UgaWYgKG8u
c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KSB7CiAgICAgICAgIGJv
dW5kcy5zZXRXaWR0aCh0cmFja1dpZHRoKTsKICAgICAgICAgYm91bmRzLnNldFgoci54KCkgKyBy
LndpZHRoKCkgLyAyIC0gdHJhY2tXaWR0aCAvIDIpOwogICAgIH0KQEAgLTg3Nyw3ICs4NzcsNyBA
QCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZVdpbjo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50
U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCiB7ICAgCiAgICAgZHJhd0NvbnRyb2woaS5jb250ZXh0LCAgbywgc2xp
ZGVyVGhlbWUoKSwgZ2V0VGhlbWVEYXRhKG8pLCByKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC05
MDIsNyArOTAyLDcgQEAgdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2xpZGVyVGh1bWJTaXpl
KFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiAjZW5kaWYKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50
U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCiB7CiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwog
fQpAQCAtOTE5LDE0ICs5MTksMTQgQEAgdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNo
RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXIKICAgICAgICAg
c3R5bGUtPnNldE91dGxpbmVPZmZzZXQoLTIpOwogfQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpw
YWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lV2luOjpw
YWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgSW50UmVjdCBi
b3VuZHMgPSByOwotICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7Ci0gICAgaWYgKCFvLT5wYXJlbnQo
KSB8fCAhby0+cGFyZW50KCktPmlzQm94KCkpCisgICAgQVNTRVJUKG8ucGFyZW50KCkpOworICAg
IGlmICghby5wYXJlbnQoKSB8fCAhby5wYXJlbnQoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJC
b3goby0+cGFyZW50KCkpOworICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5k
ZXJCb3goby5wYXJlbnQoKSk7CiAKICAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRl
ckJveC0+YWJzb2x1dGVDb250ZW50Qm94KCk7CiAgICAgCkBAIC05NDAsNyArOTQwLDcgQEAgYm9v
bCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW4KIAogICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsSW1hZ2UgPSBJ
bWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbCIpLmxlYWtSZWYoKTsKICAg
ICBzdGF0aWMgSW1hZ2UqIGNhbmNlbFByZXNzZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZSgic2VhcmNoQ2FuY2VsUHJlc3NlZCIpLmxlYWtSZWYoKTsKLSAgICBwYWludEluZm8u
Y29udGV4dC0+ZHJhd0ltYWdlKGlzUHJlc3NlZChvKSA/IGNhbmNlbFByZXNzZWRJbWFnZSA6IGNh
bmNlbEltYWdlLCBvLT5zdHlsZSgpLmNvbG9yU3BhY2UoKSwgYm91bmRzKTsKKyAgICBwYWludElu
Zm8uY29udGV4dC0+ZHJhd0ltYWdlKGlzUHJlc3NlZChvKSA/IGNhbmNlbFByZXNzZWRJbWFnZSA6
IGNhbmNlbEltYWdlLCBvLnN0eWxlKCkuY29sb3JTcGFjZSgpLCBib3VuZHMpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIApAQCAtOTcwLDE0ICs5NzAsMTQgQEAgdm9pZCBSZW5kZXJUaGVtZVdpbjo6
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVy
KiwKICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOwog
fQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25QYXJ0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgSW50UmVjdCBib3VuZHMgPSByOwot
ICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7Ci0gICAgaWYgKCFvLT5wYXJlbnQoKSB8fCAhby0+cGFy
ZW50KCktPmlzQm94KCkpCisgICAgQVNTRVJUKG8ucGFyZW50KCkpOworICAgIGlmICghby5wYXJl
bnQoKSB8fCAhby5wYXJlbnQoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAotICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby0+cGFyZW50
KCkpOworICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby5wYXJl
bnQoKSk7CiAgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRl
Q29udGVudEJveCgpOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGRlY29yYXRp
b24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94CkBAIC05ODks
NyArOTg5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydChSZW5kZXJPYmplY3QqIG8sIGNvbnMKICAgICBib3VuZHMuc2V0WShwYXJl
bnRCb3gueSgpICsgKHBhcmVudEJveC5oZWlnaHQoKSAtIGJvdW5kcy5oZWlnaHQoKSArIDEpIC8g
Mik7CiAgICAgCiAgICAgc3RhdGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2Fk
UGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoTWFnbmlmaWVyIikubGVha1JlZigpOwotICAgIHBhaW50
SW5mby5jb250ZXh0LT5kcmF3SW1hZ2UobWFnbmlmaWVySW1hZ2UsIG8tPnN0eWxlKCkuY29sb3JT
cGFjZSgpLCBib3VuZHMpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2UobWFnbmlm
aWVySW1hZ2UsIG8uc3R5bGUoKS5jb2xvclNwYWNlKCksIGJvdW5kcyk7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCkBAIC0xMDA0LDE2ICsxMDA0LDE2IEBAIHZvaWQgUmVuZGVyVGhlbWVXaW46OmFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
CiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVySGVpZ2h0LCBGaXhlZCkpOwog
fQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByKQorYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24o
Y29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcikKIHsKICAgICBJbnRSZWN0IGJvdW5kcyA9IHI7Ci0gICAgQVNTRVJUKG8tPnBh
cmVudCgpKTsKLSAgICBpZiAoIW8tPnBhcmVudCgpKQorICAgIEFTU0VSVChvLnBhcmVudCgpKTsK
KyAgICBpZiAoIW8ucGFyZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW8t
PnBhcmVudCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKKyAgICBpZiAoIW8ucGFyZW50KCkg
fHwgIW8ucGFyZW50KCktPmlzQm94KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAg
ICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8tPnBhcmVudCgpKTsK
KyAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8ucGFyZW50KCkp
OwogICAgIEludFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVyQm94LT5hYnNvbHV0ZUNvbnRl
bnRCb3goKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0aW9uIHdp
bGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKQEAgLTEwMjUsNyArMTAyNSw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJCiAgICAgYm91bmRzLnNldFkocGFyZW50Qm94LnkoKSArIChwYXJlbnRC
b3guaGVpZ2h0KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAvIDIpOwogCiAgICAgc3RhdGljIElt
YWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNo
TWFnbmlmaWVyUmVzdWx0cyIpLmxlYWtSZWYoKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJh
d0ltYWdlKG1hZ25pZmllckltYWdlLCBvLT5zdHlsZSgpLmNvbG9yU3BhY2UoKSwgYm91bmRzKTsK
KyAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKG1hZ25pZmllckltYWdlLCBvLnN0eWxl
KCkuY29sb3JTcGFjZSgpLCBib3VuZHMpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTE3
NywxMiArMTE3NywxMiBAQCBJbnRTaXplIFJlbmRlclRoZW1lV2luOjptZXRlclNpemVGb3JCb3Vu
ZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JiBibwogICAgIHJldHVybiBib3Vu
ZHMuc2l6ZSgpOwogfQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpwYWludE1ldGVyKFJlbmRlck9i
amVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50TWV0ZXIoY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewotICAgIGlmICghcmVuZGVyT2JqZWN0LT5pc01ldGVyKCkpCisgICAg
aWYgKCFyZW5kZXJPYmplY3QuaXNNZXRlcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVyKHJlbmRlck9iamVjdCkt
Pm1ldGVyRWxlbWVudCgpOworICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRl
ck1ldGVyKCZyZW5kZXJPYmplY3QpLT5tZXRlckVsZW1lbnQoKTsKIAogICAgIFRoZW1lRGF0YSB0
aGVtZSA9IGdldFRoZW1lRGF0YShyZW5kZXJPYmplY3QpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZVdpbi5oCmluZGV4IDE3OWNmMzA1ZDk4NTdhMDBmYTQxZTNkOTc0ZDdm
MzJlMGMyOGFlZjUuLmY1MTQyNmQyYjM2MGI4Y2Q4ZThjZTAyOTZlOTcxN2FjOTM2NjBmYjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCkBAIC02Niw1MSArNjYs
NTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZv
bnREZXNjcmlwdGlvbiYpIGNvbnN0OwogICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoQ1NT
VmFsdWVJRCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKICAgICB7IHJldHVybiBwYWludEJ1dHRvbihvLCBp
LCByKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBj
b25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByKQogICAgIHsgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOyB9CiAgICAgdmly
dHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAgICAgeyBy
ZXR1cm4gc2V0Q2hlY2tib3hTaXplKHN0eWxlKTsgfQogCi0gICAgdmlydHVhbCBib29sIHBhaW50
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdElu
bmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9v
bCBwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJl
YShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNv
bnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKICAgICB7IHJldHVybiBwYWludFRl
eHRGaWVsZChvLCBpLCByKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmly
dHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxp
c3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0
aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7Ci0gICAgdmlydHVhbCBib29s
IHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRl
clRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
Ym9vbCBwb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
bihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIGZhbHNlOyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBh
cnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOwogCkBAIC0xMzMsNyAr
MTMzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRlclNpemVGb3JCb3VuZHMo
Y29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzTWV0ZXIoQ29udHJvbFBhcnQpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZXRlcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CkBAIC0xNTEsMTYgKzE1MSwxNiBAQCBwcml2YXRlOgogICAgIHZvaWQg
YWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSopIGNvbnN0OwogICAgIHZvaWQgY2xvc2Uo
KTsKIAotICAgIHVuc2lnbmVkIGRldGVybWluZVN0YXRlKFJlbmRlck9iamVjdCopOwotICAgIHVu
c2lnbmVkIGRldGVybWluZUNsYXNzaWNTdGF0ZShSZW5kZXJPYmplY3QqLCBDb250cm9sU3ViUGFy
dCA9IE5vbmUpOwotICAgIHVuc2lnbmVkIGRldGVybWluZVNsaWRlclRodW1iU3RhdGUoUmVuZGVy
T2JqZWN0Kik7Ci0gICAgdW5zaWduZWQgZGV0ZXJtaW5lQnV0dG9uU3RhdGUoUmVuZGVyT2JqZWN0
Kik7Ci0gICAgdW5zaWduZWQgZGV0ZXJtaW5lU3BpbkJ1dHRvblN0YXRlKFJlbmRlck9iamVjdCos
IENvbnRyb2xTdWJQYXJ0ID0gTm9uZSk7CisgICAgdW5zaWduZWQgZGV0ZXJtaW5lU3RhdGUoY29u
c3QgUmVuZGVyT2JqZWN0Jik7CisgICAgdW5zaWduZWQgZGV0ZXJtaW5lQ2xhc3NpY1N0YXRlKGNv
bnN0IFJlbmRlck9iamVjdCYsIENvbnRyb2xTdWJQYXJ0ID0gTm9uZSk7CisgICAgdW5zaWduZWQg
ZGV0ZXJtaW5lU2xpZGVyVGh1bWJTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmKTsKKyAgICB1bnNp
Z25lZCBkZXRlcm1pbmVCdXR0b25TdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmKTsKKyAgICB1bnNp
Z25lZCBkZXRlcm1pbmVTcGluQnV0dG9uU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiwgQ29udHJv
bFN1YlBhcnQgPSBOb25lKTsKIAogICAgIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCkg
Y29uc3Q7CiAKLSAgICBUaGVtZURhdGEgZ2V0VGhlbWVEYXRhKFJlbmRlck9iamVjdCosIENvbnRy
b2xTdWJQYXJ0ID0gTm9uZSk7Ci0gICAgVGhlbWVEYXRhIGdldENsYXNzaWNUaGVtZURhdGEoUmVu
ZGVyT2JqZWN0KiBvLCBDb250cm9sU3ViUGFydCA9IE5vbmUpOworICAgIFRoZW1lRGF0YSBnZXRU
aGVtZURhdGEoY29uc3QgUmVuZGVyT2JqZWN0JiwgQ29udHJvbFN1YlBhcnQgPSBOb25lKTsKKyAg
ICBUaGVtZURhdGEgZ2V0Q2xhc3NpY1RoZW1lRGF0YShjb25zdCBSZW5kZXJPYmplY3QmLCBDb250
cm9sU3ViUGFydCA9IE5vbmUpOwogCiAgICAgSEFORExFIGJ1dHRvblRoZW1lKCkgY29uc3Q7CiAg
ICAgSEFORExFIHRleHRGaWVsZFRoZW1lKCkgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230076</attachid>
            <date>2014-04-24 06:50:55 -0700</date>
            <delta_ts>2014-04-24 07:28:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132037-20140424065033.patch</filename>
            <type>text/plain</type>
            <size>241993</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3Njc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWJlMGU5NWJiNmE3Mzcy
YTdkMmRmZjY2YjI1ZjAyYzhhMjEwODViNC4uNjE5YWEwYWUzZjExNjFlZGM1M2ZiNzAzNzVkYzEz
MjJiNmE1MDJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MiBAQAorMjAxNC0wNC0yMyAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFRyYW5zaXRpb24gUmVuZGVy
VGhlbWUgQVBJIGZyb20gUmVuZGVyT2JqZWN0KiB0byBjb25zdCBSZW5kZXJPYmplY3QmCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzIwMzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgorCisgICAgICAgIFVzaW5nIGNvbnN0IHJl
ZmVyZW5jZXMgcHJvdmlkZXMgYmV0dGVyIGVuY2Fwc3VsYXRpb24gYW5kIGltcHJvdmUgc2VjdXJp
dHkuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OmJvdW5kaW5nQm94Rm9yUXVhZHMpOgorICAgICAgICAqIGRvbS9FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEFjdGl2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpzZXRIb3ZlcmVkKToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpmb2N1c2Vk
T3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNh
YmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpyZWFkT25seUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRDaGVj
a2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0ZXJtaW5h
dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFk
ZFZpc3VhbE92ZXJmbG93RnJvbVRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCdXR0b246OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENv
bnRyb2w6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVh
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdpb25zVmlz
dWFsT3ZlcmZsb3dGcm9tVGhlbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpkcmF3TGluZUZvckJveFNpZGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyUHJvZ3Jlc3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJvZ3Jlc3M6
OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWU6OnBhaW50Qm9yZGVyT25seSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cGFpbnREZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRq
dXN0UmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnN0YXRlQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dXBkYXRlQ29udHJvbFN0YXRl
c0ZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpleHRyYWN0Q29u
dHJvbFN0YXRlc0ZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpp
c0FjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXNDaGVja2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0luZGV0ZXJtaW5hdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6aXNGb2N1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc1By
ZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFy
dFByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzUmVhZE9ubHlDb250
cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0hvdmVyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRGVmYXVsdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6cGFpbnRJbnB1dEZpZWxkU3BlZWNoQnV0dG9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwYWludFNsaWRlclRpY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Ojpwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmNvbnRyb2xTdXBwb3J0c1Rp
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludENhcHNMb2NrSW5kaWNh
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEZpbGVVcGxvYWRJY29u
RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmltYWdlQ29udHJv
bHNCdXR0b25TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludENoZWNr
Ym94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFJhZGlvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6cGFpbnRJbm5lclNwaW5CdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6cGFpbnRSYWRpb0RlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjpwYWludEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6cGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cGFpbnRUZXh0QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6
cGFpbnRUZXh0QXJlYURlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
OjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1l
bnVMaXN0RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50
TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6cGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnBhaW50U3F1YXJlQnV0dG9uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50
U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6
cGFpbnRTZWFyY2hGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRT
ZWFyY2hGaWVsZERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpw
YWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1
dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRpYVBsYXlCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFPdmVybGF5UGxh
eUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRpYU11dGVC
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFTZWVrQmFj
a0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRpYVNlZWtG
b3J3YXJkQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlh
U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFT
bGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRpYVZv
bHVtZVNsaWRlckNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFp
bnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnBhaW50TWVkaWFSZXdpbmRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnBhaW50TWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjpwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFDb250cm9sc0JhY2tncm91
bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFDdXJyZW50VGlt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRNZWRpYVRpbWVSZW1haW5p
bmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50TWVkaWFGdWxsU2NyZWVu
Vm9sdW1lU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50
TWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjpwYWludEltYWdlQ29udHJvbHNCdXR0b24pOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVt
ZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGRSb3VuZGVkQm9y
ZGVyQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2Jv
eERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpiYXNlbGlu
ZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlv
RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50VGV4
dEZpZWxkRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBh
aW50VGV4dEFyZWFEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lSU9TOjpwYWludFNsaWRlclRodW1iRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVJT1M6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50RmlsZVVwbG9hZEljb25EZWNv
cmF0aW9ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6dXBkYXRlQWN0aXZlU3RhdGUpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjpkb2N1bWVudFZpZXdGb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OmFkanVzdFJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
Ojpjb252ZXJ0VG9QYWludGluZ1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnVwZGF0ZUNoZWNrZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1h
Yzo6dXBkYXRlRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
Ojp1cGRhdGVGb2N1c2VkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnVwZGF0ZVByZXNzZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
Y29udHJvbFN1cHBvcnRzVGludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWlu
dENhcHNMb2NrSW5kaWNhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpw
YWludFRleHRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1l
bnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1ldGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwcm9ncmVzc0JhclJlY3RGb3JCb3Vu
ZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50UHJvZ3Jlc3NCYXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b25H
cmFkaWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxp
c3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBh
aW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldFNl
YXJjaENlbGxTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRl
ZFBsdWdpbk92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50
SW1hZ2VDb250cm9sc0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
aW1hZ2VDb250cm9sc0J1dHRvblNpemUpOgorCiAyMDE0LTA0LTIyICBCcmFkeSBFaWRzb24gIDxi
ZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGFuZ2UgSW1hZ2UgQ29udHJvbHMgcmVwbGFj
ZW1lbnQgdG8gdXNlIHNlbGVjdGlvbiBhbmQgcGFzdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDYxZjc0YzliOGM5
MWI0YmZlNWI2ODFiMzZmYzhlYWI2YmE5ZTIyZjcuLmI4ZDcyMDdmOTQ2ZWQ2MGExZDQ0MGVjMzY0
YTQwMWQ1ZDU4Yzk2NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNzExLDcgKzcxMSw3IEBAIEludFJlY3QgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6Ym91bmRpbmdCb3hGb3JRdWFkcyhSZW5kZXJPYmplY3QqIG9iaiwg
Y29uc3QgVmVjdG9yCiAgICAgICAgIEludFJlY3QgciA9IHF1YWQuZW5jbG9zaW5nQm91bmRpbmdC
b3goKTsKICAgICAgICAgaWYgKCFyLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKG9iai0+
c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICAgICAgb2JqLT50aGVtZSgpLmFk
anVzdFJlcGFpbnRSZWN0KG9iaiwgcik7CisgICAgICAgICAgICAgICAgb2JqLT50aGVtZSgpLmFk
anVzdFJlcGFpbnRSZWN0KCpvYmosIHIpOwogICAgICAgICAgICAgcmVzdWx0LnVuaXRlKHIpOwog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDFiYjg5OGZhMWFjMThj
OGMyYmY1ZjkyYjFmOTM2Zjk4MGExYzY3YTIuLmFjZGQzNjA2YTA4YzU3NDBlZTViMzU2MTEzNTJl
NWZmYTAzZWZkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTQ4OCw3ICs0ODgsNyBAQCB2
b2lkIEVsZW1lbnQ6OnNldEFjdGl2ZShib29sIGZsYWcsIGJvb2wgcGF1c2UpCiAgICAgaWYgKHJl
YWN0c1RvUHJlc3MpCiAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIAotICAgIGlmIChy
ZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAmJiByZW5kZXJlcigpLT50aGVtZSgp
LnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBDb250cm9sU3RhdGVzOjpQcmVzc2VkU3RhdGUpKQor
ICAgIGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAmJiByZW5kZXJlcigp
LT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6UHJlc3Nl
ZFN0YXRlKSkKICAgICAgICAgcmVhY3RzVG9QcmVzcyA9IHRydWU7CiAKICAgICAvLyBUaGUgcmVz
dCBvZiB0aGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgYSBmZWF0dXJlIHRoYXQgb25seSB3b3JrcyBp
ZiB0aGUKQEAgLTU1NCw3ICs1NTQsNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEhvdmVyZWQoYm9vbCBm
bGFnKQogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKICAgICBpZiAocmVuZGVyZXIo
KS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCku
c3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkhvdmVyU3RhdGUpOworICAg
ICAgICByZW5kZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29udHJv
bFN0YXRlczo6SG92ZXJTdGF0ZSk7CiB9CiAKIHZvaWQgRWxlbWVudDo6c2Nyb2xsSW50b1ZpZXco
Ym9vbCBhbGlnblRvVG9wKSAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKaW5kZXggNDdiNmJlNjYwYWE2YzQ4OWE0NGE2Y2I4YTQ1ZWY2ZDQzZTg0NDkwYS4uYmFjMmRm
OWMxODcwN2FlYmViYzRiNmMxOTRjMDNjM2M1ZTBlY2NlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTE3NDksNyArMTc0OSw3IEBAIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAgICAgIGVsZW1lbnQt
PnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJl
bmRlcmVyLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgICAgICAgICByZW5kZXJl
ci0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIsIENvbnRyb2xTdGF0ZXM6OkZvY3VzU3Rh
dGUpOworICAgICAgICAgICAgICAgIHJlbmRlcmVyLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVu
ZGVyZXIsIENvbnRyb2xTdGF0ZXM6OkZvY3VzU3RhdGUpOwogICAgIH0KICNlbmRpZgogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggZTBi
ODVkNTk3MGY4OGJkNGMwNTEyZjU3NGMyYWIxZDdmMGNhN2ZkYi4uODEwY2JhZDk3YWZlNDhiOTRj
N2NkMDU2NGIxYjg3MzY3NzQ3MWIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCgpCiAgICAgc2V0TmVlZHNXaWxsVmFs
aWRhdGVDaGVjaygpOwogICAgIGRpZEFmZmVjdFNlbGVjdG9yKEFmZmVjdGVkU2VsZWN0b3JEaXNh
YmxlZCB8IEFmZmVjdGVkU2VsZWN0b3JFbmFibGVkKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiBy
ZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+
dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6RW5hYmxlZFN0
YXRlKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVy
KCksIENvbnRyb2xTdGF0ZXM6OkVuYWJsZWRTdGF0ZSk7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6cmVhZE9ubHlBdHRyaWJ1dGVDaGFuZ2VkKCkKQEAgLTE2Myw3ICsxNjMsNyBA
QCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlYWRPbmx5QXR0cmlidXRlQ2hhbmdlZCgp
CiAgICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOwogICAgIHNldE5lZWRzU3R5bGVSZWNh
bGMoKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVh
cmFuY2UoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVy
ZXIoKSwgQ29udHJvbFN0YXRlczo6UmVhZE9ubHlTdGF0ZSk7CisgICAgICAgIHJlbmRlcmVyKCkt
PnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlcigpLCBDb250cm9sU3RhdGVzOjpSZWFkT25s
eVN0YXRlKTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXF1aXJlZEF0dHJp
YnV0ZUNoYW5nZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5k
ZXggNzAwMDI4YmI3MWUwMGIyNDZkZTk2NmRjYjEwMzJmODExOWQzY2I2Mi4uN2NiNmMyMzA4MWFk
ZDNiMmI4ODJhYWY3NDQ2MTk0Y2IyM2ZkNGZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwCkBAIC04NTgsNyArODU4LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpzZXRDaGVja2VkKGJvb2wgbm93Q2hlY2tlZCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciBldmVu
dEIKICAgICBpZiAoQ2hlY2tlZFJhZGlvQnV0dG9ucyogYnV0dG9ucyA9IGNoZWNrZWRSYWRpb0J1
dHRvbnMoKSkKICAgICAgICAgICAgIGJ1dHRvbnMtPnVwZGF0ZUNoZWNrZWRTdGF0ZSh0aGlzKTsK
ICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2Uo
KSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwg
Q29udHJvbFN0YXRlczo6Q2hlY2tlZFN0YXRlKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUo
KS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkNoZWNrZWRTdGF0ZSk7
CiAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiAKICAgICAvLyBJZGVhbGx5IHdlJ2QgZG8g
dGhpcyBmcm9tIHRoZSByZW5kZXIgdHJlZSAobWF0Y2hpbmcKQEAgLTg5Miw3ICs4OTIsNyBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0ZXJtaW5hdGUoYm9vbCBuZXdWYWx1ZSkKICAg
ICBkaWRBZmZlY3RTZWxlY3RvcihBZmZlY3RlZFNlbGVjdG9ySW5kZXRlcm1pbmF0ZSk7CiAKICAg
ICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkK
LSAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgQ29u
dHJvbFN0YXRlczo6Q2hlY2tlZFN0YXRlKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5z
dGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkNoZWNrZWRTdGF0ZSk7CiB9
CiAKIGludCBIVE1MSW5wdXRFbGVtZW50OjpzaXplKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKaW5kZXggNDlmNDhiZjM4MWU5YjQ1MDQ5NDRmYmEwNTQw
NWE5OWQ0NzkzMTY5My4uMjE5ZjNhMjUzMjRkNzExOGFiOTA5MTIwN2M4NDNmMTRiODhjMDM4ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKQEAgLTE5NSw3ICsx
OTUsNyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdAogICAgICAgICBpZiAob2xkRGlzYWJsZWQg
IT0gbV9kaXNhYmxlZCkgewogICAgICAgICAgICAgZGlkQWZmZWN0U2VsZWN0b3IoQWZmZWN0ZWRT
ZWxlY3RvckRpc2FibGVkIHwgQWZmZWN0ZWRTZWxlY3RvckVuYWJsZWQpOwogICAgICAgICAgICAg
aWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0g
ICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQocmVuZGVyZXIo
KSwgQ29udHJvbFN0YXRlczo6RW5hYmxlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICByZW5kZXJl
cigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6RW5h
YmxlZFN0YXRlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBzZWxlY3RlZEF0
dHIpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBtYXRjaCB3aGF0IHRoZSBIVE1M
IHNwZWNpZmljYXRpb24gc2F5cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmgKaW5kZXggNDJiZjZhYzU2N2NjODIyNGE5MDNk
NTVkMzcyMTNmNzZlM2I3NGNkMy4uNWNjZTY2OTQwYTc1OGIwNzQzMTY0OTcyMDQwYjJjNTk2Mzdi
ZDkwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
RWxlbWVudFR5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9sRWxlbWVudFR5cGVzLmgKQEAgLTc1LDcgKzc1LDcgQEAgZW51bSBNZWRpYUNvbnRyb2xFbGVt
ZW50VHlwZSB7CiB9OwogCiBIVE1MTWVkaWFFbGVtZW50KiBwYXJlbnRNZWRpYUVsZW1lbnQoTm9k
ZSopOwotaW5saW5lIEhUTUxNZWRpYUVsZW1lbnQqIHBhcmVudE1lZGlhRWxlbWVudChSZW5kZXJP
YmplY3QmIHJlbmRlcmVyKSB7IHJldHVybiBwYXJlbnRNZWRpYUVsZW1lbnQocmVuZGVyZXIubm9k
ZSgpKTsgfQoraW5saW5lIEhUTUxNZWRpYUVsZW1lbnQqIHBhcmVudE1lZGlhRWxlbWVudChjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSB7IHJldHVybiBwYXJlbnRNZWRpYUVsZW1lbnQocmVu
ZGVyZXIubm9kZSgpKTsgfQogCiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBtZWRpYUNvbnRyb2xF
bGVtZW50VHlwZShOb2RlKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVu
ZGVyVGhlbWVFZmwuY3BwCmluZGV4IDZmYzQ2M2VkYTBjNmQ4YmYxMjYzNWI1MTI3NjMyYmNjODQ0
Mjc5MWEuLjhlMDQ1ZWIwNDMxODg3ZGQ3YjQzNDk3N2JiYTA1ZDE4ZDdlNTc4ZWUgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcApAQCAtMjk5LDEz
ICsyOTksMTMgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplU3RhdGVGcm9tRm9ybShF
dmFzX09iamVjdCogb2JqZWN0LCBjb25zdCBDb250cm9sU3QKICAgICAgICAgZWRqZV9vYmplY3Rf
c2lnbmFsX2VtaXQob2JqZWN0LCAic3R5bGVkIiwgIiIpOwogfQogCi12b2lkIFJlbmRlclRoZW1l
RWZsOjphcHBseUVkamVSVExTdGF0ZShFdmFzX09iamVjdCogZWRqZSwgUmVuZGVyT2JqZWN0KiBv
YmplY3QsIEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFJlbmRlclRo
ZW1lRWZsOjphcHBseUVkamVSVExTdGF0ZShFdmFzX09iamVjdCogZWRqZSwgY29uc3QgUmVuZGVy
T2JqZWN0JiBvYmplY3QsIEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAg
ICAgaWYgKHR5cGUgPT0gU2xpZGVyVmVydGljYWwgfHwgdHlwZSA9PSBTbGlkZXJIb3Jpem9udGFs
KSB7Ci0gICAgICAgIGlmICghb2JqZWN0LT5pc1NsaWRlcigpKQorICAgICAgICBpZiAoIW9iamVj
dC5pc1NsaWRlcigpKQogICAgICAgICAgICAgcmV0dXJuOyAvLyBwcm9iYWJseSBoYXZlIC13ZWJr
aXQtYXBwZWFyYW5jZTogc2xpZGVyLi4KIAotICAgICAgICBSZW5kZXJTbGlkZXIqIHJlbmRlclNs
aWRlciA9IHRvUmVuZGVyU2xpZGVyKG9iamVjdCk7CisgICAgICAgIGNvbnN0IFJlbmRlclNsaWRl
ciogcmVuZGVyU2xpZGVyID0gdG9SZW5kZXJTbGlkZXIoJm9iamVjdCk7CiAgICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQmIGlucHV0ID0gcmVuZGVyU2xpZGVyLT5lbGVtZW50KCk7CiAgICAgICAgIGRv
dWJsZSB2YWx1ZVJhbmdlID0gaW5wdXQubWF4aW11bSgpIC0gaW5wdXQubWluaW11bSgpOwogCkBA
IC0zMTYsNyArMzE2LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplUlRMU3RhdGUo
RXZhc19PYmplY3QqIGVkamUsIFJlbmRlck9iamVjdCogb2JqZWN0LAogICAgICAgICAvLyBncm93
cyBmcm9tIHRoZSBlbmQgb2YgdGhlIHNsaWRlciBvciBmcm9tIHRoZSBiZWdpbm5pbmcuIE9uIHZl
cnRpY2FsCiAgICAgICAgIC8vIHNsaWRlcnMsIGl0IHNob3VsZCBhbHdheXMgYmUgdGhlIHNhbWUg
YW5kIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5CiAgICAgICAgIC8vIHRleHQgZGlyZWN0aW9uIHNl
dHRpbmdzLgotICAgICAgICBpZiAob2JqZWN0LT5zdHlsZSgpLmRpcmVjdGlvbigpID09IFJUTCB8
fCB0eXBlID09IFNsaWRlclZlcnRpY2FsKQorICAgICAgICBpZiAob2JqZWN0LnN0eWxlKCkuZGly
ZWN0aW9uKCkgPT0gUlRMIHx8IHR5cGUgPT0gU2xpZGVyVmVydGljYWwpCiAgICAgICAgICAgICBt
c2ctPnZhbFswXSA9IDE7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1zZy0+dmFsWzBdID0g
MDsKQEAgLTMyNSw3ICszMjUsNyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseUVkamVSVExT
dGF0ZShFdmFzX09iamVjdCogZWRqZSwgUmVuZGVyT2JqZWN0KiBvYmplY3QsCiAgICAgICAgIGVk
amVfb2JqZWN0X21lc3NhZ2Vfc2VuZChlZGplLCBFREpFX01FU1NBR0VfRkxPQVRfU0VULCAwLCBt
c2cuZ2V0KCkpOwogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQogICAgIH0gZWxzZSBpZiAo
dHlwZSA9PSBQcm9ncmVzc0JhcikgewotICAgICAgICBSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJv
Z3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKG9iamVjdCk7CisgICAgICAgIGNvbnN0IFJlbmRlclBy
b2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3MoJm9iamVjdCk7CiAKICAg
ICAgICAgaW50IG1heCA9IHJlY3Qud2lkdGgoKTsKICAgICAgICAgZG91YmxlIHZhbHVlID0gcmVu
ZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCk7CkBAIC0zMzMsNyArMzMzLDcgQEAgdm9pZCBSZW5kZXJU
aGVtZUVmbDo6YXBwbHlFZGplUlRMU3RhdGUoRXZhc19PYmplY3QqIGVkamUsIFJlbmRlck9iamVj
dCogb2JqZWN0LAogICAgICAgICBPd25QdHI8RWRqZV9NZXNzYWdlX0Zsb2F0X1NldD4gbXNnID0g
YWRvcHRQdHIoc3RhdGljX2Nhc3Q8RWRqZV9NZXNzYWdlX0Zsb2F0X1NldCo+KDo6b3BlcmF0b3Ig
bmV3IChzaXplb2YoRWRqZV9NZXNzYWdlX0Zsb2F0X1NldCkgKyBzaXplb2YoZG91YmxlKSkpKTsK
ICAgICAgICAgbXNnLT5jb3VudCA9IDI7CiAKLSAgICAgICAgaWYgKG9iamVjdC0+c3R5bGUoKS5k
aXJlY3Rpb24oKSA9PSBSVEwpCisgICAgICAgIGlmIChvYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24o
KSA9PSBSVEwpCiAgICAgICAgICAgICBtc2ctPnZhbFswXSA9ICgxLjAgLSB2YWx1ZSkgKiBtYXg7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1zZy0+dmFsWzBdID0gMDsKQEAgLTM1MCw3ICsz
NTAsNyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVy
U3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJgogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6
aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xv
cikgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQ7CiB9CiAKLWJv
b2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGhlbWVQYXJ0KFJlbmRlck9iamVjdCogb2JqZWN0LCBG
b3JtVHlwZSB0eXBlLCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Citib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRoZW1lUGFydChjb25zdCBSZW5kZXJPYmplY3Qm
IG9iamVjdCwgRm9ybVR5cGUgdHlwZSwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogewogICAgIGxvYWRUaGVtZUlmTmVlZGVkKCk7CiAgICAgX0FTU0VSVF9PTl9S
RUxFQVNFX1JFVFVSTl9WQUwoZWRqZSgpLCBmYWxzZSwgIkNvdWxkIG5vdCBwYWludCBuYXRpdmUg
SFRNTCBwYXJ0IGR1ZSB0byBtaXNzaW5nIHRoZW1lLiIpOwpAQCAtMzU5LDcgKzM1OSw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGhlbWVQYXJ0KFJlbmRlck9iamVjdCogb2JqZWN0LCBG
b3JtVHlwZSB0eXBlLCBjb25zdCBQCiAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYm9vbCBoYXZlQmFja2dyb3VuZENvbG9yID0gaXNDb250cm9sU3R5bGVkKCZv
YmplY3QtPnN0eWxlKCksIG9iamVjdC0+c3R5bGUoKS5ib3JkZXIoKSwgKm9iamVjdC0+c3R5bGUo
KS5iYWNrZ3JvdW5kTGF5ZXJzKCksIENvbG9yOjp3aGl0ZSk7CisgICAgYm9vbCBoYXZlQmFja2dy
b3VuZENvbG9yID0gaXNDb250cm9sU3R5bGVkKCZvYmplY3Quc3R5bGUoKSwgb2JqZWN0LnN0eWxl
KCkuYm9yZGVyKCksICpvYmplY3Quc3R5bGUoKS5iYWNrZ3JvdW5kTGF5ZXJzKCksIENvbG9yOjp3
aGl0ZSk7CiAgICAgQ29udHJvbFN0YXRlcyBzdGF0ZXMoZXh0cmFjdENvbnRyb2xTdGF0ZXNGb3JS
ZW5kZXJlcihvYmplY3QpKTsKICAgICBhcHBseUVkamVTdGF0ZUZyb21Gb3JtKGVudHJ5LT5lZGpl
KCksICZzdGF0ZXMsIGhhdmVCYWNrZ3JvdW5kQ29sb3IpOwogCkBAIC02MzEsMTkgKzYzMSwxOSBA
QCBib29sIFJlbmRlclRoZW1lRWZsOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0CiAgICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFu
Y2UoKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNv
bnN0IFJlbmRlck9iamVjdCogb2JqZWN0KSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZUVmbDo6Y29u
dHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGlzRW5hYmxlZChvYmplY3QpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVFZmw6OmJh
c2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpIGNvbnN0CitpbnQgUmVu
ZGVyVGhlbWVFZmw6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3Qp
IGNvbnN0CiB7Ci0gICAgaWYgKCFvYmplY3QtPmlzQm94KCkpCisgICAgaWYgKCFvYmplY3QuaXNC
b3goKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAob2JqZWN0LT5zdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSBDaGVja2JveFBhcnQKLSAgICB8fCAgb2JqZWN0LT5zdHlsZSgpLmFwcGVhcmFu
Y2UoKSA9PSBSYWRpb1BhcnQpCi0gICAgICAgIHJldHVybiB0b1JlbmRlckJveChvYmplY3QpLT5t
YXJnaW5Ub3AoKSArIHRvUmVuZGVyQm94KG9iamVjdCktPmhlaWdodCgpIC0gMzsKKyAgICBpZiAo
b2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydAorICAgIHx8ICBvYmpl
Y3Quc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KQorICAgICAgICByZXR1cm4gdG9S
ZW5kZXJCb3goJm9iamVjdCktPm1hcmdpblRvcCgpICsgdG9SZW5kZXJCb3goJm9iamVjdCktPmhl
aWdodCgpIC0gMzsKIAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihv
YmplY3QpOwogfQpAQCAtNjg0LDkgKzY4NCw5IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnN1cHBv
cnRzU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9ycygpIGNvbnN0CiAgICAgcmV0dXJuIG1fc3VwcG9y
dHNTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3I7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBh
aW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2xpZGVy
VHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAob2JqZWN0LT5zdHlsZSgpLmFwcGVhcmFu
Y2UoKSA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCkKKyAgICBpZiAob2JqZWN0LnN0eWxlKCkuYXBw
ZWFyYW5jZSgpID09IFNsaWRlckhvcml6b250YWxQYXJ0KQogICAgICAgICBwYWludFRoZW1lUGFy
dChvYmplY3QsIFNsaWRlckhvcml6b250YWwsIGluZm8sIHJlY3QpOwogICAgIGVsc2UKICAgICAg
ICAgcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBTbGlkZXJWZXJ0aWNhbCwgaW5mbywgcmVjdCk7CkBA
IC03NTUsOSArNzU1LDkgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6c3VwcG9ydHNEYXRhTGlzdFVJ
KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSkgY29uc3QKICNlbmRpZgogfQogCi1ib29sIFJlbmRl
clRoZW1lRWZsOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZs
OjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKG9iamVjdC0+c3R5
bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkKKyAgICBpZiAo
b2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQp
CiAgICAgICAgIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgU2xpZGVyVGh1bWJIb3Jpem9udGFsLCBp
bmZvLCByZWN0KTsKICAgICBlbHNlCiAgICAgICAgIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgU2xp
ZGVyVGh1bWJWZXJ0aWNhbCwgaW5mbywgcmVjdCk7CkBAIC03ODMsNyArNzgzLDcgQEAgdm9pZCBS
ZW5kZXJUaGVtZUVmbDo6YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHkKICAgICAgICAgc3R5bGUtPnNldEhlaWdodChkZXNjLT5taW4uaGVp
Z2h0KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lRWZsOjpwYWludENoZWNrYm94KFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Citib29sIFJlbmRlclRoZW1lRWZsOjpwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYg
b2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAg
ICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgQ2hlY2tCb3gsIGluZm8sIHJlY3QpOwog
fQpAQCAtODA2LDcgKzgwNiw3IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFJhZGlvU3R5
bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqCiAgICAgICAgIHN0
eWxlLT5zZXRIZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZUVmbDo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRSYWRp
byhjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFJh
ZGlvQnV0dG9uLCBpbmZvLCByZWN0KTsKIH0KQEAgLTgyMyw3ICs4MjMsNyBAQCB2b2lkIFJlbmRl
clRoZW1lRWZsOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBSZW5kZXJTdHlsZQogICAgICAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIEJ1dHRv
bik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29s
IFJlbmRlclRoZW1lRWZsOjpwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVy
biBwYWludFRoZW1lUGFydChvYmplY3QsIEJ1dHRvbiwgaW5mbywgcmVjdCk7CiB9CkBAIC04NDEs
NyArODQxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHkKICAgICBzdHlsZS0+c2V0TGluZUhl
aWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKLWJvb2wgUmVuZGVy
VGhlbWVFZmw6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6OnBh
aW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
aW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQo
b2JqZWN0LCBDb21ib0JveCwgaW5mbywgcmVjdCk7CiB9CkBAIC04NjIsNyArODYyLDcgQEAgdm9p
ZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBSZW4KICAgICBhZGp1c3RNZW51TGlzdFN0eWxlKHN0eWxlUmVzb2x2
ZXIsIHN0eWxlLCBlbGVtZW50KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRNZW51
TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWlu
dE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4g
cGFpbnRNZW51TGlzdChvYmplY3QsIGluZm8sIHJlY3QpOwogfQpAQCAtODc3LDcgKzg3Nyw3IEBA
IHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0CiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRl
clRoZW1lRWZsOjpwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBw
YWludFRoZW1lUGFydChvYmplY3QsIFRleHRGaWVsZCwgaW5mbywgcmVjdCk7CiB9CkBAIC04ODYs
NyArODg2LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikKIHsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZUVmbDo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFp
bnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRleHRGaWVsZChv
YmplY3QsIGluZm8sIHJlY3QpOwogfQpAQCAtOTA4LDcgKzkwOCw3IEBAIHZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzCiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZGVjb3JhdGlvblNpemUsIEZp
eGVkKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRoZW1lUGFydChv
YmplY3QsIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbiwgaW5mbywgcmVjdCk7CiB9CkBAIC05MzAs
NyArOTMwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKgogICAgIHN0eWxlLT5zZXRIZWlnaHQo
TGVuZ3RoKGRlY29yYXRpb25TaXplLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lRWZs
OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJl
bmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0
IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgU2VhcmNoRmll
bGRSZXN1bHRzRGVjb3JhdGlvbiwgaW5mbywgcmVjdCk7CiB9CkBAIC05NTQsNyArOTU0LDcgQEAg
dm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc28KICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChjYW5j
ZWxCdXR0b25TaXplLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWlu
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25z
dCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBh
aW50VGhlbWVQYXJ0KG9iamVjdCwgU2VhcmNoRmllbGRDYW5jZWxCdXR0b24sIGluZm8sIHJlY3Qp
OwogfQpAQCAtOTcwLDcgKzk3MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJj
aEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyCiAgICAgc3R5
bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRT
ZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFyY2hGaWVs
ZChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFNl
YXJjaEZpZWxkLCBpbmZvLCByZWN0KTsKIH0KQEAgLTk4NCw3ICs5ODQsNyBAQCB2b2lkIFJlbmRl
clRoZW1lRWZsOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBSZQogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgU3Bpbm5lcik7
CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Citib29sIFJlbmRlclRoZW1lRWZsOjpwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBSZW5kZXJP
YmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogewogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFNwaW5uZXIsIGluZm8sIHJl
Y3QpOwogfQpAQCAtMTAyMiw5ICsxMDIyLDkgQEAgZG91YmxlIFJlbmRlclRoZW1lRWZsOjphbmlt
YXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKICAgICBy
ZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVz
ICogMjsgLy8gIjIiIGZvciBiYWNrIGFuZCBmb3J0aDsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUVm
bDo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRQ
cm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghb2JqZWN0LT5pc1Byb2dyZXNz
KCkpCisgICAgaWYgKCFvYmplY3QuaXNQcm9ncmVzcygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFByb2dyZXNzQmFyLCBpbmZvLCBy
ZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVt
ZUVmbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmgKaW5k
ZXggOWJhNjZjZTc0NDk1YWQ4N2Q5NTJjYzNmMzFiOWE3ZGFmN2U0ZmU4OC4uZDNlYzc1NzFmNmZm
MDdmN2YwOThjNTk0Zjk2YmI5Y2M1OTRkZTdlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZWZsL1JlbmRlclRoZW1lRWZsLmgKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0Owog
CiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQg
d2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCi0gICAgdmlydHVhbCBib29sIGNvbnRy
b2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKIAog
ICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMg
c3VwcG9ydGVkIGF0IGFsbC4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAv
LyBBIG1ldGhvZCB0byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIGZvciBhICJsZWFmIiBj
b250cm9sLiBUaGlzIHdpbGwgb25seSBiZSB1c2VkIGlmIGEgYmFzZWxpbmUKICAgICAvLyBwb3Np
dGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgY2hpbGQgY29udGVudC4gQ2hl
Y2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucyBhcmUgZXhhbXBsZXMgb2YKICAgICAvLyBjb250cm9s
cyB0aGF0IG5lZWQgdG8gZG8gdGhpcy4KLSAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9u
KGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9z
aXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7
CkBAIC0xMTEsNDAgKzExMSw0MCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZv
bnQoQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBw
YWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVz
dEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRG
aWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RU
ZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFy
ZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
bnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9u
cyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9v
bCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFj
ayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNs
aWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OwogCkBAIC0xNTgsMTYgKzE1OCwxNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNEYXRhTGlzdFVJKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRl
clRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24o
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
CiAgICAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdEZvbnRTaXplKGludCBmb250c2l6ZSk7CiAKICNp
ZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jl
c3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dy
ZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dy
ZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0
aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OwogI2VuZGlm
CkBAIC0yMDAsOCArMjAwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGx5UGFydERlc2NyaXB0
aW9uc0Zyb20oY29uc3QgU3RyaW5nJiB0aGVtZVBhdGgpOwogCiAgICAgdm9pZCBhcHBseUVkamVT
dGF0ZUZyb21Gb3JtKEV2YXNfT2JqZWN0KiwgY29uc3QgQ29udHJvbFN0YXRlcyosIGJvb2wpOwot
ICAgIHZvaWQgYXBwbHlFZGplUlRMU3RhdGUoRXZhc19PYmplY3QqLCBSZW5kZXJPYmplY3QqLCBG
b3JtVHlwZSwgY29uc3QgSW50UmVjdCYpOwotICAgIGJvb2wgcGFpbnRUaGVtZVBhcnQoUmVuZGVy
T2JqZWN0KiwgRm9ybVR5cGUsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2b2lkIGFwcGx5RWRqZVJUTFN0YXRlKEV2YXNfT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
JiwgRm9ybVR5cGUsIGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIHBhaW50VGhlbWVQYXJ0KGNv
bnN0IFJlbmRlck9iamVjdCYsIEZvcm1UeXBlLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CiAKICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgQ29sb3IgbV9hY3RpdmVTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UmVuZGVyVGhlbWVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRo
ZW1lR3RrLmNwcAppbmRleCA4ZDA2OWI1YjAyMjEzNDI5YWQ0MjcyYmY1NzQ3MzVmZjY0NzVmZTJl
Li4wMjBmZTRhYjM4ODI3YmM0YzNjMzA0ZGZhZjEwNGM1MGViZDkyZmFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKQEAgLTY1LDkgKzY1LDkg
QEAgZXh0ZXJuIEdSZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdU
eXBlLCBjb25zdCBjaGFyKiBpY29uTmFtZSwKIGV4dGVybiBHUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0
U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5cGUsIGNvbnN0IGNo
YXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIqIGZhbGxiYWNrU3RvY2tJY29uTmFtZSwg
Z2ludCBkaXJlY3Rpb24sIGdpbnQgc3RhdGUsIGdpbnQgaWNvblNpemUpOwogCiAjaWYgRU5BQkxF
KFZJREVPKQotc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIGdldE1lZGlhRWxlbWVudEZyb21SZW5k
ZXJPYmplY3QoUmVuZGVyT2JqZWN0KiBvKQorc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIGdldE1l
ZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3QoY29uc3QgUmVuZGVyT2JqZWN0JiBvKQogewotICAg
IE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IG8ubm9kZSgpOwogICAg
IE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUgPyBub2RlLT5zaGFkb3dIb3N0KCkgOiAwOwogICAgIGlm
ICghbWVkaWFOb2RlKQogICAgICAgICBtZWRpYU5vZGUgPSBub2RlOwpAQCAtMTczLDIwICsxNzMs
MjAgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxlLT5hcHBl
YXJhbmNlKCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpjb250cm9sU3VwcG9ydHNUaW50
cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lR3RrOjpjb250
cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGlzRW5hYmxlZChvKTsKIH0KIAotaW50IFJlbmRlclRoZW1lR3RrOjpiYXNlbGluZVBvc2l0
aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0azo6YmFz
ZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgaWYgKCFv
LT5pc0JveCgpKQorICAgIGlmICghby5pc0JveCgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAg
IC8vIEZJWE1FOiBUaGlzIHN0cmF0ZWd5IGlzIHBvc3NpYmx5IGluY29ycmVjdCBmb3IgdGhlIEdU
SysgcG9ydC4KLSAgICBpZiAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0
Ci0gICAgICAgIHx8IG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkgewotICAg
ICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KG8pOworICAgIGlmIChvLnN0
eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydAorICAgICAgICB8fCBvLnN0eWxlKCku
YXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkgeworICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJv
eCA9IHRvUmVuZGVyQm94KCZvKTsKICAgICAgICAgcmV0dXJuIGJveC0+bWFyZ2luVG9wKCkgKyBi
b3gtPmhlaWdodCgpIC0gMjsKICAgICB9CiAKQEAgLTIwOCw3ICsyMDgsNyBAQCBHdGtUZXh0RGly
ZWN0aW9uIGd0a1RleHREaXJlY3Rpb24oVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiAgICAgfQog
fQogCi1zdGF0aWMgR3RrU3RhdGVUeXBlIGd0a0ljb25TdGF0ZShSZW5kZXJUaGVtZSogdGhlbWUs
IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0KQorc3RhdGljIEd0a1N0YXRlVHlwZSBndGtJY29u
U3RhdGUoUmVuZGVyVGhlbWUqIHRoZW1lLCBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVj
dCkKIHsKICAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSkKICAgICAgICAg
cmV0dXJuIEdUS19TVEFURV9JTlNFTlNJVElWRTsKQEAgLTI0MSwxMiArMjQxLDEyIEBAIHZvaWQg
UmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgUmVuCiAgICAgYWRqdXN0TWVudUxpc3RTdHlsZShzdHlsZVJlc29sdmVy
LCBzdHlsZSwgZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3RCdXR0
b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlz
dEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBhaW50TWVu
dUxpc3Qob2JqZWN0LCBpbmZvLCByZWN0KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50
UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVy
T2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAg
cmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwogfQpAQCAtMjk4LDcgKzI5OCw3IEBAIHZv
aWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzCiAgICAgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25T
dHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQobywgaSwgcmVjdCk7CiB9CkBAIC0zMjYsMTIg
KzMyNiwxMiBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLAogICAgIGFkanVzdFNlYXJjaEZpZWxk
SWNvblN0eWxlKHN0eWxlKTsKIH0KIAotc3RhdGljIEludFJlY3QgY2VudGVyUmVjdFZlcnRpY2Fs
bHlJblBhcmVudElucHV0RWxlbWVudChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3N0YXRpYyBJbnRSZWN0IGNlbnRlclJlY3RWZXJ0aWNhbGx5SW5QYXJl
bnRJbnB1dEVsZW1lbnQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgLy8gR2V0IHRoZSByZW5kZXJlciBvZiA8aW5wdXQ+IGVsZW1l
bnQuCi0gICAgTm9kZSogaW5wdXQgPSByZW5kZXJPYmplY3QtPm5vZGUoKS0+c2hhZG93SG9zdCgp
OworICAgIE5vZGUqIGlucHV0ID0gcmVuZGVyT2JqZWN0Lm5vZGUoKS0+c2hhZG93SG9zdCgpOwog
ICAgIGlmICghaW5wdXQpCi0gICAgICAgIGlucHV0ID0gcmVuZGVyT2JqZWN0LT5ub2RlKCk7Cisg
ICAgICAgIGlucHV0ID0gcmVuZGVyT2JqZWN0Lm5vZGUoKTsKICAgICBpZiAoIWlucHV0LT5yZW5k
ZXJlcigpLT5pc0JveCgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCkBAIC0zNDYsMTYg
KzM0NiwxNiBAQCBzdGF0aWMgSW50UmVjdCBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5w
dXRFbGVtZW50KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZQogICAgIHJldHVybiBzY2FsZWRSZWN0
OwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25QYXJ0KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogewogICAgIEludFJlY3QgaWNvblJlY3QgPSBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50
SW5wdXRFbGVtZW50KHJlbmRlck9iamVjdCwgcmVjdCk7CiAgICAgaWYgKGljb25SZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR1JlZlB0cjxHZGtQaXhidWY+IGlj
b24gPSBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tf
RklORCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkuZGlyZWN0aW9uKCkp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SWNvblNpemVGb3JQaXhlbFNp
emUocmVjdC5oZWlnaHQoKSkpOworICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVj
dC5zdHlsZSgpLmRpcmVjdGlvbigpKSwKKyAgICAgICAgZ3RrSWNvblN0YXRlKHRoaXMsIHJlbmRl
ck9iamVjdCksCisgICAgICAgIGdldEljb25TaXplRm9yUGl4ZWxTaXplKHJlY3QuaGVpZ2h0KCkp
KTsKICAgICBwYWludEdka1BpeGJ1ZihwYWludEluZm8uY29udGV4dCwgaWNvbi5nZXQoKSwgaWNv
blJlY3QpOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTM2NSwxNiArMzY1LDE2IEBAIHZvaWQg
UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0CiAgICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoc3R5bGUp
OwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmll
bGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEludFJlY3Qg
aWNvblJlY3QgPSBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50KHJlbmRl
ck9iamVjdCwgcmVjdCk7CiAgICAgaWYgKGljb25SZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24gPSBnZXRTdG9ja0ljb25G
b3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tfQ0xFQVIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a1RleHREaXJl
Y3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLmRpcmVjdGlvbigpKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrSWNvblN0YXRlKHRo
aXMsIHJlbmRlck9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdldEljb25TaXplRm9yUGl4ZWxTaXplKHJlY3QuaGVpZ2h0KCkp
KTsKKyAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rp
b24oKSksCisgICAgICAgIGd0a0ljb25TdGF0ZSh0aGlzLCByZW5kZXJPYmplY3QpLAorICAgICAg
ICBnZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShyZWN0LmhlaWdodCgpKSk7CiAgICAgcGFpbnRHZGtQ
aXhidWYocGFpbnRJbmZvLmNvbnRleHQsIGljb24uZ2V0KCksIGljb25SZWN0KTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CkBAIC0zODYsMTIgKzM4NiwxMiBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjph
ZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUs
CiAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0
KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNv
bnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gcGFp
bnRUZXh0RmllbGQobywgaSwgcmVjdCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAg
ICAgLy8gVGhlIG90aGVyIHBhaW50IG1ldGhvZHMgZG9uJ3QgbmVlZCB0byBjaGVjayB3aGV0aGVy
IHBhaW50aW5nIGlzIGRpc2FibGVkIGJlY2F1c2UgUmVuZGVyVGhlbWUgYWxyZWFkeSBjaGVja3Mg
aXQKICAgICAvLyBiZWZvcmUgY2FsbGluZyB0aGVtLCBidXQgcGFpbnRDYXBzTG9ja0luZGljYXRv
cigpIGlzIGNhbGxlZCBieSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUgd2hpY2ggZG9lc24n
dCBjaGVjayBpdC4KQEAgLTM5OSw5ICszOTksNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGludCBpY29uU2l6ZSA9IHN0ZDo6bWluKHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24gPSBn
ZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tfQ0FQU19M
T0NLX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLmRpcmVj
dGlvbigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgZ2V0SWNvblNpemVGb3JQaXhlbFNpemUoaWNvblNpemUpKTsKKyAgICBHUmVm
UHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZUEVf
RU5UUlksIEdUS19TVE9DS19DQVBTX0xPQ0tfV0FSTklORywgZ3RrVGV4dERpcmVjdGlvbihyZW5k
ZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSksIDAsIGdldEljb25TaXplRm9yUGl4ZWxTaXpl
KGljb25TaXplKSk7CiAKICAgICAvLyBPbmx5IHJlLXNjYWxlIHRoZSBpY29uIHdoZW4gaXQncyBz
bWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gaWNvbiBzaXplLgogICAgIGlmIChpY29uU2l6ZSA+PSBn
dGtJY29uU2l6ZU1lbnUpCkBAIC01MDUsMTMgKzUwMywxMyBAQCBTdHJpbmcgUmVuZGVyVGhlbWVH
dGs6OmV4dHJhRnVsbFNjcmVlblN0eWxlU2hlZXQoKQogfQogI2VuZGlmCiAKLWJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50TWVkaWFCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgY2hhciog
c3ltYm9saWNJY29uTmFtZSwgY29uc3QgY2hhciogZmFsbGJhY2tTdG9ja0ljb25OYW1lKQorYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlck9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0
LCBjb25zdCBjaGFyKiBzeW1ib2xpY0ljb25OYW1lLCBjb25zdCBjaGFyKiBmYWxsYmFja1N0b2Nr
SWNvbk5hbWUpCiB7CiAgICAgSW50UmVjdCBpY29uUmVjdChyZWN0LngoKSArIChyZWN0LndpZHRo
KCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgp
ICsgKHJlY3QuaGVpZ2h0KCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKICAgICAgICAgICAgICAg
ICAgICAgIG1fbWVkaWFJY29uU2l6ZSwgbV9tZWRpYUljb25TaXplKTsKICAgICBHUmVmUHRyPEdk
a1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrU3ltYm9saWNJY29uRm9yV2lkZ2V0VHlwZShHVEtfVFlQ
RV9DT05UQUlORVIsIHN5bWJvbGljSWNvbk5hbWUsIGZhbGxiYWNrU3RvY2tJY29uTmFtZSwKLSAg
ICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkuZGlyZWN0aW9uKCkp
LCBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwgaWNvblJlY3Qud2lkdGgoKSk7Cisg
ICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkp
LCBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwgaWNvblJlY3Qud2lkdGgoKSk7CiAg
ICAgcGFpbnRHZGtQaXhidWYoY29udGV4dCwgaWNvbi5nZXQoKSwgaWNvblJlY3QpOwogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtNTIxLDEyICs1MTksMTIgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6
aGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKENvbnRyb2xQYXJ0IHBhcnQpIGNvbnN0CiAg
ICAgcmV0dXJuIChwYXJ0ICE9IE1lZGlhTXV0ZUJ1dHRvblBhcnQpOwogfQogCi1ib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRl
ck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Citib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVy
T2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwgInZpZXctZnVsbHNjcmVlbi1zeW1ib2xp
YyIsIEdUS19TVE9DS19GVUxMU0NSRUVOKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYU11dGVCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAg
IEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IGdldE1lZGlhRWxlbWVudEZyb21SZW5k
ZXJPYmplY3QocmVuZGVyT2JqZWN0KTsKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKQEAgLTUzOCw5
ICs1MzYsOSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5k
ZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbgogICAgICAgICBtdXRlZCA/ICJhdWRp
by12b2x1bWUtbXV0ZWQiIDogImF1ZGlvLXZvbHVtZS1oaWdoIik7CiB9CiAKLWJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFQbGF5QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYg
cmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKLSAgICBOb2RlKiBub2RlID0gcmVuZGVyT2JqZWN0LT5ub2RlKCk7CisgICAgTm9k
ZSogbm9kZSA9IHJlbmRlck9iamVjdC5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKQEAgLTU1MywyNiArNTUxLDI2IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQ
YWluCiAgICAgICAgIHNob3dQbGF5QnV0dG9uID8gR1RLX1NUT0NLX01FRElBX1BMQVkgOiBHVEtf
U1RPQ0tfTUVESUFfUEFVU0UpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlh
U2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAg
ICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0
LCByZWN0LCAibWVkaWEtc2Vlay1iYWNrd2FyZC1zeW1ib2xpYyIsIEdUS19TVE9DS19NRURJQV9S
RVdJTkQpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2Vla0ZvcndhcmRC
dXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRp
YVNlZWtGb3J3YXJkQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1
cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0LCByZWN0
LCAibWVkaWEtc2Vlay1mb3J3YXJkLXN5bWJvbGljIiwgR1RLX1NUT0NLX01FRElBX0ZPUldBUkQp
OwogfQogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgSW50UmVjdCBpY29uUmVjdChyZWN0Lngo
KSArIChyZWN0LndpZHRoKCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwgcmVjdC55KCkgKyAocmVj
dC5oZWlnaHQoKSAtIG1fbWVkaWFJY29uU2l6ZSkgLyAyLAogICAgICAgICBtX21lZGlhSWNvblNp
emUsIG1fbWVkaWFJY29uU2l6ZSk7CiAgICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24gPSBnZXRT
dG9ja1N5bWJvbGljSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZUEVfQ09OVEFJTkVSLCAibWVkaWEt
dmlldy1zdWJ0aXRsZXMtc3ltYm9saWMiLCBudWxscHRyLAotICAgICAgICBndGtUZXh0RGlyZWN0
aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS5kaXJlY3Rpb24oKSksIGd0a0ljb25TdGF0ZSh0aGlz
LCByZW5kZXJPYmplY3QpLCBpY29uUmVjdC53aWR0aCgpKTsKKyAgICAgICAgZ3RrVGV4dERpcmVj
dGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSksIGd0a0ljb25TdGF0ZSh0aGlz
LCByZW5kZXJPYmplY3QpLCBpY29uUmVjdC53aWR0aCgpKTsKICAgICBpZiAoIWljb24pCiAgICAg
ICAgIGljb24gPSBnZXRTdG9ja1N5bWJvbGljSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZUEVfQ09O
VEFJTkVSLCAidXNlci1pbnZpc2libGUtc3ltYm9saWMiLCBHVEtfU1RPQ0tfSlVTVElGWV9GSUxM
LAotICAgICAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkuZGly
ZWN0aW9uKCkpLCBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwgaWNvblJlY3Qud2lk
dGgoKSk7CisgICAgICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgp
LmRpcmVjdGlvbigpKSwgZ3RrSWNvblN0YXRlKHRoaXMsIHJlbmRlck9iamVjdCksIGljb25SZWN0
LndpZHRoKCkpOwogICAgIHBhaW50R2RrUGl4YnVmKHBhaW50SW5mby5jb250ZXh0LCBpY29uLmdl
dCgpLCBpY29uUmVjdCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01ODcsOSArNTg1LDkgQEAg
c3RhdGljIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpIGJvcmRlclJhZGlpRnJvbVN0eWxlKFJlbmRl
clN0eWxlKiBzdHlsZSkKICAgICAgICAgSW50U2l6ZShzdHlsZS0+Ym9yZGVyQm90dG9tUmlnaHRS
YWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1
cygpLmhlaWdodCgpLmludFZhbHVlKCkpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlh
U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVs
ZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQoKm8pOworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudChvKTsKICAgICBpZiAoIW1lZGlhRWxlbWVu
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01OTksNyArNTk3LDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWkKIAogICAgIGZsb2F0IG1lZGlhRHVyYXRpb24gPSBtZWRpYUVsZW1lbnQt
PmR1cmF0aW9uKCk7CiAgICAgZmxvYXQgdG90YWxUcmFja1dpZHRoID0gci53aWR0aCgpOwotICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9ICZvLT5zdHlsZSgpOworICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9ICZvLnN0eWxlKCk7CiAgICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBtZWRp
YUVsZW1lbnQtPmJ1ZmZlcmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4
IDwgdGltZVJhbmdlcy0+bGVuZ3RoKCk7ICsraW5kZXgpIHsKICAgICAgICAgZmxvYXQgc3RhcnQg
PSB0aW1lUmFuZ2VzLT5zdGFydChpbmRleCwgSUdOT1JFX0VYQ0VQVElPTik7CkBAIC02MjAsMjEg
KzYxOCwyMSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJhY2soUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0
JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmby0+c3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSAmby5zdHlsZSgpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUm91bmRlZFJlY3Qo
RmxvYXRSb3VuZGVkUmVjdChyLCBib3JkZXJSYWRpaUZyb21TdHlsZShzdHlsZSkpLCBzdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS0+Y29sb3JTcGFj
ZSgpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1l
U2xpZGVyQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBw
YXJlbnRNZWRpYUVsZW1lbnQoKnJlbmRlck9iamVjdCk7CisgICAgSFRNTE1lZGlhRWxlbWVudCog
bWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHJlbmRlck9iamVjdCk7CiAgICAgaWYg
KCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC02NDgsNyArNjQ2LDcg
QEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRl
ck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb24KIAogICAgIGludCByZWN0SGVpZ2h0ID0gcmVjdC5o
ZWlnaHQoKTsKICAgICBmbG9hdCB0cmFja0hlaWdodCA9IHJlY3RIZWlnaHQgKiB2b2x1bWU7Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gJnJlbmRlck9iamVjdC0+c3R5bGUoKTsKKyAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSAmcmVuZGVyT2JqZWN0LnN0eWxlKCk7CiAgICAgSW50UmVjdCB2b2x1
bWVSZWN0KHJlY3QpOwogICAgIHZvbHVtZVJlY3QubW92ZSgwLCByZWN0SGVpZ2h0IC0gdHJhY2tI
ZWlnaHQpOwogICAgIHZvbHVtZVJlY3Quc2V0SGVpZ2h0KGNlaWwodHJhY2tIZWlnaHQpKTsKQEAg
LTY2MCw3ICs2NTgsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1lU2xp
ZGVyVHJhY2soUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbgogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1i
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFWb2x1
bWVTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBh
aW50TWVkaWFTbGlkZXJUaHVtYihyZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiB9CkBA
IC02NzAsNyArNjY4LDcgQEAgU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpmb3JtYXRNZWRpYUNvbnRy
b2xzQ3VycmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGQKICAgICByZXR1cm4gZm9y
bWF0TWVkaWFDb250cm9sc1RpbWUoY3VycmVudFRpbWUpICsgIiAvICIgKyBmb3JtYXRNZWRpYUNv
bnRyb2xzVGltZShkdXJhdGlvbik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVk
aWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFDdXJyZW50VGltZShjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKIHsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CkBAIC02OTYsMTMgKzY5NCwxMyBAQCBkb3VibGUgUmVuZGVyVGhlbWVH
dGs6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25z
dAogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsICogcHJvZ3Jlc3NBbmltYXRp
b25GcmFtZXMgKiAyOyAvLyAiMiIgZm9yIGJhY2sgYW5kIGZvcnRoOwogfQogCi1JbnRSZWN0IFJl
bmRlclRoZW1lR3RrOjpjYWxjdWxhdGVQcm9ncmVzc1JlY3QoUmVuZGVyT2JqZWN0KiByZW5kZXJP
YmplY3QsIGNvbnN0IEludFJlY3QmIGZ1bGxCYXJSZWN0KQorSW50UmVjdCBSZW5kZXJUaGVtZUd0
azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0
LCBjb25zdCBJbnRSZWN0JiBmdWxsQmFyUmVjdCkKIHsKICAgICBJbnRSZWN0IHByb2dyZXNzUmVj
dChmdWxsQmFyUmVjdCk7Ci0gICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9S
ZW5kZXJQcm9ncmVzcyhyZW5kZXJPYmplY3QpOworICAgIGNvbnN0IFJlbmRlclByb2dyZXNzKiBy
ZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3MoJnJlbmRlck9iamVjdCk7CiAgICAgaWYg
KHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCkpIHsKICAgICAgICAgaW50IHByb2dyZXNz
V2lkdGggPSBwcm9ncmVzc1JlY3Qud2lkdGgoKSAqIHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigp
OwotICAgICAgICBpZiAocmVuZGVyT2JqZWN0LT5zdHlsZSgpLmRpcmVjdGlvbigpID09IFJUTCkK
KyAgICAgICAgaWYgKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpID09IFJUTCkKICAg
ICAgICAgICAgIHByb2dyZXNzUmVjdC5zZXRYKHByb2dyZXNzUmVjdC54KCkgKyBwcm9ncmVzc1Jl
Y3Qud2lkdGgoKSAtIHByb2dyZXNzV2lkdGgpOwogICAgICAgICBwcm9ncmVzc1JlY3Quc2V0V2lk
dGgocHJvZ3Jlc3NXaWR0aCk7CiAgICAgICAgIHJldHVybiBwcm9ncmVzc1JlY3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCmluZGV4IGIxNzA3ZjRiMmQx
MWIyZDI2NDc4ZTBjOGFhYWM1N2YxYWUxM2FiNDQuLjFjYTUwMjA1YzQxNmU4OWFlMTI0OTMzNzlk
ZjUyM2M4NDQyYWRiZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJU
aGVtZUd0ay5oCkBAIC01MCwxNyArNTAsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAgLy8gQSBt
ZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0aGUgd2lu
ZG93IGhhcyBmb2N1cyBvciBub3QuCi0gICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1Rp
bnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBjb250cm9s
U3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKIAogICAgIC8vIEEgZ2Vu
ZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMgc3VwcG9ydGVkIGF0
IGFsbC4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3QoY29uc3Qg
UmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50
UmVjdChjb25zdCBSZW5kZXJPYmplY3QmLCBJbnRSZWN0Jik7CiAKICAgICAvLyBBIG1ldGhvZCB0
byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIGZvciBhICJsZWFmIiBjb250cm9sLiAgVGhp
cyB3aWxsIG9ubHkgYmUgdXNlZCBpZiBhIGJhc2VsaW5lCiAgICAgLy8gcG9zaXRpb24gY2Fubm90
IGJlIGRldGVybWluZWQgYnkgZXhhbWluaW5nIGNoaWxkIGNvbnRlbnQuIENoZWNrYm94ZXMgYW5k
IHJhZGlvIGJ1dHRvbnMgYXJlIGV4YW1wbGVzIG9mCiAgICAgLy8gY29udHJvbHMgdGhhdCBuZWVk
IHRvIGRvIHRoaXMuCi0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5k
ZXJPYmplY3QqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0
IFJlbmRlck9iamVjdCYpIGNvbnN0OwogCiAgICAgLy8gVGhlIHBsYXRmb3JtIHNlbGVjdGlvbiBj
b2xvci4KICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKCkgY29uc3Q7CkBAIC0xMTQsMTcgKzExNCwxNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJT
dHlsZSogc3R5bGUpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRl
clN0eWxlKiBzdHlsZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9v
bCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgaW50
IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0OwogICAgIGludCBw
b3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Q7CkBAIC0xMzcsMjUg
KzEzNywyNSBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gd2UgZG9uJ3QgbWFpbnRhaW4gdGhpcyBkaWZm
ZXJlbnRpYXRpb24uCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBi
b29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxp
c3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9v
bCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lk
IGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVy
VHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBw
YWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6
ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKQEAgLTE2NCwxOSArMTY0LDE5IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIGluaXRNZWRpYUNvbG9ycygpOwogICAgIHZvaWQgaW5pdE1lZGlh
QnV0dG9ucygpOwogICAgIHZpcnR1YWwgYm9vbCBoYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdG
b3IoQ29udHJvbFBhcnQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhRnVsbHNj
cmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlh
U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVt
ZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3Jl
ZW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNl
ZWtCYWNrQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9u
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYVNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNs
aWRlckNvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFj
ayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFDdXJyZW50VGltZShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24oY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogI2VuZGlmCiAjZW5kaWYK
IApAQCAtMTg0LDEzICsxODQsMTMgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgZG91YmxlIGFu
aW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25z
dDsKICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzKikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFy
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jh
cihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5u
ZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29s
IHBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyBmaWxl
TGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgs
IGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMjAwLDExICsy
MDAsMTEgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgZG91YmxlIGdldFNjcmVlbkRQSSgpOwogCiAj
aWYgRU5BQkxFKFZJREVPKQotICAgIGJvb2wgcGFpbnRNZWRpYUJ1dHRvbihSZW5kZXJPYmplY3Qq
LCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgY2hhciogc3ltYm9saWNJ
Y29uTmFtZSwgY29uc3QgY2hhciogZmFsbGJhY2tTdG9ja0ljb25OYW1lKTsKKyAgICBib29sIHBh
aW50TWVkaWFCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIqIGZh
bGxiYWNrU3RvY2tJY29uTmFtZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVN
RU5UKQotICAgIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVByb2dyZXNzUmVjdChSZW5kZXJPYmpl
Y3QqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRlUHJvZ3Jl
c3NSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRpZgogCiAg
ICAgbXV0YWJsZSBDb2xvciBtX3BhbmVsQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwCmluZGV4IGE5YjM4OGM4MmU4ZTVhODZlNjliNTBj
OTM3YzBkOWJjMTdmMWRlNmEuLmYyY2IyMDI5OWUzY2UwMGEyZGE4NjFjZGM0MGQzZmY0MjllOTU2
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0
azIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIu
Y3BwCkBAIC0xMTAsOSArMTEwLDkgQEAgc3RhdGljIHZvaWQgYWRqdXN0UmVjdEZvckZvY3VzKEd0
a1dpZGdldCogd2lkZ2V0LCBJbnRSZWN0JiByZWN0LCBib29sIGlnbm9yZUludGUKICAgICByZWN0
LmluZmxhdGUoZm9jdXNXaWR0aCArIGZvY3VzUGFkKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIElu
dFJlY3QmIHJlY3QpCit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RSZXBhaW50UmVjdChjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBDb250
cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKKyAgICBD
b250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpOwogICAg
IHN3aXRjaCAocGFydCkgewogICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgogICAgIGNhc2UgUmFkaW9Q
YXJ0OiB7CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UmVw
YWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEludFJlY3QKICAgICB9
CiB9CiAKLXN0YXRpYyBHdGtTdGF0ZVR5cGUgZ2V0R3RrU3RhdGVUeXBlKFJlbmRlclRoZW1lR3Rr
KiB0aGVtZSwgUmVuZGVyT2JqZWN0KiBvYmplY3QpCitzdGF0aWMgR3RrU3RhdGVUeXBlIGdldEd0
a1N0YXRlVHlwZShSZW5kZXJUaGVtZUd0ayogdGhlbWUsIGNvbnN0IFJlbmRlck9iamVjdCYgb2Jq
ZWN0KQogewogICAgIGlmICghdGhlbWUtPmlzRW5hYmxlZChvYmplY3QpIHx8IHRoZW1lLT5pc1Jl
YWRPbmx5Q29udHJvbChvYmplY3QpKQogICAgICAgICByZXR1cm4gR1RLX1NUQVRFX0lOU0VOU0lU
SVZFOwpAQCAtMTU2LDE0ICsxNTYsMTQgQEAgc3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShjb25z
dCBSZW5kZXJUaGVtZUd0ayosIFJlbmRlclN0eWxlKiBzdHlsZSwgR3RrV2lkZ2V0KgogICAgICAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOwogfQogCi1z
dGF0aWMgdm9pZCBwYWludFRvZ2dsZShSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJlbmRlck9iamVj
dCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QsIEd0a1dpZGdldCogd2lkZ2V0KQorc3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoUmVuZGVyVGhl
bWVHdGsqIHRoZW1lLCBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCkKIHsK
ICAgICAvLyBXZSBkbyBub3QgY2FsbCBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfYWN0aXZlIGhlcmUs
IGJlY2F1c2Ugc29tZSB0aGVtZXMgYmVnaW4gYSBzZXJpZXMgb2YKICAgICAvLyBhbmltYXRpb24g
ZnJhbWVzIGluIGEgInRvZ2dsZWQiIHNpZ25hbCBoYW5kbGVyLiBUaGlzIHB1dHMgc29tZSBjaGVj
a2JveGVzIGluIGEgaGFsZi13YXkKICAgICAvLyBjaGVja2VkIHN0YXRlLiBFdmVyeSBHVEsrIHRo
ZW1lIEkgdGVzdGVkIG1lcmVseSBsb29rcyBhdCB0aGUgc2hhZG93IHR5cGUgKGFuZCBub3QgdGhl
CiAgICAgLy8gJ2FjdGl2ZScgcHJvcGVydHkpIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0
byBkcmF3IHRoZSBjaGVjay4KICAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUod2lkZ2V0LCB0
aGVtZS0+aXNFbmFibGVkKHJlbmRlck9iamVjdCkgJiYgIXRoZW1lLT5pc1JlYWRPbmx5Q29udHJv
bChyZW5kZXJPYmplY3QpKTsKLSAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBn
dGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS5kaXJlY3Rpb24oKSkpOworICAg
IGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVy
T2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsKIAogICAgIGJvb2wgaW5kZXRlcm1pbmF0ZSA9
IHRoZW1lLT5pc0luZGV0ZXJtaW5hdGUocmVuZGVyT2JqZWN0KTsKICAgICBndGtfdG9nZ2xlX2J1
dHRvbl9zZXRfaW5jb25zaXN0ZW50KEdUS19UT0dHTEVfQlVUVE9OKHdpZGdldCksIGluZGV0ZXJt
aW5hdGUpOwpAQCAtMTk4LDcgKzE5OCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldENoZWNr
Ym94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAgICAgc2V0VG9nZ2xlU2l6ZSh0aGlz
LCBzdHlsZSwgZ3RrQ2hlY2tCdXR0b24oKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
aW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hl
Y2tib3goY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
aW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBwYWludFRvZ2dsZSh0aGlzLCByZW5k
ZXJPYmplY3QsIGluZm8sIHJlY3QsIGd0a0NoZWNrQnV0dG9uKCkpOwogICAgIHJldHVybiBmYWxz
ZTsKQEAgLTIwOSw3ICsyMDksNyBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUo
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHNldFRvZ2dsZVNpemUodGhpcywgc3R5bGUs
IGd0a1JhZGlvQnV0dG9uKCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJhZGlv
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJhZGlvKGNvbnN0IFJl
bmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgcGFpbnRUb2dnbGUodGhpcywgcmVuZGVyT2JqZWN0LCBpbmZv
LCByZWN0LCBndGtSYWRpb0J1dHRvbigpKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMjcsNyAr
MjI3LDcgQEAgc3RhdGljIHZvaWQgc2V0V2lkZ2V0SGFzRm9jdXMoR3RrV2lkZ2V0KiB3aWRnZXQs
IGdib29sZWFuIGhhc0ZvY3VzKQogICAgICAgICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKHdpZGdl
dCwgR1RLX0hBU19GT0NVUyk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9u
KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihjb25zdCBSZW5kZXJP
YmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogewogICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMjM4LDcgKzIzOCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNv
CiAKICAgICBHdGtTdGF0ZVR5cGUgc3RhdGUgPSBnZXRHdGtTdGF0ZVR5cGUodGhpcywgb2JqZWN0
KTsKICAgICBndGtfd2lkZ2V0X3NldF9zdGF0ZSh3aWRnZXQsIHN0YXRlKTsKLSAgICBndGtfd2lk
Z2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKG9iamVjdC0+c3R5bGUo
KS5kaXJlY3Rpb24oKSkpOworICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0
a1RleHREaXJlY3Rpb24ob2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsKIAogICAgIGlmIChp
c0ZvY3VzZWQob2JqZWN0KSkgewogICAgICAgICBzZXRXaWRnZXRIYXNGb2N1cyh3aWRnZXQsIFRS
VUUpOwpAQCAtMzY1LDcgKzM2NSw3IEBAIGludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5h
bFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHJldHVybiBib3R0
b207CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBp
ZiAocGFpbnRCdXR0b24ob2JqZWN0LCBpbmZvLCByZWN0KSkKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0zNzgsNyArMzc4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdChS
ZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLAogCiAgICAgaW50IGxl
ZnRCb3JkZXIgPSAwLCByaWdodEJvcmRlciA9IDAsIGJvdHRvbUJvcmRlciA9IDAsIHRvcEJvcmRl
ciA9IDA7CiAgICAgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoZ3RrQ29tYm9Cb3hCdXR0b24oKSwgbGVm
dEJvcmRlciwgdG9wQm9yZGVyLCByaWdodEJvcmRlciwgYm90dG9tQm9yZGVyKTsKLSAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSAmb2JqZWN0LT5zdHlsZSgpOworICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9ICZvYmplY3Quc3R5bGUoKTsKICAgICBpbnQgYXJyb3dTaXplID0gY29tYm9Cb3hBcnJvd1Np
emUoc3R5bGUpOwogICAgIEd0a1N0eWxlKiBidXR0b25TdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0
eWxlKGd0a0NvbWJvQm94QnV0dG9uKCkpOwogCkBAIC00MjIsMTQgKzQyMiwxNCBAQCBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIGluZm8sCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBHdGtXaWRnZXQqIHdp
ZGdldCA9IGd0a0VudHJ5KCk7CiAKICAgICBib29sIGVuYWJsZWQgPSBpc0VuYWJsZWQocmVuZGVy
T2JqZWN0KSAmJiAhaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KTsKICAgICBHdGtTdGF0
ZVR5cGUgYmFja2dyb3VuZFN0YXRlID0gZW5hYmxlZCA/IEdUS19TVEFURV9OT1JNQUwgOiBHVEtf
U1RBVEVfSU5TRU5TSVRJVkU7CiAgICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKHdpZGdldCwg
ZW5hYmxlZCk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERp
cmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsKKyAgICBndGtfd2lk
Z2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5z
dHlsZSgpLmRpcmVjdGlvbigpKSk7CiAgICAgc2V0V2lkZ2V0SGFzRm9jdXMod2lkZ2V0LCBpc0Zv
Y3VzZWQocmVuZGVyT2JqZWN0KSk7CiAKICAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdl
dENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0KTsKQEAgLTQ2NSwxMiArNDY1LDEyIEBAIGJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lR3RrOjpw
YWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGluZm8uY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDb250cm9s
UGFydCBwYXJ0ID0gb2JqZWN0LT5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKKyAgICBDb250cm9sUGFy
dCBwYXJ0ID0gb2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpOwogICAgIEFTU0VSVChwYXJ0ID09
IFNsaWRlckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8IHBh
cnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KTsKIAogICAgIC8vIFdlIHNocmluayB0aGUgdHJv
dWdoIHJlY3Qgc2xpZ2h0bHkgdG8gbWFrZSByb29tIGZvciB0aGUgZm9jdXMgaW5kaWNhdG9yLgpA
QCAtNDgzLDcgKzQ4Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVHJhY2so
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mCiAgICAgICAgIHdpZGdl
dCA9IGd0a1ZTY2FsZSgpOwogICAgICAgICB0cm91Z2hSZWN0LmluZmxhdGVZKC1ndGtfd2lkZ2V0
X2dldF9zdHlsZSh3aWRnZXQpLT55dGhpY2tuZXNzKTsKICAgICB9Ci0gICAgZ3RrX3dpZGdldF9z
ZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihvYmplY3QtPnN0eWxlKCkuZGly
ZWN0aW9uKCkpKTsKKyAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0
RGlyZWN0aW9uKG9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSk7CiAKICAgICBXaWRnZXRSZW5k
ZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0KTsKICAgICB3aWRn
ZXRDb250ZXh0Lmd0a1BhaW50Qm94KHRyb3VnaFJlY3QsIHdpZGdldCwgR1RLX1NUQVRFX0FDVElW
RSwgR1RLX1NIQURPV19PVVQsICJ0cm91Z2giKTsKQEAgLTQ5MywxMiArNDkzLDEyIEBAIGJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgaW5mCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lR3RrOjpw
YWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGluZm8uY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDb250cm9s
UGFydCBwYXJ0ID0gb2JqZWN0LT5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKKyAgICBDb250cm9sUGFy
dCBwYXJ0ID0gb2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpOwogICAgIEFTU0VSVChwYXJ0ID09
IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2Fs
UGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKIAogICAgIEd0a1dp
ZGdldCogd2lkZ2V0ID0gMDsKQEAgLTUxMyw3ICs1MTMsNyBAQCBib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8m
IGluZgogICAgICAgICBkZXRhaWwgPSAidnNjYWxlIjsKICAgICAgICAgb3JpZW50YXRpb24gPSBH
VEtfT1JJRU5UQVRJT05fVkVSVElDQUw7CiAgICAgfQotICAgIGd0a193aWRnZXRfc2V0X2RpcmVj
dGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLmRpcmVjdGlvbigp
KSk7CisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlv
bihvYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwogCiAgICAgLy8gT25seSBzb21lIHRoZW1l
cyBoYXZlIHNsaWRlciB0aHVtYnMgcmVzcG9uZCB0byBjbGlja3MgYW5kIHNvbWUgZG9uJ3QuIFRo
aXMgaW5mb3JtYXRpb24gaXMKICAgICAvLyBnYXRoZXJlZCB2aWEgdGhlICdhY3RpdmF0ZS1zbGlk
ZXInIHByb3BlcnR5LCBidXQgaXQncyBkZXByZWNhdGVkIGluIEdUSysgMi4yMiBhbmQgcmVtb3Zl
ZCBpbgpAQCAtNTQ5LDEwICs1NDksMTAgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xp
ZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB9CiAKICNp
ZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50UHJv
Z3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRQ
cm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgR3RrV2lkZ2V0KiB3
aWRnZXQgPSBndGtQcm9ncmVzc0JhcigpOwotICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3
aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLmRpcmVjdGlvbigp
KSk7CisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlv
bihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwogCiAgICAgV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KHBhaW50SW5mby5jb250ZXh0LCByZWN0KTsKICAgICBJ
bnRSZWN0IGZ1bGxQcm9ncmVzc0JhclJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpOwpAQCAt
NTg2LDcgKzU4Niw3IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5CiAgICAgc3R5bGUtPnNldE1p
bldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewog
ICAgIC8vIFdlIGV4cGFuZCB0aGUgcGFpbnRlZCBhcmVhIGJ5IDIgcGl4ZWxzIG9uIHRoZSB0b3Ag
YW5kIGJvdHRvbSBhbmQgMiBwaXhlbHMgb24gdGhlIHJpZ2h0LiBUaGlzCiAgICAgLy8gaXMgYmVj
YXVzZSBHVEsrIHRoZW1lcyB3YW50IHRvIGRyYXcgb3ZlciB0aGUgdGV4dCBib3ggYm9yZGVycywg
YnV0IFdlYkNvcmUgcmVuZGVycyB0aGUgaW5uZXIKQEAgLTU5Nyw3ICs1OTcsNyBAQCBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgY29uc3QgUGFpbgogCiAgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250
ZXh0KHBhaW50SW5mby5jb250ZXh0LCBleHBhbmRlZFJlY3QpOwogICAgIEd0a1dpZGdldCogd2lk
Z2V0ID0gZ3RrU3BpbkJ1dHRvbigpOwotICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRn
ZXQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLmRpcmVjdGlvbigpKSk7
CisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihy
ZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwogCiAgICAgSW50UmVjdCBmdWxsU3Bp
bkJ1dHRvblJlY3QoSW50UG9pbnQoKSwgZXhwYW5kZWRSZWN0LnNpemUoKSk7CiAgICAgd2lkZ2V0
Q29udGV4dC5ndGtQYWludEJveChmdWxsU3BpbkJ1dHRvblJlY3QsIHdpZGdldCwgR1RLX1NUQVRF
X05PUk1BTCwgR1RLX1NIQURPV19JTiwgInNwaW5idXR0b24iKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKaW5kZXggZDczZjZjNGEwYWI2M2Zl
ZGE3Y2QwOTM2ZTc3ZjJlZjc1NjRmNDFiNi4uZTRhMzZlMjlkZWZlZThkNzNhN2M5NzI0ZDM0NjY3
NDE3NjY1NTA2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrMy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRo
ZW1lR3RrMy5jcHAKQEAgLTE1NywxMSArMTU3LDExIEBAIHN0YXRpYyB2b2lkIGFkanVzdFJlY3RG
b3JGb2N1cyhHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIEludFJlY3QmIHJlY3QpCiAgICAgcmVj
dC5pbmZsYXRlKGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVH
dGs6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBJ
bnRSZWN0JiByZWN0KQordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UmVwYWludFJlY3QoY29u
c3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIEludFJlY3QmIHJlY3QpCiB7CiAgICAgR3Rr
U3R5bGVDb250ZXh0KiBjb250ZXh0ID0gMDsKICAgICBib29sIGNoZWNrSW50ZXJpb3JGb2N1cyA9
IGZhbHNlOwotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSByZW5kZXJPYmplY3QtPnN0eWxlKCkuYXBw
ZWFyYW5jZSgpOworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSByZW5kZXJPYmplY3Quc3R5bGUoKS5h
cHBlYXJhbmNlKCk7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgY2FzZSBDaGVja2JveFBhcnQ6
CiAgICAgY2FzZSBSYWRpb1BhcnQ6CkBAIC0yMjAsNyArMjIwLDcgQEAgc3RhdGljIHZvaWQgc2V0
VG9nZ2xlU2l6ZShHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSkK
ICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsK
IH0KIAotc3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1l
LCBHVHlwZSB3aWRnZXRUeXBlLCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIGZ1bGxSZWN0KQorc3RhdGljIHZvaWQg
cGFpbnRUb2dnbGUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBHVHlwZSB3aWRnZXRUeXBl
LCBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIGZ1bGxSZWN0KQogewogICAgIEd0a1N0eWxlQ29udGV4dCog
Y29udGV4dCA9IGdldFN0eWxlQ29udGV4dCh3aWRnZXRUeXBlKTsKICAgICBndGtfc3R5bGVfY29u
dGV4dF9zYXZlKGNvbnRleHQpOwpAQCAtMjQyLDcgKzI0Miw3IEBAIHN0YXRpYyB2b2lkIHBhaW50
VG9nZ2xlKGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgR1R5cGUgd2lkZ2V0VHlwZSwgUmVu
ZGVyT2JqCiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGluZGljYXRvclNpemUpOyAvLyBJbiBjYXNl
IHJlY3QuaGVpZ2h0KCkgd2FzIGVxdWFsIHRvIGluZGljYXRvclNpemUgKyAxLgogICAgIH0KIAot
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8
R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCku
ZGlyZWN0aW9uKCkpKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250
ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRl
ck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSkpOwogICAgIGd0a19zdHlsZV9jb250ZXh0X2Fk
ZF9jbGFzcyhjb250ZXh0LCB3aWRnZXRUeXBlID09IEdUS19UWVBFX0NIRUNLX0JVVFRPTiA/IEdU
S19TVFlMRV9DTEFTU19DSEVDSyA6IEdUS19TVFlMRV9DTEFTU19SQURJTyk7CiAKICAgICBndWlu
dCBmbGFncyA9IDA7CkBAIC0yODAsNyArMjgwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0
Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAgICBzZXRUb2dnbGVTaXpl
KGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9DSEVDS19CVVRUT04pLCBzdHlsZSk7CiB9CiAKLWJv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
ck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgcGFpbnRUb2dnbGUodGhpcywgR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OLCByZW5kZXJP
YmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjkxLDEzICsy
OTEsMTMgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKICAgICBzZXRUb2dnbGVTaXplKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9S
QURJT19CVVRUT04pLCBzdHlsZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50UmFk
aW8oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRSYWRpbyhj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcGFpbnRUb2dnbGUodGhpcywgR1RLX1RZ
UEVfUkFESU9fQlVUVE9OLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCByZW5kZXJCdXR0b24oUmVuZGVyVGhlbWUqIHRo
ZW1lLCBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3N0YXRp
YyB2b2lkIHJlbmRlckJ1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1N0eWxlQ29udGV4dCog
Y29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEludFJlY3QgYnV0dG9u
UmVjdChyZWN0KTsKIApAQCAtMzYzLDEyICszNjMsMTIgQEAgc3RhdGljIHZvaWQgcmVuZGVyQnV0
dG9uKFJlbmRlclRoZW1lKiB0aGVtZSwgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJP
YmoKICAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25SZWN0LnkoKSwg
YnV0dG9uUmVjdC53aWR0aCgpLCBidXR0b25SZWN0LmhlaWdodCgpKTsKICAgICB9CiB9Ci1ib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAg
ICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0JV
VFRPTik7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKIAotICAgIGd0a19z
dHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrVGV4dERp
cmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkuZGlyZWN0aW9u
KCkpKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0
aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5z
dHlsZSgpLmRpcmVjdGlvbigpKSkpOwogICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhj
b250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKIAogICAgIHJlbmRlckJ1dHRvbih0aGlz
LCBjb250ZXh0LCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CkBAIC00NjQsMTAgKzQ2
NCwxMCBAQCBpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAgICByZXR1cm4gYm9yZGVyV2lkdGguYm90dG9tICsg
Zm9jdXNXaWR0aDsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdChSZW5k
ZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBjYWlyb190KiBjYWlyb0NvbnRleHQgPSBwYWlu
dEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7Ci0gICAgR3RrVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGly
ZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS5kaXJlY3Rpb24oKSkpOworICAgIEd0a1RleHRE
aXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4
dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwogCiAgICAgLy8g
UGFpbnQgdGhlIGJ1dHRvbi4KICAgICBHdGtTdHlsZUNvbnRleHQqIGJ1dHRvblN0eWxlQ29udGV4
dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pOwpAQCAtNTk1LDEyICs1OTUsMTIg
QEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIHJlbmRl
ck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQog
ewogICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQ
RV9FTlRSWSk7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKIAotICAgIGd0
a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrVGV4
dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkuZGlyZWN0
aW9uKCkpKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBz
dGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVj
dC5zdHlsZSgpLmRpcmVjdGlvbigpKSkpOwogICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFz
cyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfRU5UUlkpOwogCiAgICAgZ3VpbnQgZmxhZ3MgPSAw
OwpAQCAtNjQzLDE1ICs2NDMsMTUgQEAgc3RhdGljIHZvaWQgYXBwbHlTbGlkZXJTdHlsZUNvbnRl
eHRDbGFzc2VzKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgQ29udHJvbFBhcnQKICAgICAgICAg
Z3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19WRVJU
SUNBTCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVy
T2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUcmFjayhjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IHJlbmRlck9i
amVjdC0+c3R5bGUoKS5hcHBlYXJhbmNlKCk7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IHJlbmRl
ck9iamVjdC5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKICAgICBBU1NFUlRfVU5VU0VEKHBhcnQsIHBh
cnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQg
fHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpOwogCiAgICAgR3RrU3R5bGVDb250ZXh0
KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKTsKICAgICBndGtfc3R5
bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwogCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2Rp
cmVjdGlvbihjb250ZXh0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS5k
aXJlY3Rpb24oKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4
dCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwog
ICAgIGFwcGx5U2xpZGVyU3R5bGVDb250ZXh0Q2xhc3Nlcyhjb250ZXh0LCBwYXJ0KTsKICAgICBn
dGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1RST1VH
SCk7CiAKQEAgLTY3OCwxNSArNjc4LDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xp
ZGVyVHJhY2soUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1i
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVGh1
bWIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBy
ZW5kZXJPYmplY3QtPnN0eWxlKCkuYXBwZWFyYW5jZSgpOworICAgIENvbnRyb2xQYXJ0IHBhcnQg
PSByZW5kZXJPYmplY3Quc3R5bGUoKS5hcHBlYXJhbmNlKCk7CiAgICAgQVNTRVJUKHBhcnQgPT0g
U2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQ
YXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwogCiAgICAgR3RrU3R5
bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKTsKICAg
ICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwogCi0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+
c3R5bGUoKS5kaXJlY3Rpb24oKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rp
b24oY29udGV4dCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rp
b24oKSkpOwogICAgIGFwcGx5U2xpZGVyU3R5bGVDb250ZXh0Q2xhc3Nlcyhjb250ZXh0LCBwYXJ0
KTsKICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NM
QVNTX1NMSURFUik7CiAKQEAgLTcyOSw5ICs3MjksOSBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjph
ZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
IH0KIAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAo
IXJlbmRlck9iamVjdC0+aXNQcm9ncmVzcygpKQorICAgIGlmICghcmVuZGVyT2JqZWN0LmlzUHJv
Z3Jlc3MoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBHdGtTdHlsZUNvbnRleHQqIGNv
bnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfUFJPR1JFU1NfQkFSKTsKQEAgLTc4Niw3
ICs3ODYsNyBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eQogICAgIHN0eWxlLT5zZXRNaW5XaWR0
aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhaW50U3BpbkFycm93
QnV0dG9uKFJlbmRlclRoZW1lKiB0aGVtZSwgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBSZW5k
ZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QsIEd0a0Fycm93VHlwZSBhcnJvd1R5cGUpCitzdGF0aWMgdm9pZCBwYWlu
dFNwaW5BcnJvd0J1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1N0eWxlQ29udGV4dCogY29u
dGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtBcnJvd1R5cGUgYXJyb3dUeXBlKQog
ewogICAgIEFTU0VSVChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQIHx8IGFycm93VHlwZSA9PSBH
VEtfQVJST1dfRE9XTik7CiAKQEAgLTg1MiwxMiArODUyLDEyIEBAIHN0YXRpYyB2b2lkIHBhaW50
U3BpbkFycm93QnV0dG9uKFJlbmRlclRoZW1lKiB0aGVtZSwgR3RrU3R5bGVDb250ZXh0KiBjb250
ZXh0LCBSCiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKIH0KIAotYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxl
Q29udGV4dChHVEtfVFlQRV9TUElOX0JVVFRPTik7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2
ZShjb250ZXh0KTsKIAotICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nh
c3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxl
KCkuZGlyZWN0aW9uKCkpKTsKKyAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRp
Y19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0
eWxlKCkuZGlyZWN0aW9uKCkpKTsKICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9u
KGNvbnRleHQsIGRpcmVjdGlvbik7CiAKICAgICBndWludCBmbGFncyA9IDA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBkZDVjNDAwYWVhMjE0ZmYyMGM5MDE4
ZDI0YmEyMzlkNWY2ZjVkNGZhLi41MDY2YWVjYzE1Y2JjYWU0NmY4OGUxZTg1YjU5MTA0MmI4Nzcx
OTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTE0Mzgs
NyArMTQzOCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZFZpc3VhbE92ZXJmbG93RnJvbVRoZW1l
KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBwaXhlbFNu
YXBwZWRCb3JkZXJCb3hSZWN0KCk7Ci0gICAgdGhlbWUoKS5hZGp1c3RSZXBhaW50UmVjdCh0aGlz
LCBpbmZsYXRlZFJlY3QpOworICAgIHRoZW1lKCkuYWRqdXN0UmVwYWludFJlY3QoKnRoaXMsIGlu
ZmxhdGVkUmVjdCk7CiAgICAgYWRkVmlzdWFsT3ZlcmZsb3coaW5mbGF0ZWRSZWN0KTsKIAogICAg
IGlmIChSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdC
bG9jaygpKQpAQCAtNDI5NCw3ICs0Mjk0LDcgQEAgaW50IFJlbmRlckJsb2NrOjpiYXNlbGluZVBv
c2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGJvb2wgZmlyc3RMaW5lLCBMaW4KICAg
ICAgICAgLy8gaXMgdHVybmVkIG9mZiwgY2hlY2tib3hlcy9yYWRpb3Mgd2lsbCBzdGlsbCBoYXZl
IGRlY2VudCBiYXNlbGluZXMuCiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIHBhdGNoIGZvcm0g
Y29udHJvbHMgdG8gZGVhbCB3aXRoIHZlcnRpY2FsIGxpbmVzLgogICAgICAgICBpZiAoc3R5bGUo
KS5oYXNBcHBlYXJhbmNlKCkgJiYgIXRoZW1lKCkuaXNDb250cm9sQ29udGFpbmVyKHN0eWxlKCku
YXBwZWFyYW5jZSgpKSkKLSAgICAgICAgICAgIHJldHVybiB0aGVtZSgpLmJhc2VsaW5lUG9zaXRp
b24odGhpcyk7CisgICAgICAgICAgICByZXR1cm4gdGhlbWUoKS5iYXNlbGluZVBvc2l0aW9uKCp0
aGlzKTsKICAgICAgICAgICAgIAogICAgICAgICAvLyBDU1MyLjEgc3RhdGVzIHRoYXQgdGhlIGJh
c2VsaW5lIG9mIGFuIGlubGluZSBibG9jayBpcyB0aGUgYmFzZWxpbmUgb2YgdGhlIGxhc3QgbGlu
ZSBib3ggaW4KICAgICAgICAgLy8gdGhlIG5vcm1hbCBmbG93LiAgV2UgbWFrZSBhbiBleGNlcHRp
b24gZm9yIG1hcnF1ZWVzLCBzaW5jZSB0aGVpciBiYXNlbGluZXMgYXJlIG1lYW5pbmdsZXNzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGI3ZTNkY2IyNjQyNGE0ZDY0
YjNkNjgxMjE4MTRiMjU0NDg4MTA5NjQuLjYzYTI4ZDMxOGZlOWI0MTIwMmZiNmFkMGQxNTYzY2U5
ZWI4ZmNiYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0xMjI3
LDcgKzEyMjcsNyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgYm9vbCB0aGVtZVBhaW50ZWQgPSBzdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAmJiAhdGhl
bWUoKS5wYWludCh0aGlzLCBjb250cm9sU3RhdGVzLCBwYWludEluZm8sIHNuYXBwZWRQYWludFJl
Y3QpOworICAgIGJvb2wgdGhlbWVQYWludGVkID0gc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkgJiYg
IXRoZW1lKCkucGFpbnQoKnRoaXMsIGNvbnRyb2xTdGF0ZXMsIHBhaW50SW5mbywgc25hcHBlZFBh
aW50UmVjdCk7CiAKICAgICBpZiAoY29udHJvbFN0YXRlcyAmJiBjb250cm9sU3RhdGVzLT5uZWVk
c1JlcGFpbnQoKSkKICAgICAgICAgbV9yZXBhaW50VGltZXIuc3RhcnRPbmVTaG90KDApOwpAQCAt
MTIzOSwxMiArMTIzOSwxMiBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaQogICAgICAgICBwYWlu
dEJhY2tncm91bmQocGFpbnRJbmZvLCBwYWludFJlY3QsIGJsZWVkQXZvaWRhbmNlKTsKIAogICAg
ICAgICBpZiAoc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICB0aGVtZSgpLnBh
aW50RGVjb3JhdGlvbnModGhpcywgcGFpbnRJbmZvLCBzbmFwcGVkUGFpbnRSZWN0KTsKKyAgICAg
ICAgICAgIHRoZW1lKCkucGFpbnREZWNvcmF0aW9ucygqdGhpcywgcGFpbnRJbmZvLCBzbmFwcGVk
UGFpbnRSZWN0KTsKICAgICB9CiAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLCBwYWludFJl
Y3QsIHN0eWxlKCksIEluc2V0KTsKIAogICAgIC8vIFRoZSB0aGVtZSB3aWxsIHRlbGwgdXMgd2hl
dGhlciBvciBub3Qgd2Ugc2hvdWxkIGFsc28gcGFpbnQgdGhlIENTUyBib3JkZXIuCi0gICAgaWYg
KGJsZWVkQXZvaWRhbmNlICE9IEJhY2tncm91bmRCbGVlZEJhY2tncm91bmRPdmVyQm9yZGVyICYm
ICghc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkgfHwgKCF0aGVtZVBhaW50ZWQgJiYgdGhlbWUoKS5w
YWludEJvcmRlck9ubHkodGhpcywgcGFpbnRJbmZvLCBzbmFwcGVkUGFpbnRSZWN0KSkpICYmIHN0
eWxlKCkuaGFzQm9yZGVyKCkpCisgICAgaWYgKGJsZWVkQXZvaWRhbmNlICE9IEJhY2tncm91bmRC
bGVlZEJhY2tncm91bmRPdmVyQm9yZGVyICYmICghc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkgfHwg
KCF0aGVtZVBhaW50ZWQgJiYgdGhlbWUoKS5wYWludEJvcmRlck9ubHkoKnRoaXMsIHBhaW50SW5m
bywgc25hcHBlZFBhaW50UmVjdCkpKSAmJiBzdHlsZSgpLmhhc0JvcmRlcigpKQogICAgICAgICBw
YWludEJvcmRlcihwYWludEluZm8sIHBhaW50UmVjdCwgc3R5bGUoKSwgYmxlZWRBdm9pZGFuY2Up
OwogCiAgICAgaWYgKGJsZWVkQXZvaWRhbmNlID09IEJhY2tncm91bmRCbGVlZFVzZVRyYW5zcGFy
ZW5jeUxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1
dHRvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAppbmRl
eCA3MzcyZGQwM2FjNzFjMTI2YTg2ZTMxMDFlYzc5NzQwZjMwYWM3YzIzLi44ZmM4MzMwOTE4Njdh
ZDFmMGFhNGE5MWZlMzJhYTQyMjA1Yjg3NjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQnV0dG9uLmNwcApAQCAtMTEyLDEyICsxMTIsMTIgQEAgdm9pZCBSZW5kZXJCdXR0b246
OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3QKICAgICBpZiAobV9pbm5lcikgLy8gUmVuZGVyQmxvY2sgaGFuZGxlZCB1cGRhdGluZyB0
aGUgYW5vbnltb3VzIGJsb2NrJ3Mgc3R5bGUuCiAgICAgICAgIHNldHVwSW5uZXJTdHlsZSgmbV9p
bm5lci0+c3R5bGUoKSk7CiAKLSAgICBpZiAoIW1fZGVmYXVsdCAmJiB0aGVtZSgpLmlzRGVmYXVs
dCh0aGlzKSkgeworICAgIGlmICghbV9kZWZhdWx0ICYmIHRoZW1lKCkuaXNEZWZhdWx0KCp0aGlz
KSkgewogICAgICAgICBpZiAoIW1fdGltZXIpCiAgICAgICAgICAgICBtX3RpbWVyID0gc3RkOjpt
YWtlX3VuaXF1ZTxUaW1lcjxSZW5kZXJCdXR0b24+Pih0aGlzLCAmUmVuZGVyQnV0dG9uOjp0aW1l
ckZpcmVkKTsKICAgICAgICAgbV90aW1lci0+c3RhcnRSZXBlYXRpbmcoMC4wMyk7CiAgICAgICAg
IG1fZGVmYXVsdCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChtX2RlZmF1bHQgJiYgIXRoZW1lKCku
aXNEZWZhdWx0KHRoaXMpKSB7CisgICAgfSBlbHNlIGlmIChtX2RlZmF1bHQgJiYgIXRoZW1lKCku
aXNEZWZhdWx0KCp0aGlzKSkgewogICAgICAgICBtX2RlZmF1bHQgPSBmYWxzZTsKICAgICAgICAg
bV90aW1lciA9IG51bGxwdHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKaW5kZXggNzY4ZDE4OWY1ZTRiMTYxZDYz
YmQ4OWYxZDg5MmJhYTQ3OTQ1ZmNlNy4uZTNlOWE5ZTA3YTUyYjM2NDE2OGYwMmYwYjc1MWEzNTM0
NmEyMzMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVV
cGxvYWRDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuY3BwCkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91
dFBvaW4KICAgICAgICAgICAgICAgICAvLyBEcmF3IHRoZSBmaWxlIGljb24gYW5kIGRlY29yYXRp
b25zLgogICAgICAgICAgICAgICAgIEludFJlY3QgaWNvblJlY3QoaWNvblgsIGljb25ZLCBpY29u
V2lkdGgsIGljb25IZWlnaHQpOwogICAgICAgICAgICAgICAgIFJlbmRlclRoZW1lOjpGaWxlVXBs
b2FkRGVjb3JhdGlvbnMgZGVjb3JhdGlvbnNUeXBlID0gaW5wdXRFbGVtZW50KCkuZmlsZXMoKS0+
bGVuZ3RoKCkgPT0gMSA/IFJlbmRlclRoZW1lOjpTaW5nbGVGaWxlIDogUmVuZGVyVGhlbWU6Ok11
bHRpcGxlRmlsZXM7Ci0gICAgICAgICAgICAgICAgdGhlbWUoKS5wYWludEZpbGVVcGxvYWRJY29u
RGVjb3JhdGlvbnModGhpcywgYnV0dG9uUmVuZGVyZXIsIHBhaW50SW5mbywgaWNvblJlY3QsIGlu
cHV0RWxlbWVudCgpLmljb24oKSwgZGVjb3JhdGlvbnNUeXBlKTsKKyAgICAgICAgICAgICAgICB0
aGVtZSgpLnBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucygqdGhpcywgKmJ1dHRvblJlbmRl
cmVyLCBwYWludEluZm8sIGljb25SZWN0LCBpbnB1dEVsZW1lbnQoKS5pY29uKCksIGRlY29yYXRp
b25zVHlwZSk7CiAgICAgICAgICAgICB9CiAjZWxzZQogICAgICAgICAgICAgLy8gRHJhdyB0aGUg
ZmlsZSBpY29uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5j
cHAKaW5kZXggY2Y5NGQ1ZTRiNzNkYzU0MTY2MGQ1ZWY1MWE1NWNmNWU1YTQ5ZDNmZC4uMTU5Njgy
MTZmMGM1OGU3YzM2YzkzN2UzYzgzMTNkYWQ4MTRjZjg0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcApAQCAtMTI4NSw3ICsxMjg1LDcgQEAgdm9p
ZCBSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdpb25zVmlzdWFsT3ZlcmZsb3dGcm9tVGhlbWUoY29u
c3QgUmVuZGVyQmxvY2sqIGJsb2MKICAgICAgICAgYm9yZGVyQm94ID0gcmVnaW9uLT5yZWN0Rmxv
d1BvcnRpb25Gb3JCb3goYmxvY2ssIGJvcmRlckJveCk7CiAKICAgICAgICAgSW50UmVjdCBpbmZs
YXRlZFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGJvcmRlckJveCk7Ci0gICAgICAgIGJsb2Nr
LT50aGVtZSgpLmFkanVzdFJlcGFpbnRSZWN0KGJsb2NrLCBpbmZsYXRlZFJlY3QpOworICAgICAg
ICBibG9jay0+dGhlbWUoKS5hZGp1c3RSZXBhaW50UmVjdCgqYmxvY2ssIGluZmxhdGVkUmVjdCk7
CiAKICAgICAgICAgcmVnaW9uLT5hZGRWaXN1YWxPdmVyZmxvd0ZvckJveChibG9jaywgaW5mbGF0
ZWRSZWN0KTsKICAgICAgICAgaWYgKHJlZ2lvbiA9PSBlbmRSZWdpb24pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAKaW5kZXggY2FmZDBjMGU3
Y2RkMzBlOGZiMjZmNmZiNTMxOTg3MTZiZjhmOWI5NS4uYzBjMmQzOTQ5NzA3ZDlmMjllZmQ2MGQz
YTgyMWU1OWFkZTAxMDMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1lZGlhQ29udHJvbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZWRpYUNvbnRyb2xzLmNwcApAQCAtNzAsMTAgKzcwLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENHKQogCi1zdGF0aWMgV0tNZWRpYUNvbnRy
b2xsZXJUaGVtZVN0YXRlIGRldGVybWluZVN0YXRlKFJlbmRlck9iamVjdCogbykKK3N0YXRpYyBX
S01lZGlhQ29udHJvbGxlclRoZW1lU3RhdGUgZGV0ZXJtaW5lU3RhdGUoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvKQogewogICAgIGludCByZXN1bHQgPSAwOwotICAgIGNvbnN0IFJlbmRlclRoZW1lJiB0
aGVtZSA9IG8tPnRoZW1lKCk7CisgICAgY29uc3QgUmVuZGVyVGhlbWUmIHRoZW1lID0gby50aGVt
ZSgpOwogICAgIGlmICghdGhlbWUuaXNFbmFibGVkKG8pIHx8IHRoZW1lLmlzUmVhZE9ubHlDb250
cm9sKG8pKQogICAgICAgICByZXN1bHQgfD0gV0tNZWRpYUNvbnRyb2xsZXJGbGFnRGlzYWJsZWQ7
CiAgICAgaWYgKHRoZW1lLmlzUHJlc3NlZChvKSkKQEAgLTg0LDkgKzg0LDkgQEAgc3RhdGljIFdL
TWVkaWFDb250cm9sbGVyVGhlbWVTdGF0ZSBkZXRlcm1pbmVTdGF0ZShSZW5kZXJPYmplY3QqIG8p
CiB9CiAKIC8vIFV0aWxpdHkgdG8gc2NhbGUgd2hlbiB0aGUgVUkgcGFydCBhcmUgbm90IHNjYWxl
ZCBieSB3a0RyYXdNZWRpYVVJUGFydAotc3RhdGljIEZsb2F0UmVjdCBnZXRVbnpvb21lZFJlY3RB
bmRBZGp1c3RDdXJyZW50Q29udGV4dChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZvcmlnaW5hbFJlY3QpCitzdGF0aWMgRmxvYXRSZWN0
IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KGNvbnN0IFJlbmRlck9iamVj
dCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QgJm9yaWdpbmFs
UmVjdCkKIHsKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20o
KTsKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwogICAg
IEZsb2F0UmVjdCB1bnpvb21lZFJlY3Qob3JpZ2luYWxSZWN0KTsKICAgICBpZiAoem9vbUxldmVs
ICE9IDEuMGYpIHsKICAgICAgICAgdW56b29tZWRSZWN0LnNldFdpZHRoKHVuem9vbWVkUmVjdC53
aWR0aCgpIC8gem9vbUxldmVsKTsKQEAgLTEyNiwzNSArMTI2LDM1IEBAIHZvaWQgUmVuZGVyTWVk
aWFDb250cm9sczo6YWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxl
KQogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2l6ZS5oZWln
aHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlck1lZGlhQ29udHJvbHM6
OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUgcGFydCwgUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKK2Jvb2wgUmVuZGVyTWVkaWFDb250cm9sczo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRp
YUNvbnRyb2xFbGVtZW50VHlwZSBwYXJ0LCBjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogCiAgICAgc3dp
dGNoIChwYXJ0KSB7CiAgICAgY2FzZSBNZWRpYUVudGVyRnVsbHNjcmVlbkJ1dHRvbjoKICAgICBj
YXNlIE1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b246Ci0gICAgICAgIGlmIChNZWRpYUNvbnRyb2xG
dWxsc2NyZWVuQnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sRnVs
bHNjcmVlbkJ1dHRvbkVsZW1lbnQqPihvLT5ub2RlKCkpKSB7CisgICAgICAgIGlmIChNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250
cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQqPihvLm5vZGUoKSkpIHsKICAgICAgICAgICAgIGJv
b2wgZW50ZXJCdXR0b24gPSBidG4tPmRpc3BsYXlUeXBlKCkgPT0gTWVkaWFFbnRlckZ1bGxzY3Jl
ZW5CdXR0b247CiAgICAgICAgICAgICB3a0RyYXdNZWRpYVVJUGFydChlbnRlckJ1dHRvbiA/IFdL
TWVkaWFVSVBhcnRGdWxsc2NyZWVuQnV0dG9uIDogV0tNZWRpYVVJUGFydEV4aXRGdWxsc2NyZWVu
QnV0dG9uLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGRldGVybWlu
ZVN0YXRlKG8pKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhU2hv
d0Nsb3NlZENhcHRpb25zQnV0dG9uOgogICAgIGNhc2UgTWVkaWFIaWRlQ2xvc2VkQ2FwdGlvbnNC
dXR0b246Ci0gICAgICAgIGlmIChNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRv
bkVsZW1lbnQqIGJ0biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRp
b25zQnV0dG9uRWxlbWVudCo+KG8tPm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKE1lZGlhQ29udHJv
bFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8TWVk
aWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50Kj4oby5ub2RlKCkpKSB7
CiAgICAgICAgICAgICBib29sIGNhcHRpb25zVmlzaWJsZSA9IGJ0bi0+ZGlzcGxheVR5cGUoKSA9
PSBNZWRpYUhpZGVDbG9zZWRDYXB0aW9uc0J1dHRvbjsKICAgICAgICAgICAgIHdrRHJhd01lZGlh
VUlQYXJ0KGNhcHRpb25zVmlzaWJsZSA/IFdLTWVkaWFVSVBhcnRIaWRlQ2xvc2VkQ2FwdGlvbnNC
dXR0b24gOiBXS01lZGlhVUlQYXJ0U2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uLCBwYWludEluZm8u
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGRldGVybWluZVN0YXRlKG8pKTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhTXV0ZUJ1dHRvbjoKICAgICBjYXNl
IE1lZGlhVW5NdXRlQnV0dG9uOgotICAgICAgICBpZiAoTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVs
ZW1lbnQqIGJ0biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50Kj4o
by0+bm9kZSgpKSkgeworICAgICAgICBpZiAoTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQq
IGJ0biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50Kj4oby5ub2Rl
KCkpKSB7CiAgICAgICAgICAgICBib29sIGF1ZGlvRW5hYmxlZCA9IGJ0bi0+ZGlzcGxheVR5cGUo
KSA9PSBNZWRpYU11dGVCdXR0b247CiAgICAgICAgICAgICB3a0RyYXdNZWRpYVVJUGFydChhdWRp
b0VuYWJsZWQgPyBXS01lZGlhVUlQYXJ0TXV0ZUJ1dHRvbiA6IFdLTWVkaWFVSVBhcnRVbk11dGVC
dXR0b24sIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZGV0ZXJtaW5l
U3RhdGUobykpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVkaWFQYXVz
ZUJ1dHRvbjoKICAgICBjYXNlIE1lZGlhUGxheUJ1dHRvbjoKLSAgICAgICAgaWYgKE1lZGlhQ29u
dHJvbFBsYXlCdXR0b25FbGVtZW50KiBidG4gPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xQbGF5
QnV0dG9uRWxlbWVudCo+KG8tPm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKE1lZGlhQ29udHJvbFBs
YXlCdXR0b25FbGVtZW50KiBidG4gPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xQbGF5QnV0dG9u
RWxlbWVudCo+KG8ubm9kZSgpKSkgewogICAgICAgICAgICAgYm9vbCBjYW5QbGF5ID0gYnRuLT5k
aXNwbGF5VHlwZSgpID09IE1lZGlhUGxheUJ1dHRvbjsKICAgICAgICAgICAgIHdrRHJhd01lZGlh
VUlQYXJ0KGNhblBsYXkgPyBXS01lZGlhVUlQYXJ0UGxheUJ1dHRvbiA6IFdLTWVkaWFVSVBhcnRQ
YXVzZUJ1dHRvbiwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBkZXRl
cm1pbmVTdGF0ZShvKSk7CiAgICAgICAgIH0KQEAgLTE3Miw3ICsxNzIsNyBAQCBib29sIFJlbmRl
ck1lZGlhQ29udHJvbHM6OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVu
dFR5cGUgcGFydCwgUgogICAgICAgICB3a0RyYXdNZWRpYVVJUGFydChXS01lZGlhVUlQYXJ0U2Vl
a0ZvcndhcmRCdXR0b24sIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwg
ZGV0ZXJtaW5lU3RhdGUobykpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhU2xpZGVy
OiB7Ci0gICAgICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBwYXJlbnRN
ZWRpYUVsZW1lbnQoKm8pKSB7CisgICAgICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVs
ZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQobykpIHsKICAgICAgICAgICAgIEZsb2F0UmVjdCB1
bnpvb21lZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChvLCBw
YWludEluZm8sIHIpOwogICAgICAgICAgICAgd2tEcmF3TWVkaWFTbGlkZXJUcmFjayhwYWludElu
Zm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHVuem9vbWVkUmVjdCwgbWVkaWFFbGVtZW50
LT5wZXJjZW50TG9hZGVkKCkgKiBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCksIG1lZGlhRWxlbWVu
dC0+Y3VycmVudFRpbWUoKSwgbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpLCBkZXRlcm1pbmVTdGF0
ZShvKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZWRpYUNvbnRyb2xzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVk
aWFDb250cm9scy5oCmluZGV4IDhhMTZjMmY3ODdkOTllNTVhZmU3ODE0MWUzOGZhY2E3OWEzMTYy
NTAuLmRlMDJmMmFhM2VjY2Q4MGMzNDc1YWFlNzE5ZTlmOTI4YmUzYWFjYTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaApAQCAtNDUsNyArNDUs
NyBAQCBjbGFzcyBSZW5kZXJNZWRpYUNvbnRyb2xzIHsKIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JN
KFdJTikKLSAgICBzdGF0aWMgYm9vbCBwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhQ29udHJv
bEVsZW1lbnRUeXBlLCBSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgc3RhdGljIGJvb2wgcGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNvbnRy
b2xFbGVtZW50VHlwZSwgY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwogICAgIHN0YXRpYyB2b2lkIGFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXpl
KFJlbmRlclN0eWxlKik7CiAjZW5kaWYKICAgICBzdGF0aWMgSW50UG9pbnQgdm9sdW1lU2xpZGVy
T2Zmc2V0RnJvbU11dGVCdXR0b24oUmVuZGVyQm94KiwgY29uc3QgSW50U2l6ZSYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCBhMDAzMDdjMTk1MGFlMDRi
NDhhMWNmYzRmNTc5MTU4MTg4NTJkODc5Li43YmVmZGM1ZGExNDkzN2MwYmMyMmYwMTY3YzhlZjk1
NDdjZjM0MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApA
QCAtNzI1LDcgKzcyNSw3IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5pbmdC
bG9jaygpIGNvbnN0CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3TGluZUZvckJveFNpZGUo
R3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGZsb2F0IHgxLCBmbG9hdCB5MSwgZmxv
YXQgeDIsIGZsb2F0IHkyLAotICAgIEJveFNpZGUgc2lkZSwgQ29sb3IgY29sb3IsIEVCb3JkZXJT
dHlsZSBib3JkZXJTdHlsZSwgZmxvYXQgYWRqYWNlbnRXaWR0aDEsIGZsb2F0IGFkamFjZW50V2lk
dGgyLCBib29sIGFudGlhbGlhcykKKyAgICBCb3hTaWRlIHNpZGUsIENvbG9yIGNvbG9yLCBFQm9y
ZGVyU3R5bGUgYm9yZGVyU3R5bGUsIGZsb2F0IGFkamFjZW50V2lkdGgxLCBmbG9hdCBhZGphY2Vu
dFdpZHRoMiwgYm9vbCBhbnRpYWxpYXMpIGNvbnN0CiB7CiAgICAgZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IgPSBkb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgZmxvYXQgdGhpY2tu
ZXNzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGNhOGE2ZGVh
N2M2ODk0OWM3YmUwMDc4MmQzZDRiNGZhOTlkYmJhZTYuLmU1ODAzZTBkYjZiMDY4YTQ4OTE3NTA5
NmUzYzNkNDU1YjQ5YmIyNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKQEAgLTg3OSw3ICs4NzksNyBAQCBwdWJsaWM6CiAKICAgICBSZXNwZWN0SW1hZ2VPcmllbnRh
dGlvbkVudW0gc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSBjb25zdDsKIAotICAgIHZv
aWQgZHJhd0xpbmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHgxLCBmbG9hdCB5
MSwgZmxvYXQgeDIsIGZsb2F0IHkyLCBCb3hTaWRlLCBDb2xvciwgRUJvcmRlclN0eWxlLCBmbG9h
dCBhZGpidzEsIGZsb2F0IGFkamJ3MiwgYm9vbCBhbnRpYWxpYXMgPSBmYWxzZSk7CisgICAgdm9p
ZCBkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0KiwgZmxvYXQgeDEsIGZsb2F0IHkx
LCBmbG9hdCB4MiwgZmxvYXQgeTIsIEJveFNpZGUsIENvbG9yLCBFQm9yZGVyU3R5bGUsIGZsb2F0
IGFkamJ3MSwgZmxvYXQgYWRqYncyLCBib29sIGFudGlhbGlhcyA9IGZhbHNlKSBjb25zdDsKIHBy
b3RlY3RlZDoKICAgICB2b2lkIHBhaW50Rm9jdXNSaW5nKFBhaW50SW5mbyYsIGNvbnN0IExheW91
dFBvaW50JiwgUmVuZGVyU3R5bGUqKTsKICAgICB2b2lkIHBhaW50T3V0bGluZShQYWludEluZm8m
LCBjb25zdCBMYXlvdXRSZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUHJvZ3Jlc3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBy
b2dyZXNzLmNwcAppbmRleCA0MTM5ZDI1ZDk5MmQ2MmI3NDg2YjFkMzE4NWYwNjAzN2M1MjRkZmZl
Li44NDMyZjYwNGY0MzhhMjJjMzc2NGNlOThhMzU3MDUzOTY3ZTA3ZWYxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgdm9p
ZCBSZW5kZXJQcm9ncmVzczo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2Fs
SGVpZ2h0LCBMYXlvdXRVbml0IGwKICAgICAgICAgZnJhbWUuc2V0SGVpZ2h0KGNvbXB1dGVkVmFs
dWVzLm1fZXh0ZW50KTsKICAgICBlbHNlCiAgICAgICAgIGZyYW1lLnNldFdpZHRoKGNvbXB1dGVk
VmFsdWVzLm1fZXh0ZW50KTsKLSAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IHRoZW1lKCkucHJvZ3Jl
c3NCYXJSZWN0Rm9yQm91bmRzKHRoaXMsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhbWUpKS5zaXpl
KCk7CisgICAgSW50U2l6ZSBmcmFtZVNpemUgPSB0aGVtZSgpLnByb2dyZXNzQmFyUmVjdEZvckJv
dW5kcygqdGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFtZSkpLnNpemUoKTsKICAgICBjb21w
dXRlZFZhbHVlcy5tX2V4dGVudCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFtZVNp
emUuaGVpZ2h0KCkgOiBmcmFtZVNpemUud2lkdGgoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAppbmRl
eCA0YWJlNzk2ZDNhNWU2NjA2Yzc5YmQ0Y2VhMTQxNDI4ZjZhMjM1NTFjLi5jNzdjNzIxZDQyZWVl
ZTYxZWEyYzFiNWI3OWMyZGU3YzkyNWY5MzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcApAQCAtODQsNyAr
ODQsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JgogCiAgICAgICAgIC8vIENvbnZlcnQgdGhl
IHJlY3QgaW50byB0aGUgY29vcmRzIHVzZWQgZm9yIHBhaW50aW5nIHRoZSBjb250ZW50CiAgICAg
ICAgIGNvbnRlbnRzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpKTsKLSAgICAg
ICAgdGhlbWUoKS5wYWludENhcHNMb2NrSW5kaWNhdG9yKHRoaXMsIHBhaW50SW5mbywgcGl4ZWxT
bmFwcGVkSW50UmVjdChjb250ZW50c1JlY3QpKTsKKyAgICAgICAgdGhlbWUoKS5wYWludENhcHNM
b2NrSW5kaWNhdG9yKCp0aGlzLCBwYWludEluZm8sIHBpeGVsU25hcHBlZEludFJlY3QoY29udGVu
dHNSZWN0KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmNwcAppbmRleCBjNzlkYmNiY2U0MTMwM2VmNzQwOTNmM2E5ZjdmYmI0YWZkMzZjODlmLi5jMDFk
ZDQzYWFkZjk1NDlmNDBkYmY5OWY3YTQzMDg2ZDE0OTFhZDAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKQEAgLTI2MywyMCArMjYzLDIwIEBAIHZvaWQgUmVuZGVy
VGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0
eWxlJiBzdHlsZSwKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OnBhaW50KFJlbmRlck9i
amVjdCogbywgQ29udHJvbFN0YXRlcyogY29udHJvbFN0YXRlcywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lOjpwYWludChjb25z
dCBSZW5kZXJPYmplY3QmIG8sIENvbnRyb2xTdGF0ZXMqIGNvbnRyb2xTdGF0ZXMsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIC8vIElmIHBhaW50
aW5nIGlzIGRpc2FibGVkLCBidXQgd2UgYXJlbid0IHVwZGF0aW5nIGNvbnRyb2wgdGludHMsIHRo
ZW4ganVzdCBiYWlsLgogICAgIC8vIElmIHdlIGFyZSB1cGRhdGluZyBjb250cm9sIHRpbnRzLCBq
dXN0IHNjaGVkdWxlIGEgcmVwYWludCBpZiB0aGUgdGhlbWUgc3VwcG9ydHMgdGludGluZwogICAg
IC8vIGZvciB0aGF0IGNvbnRyb2wuCiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT51cGRhdGlu
Z0NvbnRyb2xUaW50cygpKSB7CiAgICAgICAgIGlmIChjb250cm9sU3VwcG9ydHNUaW50cyhvKSkK
LSAgICAgICAgICAgIG8tPnJlcGFpbnQoKTsKKyAgICAgICAgICAgIG8ucmVwYWludCgpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDb250cm9sUGFy
dCBwYXJ0ID0gby0+c3R5bGUoKS5hcHBlYXJhbmNlKCk7CisgICAgQ29udHJvbFBhcnQgcGFydCA9
IG8uc3R5bGUoKS5hcHBlYXJhbmNlKCk7CiAKICNpZiBVU0UoTkVXX1RIRU1FKQogICAgIHN3aXRj
aCAocGFydCkgewpAQCAtMjg4LDcgKzI4OCw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnBhaW50KFJl
bmRlck9iamVjdCogbywgQ29udHJvbFN0YXRlcyogY29udHJvbFN0YXRlcywgY29uc3QgUGFpCiAg
ICAgY2FzZSBCdXR0b25QYXJ0OgogICAgIGNhc2UgSW5uZXJTcGluQnV0dG9uUGFydDoKICAgICAg
ICAgdXBkYXRlQ29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKG8sIGNvbnRyb2xTdGF0ZXMpOwotICAg
ICAgICBtX3RoZW1lLT5wYWludChwYXJ0LCBjb250cm9sU3RhdGVzLCBjb25zdF9jYXN0PEdyYXBo
aWNzQ29udGV4dCo+KHBhaW50SW5mby5jb250ZXh0KSwgciwgby0+c3R5bGUoKS5lZmZlY3RpdmVa
b29tKCksICZvLT52aWV3KCkuZnJhbWVWaWV3KCkpOworICAgICAgICBtX3RoZW1lLT5wYWludChw
YXJ0LCBjb250cm9sU3RhdGVzLCBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dCo+KHBhaW50SW5m
by5jb250ZXh0KSwgciwgby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSwgJm8udmlldygpLmZyYW1l
VmlldygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJy
ZWFrOwpAQCAtNDA1LDE3ICs0MDUsMTcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnQoUmVuZGVy
T2JqZWN0KiBvLCBDb250cm9sU3RhdGVzKiBjb250cm9sU3RhdGVzLCBjb25zdCBQYWkKICAgICBy
ZXR1cm4gdHJ1ZTsgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aGUgYXBwZWFyYW5jZSwgc28gbGV0IHRo
ZSBub3JtYWwgYmFja2dyb3VuZC9ib3JkZXIgcGFpbnQuCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6
OnBhaW50Qm9yZGVyT25seShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRCb3JkZXJPbmx5
KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIFBMQVRGT1JNKElPUykKICAgICBV
TlVTRURfUEFSQU0ocik7Ci0gICAgcmV0dXJuIG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpICE9IE5v
Q29udHJvbFBhcnQ7CisgICAgcmV0dXJuIG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgIT0gTm9Db250
cm9sUGFydDsKICNlbHNlCiAgICAgLy8gQ2FsbCB0aGUgYXBwcm9wcmlhdGUgcGFpbnQgbWV0aG9k
IGJhc2VkIG9mZiB0aGUgYXBwZWFyYW5jZSB2YWx1ZS4KLSAgICBzd2l0Y2ggKG8tPnN0eWxlKCku
YXBwZWFyYW5jZSgpKSB7CisgICAgc3dpdGNoIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpKSB7CiAg
ICAgY2FzZSBUZXh0RmllbGRQYXJ0OgogICAgICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywg
cGFpbnRJbmZvLCByKTsKICAgICBjYXNlIExpc3Rib3hQYXJ0OgpAQCAtNDYzLDEzICs0NjMsMTMg
QEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRCb3JkZXJPbmx5KFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGMKICNlbmRpZgogfQogCi1ib29sIFJlbmRlclRoZW1l
OjpwYWludERlY29yYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZTo6cGFp
bnREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRJbmZv
LmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gQ2FsbCB0aGUgYXBwcm9wcmlhdGUgcGFpbnQgbWV0aG9kIGJhc2VkIG9mZiB0aGUgYXBw
ZWFyYW5jZSB2YWx1ZS4KLSAgICBzd2l0Y2ggKHJlbmRlcmVyLT5zdHlsZSgpLmFwcGVhcmFuY2Uo
KSkgeworICAgIHN3aXRjaCAocmVuZGVyZXIuc3R5bGUoKS5hcHBlYXJhbmNlKCkpIHsKICAgICBj
YXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKICAgICAgICAgcmV0dXJuIHBhaW50TWVudUxpc3RCdXR0
b25EZWNvcmF0aW9ucyhyZW5kZXJlciwgcGFpbnRJbmZvLCByZWN0KTsKICAgICBjYXNlIFRleHRG
aWVsZFBhcnQ6CkBAIC02NjYsMTcgKzY2NiwxNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZv
cm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAogICAgIHJl
dHVybiBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7CiB9CiAKLWlu
dCBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNv
bnN0CitpbnQgUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0
JiBvKSBjb25zdAogewotICAgIGlmICghby0+aXNCb3goKSkKKyAgICBpZiAoIW8uaXNCb3goKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVy
Qm94KG8pOworICAgIGNvbnN0IFJlbmRlckJveCYgYm94ID0gKnRvUmVuZGVyQm94KCZvKTsKIAog
I2lmIFVTRShORVdfVEhFTUUpCi0gICAgcmV0dXJuIGJveC0+aGVpZ2h0KCkgKyBib3gtPm1hcmdp
blRvcCgpICsgbV90aGVtZS0+YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQoby0+c3R5bGUoKS5h
cHBlYXJhbmNlKCkpICogby0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgcmV0dXJuIGJv
eC5oZWlnaHQoKSArIGJveC5tYXJnaW5Ub3AoKSArIG1fdGhlbWUtPmJhc2VsaW5lUG9zaXRpb25B
ZGp1c3RtZW50KG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkpICogby5zdHlsZSgpLmVmZmVjdGl2ZVpv
b20oKTsKICNlbHNlCi0gICAgcmV0dXJuIGJveC0+aGVpZ2h0KCkgKyBib3gtPm1hcmdpblRvcCgp
OworICAgIHJldHVybiBib3guaGVpZ2h0KCkgKyBib3gubWFyZ2luVG9wKCk7CiAjZW5kaWYKIH0K
IApAQCAtNzE0LDExICs3MTQsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVk
KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm8KICAgICB9CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVj
dCogbywgSW50UmVjdCYgcikKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0KGNv
bnN0IFJlbmRlck9iamVjdCYgbywgSW50UmVjdCYgcikKIHsKICNpZiBVU0UoTkVXX1RIRU1FKQog
ICAgIENvbnRyb2xTdGF0ZXMgc3RhdGVzKGV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIo
bykpOwotICAgIG1fdGhlbWUtPmluZmxhdGVDb250cm9sUGFpbnRSZWN0KG8tPnN0eWxlKCkuYXBw
ZWFyYW5jZSgpLCAmc3RhdGVzLCByLCBvLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CisgICAg
bV90aGVtZS0+aW5mbGF0ZUNvbnRyb2xQYWludFJlY3Qoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSwg
JnN0YXRlcywgciwgby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAjZWxzZQogICAgIFVOVVNF
RF9QQVJBTShvKTsKICAgICBVTlVTRURfUEFSQU0ocik7CkBAIC03MzAsMTAgKzczMCwxMCBAQCBi
b29sIFJlbmRlclRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0CiAgICAgcmV0dXJuIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpICYmIHN0eWxlLT5h
cHBlYXJhbmNlKCkgIT0gVGV4dEZpZWxkUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IFRl
eHRBcmVhUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IE1lbnVsaXN0QnV0dG9uUGFydCAm
JiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IExpc3Rib3hQYXJ0KTsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZTo6c3RhdGVDaGFuZ2VkKFJlbmRlck9iamVjdCogbywgQ29udHJvbFN0YXRlczo6U3RhdGVz
IHN0YXRlKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgQ29udHJvbFN0YXRlczo6U3RhdGVzIHN0YXRlKSBjb25zdAogewogICAgIC8v
IERlZmF1bHQgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGUgY29udHJvbHMgZG9uJ3QgcmVzcG9u
ZCB0byBjaGFuZ2VzIGluIDpob3ZlciBzdGF0ZQotICAgIGlmIChzdGF0ZSA9PSBDb250cm9sU3Rh
dGVzOjpIb3ZlclN0YXRlICYmICFzdXBwb3J0c0hvdmVyKCZvLT5zdHlsZSgpKSkKKyAgICBpZiAo
c3RhdGUgPT0gQ29udHJvbFN0YXRlczo6SG92ZXJTdGF0ZSAmJiAhc3VwcG9ydHNIb3Zlcigmby5z
dHlsZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQXNzdW1lIHByZXNzZWQg
c3RhdGUgaXMgb25seSByZXNwb25kZWQgdG8gaWYgdGhlIGNvbnRyb2wgaXMgZW5hYmxlZC4KQEAg
LTc0MSwxNyArNzQxLDE3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnN0YXRlQ2hhbmdlZChSZW5kZXJP
YmplY3QqIG8sIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBzdGF0ZSkgY29uCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIC8vIFJlcGFpbnQgdGhlIGNvbnRyb2wuCi0gICAgby0+cmVwYWludCgp
OworICAgIG8ucmVwYWludCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lOjp1cGRhdGVDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBv
LCBDb250cm9sU3RhdGVzKiBjb250cm9sU3RhdGVzKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6
dXBkYXRlQ29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCYgbywgQ29u
dHJvbFN0YXRlcyogY29udHJvbFN0YXRlcykgY29uc3QKIHsKICAgICBDb250cm9sU3RhdGVzIG5l
d1N0YXRlcyA9IGV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIobyk7CiAgICAgY29udHJv
bFN0YXRlcy0+c2V0U3RhdGVzKG5ld1N0YXRlcy5zdGF0ZXMoKSk7CiB9CiAKLUNvbnRyb2xTdGF0
ZXM6OlN0YXRlcyBSZW5kZXJUaGVtZTo6ZXh0cmFjdENvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihj
b25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CitDb250cm9sU3RhdGVzOjpTdGF0ZXMgUmVuZGVy
VGhlbWU6OmV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0
JiBvKSBjb25zdAogewogICAgIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBzdGF0ZXMgPSAwOwogICAg
IGlmIChpc0hvdmVyZWQobykpIHsKQEAgLTc2NCw3ICs3NjQsNyBAQCBDb250cm9sU3RhdGVzOjpT
dGF0ZXMgUmVuZGVyVGhlbWU6OmV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3Qg
UmVuZGVyTwogICAgICAgICBpZiAoaXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChvKSkKICAgICAg
ICAgICAgIHN0YXRlcyB8PSBDb250cm9sU3RhdGVzOjpTcGluVXBTdGF0ZTsKICAgICB9Ci0gICAg
aWYgKGlzRm9jdXNlZChvKSAmJiBvLT5zdHlsZSgpLm91dGxpbmVTdHlsZUlzQXV0bygpKQorICAg
IGlmIChpc0ZvY3VzZWQobykgJiYgby5zdHlsZSgpLm91dGxpbmVTdHlsZUlzQXV0bygpKQogICAg
ICAgICBzdGF0ZXMgfD0gQ29udHJvbFN0YXRlczo6Rm9jdXNTdGF0ZTsKICAgICBpZiAoaXNFbmFi
bGVkKG8pKQogICAgICAgICBzdGF0ZXMgfD0gQ29udHJvbFN0YXRlczo6RW5hYmxlZFN0YXRlOwpA
QCAtNzgxLDkgKzc4MSw5IEBAIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBSZW5kZXJUaGVtZTo6ZXh0
cmFjdENvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPCiAgICAgcmV0dXJuIHN0
YXRlczsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNBY3RpdmUoY29uc3QgUmVuZGVyT2JqZWN0
KiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6aXNBY3RpdmUoY29uc3QgUmVuZGVyT2JqZWN0
JiBvKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbm9k
ZSA9IG8ubm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC03OTgsNDEgKzc5OCw0MSBAQCBib29sIFJlbmRlclRoZW1lOjppc0FjdGl2ZShjb25zdCBSZW5k
ZXJPYmplY3QqIG8pIGNvbnN0CiAgICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmlz
QWN0aXZlKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzQ2hlY2tlZChjb25zdCBSZW5kZXJP
YmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc0NoZWNrZWQoY29uc3QgUmVuZGVy
T2JqZWN0JiBvKSBjb25zdAogewotICAgIGlmICghby0+bm9kZSgpKQorICAgIGlmICghby5ub2Rl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
RWxlbWVudCA9IG8tPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dEVsZW1lbnQgPSBvLm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICBpZiAo
IWlucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGlucHV0
RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjpp
c0luZGV0ZXJtaW5hdGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAorYm9vbCBSZW5kZXJU
aGVtZTo6aXNJbmRldGVybWluYXRlKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKIHsKLSAg
ICBpZiAoIW8tPm5vZGUoKSkKKyAgICBpZiAoIW8ubm9kZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBvLT5ub2RlKCktPnRv
SW5wdXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gby5u
b2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKCFpbnB1dEVsZW1lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhcklu
ZGV0ZXJtaW5hdGUoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNFbmFibGVkKGNvbnN0IFJl
bmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzRW5hYmxlZChjb25zdCBS
ZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAg
ICBOb2RlKiBub2RlID0gby5ub2RlKCk7CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1l
bnROb2RlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiAhdG9FbGVtZW50KG5v
ZGUpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNG
b2N1c2VkKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6Omlz
Rm9jdXNlZChjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9
IG8tPm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gby5ub2RlKCk7CiAgICAgaWYgKCFub2RlIHx8
ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtODQy
LDE2ICs4NDIsMTYgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKGNvbnN0IFJlbmRlck9i
amVjdCogbykgY29uc3QKICAgICByZXR1cm4gZm9jdXNEZWxlZ2F0ZSA9PSBkb2N1bWVudC5mb2N1
c2VkRWxlbWVudCgpICYmIGZyYW1lICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRB
Y3RpdmUoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNQcmVzc2VkKGNvbnN0IFJlbmRlck9i
amVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzUHJlc3NlZChjb25zdCBSZW5kZXJP
YmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgaWYgKCFvLT5ub2RlKCkgfHwgIW8tPm5vZGUoKS0+aXNF
bGVtZW50Tm9kZSgpKQorICAgIGlmICghby5ub2RlKCkgfHwgIW8ubm9kZSgpLT5pc0VsZW1lbnRO
b2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdG9FbGVtZW50KG8tPm5v
ZGUoKSktPmFjdGl2ZSgpOworICAgIHJldHVybiB0b0VsZW1lbnQoby5ub2RlKCkpLT5hY3RpdmUo
KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChjb25z
dCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc1NwaW5VcEJ1dHRv
blBhcnRQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKIHsKLSAgICBOb2RlKiBu
b2RlID0gby0+bm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsKICAgICBpZiAoIW5v
ZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CkBAIC04NjAsMTcgKzg2MCwxNyBA
QCBib29sIFJlbmRlclRoZW1lOjppc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKGNvbnN0IFJlbmRl
ck9iamVjdCogbykgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3BpbkJ1dHRvbkVsZW1l
bnQqPihlbGVtZW50KS0+dXBEb3duU3RhdGUoKSA9PSBTcGluQnV0dG9uRWxlbWVudDo6VXA7CiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzUmVhZE9ubHlDb250cm9sKGNvbnN0IFJlbmRlck9iamVj
dCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzUmVhZE9ubHlDb250cm9sKGNvbnN0IFJl
bmRlck9iamVjdCYgbykgY29uc3QKIHsKLSAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAg
IE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVu
dE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0b0VsZW1lbnQobm9k
ZSktPm1hdGNoZXNSZWFkT25seVBzZXVkb0NsYXNzKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6
OmlzSG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1l
Ojppc0hvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIE5vZGUqIG5v
ZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IG8ubm9kZSgpOwogICAgIGlmICghbm9k
ZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKCF0b0VsZW1lbnQobm9kZSktPmlzU3BpbkJ1dHRvbkVsZW1lbnQoKSkKQEAgLTg3OSwyNSAr
ODc5LDI1IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzSG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3Qq
IG8pIGNvbnN0CiAgICAgcmV0dXJuIGVsZW1lbnQtPmhvdmVyZWQoKSAmJiBlbGVtZW50LT51cERv
d25TdGF0ZSgpICE9IFNwaW5CdXR0b25FbGVtZW50OjpJbmRldGVybWluYXRlOwogfQogCi1ib29s
IFJlbmRlclRoZW1lOjppc1NwaW5VcEJ1dHRvblBhcnRIb3ZlcmVkKGNvbnN0IFJlbmRlck9iamVj
dCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQo
Y29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2Rl
KCk7CisgICAgTm9kZSogbm9kZSA9IG8ubm9kZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+
aXNFbGVtZW50Tm9kZSgpIHx8ICF0b0VsZW1lbnQobm9kZSktPmlzU3BpbkJ1dHRvbkVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFNwaW5CdXR0b25FbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U3BpbkJ1dHRvbkVsZW1lbnQqPihub2RlKTsKICAgICByZXR1cm4gZWxl
bWVudC0+dXBEb3duU3RhdGUoKSA9PSBTcGluQnV0dG9uRWxlbWVudDo6VXA7CiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWU6OmlzRGVmYXVsdChjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29s
IFJlbmRlclRoZW1lOjppc0RlZmF1bHQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewog
ICAgIC8vIEEgYnV0dG9uIHNob3VsZCBvbmx5IGhhdmUgdGhlIGRlZmF1bHQgYXBwZWFyYW5jZSBp
ZiB0aGUgcGFnZSBpcyBhY3RpdmUKICAgICBpZiAoIWlzQWN0aXZlKG8pKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoIW8tPmZyYW1lKCkuc2V0dGluZ3MoKS5hcHBsaWNhdGlvbkNo
cm9tZU1vZGUoKSkKKyAgICBpZiAoIW8uZnJhbWUoKS5zZXR0aW5ncygpLmFwcGxpY2F0aW9uQ2hy
b21lTW9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIG8tPnN0
eWxlKCkuYXBwZWFyYW5jZSgpID09IERlZmF1bHRCdXR0b25QYXJ0OworICAgIHJldHVybiBvLnN0
eWxlKCkuYXBwZWFyYW5jZSgpID09IERlZmF1bHRCdXR0b25QYXJ0OwogfQogCiAjaWYgIVVTRShO
RVdfVEhFTUUpCkBAIC05NjcsNyArOTY3LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0SW5w
dXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIKICAg
ICBSZW5kZXJJbnB1dFNwZWVjaDo6YWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKHN0
eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6cGFp
bnRJbnB1dEZpZWxkU3BlZWNoQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWU6
OnBhaW50SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAg
cmV0dXJuIFJlbmRlcklucHV0U3BlZWNoOjpwYWludElucHV0RmllbGRTcGVlY2hCdXR0b24ob2Jq
ZWN0LCBwYWludEluZm8sIHJlY3QpOwogfQpAQCAtOTg5LDcgKzk4OSw3IEBAIGJvb2wgUmVuZGVy
VGhlbWU6OnN1cHBvcnRzTWV0ZXIoQ29udHJvbFBhcnQpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIFJlbmRlclRoZW1lOjpwYWludE1ldGVyKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQorYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRNZXRl
cihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikK
IHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwMDIsOSArMTAwMiw5IEBAIExheW91dFVuaXQg
UmVuZGVyVGhlbWU6OnNsaWRlclRpY2tTbmFwcGluZ1RocmVzaG9sZCgpIGNvbnN0CiAgICAgcmV0
dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3MoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3ZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3MoY29uc3QgUmVuZGVyT2JqZWN0JiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAg
ICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsKICAg
ICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTAxOCwxNCArMTAxOCwxNCBAQCB2
b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sCiAKICAgICBkb3VibGUgbWluID0gaW5wdXQtPm1pbmltdW0o
KTsKICAgICBkb3VibGUgbWF4ID0gaW5wdXQtPm1heGltdW0oKTsKLSAgICBDb250cm9sUGFydCBw
YXJ0ID0gby0+c3R5bGUoKS5hcHBlYXJhbmNlKCk7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IG8u
c3R5bGUoKS5hcHBlYXJhbmNlKCk7CiAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aWNrcyBvbiBh
bHRlcm5hdGUgc2xpZGVycyBsaWtlIE1lZGlhVm9sdW1lU2xpZGVycy4KICAgICBpZiAocGFydCAh
PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJWZXJ0aWNhbFBhcnQpCiAg
ICAgICAgIHJldHVybjsKICAgICBib29sIGlzSG9yaXpvbnRhbCA9IHBhcnQgPT0gIFNsaWRlckhv
cml6b250YWxQYXJ0OwogCiAgICAgSW50U2l6ZSB0aHVtYlNpemU7Ci0gICAgUmVuZGVyT2JqZWN0
KiB0aHVtYlJlbmRlcmVyID0gaW5wdXQtPnNsaWRlclRodW1iRWxlbWVudCgpLT5yZW5kZXJlcigp
OworICAgIGNvbnN0IFJlbmRlck9iamVjdCogdGh1bWJSZW5kZXJlciA9IGlucHV0LT5zbGlkZXJU
aHVtYkVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAodGh1bWJSZW5kZXJlcikgewogICAg
ICAgICBjb25zdCBSZW5kZXJTdHlsZSYgdGh1bWJTdHlsZSA9IHRodW1iUmVuZGVyZXItPnN0eWxl
KCk7CiAgICAgICAgIGludCB0aHVtYldpZHRoID0gdGh1bWJTdHlsZS53aWR0aCgpLmludFZhbHVl
KCk7CkBAIC0xMDM1LDcgKzEwMzUsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRp
Y2tzKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sCiAgICAgfQog
CiAgICAgSW50U2l6ZSB0aWNrU2l6ZSA9IHNsaWRlclRpY2tTaXplKCk7Ci0gICAgZmxvYXQgem9v
bUZhY3RvciA9IG8tPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21GYWN0
b3IgPSBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwogICAgIEZsb2F0UmVjdCB0aWNrUmVjdDsK
ICAgICBpbnQgdGlja1JlZ2lvblNpZGVNYXJnaW4gPSAwOwogICAgIGludCB0aWNrUmVnaW9uV2lk
dGggPSAwOwpAQCAtMTA0NCw3ICsxMDQ0LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6cGFpbnRTbGlk
ZXJUaWNrcyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLAogICAg
IC8vIFdlIGNhbiBpZ25vcmluZyB0cmFuc2Zvcm1zIGJlY2F1c2UgdHJhbnNmb3JtIGlzIGhhbmRs
ZWQgYnkgdGhlIGdyYXBoaWNzIGNvbnRleHQuCiAgICAgaWYgKHRyYWNrUmVuZGVyZXIpCiAgICAg
ICAgIHRyYWNrQm91bmRzID0gdHJhY2tSZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJ
Z25vcmluZ1RyYW5zZm9ybXMoKTsKLSAgICBJbnRSZWN0IHNsaWRlckJvdW5kcyA9IG8tPmFic29s
dXRlQm91bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCk7CisgICAgSW50UmVjdCBzbGlk
ZXJCb3VuZHMgPSBvLmFic29sdXRlQm91bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCk7
CiAKICAgICAvLyBNYWtlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSB0cmFuc2Zvcm1lZCBhbmNl
c3RvciBlbGVtZW50LgogICAgIHRyYWNrQm91bmRzLnNldFgodHJhY2tCb3VuZHMueCgpIC0gc2xp
ZGVyQm91bmRzLngoKSArIHJlY3QueCgpKTsKQEAgLTEwNjUsNyArMTA2NSw3IEBAIHZvaWQgUmVu
ZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3MoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywKICAgICB9CiAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBvcHRpb25z
ID0gZGF0YUxpc3QtPm9wdGlvbnMoKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0
RmlsbENvbG9yKG8tPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29s
b3IpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+c2V0Rmls
bENvbG9yKG8uc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciks
IENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IE5vZGUqIG5v
ZGUgPSBvcHRpb25zLT5pdGVtKGkpOyBpKyspIHsKICAgICAgICAgQVNTRVJUKGlzSFRNTE9wdGlv
bkVsZW1lbnQobm9kZSkpOwogICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVu
dCA9IHRvSFRNTE9wdGlvbkVsZW1lbnQobm9kZSk7CkBAIC0xMDc0LDcgKzEwNzQsNyBAQCB2b2lk
IFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZG91Ymxl
IHBhcnNlZFZhbHVlID0gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoaW5wdXQtPnNhbml0aXpl
VmFsdWUodmFsdWUpKTsKICAgICAgICAgZG91YmxlIHRpY2tGcmFjdGlvbiA9IChwYXJzZWRWYWx1
ZSAtIG1pbikgLyAobWF4IC0gbWluKTsKLSAgICAgICAgZG91YmxlIHRpY2tSYXRpbyA9IGlzSG9y
aXpvbnRhbCAmJiBvLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHRpY2tGcmFj
dGlvbiA6IDEuMCAtIHRpY2tGcmFjdGlvbjsKKyAgICAgICAgZG91YmxlIHRpY2tSYXRpbyA9IGlz
SG9yaXpvbnRhbCAmJiBvLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gdGlja0Zy
YWN0aW9uIDogMS4wIC0gdGlja0ZyYWN0aW9uOwogICAgICAgICBkb3VibGUgdGlja1Bvc2l0aW9u
ID0gcm91bmQodGlja1JlZ2lvblNpZGVNYXJnaW4gKyB0aWNrUmVnaW9uV2lkdGggKiB0aWNrUmF0
aW8pOwogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQogICAgICAgICAgICAgdGlja1JlY3Quc2V0
WCh0aWNrUG9zaXRpb24pOwpAQCAtMTEwMCw3ICsxMTAwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikKIHsKIH0KIAotSW50UmVjdCBSZW5kZXJUaGVtZTo6cHJvZ3Jlc3NCYXJSZWN0Rm9yQm91
bmRzKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmIGJvdW5kcykgY29uc3QKK0lu
dFJlY3QgUmVuZGVyVGhlbWU6OnByb2dyZXNzQmFyUmVjdEZvckJvdW5kcyhjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGJvdW5k
czsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKaW5kZXggOWJkODBlOThj
MWEzYjQxNDA4Yzg3ZTMwNmFlNTBlYWQyZGVjYjM5OS4uYzdkZTJkNTM2YmI5ZWI1NTU2YTI0ZmUx
MTI5ZjZkYzQ0ODI3NmU0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgK
QEAgLTc5LDkgKzc5LDkgQEAgcHVibGljOgogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0
byBwYWludCB0aGUgd2lkZ2V0IGFzIGEgYmFja2dyb3VuZCBvZiB0aGUgUmVuZGVyT2JqZWN0LiAg
QSB3aWRnZXQncyBmb3JlZ3JvdW5kLCBlLmcuLCB0aGUKICAgICAvLyB0ZXh0IG9mIGEgYnV0dG9u
LCBpcyBhbHdheXMgcmVuZGVyZWQgYnkgdGhlIGVuZ2luZSBpdHNlbGYuICBUaGUgYm9vbGVhbiBy
ZXR1cm4gdmFsdWUgaW5kaWNhdGVzCiAgICAgLy8gd2hldGhlciB0aGUgQ1NTIGJvcmRlci9iYWNr
Z3JvdW5kIHNob3VsZCBhbHNvIGJlIHBhaW50ZWQuCi0gICAgYm9vbCBwYWludChSZW5kZXJPYmpl
Y3QqLCBDb250cm9sU3RhdGVzKiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwot
ICAgIGJvb2wgcGFpbnRCb3JkZXJPbmx5KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKLSAgICBib29sIHBhaW50RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIGJvb2wgcGFpbnQoY29u
c3QgUmVuZGVyT2JqZWN0JiwgQ29udHJvbFN0YXRlcyosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICBib29sIHBhaW50Qm9yZGVyT25seShjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgYm9vbCBwYWludERlY29y
YXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKIAogICAgIC8vIFRoZSByZW1haW5pbmcgbWV0aG9kcyBzaG91bGQgYmUgaW1wbGVtZW50
ZWQgYnkgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHBvcnRpb24gb2YgdGhlIHRoZW1lLCBlLmcuLAog
ICAgIC8vIFJlbmRlclRoZW1lTWFjLmNwcCBmb3IgTWFjIE9TIFguCkBAIC0xMDYsMTQgKzEwNiwx
NCBAQCBwdWJsaWM6CiAgICAgLy8gQSBtZXRob2QgdG8gb2J0YWluIHRoZSBiYXNlbGluZSBwb3Np
dGlvbiBmb3IgYSAibGVhZiIgY29udHJvbC4gIFRoaXMgd2lsbCBvbmx5IGJlIHVzZWQgaWYgYSBi
YXNlbGluZQogICAgIC8vIHBvc2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmlu
ZyBjaGlsZCBjb250ZW50LiBDaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBleGFtcGxl
cyBvZgogICAgIC8vIGNvbnRyb2xzIHRoYXQgbmVlZCB0byBkbyB0aGlzLgotICAgIHZpcnR1YWwg
aW50IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisgICAgdmly
dHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKIAog
ICAgIC8vIEEgbWV0aG9kIGZvciBhc2tpbmcgaWYgYSBjb250cm9sIGlzIGEgY29udGFpbmVyIG9y
IG5vdC4gIExlYWYgY29udHJvbHMgaGF2ZSB0byBoYXZlIHNvbWUgc3BlY2lhbCBiZWhhdmlvciAo
bGlrZQogICAgIC8vIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBBUEkgYWJvdmUpLgogICAgIGJvb2wg
aXNDb250cm9sQ29udGFpbmVyKENvbnRyb2xQYXJ0KSBjb25zdDsKIAogICAgIC8vIEEgbWV0aG9k
IGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBo
YXMgZm9jdXMgb3Igbm90LgotICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhj
b25zdCBSZW5kZXJPYmplY3QqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCiAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIGNvbnRyb2wgaGFzIGJl
ZW4gc3R5bGVkIGVub3VnaCBieSB0aGUgYXV0aG9yIHRvIGRpc2FibGUgdGhlIG5hdGl2ZSBhcHBl
YXJhbmNlLgogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5
bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJh
Y2tncm91bmRDb2xvcikgY29uc3Q7CkBAIC0xMjMsMTEgKzEyMywxMSBAQCBwdWJsaWM6CiAKICAg
ICAvLyBTb21lIGNvbnRyb2xzIG1heSBzcGlsbCBvdXQgb2YgdGhlaXIgY29udGFpbmVycyAoZS5n
LiwgdGhlIGNoZWNrIG9uIGFuIE9TIFggY2hlY2tib3gpLiAgV2hlbiB0aGVzZSBjb250cm9scyBy
ZXBhaW50LAogICAgIC8vIHRoZSB0aGVtZSBuZWVkcyB0byBjb21tdW5pY2F0ZSB0aGlzIGluZmxh
dGVkIHJlY3QgdG8gdGhlIGVuZ2luZSBzbyB0aGF0IGl0IGNhbiBpbnZhbGlkYXRlIHRoZSB3aG9s
ZSBjb250cm9sLgotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5k
ZXJPYmplY3QqLCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0
KGNvbnN0IFJlbmRlck9iamVjdCYsIEludFJlY3QmKTsKIAogICAgIC8vIFRoaXMgbWV0aG9kIGlz
IGNhbGxlZCB3aGVuZXZlciBhIHJlbGV2YW50IHN0YXRlIGNoYW5nZXMgb24gYSBwYXJ0aWN1bGFy
IHRoZW1lZCBvYmplY3QsIGUuZy4sIHRoZSBtb3VzZSBiZWNvbWVzIHByZXNzZWQKICAgICAvLyBv
ciBhIGNvbnRyb2wgYmVjb21lcyBkaXNhYmxlZC4KLSAgICB2aXJ0dWFsIGJvb2wgc3RhdGVDaGFu
Z2VkKFJlbmRlck9iamVjdCosIENvbnRyb2xTdGF0ZXM6OlN0YXRlcykgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHN0YXRlQ2hhbmdlZChjb25zdCBSZW5kZXJPYmplY3QmLCBDb250cm9sU3RhdGVz
OjpTdGF0ZXMpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVy
IHRoZSB0aGVtZSBjaGFuZ2VzIG9uIHRoZSBzeXN0ZW0gaW4gb3JkZXIgdG8gZmx1c2ggY2FjaGVk
IHJlc291cmNlcyBmcm9tIHRoZQogICAgIC8vIG9sZCB0aGVtZS4KQEAgLTE4OCwxNCArMTg4LDE0
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNjcm9sbGJhckNv
bnRyb2xTaXplRm9yUGFydChDb250cm9sUGFydCkgeyByZXR1cm4gUmVndWxhclNjcm9sbGJhcjsg
fQogCiAgICAgLy8gTWV0aG9kIGZvciBwYWludGluZyB0aGUgY2FwcyBsb2NrIGluZGljYXRvcgot
ICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiAwOyB9OworICAgIHZpcnR1
YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiAwOyB9OwogCiAjaWYgRU5BQkxF
KFBST0dSRVNTX0VMRU1FTlQpCiAgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9m
IHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCiAgICAgdmlydHVhbCBkb3VibGUg
YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNv
bnN0OwogICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRo
ZSBwcm9ncmVzcyBiYXIuCiAgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQ
cm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UmVjdCBw
cm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVj
dCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCBwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoVklERU8pCkBAIC0yMjgsNyArMjI4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
SW50U2l6ZSBzbGlkZXJUaWNrU2l6ZSgpIGNvbnN0ID0gMDsKICAgICAvLyBSZXR1cm5zIHRoZSBk
aXN0YW5jZSBvZiBzbGlkZXIgdGljayBvcmlnaW4gZnJvbSB0aGUgc2xpZGVyIHRyYWNrIGNlbnRl
ci4KICAgICB2aXJ0dWFsIGludCBzbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2VudGVyKCkgY29u
c3QgPSAwOwotICAgIHZvaWQgcGFpbnRTbGlkZXJUaWNrcyhSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBwYWludFNsaWRlclRpY2tzKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICNl
bmRpZgogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFNob3dQbGFjZWhvbGRlcldoZW5Gb2N1c2Vk
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI0MywxMCArMjQzLDEwIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCos
IGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0
OwogCiAgICAgZW51bSBGaWxlVXBsb2FkRGVjb3JhdGlvbnMgeyBTaW5nbGVGaWxlLCBNdWx0aXBs
ZUZpbGVzIH07Ci0gICAgdmlydHVhbCBib29sIHBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9u
cyhSZW5kZXJPYmplY3QqIC8qaW5wdXRSZW5kZXJlciovLCBSZW5kZXJPYmplY3QqIC8qYnV0dG9u
UmVuZGVyZXIqLywgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYsIEljb24qLCBGaWxl
VXBsb2FkRGVjb3JhdGlvbnMpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRGaWxlVXBsb2FkSWNvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgLyppbnB1dFJl
bmRlcmVyKi8sIGNvbnN0IFJlbmRlck9iamVjdCYgLypidXR0b25SZW5kZXJlciovLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JiwgSWNvbiosIEZpbGVVcGxvYWREZWNvcmF0aW9ucykg
eyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgRU5BQkxFKElNQUdFX0NPTlRST0xTKQotICAgIHZpcnR1
YWwgSW50U2l6ZSBpbWFnZUNvbnRyb2xzQnV0dG9uU2l6ZShjb25zdCBSZW5kZXJPYmplY3QqKSBj
b25zdCB7IHJldHVybiBJbnRTaXplKCk7IH0KKyAgICB2aXJ0dWFsIEludFNpemUgaW1hZ2VDb250
cm9sc0J1dHRvblNpemUoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3QgeyByZXR1cm4gSW50U2l6
ZSgpOyB9CiAjZW5kaWYKIAogcHJvdGVjdGVkOgpAQCAtMjY3LDEyMiArMjY3LDEyMiBAQCBwcm90
ZWN0ZWQ6CiAjaWYgIVVTRShORVdfVEhFTUUpCiAgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBl
YXJhbmNlIHZhbHVlLgogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJT
dHlsZSopIGNvbnN0IHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikg
Y29uc3QgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBw
YWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKikgY29u
c3QgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWlu
dElubmVyU3BpbkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDaGVja2JveERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBh
aW50UmFkaW9EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRv
bkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3hEZWNv
cmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvRGVjb3Jh
dGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b25EZWNvcmF0
aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRUZXh0RmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFRl
eHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZERl
Y29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFy
ZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRUZXh0QXJlYURlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50
VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYURl
Y29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxp
c3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZW51TGlzdERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdERl
Y29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxp
c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFB1c2hCdXR0b25EZWNvcmF0aW9u
cyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNxdWFyZUJ1dHRvbkRlY29yYXRpb25z
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVy
biB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50U3F1YXJlQnV0dG9uRGVjb3JhdGlv
bnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IHsgcmV0dXJuIHRydWU7IH0KIAogI2lmIEVOQUJMRShNRVRFUl9FTEVNRU5UKQogICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBh
aW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludElucHV0RmllbGRT
cGVlY2hCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludElucHV0RmllbGRTcGVlY2hCdXR0b24oY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogI2VuZGlm
CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50
U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50
U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFNs
aWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1
bWJEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNl
YXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmly
dHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZp
ZWxkRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hG
aWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RNZWRpYUNvbnRyb2xTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxs
c2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFPdmVybGF5UGxheUJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFSZXdpbmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVJl
dHVyblRvUmVhbHRpbWVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFDb250cm9sc0JhY2tncm91bmQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFU
aW1lUmVtYWluaW5nKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsU2Ny
ZWVuVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCBib29s
IHBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFPdmVybGF5UGxheUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFSZXdpbmRCdXR0b24oY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24oY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVRvZ2dsZUNsb3NlZENhcHRpb25z
QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFDb250cm9s
c0JhY2tncm91bmQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUN1
cnJlbnRUaW1lKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFUaW1l
UmVtYWluaW5nKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxs
U2NyZWVuVm9sdW1lU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdmlydHVhbCBib29sIHBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVl
OyB9CiAKICNpZiBFTkFCTEUoSU1BR0VfQ09OVFJPTFMpCi0gICAgdmlydHVhbCBib29sIHBhaW50
SW1hZ2VDb250cm9sc0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludEltYWdl
Q29udHJvbHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCiBwdWJsaWM6Ci0gICAgdm9p
ZCB1cGRhdGVDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgQ29u
dHJvbFN0YXRlcyopIGNvbnN0OwotICAgIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBleHRyYWN0Q29u
dHJvbFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwotICAgIGJv
b2wgaXNBY3RpdmUoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc0NoZWNr
ZWQoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc0luZGV0ZXJtaW5hdGUo
Y29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc0VuYWJsZWQoY29uc3QgUmVu
ZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCBpc0ZvY3VzZWQoY29uc3QgUmVuZGVyT2JqZWN0
KikgY29uc3Q7Ci0gICAgYm9vbCBpc1ByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7
Ci0gICAgYm9vbCBpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCop
IGNvbnN0OwotICAgIGJvb2wgaXNIb3ZlcmVkKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0Owot
ICAgIGJvb2wgaXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3QqKSBj
b25zdDsKLSAgICBib29sIGlzUmVhZE9ubHlDb250cm9sKGNvbnN0IFJlbmRlck9iamVjdCopIGNv
bnN0OwotICAgIGJvb2wgaXNEZWZhdWx0KGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAg
IHZvaWQgdXBkYXRlQ29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCYs
IENvbnRyb2xTdGF0ZXMqKSBjb25zdDsKKyAgICBDb250cm9sU3RhdGVzOjpTdGF0ZXMgZXh0cmFj
dENvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKKyAg
ICBib29sIGlzQWN0aXZlKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wgaXND
aGVja2VkKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNJbmRldGVybWlu
YXRlKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNFbmFibGVkKGNvbnN0
IFJlbmRlck9iamVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNGb2N1c2VkKGNvbnN0IFJlbmRlck9i
amVjdCYpIGNvbnN0OworICAgIGJvb2wgaXNQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCYpIGNv
bnN0OworICAgIGJvb2wgaXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChjb25zdCBSZW5kZXJPYmpl
Y3QmKSBjb25zdDsKKyAgICBib29sIGlzSG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3QmKSBjb25z
dDsKKyAgICBib29sIGlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0
JikgY29uc3Q7CisgICAgYm9vbCBpc1JlYWRPbmx5Q29udHJvbChjb25zdCBSZW5kZXJPYmplY3Qm
KSBjb25zdDsKKyAgICBib29sIGlzRGVmYXVsdChjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsK
IAogcHJpdmF0ZToKICAgICBtdXRhYmxlIENvbG9yIG1fYWN0aXZlU2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
SU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAppbmRleCA1
YjlkODE1Yjg2MzM5M2VhYmNiNDdlYmNmYTJjZmUzZGI1YTllYTJhLi5mMzdmM2Y4YzM5ZmRjNTUy
OTg0MDkzMWVhMjZhYjZmNWY2ZjNhZWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVJT1MuaApAQCAtNDgsMzUgKzQ4LDM1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ0ZT
dHJpbmdSZWYgY29udGVudFNpemVDYXRlZ29yeSgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVh
bCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25z
dCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImIGJhY2tn
cm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZhbHVlLgogICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveERlY29y
YXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveERlY29yYXRpb25zKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlk
ZTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRSYWRpb0RlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpb0RlY29y
YXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBib29sIHBhaW50QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBw
YWludFB1c2hCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9u
RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFB1c2hCdXR0b25EZWNv
cmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5
bGUqKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludEZpbGVVcGxvYWRJ
Y29uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBSZW5kZXJPYmplY3Qq
IGJ1dHRvblJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JiwgSWNvbios
IEZpbGVVcGxvYWREZWNvcmF0aW9ucykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50
RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIGlucHV0UmVuZGVy
ZXIsIGNvbnN0IFJlbmRlck9iamVjdCYgYnV0dG9uUmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmLCBJY29uKiwgRmlsZVVwbG9hZERlY29yYXRpb25zKSBvdmVycmlkZTsK
IAotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZERlY29yYXRpb25zKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRUZXh0QXJlYURlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRUZXh0RmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4
dEFyZWFEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxp
c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0
aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3Zl
cnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRl
clRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUo
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29s
IHBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50U2xp
ZGVyVGh1bWJEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVO
VCkKICAgICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhlIGFuaW1hdGlvbiBm
b3IgdGhlIHByb2dyZXNzIGJhci4KQEAgLTg0LDcgKzg0LDcgQEAgcHJvdGVjdGVkOgogICAgIC8v
IFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBi
YXIuCiAgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihS
ZW5kZXJQcm9ncmVzcyopIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBib29sIHBhaW50
UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCkBAIC05Myw3ICs5Myw3IEBA
IHByb3RlY3RlZDoKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxk
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiAgICAg
dmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTE1LDcgKzExNSw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVJT1MoKSB7IH0KIAogICAgIGNvbnN0IENv
bG9yJiBzaGFkb3dDb2xvcigpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBhZGRSb3VuZGVkQm9yZGVy
Q2xpcChSZW5kZXJPYmplY3QqIGJveCwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYp
OworICAgIEZsb2F0UmVjdCBhZGRSb3VuZGVkQm9yZGVyQ2xpcChjb25zdCBSZW5kZXJPYmplY3Qm
IGJveCwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgU3RyaW5nIG1f
bWVkaWFDb250cm9sc1NjcmlwdDsKICAgICBTdHJpbmcgbV9tZWRpYUNvbnRyb2xzU3R5bGVTaGVl
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQppbmRleCAyNmYy
ZjU0MDY3N2U4MGM3NTMzMGJmZTljMzRkY2VlZjM0YjU3OTExLi5lOWVjMmJhMjljODYwZjFiZmE1
NTUzZTk2MjViNWZjMDFlZGM3ODEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tCkBAIC0zMTYsMTEgKzMxNiwxMSBAQCBjb25zdCBDb2xvciYgUmVuZGVyVGhl
bWVJT1M6OnNoYWRvd0NvbG9yKCkgY29uc3QKICAgICByZXR1cm4gY29sb3I7CiB9CiAKLUZsb2F0
UmVjdCBSZW5kZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJvcmRlckNsaXAoUmVuZGVyT2JqZWN0KiBi
b3gsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK0Zsb2F0
UmVjdCBSZW5kZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJvcmRlckNsaXAoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBib3gsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKICAgICAvLyBUbyBmaXggaW5uZXIgYm9yZGVyIGJsZWVkaW5nIGlzc3VlcyA8cmRhcjovL3By
b2JsZW0vOTgxMjUwNz4sIHdlIGNsaXAgdG8gdGhlIG91dGVyIGJvcmRlciBhbmQgYXNzZXJ0IHRo
YXQKICAgICAvLyB0aGUgYm9yZGVyIGlzIG9wYXF1ZSBvciB0cmFuc3BhcmVudCwgdW5sZXNzIHdl
J3JlIGNoZWNrZWQgYmVjYXVzZSBjaGVja2VkIHJhZGlvL2NoZWNrYm94ZXMgc2hvdyBubyBibGVl
ZGluZy4KLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnN0eWxlKCk7CisgICAgUmVuZGVy
U3R5bGUmIHN0eWxlID0gYm94LnN0eWxlKCk7CiAgICAgUm91bmRlZFJlY3QgYm9yZGVyID0gaXND
aGVja2VkKGJveCkgPyBzdHlsZS5nZXRSb3VuZGVkSW5uZXJCb3JkZXJGb3IocmVjdCkgOiBzdHls
ZS5nZXRSb3VuZGVkQm9yZGVyRm9yKHJlY3QpOwogCiAgICAgaWYgKGJvcmRlci5pc1JvdW5kZWQo
KSkKQEAgLTM1Nyw3ICszNTcsNyBAQCBzdGF0aWMgQ0dQb2ludCBzaG9ydGVuZWQoQ0dQb2ludCBz
dGFydCwgQ0dQb2ludCBlbmQsIGZsb2F0IHdpZHRoKQogICAgIHJldHVybiBDR1BvaW50TWFrZShz
dGFydC54ICsgeCAqIHJhdGlvLCBzdGFydC55ICsgeSAqIHJhdGlvKTsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveERlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVu
ZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3Qm
IGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29u
dGV4dCk7CiAgICAgRmxvYXRSZWN0IGNsaXAgPSBhZGRSb3VuZGVkQm9yZGVyQ2xpcChib3gsIHBh
aW50SW5mby5jb250ZXh0LCByZWN0KTsKQEAgLTQwOCwxNyArNDA4LDE3IEBAIGJvb2wgUmVuZGVy
VGhlbWVJT1M6OnBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29u
c3QgUGFpbnRJbmZvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbnQgUmVuZGVyVGhlbWVJT1M6
OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QKK2lu
dCBSZW5kZXJUaGVtZUlPUzo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlcmVyKSBjb25zdAogewotICAgIGlmICghcmVuZGVyZXItPmlzQm94KCkpCisgICAgaWYgKCFy
ZW5kZXJlci5pc0JveCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGNvbnN0IFJlbmRlckJv
eCogYm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOworICAgIGNvbnN0IFJlbmRlckJveCYgYm94
ID0gKnRvUmVuZGVyQm94KCZyZW5kZXJlcik7CiAKLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSBDaGVja2JveFBhcnQgfHwgYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBS
YWRpb1BhcnQpCi0gICAgICAgIHJldHVybiBib3gtPm1hcmdpblRvcCgpICsgYm94LT5oZWlnaHQo
KSAtIDI7IC8vIFRoZSBiYXNlbGluZSBpcyAycHggdXAgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBj
aGVja2JveC9yYWRpbyBpbiBBcHBLaXQuCi0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNl
KCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gYm94LT5tYXJnaW5Ub3AoKSArIGJv
eC0+aGVpZ2h0KCkgLSA1OyAvLyBUaGlzIGlzIHRvIG1hdGNoIEFwcEtpdC4gVGhlcmUgbWlnaHQg
YmUgYSBiZXR0ZXIgd2F5IHRvIGNhbGN1bGF0ZSB0aGlzIHRob3VnaC4KKyAgICBpZiAoYm94LnN0
eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydCB8fCBib3guc3R5bGUoKS5hcHBlYXJh
bmNlKCkgPT0gUmFkaW9QYXJ0KQorICAgICAgICByZXR1cm4gYm94Lm1hcmdpblRvcCgpICsgYm94
LmhlaWdodCgpIC0gMjsgLy8gVGhlIGJhc2VsaW5lIGlzIDJweCB1cCBmcm9tIHRoZSBib3R0b20g
b2YgdGhlIGNoZWNrYm94L3JhZGlvIGluIEFwcEtpdC4KKyAgICBpZiAoYm94LnN0eWxlKCkuYXBw
ZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICAgICAgcmV0dXJuIGJveC5tYXJnaW5Ub3Ao
KSArIGJveC5oZWlnaHQoKSAtIDU7IC8vIFRoaXMgaXMgdG8gbWF0Y2ggQXBwS2l0LiBUaGVyZSBt
aWdodCBiZSBhIGJldHRlciB3YXkgdG8gY2FsY3VsYXRlIHRoaXMgdGhvdWdoLgogICAgIHJldHVy
biBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihib3gpOwogfQogCkBAIC00NDUsNyArNDQ1
LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW4KICAgICBzdHlsZS0+c2V0Qm9yZGVyUmFkaXVz
KEludFNpemUobGVuZ3RoLnZhbHVlKCkgLyAyLjBmLCBsZW5ndGgudmFsdWUoKSAvIDIuMGYpKTsK
IH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRSYWRpb0RlY29yYXRpb25zKFJlbmRlck9i
amVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UmFkaW9EZWNvcmF0aW9ucyhjb25zdCBSZW5k
ZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWlu
dEluZm8uY29udGV4dCk7CiAgICAgRmxvYXRSZWN0IGNsaXAgPSBhZGRSb3VuZGVkQm9yZGVyQ2xp
cChib3gsIHBhaW50SW5mby5jb250ZXh0LCByZWN0KTsKQEAgLTQ3Myw5ICs0NzMsOSBAQCBib29s
IFJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBib3gs
IGNvbnN0IFBhaW50SW5mbyYgcAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZUlPUzo6cGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRl
clRoZW1lSU9TOjpwYWludFRleHRGaWVsZERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYg
Ym94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
LSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnN0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUm
IHN0eWxlID0gYm94LnN0eWxlKCk7CiAgICAgSW50UG9pbnQgcG9pbnQocmVjdC54KCkgKyBzdHls
ZS5ib3JkZXJMZWZ0V2lkdGgoKSwgcmVjdC55KCkgKyBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpKTsK
IAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNv
bnRleHQpOwpAQCAtNDg1LDE0ICs0ODUsMTQgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRU
ZXh0RmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJbmYKICAg
ICAvLyBUaGlzIGdyYWRpZW50IGdldHMgZHJhd24gYmxhY2sgd2hlbiBwcmludGluZy4KICAgICAv
LyBEbyBub3QgZHJhdyB0aGUgZ3JhZGllbnQgaWYgdGhlcmUgaXMgbm8gdmlzaWJsZSB0b3AgYm9y
ZGVyLgogICAgIGJvb2wgdG9wQm9yZGVySXNJbnZpc2libGUgPSAhc3R5bGUuaGFzQm9yZGVyKCkg
fHwgIXN0eWxlLmJvcmRlclRvcFdpZHRoKCkgfHwgc3R5bGUuYm9yZGVyVG9wSXNUcmFuc3BhcmVu
dCgpOwotICAgIGlmICghYm94LT52aWV3KCkucHJpbnRpbmcoKSAmJiAhdG9wQm9yZGVySXNJbnZp
c2libGUpCisgICAgaWYgKCFib3gudmlldygpLnByaW50aW5nKCkgJiYgIXRvcEJvcmRlcklzSW52
aXNpYmxlKQogICAgICAgICBkcmF3QXhpYWxHcmFkaWVudChwYWludEluZm8uY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCksIGdyYWRpZW50V2l0aE5hbWUoSW5zZXRHcmFkaWVudCksIHBvaW50LCBG
bG9hdFBvaW50KENHUG9pbnRNYWtlKHBvaW50LngoKSwgcG9pbnQueSgpICsgMy4wZikpLCBMaW5l
YXJJbnRlcnBvbGF0aW9uKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVJT1M6OnBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVu
ZGVyVGhlbWVJT1M6OnBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3Qm
IGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
Ci0gICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMocmVuZGVyZXIsIHBhaW50SW5m
bywgcmVjdCk7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMoYm94LCBwYWlu
dEluZm8sIHJlY3QpOwogfQogCiBjb25zdCBpbnQgTWVudUxpc3RNaW5IZWlnaHQgPSAxNTsKQEAg
LTU4Miw5ICs1ODIsOSBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RNZW51TGlzdEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bAogICAgIH0KIH0KIAotYm9v
bCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9i
amVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gYm94LT5zdHlsZSgp
OworICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IGJveC5zdHlsZSgpOwogICAgIGZsb2F0IGJvcmRl
clRvcFdpZHRoID0gc3R5bGUuYm9yZGVyVG9wV2lkdGgoKTsKICAgICBGbG9hdFJlY3QgY2xpcChy
ZWN0LngoKSArIHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpLCByZWN0LnkoKSArIHN0eWxlLmJvcmRl
clRvcFdpZHRoKCksIHJlY3Qud2lkdGgoKSAtIHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpIC0gc3R5
bGUuYm9yZGVyUmlnaHRXaWR0aCgpLCByZWN0LmhlaWdodCgpIC0gc3R5bGUuYm9yZGVyVG9wV2lk
dGgoKSAtIHN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKCkpOwogICAgIENHQ29udGV4dFJlZiBjZ0Nv
bnRleHQgPSBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CkBAIC02MTIsNyAr
NjEyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRp
b25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWkKIAogICAgIGZsb2F0IHNlcGFyYXRvciA9
IGNsaXAubWF4WCgpIC0gTWVudUxpc3RCdXR0b25QYWRkaW5nUmlnaHQ7CiAKLSAgICBib3gtPmRy
YXdMaW5lRm9yQm94U2lkZShwYWludEluZm8uY29udGV4dCwgc2VwYXJhdG9yIC0gYm9yZGVyVG9w
V2lkdGgsIGNsaXAueSgpLCBzZXBhcmF0b3IsIGNsaXAubWF4WSgpLCBCU1JpZ2h0LCBzdHlsZS52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciksIHN0eWxlLmJv
cmRlclRvcFN0eWxlKCksIDAsIDApOworICAgIGJveC5kcmF3TGluZUZvckJveFNpZGUocGFpbnRJ
bmZvLmNvbnRleHQsIHNlcGFyYXRvciAtIGJvcmRlclRvcFdpZHRoLCBjbGlwLnkoKSwgc2VwYXJh
dG9yLCBjbGlwLm1heFkoKSwgQlNSaWdodCwgc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpLCBzdHlsZS5ib3JkZXJUb3BTdHlsZSgpLCAwLCAwKTsK
IAogICAgIEZsb2F0UmVjdCBidXR0b25DbGlwKHNlcGFyYXRvciAtIGFkanVzdFRvcCwgY2xpcC55
KCkgLSBhZGp1c3RUb3AsIE1lbnVMaXN0QnV0dG9uUGFkZGluZ1JpZ2h0ICsgYWRqdXN0VG9wICsg
YWRqdXN0UmlnaHQsIGNsaXAuaGVpZ2h0KCkgKyBhZGp1c3RUb3AgKyBhZGp1c3RCb3R0b20pOwog
CkBAIC02MzEsNyArNjMxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1
dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWkKIAogICAgIC8vIFBh
aW50IEluZGljYXRvcnMuCiAKLSAgICBpZiAoYm94LT5pc01lbnVMaXN0KCkgJiYgdG9IVE1MU2Vs
ZWN0RWxlbWVudChib3gtPm5vZGUoKSktPm11bHRpcGxlKCkpIHsKKyAgICBpZiAoYm94LmlzTWVu
dUxpc3QoKSAmJiB0b0hUTUxTZWxlY3RFbGVtZW50KGJveC5ub2RlKCkpLT5tdWx0aXBsZSgpKSB7
CiAgICAgICAgIGludCBzaXplID0gMjsKICAgICAgICAgaW50IGNvdW50ID0gMzsKICAgICAgICAg
aW50IHBhZGRpbmcgPSAzOwpAQCAtNjg0LDEwICs2ODQsMTAgQEAgdm9pZCBSZW5kZXJUaGVtZUlP
Uzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUKICAgICBzdHlsZS0+c2V0Qm9yZGVyUmFkaXVzKExlbmd0aFNpemUocmFkaXVzV2lkdGgs
IHJhZGl1c0hlaWdodCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRy
YWNrKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xpZGVyVHJhY2soY29u
c3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogICAgIEludFJlY3QgdHJhY2tDbGlwID0gcmVjdDsKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSBib3gtPnN0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0g
Ym94LnN0eWxlKCk7CiAKICAgICBib29sIGlzSG9yaXpvbnRhbCA9IHRydWU7CiAgICAgc3dpdGNo
IChzdHlsZS5hcHBlYXJhbmNlKCkpIHsKQEAgLTc3OSw3ICs3NzksNyBAQCB2b2lkIFJlbmRlclRo
ZW1lSU9TOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KikgY29uc3QKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xpZGVyVGh1
bWJEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRl
clRodW1iRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAgIEZsb2F0UmVj
dCBjbGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8uY29udGV4dCwgcmVj
dCk7CkBAIC04MDcsOSArODA3LDkgQEAgZG91YmxlIFJlbmRlclRoZW1lSU9TOjphbmltYXRpb25E
dXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKICAgICByZXR1cm4g
MDsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFyZW5kZXJlci0+aXNQcm9ncmVzcygpKQorICAgIGlmICgh
cmVuZGVyZXIuaXNQcm9ncmVzcygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNvbnN0
IGludCBwcm9ncmVzc0JhckhlaWdodCA9IDk7CkBAIC04MzYsNyArODM2LDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25z
dCBQYWludEluZm8mIHAKICAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29s
b3IoMHg4ZCwgMHg4ZCwgMHg4ZCkpOwogICAgIGNvbnRleHQtPnNldFN0cm9rZUdyYWRpZW50KHN0
cm9rZUdyYWRpZW50LnJlbGVhc2UoKSk7CiAKLSAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBy
ZW5kZXJlci0+c3R5bGUoKS5jb2xvclNwYWNlKCk7CisgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNl
ID0gcmVuZGVyZXIuc3R5bGUoKS5jb2xvclNwYWNlKCk7CiAgICAgY29udGV4dC0+c2V0RmlsbENv
bG9yKENvbG9yKDI1NSwgMjU1LCAyNTUpLCBjb2xvclNwYWNlKTsKIAogICAgIFBhdGggdHJhY2tQ
YXRoOwpAQCAtODU3LDEwICs4NTcsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9n
cmVzc0JhcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHAKIAogICAg
IGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQ
b3NpdGlvbiwgcmVjdC53aWR0aCgpLCB1cHBlckdyYWRpZW50SGVpZ2h0KSk7CiAKLSAgICBSZW5k
ZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKHJlbmRlcmVyKTsK
LSAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkgeworICAgIGNvbnN0IFJl
bmRlclByb2dyZXNzJiByZW5kZXJQcm9ncmVzcyA9ICp0b1JlbmRlclByb2dyZXNzKCZyZW5kZXJl
cik7CisgICAgaWYgKHJlbmRlclByb2dyZXNzLmlzRGV0ZXJtaW5hdGUoKSkgewogICAgICAgICAv
LyAyKSBEcmF3IHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgICAgIGRvdWJsZSBwb3NpdGlvbiA9IGNs
YW1wVG8ocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCksIDAuMCwgMS4wKTsKKyAgICAgICAgZG91
YmxlIHBvc2l0aW9uID0gY2xhbXBUbyhyZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpLCAwLjAsIDEu
MCk7CiAgICAgICAgIGRvdWJsZSBiYXJXaWR0aCA9IHBvc2l0aW9uICogcmVjdC53aWR0aCgpOwog
ICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGJhckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShG
bG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC41KSwgRmxv
YXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFy
SGVpZ2h0IC0gMSkpOwogICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29s
b3IoMTk1LCAyMTcsIDI0NykpOwpAQCAtODc5LDcgKzg3OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJ
T1M6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUGFpbnRJ
bmZvJiBwCiAKICAgICAgICAgUGF0aCBiYXJQYXRoOwogICAgICAgICBpbnQgbGVmdCA9IHJlY3Qu
eCgpOwotICAgICAgICBpZiAoIXJlbmRlclByb2dyZXNzLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSkKKyAgICAgICAgaWYgKCFyZW5kZXJQcm9ncmVzcy5zdHlsZSgpLmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIGxlZnQgPSByZWN0Lm1heFgoKSAtIGJhcldp
ZHRoOwogICAgICAgICBGbG9hdFJlY3QgYmFyUmVjdChsZWZ0ICsgMC4yNSwgdmVydGljYWxSZW5k
ZXJpbmdQb3NpdGlvbiArIDAuMjUsIHN0ZDo6bWF4KGJhcldpZHRoIC0gMC41LCAwLjApLCBwcm9n
cmVzc0JhckhlaWdodCAtIDAuNSk7CiAgICAgICAgIGJhclBhdGguYWRkUm91bmRlZFJlY3QoYmFy
UmVjdCwgcm91bmRlZENvcm5lclJhZGl1cyk7CkBAIC05MjEsNyArOTIxLDcgQEAgdm9pZCBSZW5k
ZXJUaGVtZUlPUzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUKICAgICBhZGp1c3RSb3VuZEJvcmRlclJhZGl1cygqc3R5bGUsIGJveCk7
CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhS
ZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlv
bnMoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFRleHRGaWVsZERlY29yYXRp
b25zKGJveCwgcGFpbnRJbmZvLCByZWN0KTsKIH0KQEAgLTk0NywxOCArOTQ3LDE4IEBAIHZvaWQg
UmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9y
LCBSZW5kZXJTdHlsZSogc3R5CiAgICAgYWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoKnN0eWxlLCBi
b3gpOwogfQogCi1ib29sIFJlbmRlclRoZW1lSU9TOjpwYWludEJ1dHRvbkRlY29yYXRpb25zKFJl
bmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50QnV0dG9uRGVjb3JhdGlvbnMoY29u
c3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludFB1c2hCdXR0b25EZWNvcmF0aW9ucyhi
b3gsIHBhaW50SW5mbywgcmVjdCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHVz
aEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50
UHVzaEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgYm94LCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKICAgICBGbG9h
dFJlY3QgY2xpcCA9IGFkZFJvdW5kZWRCb3JkZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNvbnRleHQs
IHJlY3QpOwogCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBpZiAoYm94LT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuaXNEYXJrKCkpCisgICAgaWYgKGJv
eC5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cikuaXNEYXJrKCkpCiAgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50KGNnQ29udGV4dCwgZ3JhZGll
bnRXaXRoTmFtZShDb252ZXhHcmFkaWVudCksIGNsaXAubG9jYXRpb24oKSwgRmxvYXRQb2ludChj
bGlwLngoKSwgY2xpcC5tYXhZKCkpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKICAgICBlbHNlIHsK
ICAgICAgICAgZHJhd0F4aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKFNo
YWRlR3JhZGllbnQpLCBjbGlwLmxvY2F0aW9uKCksIEZsb2F0UG9pbnQoY2xpcC54KCksIGNsaXAu
bWF4WSgpKSwgTGluZWFySW50ZXJwb2xhdGlvbik7CkBAIC05ODIsMTIgKzk4MiwxMiBAQCBjb25z
dCBpbnQga1RodW1ibmFpbEJvcmRlckNvcm5lclJhZGl1cyA9IDE7CiBjb25zdCBpbnQga1Zpc2li
bGVCYWNrZ3JvdW5kSW1hZ2VXaWR0aCA9IDE7CiBjb25zdCBpbnQga011bHRpcGxlVGh1bWJuYWls
U2hyaW5rU2l6ZSA9IDI7CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50RmlsZVVwbG9hZElj
b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBSZW5kZXJPYmplY3QqIGJ1dHRvblJlbmRlcmVy
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCwgSWNvbiog
aWNvbiwgRmlsZVVwbG9hZERlY29yYXRpb25zIGZpbGVVcGxvYWREZWNvcmF0aW9ucykKK2Jvb2wg
UmVuZGVyVGhlbWVJT1M6OnBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucyhjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBSZW5kZXJPYmplY3QmIGJ1dHRvblJlbmRlcmVyLCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCwgSWNvbiogaWNvbiwgRmlsZVVw
bG9hZERlY29yYXRpb25zIGZpbGVVcGxvYWREZWNvcmF0aW9ucykKIHsKICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKIAogICAgIElu
dFNpemUgY29ybmVyU2l6ZShrVGh1bWJuYWlsQm9yZGVyQ29ybmVyUmFkaXVzLCBrVGh1bWJuYWls
Qm9yZGVyQ29ybmVyUmFkaXVzKTsKLSAgICBDb2xvciBwaWN0dXJlRnJhbWVDb2xvciA9IGJ1dHRv
blJlbmRlcmVyID8gYnV0dG9uUmVuZGVyZXItPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpIDogQ29sb3IoNzYuMGYsIDc2LjBmLCA3Ni4wZik7
CisgICAgQ29sb3IgcGljdHVyZUZyYW1lQ29sb3IgPSBidXR0b25SZW5kZXJlci5zdHlsZSgpLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yKTsKIAogICAgIElu
dFJlY3QgdGh1bWJuYWlsUGljdHVyZUZyYW1lUmVjdCA9IHJlY3Q7CiAgICAgSW50UmVjdCB0aHVt
Ym5haWxSZWN0ID0gcmVjdDsKQEAgLTEwMDAsNyArMTAwMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJ
T1M6OnBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBSZW5kZXJP
YmplY3QqCiAgICAgICAgIHRodW1ibmFpbFJlY3QuY29udHJhY3Qoa011bHRpcGxlVGh1bWJuYWls
U2hyaW5rU2l6ZSwga011bHRpcGxlVGh1bWJuYWlsU2hyaW5rU2l6ZSk7CiAKICAgICAgICAgLy8g
QmFja2dyb3VuZCBwaWN0dXJlIGZyYW1lIGFuZCBzaW1wbGUgYmFja2dyb3VuZCBpY29uIHdpdGgg
YSBncmFkaWVudCBtYXRjaGluZyB0aGUgYnV0dG9uLgotICAgICAgICBDb2xvciBiYWNrZ3JvdW5k
SW1hZ2VDb2xvciA9IGJ1dHRvblJlbmRlcmVyID8gQ29sb3IoYnV0dG9uUmVuZGVyZXItPnN0eWxl
KCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5yZ2Io
KSkgOiBDb2xvcigyMDYuMGYsIDIwNi4wZiwgMjA2LjBmKTsKKyAgICAgICAgQ29sb3IgYmFja2dy
b3VuZEltYWdlQ29sb3IgPSBDb2xvcihidXR0b25SZW5kZXJlci5zdHlsZSgpLnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikucmdiKCkpOwogICAgICAgICBw
YWludEluZm8uY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QodGh1bWJu
YWlsUGljdHVyZUZyYW1lUmVjdCwgY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSwg
Y29ybmVyU2l6ZSksIHBpY3R1cmVGcmFtZUNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KHRodW1ibmFpbFJlY3QsIGJhY2tncm91
bmRJbWFnZUNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAppbmRleCAwZmJlNjExYTJiY2Y4NDNjMjA2
YWU5ZmZjMTA1ZDE1ZmJjNjBjYWM0Li4yYjE5ZDQ3ZDY5NWMzOWQyZjg4NzY5ZTMyNDE4Y2Y0M2Ji
ZTIyYTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaApAQCAt
NDQsMTIgKzQ0LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVt
ZT4gY3JlYXRlKCk7CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hh
bmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KLSAgICB2aXJ0
dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVj
dCYpIGNvbnN0OwogCiAgICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRy
b2wgdGludGluZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqLCBJbnRSZWN0Jikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVj
dCYsIEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHls
ZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVy
JiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CiAKQEAgLTgyLDEzICs4Miwx
MyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVu
ZGVyU3R5bGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0Jv
dHRvbShSZW5kZXJTdHlsZSopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50Q2Fwc0xv
Y2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwb3BzTWVudUJ5QXJyb3dLZXlzKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCiAgICAg
dmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNv
bnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRl
cihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01ldGVyKENv
bnRyb2xQYXJ0KSBjb25zdDsKICNlbmRpZgogCkBAIC05NywxNCArOTcsMTQgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIo
UmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKICAgICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0
aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgogICAgIHZpcnR1YWwgZG91YmxlIGFu
aW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIEludFJlY3QgcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9i
amVjdCosIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIEludFJl
Y3QgcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IElu
dFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgdmlydHVhbCBDb2xvciBzeXN0
ZW1Db2xvcihDU1NWYWx1ZUlEKSBjb25zdDsKICAgICAvLyBDb250cm9scyBjb2xvciB2YWx1ZXMg
cmV0dXJuZWQgZnJvbSBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKCkuIHN5c3RlbUNvbG9yKCkgd2ls
bCBiZSB1c2VkIHdoZW4gZmFsc2UuCiAgICAgdmlydHVhbCBib29sIHVzZXNUZXN0TW9kZUZvY3Vz
UmluZ0NvbG9yKCkgY29uc3Q7CiAgICAgLy8gQSB2aWV3IGFzc29jaWF0ZWQgdG8gdGhlIGNvbnRh
aW5lZCBkb2N1bWVudC4gU3ViY2xhc3NlcyBtYXkgbm90IGhhdmUgc3VjaCBhIHZpZXcgYW5kIHJl
dHVybiBhIGZha2UuCi0gICAgTlNWaWV3KiBkb2N1bWVudFZpZXdGb3IoUmVuZGVyT2JqZWN0Kikg
Y29uc3Q7CisgICAgTlNWaWV3KiBkb2N1bWVudFZpZXdGb3IoY29uc3QgUmVuZGVyT2JqZWN0Jikg
Y29uc3Q7CiAKIAogcHJvdGVjdGVkOgpAQCAtMTIzLDQzICsxMjMsNDMgQEAgcHJvdGVjdGVkOgog
CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9ycygpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVs
ZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxp
c3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxp
c3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
Ym9vbCBwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRpZgogCi0gICAgdmlydHVhbCBib29sIHBhaW50U2xp
ZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29s
IHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERl
Y29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uUGFydChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzQ2xvc2VkQ2FwdGlvbmluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTE2
NywxNCArMTY3LDE0IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93
UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50
U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbmFwc2hvdHRlZFBsdWdp
bk92ZXJsYXkoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldp
ZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBs
ZUZpbGVzQWxsb3dlZCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRSZWN0IGluZmxhdGVSZWN0
KGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgaW50KiBtYXJnaW5zLCBmbG9h
dCB6b29tTGV2ZWwgPSAxLjBmKSBjb25zdDsKIAotICAgIEZsb2F0UmVjdCBjb252ZXJ0VG9QYWlu
dGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJP
YmplY3QqIHBhcnRSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IElu
dFJlY3QmKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0KGNvbnN0
IFJlbmRlck9iamVjdCYgaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0JiBwYXJ0UmVu
ZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0JikgY29uc3Q7
CiAKICAgICAvLyBHZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIGZvbnQuIFVzZWQg
Ynkgc29tZSBvZiB0aGUgY29udHJvbHMgKGxpa2UgYnV0dG9ucykuCiAgICAgTlNDb250cm9sU2l6
ZSBjb250cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKQEAgLTE4NSwyNiArMTg1
LDI2IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBzaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHls
ZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKICAgICB2b2lkIHNldEZvbnRGcm9tQ29u
dHJvbFNpemUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgTlNDb250cm9sU2l6ZSkgY29u
c3Q7CiAKLSAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJP
YmplY3QqKTsKLSAgICB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5k
ZXJPYmplY3QqKTsKLSAgICB2b2lkIHVwZGF0ZUZvY3VzZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBS
ZW5kZXJPYmplY3QqKTsKLSAgICB2b2lkIHVwZGF0ZVByZXNzZWRTdGF0ZShOU0NlbGwqLCBjb25z
dCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqLCBj
b25zdCBSZW5kZXJPYmplY3QmKTsKKyAgICB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwq
LCBjb25zdCBSZW5kZXJPYmplY3QmKTsKKyAgICB2b2lkIHVwZGF0ZUZvY3VzZWRTdGF0ZShOU0Nl
bGwqLCBjb25zdCBSZW5kZXJPYmplY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVByZXNzZWRTdGF0ZShO
U0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QmKTsKICAgICAvLyBBbiBvcHRpb25hbCBob29rIGZv
ciBzdWJjbGFzc2VzIHRvIHVwZGF0ZSB0aGUgY29udHJvbCB0aW50IG9mIE5TQ2VsbC4KLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQWN0aXZlU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0
KikgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFjdGl2ZVN0YXRlKE5TQ2VsbCosIGNvbnN0
IFJlbmRlck9iamVjdCYpIHsgfQogCiAgICAgLy8gSGVscGVycyBmb3IgYWRqdXN0aW5nIGFwcGVh
cmFuY2UgYW5kIGZvciBwYWludGluZwogCi0gICAgdm9pZCBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0
ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBzZXRQb3B1
cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0Jik7CiAg
ICAgY29uc3QgSW50U2l6ZSogcG9wdXBCdXR0b25TaXplcygpIGNvbnN0OwogICAgIGNvbnN0IGlu
dCogcG9wdXBCdXR0b25NYXJnaW5zKCkgY29uc3Q7CiAgICAgY29uc3QgaW50KiBwb3B1cEJ1dHRv
blBhZGRpbmcoTlNDb250cm9sU2l6ZSkgY29uc3Q7Ci0gICAgdm9pZCBwYWludE1lbnVMaXN0QnV0
dG9uR3JhZGllbnRzKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2b2lkIHBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIGNvbnN0IElu
dFNpemUqIG1lbnVMaXN0U2l6ZXMoKSBjb25zdDsKIAogICAgIGNvbnN0IEludFNpemUqIHNlYXJj
aEZpZWxkU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBJbnRTaXplKiBjYW5jZWxCdXR0b25TaXpl
cygpIGNvbnN0OwogICAgIGNvbnN0IEludFNpemUqIHJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0
OwotICAgIHZvaWQgc2V0U2VhcmNoQ2VsbFN0YXRlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2b2lkIHNldFNlYXJjaENlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBJbnRSZWN0Jik7CiAgICAgdm9pZCBzZXRTZWFyY2hGaWVsZFNpemUoUmVuZGVyU3R5bGUq
KSBjb25zdDsKIAogICAgIE5TUG9wVXBCdXR0b25DZWxsICpwb3B1cEJ1dHRvbigpIGNvbnN0OwpA
QCAtMjI2LDggKzIyNiw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTUFHRV9D
T05UUk9MUykKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbWFnZUNvbnRyb2xzQnV0dG9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIEludFNpemUgaW1hZ2VDb250cm9sc0J1dHRvblNpemUoY29uc3QgUmVuZGVyT2Jq
ZWN0KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50SW1hZ2VDb250cm9s
c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBJbnRTaXplIGltYWdlQ29udHJvbHNCdXR0b25T
aXplKGNvbnN0IGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIE5TU2Vy
dmljZXNSb2xsb3ZlckJ1dHRvbkNlbGwgKnNlcnZpY2VzUm9sbG92ZXJCdXR0b25DZWxsKCkgY29u
c3Q7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1t
CmluZGV4IDI1OGM3YWUyYjJmYmFkYjI1MGIxYjQ0OGU0MDg2MmE5OWVjMDY4MGMuLmNkMGU3OTE0
ODA4ZTJlYTI2ZWZkZWM5ZjE0ODE1MzQwZWI1OWVlYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTIxNywxMCArMjE3LDEwIEBAIFJlbmRlclRoZW1l
TWFjOjp+UmVuZGVyVGhlbWVNYWMoKQogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVs
dENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9ub3RpZmljYXRpb25PYnNlcnZlci5nZXQoKV07CiB9
CiAKLU5TVmlldyogUmVuZGVyVGhlbWVNYWM6OmRvY3VtZW50Vmlld0ZvcihSZW5kZXJPYmplY3Qq
IG8pIGNvbnN0CitOU1ZpZXcqIFJlbmRlclRoZW1lTWFjOjpkb2N1bWVudFZpZXdGb3IoY29uc3Qg
UmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewogICAgIENvbnRyb2xTdGF0ZXMgc3RhdGVzKGV4dHJh
Y3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIobykpOwotICAgIHJldHVybiBUaGVtZU1hYzo6ZW5z
dXJlZFZpZXcoJm8tPnZpZXcoKS5mcmFtZVZpZXcoKSwgJnN0YXRlcyk7CisgICAgcmV0dXJuIFRo
ZW1lTWFjOjplbnN1cmVkVmlldygmby52aWV3KCkuZnJhbWVWaWV3KCksICZzdGF0ZXMpOwogfQog
CiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNjAyLDkgKzYwMiw5IEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRl
ckRhdGEmCiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJv
cmRlciwgYmFja2dyb3VuZCwgYmFja2dyb3VuZENvbG9yKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBJbnRSZWN0JiBy
KQordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvLCBJbnRSZWN0JiByKQogewotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvLT5zdHlsZSgp
LmFwcGVhcmFuY2UoKTsKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gby5zdHlsZSgpLmFwcGVhcmFu
Y2UoKTsKIAogI2lmIFVTRShORVdfVEhFTUUpCiAgICAgc3dpdGNoIChwYXJ0KSB7CkBAIC02MjEs
NyArNjIxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UmVwYWludFJlY3QoY29uc3Qg
UmVuZGVyT2JqZWN0KiBvLCBJbnRSZWN0JiByKQogICAgIH0KICNlbmRpZgogCi0gICAgZmxvYXQg
em9vbUxldmVsID0gby0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9vbUxl
dmVsID0gby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIGlmIChwYXJ0ID09IE1lbnVs
aXN0UGFydCkgewogICAgICAgICBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShvLCByKTsKQEAgLTY1
MCwyMCArNjUwLDIwIEBAIEludFJlY3QgUmVuZGVyVGhlbWVNYWM6OmluZmxhdGVSZWN0KGNvbnN0
IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotRmxvYXRSZWN0IFJlbmRlclRoZW1lTWFjOjpjb252ZXJ0VG9QYWludGluZ1JlY3Qo
Y29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBh
cnRSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmIHIp
IGNvbnN0CitGbG9hdFJlY3QgUmVuZGVyVGhlbWVNYWM6OmNvbnZlcnRUb1BhaW50aW5nUmVjdChj
b25zdCBSZW5kZXJPYmplY3QmIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCYgcGFy
dFJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVjdCYgcikg
Y29uc3QKIHsKICAgICBGbG9hdFJlY3QgcGFydFJlY3QoaW5wdXRSZWN0KTsKIAogICAgIC8vIENv
bXB1dGUgYW4gb2Zmc2V0IGJldHdlZW4gdGhlIHBhcnQgcmVuZGVyZXIgYW5kIHRoZSBpbnB1dCBy
ZW5kZXJlcgogICAgIEZsb2F0U2l6ZSBvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcjsKLSAgICBjb25z
dCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcGFydFJlbmRlcmVyOwotICAgIHdoaWxlIChyZW5k
ZXJlciAmJiByZW5kZXJlciAhPSBpbnB1dFJlbmRlcmVyKSB7CisgICAgY29uc3QgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9ICZwYXJ0UmVuZGVyZXI7CisgICAgd2hpbGUgKHJlbmRlcmVyICYmIHJl
bmRlcmVyICE9ICZpbnB1dFJlbmRlcmVyKSB7CiAgICAgICAgIFJlbmRlckVsZW1lbnQqIGNvbnRh
aW5pbmdSZW5kZXJlciA9IHJlbmRlcmVyLT5jb250YWluZXIoKTsKICAgICAgICAgb2Zmc2V0RnJv
bUlucHV0UmVuZGVyZXIgLT0gcm91bmRlZEludFNpemUocmVuZGVyZXItPm9mZnNldEZyb21Db250
YWluZXIoY29udGFpbmluZ1JlbmRlcmVyLCBMYXlvdXRQb2ludCgpKSk7CiAgICAgICAgIHJlbmRl
cmVyID0gY29udGFpbmluZ1JlbmRlcmVyOwogICAgIH0KICAgICAvLyBJZiB0aGUgaW5wdXQgcmVu
ZGVyZXIgd2FzIG5vdCBhIGNvbnRhaW5lciwgc29tZXRoaW5nIHdlbnQgd3JvbmcKLSAgICBBU1NF
UlQocmVuZGVyZXIgPT0gaW5wdXRSZW5kZXJlcik7CisgICAgQVNTRVJUKHJlbmRlcmVyID09ICZp
bnB1dFJlbmRlcmVyKTsKICAgICAvLyBNb3ZlIHRoZSByZWN0IGludG8gcGFydFJlbmRlcmVyJ3Mg
Y29vcmRzCiAgICAgcGFydFJlY3QubW92ZShvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcik7CiAgICAg
Ly8gQWNjb3VudCBmb3IgdGhlIGxvY2FsIGRyYXdpbmcgb2Zmc2V0ICh0eCwgdHkpCkBAIC02NzIs
NyArNjcyLDcgQEAgRmxvYXRSZWN0IFJlbmRlclRoZW1lTWFjOjpjb252ZXJ0VG9QYWludGluZ1Jl
Y3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmUKICAgICByZXR1cm4gcGFydFJlY3Q7
CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqIGNl
bGwsIGNvbnN0IFJlbmRlck9iamVjdCogbykKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUNo
ZWNrZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJlbmRlck9iamVjdCYgbykKIHsKICAgICBi
b29sIG9sZEluZGV0ZXJtaW5hdGUgPSBbY2VsbCBzdGF0ZV0gPT0gTlNNaXhlZFN0YXRlOwogICAg
IGJvb2wgaW5kZXRlcm1pbmF0ZSA9IGlzSW5kZXRlcm1pbmF0ZShvKTsKQEAgLTY4OCw3ICs2ODgs
NyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxsKiBjZWxs
LCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCiAgICAgICAgIFtjZWxsIHNldFN0YXRlOmNoZWNrZWQg
PyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBk
YXRlRW5hYmxlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvKQordm9p
ZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3Qg
UmVuZGVyT2JqZWN0JiBvKQogewogICAgIGJvb2wgb2xkRW5hYmxlZCA9IFtjZWxsIGlzRW5hYmxl
ZF07CiAgICAgYm9vbCBlbmFibGVkID0gaXNFbmFibGVkKG8pOwpAQCAtNjk2LDIzICs2OTYsMjMg
QEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKE5TQ2VsbCogY2VsbCwg
Y29uc3QgUmVuZGVyT2JqZWN0KiBvKQogICAgICAgICBbY2VsbCBzZXRFbmFibGVkOmVuYWJsZWRd
OwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVGb2N1c2VkU3RhdGUoTlNDZWxsKiBj
ZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCit2b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVG
b2N1c2VkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QmIG8pCiB7CiAgICAg
Ym9vbCBvbGRGb2N1c2VkID0gW2NlbGwgc2hvd3NGaXJzdFJlc3BvbmRlcl07Ci0gICAgYm9vbCBm
b2N1c2VkID0gaXNGb2N1c2VkKG8pICYmIG8tPnN0eWxlKCkub3V0bGluZVN0eWxlSXNBdXRvKCk7
CisgICAgYm9vbCBmb2N1c2VkID0gaXNGb2N1c2VkKG8pICYmIG8uc3R5bGUoKS5vdXRsaW5lU3R5
bGVJc0F1dG8oKTsKICAgICBpZiAoZm9jdXNlZCAhPSBvbGRGb2N1c2VkKQogICAgICAgICBbY2Vs
bCBzZXRTaG93c0ZpcnN0UmVzcG9uZGVyOmZvY3VzZWRdOwogfQogCi12b2lkIFJlbmRlclRoZW1l
TWFjOjp1cGRhdGVQcmVzc2VkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3Qq
IG8pCit2b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVQcmVzc2VkU3RhdGUoTlNDZWxsKiBjZWxs
LCBjb25zdCBSZW5kZXJPYmplY3QmIG8pCiB7CiAgICAgYm9vbCBvbGRQcmVzc2VkID0gW2NlbGwg
aXNIaWdobGlnaHRlZF07Ci0gICAgYm9vbCBwcmVzc2VkID0gby0+bm9kZSgpICYmIG8tPm5vZGUo
KS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChvLT5ub2RlKCkpLT5hY3RpdmUoKTsKKyAg
ICBib29sIHByZXNzZWQgPSBvLm5vZGUoKSAmJiBvLm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpICYm
IHRvRWxlbWVudChvLm5vZGUoKSktPmFjdGl2ZSgpOwogICAgIGlmIChwcmVzc2VkICE9IG9sZFBy
ZXNzZWQpCiAgICAgICAgIFtjZWxsIHNldEhpZ2hsaWdodGVkOnByZXNzZWRdOwogfQogCi1ib29s
IFJlbmRlclRoZW1lTWFjOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3Qq
IG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25z
dCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7CiAgICAgLy8gQW4gYWx0ZXJuYXRlIHdheSB0byBp
bXBsZW1lbnQgdGhpcyB3b3VsZCBiZSB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIGNlbGwgb2JqZWN0
CiAgICAgLy8gYW5kIGNhbGwgdGhlIHByaXZhdGUgX25lZWRSZWRyYXdPbldpbmRvd0NoYW5nZWRL
ZXlTdGF0ZSBtZXRob2QuIEFuIGFkdmFudGFnZSBvZgpAQCAtNzIzLDcgKzcyMyw3IEBAIGJvb2wg
UmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCog
bykgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQ2hlY2tib3hlcyBvbmx5
IGhhdmUgdGludCB3aGVuIGNoZWNrZWQuCi0gICAgaWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgp
ID09IENoZWNrYm94UGFydCkKKyAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBDaGVj
a2JveFBhcnQpCiAgICAgICAgIHJldHVybiBpc0NoZWNrZWQobyk7CiAKICAgICAvLyBGb3Igbm93
IGFzc3VtZSBvdGhlciBjb250cm9scyBoYXZlIHRpbnQgaWYgZW5hYmxlZC4KQEAgLTgxMSw3ICs4
MTEsNyBAQCBOU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvclN5c3Rl
bUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHJldHVybiBOU01pbmlDb250cm9s
U2l6ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jv
b2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYgbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgTG9j
YWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7
CiAKQEAgLTgzMSw3ICs4MzEsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0Rmll
bGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KgogewogfQogCi1i
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBpZiAo
cGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC04NDIsNyArODQyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRDYXBzTG9j
a0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mIHBhaW4KICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEFyZWEoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikK
K2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBM
b2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0
KTsKICAgICB3a0RyYXdCZXplbGVkVGV4dEFyZWEociwgaXNFbmFibGVkKG8pICYmICFpc1JlYWRP
bmx5Q29udHJvbChvKSk7CkBAIC04ODEsMjEgKzg4MSwyMSBAQCBjb25zdCBpbnQqIFJlbmRlclRo
ZW1lTWFjOjpwb3B1cEJ1dHRvblBhZGRpbmcoTlNDb250cm9sU2l6ZSBzaXplKSBjb25zdAogICAg
IHJldHVybiBwYWRkaW5nW3NpemVdOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1l
bnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KGNvbnN0IFJl
bmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCiB7CiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWlu
dEluZm8uY29udGV4dCk7CiAgICAgc2V0UG9wdXBCdXR0b25DZWxsU3RhdGUobywgcik7CiAKICAg
ICBOU1BvcFVwQnV0dG9uQ2VsbCogcG9wdXBCdXR0b24gPSB0aGlzLT5wb3B1cEJ1dHRvbigpOwog
Ci0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAg
ZmxvYXQgem9vbUxldmVsID0gby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKICAgICBJbnRTaXpl
IHNpemUgPSBwb3B1cEJ1dHRvblNpemVzKClbW3BvcHVwQnV0dG9uIGNvbnRyb2xTaXplXV07CiAg
ICAgc2l6ZS5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSAqIHpvb21MZXZlbCk7CiAgICAgc2l6ZS5z
ZXRXaWR0aChyLndpZHRoKCkpOwogCiAgICAgLy8gTm93IGluZmxhdGUgaXQgdG8gYWNjb3VudCBm
b3IgdGhlIHNoYWRvdy4KICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHI7Ci0gICAgaWYgKHIu
d2lkdGgoKSA+PSBtaW5pbXVtTWVudUxpc3RTaXplKCZvLT5zdHlsZSgpKSkKKyAgICBpZiAoci53
aWR0aCgpID49IG1pbmltdW1NZW51TGlzdFNpemUoJm8uc3R5bGUoKSkpCiAgICAgICAgIGluZmxh
dGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgcG9wdXBCdXR0b25NYXJn
aW5zKCksIHpvb21MZXZlbCk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKQEAgLTkxMyw3ICs5MTMsNyBAQCBib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sCiAKICAgICBOU1ZpZXcgKnZpZXcgPSBkb2N1bWVudFZpZXdGb3Iobyk7CiAg
ICAgW3BvcHVwQnV0dG9uIGRyYXdXaXRoRnJhbWU6aW5mbGF0ZWRSZWN0IGluVmlldzp2aWV3XTsK
LSAgICBpZiAoaXNGb2N1c2VkKG8pICYmIG8tPnN0eWxlKCkub3V0bGluZVN0eWxlSXNBdXRvKCkp
CisgICAgaWYgKGlzRm9jdXNlZChvKSAmJiBvLnN0eWxlKCkub3V0bGluZVN0eWxlSXNBdXRvKCkp
CiAgICAgICAgIFtwb3B1cEJ1dHRvbiBfd2ViX2RyYXdGb2N1c1JpbmdXaXRoRnJhbWU6aW5mbGF0
ZWRSZWN0IGluVmlldzp2aWV3XTsKICAgICBbcG9wdXBCdXR0b24gc2V0Q29udHJvbFZpZXc6bmls
XTsKIApAQCAtOTM0LDE0ICs5MzQsMTQgQEAgSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6bWV0ZXJT
aXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiByZW5kZXJNZXRlciwgY29uc3QKICAgICAg
ICAgICAgICAgICAgICBib3VuZHMuaGVpZ2h0KCkgPCBjZWxsU2l6ZS5oZWlnaHQgPyBjZWxsU2l6
ZS5oZWlnaHQgOiBib3VuZHMuaGVpZ2h0KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludE1ldGVyKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50
TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghcmVuZGVyT2JqZWN0
LT5pc01ldGVyKCkpCisgICAgaWYgKCFyZW5kZXJPYmplY3QuaXNNZXRlcigpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRl
eHQocGFpbnRJbmZvLmNvbnRleHQpOwogCi0gICAgTlNMZXZlbEluZGljYXRvckNlbGwqIGNlbGwg
PSBsZXZlbEluZGljYXRvckZvcih0b1JlbmRlck1ldGVyKHJlbmRlck9iamVjdCkpOworICAgIE5T
TGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxsID0gbGV2ZWxJbmRpY2F0b3JGb3IodG9SZW5kZXJNZXRl
cigmcmVuZGVyT2JqZWN0KSk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKCpwYWludEluZm8uY29udGV4dCk7CiAKICAgICBbY2VsbCBkcmF3V2l0aEZyYW1lOnJlY3Qg
aW5WaWV3OmRvY3VtZW50Vmlld0ZvcihyZW5kZXJPYmplY3QpXTsKQEAgLTEwNDIsMjMgKzEwNDIs
MjMgQEAgY29uc3QgaW50KiBSZW5kZXJUaGVtZU1hYzo6cHJvZ3Jlc3NCYXJNYXJnaW5zKE5TQ29u
dHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0CiAgICAgcmV0dXJuIG1hcmdpbnNbY29udHJvbFNp
emVdOwogfQogCi1JbnRSZWN0IFJlbmRlclRoZW1lTWFjOjpwcm9ncmVzc0JhclJlY3RGb3JCb3Vu
ZHMoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IEludFJlY3QmIGJvdW5k
cykgY29uc3QKK0ludFJlY3QgUmVuZGVyVGhlbWVNYWM6OnByb2dyZXNzQmFyUmVjdEZvckJvdW5k
cyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgSW50UmVjdCYgYm91bmRz
KSBjb25zdAogewogICAgIC8vIFdvcmthcm91bmQgdW50aWwgPHJkYXI6Ly9wcm9ibGVtLzE1ODU1
MDg2PiBpcyBmaXhlZC4KICAgICBpbnQgbWF4RGltZW5zaW9uID0gc3RhdGljX2Nhc3Q8aW50Pihz
dGQ6Om51bWVyaWNfbGltaXRzPHVzaG9ydD46Om1heCgpKTsKICAgICBJbnRSZWN0IHByb2dyZXNz
QmFyQm91bmRzKGJvdW5kcy54KCksIGJvdW5kcy55KCksIHN0ZDo6bWluKGJvdW5kcy53aWR0aCgp
LCBtYXhEaW1lbnNpb24pLCBzdGQ6Om1pbihib3VuZHMuaGVpZ2h0KCksIG1heERpbWVuc2lvbikp
OwotICAgIGlmIChOb0NvbnRyb2xQYXJ0ID09IHJlbmRlck9iamVjdC0+c3R5bGUoKS5hcHBlYXJh
bmNlKCkpCisgICAgaWYgKE5vQ29udHJvbFBhcnQgPT0gcmVuZGVyT2JqZWN0LnN0eWxlKCkuYXBw
ZWFyYW5jZSgpKQogICAgICAgICByZXR1cm4gcHJvZ3Jlc3NCYXJCb3VuZHM7CiAKLSAgICBmbG9h
dCB6b29tTGV2ZWwgPSByZW5kZXJPYmplY3QtPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwotICAg
IE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoJnJlbmRlck9i
amVjdC0+c3R5bGUoKSk7CisgICAgZmxvYXQgem9vbUxldmVsID0gcmVuZGVyT2JqZWN0LnN0eWxl
KCkuZWZmZWN0aXZlWm9vbSgpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250
cm9sU2l6ZUZvckZvbnQoJnJlbmRlck9iamVjdC5zdHlsZSgpKTsKICAgICBJbnRTaXplIHNpemUg
PSBwcm9ncmVzc0JhclNpemVzKClbY29udHJvbFNpemVdOwogICAgIHNpemUuc2V0SGVpZ2h0KHNp
emUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwogICAgIHNpemUuc2V0V2lkdGgocHJvZ3Jlc3NCYXJC
b3VuZHMud2lkdGgoKSk7CiAKICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBhY2NvdW50IGZvciB0
aGUgc2hhZG93LgogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gcHJvZ3Jlc3NCYXJCb3VuZHM7
Ci0gICAgaWYgKHByb2dyZXNzQmFyQm91bmRzLmhlaWdodCgpIDw9IG1pbmltdW1Qcm9ncmVzc0Jh
ckhlaWdodCgmcmVuZGVyT2JqZWN0LT5zdHlsZSgpKSkKKyAgICBpZiAocHJvZ3Jlc3NCYXJCb3Vu
ZHMuaGVpZ2h0KCkgPD0gbWluaW11bVByb2dyZXNzQmFySGVpZ2h0KCZyZW5kZXJPYmplY3Quc3R5
bGUoKSkpCiAgICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwg
c2l6ZSwgcHJvZ3Jlc3NCYXJNYXJnaW5zKGNvbnRyb2xTaXplKSwgem9vbUxldmVsKTsKIAogICAg
IHJldHVybiBpbmZsYXRlZFJlY3Q7CkBAIC0xMDgzLDI4ICsxMDgzLDI4IEBAIHZvaWQgUmVuZGVy
VGhlbWVNYWM6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVuCiB7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50UHJvZ3Jlc3NC
YXIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVz
c0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFyZW5kZXJPYmplY3Qt
PmlzUHJvZ3Jlc3MoKSkKKyAgICBpZiAoIXJlbmRlck9iamVjdC5pc1Byb2dyZXNzKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBwcm9ncmVzc0Jh
clJlY3RGb3JCb3VuZHMocmVuZGVyT2JqZWN0LCByZWN0KTsKLSAgICBOU0NvbnRyb2xTaXplIGNv
bnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KCZyZW5kZXJPYmplY3QtPnN0eWxlKCkpOwor
ICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoJnJlbmRl
ck9iamVjdC5zdHlsZSgpKTsKIAotICAgIFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9
IHRvUmVuZGVyUHJvZ3Jlc3MocmVuZGVyT2JqZWN0KTsKKyAgICBjb25zdCBSZW5kZXJQcm9ncmVz
cyYgcmVuZGVyUHJvZ3Jlc3MgPSAqdG9SZW5kZXJQcm9ncmVzcygmcmVuZGVyT2JqZWN0KTsKICAg
ICBISVRoZW1lVHJhY2tEcmF3SW5mbyB0cmFja0luZm87CiAgICAgdHJhY2tJbmZvLnZlcnNpb24g
PSAwOwogICAgIGlmIChjb250cm9sU2l6ZSA9PSBOU1JlZ3VsYXJDb250cm9sU2l6ZSkKLSAgICAg
ICAgdHJhY2tJbmZvLmtpbmQgPSByZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSA8IDAgPyBrVGhl
bWVMYXJnZUluZGV0ZXJtaW5hdGVCYXIgOiBrVGhlbWVMYXJnZVByb2dyZXNzQmFyOworICAgICAg
ICB0cmFja0luZm8ua2luZCA9IHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCkgPCAwID8ga1RoZW1l
TGFyZ2VJbmRldGVybWluYXRlQmFyIDoga1RoZW1lTGFyZ2VQcm9ncmVzc0JhcjsKICAgICBlbHNl
Ci0gICAgICAgIHRyYWNrSW5mby5raW5kID0gcmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCkgPCAw
ID8ga1RoZW1lTWVkaXVtSW5kZXRlcm1pbmF0ZUJhciA6IGtUaGVtZU1lZGl1bVByb2dyZXNzQmFy
OworICAgICAgICB0cmFja0luZm8ua2luZCA9IHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCkgPCAw
ID8ga1RoZW1lTWVkaXVtSW5kZXRlcm1pbmF0ZUJhciA6IGtUaGVtZU1lZGl1bVByb2dyZXNzQmFy
OwogCi0gICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSByZW5kZXJPYmplY3QtPmRvY3VtZW50
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IHJl
bmRlck9iamVjdC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgdHJhY2tJbmZv
LmJvdW5kcyA9IEludFJlY3QoSW50UG9pbnQoKSwgaW5mbGF0ZWRSZWN0LnNpemUoKSk7CiAgICAg
dHJhY2tJbmZvLm1pbiA9IDA7CiAgICAgdHJhY2tJbmZvLm1heCA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8U0ludDMyPjo6bWF4KCk7Ci0gICAgdHJhY2tJbmZvLnZhbHVlID0gbHJvdW5kKHJlbmRlclBy
b2dyZXNzLT5wb3NpdGlvbigpICogbmV4dGFmdGVyKHRyYWNrSW5mby5tYXgsIDApKTsKLSAgICB0
cmFja0luZm8udHJhY2tJbmZvLnByb2dyZXNzLnBoYXNlID0gbHJvdW5kKHJlbmRlclByb2dyZXNz
LT5hbmltYXRpb25Qcm9ncmVzcygpICogbmV4dGFmdGVyKHByb2dyZXNzQW5pbWF0aW9uTnVtRnJh
bWVzLCAwKSAqIGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICB0cmFja0luZm8udmFsdWUgPSBscm91
bmQocmVuZGVyUHJvZ3Jlc3MucG9zaXRpb24oKSAqIG5leHRhZnRlcih0cmFja0luZm8ubWF4LCAw
KSk7CisgICAgdHJhY2tJbmZvLnRyYWNrSW5mby5wcm9ncmVzcy5waGFzZSA9IGxyb3VuZChyZW5k
ZXJQcm9ncmVzcy5hbmltYXRpb25Qcm9ncmVzcygpICogbmV4dGFmdGVyKHByb2dyZXNzQW5pbWF0
aW9uTnVtRnJhbWVzLCAwKSAqIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICB0cmFja0luZm8uYXR0
cmlidXRlcyA9IGtUaGVtZVRyYWNrSG9yaXpvbnRhbDsKICAgICB0cmFja0luZm8uZW5hYmxlU3Rh
dGUgPSBpc0FjdGl2ZShyZW5kZXJPYmplY3QpID8ga1RoZW1lVHJhY2tBY3RpdmUgOiBrVGhlbWVU
cmFja0luYWN0aXZlOwogICAgIHRyYWNrSW5mby5yZXNlcnZlZCA9IDA7CkBAIC0xMTIwLDcgKzEx
MjAsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVj
dCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZgogCiAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAKLSAgICBpZiAoIXJlbmRl
clByb2dyZXNzLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgeworICAgIGlmICgh
cmVuZGVyUHJvZ3Jlc3Muc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgyICogaW5mbGF0ZWRSZWN0LngoKSArIGlu
ZmxhdGVkUmVjdC53aWR0aCgpLCAwKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxl
KEZsb2F0U2l6ZSgtMSwgMSkpOwogICAgIH0KQEAgLTExODIsNyArMTE4Miw3IEBAIHN0YXRpYyB2
b2lkIFRyYWNrR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCogaW5EYXRh
LCBDR0Zsb2F0KiBvdXRECiAgICAgICAgIG91dERhdGFbaV0gPSAoMS4wZiAtIGEpICogZGFya1tp
XSArIGEgKiBsaWdodFtpXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlz
dEJ1dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByKQordm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlz
dEJ1dHRvbkdyYWRpZW50cyhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIGlmIChyLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTE5Miw3ICsxMTkyLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6
cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW4KIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZv
LmNvbnRleHQpOwogCi0gICAgRmxvYXRSb3VuZGVkUmVjdCBib3JkZXIgPSBGbG9hdFJvdW5kZWRS
ZWN0KG8tPnN0eWxlKCkuZ2V0Um91bmRlZEJvcmRlckZvcihyLCAmby0+dmlldygpKSk7CisgICAg
RmxvYXRSb3VuZGVkUmVjdCBib3JkZXIgPSBGbG9hdFJvdW5kZWRSZWN0KG8uc3R5bGUoKS5nZXRS
b3VuZGVkQm9yZGVyRm9yKHIsICZvLnZpZXcoKSkpOwogICAgIGludCByYWRpdXMgPSBib3JkZXIu
cmFkaWkoKS50b3BMZWZ0KCkud2lkdGgoKTsKIAogICAgIENHQ29sb3JTcGFjZVJlZiBjc3BhY2Ug
PSBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCk7CkBAIC0xMjQ5LDI5ICsxMjQ5LDI5IEBAIHZvaWQg
UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7Ci0gICAgSW50UmVjdCBib3VuZHMgPSBJbnRSZWN0KHJlY3QueCgpICsgcmVuZGVyZXIt
PnN0eWxlKCkuYm9yZGVyTGVmdFdpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlY3QueSgpICsgcmVuZGVyZXItPnN0eWxlKCkuYm9yZGVyVG9wV2lkdGgoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpIC0gcmVuZGVyZXItPnN0eWxlKCkuYm9y
ZGVyTGVmdFdpZHRoKCkgLSByZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJSaWdodFdpZHRoKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSByZW5kZXJlci0+c3R5
bGUoKS5ib3JkZXJUb3BXaWR0aCgpIC0gcmVuZGVyZXItPnN0eWxlKCkuYm9yZGVyQm90dG9tV2lk
dGgoKSk7CisgICAgSW50UmVjdCBib3VuZHMgPSBJbnRSZWN0KHJlY3QueCgpICsgcmVuZGVyZXIu
c3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSwKKyAgICAgICAgcmVjdC55KCkgKyByZW5kZXJlci5z
dHlsZSgpLmJvcmRlclRvcFdpZHRoKCksCisgICAgICAgIHJlY3Qud2lkdGgoKSAtIHJlbmRlcmVy
LnN0eWxlKCkuYm9yZGVyTGVmdFdpZHRoKCkgLSByZW5kZXJlci5zdHlsZSgpLmJvcmRlclJpZ2h0
V2lkdGgoKSwKKyAgICAgICAgcmVjdC5oZWlnaHQoKSAtIHJlbmRlcmVyLnN0eWxlKCkuYm9yZGVy
VG9wV2lkdGgoKSAtIHJlbmRlcmVyLnN0eWxlKCkuYm9yZGVyQm90dG9tV2lkdGgoKSk7CiAgICAg
Ly8gRHJhdyB0aGUgZ3JhZGllbnRzIHRvIGdpdmUgdGhlIHN0eWxlZCBwb3B1cCBtZW51IGEgYnV0
dG9uIGFwcGVhcmFuY2UKICAgICBwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKHJlbmRlcmVy
LCBwYWludEluZm8sIGJvdW5kcyk7CiAKICAgICAvLyBTaW5jZSB3ZSBhY3R1YWxseSBrbm93IHRo
ZSBzaXplIG9mIHRoZSBjb250cm9sIGhlcmUsIHdlIHJlc3RyaWN0IHRoZSBmb250IHNjYWxlIHRv
IG1ha2Ugc3VyZSB0aGUgYXJyb3dzIHdpbGwgZml0IHZlcnRpY2FsbHkgaW4gdGhlIGJvdW5kcwot
ICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0ZDo6bWluKHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRTaXpl
KCkgLyBiYXNlRm9udFNpemUsIGJvdW5kcy5oZWlnaHQoKSAvIChiYXNlQXJyb3dIZWlnaHQgKiAy
ICsgYmFzZVNwYWNlQmV0d2VlbkFycm93cykpOworICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0ZDo6
bWluKHJlbmRlcmVyLnN0eWxlKCkuZm9udFNpemUoKSAvIGJhc2VGb250U2l6ZSwgYm91bmRzLmhl
aWdodCgpIC8gKGJhc2VBcnJvd0hlaWdodCAqIDIgKyBiYXNlU3BhY2VCZXR3ZWVuQXJyb3dzKSk7
CiAgICAgZmxvYXQgY2VudGVyWSA9IGJvdW5kcy55KCkgKyBib3VuZHMuaGVpZ2h0KCkgLyAyLjBm
OwogICAgIGZsb2F0IGFycm93SGVpZ2h0ID0gYmFzZUFycm93SGVpZ2h0ICogZm9udFNjYWxlOwog
ICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIGZvbnRTY2FsZTsKLSAgICBm
bG9hdCBsZWZ0RWRnZSA9IGJvdW5kcy5tYXhYKCkgLSBhcnJvd1BhZGRpbmdSaWdodCAqIHJlbmRl
cmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSAtIGFycm93V2lkdGg7CisgICAgZmxvYXQgbGVm
dEVkZ2UgPSBib3VuZHMubWF4WCgpIC0gYXJyb3dQYWRkaW5nUmlnaHQgKiByZW5kZXJlci5zdHls
ZSgpLmVmZmVjdGl2ZVpvb20oKSAtIGFycm93V2lkdGg7CiAgICAgZmxvYXQgc3BhY2VCZXR3ZWVu
QXJyb3dzID0gYmFzZVNwYWNlQmV0d2VlbkFycm93cyAqIGZvbnRTY2FsZTsKIAotICAgIGlmIChi
b3VuZHMud2lkdGgoKSA8IGFycm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0ICogcmVuZGVyZXIt
PnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKQorICAgIGlmIChib3VuZHMud2lkdGgoKSA8IGFycm93
V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0ICogcmVuZGVyZXIuc3R5bGUoKS5lZmZlY3RpdmVab29t
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogCi0gICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNldEZpbGxDb2xvcihyZW5kZXJlci0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlDb2xvciksIHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yU3BhY2UoKSk7CisgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihyZW5kZXJlci5zdHlsZSgpLnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgcmVuZGVyZXIuc3R5bGUoKS5jb2xvclNw
YWNlKCkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VTdHlsZShOb1N0cm9rZSk7
CiAKICAgICBGbG9hdFBvaW50IGFycm93MVszXTsKQEAgLTEyOTUsNyArMTI5NSw3IEBAIGJvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBjb25zCiAKICAgICAvLyBGSVhNRTogU2hvdWxkIHRoZSBzZXBhcmF0b3Ig
dGhpY2tuZXNzIGFuZCBzcGFjZSBiZSBzY2FsZWQgdXAgYnkgZm9udFNjYWxlPwogICAgIGludCBz
ZXBhcmF0b3JTcGFjZSA9IDI7IC8vIERlbGliZXJhdGVseSBpZ25vcmVzIHpvb20gc2luY2UgaXQg
bG9va3MgbmljZXIgaWYgaXQgc3RheXMgdGhpbi4KLSAgICBpbnQgbGVmdEVkZ2VPZlNlcGFyYXRv
ciA9IHN0YXRpY19jYXN0PGludD4obGVmdEVkZ2UgLSBhcnJvd1BhZGRpbmdMZWZ0ICogcmVuZGVy
ZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsgLy8gRklYTUU6IFJvdW5kPworICAgIGludCBs
ZWZ0RWRnZU9mU2VwYXJhdG9yID0gc3RhdGljX2Nhc3Q8aW50PihsZWZ0RWRnZSAtIGFycm93UGFk
ZGluZ0xlZnQgKiByZW5kZXJlci5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7IC8vIEZJWE1FOiBS
b3VuZD8KIAogICAgIC8vIERyYXcgdGhlIHNlcGFyYXRvciB0byB0aGUgbGVmdCBvZiB0aGUgYXJy
b3dzCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcygxKTsgLy8gRGVs
aWJlcmF0ZWx5IGlnbm9yZXMgem9vbSBzaW5jZSBpdCBsb29rcyBuaWNlciBpZiBpdCBzdGF5cyB0
aGluLgpAQCAtMTM5NiwxMiArMTM5NiwxMiBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RN
ZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bAogICAg
IHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUoY29uc3Qg
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJbnRSZWN0JiByKQordm9pZCBSZW5kZXJUaGVtZU1hYzo6
c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBJbnRS
ZWN0JiByKQogewogICAgIE5TUG9wVXBCdXR0b25DZWxsKiBwb3B1cEJ1dHRvbiA9IHRoaXMtPnBv
cHVwQnV0dG9uKCk7CiAKICAgICAvLyBTZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhl
IHJlY3RhbmdsZSB3ZSdyZSBwYWludGluZyBpbnRvLgotICAgIHNldENvbnRyb2xTaXplKHBvcHVw
QnV0dG9uLCBwb3B1cEJ1dHRvblNpemVzKCksIHIuc2l6ZSgpLCBvLT5zdHlsZSgpLmVmZmVjdGl2
ZVpvb20oKSk7CisgICAgc2V0Q29udHJvbFNpemUocG9wdXBCdXR0b24sIHBvcHVwQnV0dG9uU2l6
ZXMoKSwgci5zaXplKCksIG8uc3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOwogCiAgICAgLy8gVXBk
YXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgogICAgIHVwZGF0ZUFjdGl2ZVN0
YXRlKHBvcHVwQnV0dG9uLCBvKTsKQEAgLTE0MjksMTYgKzE0MjksMTYgQEAgdm9pZCBSZW5kZXJU
aGVtZU1hYzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqIHN0eWxlLAogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBJbnRSZWN0IGJvdW5kcyA9
IHI7Ci0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7Cisg
ICAgZmxvYXQgem9vbUxldmVsID0gby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKICAgICBmbG9h
dCB6b29tZWRUcmFja1dpZHRoID0gdHJhY2tXaWR0aCAqIHpvb21MZXZlbDsKIAotICAgIGlmIChv
LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgby0+c3R5
bGUoKS5hcHBlYXJhbmNlKCkgPT0gIE1lZGlhU2xpZGVyUGFydCkgeworICAgIGlmIChvLnN0eWxl
KCkuYXBwZWFyYW5jZSgpID09ICBTbGlkZXJIb3Jpem9udGFsUGFydCB8fCBvLnN0eWxlKCkuYXBw
ZWFyYW5jZSgpID09ICBNZWRpYVNsaWRlclBhcnQpIHsKICAgICAgICAgYm91bmRzLnNldEhlaWdo
dCh6b29tZWRUcmFja1dpZHRoKTsKICAgICAgICAgYm91bmRzLnNldFkoci55KCkgKyByLmhlaWdo
dCgpIC8gMiAtIHpvb21lZFRyYWNrV2lkdGggLyAyKTsKLSAgICB9IGVsc2UgaWYgKG8tPnN0eWxl
KCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkgeworICAgIH0gZWxzZSBpZiAo
by5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpIHsKICAgICAgICAg
Ym91bmRzLnNldFdpZHRoKHpvb21lZFRyYWNrV2lkdGgpOwogICAgICAgICBib3VuZHMuc2V0WChy
LngoKSArIHIud2lkdGgoKSAvIDIgLSB6b29tZWRUcmFja1dpZHRoIC8gMik7CiAgICAgfQpAQCAt
MTQ1Nyw3ICsxNDU3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUcmFjayhS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmYKICAgICBzdHJ1Y3QgQ0dG
dW5jdGlvbkNhbGxiYWNrcyBtYWluQ2FsbGJhY2tzID0geyAwLCBUcmFja0dyYWRpZW50SW50ZXJw
b2xhdGUsIE5VTEwgfTsKICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gbWFpbkZ1bmN0aW9u
ID0gYWRvcHRDRihDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZtYWlu
Q2FsbGJhY2tzKSk7CiAgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbWFpblNoYWRpbmc7Ci0g
ICAgaWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkKKyAg
ICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCiAgICAg
ICAgIG1haW5TaGFkaW5nID0gYWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENH
UG9pbnRNYWtlKGJvdW5kcy54KCksICBib3VuZHMubWF4WSgpKSwgQ0dQb2ludE1ha2UoYm91bmRz
Lm1heFgoKSwgYm91bmRzLm1heFkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNl
KSk7CiAgICAgZWxzZQogICAgICAgICBtYWluU2hhZGluZyA9IGFkb3B0Q0YoQ0dTaGFkaW5nQ3Jl
YXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3VuZHMueCgpLCAgYm91bmRzLnkoKSksIENH
UG9pbnRNYWtlKGJvdW5kcy54KCksIGJvdW5kcy5tYXhZKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCks
IGZhbHNlLCBmYWxzZSkpOwpAQCAtMTQ3OCw5ICsxNDc4LDkgQEAgdm9pZCBSZW5kZXJUaGVtZU1h
Yzo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBS
ZW5kZXIKIAogY29uc3QgZmxvYXQgdmVydGljYWxTbGlkZXJIZWlnaHRQYWRkaW5nID0gMC4xZjsK
IAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIE5TU2xpZGVy
Q2VsbCogc2xpZGVyVGh1bWJDZWxsID0gby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVy
VGh1bWJWZXJ0aWNhbFBhcnQKKyAgICBOU1NsaWRlckNlbGwqIHNsaWRlclRodW1iQ2VsbCA9IG8u
c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQKICAgICAgICAg
PyBzbGlkZXJUaHVtYlZlcnRpY2FsKCkKICAgICAgICAgOiBzbGlkZXJUaHVtYkhvcml6b250YWwo
KTsKIApAQCAtMTQ4OSwxOSArMTQ4OSwyMCBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNs
aWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZgogICAg
IC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KICAgICB1cGRhdGVB
Y3RpdmVTdGF0ZShzbGlkZXJUaHVtYkNlbGwsIG8pOwogICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShz
bGlkZXJUaHVtYkNlbGwsIG8pOwotICAgIEVsZW1lbnQqIGZvY3VzRGVsZWdhdGUgPSAoby0+bm9k
ZSgpICYmIG8tPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSA/IHRvRWxlbWVudChvLT5ub2RlKCkp
LT5mb2N1c0RlbGVnYXRlKCkgOiAwOwotICAgIHVwZGF0ZUZvY3VzZWRTdGF0ZShzbGlkZXJUaHVt
YkNlbGwsIGZvY3VzRGVsZWdhdGUgPyBmb2N1c0RlbGVnYXRlLT5yZW5kZXJlcigpIDogMCk7Cisg
ICAgICAgIEVsZW1lbnQqIGZvY3VzRGVsZWdhdGUgPSAoby5ub2RlKCkgJiYgby5ub2RlKCktPmlz
RWxlbWVudE5vZGUoKSkgPyB0b0VsZW1lbnQoby5ub2RlKCkpLT5mb2N1c0RlbGVnYXRlKCkgOiAw
OworICAgIGlmIChmb2N1c0RlbGVnYXRlKQorICAgICAgICB1cGRhdGVGb2N1c2VkU3RhdGUoc2xp
ZGVyVGh1bWJDZWxsLCAqZm9jdXNEZWxlZ2F0ZS0+cmVuZGVyZXIoKSk7CiAKICAgICAvLyBVcGRh
dGUgdGhlIHByZXNzZWQgc3RhdGUgdXNpbmcgdGhlIE5TQ2VsbCB0cmFja2luZyBtZXRob2RzLCBz
aW5jZSB0aGF0J3MgaG93IE5TU2xpZGVyQ2VsbCBrZWVwcyB0cmFjayBvZiBpdC4KICAgICBib29s
IG9sZFByZXNzZWQ7Ci0gICAgaWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRo
dW1iVmVydGljYWxQYXJ0KQorICAgIGlmIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRl
clRodW1iVmVydGljYWxQYXJ0KQogICAgICAgICBvbGRQcmVzc2VkID0gbV9pc1NsaWRlclRodW1i
VmVydGljYWxQcmVzc2VkOwogICAgIGVsc2UKICAgICAgICAgb2xkUHJlc3NlZCA9IG1faXNTbGlk
ZXJUaHVtYkhvcml6b250YWxQcmVzc2VkOwogCiAgICAgYm9vbCBwcmVzc2VkID0gaXNQcmVzc2Vk
KG8pOwogCi0gICAgaWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVy
dGljYWxQYXJ0KQorICAgIGlmIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1i
VmVydGljYWxQYXJ0KQogICAgICAgICBtX2lzU2xpZGVyVGh1bWJWZXJ0aWNhbFByZXNzZWQgPSBw
cmVzc2VkOwogICAgIGVsc2UKICAgICAgICAgbV9pc1NsaWRlclRodW1iSG9yaXpvbnRhbFByZXNz
ZWQgPSBwcmVzc2VkOwpAQCAtMTUxNSwxMSArMTUxNiwxMSBAQCBib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZgogCiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IHI7CiAgICAgLy8gTWFrZSB0aGUgaGVpZ2h0
IG9mIHRoZSB2ZXJ0aWNhbCBzbGlkZXIgc2xpZ2h0bHkgbGFyZ2VyIHNvIE5TU2xpZGVyQ2VsbCB3
aWxsIGRyYXcgYSB2ZXJ0aWNhbCBzbGlkZXIuCi0gICAgaWYgKG8tPnN0eWxlKCkuYXBwZWFyYW5j
ZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQotICAgICAgICBib3VuZHMuc2V0SGVpZ2h0
KGJvdW5kcy5oZWlnaHQoKSArIHZlcnRpY2FsU2xpZGVySGVpZ2h0UGFkZGluZyAqIG8tPnN0eWxl
KCkuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBT
bGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKKyAgICAgICAgYm91bmRzLnNldEhlaWdodChib3VuZHMu
aGVpZ2h0KCkgKyB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgKiBvLnN0eWxlKCkuZWZmZWN0
aXZlWm9vbSgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigq
cGFpbnRJbmZvLmNvbnRleHQpOwotICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCkuZWZm
ZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21MZXZlbCA9IG8uc3R5bGUoKS5lZmZlY3RpdmVa
b29tKCk7CiAKICAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gYm91bmRzOwogICAgIGlmICh6
b29tTGV2ZWwgIT0gMS4wZikgewpAQCAtMTUzNiw3ICsxNTM3LDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmll
bGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKIHsKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxD
b250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNo
ID0gdGhpcy0+c2VhcmNoKCk7CkBAIC0xNTQ1LDcgKzE1NDYsNyBAQCBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZgogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWlu
dEluZm8uY29udGV4dCk7CiAKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLmVmZmVj
dGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLnN0eWxlKCkuZWZmZWN0aXZlWm9v
bSgpOwogCiAgICAgSW50UmVjdCB1bnpvb21lZFJlY3QgPSByOwogCkBAIC0xNTY4LDExICsxNTY5
LDExIEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBJbnRSZWN0JikKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaENlbGxTdGF0ZShj
b25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IEludFJlY3QmKQogewogICAgIE5TU2VhcmNoRmll
bGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIAotICAgIFtzZWFyY2ggc2V0Q29udHJv
bFNpemU6Y29udHJvbFNpemVGb3JGb250KCZvLT5zdHlsZSgpKV07CisgICAgW3NlYXJjaCBzZXRD
b250cm9sU2l6ZTpjb250cm9sU2l6ZUZvckZvbnQoJm8uc3R5bGUoKSldOwogCiAgICAgLy8gVXBk
YXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgogICAgIHVwZGF0ZUFjdGl2ZVN0
YXRlKHNlYXJjaCwgbyk7CkBAIC0xNjI3LDE3ICsxNjI4LDE3IEBAIHZvaWQgUmVuZGVyVGhlbWVN
YWM6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
UmVuZGVyCiAgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJPYmpl
Y3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewot
ICAgIEVsZW1lbnQqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dIb3N0KCk7CisgICAgRWxlbWVu
dCogaW5wdXQgPSBvLm5vZGUoKS0+c2hhZG93SG9zdCgpOwogICAgIGlmICghaW5wdXQpCi0gICAg
ICAgIGlucHV0ID0gdG9FbGVtZW50KG8tPm5vZGUoKSk7CisgICAgICAgIGlucHV0ID0gdG9FbGVt
ZW50KG8ubm9kZSgpKTsKIAogICAgIGlmICghaW5wdXQtPnJlbmRlcmVyKCktPmlzQm94KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBs
b2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHNldFNlYXJjaENlbGxTdGF0ZShp
bnB1dC0+cmVuZGVyZXIoKSwgcik7CisgICAgc2V0U2VhcmNoQ2VsbFN0YXRlKCppbnB1dC0+cmVu
ZGVyZXIoKSwgcik7CiAKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2Vh
cmNoKCk7CiAKQEAgLTE2NTAsNyArMTY1MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50
U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluCiAK
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250
ZXh0KTsKIAotICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgp
OworICAgIGZsb2F0IHpvb21MZXZlbCA9IG8uc3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CiAKICAg
ICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIGNhbmNlbEJ1dHRvblJlY3RGb3JCb3Vu
ZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+cGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCgp
KV07CiAKQEAgLTE2NjMsNyArMTY2NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluCiAgICAg
bG9jYWxCb3VuZHMuc2V0WChsb2NhbEJvdW5kcy54KCkgLSBzcGFjZVRvUmlnaHRPZkNhbmNlbEJ1
dHRvbik7CiAjZW5kaWYKIAotICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0
KGlucHV0LT5yZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7CisgICAgbG9jYWxCb3VuZHMg
PSBjb252ZXJ0VG9QYWludGluZ1JlY3QoKmlucHV0LT5yZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5k
cywgcik7CiAKICAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0KGxvY2FsQm91bmRzKTsKICAgICBp
ZiAoem9vbUxldmVsICE9IDEuMGYpIHsKQEAgLTE3MDgsNyArMTcwOSw3IEBAIHZvaWQgUmVuZGVy
VGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyCiAgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQorYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQogewogICAgIHJldHVybiBmYWxzZTsK
IH0KQEAgLTE3MjEsMTYgKzE3MjIsMTYgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwKICAgICBz
dHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
CiB7Ci0gICAgTm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0hvc3QoKTsKKyAgICBOb2Rl
KiBpbnB1dCA9IG8ubm9kZSgpLT5zaGFkb3dIb3N0KCk7CiAgICAgaWYgKCFpbnB1dCkKLSAgICAg
ICAgaW5wdXQgPSBvLT5ub2RlKCk7CisgICAgICAgIGlucHV0ID0gby5ub2RlKCk7CiAgICAgaWYg
KCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29u
dGV4dCk7Ci0gICAgc2V0U2VhcmNoQ2VsbFN0YXRlKGlucHV0LT5yZW5kZXJlcigpLCByKTsKKyAg
ICBzZXRTZWFyY2hDZWxsU3RhdGUoKmlucHV0LT5yZW5kZXJlcigpLCByKTsKIAogICAgIE5TU2Vh
cmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIApAQCAtMTc0MCw3ICsxNzQx
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uUGFydChSZW5kZXJPYmplY3QqIG8sIGNvbnMKICAgICB1cGRhdGVBY3RpdmVTdGF0ZShbc2Vh
cmNoIHNlYXJjaEJ1dHRvbkNlbGxdLCBvKTsKIAogICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9
IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJv
eCgpLT5waXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0KCkpXTsKLSAgICBsb2NhbEJvdW5kcyA9IGNv
bnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIp
OworICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KCppbnB1dC0+cmVuZGVy
ZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOwogCiAgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2Vs
bF0gZHJhd1dpdGhGcmFtZTpsb2NhbEJvdW5kcyBpblZpZXc6ZG9jdW1lbnRWaWV3Rm9yKG8pXTsK
ICAgICBbW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxsXSBzZXRDb250cm9sVmlldzpuaWxdOwpAQCAt
MTc1NiwxNiArMTc1NywxNiBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyUwogICAgIHN0eWxlLT5z
ZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIE5vZGUqIGlucHV0ID0g
by0+bm9kZSgpLT5zaGFkb3dIb3N0KCk7CisgICAgTm9kZSogaW5wdXQgPSBvLm5vZGUoKS0+c2hh
ZG93SG9zdCgpOwogICAgIGlmICghaW5wdXQpCi0gICAgICAgIGlucHV0ID0gby0+bm9kZSgpOwor
ICAgICAgICBpbnB1dCA9IG8ubm9kZSgpOwogICAgIGlmICghaW5wdXQtPnJlbmRlcmVyKCktPmlz
Qm94KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNz
Q29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHNldFNlYXJjaENl
bGxTdGF0ZShpbnB1dC0+cmVuZGVyZXIoKSwgcik7CisgICAgc2V0U2VhcmNoQ2VsbFN0YXRlKCpp
bnB1dC0+cmVuZGVyZXIoKSwgcik7CiAKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0g
dGhpcy0+c2VhcmNoKCk7CiAKQEAgLTE3NzUsMTAgKzE3NzYsMTAgQEAgYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEkKICAgICAgICAgW3NlYXJjaCBzZXRTZWFyY2hNZW51VGVtcGxhdGU6c2VhcmNoTWVu
dVRlbXBsYXRlKCldOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KCpwYWludEluZm8uY29udGV4dCk7Ci0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS5l
ZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9vbUxldmVsID0gby5zdHlsZSgpLmVmZmVjdGl2
ZVpvb20oKTsKIAogICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0
dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5waXhlbFNuYXBwZWRC
b3JkZXJCb3hSZWN0KCkpXTsKLSAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVj
dChpbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOworICAgIGxvY2FsQm91bmRz
ID0gY29udmVydFRvUGFpbnRpbmdSZWN0KCppbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxCb3Vu
ZHMsIHIpOwogCiAgICAgSW50UmVjdCB1bnpvb21lZFJlY3QobG9jYWxCb3VuZHMpOwogICAgIGlm
ICh6b29tTGV2ZWwgIT0gMS4wZikgewpAQCAtMTc5NSwyNiArMTc5NiwyNiBAQCBib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYpCitib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JikKIHsKICAgICBpZiAocGFp
bnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgaWYgKCFvLT5pc1JlbmRlckJsb2NrKCkpCisgICAgaWYgKCFvLmlzUmVu
ZGVyQmxvY2soKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZW5kZXJCbG9jayogcmVu
ZGVyQmxvY2sgPSB0b1JlbmRlckJsb2NrKG8pOworICAgIGNvbnN0IFJlbmRlckJsb2NrJiByZW5k
ZXJCbG9jayA9ICp0b1JlbmRlckJsb2NrKCZvKTsKIAotICAgIExheW91dFVuaXQgY29udGVudFdp
ZHRoID0gcmVuZGVyQmxvY2stPmNvbnRlbnRXaWR0aCgpOwotICAgIExheW91dFVuaXQgY29udGVu
dEhlaWdodCA9IHJlbmRlckJsb2NrLT5jb250ZW50SGVpZ2h0KCk7CisgICAgTGF5b3V0VW5pdCBj
b250ZW50V2lkdGggPSByZW5kZXJCbG9jay5jb250ZW50V2lkdGgoKTsKKyAgICBMYXlvdXRVbml0
IGNvbnRlbnRIZWlnaHQgPSByZW5kZXJCbG9jay5jb250ZW50SGVpZ2h0KCk7CiAgICAgaWYgKCFj
b250ZW50V2lkdGggfHwgIWNvbnRlbnRIZWlnaHQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CiAKICAgICBM
YXlvdXRTaXplIGNvbnRlbnRTaXplKGNvbnRlbnRXaWR0aCwgY29udGVudEhlaWdodCk7Ci0gICAg
TGF5b3V0UG9pbnQgY29udGVudExvY2F0aW9uID0gcmVuZGVyQmxvY2stPmxvY2F0aW9uKCk7Ci0g
ICAgY29udGVudExvY2F0aW9uLm1vdmUocmVuZGVyQmxvY2stPmJvcmRlckxlZnQoKSArIHJlbmRl
ckJsb2NrLT5wYWRkaW5nTGVmdCgpLCByZW5kZXJCbG9jay0+Ym9yZGVyVG9wKCkgKyByZW5kZXJC
bG9jay0+cGFkZGluZ1RvcCgpKTsKKyAgICBMYXlvdXRQb2ludCBjb250ZW50TG9jYXRpb24gPSBy
ZW5kZXJCbG9jay5sb2NhdGlvbigpOworICAgIGNvbnRlbnRMb2NhdGlvbi5tb3ZlKHJlbmRlckJs
b2NrLmJvcmRlckxlZnQoKSArIHJlbmRlckJsb2NrLnBhZGRpbmdMZWZ0KCksIHJlbmRlckJsb2Nr
LmJvcmRlclRvcCgpICsgcmVuZGVyQmxvY2sucGFkZGluZ1RvcCgpKTsKIAogICAgIExheW91dFJl
Y3QgcmVjdChjb250ZW50TG9jYXRpb24sIGNvbnRlbnRTaXplKTsKICAgICBJbnRSZWN0IGFsaWdu
ZWRSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChyZWN0KTsKQEAgLTE4MjUsMTAgKzE4MjYsMTAg
QEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEkKICAgICAvLyBmcm9tIG91ciBub2RlLiBBc3N1bWlu
ZyB0aGlzIG5vZGUgaXMgdGhlIHBsdWdpbiBvdmVybGF5IGVsZW1lbnQsIHdlIHNob3VsZCBnZXQg
dG8gdGhlCiAgICAgLy8gcGx1Z2luIGl0c2VsZiBieSBhc2tpbmcgZm9yIHRoZSBzaGFkb3cgcm9v
dCBwYXJlbnQsIGFuZCB0aGVuIGl0cyBwYXJlbnQuCiAKLSAgICBpZiAoIXJlbmRlckJsb2NrLT5l
bGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSkKKyAgICBpZiAoIXJlbmRlckJsb2NrLmVsZW1lbnQo
KS0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEhUTUxFbGVt
ZW50KiBwbHVnSW5PdmVybGF5ID0gdG9IVE1MRWxlbWVudChyZW5kZXJCbG9jay0+ZWxlbWVudCgp
KTsKKyAgICBIVE1MRWxlbWVudCogcGx1Z0luT3ZlcmxheSA9IHRvSFRNTEVsZW1lbnQocmVuZGVy
QmxvY2suZWxlbWVudCgpKTsKICAgICBFbGVtZW50KiBwYXJlbnQgPSBwbHVnSW5PdmVybGF5LT5w
YXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CiAgICAgd2hpbGUgKHBhcmVudCAmJiAhcGFyZW50
LT5pc1BsdWdpbkVsZW1lbnQoKSkKICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPclNo
YWRvd0hvc3RFbGVtZW50KCk7CkBAIC0xODUyLDcgKzE4NTMsNyBAQCBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SQogCiAgICAgLy8gV2UgY291bGQgZHJhdyB0aGUgc25hcHNob3Qgd2l0aCB0aGF0IGNv
b3JkaW5hdGVzLCBidXQgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUKICAgICAvLyBpc24ndCBh
IGNvbXBvc2l0ZWQgbGF5ZXIgYmV0d2VlbiB1cyBhbmQgdGhlIHBsdWdJblJlbmRlcmVyLgotICAg
IFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gobyk7CisgICAgY29uc3QgUmVuZGVy
Qm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveCgmbyk7CiAgICAgd2hpbGUgKHJlbmRlckJveCAh
PSBwbHVnSW5SZW5kZXJlcikgewogICAgICAgICBpZiAocmVuZGVyQm94LT5oYXNMYXllcigpICYm
IHJlbmRlckJveC0+bGF5ZXIoKSAmJiByZW5kZXJCb3gtPmxheWVyKCktPmlzQ29tcG9zaXRlZCgp
KSB7CiAgICAgICAgICAgICBzbmFwc2hvdEFic1BvcyA9IC1yZW5kZXJCb3gtPmxvY2F0aW9uKCk7
CkBAIC0yMDA0LDcgKzIwMDUsNyBAQCBOU1NlcnZpY2VzUm9sbG92ZXJCdXR0b25DZWxsKiBSZW5k
ZXJUaGVtZU1hYzo6c2VydmljZXNSb2xsb3ZlckJ1dHRvbkNlbGwoKSBjb25zdAogI2VuZGlmCiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50SW1hZ2VDb250cm9sc0J1dHRvbihSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50SW1hZ2VDb250cm9sc0J1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50
UGhhc2VCbG9ja0JhY2tncm91bmQpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjAyOSw3ICsy
MDMwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRJbWFnZUNvbnRyb2xzQnV0dG9uKFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
SW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6aW1hZ2VDb250cm9sc0J1dHRvblNpemUoY29uc3QgUmVu
ZGVyT2JqZWN0KikgY29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWVNYWM6OmltYWdlQ29udHJvbHNC
dXR0b25TaXplKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0CiB7CiAjaWYgSEFWRShBUFBLSVRf
SU1BR0VfQ09OVFJPTFNfU1VQUE9SVCkKICAgICByZXR1cm4gSW50U2l6ZShzZXJ2aWNlc1JvbGxv
dmVyQnV0dG9uQ2VsbCgpLmNlbGxTaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVTYWZhcmkuY3BwCmluZGV4IDA3YWFiZjc4NmQ5OTEzMTlmMDA3OTA0MGFiN2U5
ODdmOGQxYzU4YTguLjgzMjk3MzM1NzQ1N2U2OTE1NDE5Y2UxYWYxZTYyYmM0Y2QzMzFiOWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcApAQCAt
MTE1LDcgKzExNSw3IEBAIHN0YXRpYyBSR0JBMzIgbWFrZVJHQkFGcm9tQ0dDb2xvcihDR0NvbG9y
UmVmIGNvbG9yKQogICAgIHJldHVybiBtYWtlUkdCQSgyNTUgKiBjb21wb25lbnRzWzBdLCAyNTUg
KiBjb21wb25lbnRzWzFdLCAyNTUgKiBjb21wb25lbnRzWzJdLCAyNTUgKiBjb21wb25lbnRzWzNd
KTsKIH0KIAotVGhlbWVDb250cm9sU3RhdGUgUmVuZGVyVGhlbWVTYWZhcmk6OmRldGVybWluZVN0
YXRlKFJlbmRlck9iamVjdCogbykgY29uc3QKK1RoZW1lQ29udHJvbFN0YXRlIFJlbmRlclRoZW1l
U2FmYXJpOjpkZXRlcm1pbmVTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7CiAg
ICAgVGhlbWVDb250cm9sU3RhdGUgcmVzdWx0ID0gMDsKICAgICBpZiAoaXNBY3RpdmUobykpCkBA
IC0yNjQsMTEgKzI2NCwxMSBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjppc0NvbnRyb2xTdHls
ZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYQogICAgIHJldHVybiBS
ZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJh
Y2tncm91bmRDb2xvcik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFJlcGFp
bnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcikKK3ZvaWQgUmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgSW50UmVj
dCYgcikKIHsKLSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JG
b250KCZvLT5zdHlsZSgpKTsKKyAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJv
bFNpemVGb3JGb250KCZvLnN0eWxlKCkpOwogCi0gICAgc3dpdGNoIChvLT5zdHlsZSgpLmFwcGVh
cmFuY2UoKSkgeworICAgIHN3aXRjaCAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgewogICAgICAg
ICBjYXNlIENoZWNrYm94UGFydDogewogICAgICAgICAgICAgLy8gV2UgaW5mbGF0ZSB0aGUgcmVj
dCBhcyBuZWVkZWQgdG8gYWNjb3VudCBmb3IgcGFkZGluZyBpbmNsdWRlZCBpbiB0aGUgY2VsbCB0
byBhY2NvbW1vZGF0ZSB0aGUgY2hlY2tib3gKICAgICAgICAgICAgIC8vIHNoYWRvdyIgYW5kIHRo
ZSBjaGVjay4gIFdlIGRvbid0IGNvbnNpZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91bmRzIG9mIHRo
ZSBjb250cm9sIGluIFdlYktpdC4KQEAgLTMxNywyNiArMzE3LDI2IEBAIEludFJlY3QgUmVuZGVy
VGhlbWVTYWZhcmk6OmluZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUm
IHNpemUsIGNvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW50IFJlbmRlclRoZW1lU2FmYXJp
OjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2ludCBSZW5k
ZXJUaGVtZVNhZmFyaTo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNv
bnN0CiB7Ci0gICAgaWYgKCFvLT5pc0JveCgpKQorICAgIGlmICghby5pc0JveCgpKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIGlmIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBDaGVja2Jv
eFBhcnQgfHwgby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KSB7Ci0gICAgICAg
IGNvbnN0IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gobyk7CisgICAgaWYgKG8uc3R5bGUo
KS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0IHx8IG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkg
PT0gUmFkaW9QYXJ0KSB7CisgICAgICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJC
b3goJm8pOwogICAgICAgICByZXR1cm4gYm94LT5tYXJnaW5Ub3AoKSArIGJveC0+aGVpZ2h0KCkg
LSAyOyAvLyBUaGUgYmFzZWxpbmUgaXMgMnB4IHVwIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgY2hl
Y2tib3gvcmFkaW8gaW4gQXBwS2l0LgogICAgIH0KIAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6
YmFzZWxpbmVQb3NpdGlvbihvKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJv
bFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAorYm9vbCBSZW5kZXJU
aGVtZVNhZmFyaTo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBj
b25zdAogewogICAgIGlmICghaXNFbmFibGVkKG8pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAvLyBDaGVja2JveGVzIG9ubHkgaGF2ZSB0aW50IHdoZW4gY2hlY2tlZC4KLSAgICBpZiAo
by0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0KQorICAgIGlmIChvLnN0eWxl
KCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydCkKICAgICAgICAgcmV0dXJuIGlzQ2hlY2tl
ZChvKTsKIAogICAgIC8vIEZvciBub3cgYXNzdW1lIG90aGVyIGNvbnRyb2xzIGhhdmUgdGludCBp
ZiBlbmFibGVkLgpAQCAtNDE2LDExICs0MTYsMTEgQEAgTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVt
ZVNhZmFyaTo6Y29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlKiBzdHlsZSkgY28K
ICAgICByZXR1cm4gTlNNaW5pQ29udHJvbFNpemU7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVTYWZh
cmk6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50Q2hl
Y2tib3goY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwog
Ci0gICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udCgmby0+
c3R5bGUoKSk7CisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9y
Rm9udCgmby5zdHlsZSgpKTsKIAogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0ZVJl
Y3QociwgY2hlY2tib3hTaXplcygpW2NvbnRyb2xTaXplXSwgY2hlY2tib3hNYXJnaW5zKGNvbnRy
b2xTaXplKSk7ICAKICAgICBwYWludFRoZW1lUGFydChTYWZhcmlUaGVtZTo6Q2hlY2tib3hQYXJ0
LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGluZmxhdGVkUmVjdCwgY29u
dHJvbFNpemUsIGRldGVybWluZVN0YXRlKG8pKTsKQEAgLTQ1NSwxMSArNDU1LDExIEBAIHZvaWQg
UmVuZGVyVGhlbWVTYWZhcmk6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0CiAgICAgc2V0U2l6ZUZyb21Gb250KHN0eWxlLCBjaGVja2JveFNpemVzKCkpOwogfQogCi1i
b29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1l
U2FmYXJpOjpwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgQVNTRVJUKFNhZmFyaVRoZW1l
TGlicmFyeSgpKTsKIAotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6
ZUZvckZvbnQoJm8tPnN0eWxlKCkpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBj
b250cm9sU2l6ZUZvckZvbnQoJm8uc3R5bGUoKSk7CiAgCiAgICAgSW50UmVjdCBpbmZsYXRlZFJl
Y3QgPSBpbmZsYXRlUmVjdChyLCByYWRpb1NpemVzKClbY29udHJvbFNpemVdLCByYWRpb01hcmdp
bnMoY29udHJvbFNpemUpKTsgICAgCiAgICAgcGFpbnRUaGVtZVBhcnQoUmFkaW9CdXR0b25QYXJ0
LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGluZmxhdGVkUmVjdCwgY29u
dHJvbFNpemUsIGRldGVybWluZVN0YXRlKG8pKTsKQEAgLTU3OSw3ICs1NzksNyBAQCB2b2lkIFJl
bmRlclRoZW1lU2FmYXJpOjpzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
ICAgICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIGJ1dHRvblNpemVzKCkpOwogfQogCi1ib29sIFJl
bmRlclRoZW1lU2FmYXJpOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVNhZmFy
aTo6cGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJy
YXJ5KCkpOwogCkBAIC02MTIsNyArNjEyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFp
bnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50VGV4dEZp
ZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFRleHRGaWVsZChjb25zdCBS
ZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByKQogewogICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7CiAKQEAgLTYyNCw3ICs2
MjQsNyBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZQogewogfQogCi1ib29sIFJlbmRlclRoZW1l
U2FmYXJpOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lU2Fm
YXJpOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7ICAgIAogI2lmIGRlZmlu
ZWQoU0FGQVJJX1RIRU1FX1ZFUlNJT04pICYmIFNBRkFSSV9USEVNRV9WRVJTSU9OID49IDEKICAg
ICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwpAQCAtNjQwLDcgKzY0MCw3IEBAIGJvb2wg
UmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBQYWludEluZm8mCiAjZW5kaWYKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6
cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRUZXh0QXJl
YShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByKQogewogICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7CiAKQEAg
LTY4MCw3ICs2ODAsNyBAQCBjb25zdCBpbnQqIFJlbmRlclRoZW1lU2FmYXJpOjpwb3B1cEJ1dHRv
blBhZGRpbmcoTlNDb250cm9sU2l6ZSBzaXplKSBjb25zdAogICAgIHJldHVybiBwYWRkaW5nW3Np
emVdOwogfQogCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0KFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBS
ZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNv
bnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBBU1NFUlQoU2Fm
YXJpVGhlbWVMaWJyYXJ5KCkpOwogCkBAIC02OTAsNyArNjkwLDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZVNhZmFyaTo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
aW5mbywgY28KICAgICBzaXplLnNldFdpZHRoKHIud2lkdGgoKSk7CiAKICAgICAvLyBOb3cgaW5m
bGF0ZSBpdCB0byBhY2NvdW50IGZvciB0aGUgc2hhZG93LgotICAgIGlmIChyLndpZHRoKCkgPj0g
bWluaW11bU1lbnVMaXN0U2l6ZSgmby0+c3R5bGUoKSkpCisgICAgaWYgKHIud2lkdGgoKSA+PSBt
aW5pbXVtTWVudUxpc3RTaXplKCZvLnN0eWxlKCkpKQogICAgICAgICBpbmZsYXRlZFJlY3QgPSBp
bmZsYXRlUmVjdChpbmZsYXRlZFJlY3QsIHNpemUsIHBvcHVwQnV0dG9uTWFyZ2lucyhjb250cm9s
U2l6ZSkpOwogCiAgICAgcGFpbnRUaGVtZVBhcnQoRHJvcERvd25CdXR0b25QYXJ0LCBpbmZvLmNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBpbmZsYXRlZFJlY3QsIGNvbnRyb2xTaXplLCBkZXRl
cm1pbmVTdGF0ZShvKSk7CkBAIC03NDksNyArNzQ5LDcgQEAgc3RhdGljIHZvaWQgVHJhY2tHcmFk
aWVudEludGVycG9sYXRlKHZvaWQqIGluZm8sIGNvbnN0IENHRmxvYXQqIGluRGF0YSwgQ0dGbG9h
dCoKICAgICAgICAgb3V0RGF0YVtpXSA9ICgxLjBmIC0gYSkgKiBkYXJrW2ldICsgYSAqIGxpZ2h0
W2ldOwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0QnV0dG9uR3Jh
ZGllbnRzKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0QnV0dG9u
R3JhZGllbnRzKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKHIuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CkBAIC03NTgsNyArNzU4LDcgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRN
ZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW4KIAogICAg
IHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAKLSAgICBGbG9hdFJvdW5kZWRSZWN0IGJvdW5k
ID0gRmxvYXRSb3VuZGVkUmVjdChvLT5zdHlsZSgpLmdldFJvdW5kZWRCb3JkZXJGb3IocikpOwor
ICAgIEZsb2F0Um91bmRlZFJlY3QgYm91bmQgPSBGbG9hdFJvdW5kZWRSZWN0KG8uc3R5bGUoKS5n
ZXRSb3VuZGVkQm9yZGVyRm9yKHIpKTsKICAgICBpbnQgcmFkaXVzID0gYm91bmQucmFkaWkoKS50
b3BMZWZ0KCkud2lkdGgoKTsKIAogICAgIENHQ29sb3JTcGFjZVJlZiBjc3BhY2UgPSBkZXZpY2VS
R0JDb2xvclNwYWNlUmVmKCk7CkBAIC04MTAsMTcgKzgxMCwxNyBAQCB2b2lkIFJlbmRlclRoZW1l
U2FmYXJpOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbgogICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKLWJvb2wgUmVu
ZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0
aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBJbnRSZWN0IGJvdW5kcyA9IEludFJl
Y3QocmVjdC54KCkgKyByZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkgKyByZW5kZXJlci0+c3R5bGUoKS5ib3Jk
ZXJUb3BXaWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LndpZHRoKCkg
LSByZW5kZXJlci0+c3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSAtIHJlbmRlcmVyLT5zdHlsZSgp
LmJvcmRlclJpZ2h0V2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5o
ZWlnaHQoKSAtIHJlbmRlcmVyLT5zdHlsZSgpLmJvcmRlclRvcFdpZHRoKCkgLSByZW5kZXJlci0+
c3R5bGUoKS5ib3JkZXJCb3R0b21XaWR0aCgpKTsKKyAgICBJbnRSZWN0IGJvdW5kcyA9IEludFJl
Y3QocmVjdC54KCkgKyByZW5kZXJlci5zdHlsZSgpLmJvcmRlckxlZnRXaWR0aCgpLAorICAgICAg
ICByZWN0LnkoKSArIHJlbmRlcmVyLnN0eWxlKCkuYm9yZGVyVG9wV2lkdGgoKSwKKyAgICAgICAg
cmVjdC53aWR0aCgpIC0gcmVuZGVyZXIuc3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSAtIHJlbmRl
cmVyLnN0eWxlKCkuYm9yZGVyUmlnaHRXaWR0aCgpLAorICAgICAgICByZWN0LmhlaWdodCgpIC0g
cmVuZGVyZXIuc3R5bGUoKS5ib3JkZXJUb3BXaWR0aCgpIC0gcmVuZGVyZXIuc3R5bGUoKS5ib3Jk
ZXJCb3R0b21XaWR0aCgpKTsKICAgICAvLyBEcmF3IHRoZSBncmFkaWVudHMgdG8gZ2l2ZSB0aGUg
c3R5bGVkIHBvcHVwIG1lbnUgYSBidXR0b24gYXBwZWFyYW5jZQogICAgIHBhaW50TWVudUxpc3RC
dXR0b25HcmFkaWVudHMocmVuZGVyZXIsIHBhaW50SW5mbywgYm91bmRzKTsKIAogICAgIC8vIFNp
bmNlIHdlIGFjdHVhbGx5IGtub3cgdGhlIHNpemUgb2YgdGhlIGNvbnRyb2wgaGVyZSwgd2UgcmVz
dHJpY3QgdGhlIGZvbnQgc2NhbGUgdG8gbWFrZSBzdXJlIHRoZSBhcnJvdyB3aWxsIGZpdCB2ZXJ0
aWNhbGx5IGluIHRoZSBib3VuZHMKLSAgICBmbG9hdCBmb250U2NhbGUgPSBtaW4ocmVuZGVyZXIt
PnN0eWxlKCkuZm9udFNpemUoKSAvIGJhc2VGb250U2l6ZSwgYm91bmRzLmhlaWdodCgpIC8gYmFz
ZUFycm93SGVpZ2h0KTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBtaW4ocmVuZGVyZXIuc3R5bGUo
KS5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplLCBib3VuZHMuaGVpZ2h0KCkgLyBiYXNlQXJyb3dI
ZWlnaHQpOwogICAgIGZsb2F0IGNlbnRlclkgPSBib3VuZHMueSgpICsgYm91bmRzLmhlaWdodCgp
IC8gMi4wZjsKICAgICBmbG9hdCBhcnJvd0hlaWdodCA9IGJhc2VBcnJvd0hlaWdodCAqIGZvbnRT
Y2FsZTsKICAgICBmbG9hdCBhcnJvd1dpZHRoID0gYmFzZUFycm93V2lkdGggKiBmb250U2NhbGU7
CkBAIC04MzEsNyArODMxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZW51TGlz
dEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGMKIAogICAgIHBhaW50
SW5mby5jb250ZXh0LT5zYXZlKCk7CiAKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENv
bG9yKHJlbmRlcmVyLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNv
bG9yKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZp
bGxDb2xvcihyZW5kZXJlci5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUNvbG9yKSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNl
dFN0cm9rZUNvbG9yKE5vU3Ryb2tlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIAogICAgIEZsb2F0
UG9pbnQgYXJyb3dbM107CkBAIC05NTYsMjEgKzk1NiwxNSBAQCBpbnQgUmVuZGVyVGhlbWVTYWZh
cmk6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogY29uc3Qg
aW50IHRyYWNrV2lkdGggPSA1OwogY29uc3QgaW50IHRyYWNrUmFkaXVzID0gMjsKIAotYm9vbCBS
ZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVt
ZVNhZmFyaTo6cGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIEludFNpemUgcmFk
aXVzKHRyYWNrUmFkaXVzLCB0cmFja1JhZGl1cyk7CiAgICAgRmxvYXRSb3VuZGVkUmVjdCBib3Vu
ZHMociwgcmFkaXVzLCByYWRpdXMsIHJhZGl1cywgcmFkaXVzKTsKIAotICAgIGlmIChvLT5zdHls
ZSgpLmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQpCi0gICAgICAgIGJvdW5k
cy5zZXRSZWN0KEludFJlY3Qoci54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ci55KCkgKyByLmhlaWdodCgpIC8gMiAtIHRyYWNrV2lkdGggLyAyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHIud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0cmFja1dpZHRoKSk7Ci0gICAgZWxzZSBpZiAoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0g
U2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAgICBib3VuZHMuc2V0UmVjdChJbnRSZWN0KHIueCgp
ICsgci53aWR0aCgpIC8gMiAtIHRyYWNrV2lkdGggLyAyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHIueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrV2lk
dGgsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuaGVpZ2h0KCkpKTsKKyAgICBp
ZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQpCisgICAg
ICAgIGJvdW5kcy5zZXRSZWN0KEludFJlY3Qoci54KCksIHIueSgpICsgci5oZWlnaHQoKSAvIDIg
LSB0cmFja1dpZHRoIC8gMiwgci53aWR0aCgpLCB0cmFja1dpZHRoKSk7CisgICAgZWxzZSBpZiAo
by5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCisgICAgICAgIGJv
dW5kcy5zZXRSZWN0KEludFJlY3Qoci54KCkgKyByLndpZHRoKCkgLyAyIC0gdHJhY2tXaWR0aCAv
IDIsIHIueSgpLCB0cmFja1dpZHRoLCByLmhlaWdodCgpKSk7CiAKICAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDR0Nv
bG9yU3BhY2VSZWYgY3NwYWNlID0gZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpOwpAQCAtOTgxLDcg
Kzk3NSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50CiAgICAgc3RydWN0IENHRnVuY3Rpb25D
YWxsYmFja3MgbWFpbkNhbGxiYWNrcyA9IHsgMCwgVHJhY2tHcmFkaWVudEludGVycG9sYXRlLCBO
VUxMIH07CiAgICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IG1haW5GdW5jdGlvbiA9IGFkb3B0
Q0YoQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmbWFpbkNhbGxiYWNr
cykpOwogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1haW5TaGFkaW5nOwotICAgIGlmIChv
LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCisgICAgaWYgKG8u
c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQogICAgICAgICBtYWlu
U2hhZGluZyA9IGFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFr
ZShib3VuZHMucmVjdCgpLngoKSwgIGJvdW5kcy5yZWN0KCkubWF4WSgpKSwgQ0dQb2ludE1ha2Uo
Ym91bmRzLnJlY3QoKS5tYXhYKCksIGJvdW5kcy5yZWN0KCkubWF4WSgpKSwgbWFpbkZ1bmN0aW9u
LmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKICAgICBlbHNlCiAgICAgICAgIG1haW5TaGFkaW5nID0g
YWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdW5kcy5y
ZWN0KCkueCgpLCAgYm91bmRzLnJlY3QoKS55KCkpLCBDR1BvaW50TWFrZShib3VuZHMucmVjdCgp
LngoKSwgYm91bmRzLnJlY3QoKS5tYXhZKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBm
YWxzZSkpOwpAQCAtMTAwMSw3ICs5OTUsNyBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1
c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbgogCiBj
b25zdCBmbG9hdCB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgPSAwLjFmOwogCi1ib29sIFJl
bmRlclRoZW1lU2FmYXJpOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1l
U2FmYXJpOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgQVNTRVJUKFNhZmFy
aVRoZW1lTGlicmFyeSgpKTsKICAgICBwYWludFRoZW1lUGFydChTbGlkZXJUaHVtYlBhcnQsIHBh
aW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgTlNTbWFsbENvbnRyb2xTaXpl
LCBkZXRlcm1pbmVTdGF0ZShvKSk7CkBAIC0xMDIzLDcgKzEwMTcsNyBAQCB2b2lkIFJlbmRlclRo
ZW1lU2FmYXJpOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29ucwogI2VuZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2Vh
cmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGQo
Y29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwogCkBAIC0x
MDc2LDEzICsxMDcwLDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZp
ZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuCiAgICAgc2V0Rm9udEZy
b21Db250cm9sU2l6ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgY29udHJvbFNpemUpOwogfQogCi1i
b29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmKQor
Ym9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25z
dCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwogCi0gICAgTm9kZSog
aW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0hvc3QoKTsKKyAgICBOb2RlKiBpbnB1dCA9IG8ubm9k
ZSgpLT5zaGFkb3dIb3N0KCk7CiAgICAgaWYgKCFpbnB1dCkKLSAgICAgICAgaW5wdXQgPSBvLT5u
b2RlKCk7CisgICAgICAgIGlucHV0ID0gby5ub2RlKCk7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IGlucHV0LT5yZW5kZXJlcigpOwogICAgIEFTU0VSVChyZW5kZXJlcik7CiAKQEAgLTEx
MTksNyArMTExMyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxk
RGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuCiAgICAgc3R5bGUtPnNldEhl
aWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQorYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6
cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KQEAg
LTExMzEsMTMgKzExMjUsMTMgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmUKICAgICBzdHlsZS0+
c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRl
clRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmKQor
Ym9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
UGFydChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JikKIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwogCi0g
ICAgTm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0hvc3QoKTsKKyAgICBOb2RlKiBpbnB1
dCA9IG8ubm9kZSgpLT5zaGFkb3dIb3N0KCk7CiAgICAgaWYgKCFpbnB1dCkKLSAgICAgICAgaW5w
dXQgPSBvLT5ub2RlKCk7CisgICAgICAgIGlucHV0ID0gby5ub2RlKCk7CiAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGlucHV0LT5yZW5kZXJlcigpOwogICAgIEFTU0VSVChyZW5kZXJlcik7
CiAKQEAgLTExNTUsMTMgKzExNDksMTMgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmQKICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi1ib29s
IFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JikKK2Jv
b2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0
IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmKQogewogICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7CiAKLSAgICBOb2RlKiBp
bnB1dCA9IG8tPm5vZGUoKS0+c2hhZG93SG9zdCgpOworICAgIE5vZGUqIGlucHV0ID0gby5ub2Rl
KCktPnNoYWRvd0hvc3QoKTsKICAgICBpZiAoIWlucHV0KQotICAgICAgICBpbnB1dCA9IG8tPm5v
ZGUoKTsKKyAgICAgICAgaW5wdXQgPSBvLm5vZGUoKTsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gaW5wdXQtPnJlbmRlcmVyKCk7CiAgICAgQVNTRVJUKHJlbmRlcmVyKTsKIApAQCAtMTIx
NiwxNCArMTIxMCwxNCBAQCBJbnRTaXplIFJlbmRlclRoZW1lU2FmYXJpOjptZXRlclNpemVGb3JC
b3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JgogICAgIHJldHVybiBib3Vu
ZHMuc2l6ZSgpOwogfQogCi1ib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1ldGVyKFJlbmRl
ck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWV0ZXIoY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIC8vIE5PVEU6IFRoaXMgcm91dGluZSBpcyBmb3Ig
dGVzdGluZyBvbmx5LiBJdCBzaG91bGQgYmUgZmxlc2hlZCBvdXQgd2l0aCBhIHJlYWwgQ0ctYmFz
ZWQgaW1wbGVtZW50YXRpb24uCiAgICAgLy8gUmlnaHQgbm93IGl0IHVzZXMgYSBzbGlkZXIsIHdp
dGggdGhlIHRodW1iIHBvc2l0aW9uZWQgYXQgdGhlIG1ldGVyIHBvaW50LgotICAgIGlmICghcmVu
ZGVyT2JqZWN0LT5pc01ldGVyKCkpCisgICAgaWYgKCFyZW5kZXJPYmplY3QuaXNNZXRlcigpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSB0
b1JlbmRlck1ldGVyKHJlbmRlck9iamVjdCktPm1ldGVyRWxlbWVudCgpOworICAgIEhUTUxNZXRl
ckVsZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVyKCZyZW5kZXJPYmplY3QpLT5tZXRlckVs
ZW1lbnQoKTsKIAogICAgIGludCByZW1haW5pbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KCgxLjAgLSBl
bGVtZW50LT52YWx1ZVJhdGlvKCkpICogc3RhdGljX2Nhc3Q8ZG91YmxlPihyZWN0LnNpemUoKS53
aWR0aCgpKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZVNhZmFyaS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJp
LmgKaW5kZXggMjkwYzgyYzMxNmY5MzUxNjI2ZmYyMDkwN2ZjZGVhNzQ1MDJiMTg1Mi4uMWU4OWZk
OWY1Y2M4Mjk4MzdhNjUwYWIxOWZiMGVhNjNjNjBhNjkzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmgKQEAgLTUyLDE1ICs1MiwxNSBAQCBwdWJsaWM6
CiAgICAgLy8gQSBtZXRob2QgdG8gb2J0YWluIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBmb3IgYSAi
bGVhZiIgY29udHJvbC4gIFRoaXMgd2lsbCBvbmx5IGJlIHVzZWQgaWYgYSBiYXNlbGluZQogICAg
IC8vIHBvc2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyBjaGlsZCBjb250
ZW50LiBDaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBleGFtcGxlcyBvZgogICAgIC8v
IGNvbnRyb2xzIHRoYXQgbmVlZCB0byBkbyB0aGlzLgotICAgIHZpcnR1YWwgaW50IGJhc2VsaW5l
UG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgYmFz
ZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKIAogICAgIC8vIEEgbWV0
aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRv
dyBoYXMgZm9jdXMgb3Igbm90LgotICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50
cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1
cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7CiAKICAgICAvLyBBIGdlbmVy
YWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlzIHN1cHBvcnRlZCBhdCBh
bGwuCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJl
bmRlck9iamVjdCosIEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJl
Y3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCBib29sIGlz
Q29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29s
b3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CkBAIC04Niw0NyArODYsNDcgQEAgcHVibGljOgog
CiBwcm90ZWN0ZWQ6CiAgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZhbHVlLgot
ICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAg
ICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwogCi0g
ICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgV2Vi
Q29yZTo6RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVh
bCBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJT
dHlsZSopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdmly
dHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNs
aWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBh
aW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRp
b25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50Q2Fwc0xvY2tJbmRp
Y2F0b3IoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlhQ29udHJv
bHNTdHlsZVNoZWV0KCkgb3ZlcnJpZGU7CkBAIC0xMzcsNyArMTM3LDcgQEAgcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIq
LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzTWV0ZXIoQ29udHJvbFBhcnQpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBib29sIHBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBA
IC0xNzIsNyArMTcyLDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBJbnRTaXplKiBwb3B1cEJ1dHRv
blNpemVzKCkgY29uc3Q7CiAgICAgY29uc3QgaW50KiBwb3B1cEJ1dHRvbk1hcmdpbnMoTlNDb250
cm9sU2l6ZSkgY29uc3Q7CiAgICAgY29uc3QgaW50KiBwb3B1cEJ1dHRvblBhZGRpbmcoTlNDb250
cm9sU2l6ZSkgY29uc3Q7Ci0gICAgdm9pZCBwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lk
IHBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIGNvbnN0IEludFNpemUqIG1lbnVMaXN0
U2l6ZXMoKSBjb25zdDsKIAogICAgIGNvbnN0IEludFNpemUqIHNlYXJjaEZpZWxkU2l6ZXMoKSBj
b25zdDsKQEAgLTE4MCw3ICsxODAsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IEludFNpemUqIHJl
c3VsdHNCdXR0b25TaXplcygpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VhcmNoRmllbGRTaXplKFJl
bmRlclN0eWxlKikgY29uc3Q7CiAKLSAgICBUaGVtZUNvbnRyb2xTdGF0ZSBkZXRlcm1pbmVTdGF0
ZShSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICBUaGVtZUNvbnRyb2xTdGF0ZSBkZXRlcm1pbmVT
dGF0ZShjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsKIAogICAgIFN0cmluZyBtX21lZGlhQ29u
dHJvbHNTY3JpcHQ7CiAgICAgU3RyaW5nIG1fbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAppbmRleCA2ZTA1YjQ5YTdj
ZjU3MDg1NzZhYzI1YzY2ODdkNjNjZjhkMDA4YTE5Li4xYjkzZTAyYjc0YjA1ZmQ4NzhjMDVhNzBi
YzdmN2JlZmRjYzkxOGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZVdpbi5jcHAKQEAgLTQzNCwxMCArNDM0LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnN1cHBv
cnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAgICByZXR1cm4g
c3VwcG9ydHNGb2N1cyhzdHlsZS0+YXBwZWFyYW5jZSgpKTsKIH0KIAotdW5zaWduZWQgUmVuZGVy
VGhlbWVXaW46OmRldGVybWluZUNsYXNzaWNTdGF0ZShSZW5kZXJPYmplY3QqIG8sIENvbnRyb2xT
dWJQYXJ0IHN1YlBhcnQpCit1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lQ2xhc3Np
Y1N0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYgbywgQ29udHJvbFN1YlBhcnQgc3ViUGFydCkKIHsK
ICAgICB1bnNpZ25lZCBzdGF0ZSA9IDA7Ci0gICAgc3dpdGNoIChvLT5zdHlsZSgpLmFwcGVhcmFu
Y2UoKSkgeworICAgIHN3aXRjaCAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgewogICAgICAgICBj
YXNlIFB1c2hCdXR0b25QYXJ0OgogICAgICAgICBjYXNlIEJ1dHRvblBhcnQ6CiAgICAgICAgIGNh
c2UgRGVmYXVsdEJ1dHRvblBhcnQ6CkBAIC00NDksNyArNDQ5LDcgQEAgdW5zaWduZWQgUmVuZGVy
VGhlbWVXaW46OmRldGVybWluZUNsYXNzaWNTdGF0ZShSZW5kZXJPYmplY3QqIG8sIENvbnRyb2xT
dWJQYXJ0IHMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJhZGlvUGFydDoKICAg
ICAgICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgICAgICAgICBzdGF0ZSA9IChvLT5zdHlsZSgp
LmFwcGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpID8gREZDU19CVVRUT05SQURJTyA6IERGQ1NfQlVU
VE9OQ0hFQ0s7CisgICAgICAgICAgICBzdGF0ZSA9IChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09
IFJhZGlvUGFydCkgPyBERkNTX0JVVFRPTlJBRElPIDogREZDU19CVVRUT05DSEVDSzsKICAgICAg
ICAgICAgIGlmIChpc0NoZWNrZWQobykpCiAgICAgICAgICAgICAgICAgc3RhdGUgfD0gREZDU19D
SEVDS0VEOwogICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQobykpCkBAIC00ODEsMTAgKzQ4MSwx
MCBAQCB1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lQ2xhc3NpY1N0YXRlKFJlbmRl
ck9iamVjdCogbywgQ29udHJvbFN1YlBhcnQgcwogICAgIHJldHVybiBzdGF0ZTsKIH0KIAotdW5z
aWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVybWluZVN0YXRlKFJlbmRlck9iamVjdCogbykKK3Vu
c2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVTdGF0ZShjb25zdCBSZW5kZXJPYmplY3Qm
IG8pCiB7CiAgICAgdW5zaWduZWQgcmVzdWx0ID0gVFNfTk9STUFMOwotICAgIENvbnRyb2xQYXJ0
IGFwcGVhcmFuY2UgPSBvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKKyAgICBDb250cm9sUGFydCBh
cHBlYXJhbmNlID0gby5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKICAgICBpZiAoIWlzRW5hYmxlZChv
KSkKICAgICAgICAgcmVzdWx0ID0gVFNfRElTQUJMRUQ7CiAgICAgZWxzZSBpZiAoaXNSZWFkT25s
eUNvbnRyb2wobykgJiYgKFRleHRGaWVsZFBhcnQgPT0gYXBwZWFyYW5jZSB8fCBUZXh0QXJlYVBh
cnQgPT0gYXBwZWFyYW5jZSB8fCBTZWFyY2hGaWVsZFBhcnQgPT0gYXBwZWFyYW5jZSkpCkBAIC01
MDIsMTIgKzUwMiwxMiBAQCB1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lU3RhdGUo
UmVuZGVyT2JqZWN0KiBvKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXVuc2lnbmVkIFJlbmRl
clRoZW1lV2luOjpkZXRlcm1pbmVTbGlkZXJUaHVtYlN0YXRlKFJlbmRlck9iamVjdCogbykKK3Vu
c2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVTbGlkZXJUaHVtYlN0YXRlKGNvbnN0IFJl
bmRlck9iamVjdCYgbykKIHsKICAgICB1bnNpZ25lZCByZXN1bHQgPSBUVVNfTk9STUFMOwogICAg
IGlmICghaXNFbmFibGVkKG8pKQogICAgICAgICByZXN1bHQgPSBUVVNfRElTQUJMRUQ7Ci0gICAg
ZWxzZSBpZiAoc3VwcG9ydHNGb2N1cyhvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgJiYgaXNGb2N1
c2VkKG8pKQorICAgIGVsc2UgaWYgKHN1cHBvcnRzRm9jdXMoby5zdHlsZSgpLmFwcGVhcmFuY2Uo
KSkgJiYgaXNGb2N1c2VkKG8pKQogICAgICAgICByZXN1bHQgPSBUVVNfRk9DVVNFRDsKICAgICBl
bHNlIGlmIChpc1ByZXNzZWQobykpCiAgICAgICAgIHJlc3VsdCA9IFRVU19QUkVTU0VEOwpAQCAt
NTE2LDE0ICs1MTYsMTQgQEAgdW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVybWluZVNsaWRl
clRodW1iU3RhdGUoUmVuZGVyT2JqZWN0KiBvKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXVu
c2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVCdXR0b25TdGF0ZShSZW5kZXJPYmplY3Qq
IG8pCit1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lQnV0dG9uU3RhdGUoY29uc3Qg
UmVuZGVyT2JqZWN0JiBvKQogewogICAgIHVuc2lnbmVkIHJlc3VsdCA9IFBCU19OT1JNQUw7CiAg
ICAgaWYgKCFpc0VuYWJsZWQobykpCiAgICAgICAgIHJlc3VsdCA9IFBCU19ESVNBQkxFRDsKICAg
ICBlbHNlIGlmIChpc1ByZXNzZWQobykpCiAgICAgICAgIHJlc3VsdCA9IFBCU19QUkVTU0VEOwot
ICAgIGVsc2UgaWYgKHN1cHBvcnRzRm9jdXMoby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkpICYmIGlz
Rm9jdXNlZChvKSkKKyAgICBlbHNlIGlmIChzdXBwb3J0c0ZvY3VzKG8uc3R5bGUoKS5hcHBlYXJh
bmNlKCkpICYmIGlzRm9jdXNlZChvKSkKICAgICAgICAgcmVzdWx0ID0gUEJTX0RFRkFVTFRFRDsK
ICAgICBlbHNlIGlmIChpc0hvdmVyZWQobykpCiAgICAgICAgIHJlc3VsdCA9IFBCU19IT1Q7CkBA
IC01MzIsNyArNTMyLDcgQEAgdW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVybWluZUJ1dHRv
blN0YXRlKFJlbmRlck9iamVjdCogbykKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi11bnNpZ25l
ZCBSZW5kZXJUaGVtZVdpbjo6ZGV0ZXJtaW5lU3BpbkJ1dHRvblN0YXRlKFJlbmRlck9iamVjdCog
bywgQ29udHJvbFN1YlBhcnQgc3ViUGFydCkKK3Vuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRl
cm1pbmVTcGluQnV0dG9uU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBDb250cm9sU3ViUGFy
dCBzdWJQYXJ0KQogewogICAgIGJvb2wgaXNVcEJ1dHRvbiA9IHN1YlBhcnQgPT0gU3BpbkJ1dHRv
blVwOwogICAgIHVuc2lnbmVkIHJlc3VsdCA9IGlzVXBCdXR0b24gPyBVUFNfTk9STUFMIDogRE5T
X05PUk1BTDsKQEAgLTU0NSwxMCArNTQ1LDEwIEBAIHVuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpk
ZXRlcm1pbmVTcGluQnV0dG9uU3RhdGUoUmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3ViUGFyCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVGhlbWVEYXRhIFJlbmRlclRoZW1lV2luOjpnZXRDbGFz
c2ljVGhlbWVEYXRhKFJlbmRlck9iamVjdCogbywgQ29udHJvbFN1YlBhcnQgc3ViUGFydCkKK1Ro
ZW1lRGF0YSBSZW5kZXJUaGVtZVdpbjo6Z2V0Q2xhc3NpY1RoZW1lRGF0YShjb25zdCBSZW5kZXJP
YmplY3QmIG8sIENvbnRyb2xTdWJQYXJ0IHN1YlBhcnQpCiB7CiAgICAgVGhlbWVEYXRhIHJlc3Vs
dDsKLSAgICBzd2l0Y2ggKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpKSB7CisgICAgc3dpdGNoIChv
LnN0eWxlKCkuYXBwZWFyYW5jZSgpKSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CiAg
ICAgICAgIGNhc2UgQnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoK
QEAgLTU5NywxMyArNTk3LDEzIEBAIFRoZW1lRGF0YSBSZW5kZXJUaGVtZVdpbjo6Z2V0Q2xhc3Np
Y1RoZW1lRGF0YShSZW5kZXJPYmplY3QqIG8sIENvbnRyb2xTdWJQYXJ0IHN1CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotVGhlbWVEYXRhIFJlbmRlclRoZW1lV2luOjpnZXRUaGVtZURhdGEoUmVu
ZGVyT2JqZWN0KiBvLCBDb250cm9sU3ViUGFydCBzdWJQYXJ0KQorVGhlbWVEYXRhIFJlbmRlclRo
ZW1lV2luOjpnZXRUaGVtZURhdGEoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBDb250cm9sU3ViUGFy
dCBzdWJQYXJ0KQogewogICAgIGlmICghaGF2ZVRoZW1lKQogICAgICAgICByZXR1cm4gZ2V0Q2xh
c3NpY1RoZW1lRGF0YShvLCBzdWJQYXJ0KTsKIAogICAgIFRoZW1lRGF0YSByZXN1bHQ7Ci0gICAg
c3dpdGNoIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgeworICAgIHN3aXRjaCAoby5zdHlsZSgp
LmFwcGVhcmFuY2UoKSkgewogICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgogICAgICAgICBj
YXNlIEJ1dHRvblBhcnQ6CiAgICAgICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CkBAIC02MTgs
NyArNjE4LDcgQEAgVGhlbWVEYXRhIFJlbmRlclRoZW1lV2luOjpnZXRUaGVtZURhdGEoUmVuZGVy
T2JqZWN0KiBvLCBDb250cm9sU3ViUGFydCBzdWJQYXJ0KQogICAgICAgICBjYXNlIE1lbnVsaXN0
QnV0dG9uUGFydDogewogICAgICAgICAgICAgY29uc3QgYm9vbCBpc1Zpc3RhT3JMYXRlciA9ICh3
aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0YSk7CiAgICAgICAgICAgICByZXN1bHQubV9w
YXJ0ID0gaXNWaXN0YU9yTGF0ZXIgPyBDUF9EUk9QRE9XTkJVVFRPTlJJR0hUIDogQ1BfRFJPUERP
V05CVVRUT047Ci0gICAgICAgICAgICBpZiAoaXNWaXN0YU9yTGF0ZXIgJiYgby0+ZnJhbWUoKS5z
ZXR0aW5ncygpLmFwcGxpY2F0aW9uQ2hyb21lTW9kZSgpKSB7CisgICAgICAgICAgICBpZiAoaXNW
aXN0YU9yTGF0ZXIgJiYgby5mcmFtZSgpLnNldHRpbmdzKCkuYXBwbGljYXRpb25DaHJvbWVNb2Rl
KCkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgInJlYWRvbmx5IiBsb29rIHdlIHVzZSBpbiBh
cHBsaWNhdGlvbiBjaHJvbWUgbW9kZQogICAgICAgICAgICAgICAgIC8vIG9ubHkgdXNlcyBhICJu
b3JtYWwiIGxvb2sgZm9yIHRoZSBkcm9wIGRvd24gYnV0dG9uLgogICAgICAgICAgICAgICAgIHJl
c3VsdC5tX3N0YXRlID0gVFNfTk9STUFMOwpAQCAtNjY1LDcgKzY2NSw3IEBAIFRoZW1lRGF0YSBS
ZW5kZXJUaGVtZVdpbjo6Z2V0VGhlbWVEYXRhKFJlbmRlck9iamVjdCogbywgQ29udHJvbFN1YlBh
cnQgc3ViUGFydCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBkcmF3Q29u
dHJvbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJlbmRlck9iamVjdCogbywgSEFORExFIHRo
ZW1lLCBjb25zdCBUaGVtZURhdGEmIHRoZW1lRGF0YSwgY29uc3QgSW50UmVjdCYgcikKK3N0YXRp
YyB2b2lkIGRyYXdDb250cm9sKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVy
T2JqZWN0JiBvLCBIQU5ETEUgdGhlbWUsIGNvbnN0IFRoZW1lRGF0YSYgdGhlbWVEYXRhLCBjb25z
dCBJbnRSZWN0JiByKQogewogICAgIGJvb2wgYWxwaGFCbGVuZCA9IGZhbHNlOwogICAgIGlmICh0
aGVtZSkKQEAgLTY4NSwxMCArNjg1LDEwIEBAIHN0YXRpYyB2b2lkIGRyYXdDb250cm9sKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyT2JqZWN0KiBvLCBIQU5ETEUgdGhlbWUsCiAgICAg
ICAgIH0gZWxzZSBpZiAodGhlbWVEYXRhLm1fcGFydCA9PSBUS1BfVFJBQ0sgfHwgdGhlbWVEYXRh
Lm1fcGFydCA9PSBUS1BfVFJBQ0tWRVJUKSB7CiAgICAgICAgICAgICA6OkRyYXdFZGdlKGhkYywg
JndpZGdldFJlY3QsIEVER0VfU1VOS0VOLCBCRl9SRUNUIHwgQkZfQURKVVNUKTsKICAgICAgICAg
ICAgIDo6RmlsbFJlY3QoaGRjLCAmd2lkZ2V0UmVjdCwgKEhCUlVTSClHZXRTdG9ja09iamVjdChH
UkFZX0JSVVNIKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgp
ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwKLSAgICAgICAgICAgICAgICAgICAgby0+
c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpICYmIAotICAg
ICAgICAgICAgICAgICAgICh0aGVtZURhdGEubV9wYXJ0ID09IFRLUF9USFVNQkJPVFRPTSB8fCB0
aGVtZURhdGEubV9wYXJ0ID09IFRLUF9USFVNQlRPUCB8fCAKLSAgICAgICAgICAgICAgICAgICAg
dGhlbWVEYXRhLm1fcGFydCA9PSBUS1BfVEhVTUJMRUZUIHx8IHRoZW1lRGF0YS5tX3BhcnQgPT0g
VEtQX1RIVU1CUklHSFQpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoKG8uc3R5bGUoKS5hcHBlYXJh
bmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydAorICAgICAgICB8fCBvLnN0eWxlKCku
YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICAmJiAodGhl
bWVEYXRhLm1fcGFydCA9PSBUS1BfVEhVTUJCT1RUT00gfHwgdGhlbWVEYXRhLm1fcGFydCA9PSBU
S1BfVEhVTUJUT1AKKyAgICAgICAgfHwgdGhlbWVEYXRhLm1fcGFydCA9PSBUS1BfVEhVTUJMRUZU
IHx8IHRoZW1lRGF0YS5tX3BhcnQgPT0gVEtQX1RIVU1CUklHSFQpKSB7CiAgICAgICAgICAgICA6
OkRyYXdFZGdlKGhkYywgJndpZGdldFJlY3QsIEVER0VfUkFJU0VELCBCRl9SRUNUIHwgQkZfU09G
VCB8IEJGX01JRERMRSB8IEJGX0FESlVTVCk7CiAgICAgICAgICAgICBpZiAodGhlbWVEYXRhLm1f
c3RhdGUgPT0gVFVTX0RJU0FCTEVEKSB7CiAgICAgICAgICAgICAgICAgc3RhdGljIFdPUkQgcGF0
dGVybkJpdHNbOF0gPSB7MHhhYSwgMHg1NSwgMHhhYSwgMHg1NSwgMHhhYSwgMHg1NSwgMHhhYSwg
MHg1NX07CkBAIC03MTAsNyArNzEwLDcgQEAgc3RhdGljIHZvaWQgZHJhd0NvbnRyb2woR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJPYmplY3QqIG8sIEhBTkRMRSB0aGVtZSwKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFB1c2ggYnV0dG9ucywg
YnV0dG9ucywgY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBhbmQgdGhlIGRyb3Bkb3duIGFycm93IGlu
IG1lbnVsaXN0cy4KLSAgICAgICAgICAgIGlmIChvLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBE
ZWZhdWx0QnV0dG9uUGFydCkgeworICAgICAgICAgICAgaWYgKG8uc3R5bGUoKS5hcHBlYXJhbmNl
KCkgPT0gRGVmYXVsdEJ1dHRvblBhcnQpIHsKICAgICAgICAgICAgICAgICBIQlJVU0ggYnJ1c2gg
PSA6OkdldFN5c0NvbG9yQnJ1c2goQ09MT1JfM0RES1NIQURPVyk7CiAgICAgICAgICAgICAgICAg
OjpGcmFtZVJlY3QoaGRjLCAmd2lkZ2V0UmVjdCwgYnJ1c2gpOwogICAgICAgICAgICAgICAgIDo6
SW5mbGF0ZVJlY3QoJndpZGdldFJlY3QsIC0xLCAtMSk7CkBAIC03MjQsNyArNzI0LDcgQEAgc3Rh
dGljIHZvaWQgZHJhd0NvbnRyb2woR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJPYmpl
Y3QqIG8sIEhBTkRMRSB0aGVtZSwKICAgICAgICAgRElCUGl4ZWxEYXRhOjpzZXRSR0JBQml0bWFw
QWxwaGEod2luZG93c0NvbnRleHQuaGRjKCksIHIsIDI1NSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVXaW46OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRCdXR0b24oY29uc3Qg
UmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCiB7
ICAKICAgICBkcmF3Q29udHJvbChpLmNvbnRleHQsICBvLCBidXR0b25UaGVtZSgpLCBnZXRUaGVt
ZURhdGEobyksIHIpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lk
IFJlbmRlclRoZW1lV2luOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBSZQogICAgIHN0eWxlLT5zZXRNaW5XaWR0aChMZW5ndGgod2lkdGgs
IEZpeGVkKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50SW5uZXJTcGluQnV0dG9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQor
Ym9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgLy8g
V2Ugc3BsaXQgdGhlIHNwZWNpZmllZCByZWN0YW5nbGUgaW50byB0d28gdmVydGljYWxseS4gV2Ug
Y2FuJ3QgZHJhdyBhCiAgICAgLy8gc3BpbiBidXR0b24gb2Ygd2hpY2ggaGVpZ2h0IGlzIGxlc3Mg
dGhhbiAycHguCkBAIC03NzEsMTkgKzc3MSwxOSBAQCB2b2lkIFJlbmRlclRoZW1lV2luOjpzZXRD
aGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgICAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aCgxMywgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFp
bnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lV2luOjpwYWludFRleHRGaWVsZChjb25zdCBSZW5k
ZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKIHsKICAg
ICBkcmF3Q29udHJvbChpLmNvbnRleHQsICBvLCB0ZXh0RmllbGRUaGVtZSgpLCBnZXRUaGVtZURh
dGEobyksIHIpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6
cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50
TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgSEFORExFIHRoZW1lOwogICAg
IGludCBwYXJ0OwogICAgIGlmIChoYXZlVGhlbWUgJiYgKHdpbmRvd3NWZXJzaW9uKCkgPj0gV2lu
ZG93c1Zpc3RhKSkgewogICAgICAgICB0aGVtZSA9IG1lbnVMaXN0VGhlbWUoKTsKLSAgICAgICAg
aWYgKHJlbmRlcmVyLT5mcmFtZSgpLnNldHRpbmdzKCkuYXBwbGljYXRpb25DaHJvbWVNb2RlKCkp
CisgICAgICAgIGlmIChyZW5kZXJlci5mcmFtZSgpLnNldHRpbmdzKCkuYXBwbGljYXRpb25DaHJv
bWVNb2RlKCkpCiAgICAgICAgICAgICBwYXJ0ID0gQ1BfUkVBRE9OTFk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHBhcnQgPSBDUF9CT1JERVI7CkBAIC03OTIsNyArNzkyLDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25z
dCBQYWludEluZm8mIHBhaW4KICAgICAgICAgcGFydCA9IFRGUF9URVhURklFTEQ7CiAgICAgfQog
Ci0gICAgZHJhd0NvbnRyb2wocGFpbnRJbmZvLmNvbnRleHQsICByZW5kZXJlciwgdGhlbWUsIFRo
ZW1lRGF0YShwYXJ0LCBkZXRlcm1pbmVTdGF0ZShyZW5kZXJlcikpLCByZWN0KTsKKyAgICBkcmF3
Q29udHJvbChwYWludEluZm8uY29udGV4dCwgcmVuZGVyZXIsIHRoZW1lLCBUaGVtZURhdGEocGFy
dCwgZGV0ZXJtaW5lU3RhdGUocmVuZGVyZXIpKSwgcmVjdCk7CiAgICAgCiAgICAgcmV0dXJuIHBh
aW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhyZW5kZXJlciwgcGFpbnRJbmZvLCByZWN0KTsK
IH0KQEAgLTgzNCw3ICs4MzQsNyBAQCB2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RNZW51TGlz
dEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbgogICAgIHN0eWxl
LT5zZXRXaGl0ZVNwYWNlKFBSRSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50TWVu
dUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVX
aW46OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKICAgICAvLyBGSVhNRTogRG9uJ3QgbWFrZSBoYXJkY29kZWQgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHRoaWNrbmVzcyBvZiB0aGUgdGV4dGZpZWxkIGJvcmRlci4KICAgICBpbnQgYm9yZGVyVGhp
Y2tuZXNzID0gaGF2ZVRoZW1lID8gMSA6IDI7CkBAIC04NDMsNyArODQzLDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnMKICAgICAvLyBsZWF2aW5nIHNwYWNlIGZvciB0aGUgdGV4dCBmaWVsZCdz
IDFweCBib3JkZXIKICAgICBJbnRSZWN0IGJ1dHRvblJlY3QocmVjdCk7CiAgICAgYnV0dG9uUmVj
dC5pbmZsYXRlKC1ib3JkZXJUaGlja25lc3MpOwotICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKS5k
aXJlY3Rpb24oKSA9PSBMVFIpCisgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkuZGlyZWN0aW9uKCkg
PT0gTFRSKQogICAgICAgICBidXR0b25SZWN0LnNldFgoYnV0dG9uUmVjdC5tYXhYKCkgLSBkcm9w
RG93bkJ1dHRvbldpZHRoKTsKICAgICBidXR0b25SZWN0LnNldFdpZHRoKGRyb3BEb3duQnV0dG9u
V2lkdGgpOwogCkBAIC04NjEsMTQgKzg2MSwxNCBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWlu
dE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29ucwog
CiBjb25zdCBpbnQgdHJhY2tXaWR0aCA9IDQ7CiAKLWJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50
U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNsaWRlclRyYWNrKGNvbnN0IFJl
bmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQogewog
ICAgIEludFJlY3QgYm91bmRzID0gcjsKICAgICAKLSAgICBpZiAoby0+c3R5bGUoKS5hcHBlYXJh
bmNlKCkgPT0gIFNsaWRlckhvcml6b250YWxQYXJ0KSB7CisgICAgaWYgKG8uc3R5bGUoKS5hcHBl
YXJhbmNlKCkgPT0gIFNsaWRlckhvcml6b250YWxQYXJ0KSB7CiAgICAgICAgIGJvdW5kcy5zZXRI
ZWlnaHQodHJhY2tXaWR0aCk7CiAgICAgICAgIGJvdW5kcy5zZXRZKHIueSgpICsgci5oZWlnaHQo
KSAvIDIgLSB0cmFja1dpZHRoIC8gMik7Ci0gICAgfSBlbHNlIGlmIChvLT5zdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpIHsKKyAgICB9IGVsc2UgaWYgKG8uc3R5bGUo
KS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KSB7CiAgICAgICAgIGJvdW5kcy5z
ZXRXaWR0aCh0cmFja1dpZHRoKTsKICAgICAgICAgYm91bmRzLnNldFgoci54KCkgKyByLndpZHRo
KCkgLyAyIC0gdHJhY2tXaWR0aCAvIDIpOwogICAgIH0KQEAgLTg3Nyw3ICs4NzcsNyBAQCBib29s
IFJlbmRlclRoZW1lV2luOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBpLCBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZVdpbjo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2xpZGVy
VGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHIpCiB7ICAgCiAgICAgZHJhd0NvbnRyb2woaS5jb250ZXh0LCAgbywgc2xpZGVyVGhl
bWUoKSwgZ2V0VGhlbWVEYXRhKG8pLCByKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC05MDIsNyAr
OTAyLDcgQEAgdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiAjZW5kaWYKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNo
RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHIpCiB7CiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwogfQpAQCAt
OTE5LDE0ICs5MTksMTQgQEAgdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRT
dHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXIKICAgICAgICAgc3R5bGUt
PnNldE91dGxpbmVPZmZzZXQoLTIpOwogfQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgSW50UmVjdCBib3VuZHMg
PSByOwotICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7Ci0gICAgaWYgKCFvLT5wYXJlbnQoKSB8fCAh
by0+cGFyZW50KCktPmlzQm94KCkpCisgICAgQVNTRVJUKG8ucGFyZW50KCkpOworICAgIGlmICgh
by5wYXJlbnQoKSB8fCAhby5wYXJlbnQoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby0+
cGFyZW50KCkpOworICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3go
by5wYXJlbnQoKSk7CiAKICAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+
YWJzb2x1dGVDb250ZW50Qm94KCk7CiAgICAgCkBAIC05NDAsNyArOTQwLDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW4KIAogICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsSW1hZ2UgPSBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbCIpLmxlYWtSZWYoKTsKICAgICBzdGF0
aWMgSW1hZ2UqIGNhbmNlbFByZXNzZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZSgic2VhcmNoQ2FuY2VsUHJlc3NlZCIpLmxlYWtSZWYoKTsKLSAgICBwYWludEluZm8uY29udGV4
dC0+ZHJhd0ltYWdlKGlzUHJlc3NlZChvKSA/IGNhbmNlbFByZXNzZWRJbWFnZSA6IGNhbmNlbElt
YWdlLCBvLT5zdHlsZSgpLmNvbG9yU3BhY2UoKSwgYm91bmRzKTsKKyAgICBwYWludEluZm8uY29u
dGV4dC0+ZHJhd0ltYWdlKGlzUHJlc3NlZChvKSA/IGNhbmNlbFByZXNzZWRJbWFnZSA6IGNhbmNl
bEltYWdlLCBvLnN0eWxlKCkuY29sb3JTcGFjZSgpLCBib3VuZHMpOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIApAQCAtOTcwLDE0ICs5NzAsMTQgQEAgdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwKICAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOwogfQogCi1i
b29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCitib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgSW50UmVjdCBib3VuZHMgPSByOwotICAgIEFT
U0VSVChvLT5wYXJlbnQoKSk7Ci0gICAgaWYgKCFvLT5wYXJlbnQoKSB8fCAhby0+cGFyZW50KCkt
PmlzQm94KCkpCisgICAgQVNTRVJUKG8ucGFyZW50KCkpOworICAgIGlmICghby5wYXJlbnQoKSB8
fCAhby5wYXJlbnQoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby0+cGFyZW50KCkpOwor
ICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby5wYXJlbnQoKSk7
CiAgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVu
dEJveCgpOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGRlY29yYXRpb24gc3Rh
eXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94CkBAIC05ODksNyArOTg5
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uUGFydChSZW5kZXJPYmplY3QqIG8sIGNvbnMKICAgICBib3VuZHMuc2V0WShwYXJlbnRCb3gu
eSgpICsgKHBhcmVudEJveC5oZWlnaHQoKSAtIGJvdW5kcy5oZWlnaHQoKSArIDEpIC8gMik7CiAg
ICAgCiAgICAgc3RhdGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZv
cm1SZXNvdXJjZSgic2VhcmNoTWFnbmlmaWVyIikubGVha1JlZigpOwotICAgIHBhaW50SW5mby5j
b250ZXh0LT5kcmF3SW1hZ2UobWFnbmlmaWVySW1hZ2UsIG8tPnN0eWxlKCkuY29sb3JTcGFjZSgp
LCBib3VuZHMpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2UobWFnbmlmaWVySW1h
Z2UsIG8uc3R5bGUoKS5jb2xvclNwYWNlKCksIGJvdW5kcyk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCkBAIC0xMDA0LDE2ICsxMDA0LDE2IEBAIHZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTCiAgICAg
c3R5bGUtPnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVySGVpZ2h0LCBGaXhlZCkpOwogfQogCi1i
b29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQor
Ym9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3Qg
UmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKIHsKICAgICBJbnRSZWN0IGJvdW5kcyA9IHI7Ci0gICAgQVNTRVJUKG8tPnBhcmVudCgp
KTsKLSAgICBpZiAoIW8tPnBhcmVudCgpKQorICAgIEFTU0VSVChvLnBhcmVudCgpKTsKKyAgICBp
ZiAoIW8ucGFyZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW8tPnBhcmVu
dCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKKyAgICBpZiAoIW8ucGFyZW50KCkgfHwgIW8u
cGFyZW50KCktPmlzQm94KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBSZW5k
ZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8tPnBhcmVudCgpKTsKKyAgICBS
ZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8ucGFyZW50KCkpOwogICAg
IEludFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVyQm94LT5hYnNvbHV0ZUNvbnRlbnRCb3go
KTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0aW9uIHdpbGwgZml0
IGluIGl0cyBwYXJlbnQncyBib3gKQEAgLTEwMjUsNyArMTAyNSw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVXaW46OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJCiAgICAgYm91bmRzLnNldFkocGFyZW50Qm94LnkoKSArIChwYXJlbnRCb3guaGVp
Z2h0KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAvIDIpOwogCiAgICAgc3RhdGljIEltYWdlKiBt
YWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoTWFnbmlm
aWVyUmVzdWx0cyIpLmxlYWtSZWYoKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdl
KG1hZ25pZmllckltYWdlLCBvLT5zdHlsZSgpLmNvbG9yU3BhY2UoKSwgYm91bmRzKTsKKyAgICBw
YWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKG1hZ25pZmllckltYWdlLCBvLnN0eWxlKCkuY29s
b3JTcGFjZSgpLCBib3VuZHMpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTE3NywxMiAr
MTE3NywxMiBAQCBJbnRTaXplIFJlbmRlclRoZW1lV2luOjptZXRlclNpemVGb3JCb3VuZHMoY29u
c3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JiBibwogICAgIHJldHVybiBib3VuZHMuc2l6
ZSgpOwogfQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpwYWludE1ldGVyKFJlbmRlck9iamVjdCog
cmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewotICAgIGlmICghcmVuZGVyT2JqZWN0LT5pc01ldGVyKCkpCisgICAgaWYgKCFy
ZW5kZXJPYmplY3QuaXNNZXRlcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEhUTUxN
ZXRlckVsZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVyKHJlbmRlck9iamVjdCktPm1ldGVy
RWxlbWVudCgpOworICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVy
KCZyZW5kZXJPYmplY3QpLT5tZXRlckVsZW1lbnQoKTsKIAogICAgIFRoZW1lRGF0YSB0aGVtZSA9
IGdldFRoZW1lRGF0YShyZW5kZXJPYmplY3QpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZVdpbi5oCmluZGV4IDE3OWNmMzA1ZDk4NTdhMDBmYTQxZTNkOTc0ZDdmMzJlMGMy
OGFlZjUuLmY1MTQyNmQyYjM2MGI4Y2Q4ZThjZTAyOTZlOTcxN2FjOTM2NjBmYjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCkBAIC02Niw1MSArNjYsNTEgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnREZXNj
cmlwdGlvbiYpIGNvbnN0OwogICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoQ1NTVmFsdWVJ
RCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcikKICAgICB7IHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlv
KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByKQogICAgIHsgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAgICAgeyByZXR1cm4g
c2V0Q2hlY2tib3hTaXplKHN0eWxlKTsgfQogCi0gICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9u
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3Bp
bkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dElubmVyU3BpbkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
Ym9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKICAgICB7IHJldHVybiBwYWludFRleHRGaWVs
ZChvLCBpLCByKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2
b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0
b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50
U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHIpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1i
U2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBw
b3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9v
bCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwogCiAgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOwogCkBAIC0xMzMsNyArMTMzLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRlclNpemVGb3JCb3VuZHMoY29uc3Qg
UmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzTWV0ZXIoQ29udHJvbFBhcnQpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBib29sIHBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CkBAIC0xNTEsMTYgKzE1MSwxNiBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRkSW50
cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSopIGNvbnN0OwogICAgIHZvaWQgY2xvc2UoKTsKIAot
ICAgIHVuc2lnbmVkIGRldGVybWluZVN0YXRlKFJlbmRlck9iamVjdCopOwotICAgIHVuc2lnbmVk
IGRldGVybWluZUNsYXNzaWNTdGF0ZShSZW5kZXJPYmplY3QqLCBDb250cm9sU3ViUGFydCA9IE5v
bmUpOwotICAgIHVuc2lnbmVkIGRldGVybWluZVNsaWRlclRodW1iU3RhdGUoUmVuZGVyT2JqZWN0
Kik7Ci0gICAgdW5zaWduZWQgZGV0ZXJtaW5lQnV0dG9uU3RhdGUoUmVuZGVyT2JqZWN0Kik7Ci0g
ICAgdW5zaWduZWQgZGV0ZXJtaW5lU3BpbkJ1dHRvblN0YXRlKFJlbmRlck9iamVjdCosIENvbnRy
b2xTdWJQYXJ0ID0gTm9uZSk7CisgICAgdW5zaWduZWQgZGV0ZXJtaW5lU3RhdGUoY29uc3QgUmVu
ZGVyT2JqZWN0Jik7CisgICAgdW5zaWduZWQgZGV0ZXJtaW5lQ2xhc3NpY1N0YXRlKGNvbnN0IFJl
bmRlck9iamVjdCYsIENvbnRyb2xTdWJQYXJ0ID0gTm9uZSk7CisgICAgdW5zaWduZWQgZGV0ZXJt
aW5lU2xpZGVyVGh1bWJTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmKTsKKyAgICB1bnNpZ25lZCBk
ZXRlcm1pbmVCdXR0b25TdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmKTsKKyAgICB1bnNpZ25lZCBk
ZXRlcm1pbmVTcGluQnV0dG9uU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiwgQ29udHJvbFN1YlBh
cnQgPSBOb25lKTsKIAogICAgIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCkgY29uc3Q7
CiAKLSAgICBUaGVtZURhdGEgZ2V0VGhlbWVEYXRhKFJlbmRlck9iamVjdCosIENvbnRyb2xTdWJQ
YXJ0ID0gTm9uZSk7Ci0gICAgVGhlbWVEYXRhIGdldENsYXNzaWNUaGVtZURhdGEoUmVuZGVyT2Jq
ZWN0KiBvLCBDb250cm9sU3ViUGFydCA9IE5vbmUpOworICAgIFRoZW1lRGF0YSBnZXRUaGVtZURh
dGEoY29uc3QgUmVuZGVyT2JqZWN0JiwgQ29udHJvbFN1YlBhcnQgPSBOb25lKTsKKyAgICBUaGVt
ZURhdGEgZ2V0Q2xhc3NpY1RoZW1lRGF0YShjb25zdCBSZW5kZXJPYmplY3QmLCBDb250cm9sU3Vi
UGFydCA9IE5vbmUpOwogCiAgICAgSEFORExFIGJ1dHRvblRoZW1lKCkgY29uc3Q7CiAgICAgSEFO
RExFIHRleHRGaWVsZFRoZW1lKCkgY29uc3Q7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>