<?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>204584</bug_id>
          
          <creation_ts>2019-11-25 09:32:36 -0800</creation_ts>
          <short_desc>[LFC][IFC] Rename Line to LineBuilder</short_desc>
          <delta_ts>2019-11-25 10:34:01 -0800</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>WebKit 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>InRadar</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>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1593462</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-11-25 09:32:36 -0800</bug_when>
    <thetext>it really is a builder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593463</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-25 09:32:58 -0800</bug_when>
    <thetext>&lt;rdar://problem/57474964&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593465</commentid>
    <comment_count>2</comment_count>
      <attachid>384302</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-11-25 09:35:11 -0800</bug_when>
    <thetext>Created attachment 384302
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593469</commentid>
    <comment_count>3</comment_count>
      <attachid>384302</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-25 09:40:52 -0800</bug_when>
    <thetext>Comment on attachment 384302
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        [LFC][IFC] Rename Line to LineBuilder

What an excellent name!

&gt; Source/WebCore/layout/inlineformatting/LineLayoutContext.cpp:162
&gt; +LineLayoutContext::IsEndOfLine LineLayoutContext::placeInlineItem(LineBuilder&amp; line, const InlineItem&amp; inlineItem)

Maybe the variables like this should be renamed too? Maybe in another patch...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593470</commentid>
    <comment_count>4</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-11-25 09:50:12 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #3)
&gt; Comment on attachment 384302 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=384302&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:3
&gt; &gt; +        [LFC][IFC] Rename Line to LineBuilder
&gt; 
&gt; What an excellent name!
&gt; 
&gt; &gt; Source/WebCore/layout/inlineformatting/LineLayoutContext.cpp:162
&gt; &gt; +LineLayoutContext::IsEndOfLine LineLayoutContext::placeInlineItem(LineBuilder&amp; line, const InlineItem&amp; inlineItem)
&gt; 
&gt; Maybe the variables like this should be renamed too? Maybe in another
&gt; patch...
Yeah, I was planning on doing it in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593482</commentid>
    <comment_count>5</comment_count>
      <attachid>384302</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-25 10:33:59 -0800</bug_when>
    <thetext>Comment on attachment 384302
Patch

Clearing flags on attachment: 384302

Committed r252865: &lt;https://trac.webkit.org/changeset/252865&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593483</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-25 10:34:01 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384302</attachid>
            <date>2019-11-25 09:35:11 -0800</date>
            <delta_ts>2019-11-25 10:33:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204584-20191125093510.patch</filename>
            <type>text/plain</type>
            <size>106726</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyODYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmY2ZWI0MmRlMWI5ODk5
NzUxY2Y3MTBkYTY5ZDY4M2E4MDQxZGExNi4uMmY0YmJmNjU4ODBhYzM2ZGMwYTA0MmRiYTU4MTNk
OTIyMTdkMWRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMSBAQAorMjAxOS0xMS0yNSAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdW0lGQ10gUmVuYW1l
IExpbmUgdG8gTGluZUJ1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNDU4NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTc0NzQ5NjQ+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXQgcmVhbGx5
IGlzIGEgbGluZSBidWlsZGVyLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRy
aW5zaWNXaWR0aEZvckNvbnN0cmFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29uc3RyYWludHNGb3JMaW5lKToKKyAgICAgICAg
KiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAg
ICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVp
cmtzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OlF1aXJrczo6bGluZURlc2NlbnROZWVkc0NvbGxhcHNpbmcgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpsaW5lSGVp
Z2h0Q29uc3RyYWludHMgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCcmVha2VyLmNwcDoKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQnVpbGRlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SW5saW5lSXRlbVJ1bjo6bGF5b3V0Qm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lSXRlbVJ1bjo6bG9naWNhbFJlY3QgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtUnVuOjp0ZXh0Q29udGV4dCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW1SdW46OmlzVGV4dCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW1SdW46OmlzQm94IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbVJ1bjo6aXNDb250YWluZXJTdGFydCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW1SdW46OmlzQ29udGFpbmVyRW5k
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbVJ1bjo6aXNGb3Jj
ZWRMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVt
UnVuOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbVJ1
bjo6c2V0SXNDb2xsYXBzZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVt
UnVuOjppc0NvbGxhcHNlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUl0ZW1SdW46OmlzQ29sbGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbVJ1bjo6aXNDb2xsYXBzaWJsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW1SdW46OmlzV2hpdGVzcGFjZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW1SdW46Omhhc0V4cGFuc2lv
bk9wcG9ydHVuaXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRl
bVJ1bjo6SW5saW5lSXRlbVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0
ZW1SdW46OnNldENvbGxhcHNlc1RvWmVyb0FkdmFuY2VXaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkNvbnRpbm91c0NvbnRlbnQ6OmNhbkJlRXhwYW5kZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpDb250aW5vdXNDb250ZW50OjpjYW5CZU1lcmdlZCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNvbnRpbm91c0NvbnRlbnQ6OkNvbnRpbm91c0NvbnRlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpDb250aW5vdXNDb250ZW50OjphcHBlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpDb250aW5vdXNDb250ZW50OjpjbG9zZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OlJ1bik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmFkanVzdEV4cGFuc2lvbkJlaGF2aW9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6ZXhwYW5zaW9u
QmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6
UnVuOjpzZXRDb21wdXRlZEhvcml6b250YWxFeHBhbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6TGluZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQnVpbGRlcjo6fkxpbmVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojpz
aG91bGRQcmVzZXJ2ZVRyYWlsaW5nQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OnNob3VsZFByZXNlcnZlTGVhZGluZ0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQnVpbGRlcjo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVp
bGRlcjo6YWxpZ25Db250ZW50VmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVCdWlsZGVyOjpqdXN0aWZ5UnVucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCdWlsZGVyOjphbGlnbkNvbnRlbnRIb3Jpem9udGFsbHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6cmVtb3ZlVHJhaWxpbmdUcmltbWFibGVD
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6Om1vdmVMb2dp
Y2FsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjptb3ZlTG9n
aWNhbFJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFwcGVu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjphcHBlbmROb25CcmVh
a2FibGVTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjphcHBl
bmRJbmxpbmVDb250YWluZXJTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjphcHBlbmRJbmxpbmVDb250YWluZXJFbmQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQnVpbGRlcjo6YXBwZW5kVGV4dENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6YXBwZW5kTm9uUmVwbGFjZWRJbmxpbmVCb3gpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6YXBwZW5kUmVwbGFjZWRJbmxpbmVCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6YXBwZW5kTGluZUJyZWFr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFkanVzdEJhc2VsaW5l
QW5kTGluZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpy
dW5Db250ZW50SGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OlRyaW1tYWJsZUNvbnRlbnQ6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCdWlsZGVyOjpoYWxmTGVhZGluZ01ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6bGF5b3V0U3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3QpOgorICAgICAg
ICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmgu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjppc1Zpc3VhbGx5RW1wdHkg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6aGFzSW50cnVz
aXZlRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6
YXZhaWxhYmxlV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVp
bGRlcjo6dHJhaWxpbmdUcmltbWFibGVXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVCdWlsZGVyOjpsaW5lQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJ1aWxkZXI6OnNldEhhc0ludHJ1c2l2ZUZsb2F0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6aXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6aXNCb3ggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjppc0ZvcmNlZExpbmVCcmVhayBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmlzQ29udGFp
bmVyU3RhcnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6
UnVuOjppc0NvbnRhaW5lckVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCdWlsZGVyOjpSdW46OmxheW91dEJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCdWlsZGVyOjpSdW46OmxvZ2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6dGV4dENvbnRleHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjppc0NvbGxhcHNlZFRvVmlzdWFs
bHlFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpS
dW46OmFkanVzdExvZ2ljYWxUb3ApOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVp
bGRlcjo6UnVuOjptb3ZlSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlJ1bjo6bW92ZVZlcnRpY2FsbHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpzZXRMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OmxvZ2ljYWxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6bG9naWNhbEJvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCdWlsZGVyOjpsb2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVCdWlsZGVyOjpsb2dpY2FsUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6bG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmxvZ2ljYWxIZWlnaHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Y29udGVudExvZ2ljYWxXaWR0aCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpjb250ZW50TG9naWNh
bFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmJh
c2VsaW5lT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxk
ZXI6OmlzVGV4dEFsaWduSnVzdGlmeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVCdWlsZGVyOjpUcmltbWFibGVDb250ZW50Ojp3aWR0aCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpUcmltbWFibGVDb250ZW50OjpydW5zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlRyaW1tYWJsZUNvbnRlbnQ6Omlz
RW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6VHJp
bW1hYmxlQ29udGVudDo6Y2xlYXIpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0xpbmVMYXlvdXRDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxh
eW91dENvbnRleHQ6OmxheW91dExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
TGF5b3V0Q29udGV4dDo6Y29tbWl0UGVuZGluZ0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6cGxhY2VJbmxpbmVJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUxheW91dENvbnRleHQ6OnByb2Nlc3NVbmNvbW1pdHRlZENvbnRlbnQp
OgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0Lmg6
CisKIDIwMTktMTEtMjUgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbTEZDXVtJRkNdIFJlbmFtZSBMaW5lTGF5b3V0IHRvIExpbmVMYXlvdXRDb250ZXh0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IDE2MDc2ODIyMjg5YjAxNDZmMzg4MTc3YTZlYjMyOTUzYWJhZGRiZTAuLjZh
MGQ0NmFjZjViZjAxOWNhYThhMzQ2OWNmMTQ1ZjVmZWJlZGE0NmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC0xNDM4LDggKzE0MzgsOCBAQCBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dEdlb21ldHJ5LmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJdGVtLmNw
cAotbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHAKIGxheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAorbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZUJ1aWxkZXIuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0
SXRlbS5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcAog
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1Mzg0ZjgyNzIx
M2M1MGJlMmU2NWFkNDA4MzgyZjUzNWM5MGIzOWVlLi43ZTAxMGMzMTZiOTQzZjVjNGQ5NWNlZWM5
MmEwNzg0ZDM5ZWJiM2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDIwLDcgKzIwMjAsNyBAQAogCQk2RUQ4NzhDNTE0NzQ5
M0Y0MDA0QzM1OTcgLyogUmVuZGVyVGFibGVDYXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUQ4NzhDMzE0NzQ5M0Y0MDA0QzM1OTcgLyogUmVu
ZGVyVGFibGVDYXB0aW9uLmggKi87IH07CiAJCTZFRDhDMzdBMTgzQkZGOEMwMDlFNTNCRCAvKiBC
b3hTaGFwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkVEOEMzNzgxODNCRkY4QzAwOUU1M0JEIC8qIEJveFNoYXBlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkVFOEE3NzMxMEY4MDNGMzAwNUE0QTI0
IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkVFOEE3NzExMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xD
b250ZXh0QXR0cmlidXRlcy5oICovOyB9OwotCQk2RjBDRDY5NTIyOUVEMzI3MDBDNTk5NEUgLyog
SW5saW5lTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkYwQ0Q2OTQyMjlFRDMyNzAwQzU5OTRFIC8qIElubGluZUxpbmUuaCAqLzsgfTsKKwkJNkYw
Q0Q2OTUyMjlFRDMyNzAwQzU5OTRFIC8qIElubGluZUxpbmVCdWlsZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjBDRDY5NDIyOUVEMzI3MDBDNTk5
NEUgLyogSW5saW5lTGluZUJ1aWxkZXIuaCAqLzsgfTsKIAkJNkYxQ0MxREUyMjVGOEI0OTAwNzIw
QUQyIC8qIElubGluZVRleHRJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2RjFDQzFERDIyNUY4QjQyMDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjI2
QkI2QzIzMzQzRTZGMDAyRjJCRUEgLyogTGF5b3V0Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYyNkJCNkIyMzM0M0U1QjAwMkYyQkVBIC8q
IExheW91dENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk2RjI2RUI0ODIzNDAwNEE1MDA2OTA2RTIgLyogTGluZUxheW91dENvbnRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGMjZFQjQ2
MjM0MDA0QTUwMDY5MDZFMiAvKiBMaW5lTGF5b3V0Q29udGV4dC5oICovOyB9OwpAQCAtOTI0NSw4
ICs5MjQ1LDggQEAKIAkJNkVFOEE3NzAxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0
QXR0cmlidXRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dl
YkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjA4MzBERjIwQjQ2OTUxMDA4QTk0NUIg
LyogQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTZGMENENjkyMjI5RUQzMTkwMEM1OTk0RSAvKiBJbmxpbmVMaW5lLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IElubGluZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk2RjBDRDY5NDIyOUVEMzI3MDBDNTk5NEUgLyogSW5saW5lTGluZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVMaW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTZGMENENjkyMjI5RUQzMTkwMEM1OTk0RSAvKiBJbmxpbmVMaW5lQnVpbGRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVMaW5lQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZGMENENjk0MjI5RUQzMjcwMEM1OTk0RSAvKiBJbmxpbmVMaW5l
QnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVMaW5lQnVp
bGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjEwQjA4NjIyQjg1NjhEMDA5
MEU2OUMgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RjFDQzFEQzIyNUY4QjQxMDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lVGV4dEl0ZW0uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RjFDQzFERDIyNUY4QjQyMDA3MjBBRDIgLyogSW5saW5lVGV4dEl0
ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lVGV4dEl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE2Njg2LDExICsxNjY4NiwxMSBAQAogCQkJCTExNUNGQTdDMjA4QjhFMTAw
MDFFNjk5MSAvKiBJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCAqLywKIAkJCQk2RjdCOENFQzIzNjI2
RTY2MDBDOUZGMTUgLyogSW5saW5lSXRlbS5jcHAgKi8sCiAJCQkJNkZFN0NGQTAyMTc3RUVGMTAw
NUIxNTczIC8qIElubGluZUl0ZW0uaCAqLywKLQkJCQk2RjBDRDY5MjIyOUVEMzE5MDBDNTk5NEUg
LyogSW5saW5lTGluZS5jcHAgKi8sCi0JCQkJNkYwQ0Q2OTQyMjlFRDMyNzAwQzU5OTRFIC8qIElu
bGluZUxpbmUuaCAqLywKIAkJCQk2RkI0N0U2MTIyNzc0MjVBMDBDN0JDQjAgLyogSW5saW5lTGlu
ZUJveC5oICovLAogCQkJCTZGRTE5ODEzMjE3ODM5N0IwMDQ0NkYwOCAvKiBJbmxpbmVMaW5lQnJl
YWtlci5jcHAgKi8sCiAJCQkJNkZFMTk4MTUyMTc4Mzk3QzAwNDQ2RjA4IC8qIElubGluZUxpbmVC
cmVha2VyLmggKi8sCisJCQkJNkYwQ0Q2OTIyMjlFRDMxOTAwQzU5OTRFIC8qIElubGluZUxpbmVC
dWlsZGVyLmNwcCAqLywKKwkJCQk2RjBDRDY5NDIyOUVEMzI3MDBDNTk5NEUgLyogSW5saW5lTGlu
ZUJ1aWxkZXIuaCAqLywKIAkJCQk2RjFDQzFEQzIyNUY4QjQxMDA3MjBBRDIgLyogSW5saW5lVGV4
dEl0ZW0uY3BwICovLAogCQkJCTZGMUNDMUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0
SXRlbS5oICovLAogCQkJCTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAvKiBMaW5lTGF5b3V0Q29u
dGV4dC5jcHAgKi8sCkBAIC0zMDE3Myw5ICszMDE3Myw5IEBACiAJCQkJMTE1Q0ZBN0UyMDhCOEUx
MDAwMUU2OTkxIC8qIElubGluZUZvcm1hdHRpbmdTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NkZFN0NGQTIyMTc3RUVGMjAwNUIxNTczIC8qIElubGluZUl0ZW0uaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDRTc4OTE2MTEyMEQ2MDgwMDYwRUNFNSAvKiBJbmxpbmVJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNkYwQ0Q2OTUyMjlFRDMyNzAwQzU5OTRFIC8qIElubGluZUxpbmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTZGQjQ3RTYzMjI3NzQyNUEwMEM3QkNCMCAvKiBJbmxpbmVMaW5lQm94
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkUxOTgxNzIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5l
TGluZUJyZWFrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGMENENjk1MjI5RUQzMjcwMEM1OTk0
RSAvKiBJbmxpbmVMaW5lQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUE0QzNBNzcwQjJC
MTY3OTAwMjMzNEEyIC8qIElubGluZVN0eWxlU2hlZXRPd25lci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNFQTQ4NUEwOTdEOTMwMjAwOTRDOUU0IC8qIElubGluZVRleHRCb3guaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFDMDEwNzAxMTkyNTk0REYwMDhBNDIwMSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4
IDhjN2MwMThkNTFhMDQyYjBjNDdiNzA2NjAyNTkzODRiNjdmODVjOWQuLjQwODk1ZGEwYWVhNGRm
YjMyMzA3ZmZhMDY3MjNiZDhkOTUxNGVkMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5jcHAKQEAgLTk1LDEyICs5NSwxMiBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpsaW5lTGF5b3V0KGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJiB1c2VkSG9yaXpvbgogICAg
IGF1dG8gbGluZUxvZ2ljYWxUb3AgPSBnZW9tZXRyeUZvckJveChyb290KCkpLmNvbnRlbnRCb3hU
b3AoKTsKICAgICB1bnNpZ25lZCBsZWFkaW5nSW5saW5lSXRlbUluZGV4ID0gMDsKICAgICBPcHRp
b25hbDxMaW5lTGF5b3V0Q29udGV4dDo6UGFydGlhbENvbnRlbnQ+IGxlYWRpbmdQYXJ0aWFsQ29u
dGVudDsKLSAgICBhdXRvIGxpbmUgPSBMaW5lIHsgKnRoaXMsIHJvb3QoKS5zdHlsZSgpLnRleHRB
bGlnbigpLCBMaW5lOjpTa2lwQWxpZ25tZW50OjpObyB9OworICAgIGF1dG8gbGluZUJ1aWxkZXIg
PSBMaW5lQnVpbGRlciB7ICp0aGlzLCByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSwgTGluZUJ1
aWxkZXI6OlNraXBBbGlnbm1lbnQ6Ok5vIH07CiAgICAgYXV0byBsaW5lTGF5b3V0Q29udGV4dCA9
IExpbmVMYXlvdXRDb250ZXh0IHsgKnRoaXMsIGlubGluZUl0ZW1zIH07CiAKICAgICB3aGlsZSAo
bGVhZGluZ0lubGluZUl0ZW1JbmRleCA8IGlubGluZUl0ZW1zLnNpemUoKSkgewotICAgICAgICBs
aW5lLmluaXRpYWxpemUoY29uc3RyYWludHNGb3JMaW5lKHVzZWRIb3Jpem9udGFsVmFsdWVzLCBs
aW5lTG9naWNhbFRvcCkpOwotICAgICAgICBhdXRvIGxpbmVDb250ZW50ID0gbGluZUxheW91dENv
bnRleHQubGF5b3V0TGluZShsaW5lLCBsZWFkaW5nSW5saW5lSXRlbUluZGV4LCBsZWFkaW5nUGFy
dGlhbENvbnRlbnQpOworICAgICAgICBsaW5lQnVpbGRlci5pbml0aWFsaXplKGNvbnN0cmFpbnRz
Rm9yTGluZSh1c2VkSG9yaXpvbnRhbFZhbHVlcywgbGluZUxvZ2ljYWxUb3ApKTsKKyAgICAgICAg
YXV0byBsaW5lQ29udGVudCA9IGxpbmVMYXlvdXRDb250ZXh0LmxheW91dExpbmUobGluZUJ1aWxk
ZXIsIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXgsIGxlYWRpbmdQYXJ0aWFsQ29udGVudCk7CiAgICAg
ICAgIHNldERpc3BsYXlCb3hlc0ZvckxpbmUobGluZUNvbnRlbnQsIHVzZWRIb3Jpem9udGFsVmFs
dWVzKTsKIAogICAgICAgICBsZWFkaW5nUGFydGlhbENvbnRlbnQgPSB7IH07CkBAIC0xMTYsNyAr
MTE2LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChjb25zdCBV
c2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNlZEhvcml6b24KICAgICAgICAgICAgICAgICBsZWFkaW5n
SW5saW5lSXRlbUluZGV4ID0gKmxpbmVDb250ZW50LnRyYWlsaW5nSW5saW5lSXRlbUluZGV4ICsg
MTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEZsb2F0cyBwcmV2ZW50ZWQgdXMg
cGxhY2luZyBhbnkgY29udGVudCBvbiB0aGUgbGluZS4KLSAgICAgICAgICAgIEFTU0VSVChsaW5l
Lmhhc0ludHJ1c2l2ZUZsb2F0KCkpOworICAgICAgICAgICAgQVNTRVJUKGxpbmVCdWlsZGVyLmhh
c0ludHJ1c2l2ZUZsb2F0KCkpOwogICAgICAgICAgICAgLy8gTW92ZSB0aGUgbmV4dCBsaW5lIGJl
bG93IHRoZSBpbnRydXNpdmUgZmxvYXQuCiAgICAgICAgICAgICBhdXRvIGZsb2F0aW5nQ29udGV4
dCA9IEZsb2F0aW5nQ29udGV4dCB7IHJvb3QoKSwgKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLmZs
b2F0aW5nU3RhdGUoKSB9OwogICAgICAgICAgICAgYXV0byBmbG9hdENvbnN0cmFpbnRzID0gZmxv
YXRpbmdDb250ZXh0LmNvbnN0cmFpbnRzKHsgbGluZUxvZ2ljYWxUb3AgfSk7CkBAIC0yMzMsMTIg
KzIzMywxMiBAQCBMYXlvdXRVbml0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZElu
dHJpbnNpY1dpZHRoRm9yQ29uc3RyYWludChjb25zdCBVcwogICAgIGF1dG8mIGlubGluZUl0ZW1z
ID0gZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lSXRlbXMoKTsKICAgICBMYXlvdXRVbml0IG1heGlt
dW1MaW5lV2lkdGg7CiAgICAgdW5zaWduZWQgbGVhZGluZ0lubGluZUl0ZW1JbmRleCA9IDA7Ci0g
ICAgYXV0byBsaW5lID0gTGluZSB7ICp0aGlzLCByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSwg
TGluZTo6U2tpcEFsaWdubWVudDo6WWVzIH07CisgICAgYXV0byBsaW5lQnVpbGRlciA9IExpbmVC
dWlsZGVyIHsgKnRoaXMsIHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpLCBMaW5lQnVpbGRlcjo6
U2tpcEFsaWdubWVudDo6WWVzIH07CiAgICAgYXV0byBsaW5lTGF5b3V0Q29udGV4dCA9IExpbmVM
YXlvdXRDb250ZXh0IHsgKnRoaXMsIGlubGluZUl0ZW1zIH07CiAgICAgd2hpbGUgKGxlYWRpbmdJ
bmxpbmVJdGVtSW5kZXggPCBpbmxpbmVJdGVtcy5zaXplKCkpIHsKICAgICAgICAgLy8gT25seSB0
aGUgaG9yaXp0b25hbCBhdmFpbGFibGUgd2lkdGggaXMgY29uc3RyYWluZWQgd2hlbiBjb21wdXRp
bmcgaW50cmluc2ljIHdpZHRoLgotICAgICAgICBsaW5lLmluaXRpYWxpemUoTGluZTo6Q29uc3Ry
YWludHMgeyB7IH0sIHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnN0cmFpbnRzLndpZHRoLCBmYWxz
ZSwgeyB9IH0pOwotICAgICAgICBhdXRvIGxpbmVDb250ZW50ID0gbGluZUxheW91dENvbnRleHQu
bGF5b3V0TGluZShsaW5lLCBsZWFkaW5nSW5saW5lSXRlbUluZGV4LCB7IH0pOworICAgICAgICBs
aW5lQnVpbGRlci5pbml0aWFsaXplKExpbmVCdWlsZGVyOjpDb25zdHJhaW50cyB7IHsgfSwgdXNl
ZEhvcml6b250YWxWYWx1ZXMuY29uc3RyYWludHMud2lkdGgsIGZhbHNlLCB7IH0gfSk7CisgICAg
ICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5lTGF5b3V0Q29udGV4dC5sYXlvdXRMaW5lKGxpbmVC
dWlsZGVyLCBsZWFkaW5nSW5saW5lSXRlbUluZGV4LCB7IH0pOwogCiAgICAgICAgIGxlYWRpbmdJ
bmxpbmVJdGVtSW5kZXggPSAqbGluZUNvbnRlbnQudHJhaWxpbmdJbmxpbmVJdGVtSW5kZXggKyAx
OwogICAgICAgICBMYXlvdXRVbml0IGZsb2F0c1dpZHRoOwpAQCAtMzcxLDcgKzM3MSw3IEBAIHZv
aWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbGxlY3RJbmxpbmVDb250ZW50SWZOZWVkZWQo
KQogICAgIH0KIH0KIAotTGluZTo6Q29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbnN0cmFpbnRzRm9yTGluZShjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNlZEhvcml6
b250YWxWYWx1ZXMsIGNvbnN0IExheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApCitMaW5lQnVpbGRl
cjo6Q29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbnN0cmFpbnRzRm9yTGlu
ZShjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNlZEhvcml6b250YWxWYWx1ZXMsIGNvbnN0
IExheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApCiB7CiAgICAgYXV0byBsaW5lTG9naWNhbExlZnQg
PSBnZW9tZXRyeUZvckJveChyb290KCkpLmNvbnRlbnRCb3hMZWZ0KCk7CiAgICAgYXV0byBhdmFp
bGFibGVXaWR0aCA9IHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnN0cmFpbnRzLndpZHRoOwpAQCAt
NDA0LDcgKzQwNCw3IEBAIExpbmU6OkNvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0
Ojpjb25zdHJhaW50c0ZvckxpbmUoY29uc3QgVXNlZEhvcml6b250CiAgICAgICAgICAgICBhdmFp
bGFibGVXaWR0aCA9IGZsb2F0Q29uc3RyYWludHMucmlnaHQtPnggLSBsaW5lTG9naWNhbExlZnQ7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIExpbmU6OkNvbnN0cmFpbnRzIHsgeyBsaW5l
TG9naWNhbExlZnQsIGxpbmVMb2dpY2FsVG9wIH0sIGF2YWlsYWJsZVdpZHRoLCBsaW5lSXNDb25z
dHJhaW5lZEJ5RmxvYXQsIHF1aXJrcygpLmxpbmVIZWlnaHRDb25zdHJhaW50cyhyb290KCkpIH07
CisgICAgcmV0dXJuIExpbmVCdWlsZGVyOjpDb25zdHJhaW50cyB7IHsgbGluZUxvZ2ljYWxMZWZ0
LCBsaW5lTG9naWNhbFRvcCB9LCBhdmFpbGFibGVXaWR0aCwgbGluZUlzQ29uc3RyYWluZWRCeUZs
b2F0LCBxdWlya3MoKS5saW5lSGVpZ2h0Q29uc3RyYWludHMocm9vdCgpKSB9OwogfQogCiB2b2lk
IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExp
bmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IFVzZWRIb3Jp
em9udGFsVmFsdWVzJiB1c2VkSG9yaXpvbnRhbFZhbHVlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5oCmluZGV4IDUwNDQ0NGYyYjIyMGE0OGFhZThkMzM5OTYzM2ExZTNhZDM2ZDE2M2Uu
LmZjZGVjY2VkOTc0MzJjOWRhZDUzNjNmODQxMjAwODBmMTEyNGVjNTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuaApAQCAtNTAsOCArNTAsOCBAQCBwcml2YXRlOgogCiAgICAgY2xh
c3MgUXVpcmtzIDogcHVibGljIEZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3MgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgYm9vbCBsaW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhjb25zdCBMaW5lOjpS
dW5MaXN0JikgY29uc3Q7Ci0gICAgICAgIExpbmU6OkNvbnN0cmFpbnRzOjpIZWlnaHRBbmRCYXNl
bGluZSBsaW5lSGVpZ2h0Q29uc3RyYWludHMoY29uc3QgQm94JiBmb3JtYXR0aW5nUm9vdCkgY29u
c3Q7CisgICAgICAgIGJvb2wgbGluZURlc2NlbnROZWVkc0NvbGxhcHNpbmcoY29uc3QgTGluZUJ1
aWxkZXI6OlJ1bkxpc3QmKSBjb25zdDsKKyAgICAgICAgTGluZUJ1aWxkZXI6OkNvbnN0cmFpbnRz
OjpIZWlnaHRBbmRCYXNlbGluZSBsaW5lSGVpZ2h0Q29uc3RyYWludHMoY29uc3QgQm94JiBmb3Jt
YXR0aW5nUm9vdCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3Mg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CkBAIC04OSwxNCArODksMTQgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyYpOwogCiAgICAgdm9pZCBjb2xsZWN0SW5saW5lQ29udGVudElmTmVlZGVkKCk7
Ci0gICAgTGluZTo6Q29uc3RyYWludHMgY29uc3RyYWludHNGb3JMaW5lKGNvbnN0IFVzZWRIb3Jp
em9udGFsVmFsdWVzJiwgY29uc3QgTGF5b3V0VW5pdCBsaW5lTG9naWNhbFRvcCk7CisgICAgTGlu
ZUJ1aWxkZXI6OkNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzRm9yTGluZShjb25zdCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyYsIGNvbnN0IExheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApOwogICAgIHZvaWQg
c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6TGluZUNvbnRl
bnQmLCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYpOwogICAgIHZvaWQgaW52YWxpZGF0ZUZv
cm1hdHRpbmdTdGF0ZShjb25zdCBJbnZhbGlkYXRpb25TdGF0ZSYpOwogCiAgICAgY29uc3QgSW5s
aW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3du
Y2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5n
U3RhdGUoKSk7IH0KICAgICBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgp
IHsgcmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRl
eHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQogICAgIC8vIEZJWE1FOiBDb21lIHVwIHdpdGggYSBz
dHJ1Y3R1cmUgdGhhdCByZXF1aXJlcyBubyBmcmllbmRpbmcuCi0gICAgZnJpZW5kIGNsYXNzIExp
bmU7CisgICAgZnJpZW5kIGNsYXNzIExpbmVCdWlsZGVyOwogfTsKIAogaW5saW5lIElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6R2VvbWV0cnkoY29uc3QgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWly
a3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCmluZGV4IGY5ZWY2NDc1OGRjYTg5ZDdhMDlkYjM2ZDIz
YzdjNTgyMDYwMmUyOTIuLjQ0NjY1MzllN2FkYzI0NzdiNjg2ZTI2NzQ2ZTFhMTdmZTJhMTU4NjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKQEAgLTI4
LDEzICsyOCwxMyBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAK
LSNpbmNsdWRlICJJbmxpbmVMaW5lLmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJ1aWxkZXIuaCIK
ICNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3Bh
Y2UgTGF5b3V0IHsKIAotYm9vbCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpsaW5l
RGVzY2VudE5lZWRzQ29sbGFwc2luZyhjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5MaXN0KSBjb25z
dAorYm9vbCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpsaW5lRGVzY2VudE5lZWRz
Q29sbGFwc2luZyhjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgcnVuTGlzdCkgY29uc3QKIHsK
ICAgICAvLyBDb2xsYXBzZSBsaW5lIGRlc2NlbnQgaW4gbGltaXRlZCBhbmQgZnVsbCBxdWlyayBt
b2RlIHdoZW4gdGhlcmUncyBubyBiYXNlbGluZSBhbGlnbmVkIGNvbnRlbnQgb3IKICAgICAvLyB0
aGUgYmFzZWxpbmUgYWxpZ25lZCBjb250ZW50IGhhcyBubyBkZXNjZW50LgpAQCAtNzUsMjMgKzc1
LDIzIEBAIGJvb2wgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6bGluZURlc2NlbnRO
ZWVkc0NvbGxhcHNpbmcoY29uc3QgTGluZTo6UnVuCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUxp
bmU6OkNvbnN0cmFpbnRzOjpIZWlnaHRBbmRCYXNlbGluZSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6UXVpcmtzOjpsaW5lSGVpZ2h0Q29uc3RyYWludHMoY29uc3QgQm94JiBmb3JtYXR0aW5nUm9v
dCkgY29uc3QKK0xpbmVCdWlsZGVyOjpDb25zdHJhaW50czo6SGVpZ2h0QW5kQmFzZWxpbmUgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6bGluZUhlaWdodENvbnN0cmFpbnRzKGNvbnN0
IEJveCYgZm9ybWF0dGluZ1Jvb3QpIGNvbnN0CiB7CiAgICAgLy8gY29tcHV0ZWRMaW5lSGVpZ2h0
IHRha2VzIGZvbnQtc2l6ZSBpbnRvIGFjY291bnQgd2hlbiBsaW5lLWhlaWdodCBpcyBub3Qgc2V0
LgogICAgIC8vIFN0cnV0IGlzIHRoZSBpbWFnaW5hcnkgYm94IHRoYXQgd2UgcHV0IG9uIGV2ZXJ5
IGxpbmUuIEl0IHNldHMgdGhlIGluaXRpYWwgdmVydGljYWwgY29uc3RyYWludHMgZm9yIGVhY2gg
bmV3IGxpbmUuCiAgICAgYXV0byBzdHJ1dEhlaWdodCA9IGZvcm1hdHRpbmdSb290LnN0eWxlKCku
Y29tcHV0ZWRMaW5lSGVpZ2h0KCk7Ci0gICAgYXV0byBzdHJ1dEJhc2VsaW5lT2Zmc2V0ID0gTGlu
ZTo6aGFsZkxlYWRpbmdNZXRyaWNzKGZvcm1hdHRpbmdSb290LnN0eWxlKCkuZm9udE1ldHJpY3Mo
KSwgc3RydXRIZWlnaHQpLmFzY2VudCgpOworICAgIGF1dG8gc3RydXRCYXNlbGluZU9mZnNldCA9
IExpbmVCdWlsZGVyOjpoYWxmTGVhZGluZ01ldHJpY3MoZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS5m
b250TWV0cmljcygpLCBzdHJ1dEhlaWdodCkuYXNjZW50KCk7CiAgICAgaWYgKGxheW91dFN0YXRl
KCkuaW5Ob1F1aXJrc01vZGUoKSkKICAgICAgICAgcmV0dXJuIHsgc3RydXRIZWlnaHQsIHN0cnV0
QmFzZWxpbmVPZmZzZXQsIHsgfSB9OwogCiAgICAgYXV0byBsaW5lSGVpZ2h0ID0gZm9ybWF0dGlu
Z1Jvb3Quc3R5bGUoKS5saW5lSGVpZ2h0KCk7CiAgICAgaWYgKGxpbmVIZWlnaHQuaXNQZXJjZW50
T3JDYWxjdWxhdGVkKCkpIHsKLSAgICAgICAgYXV0byBpbml0aWFsQmFzZWxpbmVPZmZzZXQgPSBM
aW5lOjpoYWxmTGVhZGluZ01ldHJpY3MoZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS5mb250TWV0cmlj
cygpLCB7IH0pLmFzY2VudCgpOworICAgICAgICBhdXRvIGluaXRpYWxCYXNlbGluZU9mZnNldCA9
IExpbmVCdWlsZGVyOjpoYWxmTGVhZGluZ01ldHJpY3MoZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS5m
b250TWV0cmljcygpLCB7IH0pLmFzY2VudCgpOwogICAgICAgICByZXR1cm4geyBpbml0aWFsQmFz
ZWxpbmVPZmZzZXQsIGluaXRpYWxCYXNlbGluZU9mZnNldCwgTGluZUJveDo6QmFzZWxpbmUgeyBz
dHJ1dEJhc2VsaW5lT2Zmc2V0LCBzdHJ1dEhlaWdodCAtIHN0cnV0QmFzZWxpbmVPZmZzZXQgfSB9
OwogICAgIH0KICAgICAvLyBGSVhNRTogVGhlIG9ubHkgcmVhc29uIHdoeSB3ZSB1c2UgaW50VmFs
dWUoKSBoZXJlIGlzIHRvIG1hdGNoIGN1cnJlbnQgaW5saW5lIHRyZWUgKGludGVncmFsKWJlaGF2
aW9yLgogICAgIGF1dG8gaW5pdGlhbExpbmVIZWlnaHQgPSBMYXlvdXRVbml0IHsgbGluZUhlaWdo
dC5pbnRWYWx1ZSgpIH07Ci0gICAgYXV0byBpbml0aWFsQmFzZWxpbmVPZmZzZXQgPSBMaW5lOjpo
YWxmTGVhZGluZ01ldHJpY3MoZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS5mb250TWV0cmljcygpLCBp
bml0aWFsTGluZUhlaWdodCkuYXNjZW50KCk7CisgICAgYXV0byBpbml0aWFsQmFzZWxpbmVPZmZz
ZXQgPSBMaW5lQnVpbGRlcjo6aGFsZkxlYWRpbmdNZXRyaWNzKGZvcm1hdHRpbmdSb290LnN0eWxl
KCkuZm9udE1ldHJpY3MoKSwgaW5pdGlhbExpbmVIZWlnaHQpLmFzY2VudCgpOwogICAgIHJldHVy
biB7IGluaXRpYWxMaW5lSGVpZ2h0LCBpbml0aWFsQmFzZWxpbmVPZmZzZXQsIExpbmVCb3g6OkJh
c2VsaW5lIHsgc3RydXRCYXNlbGluZU9mZnNldCwgc3RydXRIZWlnaHQgLSBzdHJ1dEJhc2VsaW5l
T2Zmc2V0IH0gfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MWE0ZTlkZGU0NzUyOTM1OWFlZTM3MDViMWY3YTIwMmM4YjY2NTE1Yy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcxNSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklubGluZUxp
bmUuaCIKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVk
ZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJUZXh0VXRpbC5oIgotI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5h
bWVzcGFjZSBMYXlvdXQgewotCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTGluZSk7Ci0K
LWNsYXNzIElubGluZUl0ZW1SdW4gewotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTkxJTkUoSW5s
aW5lSXRlbVJ1bik7Ci1wdWJsaWM6Ci0gICAgSW5saW5lSXRlbVJ1bihjb25zdCBJbmxpbmVJdGVt
JiwgY29uc3QgRGlzcGxheTo6UmVjdCYsIFdURjo6T3B0aW9uYWw8RGlzcGxheTo6UnVuOjpUZXh0
Q29udGV4dD4gPSBXVEY6Om51bGxvcHQpOwotCi0gICAgY29uc3QgQm94JiBsYXlvdXRCb3goKSBj
b25zdCB7IHJldHVybiBtX2lubGluZUl0ZW0ubGF5b3V0Qm94KCk7IH0KLSAgICBjb25zdCBEaXNw
bGF5OjpSZWN0JiBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3Q7IH0K
LSAgICBPcHRpb25hbDxEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0PiB0ZXh0Q29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dENvbnRleHQ7IH0KLQotICAgIGJvb2wgaXNUZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9pbmxpbmVJdGVtLmlzVGV4dCgpOyB9Ci0gICAgYm9vbCBpc0JveCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5saW5lSXRlbS5pc0JveCgpOyB9Ci0gICAgYm9vbCBpc0NvbnRhaW5lclN0
YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKTsgfQot
ICAgIGJvb2wgaXNDb250YWluZXJFbmQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUl0ZW0uaXND
b250YWluZXJFbmQoKTsgfQotICAgIGJvb2wgaXNGb3JjZWRMaW5lQnJlYWsoKSBjb25zdCB7IHJl
dHVybiBtX2lubGluZUl0ZW0uaXNGb3JjZWRMaW5lQnJlYWsoKTsgfQotICAgIElubGluZUl0ZW06
OlR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lSXRlbS50eXBlKCk7IH0KLQotICAg
IHZvaWQgc2V0SXNDb2xsYXBzZWQoKSB7IG1faXNDb2xsYXBzZWQgPSB0cnVlOyB9Ci0gICAgYm9v
bCBpc0NvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb2xsYXBzZWQ7IH0KLQotICAgIHZv
aWQgc2V0Q29sbGFwc2VzVG9aZXJvQWR2YW5jZVdpZHRoKCk7Ci0gICAgYm9vbCBpc0NvbGxhcHNl
ZFRvWmVyb0FkdmFuY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGFwc2VkVG9aZXJvQWR2
YW5jZVdpZHRoOyB9Ci0KLSAgICBib29sIGlzQ29sbGFwc2libGUoKSBjb25zdCB7IHJldHVybiBp
czxJbmxpbmVUZXh0SXRlbT4obV9pbmxpbmVJdGVtKSAmJiBkb3duY2FzdDxJbmxpbmVUZXh0SXRl
bT4obV9pbmxpbmVJdGVtKS5pc0NvbGxhcHNpYmxlKCk7IH0KLSAgICBib29sIGlzV2hpdGVzcGFj
ZSgpIGNvbnN0IHsgcmV0dXJuIGlzPElubGluZVRleHRJdGVtPihtX2lubGluZUl0ZW0pICYmIGRv
d25jYXN0PElubGluZVRleHRJdGVtPihtX2lubGluZUl0ZW0pLmlzV2hpdGVzcGFjZSgpOyB9Ci0K
LSAgICBib29sIGhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkgY29uc3QgeyByZXR1cm4gaXNXaGl0
ZXNwYWNlKCkgJiYgIWlzQ29sbGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoKCk7IH0KLQotcHJpdmF0
ZToKLSAgICBjb25zdCBJbmxpbmVJdGVtJiBtX2lubGluZUl0ZW07Ci0gICAgRGlzcGxheTo6UmVj
dCBtX2xvZ2ljYWxSZWN0OwotICAgIGNvbnN0IE9wdGlvbmFsPERpc3BsYXk6OlJ1bjo6VGV4dENv
bnRleHQ+IG1fdGV4dENvbnRleHQ7Ci0gICAgYm9vbCBtX2lzQ29sbGFwc2VkIHsgZmFsc2UgfTsK
LSAgICBib29sIG1fY29sbGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoIHsgZmFsc2UgfTsKLX07Ci0K
LUlubGluZUl0ZW1SdW46OklubGluZUl0ZW1SdW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRl
bSwgY29uc3QgRGlzcGxheTo6UmVjdCYgbG9naWNhbFJlY3QsIFdURjo6T3B0aW9uYWw8RGlzcGxh
eTo6UnVuOjpUZXh0Q29udGV4dD4gdGV4dENvbnRleHQpCi0gICAgOiBtX2lubGluZUl0ZW0oaW5s
aW5lSXRlbSkKLSAgICAsIG1fbG9naWNhbFJlY3QobG9naWNhbFJlY3QpCi0gICAgLCBtX3RleHRD
b250ZXh0KHRleHRDb250ZXh0KQotewotfQotCi12b2lkIElubGluZUl0ZW1SdW46OnNldENvbGxh
cHNlc1RvWmVyb0FkdmFuY2VXaWR0aCgpCi17Ci0gICAgbV9jb2xsYXBzZWRUb1plcm9BZHZhbmNl
V2lkdGggPSB0cnVlOwotICAgIG1fbG9naWNhbFJlY3Quc2V0V2lkdGgoeyB9KTsKLX0KLQotc3Ry
dWN0IENvbnRpbm91c0NvbnRlbnQgewotcHVibGljOgotICAgIENvbnRpbm91c0NvbnRlbnQoY29u
c3QgSW5saW5lSXRlbVJ1biYsIGJvb2wgdGV4dElzQWxpZ25KdXN0aWZ5KTsKLQotICAgIGJvb2wg
YXBwZW5kKGNvbnN0IElubGluZUl0ZW1SdW4mKTsKLSAgICBMaW5lOjpSdW4gY2xvc2UoKTsKLQot
cHJpdmF0ZToKLSAgICBzdGF0aWMgYm9vbCBjYW5CZUV4cGFuZGVkKGNvbnN0IElubGluZUl0ZW1S
dW4mIHJ1bikgeyByZXR1cm4gcnVuLmlzVGV4dCgpICYmICFydW4uaXNDb2xsYXBzZWQoKSAmJiAh
cnVuLmlzQ29sbGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoKCk7IH0KLSAgICBib29sIGNhbkJlTWVy
Z2VkKGNvbnN0IElubGluZUl0ZW1SdW4mIHJ1bikgY29uc3QgeyByZXR1cm4gcnVuLmlzVGV4dCgp
ICYmICFydW4uaXNDb2xsYXBzZWRUb1plcm9BZHZhbmNlV2lkdGgoKSAmJiAmbV9pbml0aWFsSW5s
aW5lUnVuLmxheW91dEJveCgpID09ICZydW4ubGF5b3V0Qm94KCk7IH0KLQotICAgIGNvbnN0IElu
bGluZUl0ZW1SdW4mIG1faW5pdGlhbElubGluZVJ1bjsKLSAgICBjb25zdCBib29sIG1fdGV4dElz
QWxpZ25KdXN0aWZ5IHsgZmFsc2UgfTsKLSAgICB1bnNpZ25lZCBtX2V4cGFuZGVkTGVuZ3RoIHsg
MCB9OwotICAgIExheW91dFVuaXQgbV9leHBhbmRlZFdpZHRoOwotICAgIGJvb2wgbV90cmFpbGlu
Z1J1bkNhbkJlRXhwYW5kZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNUcmFpbGluZ0V4cGFu
c2lvbk9wcG9ydHVuaXR5IHsgZmFsc2UgfTsKLSAgICB1bnNpZ25lZCBtX2V4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQgeyAwIH07Ci19OwotCi1Db250aW5vdXNDb250ZW50OjpDb250aW5vdXNDb250
ZW50KGNvbnN0IElubGluZUl0ZW1SdW4mIGluaXRpYWxJbmxpbmVSdW4sIGJvb2wgdGV4dElzQWxp
Z25KdXN0aWZ5KQotICAgIDogbV9pbml0aWFsSW5saW5lUnVuKGluaXRpYWxJbmxpbmVSdW4pCi0g
ICAgLCBtX3RleHRJc0FsaWduSnVzdGlmeSh0ZXh0SXNBbGlnbkp1c3RpZnkpCi0gICAgLCBtX3Ry
YWlsaW5nUnVuQ2FuQmVFeHBhbmRlZChjYW5CZUV4cGFuZGVkKGluaXRpYWxJbmxpbmVSdW4pKQot
ewotfQotCi1ib29sIENvbnRpbm91c0NvbnRlbnQ6OmFwcGVuZChjb25zdCBJbmxpbmVJdGVtUnVu
JiBpbmxpbmVJdGVtUnVuKQotewotICAgIC8vIE1lcmdlZCBjb250ZW50IG5lZWRzIHRvIGJlIGNv
bnRpbnVvdXMuCi0gICAgaWYgKCFtX3RyYWlsaW5nUnVuQ2FuQmVFeHBhbmRlZCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghY2FuQmVNZXJnZWQoaW5saW5lSXRlbVJ1bikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fdHJhaWxpbmdSdW5DYW5CZUV4cGFuZGVkID0gY2Fu
QmVFeHBhbmRlZChpbmxpbmVJdGVtUnVuKTsKLQotICAgIEFTU0VSVChpbmxpbmVJdGVtUnVuLmlz
VGV4dCgpKTsKLSAgICBtX2V4cGFuZGVkTGVuZ3RoICs9IGlubGluZUl0ZW1SdW4udGV4dENvbnRl
eHQoKS0+bGVuZ3RoKCk7Ci0gICAgbV9leHBhbmRlZFdpZHRoICs9IGlubGluZUl0ZW1SdW4ubG9n
aWNhbFJlY3QoKS53aWR0aCgpOwotCi0gICAgaWYgKG1fdGV4dElzQWxpZ25KdXN0aWZ5KSB7Ci0g
ICAgICAgIG1faGFzVHJhaWxpbmdFeHBhbnNpb25PcHBvcnR1bml0eSA9IGlubGluZUl0ZW1SdW4u
aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKTsKLSAgICAgICAgaWYgKG1faGFzVHJhaWxpbmdFeHBh
bnNpb25PcHBvcnR1bml0eSkKLSAgICAgICAgICAgICsrbV9leHBhbnNpb25PcHBvcnR1bml0eUNv
dW50OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotTGluZTo6UnVuIENvbnRpbm91c0Nv
bnRlbnQ6OmNsb3NlKCkKLXsKLSAgICBpZiAoIW1fZXhwYW5kZWRMZW5ndGgpCi0gICAgICAgIHJl
dHVybiB7IG1faW5pdGlhbElubGluZVJ1biB9OwotICAgIC8vIEV4cGFuZCB0aGUgdGV4dCBjb250
ZW50IGFuZCBzZXQgdGhlIGV4cGFuc2lvbiBvcHBvcnR1bml0aWVzLgotICAgIEFTU0VSVChtX2lu
aXRpYWxJbmxpbmVSdW4uaXNUZXh0KCkpOwotICAgIGF1dG8gbG9naWNhbFJlY3QgPSBtX2luaXRp
YWxJbmxpbmVSdW4ubG9naWNhbFJlY3QoKTsKLSAgICBsb2dpY2FsUmVjdC5leHBhbmRIb3Jpem9u
dGFsbHkobV9leHBhbmRlZFdpZHRoKTsKLQotICAgIGF1dG8gdGV4dENvbnRleHQgPSAqbV9pbml0
aWFsSW5saW5lUnVuLnRleHRDb250ZXh0KCk7Ci0gICAgYXV0byBsZW5ndGggPSB0ZXh0Q29udGV4
dC5sZW5ndGgoKSArIG1fZXhwYW5kZWRMZW5ndGg7Ci0gICAgdGV4dENvbnRleHQuZXhwYW5kKG1f
aW5pdGlhbElubGluZVJ1bi5sYXlvdXRCb3goKS50ZXh0Q29udGV4dCgpLT5jb250ZW50LnN1YnN0
cmluZyh0ZXh0Q29udGV4dC5zdGFydCgpLCBsZW5ndGgpLCBsZW5ndGgpOwotCi0gICAgaWYgKG1f
dGV4dElzQWxpZ25KdXN0aWZ5KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdmVyeSBz
aW1wbGUgZXhwYW5zaW9uIG1lcmdlLiBXZSBzaG91bGQgZXZlbnR1YWxseSBzd2l0Y2ggb3ZlciB0
byBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudC4KLSAgICAgICAgRXhwYW5z
aW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBtX2hhc1RyYWlsaW5nRXhwYW5zaW9uT3Bw
b3J0dW5pdHkgPyAoRm9yYmlkTGVhZGluZ0V4cGFuc2lvbiB8IEFsbG93VHJhaWxpbmdFeHBhbnNp
b24pIDogKEFsbG93TGVhZGluZ0V4cGFuc2lvbiB8IEFsbG93VHJhaWxpbmdFeHBhbnNpb24pOwot
ICAgICAgICBpZiAobV9pbml0aWFsSW5saW5lUnVuLmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkp
Ci0gICAgICAgICAgICArK21fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsKLSAgICAgICAgdGV4
dENvbnRleHQuc2V0RXhwYW5zaW9uKHsgZXhwYW5zaW9uQmVoYXZpb3IsIHsgfSB9KTsKLSAgICB9
Ci0gICAgcmV0dXJuIHsgbV9pbml0aWFsSW5saW5lUnVuLCBsb2dpY2FsUmVjdCwgdGV4dENvbnRl
eHQsIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCB9OwotfQotCi1MaW5lOjpSdW46OlJ1bihj
b25zdCBJbmxpbmVJdGVtUnVuJiBpbmxpbmVJdGVtUnVuKQotICAgIDogbV9sYXlvdXRCb3goJmlu
bGluZUl0ZW1SdW4ubGF5b3V0Qm94KCkpCi0gICAgLCBtX3R5cGUoaW5saW5lSXRlbVJ1bi50eXBl
KCkpCi0gICAgLCBtX2xvZ2ljYWxSZWN0KGlubGluZUl0ZW1SdW4ubG9naWNhbFJlY3QoKSkKLSAg
ICAsIG1fdGV4dENvbnRleHQoaW5saW5lSXRlbVJ1bi50ZXh0Q29udGV4dCgpKQotICAgICwgbV9p
c0NvbGxhcHNlZFRvVmlzdWFsbHlFbXB0eShpbmxpbmVJdGVtUnVuLmlzQ29sbGFwc2VkVG9aZXJv
QWR2YW5jZVdpZHRoKCkpCi17Ci0gICAgaWYgKGlubGluZUl0ZW1SdW4uaGFzRXhwYW5zaW9uT3Bw
b3J0dW5pdHkoKSkgewotICAgICAgICBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSAxOwot
ICAgICAgICBBU1NFUlQobV90ZXh0Q29udGV4dCk7Ci0gICAgICAgIG1fdGV4dENvbnRleHQtPnNl
dEV4cGFuc2lvbih7IERlZmF1bHRFeHBhbnNpb24sIHsgfSB9KTsKLSAgICB9Ci19Ci0KLUxpbmU6
OlJ1bjo6UnVuKGNvbnN0IElubGluZUl0ZW1SdW4mIGlubGluZUl0ZW1SdW4sIGNvbnN0IERpc3Bs
YXk6OlJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0JiB0
ZXh0Q29udGV4dCwgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkKLSAgICA6IG1f
bGF5b3V0Qm94KCZpbmxpbmVJdGVtUnVuLmxheW91dEJveCgpKQotICAgICwgbV90eXBlKGlubGlu
ZUl0ZW1SdW4udHlwZSgpKQotICAgICwgbV9sb2dpY2FsUmVjdChsb2dpY2FsUmVjdCkKLSAgICAs
IG1fdGV4dENvbnRleHQodGV4dENvbnRleHQpCi0gICAgLCBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQoZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkKLSAgICAsIG1faXNDb2xsYXBzZWRUb1Zp
c3VhbGx5RW1wdHkoaW5saW5lSXRlbVJ1bi5pc0NvbGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0aCgp
KQotewotfQotCi12b2lkIExpbmU6OlJ1bjo6YWRqdXN0RXhwYW5zaW9uQmVoYXZpb3IoRXhwYW5z
aW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IpCi17Ci0gICAgQVNTRVJUKGlzVGV4dCgpKTsK
LSAgICBBU1NFUlQoaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSk7Ci0gICAgbV90ZXh0Q29udGV4
dC0+c2V0RXhwYW5zaW9uKHsgZXhwYW5zaW9uQmVoYXZpb3IsIG1fdGV4dENvbnRleHQtPmV4cGFu
c2lvbigpLT5ob3Jpem9udGFsRXhwYW5zaW9uIH0pOwotfQotCi1pbmxpbmUgT3B0aW9uYWw8RXhw
YW5zaW9uQmVoYXZpb3I+IExpbmU6OlJ1bjo6ZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdAotewot
ICAgIEFTU0VSVChpc1RleHQoKSk7Ci0gICAgaWYgKGF1dG8gZXhwYW5zaW9uQ29udGV4dCA9IG1f
dGV4dENvbnRleHQtPmV4cGFuc2lvbigpKQotICAgICAgICByZXR1cm4gZXhwYW5zaW9uQ29udGV4
dC0+YmVoYXZpb3I7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotdm9pZCBMaW5lOjpSdW46OnNldENv
bXB1dGVkSG9yaXpvbnRhbEV4cGFuc2lvbihMYXlvdXRVbml0IGxvZ2ljYWxFeHBhbnNpb24pCi17
Ci0gICAgQVNTRVJUKGlzVGV4dCgpKTsKLSAgICBBU1NFUlQoaGFzRXhwYW5zaW9uT3Bwb3J0dW5p
dHkoKSk7Ci0gICAgbV9sb2dpY2FsUmVjdC5leHBhbmRIb3Jpem9udGFsbHkobG9naWNhbEV4cGFu
c2lvbik7Ci0gICAgbV90ZXh0Q29udGV4dC0+c2V0RXhwYW5zaW9uKHsgbV90ZXh0Q29udGV4dC0+
ZXhwYW5zaW9uKCktPmJlaGF2aW9yLCBsb2dpY2FsRXhwYW5zaW9uIH0pOwotfQotCi1MaW5lOjpM
aW5lKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCwgT3B0aW9uYWw8VGV4dEFsaWduTW9kZT4gaG9yaXpvbnRhbEFsaWdubWVudCwgU2tpcEFsaWdu
bWVudCBza2lwQWxpZ25tZW50KQotICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCkKLSAgICAsIG1faG9yaXpvbnRhbEFsaWdubWVudChob3Jpem9u
dGFsQWxpZ25tZW50KQotICAgICwgbV9za2lwQWxpZ25tZW50KHNraXBBbGlnbm1lbnQgPT0gU2tp
cEFsaWdubWVudDo6WWVzKQotewotfQotCi1MaW5lOjp+TGluZSgpCi17Ci19Ci0KLXZvaWQgTGlu
ZTo6aW5pdGlhbGl6ZShjb25zdCBDb25zdHJhaW50cyYgY29uc3RyYWludHMpCi17Ci0gICAgQVNT
RVJUKG1fc2tpcEFsaWdubWVudCB8fCBjb25zdHJhaW50cy5oZWlnaHRBbmRCYXNlbGluZSk7Ci0K
LSAgICBMYXlvdXRVbml0IGluaXRpYWxMaW5lSGVpZ2h0OwotICAgIExheW91dFVuaXQgaW5pdGlh
bEJhc2VsaW5lT2Zmc2V0OwotICAgIGlmIChjb25zdHJhaW50cy5oZWlnaHRBbmRCYXNlbGluZSkg
ewotICAgICAgICBtX2luaXRpYWxTdHJ1dCA9IGNvbnN0cmFpbnRzLmhlaWdodEFuZEJhc2VsaW5l
LT5zdHJ1dDsKLSAgICAgICAgaW5pdGlhbExpbmVIZWlnaHQgPSBjb25zdHJhaW50cy5oZWlnaHRB
bmRCYXNlbGluZS0+aGVpZ2h0OwotICAgICAgICBpbml0aWFsQmFzZWxpbmVPZmZzZXQgPSBjb25z
dHJhaW50cy5oZWlnaHRBbmRCYXNlbGluZS0+YmFzZWxpbmVPZmZzZXQ7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIG1faW5pdGlhbFN0cnV0ID0geyB9OwotCi0gICAgYXV0byBsaW5lUmVjdCA9IERpc3Bs
YXk6OlJlY3QgeyBjb25zdHJhaW50cy5sb2dpY2FsVG9wTGVmdCwgeyB9LCBpbml0aWFsTGluZUhl
aWdodCB9OwotICAgIGF1dG8gYmFzZWxpbmUgPSBMaW5lQm94OjpCYXNlbGluZSB7IGluaXRpYWxC
YXNlbGluZU9mZnNldCwgaW5pdGlhbExpbmVIZWlnaHQgLSBpbml0aWFsQmFzZWxpbmVPZmZzZXQg
fTsKLSAgICBtX2xpbmVCb3ggPSBMaW5lQm94IHsgbGluZVJlY3QsIGJhc2VsaW5lLCBpbml0aWFs
QmFzZWxpbmVPZmZzZXQgfTsKLSAgICBtX2xpbmVMb2dpY2FsV2lkdGggPSBjb25zdHJhaW50cy5h
dmFpbGFibGVMb2dpY2FsV2lkdGg7Ci0gICAgbV9oYXNJbnRydXNpdmVGbG9hdCA9IGNvbnN0cmFp
bnRzLmxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdDsKLQotICAgIG1faW5saW5lSXRlbVJ1bnMuY2xl
YXIoKTsKLSAgICBtX3RyaW1tYWJsZUNvbnRlbnQuY2xlYXIoKTsKLX0KLQotc3RhdGljIGJvb2wg
c2hvdWxkUHJlc2VydmVUcmFpbGluZ0NvbnRlbnQoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGlu
ZVRleHRJdGVtKQotewotICAgIGlmICghaW5saW5lVGV4dEl0ZW0uaXNXaGl0ZXNwYWNlKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGF1dG8gd2hpdGVzcGFjZSA9IGlubGluZVRleHRJdGVt
LnN0eWxlKCkud2hpdGVTcGFjZSgpOwotICAgIHJldHVybiB3aGl0ZXNwYWNlID09IFdoaXRlU3Bh
Y2U6OlByZSB8fCB3aGl0ZXNwYWNlID09IFdoaXRlU3BhY2U6OlByZVdyYXA7Ci19Ci0KLXN0YXRp
YyBib29sIHNob3VsZFByZXNlcnZlTGVhZGluZ0NvbnRlbnQoY29uc3QgSW5saW5lVGV4dEl0ZW0m
IGlubGluZVRleHRJdGVtKQotewotICAgIGlmICghaW5saW5lVGV4dEl0ZW0uaXNXaGl0ZXNwYWNl
KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGF1dG8gd2hpdGVzcGFjZSA9IGlubGluZVRl
eHRJdGVtLnN0eWxlKCkud2hpdGVTcGFjZSgpOwotICAgIHJldHVybiB3aGl0ZXNwYWNlID09IFdo
aXRlU3BhY2U6OlByZSB8fCB3aGl0ZXNwYWNlID09IFdoaXRlU3BhY2U6OlByZVdyYXAgfHwgd2hp
dGVzcGFjZSA9PSBXaGl0ZVNwYWNlOjpCcmVha1NwYWNlczsKLX0KLQotTGluZTo6UnVuTGlzdCBM
aW5lOjpjbG9zZShJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50KQotewotICAgIC8vIDEuIFJlbW92ZSB0cmltbWFibGUgdHJhaWxpbmcgY29udGVu
dC4KLSAgICAvLyAyLiBKb2luIHRleHQgcnVucyB0b2dldGhlciB3aGVuIHBvc3NpYmxlIFtmb29d
WyBdW2Jhcl0gLT4gW2ZvbyBiYXJdLgotICAgIC8vIDMuIEFsaWduIG1lcmdlZCBydW5zIGJvdGgg
dmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5LgotICAgIHJlbW92ZVRyYWlsaW5nVHJpbW1hYmxl
Q29udGVudCgpOwotICAgIFJ1bkxpc3QgcnVuTGlzdDsKLSAgICB1bnNpZ25lZCBydW5JbmRleCA9
IDA7Ci0gICAgd2hpbGUgKHJ1bkluZGV4IDwgbV9pbmxpbmVJdGVtUnVucy5zaXplKCkpIHsKLSAg
ICAgICAgLy8gTWVyZ2UgZWxpZ2libGUgcnVucy4KLSAgICAgICAgYXV0byBjb250aW5vdXNDb250
ZW50ID0gQ29udGlub3VzQ29udGVudCB7ICptX2lubGluZUl0ZW1SdW5zW3J1bkluZGV4XSwgaXNU
ZXh0QWxpZ25KdXN0aWZ5KCkgfTsKLSAgICAgICAgd2hpbGUgKCsrcnVuSW5kZXggPCBtX2lubGlu
ZUl0ZW1SdW5zLnNpemUoKSkgewotICAgICAgICAgICAgaWYgKCFjb250aW5vdXNDb250ZW50LmFw
cGVuZCgqbV9pbmxpbmVJdGVtUnVuc1tydW5JbmRleF0pKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIHJ1bkxpc3QuYXBwZW5kKGNvbnRpbm91c0NvbnRlbnQuY2xv
c2UoKSk7Ci0gICAgfQotCi0gICAgaWYgKCFtX3NraXBBbGlnbm1lbnQpIHsKLSAgICAgICAgaWYg
KGlzVmlzdWFsbHlFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2xpbmVCb3gucmVzZXRCYXNlbGlu
ZSgpOwotICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHQoeyB9KTsKLSAgICAg
ICAgfQotICAgICAgICAvLyBSZW1vdmUgZGVzY2VudCB3aGVuIGFsbCBjb250ZW50IGlzIGJhc2Vs
aW5lIGFsaWduZWQgYnV0IG5vbmUgb2YgdGhlbSBoYXZlIGRlc2NlbnQuCi0gICAgICAgIGlmIChm
b3JtYXR0aW5nQ29udGV4dCgpLnF1aXJrcygpLmxpbmVEZXNjZW50TmVlZHNDb2xsYXBzaW5nKHJ1
bkxpc3QpKSB7Ci0gICAgICAgICAgICBtX2xpbmVCb3guc2hyaW5rVmVydGljYWxseShtX2xpbmVC
b3guYmFzZWxpbmUoKS5kZXNjZW50KCkpOwotICAgICAgICAgICAgbV9saW5lQm94LnJlc2V0RGVz
Y2VudCgpOwotICAgICAgICB9Ci0gICAgICAgIGFsaWduQ29udGVudFZlcnRpY2FsbHkocnVuTGlz
dCk7Ci0gICAgICAgIGFsaWduQ29udGVudEhvcml6b250YWxseShydW5MaXN0LCBpc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQpOwotICAgIH0KLSAgICByZXR1cm4gcnVuTGlzdDsKLX0KLQotdm9p
ZCBMaW5lOjphbGlnbkNvbnRlbnRWZXJ0aWNhbGx5KFJ1bkxpc3QmIHJ1bkxpc3QpCi17Ci0gICAg
QVNTRVJUKCFtX3NraXBBbGlnbm1lbnQpOwotICAgIGZvciAoYXV0byYgcnVuIDogcnVuTGlzdCkg
ewotICAgICAgICBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQocnVuKTsKLSAgICAgICAgcnVu
LnNldExvZ2ljYWxIZWlnaHQocnVuQ29udGVudEhlaWdodChydW4pKTsKLSAgICB9Ci0KLSAgICBm
b3IgKGF1dG8mIHJ1biA6IHJ1bkxpc3QpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9w
OwotICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7Ci0gICAgICAgIGF1
dG8gdmVydGljYWxBbGlnbiA9IGxheW91dEJveC5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKTsKLSAg
ICAgICAgYXV0byBhc2NlbnQgPSBsYXlvdXRCb3guc3R5bGUoKS5mb250TWV0cmljcygpLmFzY2Vu
dCgpOwotCi0gICAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbikgewotICAgICAgICBjYXNlIFZl
cnRpY2FsQWxpZ246OkJhc2VsaW5lOgotICAgICAgICAgICAgaWYgKHJ1bi5pc0ZvcmNlZExpbmVC
cmVhaygpIHx8IHJ1bi5pc1RleHQoKSkKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYmFz
ZWxpbmVPZmZzZXQoKSAtIGFzY2VudDsKLSAgICAgICAgICAgIGVsc2UgaWYgKHJ1bi5pc0NvbnRh
aW5lclN0YXJ0KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1h
dHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgICAg
ICBsb2dpY2FsVG9wID0gYmFzZWxpbmVPZmZzZXQoKSAtIGFzY2VudCAtIGJveEdlb21ldHJ5LmJv
cmRlclRvcCgpIC0gYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94
LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAgICAgICAg
IGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4o
bGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZEZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWlu
ZXI+KGxheW91dEJveCkpKTsKLSAgICAgICAgICAgICAgICAvLyBTcGVjIG1ha2VzIHVzIGdlbmVy
YXRlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVtcHR5LgotICAgICAgICAgICAg
ICAgIEFTU0VSVCghZm9ybWF0dGluZ1N0YXRlLmxpbmVCb3hlcygpLmlzRW1wdHkoKSk7Ci0gICAg
ICAgICAgICAgICAgYXV0byBpbmxpbmVCbG9ja0Jhc2VsaW5lT2Zmc2V0ID0gZm9ybWF0dGluZ1N0
YXRlLmxpbmVCb3hlcygpLmxhc3QoKS0+YmFzZWxpbmVPZmZzZXQoKTsKLSAgICAgICAgICAgICAg
ICAvLyBUaGUgaW5saW5lLWJsb2NrJ3MgYmFzZWxpbmUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvIGl0
cyBjb250ZW50IGJveC4gTGV0J3MgY29udmVydCBpdCByZWxhdGl2ZSB0byB0aGUgbWFyZ2luIGJv
eC4KLSAgICAgICAgICAgICAgICAvLyAgIGlubGluZS1ibG9jawotICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgIF9fX19fX19fX19f
X19fXyA8LSBtYXJnaW4gYm94Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgfAotICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgIHwgIF9fX19fX19fX19fXyAgPC0gYm9yZGVyIGJveAotICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfAotICAgICAgICAgICAgICAgIC8vICAgICAgICAg
IHwgfCAgX19fX19fX19fICA8LSBjb250ZW50IGJveAotICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgIHwgfCB8ICAgXgotICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfCB8ICAgfCAgPC0g
YmFzZWxpbmUgb2Zmc2V0Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8IHwgICB8Ci0g
ICAgICAgICAgICAgICAgLy8gICAgIHRleHQgfCB8IHwgICB2IHRleHQKLSAgICAgICAgICAgICAg
ICAvLyAgICAgLS0tLS18LXwtfC0tLS0tLS0tLS0gPC0gYmFzZWxpbmUKLSAgICAgICAgICAgICAg
ICAvLwotICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICAgICAgICAgIGF1dG8gYmFz
ZWxpbmVPZmZzZXRGcm9tTWFyZ2luQm94ID0gYm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBi
b3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9y
KDApICsgaW5saW5lQmxvY2tCYXNlbGluZU9mZnNldDsKLSAgICAgICAgICAgICAgICBsb2dpY2Fs
VG9wID0gYmFzZWxpbmVPZmZzZXQoKSAtIGJhc2VsaW5lT2Zmc2V0RnJvbU1hcmdpbkJveDsKLSAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBiYXNlbGluZU9m
ZnNldCgpIC0gcnVuLmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6Ci0gICAgICAgICAgICBsb2dpY2FsVG9w
ID0geyB9OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6
Qm90dG9tOgotICAgICAgICAgICAgbG9naWNhbFRvcCA9IGxvZ2ljYWxCb3R0b20oKSAtIHJ1bi5s
b2dpY2FsUmVjdCgpLmhlaWdodCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcnVuLmFkanVzdExvZ2ljYWxUb3AobG9naWNh
bFRvcCk7Ci0gICAgICAgIC8vIENvbnZlcnQgcnVucyBmcm9tIHJlbGF0aXZlIHRvIHRoZSBsaW5l
IHRvcC9sZWZ0IHRvIHRoZSBmb3JtYXR0aW5nIHJvb3QncyBib3JkZXIgYm94IHRvcC9sZWZ0Lgot
ICAgICAgICBydW4ubW92ZVZlcnRpY2FsbHkodGhpcy0+bG9naWNhbFRvcCgpKTsKLSAgICAgICAg
cnVuLm1vdmVIb3Jpem9udGFsbHkodGhpcy0+bG9naWNhbExlZnQoKSk7Ci0gICAgfQotfQotCi12
b2lkIExpbmU6Omp1c3RpZnlSdW5zKFJ1bkxpc3QmIHJ1bkxpc3QpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKCFydW5MaXN0LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKGF2YWlsYWJsZVdpZHRoKCkgPiAw
KTsKLSAgICAvLyBOZWVkIHRvIGZpeCB1cCB0aGUgbGFzdCBydW4gZmlyc3QuCi0gICAgYXV0byYg
bGFzdFJ1biA9IHJ1bkxpc3QubGFzdCgpOwotICAgIGlmIChsYXN0UnVuLmhhc0V4cGFuc2lvbk9w
cG9ydHVuaXR5KCkpCi0gICAgICAgIGxhc3RSdW4uYWRqdXN0RXhwYW5zaW9uQmVoYXZpb3IoKmxh
c3RSdW4uZXhwYW5zaW9uQmVoYXZpb3IoKSB8IEZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uKTsKLSAg
ICAvLyBDb2xsZWN0IHRoZSBleHBhbnNpb24gb3Bwb3J0dW5pdHkgbnVtYmVycy4KLSAgICBhdXRv
IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSAwOwotICAgIGZvciAoYXV0byYgcnVuIDogcnVu
TGlzdCkKLSAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCArPSBydW4uZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudCgpOwotICAgIC8vIE5vdGhpbmcgdG8gZGlzdHJpYnV0ZT8KLSAgICBp
ZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBE
aXN0cmlidXRlIHRoZSBleHRyYSBzcGFjZS4KLSAgICBhdXRvIGV4cGFuc2lvblRvRGlzdHJpYnV0
ZSA9IGF2YWlsYWJsZVdpZHRoKCkgLyBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50OwotICAgIExh
eW91dFVuaXQgYWNjdW11bGF0ZWRFeHBhbnNpb247Ci0gICAgZm9yIChhdXRvJiBydW4gOiBydW5M
aXN0KSB7Ci0gICAgICAgIC8vIEV4cGFuZCBhbmQgbW92ZXMgcnVucyBieSB0aGUgYWNjdW11bGF0
ZWQgZXhwYW5zaW9uLgotICAgICAgICBpZiAoIXJ1bi5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgp
KSB7Ci0gICAgICAgICAgICBydW4ubW92ZUhvcml6b250YWxseShhY2N1bXVsYXRlZEV4cGFuc2lv
bik7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQocnVu
LmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKSk7Ci0gICAgICAgIGF1dG8gY29tcHV0ZWRFeHBh
bnNpb24gPSBleHBhbnNpb25Ub0Rpc3RyaWJ1dGUgKiBydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudCgpOwotICAgICAgICBydW4uc2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9uKGNvbXB1
dGVkRXhwYW5zaW9uKTsKLSAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoYWNjdW11bGF0ZWRF
eHBhbnNpb24pOwotICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lvbiArPSBjb21wdXRlZEV4cGFu
c2lvbjsKLSAgICB9Ci19Ci0KLXZvaWQgTGluZTo6YWxpZ25Db250ZW50SG9yaXpvbnRhbGx5KFJ1
bkxpc3QmIHJ1bkxpc3QsIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBsYXN0TGluZSkgY29u
c3QKLXsKLSAgICBBU1NFUlQoIW1fc2tpcEFsaWdubWVudCk7Ci0gICAgaWYgKHJ1bkxpc3QuaXNF
bXB0eSgpIHx8IGF2YWlsYWJsZVdpZHRoKCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKGlzVGV4dEFsaWduSnVzdGlmeSgpKSB7Ci0gICAgICAgIC8vIERvIG5vdCBqdXN0aWZ5IGFs
aWduIHRoZSBsYXN0IGxpbmUuCi0gICAgICAgIGlmIChsYXN0TGluZSA9PSBJc0xhc3RMaW5lV2l0
aElubGluZUNvbnRlbnQ6Ok5vKQotICAgICAgICAgICAganVzdGlmeVJ1bnMocnVuTGlzdCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGFkanVzdG1lbnRGb3JBbGlnbm1lbnQg
PSBbJl0oKSAtPiBPcHRpb25hbDxMYXlvdXRVbml0PiB7Ci0gICAgICAgIHN3aXRjaCAoKm1faG9y
aXpvbnRhbEFsaWdubWVudCkgewotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6Ci0g
ICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKLSAgICAgICAgY2FzZSBUZXh0
QWxpZ25Nb2RlOjpTdGFydDoKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIGNhc2Ug
VGV4dEFsaWduTW9kZTo6UmlnaHQ6Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0
UmlnaHQ6Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bWF4KGF2YWlsYWJsZVdpZHRoKCksIDBfbHUpOwotICAgICAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OkNlbnRlcjoKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50
ZXI6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXgoYXZhaWxhYmxlV2lkdGgoKSAvIDIsIDBf
bHUpOwotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH07Ci0K
LSAgICBhdXRvIGFkanVzdG1lbnQgPSBhZGp1c3RtZW50Rm9yQWxpZ25tZW50KCk7Ci0gICAgaWYg
KCFhZGp1c3RtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIHJ1biA6IHJ1
bkxpc3QpCi0gICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLX0KLQot
dm9pZCBMaW5lOjpyZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQoKQotewotICAgIGlmICht
X3RyaW1tYWJsZUNvbnRlbnQuaXNFbXB0eSgpIHx8IG1faW5saW5lSXRlbVJ1bnMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDb2xsYXBzZSB0cmltbWFibGUgdHJhaWxpbmcg
Y29udGVudAotICAgIGZvciAoYXV0byogdHJpbW1hYmxlUnVuIDogbV90cmltbWFibGVDb250ZW50
LnJ1bnMoKSkgewotICAgICAgICBBU1NFUlQodHJpbW1hYmxlUnVuLT5pc1RleHQoKSk7Ci0gICAg
ICAgIC8vIEZJWE1FOiBXZSBtaWdodCBuZWVkIHRvIGJlIGFibGUgdG8gZGlmZmVyZW50aWF0ZSBi
ZXR3ZWVuIHRyaW1tZWQgYW5kIGNvbGxhcHNlZCBydW5zLgotICAgICAgICB0cmltbWFibGVSdW4t
PnNldENvbGxhcHNlc1RvWmVyb0FkdmFuY2VXaWR0aCgpOwotICAgIH0KLSAgICBtX2xpbmVCb3gu
c2hyaW5rSG9yaXpvbnRhbGx5KG1fdHJpbW1hYmxlQ29udGVudC53aWR0aCgpKTsKLSAgICBtX3Ry
aW1tYWJsZUNvbnRlbnQuY2xlYXIoKTsKLX0KLQotdm9pZCBMaW5lOjptb3ZlTG9naWNhbExlZnQo
TGF5b3V0VW5pdCBkZWx0YSkKLXsKLSAgICBpZiAoIWRlbHRhKQotICAgICAgICByZXR1cm47Ci0g
ICAgQVNTRVJUKGRlbHRhID4gMCk7Ci0gICAgbV9saW5lQm94Lm1vdmVIb3Jpem9udGFsbHkoZGVs
dGEpOwotICAgIG1fbGluZUxvZ2ljYWxXaWR0aCAtPSBkZWx0YTsKLX0KLQotdm9pZCBMaW5lOjpt
b3ZlTG9naWNhbFJpZ2h0KExheW91dFVuaXQgZGVsdGEpCi17Ci0gICAgQVNTRVJUKGRlbHRhID4g
MCk7Ci0gICAgbV9saW5lTG9naWNhbFdpZHRoIC09IGRlbHRhOwotfQotCi12b2lkIExpbmU6OmFw
cGVuZChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0
aCkKLXsKLSAgICBpZiAoaW5saW5lSXRlbS5pc1RleHQoKSkKLSAgICAgICAgcmV0dXJuIGFwcGVu
ZFRleHRDb250ZW50KGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSwgbG9naWNh
bFdpZHRoKTsKLSAgICBpZiAoaW5saW5lSXRlbS5pc0ZvcmNlZExpbmVCcmVhaygpKQotICAgICAg
ICByZXR1cm4gYXBwZW5kTGluZUJyZWFrKGlubGluZUl0ZW0pOwotICAgIGlmIChpbmxpbmVJdGVt
LmlzQ29udGFpbmVyU3RhcnQoKSkKLSAgICAgICAgcmV0dXJuIGFwcGVuZElubGluZUNvbnRhaW5l
clN0YXJ0KGlubGluZUl0ZW0sIGxvZ2ljYWxXaWR0aCk7Ci0gICAgaWYgKGlubGluZUl0ZW0uaXND
b250YWluZXJFbmQoKSkKLSAgICAgICAgcmV0dXJuIGFwcGVuZElubGluZUNvbnRhaW5lckVuZChp
bmxpbmVJdGVtLCBsb2dpY2FsV2lkdGgpOwotICAgIGlmIChpbmxpbmVJdGVtLmxheW91dEJveCgp
LnJlcGxhY2VkKCkpCi0gICAgICAgIHJldHVybiBhcHBlbmRSZXBsYWNlZElubGluZUJveChpbmxp
bmVJdGVtLCBsb2dpY2FsV2lkdGgpOwotICAgIGFwcGVuZE5vblJlcGxhY2VkSW5saW5lQm94KGlu
bGluZUl0ZW0sIGxvZ2ljYWxXaWR0aCk7Ci19Ci0KLXZvaWQgTGluZTo6YXBwZW5kTm9uQnJlYWth
YmxlU3BhY2UoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgY29uc3QgRGlzcGxheTo6UmVj
dCYgbG9naWNhbFJlY3QpCi17Ci0gICAgbV9pbmxpbmVJdGVtUnVucy5hcHBlbmQobWFrZVVuaXF1
ZTxJbmxpbmVJdGVtUnVuPihpbmxpbmVJdGVtLCBsb2dpY2FsUmVjdCkpOwotICAgIG1fbGluZUJv
eC5leHBhbmRIb3Jpem9udGFsbHkobG9naWNhbFJlY3Qud2lkdGgoKSk7Ci0gICAgaWYgKGxvZ2lj
YWxSZWN0LndpZHRoKCkpCi0gICAgICAgIG1fbGluZUJveC5zZXRJc0NvbnNpZGVyZWROb25FbXB0
eSgpOwotfQotCi12b2lkIExpbmU6OmFwcGVuZElubGluZUNvbnRhaW5lclN0YXJ0KGNvbnN0IElu
bGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuaXQgbG9naWNhbFdpZHRoKQotewotICAgIC8v
IFRoaXMgaXMgcmVhbGx5IGp1c3QgYSBwbGFjZWhvbGRlciB0byBtYXJrIHRoZSBzdGFydCBvZiB0
aGUgaW5saW5lIGxldmVsIGNvbnRhaW5lciA8c3Bhbj4uCi0gICAgYXBwZW5kTm9uQnJlYWthYmxl
U3BhY2UoaW5saW5lSXRlbSwgRGlzcGxheTo6UmVjdCB7IDAsIGNvbnRlbnRMb2dpY2FsV2lkdGgo
KSwgbG9naWNhbFdpZHRoLCB7IH0gfSk7Ci19Ci0KLXZvaWQgTGluZTo6YXBwZW5kSW5saW5lQ29u
dGFpbmVyRW5kKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuaXQgbG9naWNh
bFdpZHRoKQotewotICAgIC8vIFRoaXMgaXMgcmVhbGx5IGp1c3QgYSBwbGFjZWhvbGRlciB0byBt
YXJrIHRoZSBlbmQgb2YgdGhlIGlubGluZSBsZXZlbCBjb250YWluZXIgPC9zcGFuPi4KLSAgICBh
cHBlbmROb25CcmVha2FibGVTcGFjZShpbmxpbmVJdGVtLCBEaXNwbGF5OjpSZWN0IHsgMCwgY29u
dGVudExvZ2ljYWxSaWdodCgpLCBsb2dpY2FsV2lkdGgsIHsgfSB9KTsKLX0KLQotdm9pZCBMaW5l
OjphcHBlbmRUZXh0Q29udGVudChjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lSXRlbSwgTGF5
b3V0VW5pdCBsb2dpY2FsV2lkdGgpCi17Ci0gICAgYXV0byBpc1RyaW1tYWJsZSA9ICFzaG91bGRQ
cmVzZXJ2ZVRyYWlsaW5nQ29udGVudChpbmxpbmVJdGVtKTsKLSAgICBpZiAoIWlzVHJpbW1hYmxl
KQotICAgICAgICBtX3RyaW1tYWJsZUNvbnRlbnQuY2xlYXIoKTsKLQotICAgIGF1dG8gd2lsbENv
bGxhcHNlQ29tcGxldGVseSA9IFsmXSB7Ci0gICAgICAgIC8vIEVtcHR5IHJ1bi4KLSAgICAgICAg
aWYgKCFpbmxpbmVJdGVtLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWxvZ2ljYWxX
aWR0aCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBM
ZWFkaW5nIHdoaXRlc3BhY2UuCi0gICAgICAgIGlmIChtX2lubGluZUl0ZW1SdW5zLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIHJldHVybiAhc2hvdWxkUHJlc2VydmVMZWFkaW5nQ29udGVudChpbmxp
bmVJdGVtKTsKLQotICAgICAgICBpZiAoIWlubGluZUl0ZW0uaXNDb2xsYXBzaWJsZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdCBpdGVt
IGlzIGNvbGxhcHNlZCBhcyB3ZWxsLgotICAgICAgICBmb3IgKGF1dG8gaSA9IG1faW5saW5lSXRl
bVJ1bnMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBhdXRvJiBydW4gPSBtX2lubGluZUl0
ZW1SdW5zW2ldOwotICAgICAgICAgICAgaWYgKHJ1bi0+aXNCb3goKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcv
Y3NzLXRleHQtMy8jd2hpdGUtc3BhY2UtcGhhc2UtMQotICAgICAgICAgICAgLy8gQW55IGNvbGxh
cHNpYmxlIHNwYWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhbm90aGVyIGNvbGxhcHNpYmxlIHNw
YWNl4oCUZXZlbiBvbmUgb3V0c2lkZSB0aGUgYm91bmRhcnkgb2YgdGhlIGlubGluZSBjb250YWlu
aW5nIHRoYXQgc3BhY2UsCi0gICAgICAgICAgICAvLyBwcm92aWRlZCBib3RoIHNwYWNlcyBhcmUg
d2l0aGluIHRoZSBzYW1lIGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHTigJRpcyBjb2xsYXBzZWQg
dG8gaGF2ZSB6ZXJvIGFkdmFuY2Ugd2lkdGguCi0gICAgICAgICAgICAvLyA6ICI8c3Bhbj4gIDwv
c3Bhbj4gIiA8LSB0aGUgdHJhaWxpbmcgd2hpdGVzcGFjZSBjb2xsYXBzZXMgY29tcGxldGVseS4K
LSAgICAgICAgICAgIC8vIE5vdCB0aGF0IHdoZW4gdGhlIGlubGluZSBjb250YWluZXIgaGFzIHBy
ZXNlcnZlIHdoaXRlc3BhY2Ugc3R5bGUsICI8c3BhbiBzdHlsZT0id2hpdGUtc3BhY2U6IHByZSI+
ICA8L3NwYW4+ICIgPC0gdGhpcyB3aGl0ZXNwYWNlIHN0YXlzIGFyb3VuZC4KLSAgICAgICAgICAg
IGlmIChydW4tPmlzVGV4dCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBydW4tPmlzQ29sbGFw
c2libGUoKTsKLSAgICAgICAgICAgIEFTU0VSVChydW4tPmlzQ29udGFpbmVyU3RhcnQoKSB8fCBy
dW4tPmlzQ29udGFpbmVyRW5kKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH07Ci0KLSAgICBhdXRvIGNvbGxhcHNlZFJ1biA9IGlubGluZUl0ZW0uaXNDb2xsYXBzaWJs
ZSgpICYmIGlubGluZUl0ZW0ubGVuZ3RoKCkgPiAxOwotICAgIGF1dG8gY29udGVudFN0YXJ0ID0g
aW5saW5lSXRlbS5zdGFydCgpOwotICAgIGF1dG8gY29udGVudExlbmd0aCA9ICBjb2xsYXBzZWRS
dW4gPyAxIDogaW5saW5lSXRlbS5sZW5ndGgoKTsKLSAgICBhdXRvIGxpbmVSdW4gPSBtYWtlVW5p
cXVlPElubGluZUl0ZW1SdW4+KGlubGluZUl0ZW0sIERpc3BsYXk6OlJlY3QgeyAwLCBjb250ZW50
TG9naWNhbFdpZHRoKCksIGxvZ2ljYWxXaWR0aCwgeyB9IH0sCi0gICAgICAgIERpc3BsYXk6OlJ1
bjo6VGV4dENvbnRleHQgeyBjb250ZW50U3RhcnQsIGNvbnRlbnRMZW5ndGgsIGlubGluZUl0ZW0u
bGF5b3V0Qm94KCkudGV4dENvbnRleHQoKS0+Y29udGVudC5zdWJzdHJpbmcoY29udGVudFN0YXJ0
LCBjb250ZW50TGVuZ3RoKSB9KTsKLQotICAgIGF1dG8gY29sbGFwc2VzVG9aZXJvQWR2YW5jZVdp
ZHRoID0gd2lsbENvbGxhcHNlQ29tcGxldGVseSgpOwotICAgIGlmIChjb2xsYXBzZXNUb1plcm9B
ZHZhbmNlV2lkdGgpCi0gICAgICAgIGxpbmVSdW4tPnNldENvbGxhcHNlc1RvWmVyb0FkdmFuY2VX
aWR0aCgpOwotICAgIGVsc2UKLSAgICAgICAgbV9saW5lQm94LnNldElzQ29uc2lkZXJlZE5vbkVt
cHR5KCk7Ci0KLSAgICBpZiAoY29sbGFwc2VkUnVuKQotICAgICAgICBsaW5lUnVuLT5zZXRJc0Nv
bGxhcHNlZCgpOwotICAgIGlmIChpc1RyaW1tYWJsZSkKLSAgICAgICAgbV90cmltbWFibGVDb250
ZW50LmFwcGVuZCgqbGluZVJ1bik7Ci0KLSAgICBtX2xpbmVCb3guZXhwYW5kSG9yaXpvbnRhbGx5
KGxpbmVSdW4tPmxvZ2ljYWxSZWN0KCkud2lkdGgoKSk7Ci0gICAgbV9pbmxpbmVJdGVtUnVucy5h
cHBlbmQoV1RGTW92ZShsaW5lUnVuKSk7Ci19Ci0KLXZvaWQgTGluZTo6YXBwZW5kTm9uUmVwbGFj
ZWRJbmxpbmVCb3goY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0VW5pdCBsb2dp
Y2FsV2lkdGgpCi17Ci0gICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3go
KTsKLSAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlG
b3JCb3gobGF5b3V0Qm94KTsKLSAgICBhdXRvIGhvcml6b250YWxNYXJnaW4gPSBib3hHZW9tZXRy
eS5ob3Jpem9udGFsTWFyZ2luKCk7Ci0gICAgbV9pbmxpbmVJdGVtUnVucy5hcHBlbmQobWFrZVVu
aXF1ZTxJbmxpbmVJdGVtUnVuPihpbmxpbmVJdGVtLCBEaXNwbGF5OjpSZWN0IHsgMCwgY29udGVu
dExvZ2ljYWxXaWR0aCgpICsgaG9yaXpvbnRhbE1hcmdpbi5zdGFydCwgbG9naWNhbFdpZHRoLCB7
IH0gfSkpOwotICAgIG1fbGluZUJveC5leHBhbmRIb3Jpem9udGFsbHkobG9naWNhbFdpZHRoICsg
aG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGhvcml6b250YWxNYXJnaW4uZW5kKTsKLSAgICBtX2xp
bmVCb3guc2V0SXNDb25zaWRlcmVkTm9uRW1wdHkoKTsKLSAgICBtX3RyaW1tYWJsZUNvbnRlbnQu
Y2xlYXIoKTsKLSAgICBpZiAoIWxheW91dEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0
KCkgfHwgIWJveEdlb21ldHJ5LmlzRW1wdHkoKSkKLSAgICAgICAgbV9saW5lQm94LnNldElzQ29u
c2lkZXJlZE5vbkVtcHR5KCk7Ci19Ci0KLXZvaWQgTGluZTo6YXBwZW5kUmVwbGFjZWRJbmxpbmVC
b3goY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgp
Ci17Ci0gICAgQVNTRVJUKGlubGluZUl0ZW0ubGF5b3V0Qm94KCkuaXNSZXBsYWNlZCgpKTsKLSAg
ICAvLyBGSVhNRTogU3VyZWx5IHJlcGxhY2VkIGJveGVzIGJlaGF2ZSBkaWZmZXJlbnRseS4KLSAg
ICBhcHBlbmROb25SZXBsYWNlZElubGluZUJveChpbmxpbmVJdGVtLCBsb2dpY2FsV2lkdGgpOwot
ICAgIG1fbGluZUJveC5zZXRJc0NvbnNpZGVyZWROb25FbXB0eSgpOwotfQotCi12b2lkIExpbmU6
OmFwcGVuZExpbmVCcmVhayhjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQotewotICAgIG1f
bGluZUJveC5zZXRJc0NvbnNpZGVyZWROb25FbXB0eSgpOwotICAgIG1faW5saW5lSXRlbVJ1bnMu
YXBwZW5kKG1ha2VVbmlxdWU8SW5saW5lSXRlbVJ1bj4oaW5saW5lSXRlbSwgRGlzcGxheTo6UmVj
dCB7IDAsIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgeyB9LCB7IH0gfSkpOwotfQotCi12b2lkIExp
bmU6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodChjb25zdCBSdW4mIHJ1bikKLXsKLSAgICBh
dXRvJiBiYXNlbGluZSA9IG1fbGluZUJveC5iYXNlbGluZSgpOwotICAgIGlmIChydW4uaXNUZXh0
KCkgfHwgcnVuLmlzRm9yY2VkTGluZUJyZWFrKCkpIHsKLSAgICAgICAgLy8gRm9yIHRleHQgY29u
dGVudCB3ZSBzZXQgdGhlIGJhc2VsaW5lIGVpdGhlciB0aHJvdWdoIHRoZSBpbml0aWFsIHN0cnV0
IChzZXQgYnkgdGhlIGZvcm1hdHRpbmcgY29udGV4dCByb290KSBvcgotICAgICAgICAvLyB0aHJv
dWdoIHRoZSBpbmxpbmUgY29udGFpbmVyIChzdGFydCkgLXNlZSBhYm92ZS4gTm9ybWFsbHkgdGhl
IHRleHQgY29udGVudCBpdHNlbGYgZG9lcyBub3Qgc3RyZXRjaCB0aGUgbGluZS4KLSAgICAgICAg
aWYgKCFtX2luaXRpYWxTdHJ1dCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9saW5l
Qm94LnNldEFzY2VudElmR3JlYXRlcihtX2luaXRpYWxTdHJ1dC0+YXNjZW50KCkpOwotICAgICAg
ICBtX2xpbmVCb3guc2V0RGVzY2VudElmR3JlYXRlcihtX2luaXRpYWxTdHJ1dC0+ZGVzY2VudCgp
KTsKLSAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIoYmFzZWxpbmUu
aGVpZ2h0KCkpOwotICAgICAgICBtX2luaXRpYWxTdHJ1dCA9IHsgfTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKLSAgICBh
dXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIGlmIChydW4uaXNDb250YWluZXJT
dGFydCgpKSB7Ci0gICAgICAgIC8vIElubGluZSBjb250YWluZXJzIHN0cmV0Y2ggdGhlIGxpbmUg
YnkgdGhlaXIgZm9udCBzaXplLgotICAgICAgICAvLyBWZXJ0aWNhbCBtYXJnaW5zLCBwYWRkaW5n
cyBhbmQgYm9yZGVycyBkb24ndCBjb250cmlidXRlIHRvIHRoZSBsaW5lIGhlaWdodC4KLSAgICAg
ICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250TWV0cmljcygpOwotICAgICAgICBpZiAo
c3R5bGUudmVydGljYWxBbGlnbigpID09IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lKSB7Ci0gICAg
ICAgICAgICBhdXRvIGhhbGZMZWFkaW5nID0gaGFsZkxlYWRpbmdNZXRyaWNzKGZvbnRNZXRyaWNz
LCBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICAvLyBCb3RoIGhhbGZs
ZWFkaW5nIGFzY2VudCBhbmQgZGVzY2VudCBjb3VsZCBiZSBuZWdhdGl2ZSAodGFsbCBmb250IHZz
LiBzbWFsbCBsaW5lLWhlaWdodCB2YWx1ZSkKLSAgICAgICAgICAgIGlmIChoYWxmTGVhZGluZy5k
ZXNjZW50KCkgPiAwKQotICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXREZXNjZW50SWZHcmVh
dGVyKGhhbGZMZWFkaW5nLmRlc2NlbnQoKSk7Ci0gICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcu
YXNjZW50KCkgPiAwKQotICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBc2NlbnRJZkdyZWF0
ZXIoaGFsZkxlYWRpbmcuYXNjZW50KCkpOwotICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2lj
YWxIZWlnaHRJZkdyZWF0ZXIoYmFzZWxpbmUuaGVpZ2h0KCkpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKGZvbnRNZXRyaWNz
LmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChydW4uaXNDb250
YWluZXJFbmQoKSkgewotICAgICAgICAvLyBUaGUgbGluZSdzIGJhc2VsaW5lIGFuZCBoZWlnaHQg
aGF2ZSBhbHJlYWR5IGJlZW4gYWRqdXN0ZWQgYXQgQ29udGFpbmVyU3RhcnQuCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAocnVuLmlzQm94KCkpIHsKLSAgICAgICAgYXV0byYgYm94
R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7
Ci0gICAgICAgIGF1dG8gbWFyZ2luQm94SGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQm94SGVp
Z2h0KCk7Ci0KLSAgICAgICAgc3dpdGNoIChzdHlsZS52ZXJ0aWNhbEFsaWduKCkpIHsKLSAgICAg
ICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogewotICAgICAgICAgICAgaWYgKGxheW91
dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAgICAgICAgIC8vIElubGluZS1ibG9ja3Mgd2l0
aCBpbmxpbmUgY29udGVudCBhbHdheXMgaGF2ZSBiYXNlbGluZXMuCi0gICAgICAgICAgICAgICAg
YXV0byYgZm9ybWF0dGluZ1N0YXRlID0gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihs
YXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRlKGRvd25jYXN0PENvbnRhaW5l
cj4obGF5b3V0Qm94KSkpOwotICAgICAgICAgICAgICAgIC8vIFNwZWMgbWFrZXMgdXMgZ2VuZXJh
dGUgYXQgbGVhc3Qgb25lIGxpbmUgLWV2ZW4gaWYgaXQgaXMgZW1wdHkuCi0gICAgICAgICAgICAg
ICAgQVNTRVJUKCFmb3JtYXR0aW5nU3RhdGUubGluZUJveGVzKCkuaXNFbXB0eSgpKTsKLSAgICAg
ICAgICAgICAgICBhdXRvJiBsYXN0TGluZUJveCA9ICpmb3JtYXR0aW5nU3RhdGUubGluZUJveGVz
KCkubGFzdCgpOwotICAgICAgICAgICAgICAgIGF1dG8gaW5saW5lQmxvY2tCYXNlbGluZSA9IGxh
c3RMaW5lQm94LmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgYXV0byBiZWZvcmVIZWlnaHQg
PSBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsg
Ym94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7Ci0KLSAgICAgICAgICAgICAgICBt
X2xpbmVCb3guc2V0QXNjZW50SWZHcmVhdGVyKGlubGluZUJsb2NrQmFzZWxpbmUuYXNjZW50KCkp
OwotICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXREZXNjZW50SWZHcmVhdGVyKGlubGluZUJs
b2NrQmFzZWxpbmUuZGVzY2VudCgpKTsKLSAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QmFz
ZWxpbmVPZmZzZXRJZkdyZWF0ZXIoYmVmb3JlSGVpZ2h0ICsgbGFzdExpbmVCb3guYmFzZWxpbmVP
ZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdy
ZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgLy8gTm9uIGlubGluZS1ibG9jayBib3hlcyBzaXQgb24gdGhlIGJhc2VsaW5lIChpbmNs
dWRpbmcgdGhlaXIgYm90dG9tIG1hcmdpbikuCi0gICAgICAgICAgICAgICAgbV9saW5lQm94LnNl
dEFzY2VudElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAgICAgICAgIC8vIEln
bm9yZSBuZWdhdGl2ZSBkZXNjZW50ICh5ZXMsIG5lZ2F0aXZlIGRlc2NlbnQgaXMgYSB0aGluZyku
Ci0gICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFy
Z2luQm94SGVpZ2h0ICsgc3RkOjptYXgoTGF5b3V0VW5pdCgpLCBiYXNlbGluZS5kZXNjZW50KCkp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgotICAgICAgICAgICAgLy8gVG9wIGFsaWduIGNvbnRl
bnQgbmV2ZXIgY2hhbmdlcyB0aGUgYmFzZWxpbmUsIGl0IG9ubHkgcHVzaGVzIHRoZSBib3R0b20g
b2YgdGhlIGxpbmUgZnVydGhlciBkb3duLgotICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2lj
YWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbTogewotICAgICAgICAgICAgLy8gQm90
dG9tIGFsaWduZWQsIHRhbGwgY29udGVudCBwdXNoZXMgdGhlIGJhc2VsaW5lIGZ1cnRoZXIgZG93
biBmcm9tIHRoZSBsaW5lIHRvcC4KLSAgICAgICAgICAgIGF1dG8gbGluZUxvZ2ljYWxIZWlnaHQg
PSBtX2xpbmVCb3gubG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAgaWYgKG1hcmdpbkJveEhl
aWdodCA+IGxpbmVMb2dpY2FsSGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgbV9saW5lQm94LnNl
dExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAg
ICBtX2xpbmVCb3guc2V0QmFzZWxpbmVPZmZzZXRJZkdyZWF0ZXIobV9saW5lQm94LmJhc2VsaW5l
T2Zmc2V0KCkgKyAobWFyZ2luQm94SGVpZ2h0IC0gbGluZUxvZ2ljYWxIZWlnaHQpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLX0KLQotTGF5b3V0VW5pdCBMaW5lOjpydW5Db250ZW50SGVpZ2h0KGNvbnN0
IFJ1biYgcnVuKSBjb25zdAotewotICAgIEFTU0VSVCghbV9za2lwQWxpZ25tZW50KTsKLSAgICBh
dXRvJiBmb250TWV0cmljcyA9IHJ1bi5sYXlvdXRCb3goKS5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7
Ci0gICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNGb3JjZWRMaW5lQnJlYWsoKSkKLSAgICAg
ICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOwotCi0gICAgaWYgKHJ1bi5pc0NvbnRhaW5l
clN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgIHJldHVybiBmb250TWV0
cmljcy5oZWlnaHQoKTsKLQotICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsK
LSAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KTsKLSAgICBpZiAobGF5b3V0Qm94LnJlcGxhY2VkKCkgfHwgbGF5b3V0Qm94
LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5jb250
ZW50Qm94SGVpZ2h0KCk7Ci0KLSAgICAvLyBOb24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBp
bmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJpdCBtaXNsZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4g
Ym94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRlbnQgaGVpZ2h0IGhlcmUuCi0gICAgcmV0dXJuIGJv
eEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOwotfQotCi12b2lkIExpbmU6OlRyaW1tYWJsZUNv
bnRlbnQ6OmFwcGVuZChJbmxpbmVJdGVtUnVuJiBpbmxpbmVJdGVtUnVuKQotewotICAgIEFTU0VS
VChpbmxpbmVJdGVtUnVuLmxvZ2ljYWxSZWN0KCkud2lkdGgoKSA+PSAwKTsKLSAgICBtX3dpZHRo
ICs9IGlubGluZUl0ZW1SdW4ubG9naWNhbFJlY3QoKS53aWR0aCgpOwotICAgIG1faW5saW5lSXRl
bVJ1bnMuYXBwZW5kKCZpbmxpbmVJdGVtUnVuKTsKLX0KLQotTGluZUJveDo6QmFzZWxpbmUgTGlu
ZTo6aGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcywgTGF5
b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdodCkKLXsKLSAgICBhdXRvIGFzY2VudCA9IGZvbnRNZXRy
aWNzLmFzY2VudCgpOwotICAgIGF1dG8gZGVzY2VudCA9IGZvbnRNZXRyaWNzLmRlc2NlbnQoKTsK
LSAgICAvLyAxMC44LjEgTGVhZGluZyBhbmQgaGFsZi1sZWFkaW5nCi0gICAgYXV0byBsZWFkaW5n
ID0gbGluZUxvZ2ljYWxIZWlnaHQgLSAoYXNjZW50ICsgZGVzY2VudCk7Ci0gICAgLy8gSW5saW5l
IHRyZWUgaXMgYWxsIGludGVnZXIgYmFzZWQuCi0gICAgYXV0byBhZGp1c3RlZEFzY2VudCA9IHN0
ZDo6bWF4KChhc2NlbnQgKyBsZWFkaW5nIC8gMikuZmxvb3IoKSwgMCk7Ci0gICAgYXV0byBhZGp1
c3RlZERlc2NlbnQgPSBzdGQ6Om1heCgoZGVzY2VudCArIGxlYWRpbmcgLyAyKS5jZWlsKCksIDAp
OwotICAgIHJldHVybiB7IGFkanVzdGVkQXNjZW50LCBhZGp1c3RlZERlc2NlbnQgfTsKLX0KLQot
TGF5b3V0U3RhdGUmIExpbmU6OmxheW91dFN0YXRlKCkgY29uc3QKLXsgCi0gICAgcmV0dXJuIGZv
cm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUoKTsKLX0KLQotY29uc3QgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQmIExpbmU6OmZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKLX0gCi0KLX0KLX0KLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5l
LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhYjI2YzFhMzM3YWVkZjY2ZGRlODM5OTBh
YmI5OTAzM2Q5NGYzYzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAi
RGlzcGxheVJ1bi5oIgotI2luY2x1ZGUgIklubGluZUl0ZW0uaCIKLSNpbmNsdWRlICJJbmxpbmVM
aW5lQm94LmgiCi0jaW5jbHVkZSAiSW5saW5lVGV4dEl0ZW0uaCIKLSNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi1z
dHJ1Y3QgQ29udGlub3VzQ29udGVudDsKLWNsYXNzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Owot
Y2xhc3MgSW5saW5lSXRlbVJ1bjsKLQotY2xhc3MgTGluZSB7Ci0gICAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRChMaW5lKTsKLXB1YmxpYzoKLSAgICBzdHJ1Y3QgQ29uc3RyYWludHMgewotICAgICAg
ICBMYXlvdXRQb2ludCBsb2dpY2FsVG9wTGVmdDsKLSAgICAgICAgTGF5b3V0VW5pdCBhdmFpbGFi
bGVMb2dpY2FsV2lkdGg7Ci0gICAgICAgIGJvb2wgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0IHsg
ZmFsc2UgfTsKLSAgICAgICAgc3RydWN0IEhlaWdodEFuZEJhc2VsaW5lIHsKLSAgICAgICAgICAg
IExheW91dFVuaXQgaGVpZ2h0OwotICAgICAgICAgICAgTGF5b3V0VW5pdCBiYXNlbGluZU9mZnNl
dDsKLSAgICAgICAgICAgIE9wdGlvbmFsPExpbmVCb3g6OkJhc2VsaW5lPiBzdHJ1dDsKLSAgICAg
ICAgfTsKLSAgICAgICAgT3B0aW9uYWw8SGVpZ2h0QW5kQmFzZWxpbmU+IGhlaWdodEFuZEJhc2Vs
aW5lOwotICAgIH07Ci0gICAgZW51bSBjbGFzcyBTa2lwQWxpZ25tZW50IHsgTm8sIFllcyB9Owot
ICAgIExpbmUoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBPcHRpb25hbDxUZXh0QWxp
Z25Nb2RlPiwgU2tpcEFsaWdubWVudCk7Ci0gICAgfkxpbmUoKTsKLQotICAgIHZvaWQgaW5pdGlh
bGl6ZShjb25zdCBDb25zdHJhaW50cyYpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IElubGluZUl0
ZW0mLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7Ci0gICAgYm9vbCBpc1Zpc3VhbGx5RW1wdHko
KSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3guaXNDb25zaWRlcmVkRW1wdHkoKTsgfQotICAgIGJv
b2wgaGFzSW50cnVzaXZlRmxvYXQoKSBjb25zdCB7IHJldHVybiBtX2hhc0ludHJ1c2l2ZUZsb2F0
OyB9Ci0gICAgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2lj
YWxXaWR0aCgpIC0gY29udGVudExvZ2ljYWxXaWR0aCgpOyB9Ci0KLSAgICBMYXlvdXRVbml0IHRy
YWlsaW5nVHJpbW1hYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3RyaW1tYWJsZUNvbnRlbnQu
d2lkdGgoKTsgfQotCi0gICAgY29uc3QgTGluZUJveCYgbGluZUJveCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGluZUJveDsgfQotICAgIHZvaWQgbW92ZUxvZ2ljYWxMZWZ0KExheW91dFVuaXQpOwotICAg
IHZvaWQgbW92ZUxvZ2ljYWxSaWdodChMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNldEhhc0ludHJ1
c2l2ZUZsb2F0KCkgeyBtX2hhc0ludHJ1c2l2ZUZsb2F0ID0gdHJ1ZTsgfQotCi0gICAgc3RydWN0
IFJ1biB7Ci0gICAgICAgIFJ1bihjb25zdCBJbmxpbmVJdGVtUnVuJik7Ci0gICAgICAgIFJ1bihj
b25zdCBJbmxpbmVJdGVtUnVuJiwgY29uc3QgRGlzcGxheTo6UmVjdCYsIGNvbnN0IERpc3BsYXk6
OlJ1bjo6VGV4dENvbnRleHQmLCB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KTsK
LSAgICAgICAgUnVuKFJ1biYmKSA9IGRlZmF1bHQ7Ci0gICAgICAgIFJ1biYgb3BlcmF0b3I9KFJ1
biYmIG90aGVyKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGUgPT0gSW5saW5lSXRlbTo6VHlwZTo6VGV4dDsgfQotICAgICAgICBib29sIGlz
Qm94KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IElubGluZUl0ZW06OlR5cGU6OkJveDsgfQot
ICAgICAgICBib29sIGlzRm9yY2VkTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09
IElubGluZUl0ZW06OlR5cGU6OkZvcmNlZExpbmVCcmVhazsgfQotICAgICAgICBib29sIGlzQ29u
dGFpbmVyU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gSW5saW5lSXRlbTo6VHlwZTo6
Q29udGFpbmVyU3RhcnQ7IH0KLSAgICAgICAgYm9vbCBpc0NvbnRhaW5lckVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSA9PSBJbmxpbmVJdGVtOjpUeXBlOjpDb250YWluZXJFbmQ7IH0KLQotICAg
ICAgICBjb25zdCBCb3gmIGxheW91dEJveCgpIGNvbnN0IHsgcmV0dXJuICptX2xheW91dEJveDsg
fQotICAgICAgICBjb25zdCBEaXNwbGF5OjpSZWN0JiBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbG9naWNhbFJlY3Q7IH0KLSAgICAgICAgT3B0aW9uYWw8RGlzcGxheTo6UnVuOjpUZXh0
Q29udGV4dD4gdGV4dENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHRDb250ZXh0OyB9Ci0g
ICAgICAgIGJvb2wgaXNDb2xsYXBzZWRUb1Zpc3VhbGx5RW1wdHkoKSBjb25zdCB7IHJldHVybiBt
X2lzQ29sbGFwc2VkVG9WaXN1YWxseUVtcHR5OyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBm
cmllbmQgY2xhc3MgTGluZTsKLQotICAgICAgICB2b2lkIGFkanVzdExvZ2ljYWxUb3AoTGF5b3V0
VW5pdCBsb2dpY2FsVG9wKSB7IG1fbG9naWNhbFJlY3Quc2V0VG9wKGxvZ2ljYWxUb3ApOyB9Ci0g
ICAgICAgIHZvaWQgbW92ZUhvcml6b250YWxseShMYXlvdXRVbml0IG9mZnNldCkgeyBtX2xvZ2lj
YWxSZWN0Lm1vdmVIb3Jpem9udGFsbHkob2Zmc2V0KTsgfQotICAgICAgICB2b2lkIG1vdmVWZXJ0
aWNhbGx5KExheW91dFVuaXQgb2Zmc2V0KSB7IG1fbG9naWNhbFJlY3QubW92ZVZlcnRpY2FsbHko
b2Zmc2V0KTsgfQotICAgICAgICB2b2lkIHNldExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dp
Y2FsSGVpZ2h0KSB7IG1fbG9naWNhbFJlY3Quc2V0SGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOyB9Ci0K
LSAgICAgICAgYm9vbCBoYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsgfQotICAgICAgICBPcHRpb25hbDxFeHBhbnNpb25C
ZWhhdmlvcj4gZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdDsKLSAgICAgICAgdW5zaWduZWQgZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uT3Bwb3J0
dW5pdHlDb3VudDsgfQotICAgICAgICB2b2lkIHNldENvbXB1dGVkSG9yaXpvbnRhbEV4cGFuc2lv
bihMYXlvdXRVbml0IGxvZ2ljYWxFeHBhbnNpb24pOwotICAgICAgICB2b2lkIGFkanVzdEV4cGFu
c2lvbkJlaGF2aW9yKEV4cGFuc2lvbkJlaGF2aW9yKTsKLQotICAgICAgICBjb25zdCBCb3gqIG1f
bGF5b3V0Qm94IHsgbnVsbHB0ciB9OwotICAgICAgICBJbmxpbmVJdGVtOjpUeXBlIG1fdHlwZTsK
LSAgICAgICAgRGlzcGxheTo6UmVjdCBtX2xvZ2ljYWxSZWN0OwotICAgICAgICBPcHRpb25hbDxE
aXNwbGF5OjpSdW46OlRleHRDb250ZXh0PiBtX3RleHRDb250ZXh0OwotICAgICAgICB1bnNpZ25l
ZCBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgeyAwIH07Ci0gICAgICAgIGJvb2wgbV9pc0Nv
bGxhcHNlZFRvVmlzdWFsbHlFbXB0eSB7IGZhbHNlIH07Ci0gICAgfTsKLSAgICB1c2luZyBSdW5M
aXN0ID0gVmVjdG9yPFJ1biwgNTA+OwotICAgIGVudW0gY2xhc3MgSXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50IHsgTm8sIFllcyB9OwotICAgIFJ1bkxpc3QgY2xvc2UoSXNMYXN0TGluZVdpdGhJ
bmxpbmVDb250ZW50ID0gSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObyk7Ci0KLSAgICBz
dGF0aWMgTGluZUJveDo6QmFzZWxpbmUgaGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0IEZvbnRNZXRy
aWNzJiwgTGF5b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdodCk7Ci0KLXByaXZhdGU6Ci0gICAgTGF5
b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94LmxvZ2ljYWxUb3Ao
KTsgfQotICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
ZUJveC5sb2dpY2FsQm90dG9tKCk7IH0KLQotICAgIExheW91dFVuaXQgbG9naWNhbExlZnQoKSBj
b25zdCB7IHJldHVybiBtX2xpbmVCb3gubG9naWNhbExlZnQoKTsgfQotICAgIExheW91dFVuaXQg
bG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbExlZnQoKSArIGxvZ2ljYWxXaWR0
aCgpOyB9Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGluZUxvZ2ljYWxXaWR0aDsgfQotICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGluZUJveC5sb2dpY2FsSGVpZ2h0KCk7IH0KLQotICAgIExheW91dFVuaXQg
Y29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveC5sb2dpY2FsV2lk
dGgoKTsgfQotICAgIExheW91dFVuaXQgY29udGVudExvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGluZUJveC5sb2dpY2FsUmlnaHQoKTsgfQotICAgIExheW91dFVuaXQgYmFzZWxpbmVP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3guYmFzZWxpbmVPZmZzZXQoKTsgfQotCi0g
ICAgdm9pZCBhcHBlbmROb25CcmVha2FibGVTcGFjZShjb25zdCBJbmxpbmVJdGVtJiwgY29uc3Qg
RGlzcGxheTo6UmVjdCYgbG9naWNhbFJlY3QpOwotICAgIHZvaWQgYXBwZW5kVGV4dENvbnRlbnQo
Y29uc3QgSW5saW5lVGV4dEl0ZW0mLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7Ci0gICAgdm9p
ZCBhcHBlbmROb25SZXBsYWNlZElubGluZUJveChjb25zdCBJbmxpbmVJdGVtJiwgTGF5b3V0VW5p
dCBsb2dpY2FsV2lkdGgpOwotICAgIHZvaWQgYXBwZW5kUmVwbGFjZWRJbmxpbmVCb3goY29uc3Qg
SW5saW5lSXRlbSYsIExheW91dFVuaXQgbG9naWNhbFdpZHRoKTsKLSAgICB2b2lkIGFwcGVuZElu
bGluZUNvbnRhaW5lclN0YXJ0KGNvbnN0IElubGluZUl0ZW0mLCBMYXlvdXRVbml0IGxvZ2ljYWxX
aWR0aCk7Ci0gICAgdm9pZCBhcHBlbmRJbmxpbmVDb250YWluZXJFbmQoY29uc3QgSW5saW5lSXRl
bSYsIExheW91dFVuaXQgbG9naWNhbFdpZHRoKTsKLSAgICB2b2lkIGFwcGVuZExpbmVCcmVhayhj
b25zdCBJbmxpbmVJdGVtJik7Ci0KLSAgICB2b2lkIHJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29u
dGVudCgpOwotICAgIHZvaWQgYWxpZ25Db250ZW50SG9yaXpvbnRhbGx5KFJ1bkxpc3QmLCBJc0xh
c3RMaW5lV2l0aElubGluZUNvbnRlbnQpIGNvbnN0OwotICAgIHZvaWQgYWxpZ25Db250ZW50VmVy
dGljYWxseShSdW5MaXN0Jik7Ci0KLSAgICB2b2lkIGFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdo
dChjb25zdCBSdW4mKTsKLSAgICBMYXlvdXRVbml0IHJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgUnVu
JikgY29uc3Q7Ci0KLSAgICBib29sIGlzVGV4dEFsaWduSnVzdGlmeSgpIGNvbnN0IHsgcmV0dXJu
IG1faG9yaXpvbnRhbEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OyB9OwotICAg
IHZvaWQganVzdGlmeVJ1bnMoUnVuTGlzdCYpIGNvbnN0OwotCi0gICAgTGF5b3V0U3RhdGUmIGxh
eW91dFN0YXRlKCkgY29uc3Q7Ci0gICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZv
cm1hdHRpbmdDb250ZXh0KCkgY29uc3Q7IAotCi0gICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQmIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxJbmxpbmVJdGVtUnVuPiwgNTA+IG1faW5saW5lSXRlbVJ1bnM7Ci0gICAgc3RydWN0IFRy
aW1tYWJsZUNvbnRlbnQgewotICAgICAgICB2b2lkIGFwcGVuZChJbmxpbmVJdGVtUnVuJik7Ci0g
ICAgICAgIHZvaWQgY2xlYXIoKTsKLQotICAgICAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV93aWR0aDsgfQotICAgICAgICB1c2luZyBUcmltbWFibGVMaXN0ID0gVmVjdG9y
PElubGluZUl0ZW1SdW4qLCA1PjsKLSAgICAgICAgVHJpbW1hYmxlTGlzdCYgcnVucygpIHsgcmV0
dXJuIG1faW5saW5lSXRlbVJ1bnM7IH0KLSAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmxpbmVJdGVtUnVucy5pc0VtcHR5KCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIFRyaW1tYWJsZUxpc3QgbV9pbmxpbmVJdGVtUnVuczsKLSAgICAgICAgTGF5b3V0VW5pdCBt
X3dpZHRoOwotICAgIH07Ci0gICAgVHJpbW1hYmxlQ29udGVudCBtX3RyaW1tYWJsZUNvbnRlbnQ7
Ci0gICAgT3B0aW9uYWw8TGluZUJveDo6QmFzZWxpbmU+IG1faW5pdGlhbFN0cnV0OwotICAgIExh
eW91dFVuaXQgbV9saW5lTG9naWNhbFdpZHRoOwotICAgIE9wdGlvbmFsPFRleHRBbGlnbk1vZGU+
IG1faG9yaXpvbnRhbEFsaWdubWVudDsKLSAgICBib29sIG1fc2tpcEFsaWdubWVudCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX2hhc0ludHJ1c2l2ZUZsb2F0IHsgZmFsc2UgfTsKLSAgICBMaW5lQm94
IG1fbGluZUJveDsKLX07Ci0KLWlubGluZSB2b2lkIExpbmU6OlRyaW1tYWJsZUNvbnRlbnQ6OmNs
ZWFyKCkKLXsKLSAgICBtX2lubGluZUl0ZW1SdW5zLmNsZWFyKCk7Ci0gICAgbV93aWR0aCA9IHsg
fTsKLX0KLQotfQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKaW5kZXggY2ZkZWQ2
YzIzYmMwYTZmYWNhYWMyNTAyYzFhN2FkNmIyNWI3YmRlNi4uZTI3NmM5YmY0NjVmMTY2NzRkODMw
NzI2YjI2ZjBkZGYzZDdkOWYxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcApAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIkh5cGhlbmF0aW9uLmgiCiAjaW5jbHVkZSAiSW5saW5lSXRlbS5o
IgogI2luY2x1ZGUgIklubGluZVRleHRJdGVtLmgiCisjaW5jbHVkZSAiVGV4dFV0aWwuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOGJkMWQwNjk4YjEwNjIwYjQxMTJmOTE4NzQ3NDcxNjUzN2Y0ODkw
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcApAQCAtMCwwICsxLDcxMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmxpbmVMaW5lQnVpbGRlci5oIgorCisj
aWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHRVdGlsLmgiCisjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExh
eW91dCB7CisKK2NsYXNzIElubGluZUl0ZW1SdW4geworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TkxJTkUoSW5saW5lSXRlbVJ1bik7CitwdWJsaWM6CisgICAgSW5saW5lSXRlbVJ1bihjb25zdCBJ
bmxpbmVJdGVtJiwgY29uc3QgRGlzcGxheTo6UmVjdCYsIFdURjo6T3B0aW9uYWw8RGlzcGxheTo6
UnVuOjpUZXh0Q29udGV4dD4gPSBXVEY6Om51bGxvcHQpOworCisgICAgY29uc3QgQm94JiBsYXlv
dXRCb3goKSBjb25zdCB7IHJldHVybiBtX2lubGluZUl0ZW0ubGF5b3V0Qm94KCk7IH0KKyAgICBj
b25zdCBEaXNwbGF5OjpSZWN0JiBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNh
bFJlY3Q7IH0KKyAgICBPcHRpb25hbDxEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0PiB0ZXh0Q29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENvbnRleHQ7IH0KKworICAgIGJvb2wgaXNUZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVJdGVtLmlzVGV4dCgpOyB9CisgICAgYm9vbCBpc0Jv
eCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lSXRlbS5pc0JveCgpOyB9CisgICAgYm9vbCBpc0Nv
bnRhaW5lclN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVJdGVtLmlzQ29udGFpbmVyU3Rh
cnQoKTsgfQorICAgIGJvb2wgaXNDb250YWluZXJFbmQoKSBjb25zdCB7IHJldHVybiBtX2lubGlu
ZUl0ZW0uaXNDb250YWluZXJFbmQoKTsgfQorICAgIGJvb2wgaXNGb3JjZWRMaW5lQnJlYWsoKSBj
b25zdCB7IHJldHVybiBtX2lubGluZUl0ZW0uaXNGb3JjZWRMaW5lQnJlYWsoKTsgfQorICAgIElu
bGluZUl0ZW06OlR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lSXRlbS50eXBlKCk7
IH0KKworICAgIHZvaWQgc2V0SXNDb2xsYXBzZWQoKSB7IG1faXNDb2xsYXBzZWQgPSB0cnVlOyB9
CisgICAgYm9vbCBpc0NvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb2xsYXBzZWQ7IH0K
KworICAgIHZvaWQgc2V0Q29sbGFwc2VzVG9aZXJvQWR2YW5jZVdpZHRoKCk7CisgICAgYm9vbCBp
c0NvbGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGFwc2Vk
VG9aZXJvQWR2YW5jZVdpZHRoOyB9CisKKyAgICBib29sIGlzQ29sbGFwc2libGUoKSBjb25zdCB7
IHJldHVybiBpczxJbmxpbmVUZXh0SXRlbT4obV9pbmxpbmVJdGVtKSAmJiBkb3duY2FzdDxJbmxp
bmVUZXh0SXRlbT4obV9pbmxpbmVJdGVtKS5pc0NvbGxhcHNpYmxlKCk7IH0KKyAgICBib29sIGlz
V2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIGlzPElubGluZVRleHRJdGVtPihtX2lubGluZUl0
ZW0pICYmIGRvd25jYXN0PElubGluZVRleHRJdGVtPihtX2lubGluZUl0ZW0pLmlzV2hpdGVzcGFj
ZSgpOyB9CisKKyAgICBib29sIGhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkgY29uc3QgeyByZXR1
cm4gaXNXaGl0ZXNwYWNlKCkgJiYgIWlzQ29sbGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoKCk7IH0K
KworcHJpdmF0ZToKKyAgICBjb25zdCBJbmxpbmVJdGVtJiBtX2lubGluZUl0ZW07CisgICAgRGlz
cGxheTo6UmVjdCBtX2xvZ2ljYWxSZWN0OworICAgIGNvbnN0IE9wdGlvbmFsPERpc3BsYXk6OlJ1
bjo6VGV4dENvbnRleHQ+IG1fdGV4dENvbnRleHQ7CisgICAgYm9vbCBtX2lzQ29sbGFwc2VkIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fY29sbGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoIHsgZmFsc2Ug
fTsKK307CisKK0lubGluZUl0ZW1SdW46OklubGluZUl0ZW1SdW4oY29uc3QgSW5saW5lSXRlbSYg
aW5saW5lSXRlbSwgY29uc3QgRGlzcGxheTo6UmVjdCYgbG9naWNhbFJlY3QsIFdURjo6T3B0aW9u
YWw8RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dD4gdGV4dENvbnRleHQpCisgICAgOiBtX2lubGlu
ZUl0ZW0oaW5saW5lSXRlbSkKKyAgICAsIG1fbG9naWNhbFJlY3QobG9naWNhbFJlY3QpCisgICAg
LCBtX3RleHRDb250ZXh0KHRleHRDb250ZXh0KQoreworfQorCit2b2lkIElubGluZUl0ZW1SdW46
OnNldENvbGxhcHNlc1RvWmVyb0FkdmFuY2VXaWR0aCgpCit7CisgICAgbV9jb2xsYXBzZWRUb1pl
cm9BZHZhbmNlV2lkdGggPSB0cnVlOworICAgIG1fbG9naWNhbFJlY3Quc2V0V2lkdGgoeyB9KTsK
K30KKworc3RydWN0IENvbnRpbm91c0NvbnRlbnQgeworcHVibGljOgorICAgIENvbnRpbm91c0Nv
bnRlbnQoY29uc3QgSW5saW5lSXRlbVJ1biYsIGJvb2wgdGV4dElzQWxpZ25KdXN0aWZ5KTsKKwor
ICAgIGJvb2wgYXBwZW5kKGNvbnN0IElubGluZUl0ZW1SdW4mKTsKKyAgICBMaW5lQnVpbGRlcjo6
UnVuIGNsb3NlKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wgY2FuQmVFeHBhbmRlZChj
b25zdCBJbmxpbmVJdGVtUnVuJiBydW4pIHsgcmV0dXJuIHJ1bi5pc1RleHQoKSAmJiAhcnVuLmlz
Q29sbGFwc2VkKCkgJiYgIXJ1bi5pc0NvbGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0aCgpOyB9Cisg
ICAgYm9vbCBjYW5CZU1lcmdlZChjb25zdCBJbmxpbmVJdGVtUnVuJiBydW4pIGNvbnN0IHsgcmV0
dXJuIHJ1bi5pc1RleHQoKSAmJiAhcnVuLmlzQ29sbGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoKCkg
JiYgJm1faW5pdGlhbElubGluZVJ1bi5sYXlvdXRCb3goKSA9PSAmcnVuLmxheW91dEJveCgpOyB9
CisKKyAgICBjb25zdCBJbmxpbmVJdGVtUnVuJiBtX2luaXRpYWxJbmxpbmVSdW47CisgICAgY29u
c3QgYm9vbCBtX3RleHRJc0FsaWduSnVzdGlmeSB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgbV9l
eHBhbmRlZExlbmd0aCB7IDAgfTsKKyAgICBMYXlvdXRVbml0IG1fZXhwYW5kZWRXaWR0aDsKKyAg
ICBib29sIG1fdHJhaWxpbmdSdW5DYW5CZUV4cGFuZGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
aGFzVHJhaWxpbmdFeHBhbnNpb25PcHBvcnR1bml0eSB7IGZhbHNlIH07CisgICAgdW5zaWduZWQg
bV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50IHsgMCB9OworfTsKKworQ29udGlub3VzQ29udGVu
dDo6Q29udGlub3VzQ29udGVudChjb25zdCBJbmxpbmVJdGVtUnVuJiBpbml0aWFsSW5saW5lUnVu
LCBib29sIHRleHRJc0FsaWduSnVzdGlmeSkKKyAgICA6IG1faW5pdGlhbElubGluZVJ1bihpbml0
aWFsSW5saW5lUnVuKQorICAgICwgbV90ZXh0SXNBbGlnbkp1c3RpZnkodGV4dElzQWxpZ25KdXN0
aWZ5KQorICAgICwgbV90cmFpbGluZ1J1bkNhbkJlRXhwYW5kZWQoY2FuQmVFeHBhbmRlZChpbml0
aWFsSW5saW5lUnVuKSkKK3sKK30KKworYm9vbCBDb250aW5vdXNDb250ZW50OjphcHBlbmQoY29u
c3QgSW5saW5lSXRlbVJ1biYgaW5saW5lSXRlbVJ1bikKK3sKKyAgICAvLyBNZXJnZWQgY29udGVu
dCBuZWVkcyB0byBiZSBjb250aW51b3VzLgorICAgIGlmICghbV90cmFpbGluZ1J1bkNhbkJlRXhw
YW5kZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWNhbkJlTWVyZ2VkKGlubGlu
ZUl0ZW1SdW4pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3RyYWlsaW5nUnVuQ2Fu
QmVFeHBhbmRlZCA9IGNhbkJlRXhwYW5kZWQoaW5saW5lSXRlbVJ1bik7CisKKyAgICBBU1NFUlQo
aW5saW5lSXRlbVJ1bi5pc1RleHQoKSk7CisgICAgbV9leHBhbmRlZExlbmd0aCArPSBpbmxpbmVJ
dGVtUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpOworICAgIG1fZXhwYW5kZWRXaWR0aCArPSBp
bmxpbmVJdGVtUnVuLmxvZ2ljYWxSZWN0KCkud2lkdGgoKTsKKworICAgIGlmIChtX3RleHRJc0Fs
aWduSnVzdGlmeSkgeworICAgICAgICBtX2hhc1RyYWlsaW5nRXhwYW5zaW9uT3Bwb3J0dW5pdHkg
PSBpbmxpbmVJdGVtUnVuLmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCk7CisgICAgICAgIGlmICht
X2hhc1RyYWlsaW5nRXhwYW5zaW9uT3Bwb3J0dW5pdHkpCisgICAgICAgICAgICArK21fZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudDsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0xpbmVC
dWlsZGVyOjpSdW4gQ29udGlub3VzQ29udGVudDo6Y2xvc2UoKQoreworICAgIGlmICghbV9leHBh
bmRlZExlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgbV9pbml0aWFsSW5saW5lUnVuIH07CisgICAg
Ly8gRXhwYW5kIHRoZSB0ZXh0IGNvbnRlbnQgYW5kIHNldCB0aGUgZXhwYW5zaW9uIG9wcG9ydHVu
aXRpZXMuCisgICAgQVNTRVJUKG1faW5pdGlhbElubGluZVJ1bi5pc1RleHQoKSk7CisgICAgYXV0
byBsb2dpY2FsUmVjdCA9IG1faW5pdGlhbElubGluZVJ1bi5sb2dpY2FsUmVjdCgpOworICAgIGxv
Z2ljYWxSZWN0LmV4cGFuZEhvcml6b250YWxseShtX2V4cGFuZGVkV2lkdGgpOworCisgICAgYXV0
byB0ZXh0Q29udGV4dCA9ICptX2luaXRpYWxJbmxpbmVSdW4udGV4dENvbnRleHQoKTsKKyAgICBh
dXRvIGxlbmd0aCA9IHRleHRDb250ZXh0Lmxlbmd0aCgpICsgbV9leHBhbmRlZExlbmd0aDsKKyAg
ICB0ZXh0Q29udGV4dC5leHBhbmQobV9pbml0aWFsSW5saW5lUnVuLmxheW91dEJveCgpLnRleHRD
b250ZXh0KCktPmNvbnRlbnQuc3Vic3RyaW5nKHRleHRDb250ZXh0LnN0YXJ0KCksIGxlbmd0aCks
IGxlbmd0aCk7CisKKyAgICBpZiAobV90ZXh0SXNBbGlnbkp1c3RpZnkpIHsKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBleHBhbnNpb24gbWVyZ2UuIFdlIHNob3VsZCBl
dmVudHVhbGx5IHN3aXRjaCBvdmVyIHRvIEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50LgorICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciA9IG1f
aGFzVHJhaWxpbmdFeHBhbnNpb25PcHBvcnR1bml0eSA/IChGb3JiaWRMZWFkaW5nRXhwYW5zaW9u
IHwgQWxsb3dUcmFpbGluZ0V4cGFuc2lvbikgOiAoQWxsb3dMZWFkaW5nRXhwYW5zaW9uIHwgQWxs
b3dUcmFpbGluZ0V4cGFuc2lvbik7CisgICAgICAgIGlmIChtX2luaXRpYWxJbmxpbmVSdW4uaGFz
RXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkKKyAgICAgICAgICAgICsrbV9leHBhbnNpb25PcHBvcnR1
bml0eUNvdW50OworICAgICAgICB0ZXh0Q29udGV4dC5zZXRFeHBhbnNpb24oeyBleHBhbnNpb25C
ZWhhdmlvciwgeyB9IH0pOworICAgIH0KKyAgICByZXR1cm4geyBtX2luaXRpYWxJbmxpbmVSdW4s
IGxvZ2ljYWxSZWN0LCB0ZXh0Q29udGV4dCwgbV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50IH07
Cit9CisKK0xpbmVCdWlsZGVyOjpSdW46OlJ1bihjb25zdCBJbmxpbmVJdGVtUnVuJiBpbmxpbmVJ
dGVtUnVuKQorICAgIDogbV9sYXlvdXRCb3goJmlubGluZUl0ZW1SdW4ubGF5b3V0Qm94KCkpCisg
ICAgLCBtX3R5cGUoaW5saW5lSXRlbVJ1bi50eXBlKCkpCisgICAgLCBtX2xvZ2ljYWxSZWN0KGlu
bGluZUl0ZW1SdW4ubG9naWNhbFJlY3QoKSkKKyAgICAsIG1fdGV4dENvbnRleHQoaW5saW5lSXRl
bVJ1bi50ZXh0Q29udGV4dCgpKQorICAgICwgbV9pc0NvbGxhcHNlZFRvVmlzdWFsbHlFbXB0eShp
bmxpbmVJdGVtUnVuLmlzQ29sbGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoKCkpCit7CisgICAgaWYg
KGlubGluZUl0ZW1SdW4uaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkgeworICAgICAgICBtX2V4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSAxOworICAgICAgICBBU1NFUlQobV90ZXh0Q29udGV4
dCk7CisgICAgICAgIG1fdGV4dENvbnRleHQtPnNldEV4cGFuc2lvbih7IERlZmF1bHRFeHBhbnNp
b24sIHsgfSB9KTsKKyAgICB9Cit9CisKK0xpbmVCdWlsZGVyOjpSdW46OlJ1bihjb25zdCBJbmxp
bmVJdGVtUnVuJiBpbmxpbmVJdGVtUnVuLCBjb25zdCBEaXNwbGF5OjpSZWN0JiBsb2dpY2FsUmVj
dCwgY29uc3QgRGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dCYgdGV4dENvbnRleHQsIHVuc2lnbmVk
IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCisgICAgOiBtX2xheW91dEJveCgmaW5saW5lSXRl
bVJ1bi5sYXlvdXRCb3goKSkKKyAgICAsIG1fdHlwZShpbmxpbmVJdGVtUnVuLnR5cGUoKSkKKyAg
ICAsIG1fbG9naWNhbFJlY3QobG9naWNhbFJlY3QpCisgICAgLCBtX3RleHRDb250ZXh0KHRleHRD
b250ZXh0KQorICAgICwgbV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQpCisgICAgLCBtX2lzQ29sbGFwc2VkVG9WaXN1YWxseUVtcHR5KGlubGluZUl0
ZW1SdW4uaXNDb2xsYXBzZWRUb1plcm9BZHZhbmNlV2lkdGgoKSkKK3sKK30KKwordm9pZCBMaW5l
QnVpbGRlcjo6UnVuOjphZGp1c3RFeHBhbnNpb25CZWhhdmlvcihFeHBhbnNpb25CZWhhdmlvciBl
eHBhbnNpb25CZWhhdmlvcikKK3sKKyAgICBBU1NFUlQoaXNUZXh0KCkpOworICAgIEFTU0VSVCho
YXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKTsKKyAgICBtX3RleHRDb250ZXh0LT5zZXRFeHBhbnNp
b24oeyBleHBhbnNpb25CZWhhdmlvciwgbV90ZXh0Q29udGV4dC0+ZXhwYW5zaW9uKCktPmhvcml6
b250YWxFeHBhbnNpb24gfSk7Cit9CisKK2lubGluZSBPcHRpb25hbDxFeHBhbnNpb25CZWhhdmlv
cj4gTGluZUJ1aWxkZXI6OlJ1bjo6ZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdAoreworICAgIEFT
U0VSVChpc1RleHQoKSk7CisgICAgaWYgKGF1dG8gZXhwYW5zaW9uQ29udGV4dCA9IG1fdGV4dENv
bnRleHQtPmV4cGFuc2lvbigpKQorICAgICAgICByZXR1cm4gZXhwYW5zaW9uQ29udGV4dC0+YmVo
YXZpb3I7CisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBMaW5lQnVpbGRlcjo6UnVuOjpzZXRD
b21wdXRlZEhvcml6b250YWxFeHBhbnNpb24oTGF5b3V0VW5pdCBsb2dpY2FsRXhwYW5zaW9uKQor
eworICAgIEFTU0VSVChpc1RleHQoKSk7CisgICAgQVNTRVJUKGhhc0V4cGFuc2lvbk9wcG9ydHVu
aXR5KCkpOworICAgIG1fbG9naWNhbFJlY3QuZXhwYW5kSG9yaXpvbnRhbGx5KGxvZ2ljYWxFeHBh
bnNpb24pOworICAgIG1fdGV4dENvbnRleHQtPnNldEV4cGFuc2lvbih7IG1fdGV4dENvbnRleHQt
PmV4cGFuc2lvbigpLT5iZWhhdmlvciwgbG9naWNhbEV4cGFuc2lvbiB9KTsKK30KKworTGluZUJ1
aWxkZXI6OkxpbmVCdWlsZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVG
b3JtYXR0aW5nQ29udGV4dCwgT3B0aW9uYWw8VGV4dEFsaWduTW9kZT4gaG9yaXpvbnRhbEFsaWdu
bWVudCwgU2tpcEFsaWdubWVudCBza2lwQWxpZ25tZW50KQorICAgIDogbV9pbmxpbmVGb3JtYXR0
aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKKyAgICAsIG1faG9yaXpvbnRhbEFs
aWdubWVudChob3Jpem9udGFsQWxpZ25tZW50KQorICAgICwgbV9za2lwQWxpZ25tZW50KHNraXBB
bGlnbm1lbnQgPT0gU2tpcEFsaWdubWVudDo6WWVzKQoreworfQorCitMaW5lQnVpbGRlcjo6fkxp
bmVCdWlsZGVyKCkKK3sKK30KKwordm9pZCBMaW5lQnVpbGRlcjo6aW5pdGlhbGl6ZShjb25zdCBD
b25zdHJhaW50cyYgY29uc3RyYWludHMpCit7CisgICAgQVNTRVJUKG1fc2tpcEFsaWdubWVudCB8
fCBjb25zdHJhaW50cy5oZWlnaHRBbmRCYXNlbGluZSk7CisKKyAgICBMYXlvdXRVbml0IGluaXRp
YWxMaW5lSGVpZ2h0OworICAgIExheW91dFVuaXQgaW5pdGlhbEJhc2VsaW5lT2Zmc2V0OworICAg
IGlmIChjb25zdHJhaW50cy5oZWlnaHRBbmRCYXNlbGluZSkgeworICAgICAgICBtX2luaXRpYWxT
dHJ1dCA9IGNvbnN0cmFpbnRzLmhlaWdodEFuZEJhc2VsaW5lLT5zdHJ1dDsKKyAgICAgICAgaW5p
dGlhbExpbmVIZWlnaHQgPSBjb25zdHJhaW50cy5oZWlnaHRBbmRCYXNlbGluZS0+aGVpZ2h0Owor
ICAgICAgICBpbml0aWFsQmFzZWxpbmVPZmZzZXQgPSBjb25zdHJhaW50cy5oZWlnaHRBbmRCYXNl
bGluZS0+YmFzZWxpbmVPZmZzZXQ7CisgICAgfSBlbHNlCisgICAgICAgIG1faW5pdGlhbFN0cnV0
ID0geyB9OworCisgICAgYXV0byBsaW5lUmVjdCA9IERpc3BsYXk6OlJlY3QgeyBjb25zdHJhaW50
cy5sb2dpY2FsVG9wTGVmdCwgeyB9LCBpbml0aWFsTGluZUhlaWdodCB9OworICAgIGF1dG8gYmFz
ZWxpbmUgPSBMaW5lQm94OjpCYXNlbGluZSB7IGluaXRpYWxCYXNlbGluZU9mZnNldCwgaW5pdGlh
bExpbmVIZWlnaHQgLSBpbml0aWFsQmFzZWxpbmVPZmZzZXQgfTsKKyAgICBtX2xpbmVCb3ggPSBM
aW5lQm94IHsgbGluZVJlY3QsIGJhc2VsaW5lLCBpbml0aWFsQmFzZWxpbmVPZmZzZXQgfTsKKyAg
ICBtX2xpbmVMb2dpY2FsV2lkdGggPSBjb25zdHJhaW50cy5hdmFpbGFibGVMb2dpY2FsV2lkdGg7
CisgICAgbV9oYXNJbnRydXNpdmVGbG9hdCA9IGNvbnN0cmFpbnRzLmxpbmVJc0NvbnN0cmFpbmVk
QnlGbG9hdDsKKworICAgIG1faW5saW5lSXRlbVJ1bnMuY2xlYXIoKTsKKyAgICBtX3RyaW1tYWJs
ZUNvbnRlbnQuY2xlYXIoKTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkUHJlc2VydmVUcmFpbGlu
Z0NvbnRlbnQoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZVRleHRJdGVtKQoreworICAgIGlm
ICghaW5saW5lVGV4dEl0ZW0uaXNXaGl0ZXNwYWNlKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGF1dG8gd2hpdGVzcGFjZSA9IGlubGluZVRleHRJdGVtLnN0eWxlKCkud2hpdGVTcGFjZSgp
OworICAgIHJldHVybiB3aGl0ZXNwYWNlID09IFdoaXRlU3BhY2U6OlByZSB8fCB3aGl0ZXNwYWNl
ID09IFdoaXRlU3BhY2U6OlByZVdyYXA7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZFByZXNlcnZl
TGVhZGluZ0NvbnRlbnQoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZVRleHRJdGVtKQorewor
ICAgIGlmICghaW5saW5lVGV4dEl0ZW0uaXNXaGl0ZXNwYWNlKCkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGF1dG8gd2hpdGVzcGFjZSA9IGlubGluZVRleHRJdGVtLnN0eWxlKCkud2hpdGVT
cGFjZSgpOworICAgIHJldHVybiB3aGl0ZXNwYWNlID09IFdoaXRlU3BhY2U6OlByZSB8fCB3aGl0
ZXNwYWNlID09IFdoaXRlU3BhY2U6OlByZVdyYXAgfHwgd2hpdGVzcGFjZSA9PSBXaGl0ZVNwYWNl
OjpCcmVha1NwYWNlczsKK30KKworTGluZUJ1aWxkZXI6OlJ1bkxpc3QgTGluZUJ1aWxkZXI6OmNs
b3NlKElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRl
bnQpCit7CisgICAgLy8gMS4gUmVtb3ZlIHRyaW1tYWJsZSB0cmFpbGluZyBjb250ZW50LgorICAg
IC8vIDIuIEpvaW4gdGV4dCBydW5zIHRvZ2V0aGVyIHdoZW4gcG9zc2libGUgW2Zvb11bIF1bYmFy
XSAtPiBbZm9vIGJhcl0uCisgICAgLy8gMy4gQWxpZ24gbWVyZ2VkIHJ1bnMgYm90aCB2ZXJ0aWNh
bGx5IGFuZCBob3Jpem9udGFsbHkuCisgICAgcmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50
KCk7CisgICAgUnVuTGlzdCBydW5MaXN0OworICAgIHVuc2lnbmVkIHJ1bkluZGV4ID0gMDsKKyAg
ICB3aGlsZSAocnVuSW5kZXggPCBtX2lubGluZUl0ZW1SdW5zLnNpemUoKSkgeworICAgICAgICAv
LyBNZXJnZSBlbGlnaWJsZSBydW5zLgorICAgICAgICBhdXRvIGNvbnRpbm91c0NvbnRlbnQgPSBD
b250aW5vdXNDb250ZW50IHsgKm1faW5saW5lSXRlbVJ1bnNbcnVuSW5kZXhdLCBpc1RleHRBbGln
bkp1c3RpZnkoKSB9OworICAgICAgICB3aGlsZSAoKytydW5JbmRleCA8IG1faW5saW5lSXRlbVJ1
bnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBpZiAoIWNvbnRpbm91c0NvbnRlbnQuYXBwZW5kKCpt
X2lubGluZUl0ZW1SdW5zW3J1bkluZGV4XSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgcnVuTGlzdC5hcHBlbmQoY29udGlub3VzQ29udGVudC5jbG9zZSgpKTsK
KyAgICB9CisKKyAgICBpZiAoIW1fc2tpcEFsaWdubWVudCkgeworICAgICAgICBpZiAoaXNWaXN1
YWxseUVtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fbGluZUJveC5yZXNldEJhc2VsaW5lKCk7Cisg
ICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodCh7IH0pOworICAgICAgICB9Cisg
ICAgICAgIC8vIFJlbW92ZSBkZXNjZW50IHdoZW4gYWxsIGNvbnRlbnQgaXMgYmFzZWxpbmUgYWxp
Z25lZCBidXQgbm9uZSBvZiB0aGVtIGhhdmUgZGVzY2VudC4KKyAgICAgICAgaWYgKGZvcm1hdHRp
bmdDb250ZXh0KCkucXVpcmtzKCkubGluZURlc2NlbnROZWVkc0NvbGxhcHNpbmcocnVuTGlzdCkp
IHsKKyAgICAgICAgICAgIG1fbGluZUJveC5zaHJpbmtWZXJ0aWNhbGx5KG1fbGluZUJveC5iYXNl
bGluZSgpLmRlc2NlbnQoKSk7CisgICAgICAgICAgICBtX2xpbmVCb3gucmVzZXREZXNjZW50KCk7
CisgICAgICAgIH0KKyAgICAgICAgYWxpZ25Db250ZW50VmVydGljYWxseShydW5MaXN0KTsKKyAg
ICAgICAgYWxpZ25Db250ZW50SG9yaXpvbnRhbGx5KHJ1bkxpc3QsIGlzTGFzdExpbmVXaXRoSW5s
aW5lQ29udGVudCk7CisgICAgfQorICAgIHJldHVybiBydW5MaXN0OworfQorCit2b2lkIExpbmVC
dWlsZGVyOjphbGlnbkNvbnRlbnRWZXJ0aWNhbGx5KFJ1bkxpc3QmIHJ1bkxpc3QpCit7CisgICAg
QVNTRVJUKCFtX3NraXBBbGlnbm1lbnQpOworICAgIGZvciAoYXV0byYgcnVuIDogcnVuTGlzdCkg
eworICAgICAgICBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQocnVuKTsKKyAgICAgICAgcnVu
LnNldExvZ2ljYWxIZWlnaHQocnVuQ29udGVudEhlaWdodChydW4pKTsKKyAgICB9CisKKyAgICBm
b3IgKGF1dG8mIHJ1biA6IHJ1bkxpc3QpIHsKKyAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9w
OworICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CisgICAgICAgIGF1
dG8gdmVydGljYWxBbGlnbiA9IGxheW91dEJveC5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKTsKKyAg
ICAgICAgYXV0byBhc2NlbnQgPSBsYXlvdXRCb3guc3R5bGUoKS5mb250TWV0cmljcygpLmFzY2Vu
dCgpOworCisgICAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbikgeworICAgICAgICBjYXNlIFZl
cnRpY2FsQWxpZ246OkJhc2VsaW5lOgorICAgICAgICAgICAgaWYgKHJ1bi5pc0ZvcmNlZExpbmVC
cmVhaygpIHx8IHJ1bi5pc1RleHQoKSkKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYmFz
ZWxpbmVPZmZzZXQoKSAtIGFzY2VudDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHJ1bi5pc0NvbnRh
aW5lclN0YXJ0KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1h
dHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAgICAg
ICBsb2dpY2FsVG9wID0gYmFzZWxpbmVPZmZzZXQoKSAtIGFzY2VudCAtIGJveEdlb21ldHJ5LmJv
cmRlclRvcCgpIC0gYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94
LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4o
bGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZEZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWlu
ZXI+KGxheW91dEJveCkpKTsKKyAgICAgICAgICAgICAgICAvLyBTcGVjIG1ha2VzIHVzIGdlbmVy
YXRlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVtcHR5LgorICAgICAgICAgICAg
ICAgIEFTU0VSVCghZm9ybWF0dGluZ1N0YXRlLmxpbmVCb3hlcygpLmlzRW1wdHkoKSk7CisgICAg
ICAgICAgICAgICAgYXV0byBpbmxpbmVCbG9ja0Jhc2VsaW5lT2Zmc2V0ID0gZm9ybWF0dGluZ1N0
YXRlLmxpbmVCb3hlcygpLmxhc3QoKS0+YmFzZWxpbmVPZmZzZXQoKTsKKyAgICAgICAgICAgICAg
ICAvLyBUaGUgaW5saW5lLWJsb2NrJ3MgYmFzZWxpbmUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvIGl0
cyBjb250ZW50IGJveC4gTGV0J3MgY29udmVydCBpdCByZWxhdGl2ZSB0byB0aGUgbWFyZ2luIGJv
eC4KKyAgICAgICAgICAgICAgICAvLyAgIGlubGluZS1ibG9jaworICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIF9fX19fX19fX19f
X19fXyA8LSBtYXJnaW4gYm94CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfAorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgIHwgIF9fX19fX19fX19fXyAgPC0gYm9yZGVyIGJveAorICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfAorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
IHwgfCAgX19fX19fX19fICA8LSBjb250ZW50IGJveAorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgIHwgfCB8ICAgXgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfCB8ICAgfCAgPC0g
YmFzZWxpbmUgb2Zmc2V0CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8IHwgICB8Cisg
ICAgICAgICAgICAgICAgLy8gICAgIHRleHQgfCB8IHwgICB2IHRleHQKKyAgICAgICAgICAgICAg
ICAvLyAgICAgLS0tLS18LXwtfC0tLS0tLS0tLS0gPC0gYmFzZWxpbmUKKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgICAgIGF1dG8gYmFz
ZWxpbmVPZmZzZXRGcm9tTWFyZ2luQm94ID0gYm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBi
b3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9y
KDApICsgaW5saW5lQmxvY2tCYXNlbGluZU9mZnNldDsKKyAgICAgICAgICAgICAgICBsb2dpY2Fs
VG9wID0gYmFzZWxpbmVPZmZzZXQoKSAtIGJhc2VsaW5lT2Zmc2V0RnJvbU1hcmdpbkJveDsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBiYXNlbGluZU9m
ZnNldCgpIC0gcnVuLmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6CisgICAgICAgICAgICBsb2dpY2FsVG9w
ID0geyB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6
Qm90dG9tOgorICAgICAgICAgICAgbG9naWNhbFRvcCA9IGxvZ2ljYWxCb3R0b20oKSAtIHJ1bi5s
b2dpY2FsUmVjdCgpLmhlaWdodCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcnVuLmFkanVzdExvZ2ljYWxUb3AobG9naWNh
bFRvcCk7CisgICAgICAgIC8vIENvbnZlcnQgcnVucyBmcm9tIHJlbGF0aXZlIHRvIHRoZSBsaW5l
IHRvcC9sZWZ0IHRvIHRoZSBmb3JtYXR0aW5nIHJvb3QncyBib3JkZXIgYm94IHRvcC9sZWZ0Lgor
ICAgICAgICBydW4ubW92ZVZlcnRpY2FsbHkodGhpcy0+bG9naWNhbFRvcCgpKTsKKyAgICAgICAg
cnVuLm1vdmVIb3Jpem9udGFsbHkodGhpcy0+bG9naWNhbExlZnQoKSk7CisgICAgfQorfQorCit2
b2lkIExpbmVCdWlsZGVyOjpqdXN0aWZ5UnVucyhSdW5MaXN0JiBydW5MaXN0KSBjb25zdAorewor
ICAgIEFTU0VSVCghcnVuTGlzdC5pc0VtcHR5KCkpOworICAgIEFTU0VSVChhdmFpbGFibGVXaWR0
aCgpID4gMCk7CisgICAgLy8gTmVlZCB0byBmaXggdXAgdGhlIGxhc3QgcnVuIGZpcnN0LgorICAg
IGF1dG8mIGxhc3RSdW4gPSBydW5MaXN0Lmxhc3QoKTsKKyAgICBpZiAobGFzdFJ1bi5oYXNFeHBh
bnNpb25PcHBvcnR1bml0eSgpKQorICAgICAgICBsYXN0UnVuLmFkanVzdEV4cGFuc2lvbkJlaGF2
aW9yKCpsYXN0UnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgfCBGb3JiaWRUcmFpbGluZ0V4cGFuc2lv
bik7CisgICAgLy8gQ29sbGVjdCB0aGUgZXhwYW5zaW9uIG9wcG9ydHVuaXR5IG51bWJlcnMuCisg
ICAgYXV0byBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gMDsKKyAgICBmb3IgKGF1dG8mIHJ1
biA6IHJ1bkxpc3QpCisgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgKz0gcnVuLmV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKTsKKyAgICAvLyBOb3RoaW5nIHRvIGRpc3RyaWJ1dGU/
CisgICAgaWYgKCFleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KQorICAgICAgICByZXR1cm47Cisg
ICAgLy8gRGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3BhY2UuCisgICAgYXV0byBleHBhbnNpb25Ub0Rp
c3RyaWJ1dGUgPSBhdmFpbGFibGVXaWR0aCgpIC8gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsK
KyAgICBMYXlvdXRVbml0IGFjY3VtdWxhdGVkRXhwYW5zaW9uOworICAgIGZvciAoYXV0byYgcnVu
IDogcnVuTGlzdCkgeworICAgICAgICAvLyBFeHBhbmQgYW5kIG1vdmVzIHJ1bnMgYnkgdGhlIGFj
Y3VtdWxhdGVkIGV4cGFuc2lvbi4KKyAgICAgICAgaWYgKCFydW4uaGFzRXhwYW5zaW9uT3Bwb3J0
dW5pdHkoKSkgeworICAgICAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoYWNjdW11bGF0ZWRF
eHBhbnNpb24pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQVNT
RVJUKHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkpOworICAgICAgICBhdXRvIGNvbXB1
dGVkRXhwYW5zaW9uID0gZXhwYW5zaW9uVG9EaXN0cmlidXRlICogcnVuLmV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQoKTsKKyAgICAgICAgcnVuLnNldENvbXB1dGVkSG9yaXpvbnRhbEV4cGFuc2lv
bihjb21wdXRlZEV4cGFuc2lvbik7CisgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KGFjY3Vt
dWxhdGVkRXhwYW5zaW9uKTsKKyAgICAgICAgYWNjdW11bGF0ZWRFeHBhbnNpb24gKz0gY29tcHV0
ZWRFeHBhbnNpb247CisgICAgfQorfQorCit2b2lkIExpbmVCdWlsZGVyOjphbGlnbkNvbnRlbnRI
b3Jpem9udGFsbHkoUnVuTGlzdCYgcnVuTGlzdCwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
IGxhc3RMaW5lKSBjb25zdAoreworICAgIEFTU0VSVCghbV9za2lwQWxpZ25tZW50KTsKKyAgICBp
ZiAocnVuTGlzdC5pc0VtcHR5KCkgfHwgYXZhaWxhYmxlV2lkdGgoKSA8PSAwKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoaXNUZXh0QWxpZ25KdXN0aWZ5KCkpIHsKKyAgICAgICAgLy8gRG8g
bm90IGp1c3RpZnkgYWxpZ24gdGhlIGxhc3QgbGluZS4KKyAgICAgICAgaWYgKGxhc3RMaW5lID09
IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm8pCisgICAgICAgICAgICBqdXN0aWZ5UnVu
cyhydW5MaXN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gYWRqdXN0bWVu
dEZvckFsaWdubWVudCA9IFsmXSgpIC0+IE9wdGlvbmFsPExheW91dFVuaXQ+IHsKKyAgICAgICAg
c3dpdGNoICgqbV9ob3Jpem9udGFsQWxpZ25tZW50KSB7CisgICAgICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6TGVmdDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgorICAg
ICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgorICAgICAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAgICAgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpXZWJLaXRSaWdodDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Cisg
ICAgICAgICAgICByZXR1cm4gc3RkOjptYXgoYXZhaWxhYmxlV2lkdGgoKSwgMF9sdSk7CisgICAg
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgorICAgICAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6OldlYktpdENlbnRlcjoKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heChhdmFpbGFibGVX
aWR0aCgpIC8gMiwgMF9sdSk7CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlmeToK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfTsKKworICAgIGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRGb3JBbGlnbm1l
bnQoKTsKKyAgICBpZiAoIWFkanVzdG1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAo
YXV0byYgcnVuIDogcnVuTGlzdCkKKyAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoKmFkanVz
dG1lbnQpOworfQorCit2b2lkIExpbmVCdWlsZGVyOjpyZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNv
bnRlbnQoKQoreworICAgIGlmIChtX3RyaW1tYWJsZUNvbnRlbnQuaXNFbXB0eSgpIHx8IG1faW5s
aW5lSXRlbVJ1bnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDb2xsYXBz
ZSB0cmltbWFibGUgdHJhaWxpbmcgY29udGVudAorICAgIGZvciAoYXV0byogdHJpbW1hYmxlUnVu
IDogbV90cmltbWFibGVDb250ZW50LnJ1bnMoKSkgeworICAgICAgICBBU1NFUlQodHJpbW1hYmxl
UnVuLT5pc1RleHQoKSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBtaWdodCBuZWVkIHRvIGJlIGFi
bGUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRyaW1tZWQgYW5kIGNvbGxhcHNlZCBydW5zLgor
ICAgICAgICB0cmltbWFibGVSdW4tPnNldENvbGxhcHNlc1RvWmVyb0FkdmFuY2VXaWR0aCgpOwor
ICAgIH0KKyAgICBtX2xpbmVCb3guc2hyaW5rSG9yaXpvbnRhbGx5KG1fdHJpbW1hYmxlQ29udGVu
dC53aWR0aCgpKTsKKyAgICBtX3RyaW1tYWJsZUNvbnRlbnQuY2xlYXIoKTsKK30KKwordm9pZCBM
aW5lQnVpbGRlcjo6bW92ZUxvZ2ljYWxMZWZ0KExheW91dFVuaXQgZGVsdGEpCit7CisgICAgaWYg
KCFkZWx0YSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChkZWx0YSA+IDApOworICAgIG1f
bGluZUJveC5tb3ZlSG9yaXpvbnRhbGx5KGRlbHRhKTsKKyAgICBtX2xpbmVMb2dpY2FsV2lkdGgg
LT0gZGVsdGE7Cit9CisKK3ZvaWQgTGluZUJ1aWxkZXI6Om1vdmVMb2dpY2FsUmlnaHQoTGF5b3V0
VW5pdCBkZWx0YSkKK3sKKyAgICBBU1NFUlQoZGVsdGEgPiAwKTsKKyAgICBtX2xpbmVMb2dpY2Fs
V2lkdGggLT0gZGVsdGE7Cit9CisKK3ZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZChjb25zdCBJbmxp
bmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKK3sKKyAgICBpZiAo
aW5saW5lSXRlbS5pc1RleHQoKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRleHRDb250ZW50KGRv
d25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSwgbG9naWNhbFdpZHRoKTsKKyAgICBp
ZiAoaW5saW5lSXRlbS5pc0ZvcmNlZExpbmVCcmVhaygpKQorICAgICAgICByZXR1cm4gYXBwZW5k
TGluZUJyZWFrKGlubGluZUl0ZW0pOworICAgIGlmIChpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3Rh
cnQoKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZElubGluZUNvbnRhaW5lclN0YXJ0KGlubGluZUl0
ZW0sIGxvZ2ljYWxXaWR0aCk7CisgICAgaWYgKGlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSkK
KyAgICAgICAgcmV0dXJuIGFwcGVuZElubGluZUNvbnRhaW5lckVuZChpbmxpbmVJdGVtLCBsb2dp
Y2FsV2lkdGgpOworICAgIGlmIChpbmxpbmVJdGVtLmxheW91dEJveCgpLnJlcGxhY2VkKCkpCisg
ICAgICAgIHJldHVybiBhcHBlbmRSZXBsYWNlZElubGluZUJveChpbmxpbmVJdGVtLCBsb2dpY2Fs
V2lkdGgpOworICAgIGFwcGVuZE5vblJlcGxhY2VkSW5saW5lQm94KGlubGluZUl0ZW0sIGxvZ2lj
YWxXaWR0aCk7Cit9CisKK3ZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZE5vbkJyZWFrYWJsZVNwYWNl
KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIGNvbnN0IERpc3BsYXk6OlJlY3QmIGxvZ2lj
YWxSZWN0KQoreworICAgIG1faW5saW5lSXRlbVJ1bnMuYXBwZW5kKG1ha2VVbmlxdWU8SW5saW5l
SXRlbVJ1bj4oaW5saW5lSXRlbSwgbG9naWNhbFJlY3QpKTsKKyAgICBtX2xpbmVCb3guZXhwYW5k
SG9yaXpvbnRhbGx5KGxvZ2ljYWxSZWN0LndpZHRoKCkpOworICAgIGlmIChsb2dpY2FsUmVjdC53
aWR0aCgpKQorICAgICAgICBtX2xpbmVCb3guc2V0SXNDb25zaWRlcmVkTm9uRW1wdHkoKTsKK30K
Kwordm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kSW5saW5lQ29udGFpbmVyU3RhcnQoY29uc3QgSW5s
aW5lSXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpCit7CisgICAgLy8g
VGhpcyBpcyByZWFsbHkganVzdCBhIHBsYWNlaG9sZGVyIHRvIG1hcmsgdGhlIHN0YXJ0IG9mIHRo
ZSBpbmxpbmUgbGV2ZWwgY29udGFpbmVyIDxzcGFuPi4KKyAgICBhcHBlbmROb25CcmVha2FibGVT
cGFjZShpbmxpbmVJdGVtLCBEaXNwbGF5OjpSZWN0IHsgMCwgY29udGVudExvZ2ljYWxXaWR0aCgp
LCBsb2dpY2FsV2lkdGgsIHsgfSB9KTsKK30KKwordm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kSW5s
aW5lQ29udGFpbmVyRW5kKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuaXQg
bG9naWNhbFdpZHRoKQoreworICAgIC8vIFRoaXMgaXMgcmVhbGx5IGp1c3QgYSBwbGFjZWhvbGRl
ciB0byBtYXJrIHRoZSBlbmQgb2YgdGhlIGlubGluZSBsZXZlbCBjb250YWluZXIgPC9zcGFuPi4K
KyAgICBhcHBlbmROb25CcmVha2FibGVTcGFjZShpbmxpbmVJdGVtLCBEaXNwbGF5OjpSZWN0IHsg
MCwgY29udGVudExvZ2ljYWxSaWdodCgpLCBsb2dpY2FsV2lkdGgsIHsgfSB9KTsKK30KKwordm9p
ZCBMaW5lQnVpbGRlcjo6YXBwZW5kVGV4dENvbnRlbnQoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlu
bGluZUl0ZW0sIExheW91dFVuaXQgbG9naWNhbFdpZHRoKQoreworICAgIGF1dG8gaXNUcmltbWFi
bGUgPSAhc2hvdWxkUHJlc2VydmVUcmFpbGluZ0NvbnRlbnQoaW5saW5lSXRlbSk7CisgICAgaWYg
KCFpc1RyaW1tYWJsZSkKKyAgICAgICAgbV90cmltbWFibGVDb250ZW50LmNsZWFyKCk7CisKKyAg
ICBhdXRvIHdpbGxDb2xsYXBzZUNvbXBsZXRlbHkgPSBbJl0geworICAgICAgICAvLyBFbXB0eSBy
dW4uCisgICAgICAgIGlmICghaW5saW5lSXRlbS5sZW5ndGgoKSkgeworICAgICAgICAgICAgQVNT
RVJUKCFsb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgLy8gTGVhZGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBpZiAobV9pbmxpbmVJdGVt
UnVucy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gIXNob3VsZFByZXNlcnZlTGVhZGlu
Z0NvbnRlbnQoaW5saW5lSXRlbSk7CisKKyAgICAgICAgaWYgKCFpbmxpbmVJdGVtLmlzQ29sbGFw
c2libGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gQ2hlY2sgaWYg
dGhlIGxhc3QgaXRlbSBpcyBjb2xsYXBzZWQgYXMgd2VsbC4KKyAgICAgICAgZm9yIChhdXRvIGkg
PSBtX2lubGluZUl0ZW1SdW5zLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgYXV0byYgcnVu
ID0gbV9pbmxpbmVJdGVtUnVuc1tpXTsKKyAgICAgICAgICAgIGlmIChydW4tPmlzQm94KCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgLy8gaHR0cHM6Ly9kcmFm
dHMuY3Nzd2cub3JnL2Nzcy10ZXh0LTMvI3doaXRlLXNwYWNlLXBoYXNlLTEKKyAgICAgICAgICAg
IC8vIEFueSBjb2xsYXBzaWJsZSBzcGFjZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYW5vdGhlciBj
b2xsYXBzaWJsZSBzcGFjZeKAlGV2ZW4gb25lIG91dHNpZGUgdGhlIGJvdW5kYXJ5IG9mIHRoZSBp
bmxpbmUgY29udGFpbmluZyB0aGF0IHNwYWNlLAorICAgICAgICAgICAgLy8gcHJvdmlkZWQgYm90
aCBzcGFjZXMgYXJlIHdpdGhpbiB0aGUgc2FtZSBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh04oCU
aXMgY29sbGFwc2VkIHRvIGhhdmUgemVybyBhZHZhbmNlIHdpZHRoLgorICAgICAgICAgICAgLy8g
OiAiPHNwYW4+ICA8L3NwYW4+ICIgPC0gdGhlIHRyYWlsaW5nIHdoaXRlc3BhY2UgY29sbGFwc2Vz
IGNvbXBsZXRlbHkuCisgICAgICAgICAgICAvLyBOb3QgdGhhdCB3aGVuIHRoZSBpbmxpbmUgY29u
dGFpbmVyIGhhcyBwcmVzZXJ2ZSB3aGl0ZXNwYWNlIHN0eWxlLCAiPHNwYW4gc3R5bGU9IndoaXRl
LXNwYWNlOiBwcmUiPiAgPC9zcGFuPiAiIDwtIHRoaXMgd2hpdGVzcGFjZSBzdGF5cyBhcm91bmQu
CisgICAgICAgICAgICBpZiAocnVuLT5pc1RleHQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
cnVuLT5pc0NvbGxhcHNpYmxlKCk7CisgICAgICAgICAgICBBU1NFUlQocnVuLT5pc0NvbnRhaW5l
clN0YXJ0KCkgfHwgcnVuLT5pc0NvbnRhaW5lckVuZCgpKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgYXV0byBjb2xsYXBzZWRSdW4gPSBpbmxpbmVJdGVt
LmlzQ29sbGFwc2libGUoKSAmJiBpbmxpbmVJdGVtLmxlbmd0aCgpID4gMTsKKyAgICBhdXRvIGNv
bnRlbnRTdGFydCA9IGlubGluZUl0ZW0uc3RhcnQoKTsKKyAgICBhdXRvIGNvbnRlbnRMZW5ndGgg
PSAgY29sbGFwc2VkUnVuID8gMSA6IGlubGluZUl0ZW0ubGVuZ3RoKCk7CisgICAgYXV0byBsaW5l
UnVuID0gbWFrZVVuaXF1ZTxJbmxpbmVJdGVtUnVuPihpbmxpbmVJdGVtLCBEaXNwbGF5OjpSZWN0
IHsgMCwgY29udGVudExvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsV2lkdGgsIHsgfSB9LAorICAgICAg
ICBEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0IHsgY29udGVudFN0YXJ0LCBjb250ZW50TGVuZ3Ro
LCBpbmxpbmVJdGVtLmxheW91dEJveCgpLnRleHRDb250ZXh0KCktPmNvbnRlbnQuc3Vic3RyaW5n
KGNvbnRlbnRTdGFydCwgY29udGVudExlbmd0aCkgfSk7CisKKyAgICBhdXRvIGNvbGxhcHNlc1Rv
WmVyb0FkdmFuY2VXaWR0aCA9IHdpbGxDb2xsYXBzZUNvbXBsZXRlbHkoKTsKKyAgICBpZiAoY29s
bGFwc2VzVG9aZXJvQWR2YW5jZVdpZHRoKQorICAgICAgICBsaW5lUnVuLT5zZXRDb2xsYXBzZXNU
b1plcm9BZHZhbmNlV2lkdGgoKTsKKyAgICBlbHNlCisgICAgICAgIG1fbGluZUJveC5zZXRJc0Nv
bnNpZGVyZWROb25FbXB0eSgpOworCisgICAgaWYgKGNvbGxhcHNlZFJ1bikKKyAgICAgICAgbGlu
ZVJ1bi0+c2V0SXNDb2xsYXBzZWQoKTsKKyAgICBpZiAoaXNUcmltbWFibGUpCisgICAgICAgIG1f
dHJpbW1hYmxlQ29udGVudC5hcHBlbmQoKmxpbmVSdW4pOworCisgICAgbV9saW5lQm94LmV4cGFu
ZEhvcml6b250YWxseShsaW5lUnVuLT5sb2dpY2FsUmVjdCgpLndpZHRoKCkpOworICAgIG1faW5s
aW5lSXRlbVJ1bnMuYXBwZW5kKFdURk1vdmUobGluZVJ1bikpOworfQorCit2b2lkIExpbmVCdWls
ZGVyOjphcHBlbmROb25SZXBsYWNlZElubGluZUJveChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJ
dGVtLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKK3sKKyAgICBhdXRvJiBsYXlvdXRCb3ggPSBp
bmxpbmVJdGVtLmxheW91dEJveCgpOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGlu
Z0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgIGF1dG8gaG9yaXpvbnRh
bE1hcmdpbiA9IGJveEdlb21ldHJ5Lmhvcml6b250YWxNYXJnaW4oKTsKKyAgICBtX2lubGluZUl0
ZW1SdW5zLmFwcGVuZChtYWtlVW5pcXVlPElubGluZUl0ZW1SdW4+KGlubGluZUl0ZW0sIERpc3Bs
YXk6OlJlY3QgeyAwLCBjb250ZW50TG9naWNhbFdpZHRoKCkgKyBob3Jpem9udGFsTWFyZ2luLnN0
YXJ0LCBsb2dpY2FsV2lkdGgsIHsgfSB9KSk7CisgICAgbV9saW5lQm94LmV4cGFuZEhvcml6b250
YWxseShsb2dpY2FsV2lkdGggKyBob3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgaG9yaXpvbnRhbE1h
cmdpbi5lbmQpOworICAgIG1fbGluZUJveC5zZXRJc0NvbnNpZGVyZWROb25FbXB0eSgpOworICAg
IG1fdHJpbW1hYmxlQ29udGVudC5jbGVhcigpOworICAgIGlmICghbGF5b3V0Qm94LmVzdGFibGlz
aGVzRm9ybWF0dGluZ0NvbnRleHQoKSB8fCAhYm94R2VvbWV0cnkuaXNFbXB0eSgpKQorICAgICAg
ICBtX2xpbmVCb3guc2V0SXNDb25zaWRlcmVkTm9uRW1wdHkoKTsKK30KKwordm9pZCBMaW5lQnVp
bGRlcjo6YXBwZW5kUmVwbGFjZWRJbmxpbmVCb3goY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRl
bSwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpCit7CisgICAgQVNTRVJUKGlubGluZUl0ZW0ubGF5
b3V0Qm94KCkuaXNSZXBsYWNlZCgpKTsKKyAgICAvLyBGSVhNRTogU3VyZWx5IHJlcGxhY2VkIGJv
eGVzIGJlaGF2ZSBkaWZmZXJlbnRseS4KKyAgICBhcHBlbmROb25SZXBsYWNlZElubGluZUJveChp
bmxpbmVJdGVtLCBsb2dpY2FsV2lkdGgpOworICAgIG1fbGluZUJveC5zZXRJc0NvbnNpZGVyZWRO
b25FbXB0eSgpOworfQorCit2b2lkIExpbmVCdWlsZGVyOjphcHBlbmRMaW5lQnJlYWsoY29uc3Qg
SW5saW5lSXRlbSYgaW5saW5lSXRlbSkKK3sKKyAgICBtX2xpbmVCb3guc2V0SXNDb25zaWRlcmVk
Tm9uRW1wdHkoKTsKKyAgICBtX2lubGluZUl0ZW1SdW5zLmFwcGVuZChtYWtlVW5pcXVlPElubGlu
ZUl0ZW1SdW4+KGlubGluZUl0ZW0sIERpc3BsYXk6OlJlY3QgeyAwLCBjb250ZW50TG9naWNhbFdp
ZHRoKCksIHsgfSwgeyB9IH0pKTsKK30KKwordm9pZCBMaW5lQnVpbGRlcjo6YWRqdXN0QmFzZWxp
bmVBbmRMaW5lSGVpZ2h0KGNvbnN0IFJ1biYgcnVuKQoreworICAgIGF1dG8mIGJhc2VsaW5lID0g
bV9saW5lQm94LmJhc2VsaW5lKCk7CisgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNGb3Jj
ZWRMaW5lQnJlYWsoKSkgeworICAgICAgICAvLyBGb3IgdGV4dCBjb250ZW50IHdlIHNldCB0aGUg
YmFzZWxpbmUgZWl0aGVyIHRocm91Z2ggdGhlIGluaXRpYWwgc3RydXQgKHNldCBieSB0aGUgZm9y
bWF0dGluZyBjb250ZXh0IHJvb3QpIG9yCisgICAgICAgIC8vIHRocm91Z2ggdGhlIGlubGluZSBj
b250YWluZXIgKHN0YXJ0KSAtc2VlIGFib3ZlLiBOb3JtYWxseSB0aGUgdGV4dCBjb250ZW50IGl0
c2VsZiBkb2VzIG5vdCBzdHJldGNoIHRoZSBsaW5lLgorICAgICAgICBpZiAoIW1faW5pdGlhbFN0
cnV0KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2xpbmVCb3guc2V0QXNjZW50SWZH
cmVhdGVyKG1faW5pdGlhbFN0cnV0LT5hc2NlbnQoKSk7CisgICAgICAgIG1fbGluZUJveC5zZXRE
ZXNjZW50SWZHcmVhdGVyKG1faW5pdGlhbFN0cnV0LT5kZXNjZW50KCkpOworICAgICAgICBtX2xp
bmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihiYXNlbGluZS5oZWlnaHQoKSk7CisgICAg
ICAgIG1faW5pdGlhbFN0cnV0ID0geyB9OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
YXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOworICAgIGF1dG8mIHN0eWxlID0gbGF5
b3V0Qm94LnN0eWxlKCk7CisgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkpIHsKKyAgICAg
ICAgLy8gSW5saW5lIGNvbnRhaW5lcnMgc3RyZXRjaCB0aGUgbGluZSBieSB0aGVpciBmb250IHNp
emUuCisgICAgICAgIC8vIFZlcnRpY2FsIG1hcmdpbnMsIHBhZGRpbmdzIGFuZCBib3JkZXJzIGRv
bid0IGNvbnRyaWJ1dGUgdG8gdGhlIGxpbmUgaGVpZ2h0LgorICAgICAgICBhdXRvJiBmb250TWV0
cmljcyA9IHN0eWxlLmZvbnRNZXRyaWNzKCk7CisgICAgICAgIGlmIChzdHlsZS52ZXJ0aWNhbEFs
aWduKCkgPT0gVmVydGljYWxBbGlnbjo6QmFzZWxpbmUpIHsKKyAgICAgICAgICAgIGF1dG8gaGFs
ZkxlYWRpbmcgPSBoYWxmTGVhZGluZ01ldHJpY3MoZm9udE1ldHJpY3MsIHN0eWxlLmNvbXB1dGVk
TGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIC8vIEJvdGggaGFsZmxlYWRpbmcgYXNjZW50IGFu
ZCBkZXNjZW50IGNvdWxkIGJlIG5lZ2F0aXZlICh0YWxsIGZvbnQgdnMuIHNtYWxsIGxpbmUtaGVp
Z2h0IHZhbHVlKQorICAgICAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmRlc2NlbnQoKSA+IDApCisg
ICAgICAgICAgICAgICAgbV9saW5lQm94LnNldERlc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcu
ZGVzY2VudCgpKTsKKyAgICAgICAgICAgIGlmIChoYWxmTGVhZGluZy5hc2NlbnQoKSA+IDApCisg
ICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFzY2VudElmR3JlYXRlcihoYWxmTGVhZGluZy5h
c2NlbnQoKSk7CisgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRl
cihiYXNlbGluZS5oZWlnaHQoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIoZm9udE1ldHJpY3MuaGVpZ2h0KCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHJ1bi5pc0NvbnRhaW5lckVuZCgpKSB7Cisg
ICAgICAgIC8vIFRoZSBsaW5lJ3MgYmFzZWxpbmUgYW5kIGhlaWdodCBoYXZlIGFscmVhZHkgYmVl
biBhZGp1c3RlZCBhdCBDb250YWluZXJTdGFydC4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChydW4uaXNCb3goKSkgeworICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1h
dHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgYXV0byBt
YXJnaW5Cb3hIZWlnaHQgPSBib3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKKworICAgICAg
ICBzd2l0Y2ggKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSkgeworICAgICAgICBjYXNlIFZlcnRpY2Fs
QWxpZ246OkJhc2VsaW5lOiB7CisgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxv
Y2tCb3goKSAmJiBsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgp
KSB7CisgICAgICAgICAgICAgICAgLy8gSW5saW5lLWJsb2NrcyB3aXRoIGlubGluZSBjb250ZW50
IGFsd2F5cyBoYXZlIGJhc2VsaW5lcy4KKyAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5n
U3RhdGUgPSBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlKCkuZXN0
YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUoZG93bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRCb3gpKSk7
CisgICAgICAgICAgICAgICAgLy8gU3BlYyBtYWtlcyB1cyBnZW5lcmF0ZSBhdCBsZWFzdCBvbmUg
bGluZSAtZXZlbiBpZiBpdCBpcyBlbXB0eS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoIWZvcm1h
dHRpbmdTdGF0ZS5saW5lQm94ZXMoKS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIGF1dG8m
IGxhc3RMaW5lQm94ID0gKmZvcm1hdHRpbmdTdGF0ZS5saW5lQm94ZXMoKS5sYXN0KCk7CisgICAg
ICAgICAgICAgICAgYXV0byBpbmxpbmVCbG9ja0Jhc2VsaW5lID0gbGFzdExpbmVCb3guYmFzZWxp
bmUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGJlZm9yZUhlaWdodCA9IGJveEdlb21ldHJ5Lm1h
cmdpbkJlZm9yZSgpICsgYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRk
aW5nVG9wKCkudmFsdWVPcigwKTsKKworICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBc2Nl
bnRJZkdyZWF0ZXIoaW5saW5lQmxvY2tCYXNlbGluZS5hc2NlbnQoKSk7CisgICAgICAgICAgICAg
ICAgbV9saW5lQm94LnNldERlc2NlbnRJZkdyZWF0ZXIoaW5saW5lQmxvY2tCYXNlbGluZS5kZXNj
ZW50KCkpOworICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRCYXNlbGluZU9mZnNldElmR3Jl
YXRlcihiZWZvcmVIZWlnaHQgKyBsYXN0TGluZUJveC5iYXNlbGluZU9mZnNldCgpKTsKKyAgICAg
ICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hI
ZWlnaHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBOb24gaW5s
aW5lLWJsb2NrIGJveGVzIHNpdCBvbiB0aGUgYmFzZWxpbmUgKGluY2x1ZGluZyB0aGVpciBib3R0
b20gbWFyZ2luKS4KKyAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QXNjZW50SWZHcmVhdGVy
KG1hcmdpbkJveEhlaWdodCk7CisgICAgICAgICAgICAgICAgLy8gSWdub3JlIG5lZ2F0aXZlIGRl
c2NlbnQgKHllcywgbmVnYXRpdmUgZGVzY2VudCBpcyBhIHRoaW5nKS4KKyAgICAgICAgICAgICAg
ICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQgKyBz
dGQ6Om1heChMYXlvdXRVbml0KCksIGJhc2VsaW5lLmRlc2NlbnQoKSkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFs
aWduOjpUb3A6CisgICAgICAgICAgICAvLyBUb3AgYWxpZ24gY29udGVudCBuZXZlciBjaGFuZ2Vz
IHRoZSBiYXNlbGluZSwgaXQgb25seSBwdXNoZXMgdGhlIGJvdHRvbSBvZiB0aGUgbGluZSBmdXJ0
aGVyIGRvd24uCisgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRl
cihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmVy
dGljYWxBbGlnbjo6Qm90dG9tOiB7CisgICAgICAgICAgICAvLyBCb3R0b20gYWxpZ25lZCwgdGFs
bCBjb250ZW50IHB1c2hlcyB0aGUgYmFzZWxpbmUgZnVydGhlciBkb3duIGZyb20gdGhlIGxpbmUg
dG9wLgorICAgICAgICAgICAgYXV0byBsaW5lTG9naWNhbEhlaWdodCA9IG1fbGluZUJveC5sb2dp
Y2FsSGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAobWFyZ2luQm94SGVpZ2h0ID4gbGluZUxvZ2lj
YWxIZWlnaHQpIHsKKyAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElm
R3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRC
YXNlbGluZU9mZnNldElmR3JlYXRlcihtX2xpbmVCb3guYmFzZWxpbmVPZmZzZXQoKSArIChtYXJn
aW5Cb3hIZWlnaHQgLSBsaW5lTG9naWNhbEhlaWdodCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CitMYXlvdXRVbml0IExpbmVCdWlsZGVyOjpydW5Db250ZW50SGVpZ2h0KGNvbnN0IFJ1biYgcnVu
KSBjb25zdAoreworICAgIEFTU0VSVCghbV9za2lwQWxpZ25tZW50KTsKKyAgICBhdXRvJiBmb250
TWV0cmljcyA9IHJ1bi5sYXlvdXRCb3goKS5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7CisgICAgaWYg
KHJ1bi5pc1RleHQoKSB8fCBydW4uaXNGb3JjZWRMaW5lQnJlYWsoKSkKKyAgICAgICAgcmV0dXJu
IGZvbnRNZXRyaWNzLmhlaWdodCgpOworCisgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkg
fHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCisgICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWln
aHQoKTsKKworICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKKyAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0
Qm94KTsKKyAgICBpZiAobGF5b3V0Qm94LnJlcGxhY2VkKCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRp
bmdQb3NpdGlvbmVkKCkpCisgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5jb250ZW50Qm94SGVp
Z2h0KCk7CisKKyAgICAvLyBOb24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxv
Y2spLiBJdCBsb29rcyBhIGJpdCBtaXNsZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNv
bnNpZGVyZWQgdGhlIGNvbnRlbnQgaGVpZ2h0IGhlcmUuCisgICAgcmV0dXJuIGJveEdlb21ldHJ5
Lm1hcmdpbkJveEhlaWdodCgpOworfQorCit2b2lkIExpbmVCdWlsZGVyOjpUcmltbWFibGVDb250
ZW50OjphcHBlbmQoSW5saW5lSXRlbVJ1biYgaW5saW5lSXRlbVJ1bikKK3sKKyAgICBBU1NFUlQo
aW5saW5lSXRlbVJ1bi5sb2dpY2FsUmVjdCgpLndpZHRoKCkgPj0gMCk7CisgICAgbV93aWR0aCAr
PSBpbmxpbmVJdGVtUnVuLmxvZ2ljYWxSZWN0KCkud2lkdGgoKTsKKyAgICBtX2lubGluZUl0ZW1S
dW5zLmFwcGVuZCgmaW5saW5lSXRlbVJ1bik7Cit9CisKK0xpbmVCb3g6OkJhc2VsaW5lIExpbmVC
dWlsZGVyOjpoYWxmTGVhZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNz
LCBMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KQoreworICAgIGF1dG8gYXNjZW50ID0gZm9u
dE1ldHJpY3MuYXNjZW50KCk7CisgICAgYXV0byBkZXNjZW50ID0gZm9udE1ldHJpY3MuZGVzY2Vu
dCgpOworICAgIC8vIDEwLjguMSBMZWFkaW5nIGFuZCBoYWxmLWxlYWRpbmcKKyAgICBhdXRvIGxl
YWRpbmcgPSBsaW5lTG9naWNhbEhlaWdodCAtIChhc2NlbnQgKyBkZXNjZW50KTsKKyAgICAvLyBJ
bmxpbmUgdHJlZSBpcyBhbGwgaW50ZWdlciBiYXNlZC4KKyAgICBhdXRvIGFkanVzdGVkQXNjZW50
ID0gc3RkOjptYXgoKGFzY2VudCArIGxlYWRpbmcgLyAyKS5mbG9vcigpLCAwKTsKKyAgICBhdXRv
IGFkanVzdGVkRGVzY2VudCA9IHN0ZDo6bWF4KChkZXNjZW50ICsgbGVhZGluZyAvIDIpLmNlaWwo
KSwgMCk7CisgICAgcmV0dXJuIHsgYWRqdXN0ZWRBc2NlbnQsIGFkanVzdGVkRGVzY2VudCB9Owor
fQorCitMYXlvdXRTdGF0ZSYgTGluZUJ1aWxkZXI6OmxheW91dFN0YXRlKCkgY29uc3QKK3sgCisg
ICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUoKTsKK30KKworY29uc3Qg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIExpbmVCdWlsZGVyOjpmb3JtYXR0aW5nQ29udGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7Cit9IAorCit9
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2E1YmUwMmU1YTNi
MmMwODhlYWY0NDY3MWNjZjc5YTNlZWE3YmVkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKQEAgLTAs
MCArMSwxODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlP
VVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiRGlzcGxheVJ1bi5oIgorI2luY2x1
ZGUgIklubGluZUl0ZW0uaCIKKyNpbmNsdWRlICJJbmxpbmVMaW5lQm94LmgiCisjaW5jbHVkZSAi
SW5saW5lVGV4dEl0ZW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91
dCB7CisKK3N0cnVjdCBDb250aW5vdXNDb250ZW50OworY2xhc3MgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ7CitjbGFzcyBJbmxpbmVJdGVtUnVuOworCitjbGFzcyBMaW5lQnVpbGRlciB7CitwdWJs
aWM6CisgICAgc3RydWN0IENvbnN0cmFpbnRzIHsKKyAgICAgICAgTGF5b3V0UG9pbnQgbG9naWNh
bFRvcExlZnQ7CisgICAgICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoOworICAg
ICAgICBib29sIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCB7IGZhbHNlIH07CisgICAgICAgIHN0
cnVjdCBIZWlnaHRBbmRCYXNlbGluZSB7CisgICAgICAgICAgICBMYXlvdXRVbml0IGhlaWdodDsK
KyAgICAgICAgICAgIExheW91dFVuaXQgYmFzZWxpbmVPZmZzZXQ7CisgICAgICAgICAgICBPcHRp
b25hbDxMaW5lQm94OjpCYXNlbGluZT4gc3RydXQ7CisgICAgICAgIH07CisgICAgICAgIE9wdGlv
bmFsPEhlaWdodEFuZEJhc2VsaW5lPiBoZWlnaHRBbmRCYXNlbGluZTsKKyAgICB9OworICAgIGVu
dW0gY2xhc3MgU2tpcEFsaWdubWVudCB7IE5vLCBZZXMgfTsKKyAgICBMaW5lQnVpbGRlcihjb25z
dCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIE9wdGlvbmFsPFRleHRBbGlnbk1vZGU+LCBTa2lw
QWxpZ25tZW50KTsKKyAgICB+TGluZUJ1aWxkZXIoKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZShj
b25zdCBDb25zdHJhaW50cyYpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IElubGluZUl0ZW0mLCBM
YXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7CisgICAgYm9vbCBpc1Zpc3VhbGx5RW1wdHkoKSBjb25z
dCB7IHJldHVybiBtX2xpbmVCb3guaXNDb25zaWRlcmVkRW1wdHkoKTsgfQorICAgIGJvb2wgaGFz
SW50cnVzaXZlRmxvYXQoKSBjb25zdCB7IHJldHVybiBtX2hhc0ludHJ1c2l2ZUZsb2F0OyB9Cisg
ICAgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxXaWR0
aCgpIC0gY29udGVudExvZ2ljYWxXaWR0aCgpOyB9CisKKyAgICBMYXlvdXRVbml0IHRyYWlsaW5n
VHJpbW1hYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3RyaW1tYWJsZUNvbnRlbnQud2lkdGgo
KTsgfQorCisgICAgY29uc3QgTGluZUJveCYgbGluZUJveCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
ZUJveDsgfQorICAgIHZvaWQgbW92ZUxvZ2ljYWxMZWZ0KExheW91dFVuaXQpOworICAgIHZvaWQg
bW92ZUxvZ2ljYWxSaWdodChMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldEhhc0ludHJ1c2l2ZUZs
b2F0KCkgeyBtX2hhc0ludHJ1c2l2ZUZsb2F0ID0gdHJ1ZTsgfQorCisgICAgc3RydWN0IFJ1biB7
CisgICAgICAgIFJ1bihjb25zdCBJbmxpbmVJdGVtUnVuJik7CisgICAgICAgIFJ1bihjb25zdCBJ
bmxpbmVJdGVtUnVuJiwgY29uc3QgRGlzcGxheTo6UmVjdCYsIGNvbnN0IERpc3BsYXk6OlJ1bjo6
VGV4dENvbnRleHQmLCB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KTsKKyAgICAg
ICAgUnVuKFJ1biYmKSA9IGRlZmF1bHQ7CisgICAgICAgIFJ1biYgb3BlcmF0b3I9KFJ1biYmIG90
aGVyKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gSW5saW5lSXRlbTo6VHlwZTo6VGV4dDsgfQorICAgICAgICBib29sIGlzQm94KCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlID09IElubGluZUl0ZW06OlR5cGU6OkJveDsgfQorICAgICAg
ICBib29sIGlzRm9yY2VkTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IElubGlu
ZUl0ZW06OlR5cGU6OkZvcmNlZExpbmVCcmVhazsgfQorICAgICAgICBib29sIGlzQ29udGFpbmVy
U3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gSW5saW5lSXRlbTo6VHlwZTo6Q29udGFp
bmVyU3RhcnQ7IH0KKyAgICAgICAgYm9vbCBpc0NvbnRhaW5lckVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZSA9PSBJbmxpbmVJdGVtOjpUeXBlOjpDb250YWluZXJFbmQ7IH0KKworICAgICAgICBj
b25zdCBCb3gmIGxheW91dEJveCgpIGNvbnN0IHsgcmV0dXJuICptX2xheW91dEJveDsgfQorICAg
ICAgICBjb25zdCBEaXNwbGF5OjpSZWN0JiBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9naWNhbFJlY3Q7IH0KKyAgICAgICAgT3B0aW9uYWw8RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4
dD4gdGV4dENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHRDb250ZXh0OyB9CisgICAgICAg
IGJvb2wgaXNDb2xsYXBzZWRUb1Zpc3VhbGx5RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2lzQ29s
bGFwc2VkVG9WaXN1YWxseUVtcHR5OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQg
Y2xhc3MgTGluZUJ1aWxkZXI7CisKKyAgICAgICAgdm9pZCBhZGp1c3RMb2dpY2FsVG9wKExheW91
dFVuaXQgbG9naWNhbFRvcCkgeyBtX2xvZ2ljYWxSZWN0LnNldFRvcChsb2dpY2FsVG9wKTsgfQor
ICAgICAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoTGF5b3V0VW5pdCBvZmZzZXQpIHsgbV9sb2dp
Y2FsUmVjdC5tb3ZlSG9yaXpvbnRhbGx5KG9mZnNldCk7IH0KKyAgICAgICAgdm9pZCBtb3ZlVmVy
dGljYWxseShMYXlvdXRVbml0IG9mZnNldCkgeyBtX2xvZ2ljYWxSZWN0Lm1vdmVWZXJ0aWNhbGx5
KG9mZnNldCk7IH0KKyAgICAgICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9n
aWNhbEhlaWdodCkgeyBtX2xvZ2ljYWxSZWN0LnNldEhlaWdodChsb2dpY2FsSGVpZ2h0KTsgfQor
CisgICAgICAgIGJvb2wgaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSBjb25zdCB7IHJldHVybiBt
X2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7IH0KKyAgICAgICAgT3B0aW9uYWw8RXhwYW5zaW9u
QmVoYXZpb3I+IGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVkIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQ7IH0KKyAgICAgICAgdm9pZCBzZXRDb21wdXRlZEhvcml6b250YWxFeHBhbnNp
b24oTGF5b3V0VW5pdCBsb2dpY2FsRXhwYW5zaW9uKTsKKyAgICAgICAgdm9pZCBhZGp1c3RFeHBh
bnNpb25CZWhhdmlvcihFeHBhbnNpb25CZWhhdmlvcik7CisKKyAgICAgICAgY29uc3QgQm94KiBt
X2xheW91dEJveCB7IG51bGxwdHIgfTsKKyAgICAgICAgSW5saW5lSXRlbTo6VHlwZSBtX3R5cGU7
CisgICAgICAgIERpc3BsYXk6OlJlY3QgbV9sb2dpY2FsUmVjdDsKKyAgICAgICAgT3B0aW9uYWw8
RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dD4gbV90ZXh0Q29udGV4dDsKKyAgICAgICAgdW5zaWdu
ZWQgbV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50IHsgMCB9OworICAgICAgICBib29sIG1faXND
b2xsYXBzZWRUb1Zpc3VhbGx5RW1wdHkgeyBmYWxzZSB9OworICAgIH07CisgICAgdXNpbmcgUnVu
TGlzdCA9IFZlY3RvcjxSdW4sIDUwPjsKKyAgICBlbnVtIGNsYXNzIElzTGFzdExpbmVXaXRoSW5s
aW5lQ29udGVudCB7IE5vLCBZZXMgfTsKKyAgICBSdW5MaXN0IGNsb3NlKElzTGFzdExpbmVXaXRo
SW5saW5lQ29udGVudCA9IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm8pOworCisgICAg
c3RhdGljIExpbmVCb3g6OkJhc2VsaW5lIGhhbGZMZWFkaW5nTWV0cmljcyhjb25zdCBGb250TWV0
cmljcyYsIExheW91dFVuaXQgbGluZUxvZ2ljYWxIZWlnaHQpOworCitwcml2YXRlOgorICAgIExh
eW91dFVuaXQgbG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveC5sb2dpY2FsVG9w
KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX2xp
bmVCb3gubG9naWNhbEJvdHRvbSgpOyB9CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkg
Y29uc3QgeyByZXR1cm4gbV9saW5lQm94LmxvZ2ljYWxMZWZ0KCk7IH0KKyAgICBMYXlvdXRVbml0
IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMZWZ0KCkgKyBsb2dpY2FsV2lk
dGgoKTsgfQorCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X2xpbmVMb2dpY2FsV2lkdGg7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25z
dCB7IHJldHVybiBtX2xpbmVCb3gubG9naWNhbEhlaWdodCgpOyB9CisKKyAgICBMYXlvdXRVbml0
IGNvbnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3gubG9naWNhbFdp
ZHRoKCk7IH0KKyAgICBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmVCb3gubG9naWNhbFJpZ2h0KCk7IH0KKyAgICBMYXlvdXRVbml0IGJhc2VsaW5l
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94LmJhc2VsaW5lT2Zmc2V0KCk7IH0KKwor
ICAgIHZvaWQgYXBwZW5kTm9uQnJlYWthYmxlU3BhY2UoY29uc3QgSW5saW5lSXRlbSYsIGNvbnN0
IERpc3BsYXk6OlJlY3QmIGxvZ2ljYWxSZWN0KTsKKyAgICB2b2lkIGFwcGVuZFRleHRDb250ZW50
KGNvbnN0IElubGluZVRleHRJdGVtJiwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpOworICAgIHZv
aWQgYXBwZW5kTm9uUmVwbGFjZWRJbmxpbmVCb3goY29uc3QgSW5saW5lSXRlbSYsIExheW91dFVu
aXQgbG9naWNhbFdpZHRoKTsKKyAgICB2b2lkIGFwcGVuZFJlcGxhY2VkSW5saW5lQm94KGNvbnN0
IElubGluZUl0ZW0mLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7CisgICAgdm9pZCBhcHBlbmRJ
bmxpbmVDb250YWluZXJTdGFydChjb25zdCBJbmxpbmVJdGVtJiwgTGF5b3V0VW5pdCBsb2dpY2Fs
V2lkdGgpOworICAgIHZvaWQgYXBwZW5kSW5saW5lQ29udGFpbmVyRW5kKGNvbnN0IElubGluZUl0
ZW0mLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7CisgICAgdm9pZCBhcHBlbmRMaW5lQnJlYWso
Y29uc3QgSW5saW5lSXRlbSYpOworCisgICAgdm9pZCByZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNv
bnRlbnQoKTsKKyAgICB2b2lkIGFsaWduQ29udGVudEhvcml6b250YWxseShSdW5MaXN0JiwgSXNM
YXN0TGluZVdpdGhJbmxpbmVDb250ZW50KSBjb25zdDsKKyAgICB2b2lkIGFsaWduQ29udGVudFZl
cnRpY2FsbHkoUnVuTGlzdCYpOworCisgICAgdm9pZCBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWln
aHQoY29uc3QgUnVuJik7CisgICAgTGF5b3V0VW5pdCBydW5Db250ZW50SGVpZ2h0KGNvbnN0IFJ1
biYpIGNvbnN0OworCisgICAgYm9vbCBpc1RleHRBbGlnbkp1c3RpZnkoKSBjb25zdCB7IHJldHVy
biBtX2hvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeTsgfTsKKyAg
ICB2b2lkIGp1c3RpZnlSdW5zKFJ1bkxpc3QmKSBjb25zdDsKKworICAgIExheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSgpIGNvbnN0OworICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBm
b3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0OyAKKworICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdD
b250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OworICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8SW5saW5lSXRlbVJ1bj4sIDUwPiBtX2lubGluZUl0ZW1SdW5zOworICAgIHN0cnVjdCBU
cmltbWFibGVDb250ZW50IHsKKyAgICAgICAgdm9pZCBhcHBlbmQoSW5saW5lSXRlbVJ1biYpOwor
ICAgICAgICB2b2lkIGNsZWFyKCk7CisKKyAgICAgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICAgICAgdXNpbmcgVHJpbW1hYmxlTGlzdCA9IFZlY3Rv
cjxJbmxpbmVJdGVtUnVuKiwgNT47CisgICAgICAgIFRyaW1tYWJsZUxpc3QmIHJ1bnMoKSB7IHJl
dHVybiBtX2lubGluZUl0ZW1SdW5zOyB9CisgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5saW5lSXRlbVJ1bnMuaXNFbXB0eSgpOyB9CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBUcmltbWFibGVMaXN0IG1faW5saW5lSXRlbVJ1bnM7CisgICAgICAgIExheW91dFVuaXQg
bV93aWR0aDsKKyAgICB9OworICAgIFRyaW1tYWJsZUNvbnRlbnQgbV90cmltbWFibGVDb250ZW50
OworICAgIE9wdGlvbmFsPExpbmVCb3g6OkJhc2VsaW5lPiBtX2luaXRpYWxTdHJ1dDsKKyAgICBM
YXlvdXRVbml0IG1fbGluZUxvZ2ljYWxXaWR0aDsKKyAgICBPcHRpb25hbDxUZXh0QWxpZ25Nb2Rl
PiBtX2hvcml6b250YWxBbGlnbm1lbnQ7CisgICAgYm9vbCBtX3NraXBBbGlnbm1lbnQgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9oYXNJbnRydXNpdmVGbG9hdCB7IGZhbHNlIH07CisgICAgTGluZUJv
eCBtX2xpbmVCb3g7Cit9OworCitpbmxpbmUgdm9pZCBMaW5lQnVpbGRlcjo6VHJpbW1hYmxlQ29u
dGVudDo6Y2xlYXIoKQoreworICAgIG1faW5saW5lSXRlbVJ1bnMuY2xlYXIoKTsKKyAgICBtX3dp
ZHRoID0geyB9OworfQorCit9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcAppbmRl
eCA3YTUzNWZiOTYzMjczMTZmNzE4MzNkNTM5ZjcxZTU0Y2E5NTY5NDU4Li5kYzc1YjhiZGEwOTA1
MmQ5ZWFiNjViNDBmZThiZGUzZDY5OWZiMDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCkBA
IC04NSw3ICs4NSw3IEBAIExpbmVMYXlvdXRDb250ZXh0OjpMaW5lTGF5b3V0Q29udGV4dChjb25z
dCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0CiB7CiB9CiAKLUxpbmVMYXlv
dXRDb250ZXh0OjpMaW5lQ29udGVudCBMaW5lTGF5b3V0Q29udGV4dDo6bGF5b3V0TGluZShMaW5l
JiBsaW5lLCB1bnNpZ25lZCBsZWFkaW5nSW5saW5lSXRlbUluZGV4LCBPcHRpb25hbDxQYXJ0aWFs
Q29udGVudD4gbGVhZGluZ1BhcnRpYWxDb250ZW50KQorTGluZUxheW91dENvbnRleHQ6OkxpbmVD
b250ZW50IExpbmVMYXlvdXRDb250ZXh0OjpsYXlvdXRMaW5lKExpbmVCdWlsZGVyJiBsaW5lLCB1
bnNpZ25lZCBsZWFkaW5nSW5saW5lSXRlbUluZGV4LCBPcHRpb25hbDxQYXJ0aWFsQ29udGVudD4g
bGVhZGluZ1BhcnRpYWxDb250ZW50KQogewogICAgIGF1dG8gaW5pdGlhbGl6ZSA9IFsmXSB7CiAg
ICAgICAgIG1fY29tbWl0dGVkSW5saW5lSXRlbUNvdW50ID0gMDsKQEAgLTEyMSw3ICsxMjEsNyBA
QCBMaW5lTGF5b3V0Q29udGV4dDo6TGluZUNvbnRlbnQgTGluZUxheW91dENvbnRleHQ6OmxheW91
dExpbmUoTGluZSYgbGluZSwgdW5zaWduZQogICAgIHJldHVybiBjbG9zZShsaW5lLCBsZWFkaW5n
SW5saW5lSXRlbUluZGV4KTsKIH0KIAotdm9pZCBMaW5lTGF5b3V0Q29udGV4dDo6Y29tbWl0UGVu
ZGluZ0NvbnRlbnQoTGluZSYgbGluZSkKK3ZvaWQgTGluZUxheW91dENvbnRleHQ6OmNvbW1pdFBl
bmRpbmdDb250ZW50KExpbmVCdWlsZGVyJiBsaW5lKQogewogICAgIGlmIChtX3VuY29tbWl0dGVk
Q29udGVudC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEzMSw3ICsxMzEsNyBAQCB2
b2lkIExpbmVMYXlvdXRDb250ZXh0Ojpjb21taXRQZW5kaW5nQ29udGVudChMaW5lJiBsaW5lKQog
ICAgIG1fdW5jb21taXR0ZWRDb250ZW50LnJlc2V0KCk7CiB9CiAKLUxpbmVMYXlvdXRDb250ZXh0
OjpMaW5lQ29udGVudCBMaW5lTGF5b3V0Q29udGV4dDo6Y2xvc2UoTGluZSYgbGluZSwgdW5zaWdu
ZWQgbGVhZGluZ0lubGluZUl0ZW1JbmRleCkKK0xpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVu
dCBMaW5lTGF5b3V0Q29udGV4dDo6Y2xvc2UoTGluZUJ1aWxkZXImIGxpbmUsIHVuc2lnbmVkIGxl
YWRpbmdJbmxpbmVJdGVtSW5kZXgpCiB7CiAgICAgQVNTRVJUKG1fY29tbWl0dGVkSW5saW5lSXRl
bUNvdW50IHx8IGxpbmUuaGFzSW50cnVzaXZlRmxvYXQoKSk7CiAgICAgbV91bmNvbW1pdHRlZENv
bnRlbnQucmVzZXQoKTsKQEAgLTE0NSwyMSArMTQ1LDIxIEBAIExpbmVMYXlvdXRDb250ZXh0OjpM
aW5lQ29udGVudCBMaW5lTGF5b3V0Q29udGV4dDo6Y2xvc2UoTGluZSYgbGluZSwgdW5zaWduZWQg
bGVhCiAKICAgICBhdXRvIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCA9IFsmXSB7CiAgICAg
ICAgIGlmIChvdmVyZmxvd0NvbnRlbnQpCi0gICAgICAgICAgICByZXR1cm4gTGluZTo6SXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKKyAgICAgICAgICAgIHJldHVybiBMaW5lQnVpbGRl
cjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKICAgICAgICAgLy8gU2tpcCBmbG9h
dHMgYmFja3dhcmRzIHRvIHNlZSBpZiB0aGlzIGlzIGdvaW5nIHRvIGJlIHRoZSBsYXN0IGxpbmUg
d2l0aCBpbmxpbmUgY29udGVudC4KICAgICAgICAgZm9yIChhdXRvIGkgPSBtX2lubGluZUl0ZW1z
LnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgaWYgKCFtX2lubGluZUl0ZW1zW2ldLT5pc0Zs
b2F0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkgPT0gdHJhaWxpbmdJbmxpbmVJdGVtSW5k
ZXggPyBMaW5lOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcyA6IExpbmU6OklzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm87CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT0g
dHJhaWxpbmdJbmxpbmVJdGVtSW5kZXggPyBMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50OjpZZXMgOiBMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
OjpObzsKICAgICAgICAgfQogICAgICAgICAvLyBUaGVyZSBoYXMgdG8gYmUgYXQgbGVhc3Qgb25l
IG5vbi1mbG9hdCBpdGVtLgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIExpbmU6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm87CisgICAgICAgIHJl
dHVybiBMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKICAgICB9
OwogCiAgICAgcmV0dXJuIExpbmVDb250ZW50IHsgdHJhaWxpbmdJbmxpbmVJdGVtSW5kZXgsIG92
ZXJmbG93Q29udGVudCwgV1RGTW92ZShtX2Zsb2F0cyksIGxpbmUuY2xvc2UoaXNMYXN0TGluZVdp
dGhJbmxpbmVDb250ZW50KCkpLCBsaW5lLmxpbmVCb3goKSB9OwogfQogCi1MaW5lTGF5b3V0Q29u
dGV4dDo6SXNFbmRPZkxpbmUgTGluZUxheW91dENvbnRleHQ6OnBsYWNlSW5saW5lSXRlbShMaW5l
JiBsaW5lLCBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQorTGluZUxheW91dENvbnRleHQ6
OklzRW5kT2ZMaW5lIExpbmVMYXlvdXRDb250ZXh0OjpwbGFjZUlubGluZUl0ZW0oTGluZUJ1aWxk
ZXImIGxpbmUsIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCiB7CiAgICAgYXV0byBjdXJy
ZW50TG9naWNhbFJpZ2h0ID0gbGluZS5saW5lQm94KCkubG9naWNhbFJpZ2h0KCk7CiAgICAgYXV0
byBpdGVtTG9naWNhbFdpZHRoID0gaW5saW5lSXRlbVdpZHRoKGZvcm1hdHRpbmdDb250ZXh0KCks
IGlubGluZUl0ZW0sIGN1cnJlbnRMb2dpY2FsUmlnaHQpOwpAQCAtMjA3LDcgKzIwNyw3IEBAIExp
bmVMYXlvdXRDb250ZXh0OjpJc0VuZE9mTGluZSBMaW5lTGF5b3V0Q29udGV4dDo6cGxhY2VJbmxp
bmVJdGVtKExpbmUmIGxpbmUsIGNvCiAgICAgcmV0dXJuIGlzRW5kT2ZMaW5lOwogfQogCi1MaW5l
TGF5b3V0Q29udGV4dDo6SXNFbmRPZkxpbmUgTGluZUxheW91dENvbnRleHQ6OnByb2Nlc3NVbmNv
bW1pdHRlZENvbnRlbnQoTGluZSYgbGluZSkKK0xpbmVMYXlvdXRDb250ZXh0OjpJc0VuZE9mTGlu
ZSBMaW5lTGF5b3V0Q29udGV4dDo6cHJvY2Vzc1VuY29tbWl0dGVkQ29udGVudChMaW5lQnVpbGRl
ciYgbGluZSkKIHsKICAgICAvLyBDaGVjayBpZiB0aGUgcGVuZGluZyBjb250ZW50IGZpdHMuCiAg
ICAgYXV0byBsaW5lSXNDb25zaWRlcmVkRW1wdHkgPSBsaW5lLmlzVmlzdWFsbHlFbXB0eSgpICYm
ICFsaW5lLmhhc0ludHJ1c2l2ZUZsb2F0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaAppbmRleCA5MWMw
M2QwMTMyMmE3YzAzMzkxYTg3MzRkNjc2OThjNDg4OTFlN2JiLi5iOTNkZmI5YjE1MGI1YWIzZjFi
MTQ3YTEzM2MzM2VjMjc1YTIzNmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmgKQEAgLTI3LDcgKzI3
LDcgQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCi0jaW5jbHVk
ZSAiSW5saW5lTGluZS5oIgorI2luY2x1ZGUgIklubGluZUxpbmVCdWlsZGVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewpAQCAtNDQsMTAgKzQ0LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IHRyYWlsaW5nSW5saW5lSXRlbUluZGV4
OwogICAgICAgICBPcHRpb25hbDxQYXJ0aWFsQ29udGVudD4gdHJhaWxpbmdQYXJ0aWFsQ29udGVu
dDsKICAgICAgICAgVmVjdG9yPFdlYWtQdHI8SW5saW5lSXRlbT4+IGZsb2F0czsKLSAgICAgICAg
Y29uc3QgTGluZTo6UnVuTGlzdCBydW5MaXN0OworICAgICAgICBjb25zdCBMaW5lQnVpbGRlcjo6
UnVuTGlzdCBydW5MaXN0OwogICAgICAgICBjb25zdCBMaW5lQm94IGxpbmVCb3g7CiAgICAgfTsK
LSAgICBMaW5lQ29udGVudCBsYXlvdXRMaW5lKExpbmUmLCB1bnNpZ25lZCBsZWFkaW5nSW5saW5l
SXRlbUluZGV4LCBPcHRpb25hbDxQYXJ0aWFsQ29udGVudD4gbGVhZGluZ1BhcnRpYWxDb250ZW50
KTsKKyAgICBMaW5lQ29udGVudCBsYXlvdXRMaW5lKExpbmVCdWlsZGVyJiwgdW5zaWduZWQgbGVh
ZGluZ0lubGluZUl0ZW1JbmRleCwgT3B0aW9uYWw8UGFydGlhbENvbnRlbnQ+IGxlYWRpbmdQYXJ0
aWFsQ29udGVudCk7CiAKICAgICBzdHJ1Y3QgUnVuIHsKICAgICAgICAgY29uc3QgSW5saW5lSXRl
bSYgaW5saW5lSXRlbTsKQEAgLTU5LDExICs1OSwxMSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KICAgICBlbnVtIGNsYXNzIElz
RW5kT2ZMaW5lIHsgTm8sIFllcyB9OwotICAgIElzRW5kT2ZMaW5lIHBsYWNlSW5saW5lSXRlbShM
aW5lJiwgY29uc3QgSW5saW5lSXRlbSYpOwotICAgIHZvaWQgY29tbWl0UGVuZGluZ0NvbnRlbnQo
TGluZSYpOwotICAgIExpbmVDb250ZW50IGNsb3NlKExpbmUmLCB1bnNpZ25lZCBsZWFkaW5nSW5s
aW5lSXRlbUluZGV4KTsKKyAgICBJc0VuZE9mTGluZSBwbGFjZUlubGluZUl0ZW0oTGluZUJ1aWxk
ZXImLCBjb25zdCBJbmxpbmVJdGVtJik7CisgICAgdm9pZCBjb21taXRQZW5kaW5nQ29udGVudChM
aW5lQnVpbGRlciYpOworICAgIExpbmVDb250ZW50IGNsb3NlKExpbmVCdWlsZGVyJiwgdW5zaWdu
ZWQgbGVhZGluZ0lubGluZUl0ZW1JbmRleCk7CiAgICAgYm9vbCBzaG91bGRQcm9jZXNzVW5jb21t
aXR0ZWRDb250ZW50KGNvbnN0IElubGluZUl0ZW0mKSBjb25zdDsKLSAgICBJc0VuZE9mTGluZSBw
cm9jZXNzVW5jb21taXR0ZWRDb250ZW50KExpbmUmKTsKKyAgICBJc0VuZE9mTGluZSBwcm9jZXNz
VW5jb21taXR0ZWRDb250ZW50KExpbmVCdWlsZGVyJik7CiAgICAgCiAgICAgc3RydWN0IFVuY29t
bWl0dGVkQ29udGVudCB7CiAgICAgICAgIHZvaWQgYWRkKGNvbnN0IElubGluZUl0ZW0mLCBMYXlv
dXRVbml0IGxvZ2ljYWxXaWR0aCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>