<?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>215068</bug_id>
          
          <creation_ts>2020-08-01 17:24:50 -0700</creation_ts>
          <short_desc>[LFC][IFC] LineBuilder:Run should not have vertical geometry</short_desc>
          <delta_ts>2020-08-27 20:07:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>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>
          
          <blocked>215087</blocked>
    
    <blocked>215752</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</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>1677179</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-08-01 17:24:50 -0700</bug_when>
    <thetext>LineBuilder does not align runs vertically (actually no alignment at all)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677181</commentid>
    <comment_count>1</comment_count>
      <attachid>405801</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-01 17:35:53 -0700</bug_when>
    <thetext>Created attachment 405801
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678931</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-08 17:25:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/66736366&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683350</commentid>
    <comment_count>3</comment_count>
      <attachid>407394</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-27 06:06:44 -0700</bug_when>
    <thetext>Created attachment 407394
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683352</commentid>
    <comment_count>4</comment_count>
      <attachid>407394</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-08-27 06:14:27 -0700</bug_when>
    <thetext>Comment on attachment 407394
Patch

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

&gt; Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp:178
&gt; -            // and the trimmed width should be capped at std::min(run.trailingWhitespaceWidth(), overflowWidth) for texgt runs. Both FF and Chrome agree.
&gt; +            // and the trimmed width should be capped at std::min(run.trailingWhitespaceWidth(), overflowWidth) for text runs. Both FF and Chrome agree.

Great spelling fixes!

&gt; Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp:394
&gt; -    // Note that just becasue the trimmable width is 0 (font-size: 0px), it does not mean we don&apos;t have a trimmable trailing content.
&gt; +    // Note that just because the trimmable width is 0 (font-size: 0px), it does not mean we don&apos;t have a trimmable trailing content.

Here too.

&gt; Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp:401
&gt; -    // Do not add trimmable letter spacing after a fully trimmable whitesapce.
&gt; +    // Do not add trimmable letter spacing after a fully trimmable whitespace.

And here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683381</commentid>
    <comment_count>5</comment_count>
      <attachid>407402</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-27 08:45:21 -0700</bug_when>
    <thetext>Created attachment 407402
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683382</commentid>
    <comment_count>6</comment_count>
      <attachid>407403</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-27 08:54:36 -0700</bug_when>
    <thetext>Created attachment 407403
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683515</commentid>
    <comment_count>7</comment_count>
      <attachid>407432</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-27 16:21:21 -0700</bug_when>
    <thetext>Created attachment 407432
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683529</commentid>
    <comment_count>8</comment_count>
      <attachid>407438</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-27 16:55:26 -0700</bug_when>
    <thetext>Created attachment 407438
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683555</commentid>
    <comment_count>9</comment_count>
      <attachid>407444</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-27 19:05:03 -0700</bug_when>
    <thetext>Created attachment 407444
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683567</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-27 20:07:11 -0700</bug_when>
    <thetext>Committed r266271: &lt;https://trac.webkit.org/changeset/266271&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 407444.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405801</attachid>
            <date>2020-08-01 17:35:53 -0700</date>
            <delta_ts>2020-08-27 06:06:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215068-20200801173552.patch</filename>
            <type>text/plain</type>
            <size>29626</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyNDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFjNGE3OGU5MGFkNmEw
MGY0ZTRmOWJiMzFiZjlmMTFiNTk3YmQ0Ny4uNWIwNzE2OTgwOWFmN2JiMzBlNTExNzgxOTU1ZGIy
NzZlZWI0NWMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIwLTA4LTAxICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBMaW5lQnVp
bGRlcjpSdW4gc2hvdWxkIG5vdCBoYXZlIHZlcnRpY2FsIGdlb21ldHJ5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwNjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMaW5lQnVpbGRlcjo6UnVuIHNob3Vs
ZCBvbmx5IGhhdmUgbG9naWNhbCBsZWZ0IGFuZCB3aWR0aCBnZW9tZXRyeS4gVGhlIGZpbmFsIHJl
Y3QKKyAgICAgICAgaXMgY29tcHV0ZWQgYXMgcGFydCBvZiB0aGUgY29udGVudCBhbGlnbm1lbnQg
cGhhc2UgaW4gTGluZUNvbnRlbnRBbGlnbmVyICh3aGljaCBldmVudHVhbGx5IGdldCBtZXJnZWQg
aW50byB0aGUgTGluZUJveCBjbGFzcykuCisgICAgICAgIEl0IGVuYWJsZXMgdXMgdG8ga2VlcCBM
aW5lQnVpbGRlcjo6UnVuIGNvbnN0LgorCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQ29udGVudEFsaWduZXI6OmlubGluZVJlY3RMaXN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpMaW5lQ29udGVudEFsaWduZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFsaWduSG9yaXpv
bnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjph
bGlnblZlcnRpY2FsbHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFs
aWduZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0Zv
ckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6Omp1
c3RpZnlSdW5zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRl
bnRBbGlnbmVyOjpydW5Db250ZW50SGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBs
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAg
ICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OnZpc3VhbGx5Q29sbGFwc2VQcmVXcmFwT3ZlcmZsb3dD
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlRyaW1tYWJs
ZVRyYWlsaW5nQ29udGVudDo6YWRkRnVsbHlUcmltbWFibGVDb250ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6YWRk
UGFydGlhbGx5VHJpbW1hYmxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCdWlsZGVyOjpSdW46OlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWls
ZGVyOjpSdW46OmV4cGFuZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpSdW46OnJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCdWlsZGVyOjpSdW46OnNldEhvcml6b250YWxFeHBhbnNpb24pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjptX3RleHRDb250ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6c2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5z
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVu
OjpzdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpS
dW46OmxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpSdW46OmxvZ2ljYWxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OlJ1bjo6ZXhwYW5zaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OlJ1bjo6aGFzVHJhaWxpbmdXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6dHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjptb3ZlSG9y
aXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6
c2hyaW5rSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxk
ZXI6OlJ1bjo6aGFzQ29sbGFwc2VkVHJhaWxpbmdXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OnJ1bnMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpsb2dpY2FsUmVjdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmFkanVzdExv
Z2ljYWxUb3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRl
cjo6UnVuOjptb3ZlVmVydGljYWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCdWlsZGVyOjpSdW46OnNldExvZ2ljYWxIZWlnaHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6cnVucyk6IERlbGV0ZWQuCisKIDIwMjAt
MDctMzEgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJ
RkNdIE1vdmUgTGluZUJveCBvdXQgb2YgTGluZUJ1aWxkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRp
bmdDb250ZXh0LmNwcAppbmRleCA4NGU2NTRjMGJhMzUwNzhjMTVmNzg1ODkzZjMwNmE3M2ZjOTg1
N2FkLi4wMGY3ZDc0MGFkZTZhZTQyYzcwNjUxZWM2NzM0MTFmNTUwMjIzM2FiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC05OSwzMyArOTksNTQgQEAgdm9pZCBIYW5n
aW5nQ29udGVudDo6cmVzZXQoKQogCiBjbGFzcyBMaW5lQ29udGVudEFsaWduZXIgewogcHVibGlj
OgotICAgIExpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYs
IExpbmVCb3gmLCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxheW91dFVuaXQgYXZhaWxh
YmxlV2lkdGgpOworICAgIExpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCYsIExpbmVCb3gmLCBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxh
eW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOwogCiAgICAgZW51bSBjbGFzcyBJc0xhc3RMaW5lV2l0
aElubGluZUNvbnRlbnQgeyBObywgWWVzIH07CiAgICAgdm9pZCBhbGlnbkhvcml6b250YWxseShU
ZXh0QWxpZ25Nb2RlLCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwogICAgIHZvaWQgYWxp
Z25WZXJ0aWNhbGx5KCk7CiAgICAgdm9pZCBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsK
IAorICAgIHVzaW5nIElubGluZVJ1blJlY3RMaXN0ID0gVmVjdG9yPERpc3BsYXk6OklubGluZVJl
Y3QsIDEwPjsKKyAgICBjb25zdCBJbmxpbmVSdW5SZWN0TGlzdCYgaW5saW5lUmVjdExpc3QoKSBj
b25zdCB7IHJldHVybiBtX3J1blJlY3RMaXN0OyB9CisKIHByaXZhdGU6Ci0gICAgdm9pZCBqdXN0
aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKICAgICBIYW5naW5nQ29u
dGVudCBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KSBj
b25zdDsKLSAgICBJbmxpbmVMYXlvdXRVbml0IHJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgTGluZUJ1
aWxkZXI6OlJ1biYpIGNvbnN0OwogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQm
IGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDsgfQogICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZv
cm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUoKTsgfQogCiAgICAgY29uc3QgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQmIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CiAgICAgTGluZUJveCYg
bV9saW5lQm94OwotICAgIExpbmVCdWlsZGVyOjpSdW5MaXN0JiBtX3J1bnM7CisgICAgY29uc3Qg
TGluZUJ1aWxkZXI6OlJ1bkxpc3QmIG1fcnVuczsKKyAgICBJbmxpbmVSdW5SZWN0TGlzdCBtX3J1
blJlY3RMaXN0OwogICAgIElubGluZUxheW91dFVuaXQgbV9hdmFpbGFibGVXaWR0aDsKIH07CiAK
LUxpbmVDb250ZW50QWxpZ25lcjo6TGluZUNvbnRlbnRBbGlnbmVyKGNvbnN0IElubGluZUZvcm1h
dHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgTGluZUJveCYgbGluZUJveCwg
TGluZUJ1aWxkZXI6OlJ1bkxpc3QmIHJ1bnMsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lk
dGgpCitMaW5lQ29udGVudEFsaWduZXI6OkxpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIExpbmVCb3gmIGxpbmVC
b3gsIGNvbnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBydW5zLCBJbmxpbmVMYXlvdXRVbml0IGF2
YWlsYWJsZVdpZHRoKQogICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCkKICAgICAsIG1fbGluZUJveChsaW5lQm94KQogICAgICwgbV9ydW5zKHJ1
bnMpCiAgICAgLCBtX2F2YWlsYWJsZVdpZHRoKGF2YWlsYWJsZVdpZHRoKQogeworICAgIGZvciAo
YXV0byYgcnVuIDogbV9ydW5zKSB7CisgICAgICAgIGF1dG8gcnVuSGVpZ2h0ID0gWyZdKCkgLT4g
SW5saW5lTGF5b3V0VW5pdCB7CisgICAgICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5z
dHlsZSgpLmZvbnRNZXRyaWNzKCk7CisgICAgICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1
bi5pc0xpbmVCcmVhaygpKQorICAgICAgICAgICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWln
aHQoKTsKKworICAgICAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlz
Q29udGFpbmVyRW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdo
dCgpOworCisgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7Cisg
ICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGlubGluZUZvcm1hdHRpbmdDb250ZXh0Lmdl
b21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVw
bGFjZWRCb3goKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkuY29udGVudEJveEhlaWdodCgpOworCisgICAgICAg
ICAgICAvLyBOb24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBs
b29rcyBhIGJpdCBtaXNsZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQg
dGhlIGNvbnRlbnQgaGVpZ2h0IGhlcmUuCisgICAgICAgICAgICByZXR1cm4gYm94R2VvbWV0cnku
bWFyZ2luQm94SGVpZ2h0KCk7CisgICAgICAgIH07CisgICAgICAgIG1fcnVuUmVjdExpc3QuYXBw
ZW5kKHsgMCwgcnVuLmxvZ2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2FsV2lkdGgoKSwgcnVuSGVpZ2h0
KCkgfSk7CisgICAgfQogfQogCiB2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25Ib3Jpem9u
dGFsbHkoVGV4dEFsaWduTW9kZSBob3Jpem9udGFsQWxpZ25tZW50LCBJc0xhc3RMaW5lV2l0aElu
bGluZUNvbnRlbnQgaXNMYXN0TGluZSkKQEAgLTEzNiw3ICsxNTcsMTEgQEAgdm9pZCBMaW5lQ29u
dGVudEFsaWduZXI6OmFsaWduSG9yaXpvbnRhbGx5KFRleHRBbGlnbk1vZGUgaG9yaXpvbnRhbEFs
aWdubWVudCwgSXMKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGhvcml6b250YWxBbGlnbm1l
bnQgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkgewotICAgICAgICBqdXN0aWZ5UnVucyhhdmFp
bGFibGVXaWR0aCk7CisgICAgICAgIGF1dG8gYWNjdW11bGF0ZWRFeHBhbnNpb24gPSBJbmxpbmVM
YXlvdXRVbml0IHsgfTsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1f
cnVucy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIG1fcnVuUmVjdExpc3RbaW5kZXhd
Lm1vdmVIb3Jpem9udGFsbHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOworICAgICAgICAgICAgYWNj
dW11bGF0ZWRFeHBhbnNpb24gKz0gbV9ydW5zW2luZGV4XS5leHBhbnNpb24oKS5ob3Jpem9udGFs
RXhwYW5zaW9uOworICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE2MSwy
MiArMTg2LDE4IEBAIHZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGlnbkhvcml6b250YWxseShU
ZXh0QWxpZ25Nb2RlIGhvcml6b250YWxBbGlnbm1lbnQsIElzCiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfTsKIAotICAgIGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRGb3JBbGlnbm1lbnQo
YXZhaWxhYmxlV2lkdGgpOwotICAgIGlmICghYWRqdXN0bWVudCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIC8vIEhvcml6b250YWwgYWxpZ25tZW50IG1lYW5zIHRoYXQgd2Ugbm90IG9ubHkgYWRqdXN0
IHRoZSBydW5zIGJ1dCBhbHNvIG1ha2Ugc3VyZQotICAgIC8vIHRoYXQgdGhlIGxpbmUgYm94IGlz
IGFsaWduZWQgYXMgd2VsbAotICAgIC8vIGUuZy4gPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2Vu
dGVyOyB3aWR0aDogMTAwcHg7Ij5jZW50ZXJlZCB0ZXh0PC9kaXY+IDogdGhlIGxpbmUgYm94IHdp
bGwgYWxzbyBiZSBjZW50ZXJlZAotICAgIC8vIGFzIG9wcG9zZWQgdG8gc3RhcnQgYXQgMHB4IGFs
bCB0aGUgd2F5IHRvIFtjZW50ZXJlZCB0ZXh0XSBydW4ncyByaWdodCBlZGdlLgotICAgIG1fbGlu
ZUJveC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLSAgICBmb3IgKGF1dG8mIHJ1biA6
IG1fcnVucykKLSAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1lbnQpOworICAg
IGlmIChhdXRvIGFkanVzdG1lbnQgPSBhZGp1c3RtZW50Rm9yQWxpZ25tZW50KGF2YWlsYWJsZVdp
ZHRoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHJ1blJlY3QgOiBtX3J1blJlY3RMaXN0KQorICAg
ICAgICAgICAgcnVuUmVjdC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKKyAgICB9CiB9
CiAKIHZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGlnblZlcnRpY2FsbHkoKQogewogICAgIGF1
dG8gc2Nyb2xsYWJsZU92ZXJmbG93UmVjdCA9IG1fbGluZUJveC5sb2dpY2FsUmVjdCgpOwotICAg
IGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBp
bmRleCA8IG1fcnVucy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byYgcnVuID0gbV9y
dW5zW2luZGV4XTsKKyAgICAgICAgYXV0byYgcnVuUmVjdCA9IG1fcnVuUmVjdExpc3RbaW5kZXhd
OwogICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKICAgICAg
ICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwogICAgICAgICBhdXRvIHZlcnRp
Y2FsQWxpZ24gPSBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7CkBAIC0yMTAsNjYg
KzIzMSwyOSBAQCB2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25WZXJ0aWNhbGx5KCkKICAg
ICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkg
LSBiYXNlbGluZUZyb21NYXJnaW5Cb3g7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZv
ckJveChsYXlvdXRCb3gpOwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3gu
YWxpZ25tZW50QmFzZWxpbmUoKSAtIChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94
R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwX2x1KSArIHJ1bi5sb2dpY2FsUmVj
dCgpLmhlaWdodCgpICsgYm94R2VvbWV0cnkubWFyZ2luQWZ0ZXIoKSk7CisgICAgICAgICAgICAg
ICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gKGJveEdlb21l
dHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBib3hHZW9tZXRyeS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1
ZU9yKDBfbHUpICsgcnVuUmVjdC5oZWlnaHQoKSArIGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVmVydGlj
YWxBbGlnbjo6VG9wOgogICAgICAgICAgICAgbG9naWNhbFRvcCA9IDBfbHU7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206Ci0gICAgICAgICAg
ICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmxvZ2ljYWxCb3R0b20oKSAtIHJ1bi5sb2dpY2FsUmVj
dCgpLmhlaWdodCgpOworICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5sb2dpY2Fs
Qm90dG9tKCkgLSBydW5SZWN0LmhlaWdodCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgcnVuLmFkanVzdExvZ2ljYWxUb3Ao
bG9naWNhbFRvcCk7CisgICAgICAgIHJ1blJlY3Quc2V0VG9wKGxvZ2ljYWxUb3ApOwogICAgICAg
ICAvLyBBZGp1c3Qgc2Nyb2xsYWJsZSBvdmVyZmxvdyBpZiB0aGUgcnVuIG92ZXJmbG93cyB0aGUg
bGluZS4KLSAgICAgICAgc2Nyb2xsYWJsZU92ZXJmbG93UmVjdC5leHBhbmRWZXJ0aWNhbGx5VG9D
b250YWluKHJ1bi5sb2dpY2FsUmVjdCgpKTsKKyAgICAgICAgc2Nyb2xsYWJsZU92ZXJmbG93UmVj
dC5leHBhbmRWZXJ0aWNhbGx5VG9Db250YWluKHJ1blJlY3QpOwogICAgICAgICAvLyBDb252ZXJ0
IHJ1bnMgZnJvbSByZWxhdGl2ZSB0byB0aGUgbGluZSB0b3AvbGVmdCB0byB0aGUgZm9ybWF0dGlu
ZyByb290J3MgYm9yZGVyIGJveCB0b3AvbGVmdC4KLSAgICAgICAgcnVuLm1vdmVWZXJ0aWNhbGx5
KG1fbGluZUJveC5sb2dpY2FsVG9wKCkpOwotICAgICAgICBydW4ubW92ZUhvcml6b250YWxseSht
X2xpbmVCb3gubG9naWNhbExlZnQoKSk7CisgICAgICAgIHJ1blJlY3QubW92ZVZlcnRpY2FsbHko
bV9saW5lQm94LmxvZ2ljYWxUb3AoKSk7CisgICAgICAgIHJ1blJlY3QubW92ZUhvcml6b250YWxs
eShtX2xpbmVCb3gubG9naWNhbExlZnQoKSk7CiAgICAgfQogICAgIG1fbGluZUJveC5zZXRTY3Jv
bGxhYmxlT3ZlcmZsb3coc2Nyb2xsYWJsZU92ZXJmbG93UmVjdCk7CiB9CiAKLXZvaWQgTGluZUNv
bnRlbnRBbGlnbmVyOjpqdXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRo
KQotewotICAgIEFTU0VSVChhdmFpbGFibGVXaWR0aCA+IDApOwotICAgIC8vIENvbGxlY3QgdGhl
IGV4cGFuc2lvbiBvcHBvcnR1bml0eSBudW1iZXJzIGFuZCBmaW5kIHRoZSBsYXN0IHJ1biB3aXRo
IGNvbnRlbnQuCi0gICAgYXV0byBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gMDsKLSAgICBM
aW5lQnVpbGRlcjo6UnVuKiBsYXN0UnVuV2l0aENvbnRlbnQgPSBudWxscHRyOwotICAgIGZvciAo
YXV0byYgcnVuIDogbV9ydW5zKSB7Ci0gICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQg
Kz0gcnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKTsKLSAgICAgICAgaWYgKHJ1bi5pc1Rl
eHQoKSB8fCBydW4uaXNCb3goKSkKLSAgICAgICAgICAgIGxhc3RSdW5XaXRoQ29udGVudCA9ICZy
dW47Ci0gICAgfQotICAgIC8vIE5lZWQgdG8gZml4IHVwIHRoZSBsYXN0IHJ1bidzIHRyYWlsaW5n
IGV4cGFuc2lvbi4KLSAgICBpZiAobGFzdFJ1bldpdGhDb250ZW50ICYmIGxhc3RSdW5XaXRoQ29u
dGVudC0+aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkgewotICAgICAgICAvLyBUdXJuIG9mZiB0
aGUgdHJhaWxpbmcgYml0cyBmaXJzdCBhbmQgYWRkIHRoZSBmb3JiaWQgdHJhaWxpbmcgZXhwYW5z
aW9uLgotICAgICAgICBhdXRvIGxlYWRpbmdFeHBhbnNpb24gPSBsYXN0UnVuV2l0aENvbnRlbnQt
PmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBMZWFkaW5nRXhwYW5zaW9uTWFzazsKLSAgICAgICAgbGFz
dFJ1bldpdGhDb250ZW50LT5zZXRFeHBhbnNpb25CZWhhdmlvcihsZWFkaW5nRXhwYW5zaW9uIHwg
Rm9yYmlkVHJhaWxpbmdFeHBhbnNpb24pOwotICAgIH0KLSAgICAvLyBOb3RoaW5nIHRvIGRpc3Ry
aWJ1dGU/Ci0gICAgaWYgKCFleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KQotICAgICAgICByZXR1
cm47Ci0gICAgLy8gRGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3BhY2UuCi0gICAgYXV0byBleHBhbnNp
b25Ub0Rpc3RyaWJ1dGUgPSBhdmFpbGFibGVXaWR0aCAvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnQ7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBhY2N1bXVsYXRlZEV4cGFuc2lvbiA9IDA7Ci0gICAg
Zm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAgLy8gRXhwYW5kIGFuZCBtb3ZlcyBy
dW5zIGJ5IHRoZSBhY2N1bXVsYXRlZCBleHBhbnNpb24uCi0gICAgICAgIGlmICghcnVuLmhhc0V4
cGFuc2lvbk9wcG9ydHVuaXR5KCkpIHsKLSAgICAgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5
KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0gICAgICAgIEFTU0VSVChydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpKTsKLSAgICAg
ICAgYXV0byBjb21wdXRlZEV4cGFuc2lvbiA9IGV4cGFuc2lvblRvRGlzdHJpYnV0ZSAqIHJ1bi5l
eHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCk7Ci0gICAgICAgIHJ1bi5zZXRDb21wdXRlZEhvcml6
b250YWxFeHBhbnNpb24oY29tcHV0ZWRFeHBhbnNpb24pOwotICAgICAgICBydW4ubW92ZUhvcml6
b250YWxseShhY2N1bXVsYXRlZEV4cGFuc2lvbik7Ci0gICAgICAgIGFjY3VtdWxhdGVkRXhwYW5z
aW9uICs9IGNvbXB1dGVkRXhwYW5zaW9uOwotICAgIH0KLX0KLQogdm9pZCBMaW5lQ29udGVudEFs
aWduZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgpCiB7CiAgICAgdW5zaWduZWQgaW5s
aW5lQ29udGFpbmVyTmVzdGluZ0xldmVsID0gMDsKQEAgLTI3Nyw5ICsyNjEsNiBAQCB2b2lkIExp
bmVDb250ZW50QWxpZ25lcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCkKICAgICBmb3Ig
KGF1dG8mIHJ1biA6IG1fcnVucykgewogICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5
b3V0Qm94KCk7CiAgICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0KLSAg
ICAgICAgcnVuLnNldExvZ2ljYWxIZWlnaHQocnVuQ29udGVudEhlaWdodChydW4pKTsKLQogICAg
ICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKSB7CiAgICAgICAgICAg
ICAvLyBGb3IgdGV4dCBjb250ZW50IHdlIHNldCB0aGUgYmFzZWxpbmUgZWl0aGVyIHRocm91Z2gg
dGhlIGluaXRpYWwgc3RydXQgKHNldCBieSB0aGUgZm9ybWF0dGluZyBjb250ZXh0IHJvb3QpIG9y
CiAgICAgICAgICAgICAvLyB0aHJvdWdoIHRoZSBpbmxpbmUgY29udGFpbmVyIChzdGFydCkuIE5v
cm1hbGx5IHRoZSB0ZXh0IGNvbnRlbnQgaXRzZWxmIGRvZXMgbm90IHN0cmV0Y2ggdGhlIGxpbmUu
CkBAIC0zOTMsMjQgKzM3NCw2IEBAIEhhbmdpbmdDb250ZW50IExpbmVDb250ZW50QWxpZ25lcjo6
Y29sbGVjdEhhbmdpbmdDb250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29uCiAgICAgcmV0dXJu
IGhhbmdpbmdDb250ZW50OwogfQogCi1JbmxpbmVMYXlvdXRVbml0IExpbmVDb250ZW50QWxpZ25l
cjo6cnVuQ29udGVudEhlaWdodChjb25zdCBMaW5lQnVpbGRlcjo6UnVuJiBydW4pIGNvbnN0Ci17
Ci0gICAgYXV0byYgZm9udE1ldHJpY3MgPSBydW4uc3R5bGUoKS5mb250TWV0cmljcygpOwotICAg
IGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpCi0gICAgICAgIHJldHVybiBm
b250TWV0cmljcy5oZWlnaHQoKTsKLQotICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpIHx8
IHJ1bi5pc0NvbnRhaW5lckVuZCgpKQotICAgICAgICByZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0
KCk7Ci0KLSAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7Ci0gICAgYXV0byYg
Ym94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJv
eCk7Ci0gICAgaWYgKGxheW91dEJveC5pc1JlcGxhY2VkQm94KCkgfHwgbGF5b3V0Qm94LmlzRmxv
YXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5jb250ZW50Qm94
SGVpZ2h0KCk7Ci0KLSAgICAvLyBOb24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUt
YmxvY2spLiBJdCBsb29rcyBhIGJpdCBtaXNsZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlz
IGNvbnNpZGVyZWQgdGhlIGNvbnRlbnQgaGVpZ2h0IGhlcmUuCi0gICAgcmV0dXJuIGJveEdlb21l
dHJ5Lm1hcmdpbkJveEhlaWdodCgpOwotfQotCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpsYXlvdXRJbkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRlJiBpbnZhbGlkYXRpb25TdGF0
ZSwgY29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50JiBjb25zdHJhaW50cykKIHsKICAg
ICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1N0
YXJ0XSAtPiBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IC0+IGZvcm1hdHRpbmcgcm9vdCgiIDw8
ICZyb290KCkgPDwgIikiKTsKQEAgLTQ5MCw4ICs0NTMsOCBAQCB2b2lkIElubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpsaW5lTGF5b3V0KElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGluZUxheW91
dENvbgogICAgICAgICBhdXRvIGxpbmVCb3ggPSBMaW5lQm94IHsgRGlzcGxheTo6SW5saW5lUmVj
dCB7IGxpbmVDb25zdHJhaW50cy5sb2dpY2FsVG9wTGVmdCwgMF9sdSwgbGluZUNvbnN0cmFpbnRz
LmxpbmVIZWlnaHQgfSwgTGluZUJveDo6aGFsZkxlYWRpbmdNZXRyaWNzKHJvb3QoKS5zdHlsZSgp
LmZvbnRNZXRyaWNzKCksIGxpbmVDb25zdHJhaW50cy5saW5lSGVpZ2h0KSB9OwogCiAgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSBhbmQgd2lsbCBldmVudHVhbGx5IGdldCBtZXJn
ZWQgdG8gTGluZUJveC4KKyAgICAgICAgYXV0byBjb250ZW50QWxpZ25lciA9IExpbmVDb250ZW50
QWxpZ25lciB7ICp0aGlzLCBsaW5lQm94LCBsaW5lLnJ1bnMoKSwgbGluZS5hdmFpbGFibGVXaWR0
aCgpIH07CiAgICAgICAgIGF1dG8gYWxpZ25MaW5lQ29udGVudCA9IFsmXSB7Ci0gICAgICAgICAg
ICBhdXRvIGNvbnRlbnRBbGlnbmVyID0gTGluZUNvbnRlbnRBbGlnbmVyIHsgKnRoaXMsIGxpbmVC
b3gsIGxpbmUucnVucygpLCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgfTsKICAgICAgICAgICAgIGNv
bnRlbnRBbGlnbmVyLmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgpOwogICAgICAgICAgICAg
aWYgKGxpbmUuaXNWaXN1YWxseUVtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBsaW5lQm94LnJl
c2V0QWxpZ25tZW50QmFzZWxpbmUoKTsKQEAgLTUyOCw3ICs0OTEsNyBAQCB2b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGlu
ZUxheW91dENvbgogICAgICAgICB9OwogCiAgICAgICAgIGFsaWduTGluZUNvbnRlbnQoKTsKLSAg
ICAgICAgc2V0RGlzcGxheUJveGVzRm9yTGluZShsaW5lLCBsaW5lQm94LCBsaW5lQ29udGVudCwg
Y29uc3RyYWludHMuaG9yaXpvbnRhbCk7CisgICAgICAgIHNldERpc3BsYXlCb3hlc0ZvckxpbmUo
bGluZSwgY29udGVudEFsaWduZXIuaW5saW5lUmVjdExpc3QoKSwgbGluZUJveCwgbGluZUNvbnRl
bnQsIGNvbnN0cmFpbnRzLmhvcml6b250YWwpOwogCiAgICAgICAgIGlmICghbGluZUNvbnRlbnRS
YW5nZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChuZWVkc0xheW91dFJhbmdlLnN0
YXJ0IDwgbGluZUNvbnRlbnRSYW5nZS5lbmQpOwpAQCAtODQwLDcgKzgwMyw3IEBAIElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpMaW5lQ29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbnN0cmFpbnRzRm9yCiAgICAgcmV0dXJuIExpbmVDb25zdHJhaW50cyB7IHsgbGluZUxvZ2lj
YWxMZWZ0LCBsaW5lTG9naWNhbFRvcCB9LCBsaW5lTG9naWNhbFJpZ2h0IC0gbGluZUxvZ2ljYWxM
ZWZ0LCBpbml0aWFsTGluZUhlaWdodCwgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0IH07CiB9CiAK
LXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29u
c3QgTGluZUJ1aWxkZXImIGxpbmUsIGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsICBjb25zdCBMaW5l
TGF5b3V0Q29udGV4dDo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50LCBjb25zdCBIb3Jpem9udGFs
Q29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKK3ZvaWQgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXImIGxpbmUs
IGNvbnN0IExpbmVDb250ZW50QWxpZ25lcjo6SW5saW5lUnVuUmVjdExpc3QmIHJ1blJlY3RMaXN0
LCBjb25zdCBMaW5lQm94JiBsaW5lQm94LCBjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6TGluZUNv
bnRlbnQmIGxpbmVDb250ZW50LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250
YWxDb25zdHJhaW50cykKIHsKICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3Jt
YXR0aW5nU3RhdGUoKTsKIApAQCAtODcwLDkgKzgzMyw5IEBAIHZvaWQgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXImIGxpbmUs
IGNvCiAgICAgYXV0byBsaW5lSW5rT3ZlcmZsb3cgPSBsaW5lQm94LnNjcm9sbGFibGVPdmVyZmxv
dygpOwogICAgIC8vIENvbXB1dGUgYm94IGZpbmFsIGdlb21ldHJ5LgogICAgIGF1dG8mIGxpbmVS
dW5zID0gbGluZS5ydW5zKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwg
bGluZVJ1bnMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBp
bmRleCA8IGxpbmVSdW5zLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBhdXRvJiBsaW5lUnVu
ID0gbGluZVJ1bnMuYXQoaW5kZXgpOwotICAgICAgICBhdXRvJiBsb2dpY2FsUmVjdCA9IGxpbmVS
dW4ubG9naWNhbFJlY3QoKTsKKyAgICAgICAgYXV0byBsb2dpY2FsUmVjdCA9IHJ1blJlY3RMaXN0
W2luZGV4XTsKICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gbGluZVJ1bi5sYXlvdXRCb3goKTsK
IAogICAgICAgICAvLyBBZGQgZmluYWwgZGlzcGxheSBydW5zIHRvIHN0YXRlIGZpcnN0LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggMWI2ZGIyODVjZWU0ODc0NDBmNjUwMTU5
ODJiYTQyOTExZDc3OTJjYi4uOWQ0N2I1ODQyYTcyZGNmMjBhMDc2MDI4NDA1MTA1MjdiMWI0ODI4
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC05Myw3ICs5Myw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIGJvb2wgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0IHsgZmFsc2UgfTsK
ICAgICB9OwogICAgIExpbmVDb25zdHJhaW50cyBjb25zdHJhaW50c0ZvckxpbmUoY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFRvcCk7Ci0g
ICAgdm9pZCBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyJiwgY29uc3Qg
TGluZUJveCYsIGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCYsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYpOworICAgIHZvaWQgc2V0RGlzcGxheUJveGVzRm9yTGluZShj
b25zdCBMaW5lQnVpbGRlciYsIGNvbnN0IFZlY3RvcjxEaXNwbGF5OjpJbmxpbmVSZWN0LCAxMD4m
LCBjb25zdCBMaW5lQm94JiwgY29uc3QgTGluZUxheW91dENvbnRleHQ6OkxpbmVDb250ZW50Jiwg
Y29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJik7CiAgICAgdm9pZCBpbnZhbGlkYXRlRm9ybWF0
dGluZ1N0YXRlKGNvbnN0IEludmFsaWRhdGlvblN0YXRlJik7CiAKICAgICBjb25zdCBJbmxpbmVG
b3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0
PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0
ZSgpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCmluZGV4IDY4NzhiZTk5MGNlMmExZDI3MGJi
Y2RlYTcyZDJlMGMwM2NkMDNiODcuLmVkM2MwNmZhOWE2YzI5ZWEwZGM5NTdhZGQ2ODIwNGRmNjY4
ODQ2ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKQEAgLTc5LDYgKzc5LDM0IEBAIHZvaWQg
TGluZUJ1aWxkZXI6OmNsb3NlKCkKICNlbmRpZgogICAgIHJlbW92ZVRyYWlsaW5nVHJpbW1hYmxl
Q29udGVudCgpOwogICAgIHZpc3VhbGx5Q29sbGFwc2VQcmVXcmFwT3ZlcmZsb3dDb250ZW50KCk7
CisKKyAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCkuc3R5bGUoKS50ZXh0QWxpZ24o
KSA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KSB7CisgICAgICAgIGF1dG8gZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudCA9IDA7CisgICAgICAgIFJ1biogbGFzdFJ1bldpdGhDb250ZW50ID0gbnVs
bHB0cjsKKyAgICAgICAgLy8gQ29sbGVjdCBhbmQgZGlzdHJpYnV0ZSB0aGUgZXhwYW5zaW9uIG9w
cG9ydHVuaXRpZXMuCisgICAgICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CisgICAgICAg
ICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ICs9IHJ1bi5leHBhbnNpb25PcHBvcnR1bml0
eUNvdW50KCk7CisgICAgICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0JveCgpKQor
ICAgICAgICAgICAgICAgIGxhc3RSdW5XaXRoQ29udGVudCA9ICZydW47CisgICAgICAgIH0KKyAg
ICAgICAgLy8gTmVlZCB0byBmaXggdXAgdGhlIGxhc3QgcnVuJ3MgdHJhaWxpbmcgZXhwYW5zaW9u
LgorICAgICAgICBpZiAobGFzdFJ1bldpdGhDb250ZW50ICYmIGxhc3RSdW5XaXRoQ29udGVudC0+
aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkgeworICAgICAgICAgICAgLy8gVHVybiBvZmYgdGhl
IHRyYWlsaW5nIGJpdHMgZmlyc3QgYW5kIGFkZCB0aGUgZm9yYmlkIHRyYWlsaW5nIGV4cGFuc2lv
bi4KKyAgICAgICAgICAgIGF1dG8gbGVhZGluZ0V4cGFuc2lvbiA9IGxhc3RSdW5XaXRoQ29udGVu
dC0+ZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlYWRpbmdFeHBhbnNpb25NYXNrOworICAgICAgICAg
ICAgbGFzdFJ1bldpdGhDb250ZW50LT5zZXRFeHBhbnNpb25CZWhhdmlvcihsZWFkaW5nRXhwYW5z
aW9uIHwgRm9yYmlkVHJhaWxpbmdFeHBhbnNpb24pOworICAgICAgICB9CisgICAgICAgIC8vIEFu
eXRoaW5nIHRvIGRpc3RyaWJ1dGU/CisgICAgICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSB0aGlz
LT5hdmFpbGFibGVXaWR0aCgpOworICAgICAgICBpZiAoYXZhaWxhYmxlV2lkdGggPiAwICYmIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpIHsKKyAgICAgICAgICAgIC8vIERpc3RyaWJ1dGUgdGhl
IGV4dHJhIHNwYWNlLgorICAgICAgICAgICAgYXV0byBleHBhbnNpb25Ub0Rpc3RyaWJ1dGUgPSBh
dmFpbGFibGVXaWR0aCAvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7CisgICAgICAgICAgICBm
b3IgKGF1dG8mIHJ1biA6IG1fcnVucykgeworICAgICAgICAgICAgICAgIC8vIEV4cGFuZCBhbmQg
bW92ZXMgcnVucyBieSB0aGUgYWNjdW11bGF0ZWQgZXhwYW5zaW9uLgorICAgICAgICAgICAgICAg
IGlmIChydW4uaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkKKyAgICAgICAgICAgICAgICAgICAg
cnVuLnNldEhvcml6b250YWxFeHBhbnNpb24oZXhwYW5zaW9uVG9EaXN0cmlidXRlICogcnVuLmV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CiB9CiAKIHZvaWQgTGluZUJ1aWxkZXI6OnJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVu
dCgpCkBAIC0xNDMsNyArMTcxLDcgQEAgdm9pZCBMaW5lQnVpbGRlcjo6dmlzdWFsbHlDb2xsYXBz
ZVByZVdyYXBPdmVyZmxvd0NvbnRlbnQoKQogICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHRyaW1t
YWJsZVdpZHRoID0geyB9OwogICAgICAgICBpZiAocnVuLmlzVGV4dCgpKSB7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFsd2F5cyBjb2xsYXBzZSB0aGUgcnVuIGF0IGEgZ2x5cGgg
Ym91bmRhcnkgYXMgdGhlIHNwZWMgaW5kaWNhdGVzOiAiY29sbGFwc2UgdGhlIGNoYXJhY3RlciBh
ZHZhbmNlIHdpZHRocyBvZiBhbnkgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb3ZlcmZsb3ciCi0gICAg
ICAgICAgICAvLyBhbmQgdGhlIHRyaW1tZWQgd2lkdGggc2hvdWxkIGJlIGNhcHBlZCBhdCBzdGQ6
Om1pbihydW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSwgb3ZlcmZsb3dXaWR0aCkgZm9yIHRl
eGd0IHJ1bnMuIEJvdGggRkYgYW5kIENocm9tZSBhZ3JlZS4KKyAgICAgICAgICAgIC8vIGFuZCB0
aGUgdHJpbW1lZCB3aWR0aCBzaG91bGQgYmUgY2FwcGVkIGF0IHN0ZDo6bWluKHJ1bi50cmFpbGlu
Z1doaXRlc3BhY2VXaWR0aCgpLCBvdmVyZmxvd1dpZHRoKSBmb3IgdGV4dCBydW5zLiBCb3RoIEZG
IGFuZCBDaHJvbWUgYWdyZWUuCiAgICAgICAgICAgICB0cmltbWFibGVXaWR0aCA9IHJ1bi50cmFp
bGluZ1doaXRlc3BhY2VXaWR0aCgpOwogICAgICAgICAgICAgcnVuLnZpc3VhbGx5Q29sbGFwc2VU
cmFpbGluZ1doaXRlc3BhY2UoKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTM1OSwxNCArMzg3LDE0
IEBAIHZvaWQgTGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6YWRkRnVsbHlU
cmltbWFibGVDb250ZW50KHNpemVfdCBydW5JCiAgICAgLy8gQW55IHN1YnNlcXVlbnQgdHJpbW1h
YmxlIHdoaXRlc3BhY2Ugc2hvdWxkIGNvbGxhcHNlIHRvIHplcm8gYWR2YW5jZWQgd2lkdGggYW5k
IGlnbm9yZWQgYXQgOjphcHBlbmRUZXh0Q29udGVudCgpLgogICAgIEFTU0VSVCghbV9oYXNGdWxs
eVRyaW1tYWJsZUNvbnRlbnQpOwogICAgIG1fZnVsbHlUcmltbWFibGVXaWR0aCA9IHRyaW1tYWJs
ZVdpZHRoOwotICAgIC8vIE5vdGUgdGhhdCBqdXN0IGJlY2FzdWUgdGhlIHRyaW1tYWJsZSB3aWR0
aCBpcyAwIChmb250LXNpemU6IDBweCksIGl0IGRvZXMgbm90IG1lYW4gd2UgZG9uJ3QgaGF2ZSBh
IHRyaW1tYWJsZSB0cmFpbGluZyBjb250ZW50LgorICAgIC8vIE5vdGUgdGhhdCBqdXN0IGJlY2F1
c2UgdGhlIHRyaW1tYWJsZSB3aWR0aCBpcyAwIChmb250LXNpemU6IDBweCksIGl0IGRvZXMgbm90
IG1lYW4gd2UgZG9uJ3QgaGF2ZSBhIHRyaW1tYWJsZSB0cmFpbGluZyBjb250ZW50LgogICAgIG1f
aGFzRnVsbHlUcmltbWFibGVDb250ZW50ID0gdHJ1ZTsKICAgICBtX2ZpcnN0UnVuSW5kZXggPSBt
X2ZpcnN0UnVuSW5kZXgudmFsdWVPcihydW5JbmRleCk7CiB9CiAKIHZvaWQgTGluZUJ1aWxkZXI6
OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6YWRkUGFydGlhbGx5VHJpbW1hYmxlQ29udGVudChz
aXplX3QgcnVuSW5kZXgsIElubGluZUxheW91dFVuaXQgdHJpbW1hYmxlV2lkdGgpCiB7Ci0gICAg
Ly8gRG8gbm90IGFkZCB0cmltbWFibGUgbGV0dGVyIHNwYWNpbmcgYWZ0ZXIgYSBmdWxseSB0cmlt
bWFibGUgd2hpdGVzYXBjZS4KKyAgICAvLyBEbyBub3QgYWRkIHRyaW1tYWJsZSBsZXR0ZXIgc3Bh
Y2luZyBhZnRlciBhIGZ1bGx5IHRyaW1tYWJsZSB3aGl0ZXNwYWNlLgogICAgIEFTU0VSVCghbV9m
aXJzdFJ1bkluZGV4KTsKICAgICBBU1NFUlQoIW1faGFzRnVsbHlUcmltbWFibGVDb250ZW50KTsK
ICAgICBBU1NFUlQoIW1fcGFydGlhbGx5VHJpbW1hYmxlV2lkdGgpOwpAQCAtNDExLDE0ICs0Mzks
MTUgQEAgSW5saW5lTGF5b3V0VW5pdCBMaW5lQnVpbGRlcjo6VHJpbW1hYmxlVHJhaWxpbmdDb250
ZW50OjpyZW1vdmVQYXJ0aWFsbHlUcmltbWFibGUKIExpbmVCdWlsZGVyOjpSdW46OlJ1bihjb25z
dCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJ
bmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKICAgICA6IG1fdHlwZShpbmxpbmVJdGVtLnR5
cGUoKSkKICAgICAsIG1fbGF5b3V0Qm94KCZpbmxpbmVJdGVtLmxheW91dEJveCgpKQotICAgICwg
bV9sb2dpY2FsUmVjdCh7IDAsIGxvZ2ljYWxMZWZ0LCBsb2dpY2FsV2lkdGgsIDAgfSkKKyAgICAs
IG1fbG9naWNhbExlZnQobG9naWNhbExlZnQpCisgICAgLCBtX2xvZ2ljYWxXaWR0aChsb2dpY2Fs
V2lkdGgpCiB7CiB9CiAKIExpbmVCdWlsZGVyOjpSdW46OlJ1bihjb25zdCBJbmxpbmVTb2Z0TGlu
ZUJyZWFrSXRlbSYgc29mdExpbmVCcmVha0l0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNhbExl
ZnQpCiAgICAgOiBtX3R5cGUoc29mdExpbmVCcmVha0l0ZW0udHlwZSgpKQogICAgICwgbV9sYXlv
dXRCb3goJnNvZnRMaW5lQnJlYWtJdGVtLmxheW91dEJveCgpKQotICAgICwgbV9sb2dpY2FsUmVj
dCh7IDAsIGxvZ2ljYWxMZWZ0LCAwLCAwIH0pCisgICAgLCBtX2xvZ2ljYWxMZWZ0KGxvZ2ljYWxM
ZWZ0KQogICAgICwgbV90ZXh0Q29udGVudCh7IHNvZnRMaW5lQnJlYWtJdGVtLnBvc2l0aW9uKCks
IDEsIHNvZnRMaW5lQnJlYWtJdGVtLmlubGluZVRleHRCb3goKS5jb250ZW50KCksIGZhbHNlIH0p
CiB7CiB9CkBAIC00MjYsNyArNDU1LDggQEAgTGluZUJ1aWxkZXI6OlJ1bjo6UnVuKGNvbnN0IElu
bGluZVNvZnRMaW5lQnJlYWtJdGVtJiBzb2Z0TGluZUJyZWFrSXRlbSwgSW5saW5lTGEKIExpbmVC
dWlsZGVyOjpSdW46OlJ1bihjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lVGV4dEl0ZW0sIElu
bGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRo
LCBib29sIG5lZWRzSHlwaGVuKQogICAgIDogbV90eXBlKElubGluZUl0ZW06OlR5cGU6OlRleHQp
CiAgICAgLCBtX2xheW91dEJveCgmaW5saW5lVGV4dEl0ZW0ubGF5b3V0Qm94KCkpCi0gICAgLCBt
X2xvZ2ljYWxSZWN0KHsgMCwgbG9naWNhbExlZnQsIGxvZ2ljYWxXaWR0aCwgMCB9KQorICAgICwg
bV9sb2dpY2FsTGVmdChsb2dpY2FsTGVmdCkKKyAgICAsIG1fbG9naWNhbFdpZHRoKGxvZ2ljYWxX
aWR0aCkKICAgICAsIG1fdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZSh0cmFpbGluZ1doaXRlc3BhY2VU
eXBlKGlubGluZVRleHRJdGVtKSkKICAgICAsIG1fdGV4dENvbnRlbnQoeyBpbmxpbmVUZXh0SXRl
bS5zdGFydCgpLCBtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgPT0gVHJhaWxpbmdXaGl0ZXNwYWNl
OjpDb2xsYXBzZWQgPyAxIDogaW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCksIGlubGluZVRleHRJdGVt
LmlubGluZVRleHRCb3goKS5jb250ZW50KCksIG5lZWRzSHlwaGVuIH0pCiB7CkBAIC00NDQsNyAr
NDc0LDcgQEAgdm9pZCBMaW5lQnVpbGRlcjo6UnVuOjpleHBhbmQoY29uc3QgSW5saW5lVGV4dEl0
ZW0mIGlubGluZVRleHRJdGVtLCBJbmxpbmVMYXlvdXQKICAgICBBU1NFUlQoaXNUZXh0KCkgJiYg
aW5saW5lVGV4dEl0ZW0uaXNUZXh0KCkpOwogICAgIEFTU0VSVChtX2xheW91dEJveCA9PSAmaW5s
aW5lVGV4dEl0ZW0ubGF5b3V0Qm94KCkpOwogCi0gICAgbV9sb2dpY2FsUmVjdC5leHBhbmRIb3Jp
em9udGFsbHkobG9naWNhbFdpZHRoKTsKKyAgICBtX2xvZ2ljYWxXaWR0aCArPSBsb2dpY2FsV2lk
dGg7CiAgICAgbV90cmFpbGluZ1doaXRlc3BhY2VUeXBlID0gdHJhaWxpbmdXaGl0ZXNwYWNlVHlw
ZShpbmxpbmVUZXh0SXRlbSk7CiAKICAgICBpZiAobV90cmFpbGluZ1doaXRlc3BhY2VUeXBlID09
IFRyYWlsaW5nV2hpdGVzcGFjZTo6Tm9uZSkgewpAQCAtNDg1LDcgKzUxNSw3IEBAIHZvaWQgTGlu
ZUJ1aWxkZXI6OlJ1bjo6cmVtb3ZlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCkKIHZvaWQgTGluZUJ1
aWxkZXI6OlJ1bjo6cmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKCkKIHsKICAgICAvLyBBY2NvcmRp
bmcgdG8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy10ZXh0LTMvI3doaXRlLXNwYWNlLXByb3Bl
cnR5IG1hdHJpeAotICAgIC8vIFRyaW1tYWJsZSB3aGl0ZXNwYWNlIGlzIGFsd2F5cyBjb2xsYXBz
YWJsZSBzbyB0aGUgbGVuZ3RoIG9mIHRoZSB0cmFpbGluZyB0cmltbWFibGUgd2hpdGVzcGFjZSBp
cyBhbHdheXMgMSAob3Igbm9uLWV4aXN0ZW50KS4KKyAgICAvLyBUcmltbWFibGUgd2hpdGVzcGFj
ZSBpcyBhbHdheXMgY29sbGFwc2libGUgc28gdGhlIGxlbmd0aCBvZiB0aGUgdHJhaWxpbmcgdHJp
bW1hYmxlIHdoaXRlc3BhY2UgaXMgYWx3YXlzIDEgKG9yIG5vbi1leGlzdGVudCkuCiAgICAgQVNT
RVJUKG1fdGV4dENvbnRlbnQtPmxlbmd0aCgpKTsKICAgICBjb25zdGV4cHIgc2l6ZV90IHRyYWls
aW5nVHJpbW1hYmxlQ29udGVudExlbmd0aCA9IDE7CiAgICAgbV90ZXh0Q29udGVudC0+c2hyaW5r
KHRyYWlsaW5nVHJpbW1hYmxlQ29udGVudExlbmd0aCk7CkBAIC01MTgsMTEgKzU0OCwxMCBAQCBp
bmxpbmUgRXhwYW5zaW9uQmVoYXZpb3IgTGluZUJ1aWxkZXI6OlJ1bjo6ZXhwYW5zaW9uQmVoYXZp
b3IoKSBjb25zdAogICAgIHJldHVybiBtX2V4cGFuc2lvbi5iZWhhdmlvcjsKIH0KIAotdm9pZCBM
aW5lQnVpbGRlcjo6UnVuOjpzZXRDb21wdXRlZEhvcml6b250YWxFeHBhbnNpb24oSW5saW5lTGF5
b3V0VW5pdCBsb2dpY2FsRXhwYW5zaW9uKQordm9pZCBMaW5lQnVpbGRlcjo6UnVuOjpzZXRIb3Jp
em9udGFsRXhwYW5zaW9uKElubGluZUxheW91dFVuaXQgbG9naWNhbEV4cGFuc2lvbikKIHsKICAg
ICBBU1NFUlQoaXNUZXh0KCkpOwogICAgIEFTU0VSVChoYXNFeHBhbnNpb25PcHBvcnR1bml0eSgp
KTsKLSAgICBtX2xvZ2ljYWxSZWN0LmV4cGFuZEhvcml6b250YWxseShsb2dpY2FsRXhwYW5zaW9u
KTsKICAgICBtX2V4cGFuc2lvbi5ob3Jpem9udGFsRXhwYW5zaW9uID0gbG9naWNhbEV4cGFuc2lv
bjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKaW5kZXggNzI2YTY1NzNjZGFkNTUyOTVjMDIxOGM1
MjcwZjU5ZGRmMTEyODMxYy4uYTU2NzI2YTgyZDRiNzVhOGY5YzZjYzIyYjQ0NGE2OTFjZjlhMzQ3
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lTGluZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCkBAIC03NCwzOCArNzQsMzEgQEAgcHVibGljOgogCiAg
ICAgICAgIGNvbnN0IEJveCYgbGF5b3V0Qm94KCkgY29uc3QgeyByZXR1cm4gKm1fbGF5b3V0Qm94
OyB9CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGF5b3V0Qm94LT5zdHlsZSgpOyB9Ci0gICAgICAgIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3Qm
IGxvZ2ljYWxSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdDsgfQotICAgICAgICBE
aXNwbGF5OjpSdW46OkV4cGFuc2lvbiBleHBhbnNpb24oKSBjb25zdCB7IHJldHVybiBtX2V4cGFu
c2lvbjsgfQogICAgICAgICBjb25zdCBPcHRpb25hbDxEaXNwbGF5OjpSdW46OlRleHRDb250ZW50
PiYgdGV4dENvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX3RleHRDb250ZW50OyB9CiAKLSAgICAg
ICAgUnVuKFJ1biYmKSA9IGRlZmF1bHQ7Ci0gICAgICAgIFJ1biYgb3BlcmF0b3I9KFJ1biYmIG90
aGVyKSA9IGRlZmF1bHQ7CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2dpY2FsV2lkdGg7IH0KKyAgICAgICAgSW5saW5lTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbExlZnQ7IH0KKworICAgICAg
ICBjb25zdCBEaXNwbGF5OjpSdW46OkV4cGFuc2lvbiYgZXhwYW5zaW9uKCkgY29uc3QgeyByZXR1
cm4gbV9leHBhbnNpb247IH0KKyAgICAgICAgYm9vbCBoYXNFeHBhbnNpb25PcHBvcnR1bml0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsgfQorICAgICAgICBF
eHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0OworICAgICAgICB1bnNp
Z25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9leHBhbnNp
b25PcHBvcnR1bml0eUNvdW50OyB9CisKKyAgICAgICAgYm9vbCBoYXNUcmFpbGluZ1doaXRlc3Bh
Y2UoKSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgIT0gVHJhaWxpbmdX
aGl0ZXNwYWNlOjpOb25lOyB9CisgICAgICAgIElubGluZUxheW91dFVuaXQgdHJhaWxpbmdXaGl0
ZXNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoOyB9
CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTGluZUJ1aWxkZXI7Ci0gICAg
ICAgIGZyaWVuZCBjbGFzcyBMaW5lQ29udGVudEFsaWduZXI7CiAKICAgICAgICAgUnVuKGNvbnN0
IElubGluZVRleHRJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgSW5saW5lTGF5
b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wgbmVlZHNIeXBlbik7CiAgICAgICAgIFJ1bihjb25z
dCBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbSYsIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQp
OwogICAgICAgICBSdW4oY29uc3QgSW5saW5lSXRlbSYsIElubGluZUxheW91dFVuaXQgbG9naWNh
bExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKTsKIAogICAgICAgICB2b2lkIGV4
cGFuZChjb25zdCBJbmxpbmVUZXh0SXRlbSYsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRo
KTsKLQotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbG9naWNhbFJlY3Qud2lkdGgoKTsgfQotCi0gICAgICAgIHZvaWQgbW92ZUhvcml6b250
YWxseShJbmxpbmVMYXlvdXRVbml0IG9mZnNldCkgeyBtX2xvZ2ljYWxSZWN0Lm1vdmVIb3Jpem9u
dGFsbHkob2Zmc2V0KTsgfQotICAgICAgICB2b2lkIHNocmlua0hvcml6b250YWxseShJbmxpbmVM
YXlvdXRVbml0IHdpZHRoKSB7IG1fbG9naWNhbFJlY3QuZXhwYW5kSG9yaXpvbnRhbGx5KC13aWR0
aCk7IH0KLQotICAgICAgICB2b2lkIGFkanVzdExvZ2ljYWxUb3AoSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsVG9wKSB7IG1fbG9naWNhbFJlY3Quc2V0VG9wKGxvZ2ljYWxUb3ApOyB9Ci0gICAgICAg
IHZvaWQgbW92ZVZlcnRpY2FsbHkoSW5saW5lTGF5b3V0VW5pdCBvZmZzZXQpIHsgbV9sb2dpY2Fs
UmVjdC5tb3ZlVmVydGljYWxseShvZmZzZXQpOyB9Ci0gICAgICAgIHZvaWQgc2V0TG9naWNhbEhl
aWdodChJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpIHsgbV9sb2dpY2FsUmVjdC5zZXRI
ZWlnaHQobG9naWNhbEhlaWdodCk7IH0KLQotICAgICAgICBib29sIGhhc0V4cGFuc2lvbk9wcG9y
dHVuaXR5KCkgY29uc3QgeyByZXR1cm4gbV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50OyB9Ci0g
ICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3Q7Ci0gICAg
ICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKSBjb25zdCB7IHJldHVybiBt
X2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7IH0KLSAgICAgICAgdm9pZCBzZXRDb21wdXRlZEhv
cml6b250YWxFeHBhbnNpb24oSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsRXhwYW5zaW9uKTsKKyAg
ICAgICAgdm9pZCBtb3ZlSG9yaXpvbnRhbGx5KElubGluZUxheW91dFVuaXQgb2Zmc2V0KSB7IG1f
bG9naWNhbExlZnQgKz0gb2Zmc2V0OyB9CisgICAgICAgIHZvaWQgc2hyaW5rSG9yaXpvbnRhbGx5
KElubGluZUxheW91dFVuaXQgd2lkdGgpIHsgbV9sb2dpY2FsV2lkdGggLT0gd2lkdGg7IH0KICAg
ICAgICAgdm9pZCBzZXRFeHBhbnNpb25CZWhhdmlvcihFeHBhbnNpb25CZWhhdmlvcik7Ci0KKyAg
ICAgICAgdm9pZCBzZXRIb3Jpem9udGFsRXhwYW5zaW9uKElubGluZUxheW91dFVuaXQgbG9naWNh
bEV4cGFuc2lvbik7CiAgICAgICAgIHZvaWQgc2V0TmVlZHNIeXBoZW4oKSB7IG1fdGV4dENvbnRl
bnQtPnNldE5lZWRzSHlwaGVuKCk7IH0KIAogICAgICAgICBlbnVtIGNsYXNzIFRyYWlsaW5nV2hp
dGVzcGFjZSB7CkBAIC0xMTQsMTAgKzEwNyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIENvbGxh
cHNpYmxlLAogICAgICAgICAgICAgQ29sbGFwc2VkCiAgICAgICAgIH07Ci0gICAgICAgIGJvb2wg
aGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1doaXRlc3Bh
Y2VUeXBlICE9IFRyYWlsaW5nV2hpdGVzcGFjZTo6Tm9uZTsgfQogICAgICAgICBib29sIGhhc0Nv
bGxhcHNpYmxlVHJhaWxpbmdXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1do
aXRlc3BhY2VUeXBlID09IFRyYWlsaW5nV2hpdGVzcGFjZTo6Q29sbGFwc2libGUgfHwgaGFzQ29s
bGFwc2VkVHJhaWxpbmdXaGl0ZXNwYWNlKCk7IH0KICAgICAgICAgYm9vbCBoYXNDb2xsYXBzZWRU
cmFpbGluZ1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5nV2hpdGVzcGFjZVR5
cGUgPT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpDb2xsYXBzZWQ7IH0KLSAgICAgICAgSW5saW5lTGF5
b3V0VW5pdCB0cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxp
bmdXaGl0ZXNwYWNlV2lkdGg7IH0KICAgICAgICAgVHJhaWxpbmdXaGl0ZXNwYWNlIHRyYWlsaW5n
V2hpdGVzcGFjZVR5cGUoY29uc3QgSW5saW5lVGV4dEl0ZW0mKSBjb25zdDsKICAgICAgICAgdm9p
ZCByZW1vdmVUcmFpbGluZ1doaXRlc3BhY2UoKTsKICAgICAgICAgdm9pZCB2aXN1YWxseUNvbGxh
cHNlVHJhaWxpbmdXaGl0ZXNwYWNlKCk7CkBAIC0xMjgsNyArMTE5LDggQEAgcHVibGljOgogCiAg
ICAgICAgIElubGluZUl0ZW06OlR5cGUgbV90eXBlIHsgSW5saW5lSXRlbTo6VHlwZTo6VGV4dCB9
OwogICAgICAgICBjb25zdCBCb3gqIG1fbGF5b3V0Qm94IHsgbnVsbHB0ciB9OwotICAgICAgICBE
aXNwbGF5OjpJbmxpbmVSZWN0IG1fbG9naWNhbFJlY3Q7CisgICAgICAgIElubGluZUxheW91dFVu
aXQgbV9sb2dpY2FsTGVmdCB7IDAgfTsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX2xvZ2lj
YWxXaWR0aCB7IDAgfTsKICAgICAgICAgVHJhaWxpbmdXaGl0ZXNwYWNlIG1fdHJhaWxpbmdXaGl0
ZXNwYWNlVHlwZSB7IFRyYWlsaW5nV2hpdGVzcGFjZTo6Tm9uZSB9OwogICAgICAgICBJbmxpbmVM
YXlvdXRVbml0IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggeyAwIH07CiAgICAgICAgIE9wdGlv
bmFsPERpc3BsYXk6OlJ1bjo6VGV4dENvbnRlbnQ+IG1fdGV4dENvbnRlbnQ7CkBAIC0xMzcsNyAr
MTI5LDYgQEAgcHVibGljOgogICAgIH07CiAgICAgdXNpbmcgUnVuTGlzdCA9IFZlY3RvcjxSdW4s
IDEwPjsKICAgICBjb25zdCBSdW5MaXN0JiBydW5zKCkgY29uc3QgeyByZXR1cm4gbV9ydW5zOyB9
Ci0gICAgUnVuTGlzdCYgcnVucygpIHsgcmV0dXJuIG1fcnVuczsgfQogCiBwcml2YXRlOgogICAg
IElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGluZUxvZ2ljYWxMZWZ0ICsgbV9jb250ZW50TG9naWNhbFdpZHRoOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407394</attachid>
            <date>2020-08-27 06:06:44 -0700</date>
            <delta_ts>2020-08-27 07:57:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215068-20200827060643.patch</filename>
            <type>text/plain</type>
            <size>30083</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg4ODkyYTYyZDhmOGVm
NzcxMGJhMjg2NDg1NDNhZTA0YzhmMDYyZC4uOWE5OTYzNzNmYzcxMGUzMDU3MmY4Y2Y3OTU1YzIz
NDVhZjk1NGE1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDIwLTA4LTI2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBMaW5lQnVp
bGRlcjpSdW4gc2hvdWxkIG5vdCBoYXZlIHZlcnRpY2FsIGdlb21ldHJ5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwNjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW5jZSBMaW5lQnVpbGRlciBvbmx5
IHRha2VzIGNhcmUgb2YgdGhlIGhvcml6b250YWwgYXNjcGVjdCBvZiBhIHJ1biwgTGluZUJ1aWxk
ZXI6OlJ1biBzaG91bGQgb25seSBoYXZlIGxvZ2ljYWwgbGVmdCBhbmQgd2lkdGggZ2VvbWV0cnku
CisgICAgICAgIFRoZSB2ZXJ0aWNhbCBnZW9tZXRyeSBpcyBjb21wdXRlZCBhcyBwYXJ0IG9mIHRo
ZSBjb250ZW50IGFsaWdubWVudCBwaGFzZSBpbiBMaW5lQ29udGVudEFsaWduZXIgKGFsb25nIHdp
dGggdGhlIGZpbmFsIGhvcml6b250YWwgcG9zaXRpb24KKyAgICAgICAgYWRqdXN0ZWQgd2l0aCB0
aGUgYWxpZ25tZW50KS4KKyAgICAgICAgVGhpcyBpcyBzdGlsbCBhIHRyYW5zaXRpb25hbCBzdGF0
ZSAoc2VlIElubGluZVJ1blJlY3RMaXN0IG1fcnVuUmVjdExpc3QpIGFuZCBhbGwgdGhlIGxpbmUg
Ym94IHJlbGF0ZWQgY29kZSB3aWxsIGdldCBtb3ZlZCB0byB0aGUgTGluZUJveCBjbGFzcy4KKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIGVuYWJsZXMgdXMgdG8ga2VlcCBMaW5lQnVpbGRlcjo6UnVu
IGNvbnN0LgorCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFs
aWduZXI6OmlubGluZVJlY3RMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUNvbnRlbnRBbGlnbmVyOjpMaW5lQ29udGVudEFsaWduZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFsaWduSG9yaXpvbnRhbGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphbGlnblZlcnRpY2FsbHkp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFkanVzdEJh
c2VsaW5lQW5kTGluZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5zKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpydW5D
b250ZW50SGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJ1aWxkZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OnZpc3VhbGx5Q29sbGFwc2VQcmVXcmFwT3ZlcmZsb3dDb250ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVu
dDo6YWRkRnVsbHlUcmltbWFibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6YWRkUGFydGlhbGx5VHJpbW1h
YmxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46
OlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmV4cGFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OnJlbW92ZVRy
YWlsaW5nV2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpSdW46OnNldEhvcml6b250YWxFeHBhbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjptX3RleHRDb250ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OlJ1bjo6c2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpzdHlsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmxvZ2ljYWxXaWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46Omxv
Z2ljYWxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6
OlJ1bjo6ZXhwYW5zaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OlJ1bjo6aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6aGFz
VHJhaWxpbmdXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OlJ1bjo6dHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjptb3ZlSG9yaXpvbnRhbGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6c2hyaW5rSG9yaXpvbnRh
bGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6aGFzQ29s
bGFwc2VkVHJhaWxpbmdXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OnJ1bnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6UnVuOjpsb2dpY2FsUmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmFkanVzdExvZ2ljYWxUb3ApOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjptb3ZlVmVy
dGljYWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpSdW46OnNldExvZ2ljYWxIZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQnVpbGRlcjo6cnVucyk6IERlbGV0ZWQuCisKIDIwMjAtMDgtMjYgIFphbGFuIEJ1
anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIE1vdmUgTGluZUJv
eCBvdXQgb2YgTGluZUJ1aWxkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApp
bmRleCAyYTgyOTExNTdiMDgzYjY0N2Q5YWIzNTU0NWY3M2QxYTcxYzRiNTc1Li43OTFmZmM3YTBk
N2NmMWU1MzAyODNkYWY1NjMzZTY5NTM3MzNhYzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCkBAIC05OSwzMyArOTksNTQgQEAgdm9pZCBIYW5naW5nQ29udGVudDo6cmVz
ZXQoKQogCiBjbGFzcyBMaW5lQ29udGVudEFsaWduZXIgewogcHVibGljOgotICAgIExpbmVDb250
ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIExpbmVCb3gmLCBMaW5l
QnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOworICAg
IExpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIExpbmVC
b3gmLCBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxheW91dFVuaXQgYXZhaWxh
YmxlV2lkdGgpOwogCiAgICAgZW51bSBjbGFzcyBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQg
eyBObywgWWVzIH07CiAgICAgdm9pZCBhbGlnbkhvcml6b250YWxseShUZXh0QWxpZ25Nb2RlLCBJ
c0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwogICAgIHZvaWQgYWxpZ25WZXJ0aWNhbGx5KCk7
CiAgICAgdm9pZCBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsKIAorICAgIHVzaW5nIElu
bGluZVJ1blJlY3RMaXN0ID0gVmVjdG9yPERpc3BsYXk6OklubGluZVJlY3QsIDEwPjsKKyAgICBj
b25zdCBJbmxpbmVSdW5SZWN0TGlzdCYgaW5saW5lUmVjdExpc3QoKSBjb25zdCB7IHJldHVybiBt
X3J1blJlY3RMaXN0OyB9CisKIHByaXZhdGU6Ci0gICAgdm9pZCBqdXN0aWZ5UnVucyhJbmxpbmVM
YXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKICAgICBIYW5naW5nQ29udGVudCBjb2xsZWN0SGFu
Z2luZ0NvbnRlbnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KSBjb25zdDsKLSAgICBJbmxp
bmVMYXlvdXRVbml0IHJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgTGluZUJ1aWxkZXI6OlJ1biYpIGNv
bnN0OwogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsgfQogICAgIExh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0
KCkubGF5b3V0U3RhdGUoKTsgfQogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQm
IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CiAgICAgTGluZUJveCYgbV9saW5lQm94OwotICAg
IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBtX3J1bnM7CisgICAgY29uc3QgTGluZUJ1aWxkZXI6OlJ1
bkxpc3QmIG1fcnVuczsKKyAgICBJbmxpbmVSdW5SZWN0TGlzdCBtX3J1blJlY3RMaXN0OwogICAg
IElubGluZUxheW91dFVuaXQgbV9hdmFpbGFibGVXaWR0aDsKIH07CiAKLUxpbmVDb250ZW50QWxp
Z25lcjo6TGluZUNvbnRlbnRBbGlnbmVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBp
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgTGluZUJveCYgbGluZUJveCwgTGluZUJ1aWxkZXI6OlJ1
bkxpc3QmIHJ1bnMsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpCitMaW5lQ29udGVu
dEFsaWduZXI6OkxpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmVC
dWlsZGVyOjpSdW5MaXN0JiBydW5zLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQog
ICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkK
ICAgICAsIG1fbGluZUJveChsaW5lQm94KQogICAgICwgbV9ydW5zKHJ1bnMpCiAgICAgLCBtX2F2
YWlsYWJsZVdpZHRoKGF2YWlsYWJsZVdpZHRoKQogeworICAgIGZvciAoYXV0byYgcnVuIDogbV9y
dW5zKSB7CisgICAgICAgIGF1dG8gcnVuSGVpZ2h0ID0gWyZdKCkgLT4gSW5saW5lTGF5b3V0VW5p
dCB7CisgICAgICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZvbnRNZXRy
aWNzKCk7CisgICAgICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKKworICAgICAg
ICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOworCisgICAgICAg
ICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CisgICAgICAgICAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGlubGluZUZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxh
eW91dEJveCk7CisgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSB8fCBs
YXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
Ym94R2VvbWV0cnkuY29udGVudEJveEhlaWdodCgpOworCisgICAgICAgICAgICAvLyBOb24tcmVw
bGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJpdCBtaXNs
ZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRlbnQgaGVp
Z2h0IGhlcmUuCisgICAgICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0
KCk7CisgICAgICAgIH07CisgICAgICAgIG1fcnVuUmVjdExpc3QuYXBwZW5kKHsgMCwgcnVuLmxv
Z2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2FsV2lkdGgoKSwgcnVuSGVpZ2h0KCkgfSk7CisgICAgfQog
fQogCiB2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25Ib3Jpem9udGFsbHkoVGV4dEFsaWdu
TW9kZSBob3Jpem9udGFsQWxpZ25tZW50LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNM
YXN0TGluZSkKQEAgLTEzNiw3ICsxNTcsMTEgQEAgdm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFs
aWduSG9yaXpvbnRhbGx5KFRleHRBbGlnbk1vZGUgaG9yaXpvbnRhbEFsaWdubWVudCwgSXMKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGhvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWdu
TW9kZTo6SnVzdGlmeSkgewotICAgICAgICBqdXN0aWZ5UnVucyhhdmFpbGFibGVXaWR0aCk7Cisg
ICAgICAgIGF1dG8gYWNjdW11bGF0ZWRFeHBhbnNpb24gPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsK
KyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fcnVucy5zaXplKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgICAgIG1fcnVuUmVjdExpc3RbaW5kZXhdLm1vdmVIb3Jpem9udGFs
bHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOworICAgICAgICAgICAgYWNjdW11bGF0ZWRFeHBhbnNp
b24gKz0gbV9ydW5zW2luZGV4XS5leHBhbnNpb24oKS5ob3Jpem9udGFsRXhwYW5zaW9uOworICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE2MSwyMiArMTg2LDE4IEBAIHZv
aWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGlnbkhvcml6b250YWxseShUZXh0QWxpZ25Nb2RlIGhv
cml6b250YWxBbGlnbm1lbnQsIElzCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfTsKIAotICAg
IGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRGb3JBbGlnbm1lbnQoYXZhaWxhYmxlV2lkdGgp
OwotICAgIGlmICghYWRqdXN0bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEhvcml6b250
YWwgYWxpZ25tZW50IG1lYW5zIHRoYXQgd2Ugbm90IG9ubHkgYWRqdXN0IHRoZSBydW5zIGJ1dCBh
bHNvIG1ha2Ugc3VyZQotICAgIC8vIHRoYXQgdGhlIGxpbmUgYm94IGlzIGFsaWduZWQgYXMgd2Vs
bAotICAgIC8vIGUuZy4gPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyB3aWR0aDogMTAw
cHg7Ij5jZW50ZXJlZCB0ZXh0PC9kaXY+IDogdGhlIGxpbmUgYm94IHdpbGwgYWxzbyBiZSBjZW50
ZXJlZAotICAgIC8vIGFzIG9wcG9zZWQgdG8gc3RhcnQgYXQgMHB4IGFsbCB0aGUgd2F5IHRvIFtj
ZW50ZXJlZCB0ZXh0XSBydW4ncyByaWdodCBlZGdlLgotICAgIG1fbGluZUJveC5tb3ZlSG9yaXpv
bnRhbGx5KCphZGp1c3RtZW50KTsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykKLSAgICAg
ICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1lbnQpOworICAgIGlmIChhdXRvIGFkanVz
dG1lbnQgPSBhZGp1c3RtZW50Rm9yQWxpZ25tZW50KGF2YWlsYWJsZVdpZHRoKSkgeworICAgICAg
ICBmb3IgKGF1dG8mIHJ1blJlY3QgOiBtX3J1blJlY3RMaXN0KQorICAgICAgICAgICAgcnVuUmVj
dC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKKyAgICB9CiB9CiAKIHZvaWQgTGluZUNv
bnRlbnRBbGlnbmVyOjphbGlnblZlcnRpY2FsbHkoKQogewogICAgIGF1dG8gc2Nyb2xsYWJsZU92
ZXJmbG93UmVjdCA9IG1fbGluZUJveC5sb2dpY2FsUmVjdCgpOwotICAgIGZvciAoYXV0byYgcnVu
IDogbV9ydW5zKSB7CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fcnVucy5z
aXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byYgcnVuID0gbV9ydW5zW2luZGV4XTsKKyAg
ICAgICAgYXV0byYgcnVuUmVjdCA9IG1fcnVuUmVjdExpc3RbaW5kZXhdOwogICAgICAgICBhdXRv
IGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKICAgICAgICAgYXV0byYgbGF5b3V0
Qm94ID0gcnVuLmxheW91dEJveCgpOwogICAgICAgICBhdXRvIHZlcnRpY2FsQWxpZ24gPSBsYXlv
dXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7CkBAIC0yMTAsNjYgKzIzMSwyOSBAQCB2b2lk
IExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25WZXJ0aWNhbGx5KCkKICAgICAgICAgICAgICAgICBs
b2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgLSBiYXNlbGluZUZyb21N
YXJnaW5Cb3g7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGF1dG8mIGJv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gp
OwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxp
bmUoKSAtIChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnkudmVydGlj
YWxQYWRkaW5nKCkudmFsdWVPcigwX2x1KSArIHJ1bi5sb2dpY2FsUmVjdCgpLmhlaWdodCgpICsg
Ym94R2VvbWV0cnkubWFyZ2luQWZ0ZXIoKSk7CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9
IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gKGJveEdlb21ldHJ5LnZlcnRpY2FsQm9y
ZGVyKCkgKyBib3hHZW9tZXRyeS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDBfbHUpICsgcnVu
UmVjdC5oZWlnaHQoKSArIGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCkpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgog
ICAgICAgICAgICAgbG9naWNhbFRvcCA9IDBfbHU7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206Ci0gICAgICAgICAgICBsb2dpY2FsVG9wID0g
bV9saW5lQm94LmxvZ2ljYWxCb3R0b20oKSAtIHJ1bi5sb2dpY2FsUmVjdCgpLmhlaWdodCgpOwor
ICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5sb2dpY2FsQm90dG9tKCkgLSBydW5S
ZWN0LmhlaWdodCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgcnVuLmFkanVzdExvZ2ljYWxUb3AobG9naWNhbFRvcCk7Cisg
ICAgICAgIHJ1blJlY3Quc2V0VG9wKGxvZ2ljYWxUb3ApOwogICAgICAgICAvLyBBZGp1c3Qgc2Ny
b2xsYWJsZSBvdmVyZmxvdyBpZiB0aGUgcnVuIG92ZXJmbG93cyB0aGUgbGluZS4KLSAgICAgICAg
c2Nyb2xsYWJsZU92ZXJmbG93UmVjdC5leHBhbmRWZXJ0aWNhbGx5VG9Db250YWluKHJ1bi5sb2dp
Y2FsUmVjdCgpKTsKKyAgICAgICAgc2Nyb2xsYWJsZU92ZXJmbG93UmVjdC5leHBhbmRWZXJ0aWNh
bGx5VG9Db250YWluKHJ1blJlY3QpOwogICAgICAgICAvLyBDb252ZXJ0IHJ1bnMgZnJvbSByZWxh
dGl2ZSB0byB0aGUgbGluZSB0b3AvbGVmdCB0byB0aGUgZm9ybWF0dGluZyByb290J3MgYm9yZGVy
IGJveCB0b3AvbGVmdC4KLSAgICAgICAgcnVuLm1vdmVWZXJ0aWNhbGx5KG1fbGluZUJveC5sb2dp
Y2FsVG9wKCkpOwotICAgICAgICBydW4ubW92ZUhvcml6b250YWxseShtX2xpbmVCb3gubG9naWNh
bExlZnQoKSk7CisgICAgICAgIHJ1blJlY3QubW92ZVZlcnRpY2FsbHkobV9saW5lQm94LmxvZ2lj
YWxUb3AoKSk7CisgICAgICAgIHJ1blJlY3QubW92ZUhvcml6b250YWxseShtX2xpbmVCb3gubG9n
aWNhbExlZnQoKSk7CiAgICAgfQogICAgIG1fbGluZUJveC5zZXRTY3JvbGxhYmxlT3ZlcmZsb3co
c2Nyb2xsYWJsZU92ZXJmbG93UmVjdCk7CiB9CiAKLXZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjpq
dXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQotewotICAgIEFTU0VS
VChhdmFpbGFibGVXaWR0aCA+IDApOwotICAgIC8vIENvbGxlY3QgdGhlIGV4cGFuc2lvbiBvcHBv
cnR1bml0eSBudW1iZXJzIGFuZCBmaW5kIHRoZSBsYXN0IHJ1biB3aXRoIGNvbnRlbnQuCi0gICAg
YXV0byBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gMDsKLSAgICBMaW5lQnVpbGRlcjo6UnVu
KiBsYXN0UnVuV2l0aENvbnRlbnQgPSBudWxscHRyOwotICAgIGZvciAoYXV0byYgcnVuIDogbV9y
dW5zKSB7Ci0gICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgKz0gcnVuLmV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnQoKTsKLSAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNC
b3goKSkKLSAgICAgICAgICAgIGxhc3RSdW5XaXRoQ29udGVudCA9ICZydW47Ci0gICAgfQotICAg
IC8vIE5lZWQgdG8gZml4IHVwIHRoZSBsYXN0IHJ1bidzIHRyYWlsaW5nIGV4cGFuc2lvbi4KLSAg
ICBpZiAobGFzdFJ1bldpdGhDb250ZW50ICYmIGxhc3RSdW5XaXRoQ29udGVudC0+aGFzRXhwYW5z
aW9uT3Bwb3J0dW5pdHkoKSkgewotICAgICAgICAvLyBUdXJuIG9mZiB0aGUgdHJhaWxpbmcgYml0
cyBmaXJzdCBhbmQgYWRkIHRoZSBmb3JiaWQgdHJhaWxpbmcgZXhwYW5zaW9uLgotICAgICAgICBh
dXRvIGxlZnRFeHBhbnNpb24gPSBsYXN0UnVuV2l0aENvbnRlbnQtPmV4cGFuc2lvbkJlaGF2aW9y
KCkgJiBMZWZ0RXhwYW5zaW9uTWFzazsKLSAgICAgICAgbGFzdFJ1bldpdGhDb250ZW50LT5zZXRF
eHBhbnNpb25CZWhhdmlvcihsZWZ0RXhwYW5zaW9uIHwgRm9yYmlkUmlnaHRFeHBhbnNpb24pOwot
ICAgIH0KLSAgICAvLyBOb3RoaW5nIHRvIGRpc3RyaWJ1dGU/Ci0gICAgaWYgKCFleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50KQotICAgICAgICByZXR1cm47Ci0gICAgLy8gRGlzdHJpYnV0ZSB0aGUg
ZXh0cmEgc3BhY2UuCi0gICAgYXV0byBleHBhbnNpb25Ub0Rpc3RyaWJ1dGUgPSBhdmFpbGFibGVX
aWR0aCAvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBh
Y2N1bXVsYXRlZEV4cGFuc2lvbiA9IDA7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsK
LSAgICAgICAgLy8gRXhwYW5kIGFuZCBtb3ZlcyBydW5zIGJ5IHRoZSBhY2N1bXVsYXRlZCBleHBh
bnNpb24uCi0gICAgICAgIGlmICghcnVuLmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpIHsKLSAg
ICAgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChydW4uZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudCgpKTsKLSAgICAgICAgYXV0byBjb21wdXRlZEV4cGFuc2lvbiA9
IGV4cGFuc2lvblRvRGlzdHJpYnV0ZSAqIHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCk7
Ci0gICAgICAgIHJ1bi5zZXRDb21wdXRlZEhvcml6b250YWxFeHBhbnNpb24oY29tcHV0ZWRFeHBh
bnNpb24pOwotICAgICAgICBydW4ubW92ZUhvcml6b250YWxseShhY2N1bXVsYXRlZEV4cGFuc2lv
bik7Ci0gICAgICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IGNvbXB1dGVkRXhwYW5zaW9uOwot
ICAgIH0KLX0KLQogdm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFkanVzdEJhc2VsaW5lQW5kTGlu
ZUhlaWdodCgpCiB7CiAgICAgdW5zaWduZWQgaW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsID0g
MDsKQEAgLTI3Nyw5ICsyNjEsNiBAQCB2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWRqdXN0QmFz
ZWxpbmVBbmRMaW5lSGVpZ2h0KCkKICAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgewogICAg
ICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CiAgICAgICAgIGF1dG8mIHN0
eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0KLSAgICAgICAgcnVuLnNldExvZ2ljYWxIZWlnaHQo
cnVuQ29udGVudEhlaWdodChydW4pKTsKLQogICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1
bi5pc0xpbmVCcmVhaygpKSB7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ29udGFpbmVyTmVzdGlu
Z0xldmVsKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBhZGp1c3RlZCB0aGUg
bGluZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3VnaCB0aGUgcGFyZW50IGlubGluZSBjb250YWluZXIu
IApAQCAtMzg1LDI0ICszNjYsNiBAQCBIYW5naW5nQ29udGVudCBMaW5lQ29udGVudEFsaWduZXI6
OmNvbGxlY3RIYW5naW5nQ29udGVudChJc0xhc3RMaW5lV2l0aElubGluZUNvbgogICAgIHJldHVy
biBoYW5naW5nQ29udGVudDsKIH0KIAotSW5saW5lTGF5b3V0VW5pdCBMaW5lQ29udGVudEFsaWdu
ZXI6OnJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgTGluZUJ1aWxkZXI6OlJ1biYgcnVuKSBjb25zdAot
ewotICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gcnVuLnN0eWxlKCkuZm9udE1ldHJpY3MoKTsKLSAg
ICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKQotICAgICAgICByZXR1cm4g
Zm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0KLSAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSB8
fCBydW4uaXNDb250YWluZXJFbmQoKSkKLSAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdo
dCgpOwotCi0gICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwotICAgIGF1dG8m
IGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRC
b3gpOwotICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpIHx8IGxheW91dEJveC5pc0Zs
b2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkuY29udGVudEJv
eEhlaWdodCgpOwotCi0gICAgLy8gTm9uLXJlcGxhY2VkIGlubGluZSBib3ggKGUuZy4gaW5saW5l
LWJsb2NrKS4gSXQgbG9va3MgYSBiaXQgbWlzbGVhZGluZyBidXQgdGhlaXIgbWFyZ2luIGJveCBp
cyBjb25zaWRlcmVkIHRoZSBjb250ZW50IGhlaWdodCBoZXJlLgotICAgIHJldHVybiBib3hHZW9t
ZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKLX0KLQogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6bGF5b3V0SW5GbG93Q29udGVudChJbnZhbGlkYXRpb25TdGF0ZSYgaW52YWxpZGF0aW9uU3Rh
dGUsIGNvbnN0IENvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCYgY29uc3RyYWludHMpCiB7CiAg
ICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltT
dGFydF0gLT4gaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCAtPiBmb3JtYXR0aW5nIHJvb3QoIiA8
PCAmcm9vdCgpIDw8ICIpIik7CkBAIC00ODIsOCArNDQ1LDggQEAgdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMsIExpbmVMYXlv
dXRDb24KICAgICAgICAgYXV0byBsaW5lQm94ID0gTGluZUJveCB7IERpc3BsYXk6OklubGluZVJl
Y3QgeyBsaW5lQ29uc3RyYWludHMubG9naWNhbFRvcExlZnQsIGxpbmUuY29udGVudExvZ2ljYWxX
aWR0aCgpLCBsaW5lQ29uc3RyYWludHMubGluZUhlaWdodCB9LCBMaW5lQm94OjpoYWxmTGVhZGlu
Z01ldHJpY3Mocm9vdCgpLnN0eWxlKCkuZm9udE1ldHJpY3MoKSwgbGluZUNvbnN0cmFpbnRzLmxp
bmVIZWlnaHQpIH07CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGFuZCB3
aWxsIGV2ZW50dWFsbHkgZ2V0IG1lcmdlZCB0byBMaW5lQm94LgorICAgICAgICBhdXRvIGNvbnRl
bnRBbGlnbmVyID0gTGluZUNvbnRlbnRBbGlnbmVyIHsgKnRoaXMsIGxpbmVCb3gsIGxpbmUucnVu
cygpLCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgfTsKICAgICAgICAgYXV0byBhbGlnbkxpbmVDb250
ZW50ID0gWyZdIHsKLSAgICAgICAgICAgIGF1dG8gY29udGVudEFsaWduZXIgPSBMaW5lQ29udGVu
dEFsaWduZXIgeyAqdGhpcywgbGluZUJveCwgbGluZS5ydW5zKCksIGxpbmUuYXZhaWxhYmxlV2lk
dGgoKSB9OwogICAgICAgICAgICAgY29udGVudEFsaWduZXIuYWRqdXN0QmFzZWxpbmVBbmRMaW5l
SGVpZ2h0KCk7CiAgICAgICAgICAgICBpZiAobGluZS5pc1Zpc3VhbGx5RW1wdHkoKSkgewogICAg
ICAgICAgICAgICAgIGxpbmVCb3gucmVzZXRBbGlnbm1lbnRCYXNlbGluZSgpOwpAQCAtNTI1LDcg
KzQ4OCw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQoSW5saW5l
SXRlbXMmIGlubGluZUl0ZW1zLCBMaW5lTGF5b3V0Q29uCiAgICAgICAgIH07CiAKICAgICAgICAg
YWxpZ25MaW5lQ29udGVudCgpOwotICAgICAgICBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGxpbmUs
IGxpbmVCb3gsIGxpbmVDb250ZW50LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKKyAgICAgICAg
c2V0RGlzcGxheUJveGVzRm9yTGluZShsaW5lLCBjb250ZW50QWxpZ25lci5pbmxpbmVSZWN0TGlz
dCgpLCBsaW5lQm94LCBsaW5lQ29udGVudCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCk7CiAKICAg
ICAgICAgaWYgKCFsaW5lQ29udGVudFJhbmdlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQVNT
RVJUKG5lZWRzTGF5b3V0UmFuZ2Uuc3RhcnQgPCBsaW5lQ29udGVudFJhbmdlLmVuZCk7CkBAIC04
MzcsNyArODAwLDcgQEAgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVDb25zdHJhaW50cyBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29uc3RyYWludHNGb3IKICAgICByZXR1cm4gTGluZUNv
bnN0cmFpbnRzIHsgeyBsaW5lTG9naWNhbExlZnQsIGxpbmVMb2dpY2FsVG9wIH0sIGxpbmVMb2dp
Y2FsUmlnaHQgLSBsaW5lTG9naWNhbExlZnQsIGluaXRpYWxMaW5lSGVpZ2h0LCBsaW5lSXNDb25z
dHJhaW5lZEJ5RmxvYXQgfTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0
RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlciYgbGluZSwgY29uc3QgTGluZUJv
eCYgbGluZUJveCwgIGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCYgbGluZUNv
bnRlbnQsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRz
KQordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShj
b25zdCBMaW5lQnVpbGRlciYgbGluZSwgY29uc3QgTGluZUNvbnRlbnRBbGlnbmVyOjpJbmxpbmVS
dW5SZWN0TGlzdCYgcnVuUmVjdExpc3QsIGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IExp
bmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQogewogICAgIGF1dG8mIGZvcm1h
dHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgpOwogCkBAIC04NjcsOSArODMwLDkg
QEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShj
b25zdCBMaW5lQnVpbGRlciYgbGluZSwgY28KICAgICBhdXRvIGxpbmVJbmtPdmVyZmxvdyA9IGxp
bmVCb3guc2Nyb2xsYWJsZU92ZXJmbG93KCk7CiAgICAgLy8gQ29tcHV0ZSBib3ggZmluYWwgZ2Vv
bWV0cnkuCiAgICAgYXV0byYgbGluZVJ1bnMgPSBsaW5lLnJ1bnMoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCBsaW5lUnVucy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbGluZVJ1bnMuc2l6ZSgpOyArK2luZGV4KSB7
CiAgICAgICAgIGF1dG8mIGxpbmVSdW4gPSBsaW5lUnVucy5hdChpbmRleCk7Ci0gICAgICAgIGF1
dG8mIGxvZ2ljYWxSZWN0ID0gbGluZVJ1bi5sb2dpY2FsUmVjdCgpOworICAgICAgICBhdXRvIGxv
Z2ljYWxSZWN0ID0gcnVuUmVjdExpc3RbaW5kZXhdOwogICAgICAgICBhdXRvJiBsYXlvdXRCb3gg
PSBsaW5lUnVuLmxheW91dEJveCgpOwogCiAgICAgICAgIC8vIEFkZCBmaW5hbCBkaXNwbGF5IHJ1
bnMgdG8gc3RhdGUgZmlyc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCAw
M2U0ZmI2YThhYTZjODViNjkwMDM5NWUzZTk3YmM0ZTkxNjI4ZmFkLi4zMzk1NDQwOTI5NmI5YTBh
YWU4NjhhNWM5NGNjMmQwNWJmN2E2NmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
LmgKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBsaW5lSXNDb25zdHJh
aW5lZEJ5RmxvYXQgeyBmYWxzZSB9OwogICAgIH07CiAgICAgTGluZUNvbnN0cmFpbnRzIGNvbnN0
cmFpbnRzRm9yTGluZShjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBJbmxpbmVMYXlvdXRV
bml0IGxpbmVMb2dpY2FsVG9wKTsKLSAgICB2b2lkIHNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29u
c3QgTGluZUJ1aWxkZXImLCBjb25zdCBMaW5lQm94JiwgY29uc3QgTGluZUxheW91dENvbnRleHQ6
OkxpbmVDb250ZW50JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJik7CisgICAgdm9pZCBz
ZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyJiwgY29uc3QgVmVjdG9yPERp
c3BsYXk6OklubGluZVJlY3QsIDEwPiYsIGNvbnN0IExpbmVCb3gmLCBjb25zdCBMaW5lTGF5b3V0
Q29udGV4dDo6TGluZUNvbnRlbnQmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsKICAg
ICB2b2lkIGludmFsaWRhdGVGb3JtYXR0aW5nU3RhdGUoY29uc3QgSW52YWxpZGF0aW9uU3RhdGUm
KTsKIAogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkg
Y29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5n
Q29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKaW5k
ZXggNjQ1MjY2MTM3OGY2NmZlM2JmNWU2YTQ2MzVhMjQ0NjFjYjBlYWM5MC4uOTAzODRiOTk2ZTY3
ZDY0NDZjZGI4OTg4OTU2OTczNTg4MTJjNDY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcApA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSW5saW5lU29mdExpbmVCcmVha0l0ZW0uaCIKICNpbmNsdWRlICJSdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCiAjaW5jbHVkZSAiVGV4dFV0
aWwuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC03OSw2ICs4MCwz
NyBAQCB2b2lkIExpbmVCdWlsZGVyOjpjbG9zZSgpCiAjZW5kaWYKICAgICByZW1vdmVUcmFpbGlu
Z1RyaW1tYWJsZUNvbnRlbnQoKTsKICAgICB2aXN1YWxseUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93
Q29udGVudCgpOworCisgICAgYXV0byBjb21wdXRlRXhwYW5zaW9uRm9yUnVuc0lmTmVlZGVkID0g
WyZdIHsKKyAgICAgICAgaWYgKGZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgpLnN0eWxlKCkudGV4
dEFsaWduKCkgIT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSAwOworICAgICAgICBS
dW4qIGxhc3RSdW5XaXRoQ29udGVudCA9IG51bGxwdHI7CisgICAgICAgIC8vIENvbGxlY3QgYW5k
IGRpc3RyaWJ1dGUgdGhlIGV4cGFuc2lvbiBvcHBvcnR1bml0aWVzLgorICAgICAgICBmb3IgKGF1
dG8mIHJ1biA6IG1fcnVucykgeworICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3Vu
dCArPSBydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpOworICAgICAgICAgICAgaWYgKHJ1
bi5pc1RleHQoKSB8fCBydW4uaXNCb3goKSkKKyAgICAgICAgICAgICAgICBsYXN0UnVuV2l0aENv
bnRlbnQgPSAmcnVuOworICAgICAgICB9CisgICAgICAgIC8vIE5lZWQgdG8gZml4IHVwIHRoZSBs
YXN0IHJ1bidzIHRyYWlsaW5nIGV4cGFuc2lvbi4KKyAgICAgICAgaWYgKGxhc3RSdW5XaXRoQ29u
dGVudCAmJiBsYXN0UnVuV2l0aENvbnRlbnQtPmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpIHsK
KyAgICAgICAgICAgIC8vIFR1cm4gb2ZmIHRoZSB0cmFpbGluZyBiaXRzIGZpcnN0IGFuZCBhZGQg
dGhlIGZvcmJpZCB0cmFpbGluZyBleHBhbnNpb24uCisgICAgICAgICAgICBhdXRvIGxlYWRpbmdF
eHBhbnNpb24gPSBsYXN0UnVuV2l0aENvbnRlbnQtPmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBMZWZ0
RXhwYW5zaW9uTWFzazsKKyAgICAgICAgICAgIGxhc3RSdW5XaXRoQ29udGVudC0+c2V0RXhwYW5z
aW9uQmVoYXZpb3IobGVhZGluZ0V4cGFuc2lvbiB8IEZvcmJpZFJpZ2h0RXhwYW5zaW9uKTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBBbnl0aGluZyB0byBkaXN0cmlidXRlPworICAgICAgICBpZiAo
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCAmJiBhdmFpbGFibGVXaWR0aCgpKSB7CisgICAgICAg
ICAgICAvLyBEaXN0cmlidXRlIHRoZSBleHRyYSBzcGFjZS4KKyAgICAgICAgICAgIGF1dG8gZXhw
YW5zaW9uVG9EaXN0cmlidXRlID0gYXZhaWxhYmxlV2lkdGgoKSAvIGV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQ7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgeworICAgICAg
ICAgICAgICAgIC8vIEV4cGFuZCBhbmQgbW92ZXMgcnVucyBieSB0aGUgYWNjdW11bGF0ZWQgZXhw
YW5zaW9uLgorICAgICAgICAgICAgICAgIGlmIChydW4uaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHko
KSkKKyAgICAgICAgICAgICAgICAgICAgcnVuLnNldEhvcml6b250YWxFeHBhbnNpb24oZXhwYW5z
aW9uVG9EaXN0cmlidXRlICogcnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIGNvbXB1dGVFeHBhbnNpb25Gb3JSdW5z
SWZOZWVkZWQoKTsKIH0KIAogdm9pZCBMaW5lQnVpbGRlcjo6cmVtb3ZlVHJhaWxpbmdUcmltbWFi
bGVDb250ZW50KCkKQEAgLTE0Myw3ICsxNzUsNyBAQCB2b2lkIExpbmVCdWlsZGVyOjp2aXN1YWxs
eUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCgpCiAgICAgICAgIElubGluZUxheW91dFVu
aXQgdHJpbW1hYmxlV2lkdGggPSB7IH07CiAgICAgICAgIGlmIChydW4uaXNUZXh0KCkpIHsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWx3YXlzIGNvbGxhcHNlIHRoZSBydW4gYXQg
YSBnbHlwaCBib3VuZGFyeSBhcyB0aGUgc3BlYyBpbmRpY2F0ZXM6ICJjb2xsYXBzZSB0aGUgY2hh
cmFjdGVyIGFkdmFuY2Ugd2lkdGhzIG9mIGFueSB0aGF0IHdvdWxkIG90aGVyd2lzZSBvdmVyZmxv
dyIKLSAgICAgICAgICAgIC8vIGFuZCB0aGUgdHJpbW1lZCB3aWR0aCBzaG91bGQgYmUgY2FwcGVk
IGF0IHN0ZDo6bWluKHJ1bi50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpLCBvdmVyZmxvd1dpZHRo
KSBmb3IgdGV4Z3QgcnVucy4gQm90aCBGRiBhbmQgQ2hyb21lIGFncmVlLgorICAgICAgICAgICAg
Ly8gYW5kIHRoZSB0cmltbWVkIHdpZHRoIHNob3VsZCBiZSBjYXBwZWQgYXQgc3RkOjptaW4ocnVu
LnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCksIG92ZXJmbG93V2lkdGgpIGZvciB0ZXh0IHJ1bnMu
IEJvdGggRkYgYW5kIENocm9tZSBhZ3JlZS4KICAgICAgICAgICAgIHRyaW1tYWJsZVdpZHRoID0g
cnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCk7CiAgICAgICAgICAgICBydW4udmlzdWFsbHlD
b2xsYXBzZVRyYWlsaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICB9IGVsc2UgewpAQCAtMzU5LDE0
ICszOTEsMTQgQEAgdm9pZCBMaW5lQnVpbGRlcjo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50Ojph
ZGRGdWxseVRyaW1tYWJsZUNvbnRlbnQoc2l6ZV90IHJ1bkkKICAgICAvLyBBbnkgc3Vic2VxdWVu
dCB0cmltbWFibGUgd2hpdGVzcGFjZSBzaG91bGQgY29sbGFwc2UgdG8gemVybyBhZHZhbmNlZCB3
aWR0aCBhbmQgaWdub3JlZCBhdCA6OmFwcGVuZFRleHRDb250ZW50KCkuCiAgICAgQVNTRVJUKCFt
X2hhc0Z1bGx5VHJpbW1hYmxlQ29udGVudCk7CiAgICAgbV9mdWxseVRyaW1tYWJsZVdpZHRoID0g
dHJpbW1hYmxlV2lkdGg7Ci0gICAgLy8gTm90ZSB0aGF0IGp1c3QgYmVjYXN1ZSB0aGUgdHJpbW1h
YmxlIHdpZHRoIGlzIDAgKGZvbnQtc2l6ZTogMHB4KSwgaXQgZG9lcyBub3QgbWVhbiB3ZSBkb24n
dCBoYXZlIGEgdHJpbW1hYmxlIHRyYWlsaW5nIGNvbnRlbnQuCisgICAgLy8gTm90ZSB0aGF0IGp1
c3QgYmVjYXVzZSB0aGUgdHJpbW1hYmxlIHdpZHRoIGlzIDAgKGZvbnQtc2l6ZTogMHB4KSwgaXQg
ZG9lcyBub3QgbWVhbiB3ZSBkb24ndCBoYXZlIGEgdHJpbW1hYmxlIHRyYWlsaW5nIGNvbnRlbnQu
CiAgICAgbV9oYXNGdWxseVRyaW1tYWJsZUNvbnRlbnQgPSB0cnVlOwogICAgIG1fZmlyc3RSdW5J
bmRleCA9IG1fZmlyc3RSdW5JbmRleC52YWx1ZU9yKHJ1bkluZGV4KTsKIH0KIAogdm9pZCBMaW5l
QnVpbGRlcjo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50OjphZGRQYXJ0aWFsbHlUcmltbWFibGVD
b250ZW50KHNpemVfdCBydW5JbmRleCwgSW5saW5lTGF5b3V0VW5pdCB0cmltbWFibGVXaWR0aCkK
IHsKLSAgICAvLyBEbyBub3QgYWRkIHRyaW1tYWJsZSBsZXR0ZXIgc3BhY2luZyBhZnRlciBhIGZ1
bGx5IHRyaW1tYWJsZSB3aGl0ZXNhcGNlLgorICAgIC8vIERvIG5vdCBhZGQgdHJpbW1hYmxlIGxl
dHRlciBzcGFjaW5nIGFmdGVyIGEgZnVsbHkgdHJpbW1hYmxlIHdoaXRlc3BhY2UuCiAgICAgQVNT
RVJUKCFtX2ZpcnN0UnVuSW5kZXgpOwogICAgIEFTU0VSVCghbV9oYXNGdWxseVRyaW1tYWJsZUNv
bnRlbnQpOwogICAgIEFTU0VSVCghbV9wYXJ0aWFsbHlUcmltbWFibGVXaWR0aCk7CkBAIC00MTEs
MTQgKzQ0MywxNSBAQCBJbmxpbmVMYXlvdXRVbml0IExpbmVCdWlsZGVyOjpUcmltbWFibGVUcmFp
bGluZ0NvbnRlbnQ6OnJlbW92ZVBhcnRpYWxseVRyaW1tYWJsZQogTGluZUJ1aWxkZXI6OlJ1bjo6
UnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNh
bExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKQogICAgIDogbV90eXBlKGlubGlu
ZUl0ZW0udHlwZSgpKQogICAgICwgbV9sYXlvdXRCb3goJmlubGluZUl0ZW0ubGF5b3V0Qm94KCkp
Ci0gICAgLCBtX2xvZ2ljYWxSZWN0KHsgMCwgbG9naWNhbExlZnQsIGxvZ2ljYWxXaWR0aCwgMCB9
KQorICAgICwgbV9sb2dpY2FsTGVmdChsb2dpY2FsTGVmdCkKKyAgICAsIG1fbG9naWNhbFdpZHRo
KGxvZ2ljYWxXaWR0aCkKIHsKIH0KIAogTGluZUJ1aWxkZXI6OlJ1bjo6UnVuKGNvbnN0IElubGlu
ZVNvZnRMaW5lQnJlYWtJdGVtJiBzb2Z0TGluZUJyZWFrSXRlbSwgSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdCkKICAgICA6IG1fdHlwZShzb2Z0TGluZUJyZWFrSXRlbS50eXBlKCkpCiAgICAg
LCBtX2xheW91dEJveCgmc29mdExpbmVCcmVha0l0ZW0ubGF5b3V0Qm94KCkpCi0gICAgLCBtX2xv
Z2ljYWxSZWN0KHsgMCwgbG9naWNhbExlZnQsIDAsIDAgfSkKKyAgICAsIG1fbG9naWNhbExlZnQo
bG9naWNhbExlZnQpCiAgICAgLCBtX3RleHRDb250ZW50KHsgc29mdExpbmVCcmVha0l0ZW0ucG9z
aXRpb24oKSwgMSwgc29mdExpbmVCcmVha0l0ZW0uaW5saW5lVGV4dEJveCgpLmNvbnRlbnQoKSwg
ZmFsc2UgfSkKIHsKIH0KQEAgLTQyNiw3ICs0NTksOCBAQCBMaW5lQnVpbGRlcjo6UnVuOjpSdW4o
Y29uc3QgSW5saW5lU29mdExpbmVCcmVha0l0ZW0mIHNvZnRMaW5lQnJlYWtJdGVtLCBJbmxpbmVM
YQogTGluZUJ1aWxkZXI6OlJ1bjo6UnVuKGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxpbmVUZXh0
SXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgSW5saW5lTGF5b3V0VW5pdCBsb2dp
Y2FsV2lkdGgsIGJvb2wgbmVlZHNIeXBoZW4pCiAgICAgOiBtX3R5cGUoSW5saW5lSXRlbTo6VHlw
ZTo6VGV4dCkKICAgICAsIG1fbGF5b3V0Qm94KCZpbmxpbmVUZXh0SXRlbS5sYXlvdXRCb3goKSkK
LSAgICAsIG1fbG9naWNhbFJlY3QoeyAwLCBsb2dpY2FsTGVmdCwgbG9naWNhbFdpZHRoLCAwIH0p
CisgICAgLCBtX2xvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KQorICAgICwgbV9sb2dpY2FsV2lkdGgo
bG9naWNhbFdpZHRoKQogICAgICwgbV90cmFpbGluZ1doaXRlc3BhY2VUeXBlKHRyYWlsaW5nV2hp
dGVzcGFjZVR5cGUoaW5saW5lVGV4dEl0ZW0pKQogICAgICwgbV90ZXh0Q29udGVudCh7IGlubGlu
ZVRleHRJdGVtLnN0YXJ0KCksIG1fdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZSA9PSBUcmFpbGluZ1do
aXRlc3BhY2U6OkNvbGxhcHNlZCA/IDEgOiBpbmxpbmVUZXh0SXRlbS5sZW5ndGgoKSwgaW5saW5l
VGV4dEl0ZW0uaW5saW5lVGV4dEJveCgpLmNvbnRlbnQoKSwgbmVlZHNIeXBoZW4gfSkKIHsKQEAg
LTQ0NCw3ICs0NzgsNyBAQCB2b2lkIExpbmVCdWlsZGVyOjpSdW46OmV4cGFuZChjb25zdCBJbmxp
bmVUZXh0SXRlbSYgaW5saW5lVGV4dEl0ZW0sIElubGluZUxheW91dAogICAgIEFTU0VSVChpc1Rl
eHQoKSAmJiBpbmxpbmVUZXh0SXRlbS5pc1RleHQoKSk7CiAgICAgQVNTRVJUKG1fbGF5b3V0Qm94
ID09ICZpbmxpbmVUZXh0SXRlbS5sYXlvdXRCb3goKSk7CiAKLSAgICBtX2xvZ2ljYWxSZWN0LmV4
cGFuZEhvcml6b250YWxseShsb2dpY2FsV2lkdGgpOworICAgIG1fbG9naWNhbFdpZHRoICs9IGxv
Z2ljYWxXaWR0aDsKICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgPSB0cmFpbGluZ1doaXRl
c3BhY2VUeXBlKGlubGluZVRleHRJdGVtKTsKIAogICAgIGlmIChtX3RyYWlsaW5nV2hpdGVzcGFj
ZVR5cGUgPT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpOb25lKSB7CkBAIC00ODUsNyArNTE5LDcgQEAg
dm9pZCBMaW5lQnVpbGRlcjo6UnVuOjpyZW1vdmVUcmFpbGluZ0xldHRlclNwYWNpbmcoKQogdm9p
ZCBMaW5lQnVpbGRlcjo6UnVuOjpyZW1vdmVUcmFpbGluZ1doaXRlc3BhY2UoKQogewogICAgIC8v
IEFjY29yZGluZyB0byBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRleHQtMy8jd2hpdGUtc3Bh
Y2UtcHJvcGVydHkgbWF0cml4Ci0gICAgLy8gVHJpbW1hYmxlIHdoaXRlc3BhY2UgaXMgYWx3YXlz
IGNvbGxhcHNhYmxlIHNvIHRoZSBsZW5ndGggb2YgdGhlIHRyYWlsaW5nIHRyaW1tYWJsZSB3aGl0
ZXNwYWNlIGlzIGFsd2F5cyAxIChvciBub24tZXhpc3RlbnQpLgorICAgIC8vIFRyaW1tYWJsZSB3
aGl0ZXNwYWNlIGlzIGFsd2F5cyBjb2xsYXBzaWJsZSBzbyB0aGUgbGVuZ3RoIG9mIHRoZSB0cmFp
bGluZyB0cmltbWFibGUgd2hpdGVzcGFjZSBpcyBhbHdheXMgMSAob3Igbm9uLWV4aXN0ZW50KS4K
ICAgICBBU1NFUlQobV90ZXh0Q29udGVudC0+bGVuZ3RoKCkpOwogICAgIGNvbnN0ZXhwciBzaXpl
X3QgdHJhaWxpbmdUcmltbWFibGVDb250ZW50TGVuZ3RoID0gMTsKICAgICBtX3RleHRDb250ZW50
LT5zaHJpbmsodHJhaWxpbmdUcmltbWFibGVDb250ZW50TGVuZ3RoKTsKQEAgLTUxOCwxMSArNTUy
LDEwIEBAIEV4cGFuc2lvbkJlaGF2aW9yIExpbmVCdWlsZGVyOjpSdW46OmV4cGFuc2lvbkJlaGF2
aW9yKCkgY29uc3QKICAgICByZXR1cm4gbV9leHBhbnNpb24uYmVoYXZpb3I7CiB9CiAKLXZvaWQg
TGluZUJ1aWxkZXI6OlJ1bjo6c2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9uKElubGluZUxh
eW91dFVuaXQgbG9naWNhbEV4cGFuc2lvbikKK3ZvaWQgTGluZUJ1aWxkZXI6OlJ1bjo6c2V0SG9y
aXpvbnRhbEV4cGFuc2lvbihJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxFeHBhbnNpb24pCiB7CiAg
ICAgQVNTRVJUKGlzVGV4dCgpKTsKICAgICBBU1NFUlQoaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHko
KSk7Ci0gICAgbV9sb2dpY2FsUmVjdC5leHBhbmRIb3Jpem9udGFsbHkobG9naWNhbEV4cGFuc2lv
bik7CiAgICAgbV9leHBhbnNpb24uaG9yaXpvbnRhbEV4cGFuc2lvbiA9IGxvZ2ljYWxFeHBhbnNp
b247CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCmluZGV4IDcyNmE2NTczY2RhZDU1Mjk1YzAyMThj
NTI3MGY1OWRkZjExMjgzMWMuLmE1NjcyNmE4MmQ0Yjc1YThmOWM2Y2MyMmI0NDRhNjkxY2Y5YTM0
N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUxpbmVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaApAQCAtNzQsMzggKzc0LDMxIEBAIHB1YmxpYzoKIAog
ICAgICAgICBjb25zdCBCb3gmIGxheW91dEJveCgpIGNvbnN0IHsgcmV0dXJuICptX2xheW91dEJv
eDsgfQogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X2xheW91dEJveC0+c3R5bGUoKTsgfQotICAgICAgICBjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0
JiBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3Q7IH0KLSAgICAgICAg
RGlzcGxheTo6UnVuOjpFeHBhbnNpb24gZXhwYW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9leHBh
bnNpb247IH0KICAgICAgICAgY29uc3QgT3B0aW9uYWw8RGlzcGxheTo6UnVuOjpUZXh0Q29udGVu
dD4mIHRleHRDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q29udGVudDsgfQogCi0gICAg
ICAgIFJ1bihSdW4mJikgPSBkZWZhdWx0OwotICAgICAgICBSdW4mIG9wZXJhdG9yPShSdW4mJiBv
dGhlcikgPSBkZWZhdWx0OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFdpZHRoOyB9CisgICAgICAgIElubGluZUxheW91dFVu
aXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxMZWZ0OyB9CisKKyAgICAg
ICAgY29uc3QgRGlzcGxheTo6UnVuOjpFeHBhbnNpb24mIGV4cGFuc2lvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZXhwYW5zaW9uOyB9CisgICAgICAgIGJvb2wgaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHko
KSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7IH0KKyAgICAgICAg
RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdDsKKyAgICAgICAgdW5z
aWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudDsgfQorCisgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdXaGl0ZXNw
YWNlKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1doaXRlc3BhY2VUeXBlICE9IFRyYWlsaW5n
V2hpdGVzcGFjZTo6Tm9uZTsgfQorICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHRyYWlsaW5nV2hp
dGVzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsg
fQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExpbmVCdWlsZGVyOwotICAg
ICAgICBmcmllbmQgY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyOwogCiAgICAgICAgIFJ1bihjb25z
dCBJbmxpbmVUZXh0SXRlbSYsIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxh
eW91dFVuaXQgbG9naWNhbFdpZHRoLCBib29sIG5lZWRzSHlwZW4pOwogICAgICAgICBSdW4oY29u
c3QgSW5saW5lU29mdExpbmVCcmVha0l0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0
KTsKICAgICAgICAgUnVuKGNvbnN0IElubGluZUl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2lj
YWxMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7CiAKICAgICAgICAgdm9pZCBl
eHBhbmQoY29uc3QgSW5saW5lVGV4dEl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0
aCk7Ci0KLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX2xvZ2ljYWxSZWN0LndpZHRoKCk7IH0KLQotICAgICAgICB2b2lkIG1vdmVIb3Jpem9u
dGFsbHkoSW5saW5lTGF5b3V0VW5pdCBvZmZzZXQpIHsgbV9sb2dpY2FsUmVjdC5tb3ZlSG9yaXpv
bnRhbGx5KG9mZnNldCk7IH0KLSAgICAgICAgdm9pZCBzaHJpbmtIb3Jpem9udGFsbHkoSW5saW5l
TGF5b3V0VW5pdCB3aWR0aCkgeyBtX2xvZ2ljYWxSZWN0LmV4cGFuZEhvcml6b250YWxseSgtd2lk
dGgpOyB9Ci0KLSAgICAgICAgdm9pZCBhZGp1c3RMb2dpY2FsVG9wKElubGluZUxheW91dFVuaXQg
bG9naWNhbFRvcCkgeyBtX2xvZ2ljYWxSZWN0LnNldFRvcChsb2dpY2FsVG9wKTsgfQotICAgICAg
ICB2b2lkIG1vdmVWZXJ0aWNhbGx5KElubGluZUxheW91dFVuaXQgb2Zmc2V0KSB7IG1fbG9naWNh
bFJlY3QubW92ZVZlcnRpY2FsbHkob2Zmc2V0KTsgfQotICAgICAgICB2b2lkIHNldExvZ2ljYWxI
ZWlnaHQoSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KSB7IG1fbG9naWNhbFJlY3Quc2V0
SGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOyB9Ci0KLSAgICAgICAgYm9vbCBoYXNFeHBhbnNpb25PcHBv
cnR1bml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsgfQot
ICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0OwotICAg
ICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50OyB9Ci0gICAgICAgIHZvaWQgc2V0Q29tcHV0ZWRI
b3Jpem9udGFsRXhwYW5zaW9uKElubGluZUxheW91dFVuaXQgbG9naWNhbEV4cGFuc2lvbik7Cisg
ICAgICAgIHZvaWQgbW92ZUhvcml6b250YWxseShJbmxpbmVMYXlvdXRVbml0IG9mZnNldCkgeyBt
X2xvZ2ljYWxMZWZ0ICs9IG9mZnNldDsgfQorICAgICAgICB2b2lkIHNocmlua0hvcml6b250YWxs
eShJbmxpbmVMYXlvdXRVbml0IHdpZHRoKSB7IG1fbG9naWNhbFdpZHRoIC09IHdpZHRoOyB9CiAg
ICAgICAgIHZvaWQgc2V0RXhwYW5zaW9uQmVoYXZpb3IoRXhwYW5zaW9uQmVoYXZpb3IpOwotCisg
ICAgICAgIHZvaWQgc2V0SG9yaXpvbnRhbEV4cGFuc2lvbihJbmxpbmVMYXlvdXRVbml0IGxvZ2lj
YWxFeHBhbnNpb24pOwogICAgICAgICB2b2lkIHNldE5lZWRzSHlwaGVuKCkgeyBtX3RleHRDb250
ZW50LT5zZXROZWVkc0h5cGhlbigpOyB9CiAKICAgICAgICAgZW51bSBjbGFzcyBUcmFpbGluZ1do
aXRlc3BhY2UgewpAQCAtMTE0LDEwICsxMDcsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBDb2xs
YXBzaWJsZSwKICAgICAgICAgICAgIENvbGxhcHNlZAogICAgICAgICB9OwotICAgICAgICBib29s
IGhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNw
YWNlVHlwZSAhPSBUcmFpbGluZ1doaXRlc3BhY2U6Ok5vbmU7IH0KICAgICAgICAgYm9vbCBoYXND
b2xsYXBzaWJsZVRyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdX
aGl0ZXNwYWNlVHlwZSA9PSBUcmFpbGluZ1doaXRlc3BhY2U6OkNvbGxhcHNpYmxlIHx8IGhhc0Nv
bGxhcHNlZFRyYWlsaW5nV2hpdGVzcGFjZSgpOyB9CiAgICAgICAgIGJvb2wgaGFzQ29sbGFwc2Vk
VHJhaWxpbmdXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1doaXRlc3BhY2VU
eXBlID09IFRyYWlsaW5nV2hpdGVzcGFjZTo6Q29sbGFwc2VkOyB9Ci0gICAgICAgIElubGluZUxh
eW91dFVuaXQgdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3RyYWls
aW5nV2hpdGVzcGFjZVdpZHRoOyB9CiAgICAgICAgIFRyYWlsaW5nV2hpdGVzcGFjZSB0cmFpbGlu
Z1doaXRlc3BhY2VUeXBlKGNvbnN0IElubGluZVRleHRJdGVtJikgY29uc3Q7CiAgICAgICAgIHZv
aWQgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIHZvaWQgdmlzdWFsbHlDb2xs
YXBzZVRyYWlsaW5nV2hpdGVzcGFjZSgpOwpAQCAtMTI4LDcgKzExOSw4IEBAIHB1YmxpYzoKIAog
ICAgICAgICBJbmxpbmVJdGVtOjpUeXBlIG1fdHlwZSB7IElubGluZUl0ZW06OlR5cGU6OlRleHQg
fTsKICAgICAgICAgY29uc3QgQm94KiBtX2xheW91dEJveCB7IG51bGxwdHIgfTsKLSAgICAgICAg
RGlzcGxheTo6SW5saW5lUmVjdCBtX2xvZ2ljYWxSZWN0OworICAgICAgICBJbmxpbmVMYXlvdXRV
bml0IG1fbG9naWNhbExlZnQgeyAwIH07CisgICAgICAgIElubGluZUxheW91dFVuaXQgbV9sb2dp
Y2FsV2lkdGggeyAwIH07CiAgICAgICAgIFRyYWlsaW5nV2hpdGVzcGFjZSBtX3RyYWlsaW5nV2hp
dGVzcGFjZVR5cGUgeyBUcmFpbGluZ1doaXRlc3BhY2U6Ok5vbmUgfTsKICAgICAgICAgSW5saW5l
TGF5b3V0VW5pdCBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoIHsgMCB9OwogICAgICAgICBPcHRp
b25hbDxEaXNwbGF5OjpSdW46OlRleHRDb250ZW50PiBtX3RleHRDb250ZW50OwpAQCAtMTM3LDcg
KzEyOSw2IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHVzaW5nIFJ1bkxpc3QgPSBWZWN0b3I8UnVu
LCAxMD47CiAgICAgY29uc3QgUnVuTGlzdCYgcnVucygpIGNvbnN0IHsgcmV0dXJuIG1fcnVuczsg
fQotICAgIFJ1bkxpc3QmIHJ1bnMoKSB7IHJldHVybiBtX3J1bnM7IH0KIAogcHJpdmF0ZToKICAg
ICBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBt
X2xpbmVMb2dpY2FsTGVmdCArIG1fY29udGVudExvZ2ljYWxXaWR0aDsgfQo=
</data>
<flag name="review"
          id="422753"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407402</attachid>
            <date>2020-08-27 08:45:21 -0700</date>
            <delta_ts>2020-08-27 08:54:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215068-20200827084520.patch</filename>
            <type>text/plain</type>
            <size>53548</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc3ZmU0NzA0OTg3NWJk
M2YxNjI4YjVhMjI1NTRlMThhNzM3OWNkZS4uMjhmMWVlNTIzMDNjYmVhNWM4ZjA2NmQ1MjZlNTkw
ZTA5ZDk1MzZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAyMC0wOC0yNiAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdW0lGQ10gTGluZUJ1
aWxkZXI6UnVuIHNob3VsZCBub3QgaGF2ZSB2ZXJ0aWNhbCBnZW9tZXRyeQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MDY4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgU2luY2UgTGluZUJ1aWxkZXIgb25s
eSB0YWtlcyBjYXJlIG9mIHRoZSBob3Jpem9udGFsIGFzY3BlY3Qgb2YgYSBydW4sIExpbmVCdWls
ZGVyOjpSdW4gc2hvdWxkIG9ubHkgaGF2ZSBsb2dpY2FsIGxlZnQgYW5kIHdpZHRoIGdlb21ldHJ5
LgorICAgICAgICBUaGUgdmVydGljYWwgZ2VvbWV0cnkgaXMgY29tcHV0ZWQgYXMgcGFydCBvZiB0
aGUgY29udGVudCBhbGlnbm1lbnQgcGhhc2UgaW4gTGluZUNvbnRlbnRBbGlnbmVyIChhbG9uZyB3
aXRoIHRoZSBmaW5hbCBob3Jpem9udGFsIHBvc2l0aW9uCisgICAgICAgIGFkanVzdGVkIHdpdGgg
dGhlIGFsaWdubWVudCkuCisgICAgICAgIFRoaXMgaXMgc3RpbGwgYSB0cmFuc2l0aW9uYWwgc3Rh
dGUgKHNlZSBJbmxpbmVSdW5SZWN0TGlzdCBtX3J1blJlY3RMaXN0KSBhbmQgYWxsIHRoZSBsaW5l
IGJveCByZWxhdGVkIGNvZGUgd2lsbCBnZXQgbW92ZWQgdG8gdGhlIExpbmVCb3ggY2xhc3MuCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBlbmFibGVzIHVzIHRvIGtlZXAgTGluZUJ1aWxkZXI6OlJ1
biBjb25zdC4KKworICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1h
dHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRB
bGlnbmVyOjppbmxpbmVSZWN0TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVDb250ZW50QWxpZ25lcjo6TGluZUNvbnRlbnRBbGlnbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphbGlnbkhvcml6b250YWxseSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25WZXJ0aWNhbGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RC
YXNlbGluZUFuZExpbmVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpqdXN0aWZ5UnVucyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6cnVu
Q29udGVudEhlaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVCdWlsZGVyOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCdWlsZGVyOjp2aXN1YWxseUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpUcmltbWFibGVUcmFpbGluZ0NvbnRl
bnQ6OmFkZEZ1bGx5VHJpbW1hYmxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVCdWlsZGVyOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OmFkZFBhcnRpYWxseVRyaW1t
YWJsZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVu
OjpSdW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpleHBh
bmQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpyZW1vdmVU
cmFpbGluZ1doaXRlc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRl
cjo6UnVuOjpzZXRIb3Jpem9udGFsRXhwYW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6bV90ZXh0Q29udGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCdWlsZGVyOjpSdW46OnNldENvbXB1dGVkSG9yaXpvbnRhbEV4cGFuc2lvbik6IERlbGV0ZWQu
CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6c3R5bGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpsb2dpY2FsV2lk
dGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjps
b2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpSdW46OmV4cGFuc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpSdW46Omhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3Vu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46Omhh
c1RyYWlsaW5nV2hpdGVzcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCdWlsZGVyOjpSdW46OnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6bW92ZUhvcml6b250YWxseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OnNocmlua0hvcml6b250
YWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46Omhhc0Nv
bGxhcHNlZFRyYWlsaW5nV2hpdGVzcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCdWlsZGVyOjpydW5zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlJ1bjo6bG9naWNhbFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjphZGp1c3RMb2dpY2FsVG9wKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6bW92ZVZl
cnRpY2FsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRl
cjo6UnVuOjpzZXRMb2dpY2FsSGVpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJ1aWxkZXI6OnJ1bnMpOiBEZWxldGVkLgorCisyMDIwLTA4LTI2ICBaYWxhbiBC
dWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIExpbmVC
b3ggb3V0IG9mIExpbmVCdWlsZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTUwNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBTaW5jZSBub25lIG9mIHRoZSBMaW5lQm94IHJlbGF0ZWQgb3BlcmF0aW9u
cyAoY29udGVudCBhbGlnbm1lbnQsIGxpbmUgc2l6aW5nIGV0YykgaXMgZG9uZSBkdXJpbmcgbGlu
ZSBidWlsZGluZywKKyAgICAgICAgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gY29uc3RydWN0IGEg
TGluZUJveCB1bnRpbCBhZnRlciB3ZSBmaW5pc2hlZCBwbGFjaW5nIGFsbCB0aGUgcnVucyBvbiB0
aGUgY3VycmVudCBsaW5lLgorICAgICAgICBJdCBlbmFibGVzIHVzIHRvIGRlY291cGxlIHRoZSBM
aW5lQnVpbGRlciBhbmQgdGhlIExpbmVCb3guCisgICAgICAgIExldCB0aGUgTGluZUJ1aWxkZXIg
cGxhY2UgdGhlIHJ1bnMgYW5kIGNvbXB1dGUgaG9yaXpvbnRhbCBnZW9tZXRyeSwgd2hpbGUgTGlu
ZUJveCB0YWtlcyBjYXJlIG9mIHRoZSBmaW5hbCBhbGlnbm1lbnQgb2YgdGhvc2UgcnVucy4gCisK
KyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6YWRq
dXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZvckNv
bnN0cmFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29uc3RyYWludHNGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAg
ICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6
CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHRRdWlya3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6UXVpcmtzOjppbml0aWFsTGluZUhlaWdodCBjb25zdCk6CisgICAgICAgICogbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQm94OjpoYWxmTGVhZGluZ01ldHJpY3MpOgorICAgICAgICAqIGxheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZUJ1aWxkZXI6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6Y2xlYXJDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6
OnJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCdWlsZGVyOjp2aXN1YWxseUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjptb3ZlTG9naWNhbExlZnQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6YXBwZW5kV2l0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjphcHBlbmROb25CcmVha2FibGVT
cGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjphcHBlbmRJbmxp
bmVDb250YWluZXJFbmQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6
YXBwZW5kVGV4dENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRl
cjo6YXBwZW5kTm9uUmVwbGFjZWRJbmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQnVpbGRlcjo6aXNSdW5WaXN1YWxseU5vbkVtcHR5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmluaXRpYWxpemUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6aXNWaXN1YWxseU5vbkVtcHR5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmhhbGZM
ZWFkaW5nTWV0cmljcyk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OnNldEhhc0ludHJ1c2l2ZUZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6Omhhc0ludHJ1c2l2ZUZsb2F0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZUJ1aWxkZXI6OmlzVmlzdWFsbHlFbXB0eSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpjb250ZW50TG9naWNhbFdpZHRoIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmNvbnRlbnRMb2dpY2FsUmln
aHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6bGluZUJv
eCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpsaW5lQm94KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9M
aW5lTGF5b3V0Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlv
dXRDb250ZXh0OjpsYXlvdXRJbmxpbmVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUxheW91dENvbnRleHQ6OmNvbW1pdEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVMYXlvdXRDb250ZXh0OjpyZWJ1aWxkTGluZSk6CisKIDIwMjAtMDgtMjcgIEFu
dHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIEFuaW1hdGlvbiBhcmUg
aW52YWxpZGF0aW5nIHRvbyBtdWNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAK
aW5kZXggMDM2ZWM1NjUyNWY0NWRkMjgwNjg5MGUzMTkyYjc1YjQ5NmU2ZDg3MC4uMmM3MDU0NWY2
NDhhOGU2NzA3OTRmZjlhNmUyN2ZhODcwNzY0NjA4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRp
bmdDb250ZXh0LmNwcApAQCAtOTksMzMgKzk5LDU0IEBAIHZvaWQgSGFuZ2luZ0NvbnRlbnQ6OnJl
c2V0KCkKIAogY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyIHsKIHB1YmxpYzoKLSAgICBMaW5lQ29u
dGVudEFsaWduZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBMaW5lQm94JiwgTGlu
ZUJ1aWxkZXI6OlJ1bkxpc3QmLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKKyAg
ICBMaW5lQ29udGVudEFsaWduZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBMaW5l
Qm94JiwgY29uc3QgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmLCBJbmxpbmVMYXlvdXRVbml0IGF2YWls
YWJsZVdpZHRoKTsKIAogICAgIGVudW0gY2xhc3MgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
IHsgTm8sIFllcyB9OwogICAgIHZvaWQgYWxpZ25Ib3Jpem9udGFsbHkoVGV4dEFsaWduTW9kZSwg
SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKICAgICB2b2lkIGFsaWduVmVydGljYWxseSgp
OwogICAgIHZvaWQgYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCk7CiAKKyAgICB1c2luZyBJ
bmxpbmVSdW5SZWN0TGlzdCA9IFZlY3RvcjxEaXNwbGF5OjpJbmxpbmVSZWN0LCAxMD47CisgICAg
Y29uc3QgSW5saW5lUnVuUmVjdExpc3QmIGlubGluZVJlY3RMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9ydW5SZWN0TGlzdDsgfQorCiBwcml2YXRlOgotICAgIHZvaWQganVzdGlmeVJ1bnMoSW5saW5l
TGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCk7CiAgICAgSGFuZ2luZ0NvbnRlbnQgY29sbGVjdEhh
bmdpbmdDb250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3Q7Ci0gICAgSW5s
aW5lTGF5b3V0VW5pdCBydW5Db250ZW50SGVpZ2h0KGNvbnN0IExpbmVCdWlsZGVyOjpSdW4mKSBj
b25zdDsKIAogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KICAgICBM
YXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4
dCgpLmxheW91dFN0YXRlKCk7IH0KIAogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0
JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OwogICAgIExpbmVCb3gmIG1fbGluZUJveDsKLSAg
ICBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgbV9ydW5zOworICAgIGNvbnN0IExpbmVCdWlsZGVyOjpS
dW5MaXN0JiBtX3J1bnM7CisgICAgSW5saW5lUnVuUmVjdExpc3QgbV9ydW5SZWN0TGlzdDsKICAg
ICBJbmxpbmVMYXlvdXRVbml0IG1fYXZhaWxhYmxlV2lkdGg7CiB9OwogCi1MaW5lQ29udGVudEFs
aWduZXI6OkxpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYg
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIExpbmVCb3gmIGxpbmVCb3gsIExpbmVCdWlsZGVyOjpS
dW5MaXN0JiBydW5zLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQorTGluZUNvbnRl
bnRBbGlnbmVyOjpMaW5lQ29udGVudEFsaWduZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBMaW5lQm94JiBsaW5lQm94LCBjb25zdCBMaW5l
QnVpbGRlcjo6UnVuTGlzdCYgcnVucywgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkK
ICAgICA6IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQp
CiAgICAgLCBtX2xpbmVCb3gobGluZUJveCkKICAgICAsIG1fcnVucyhydW5zKQogICAgICwgbV9h
dmFpbGFibGVXaWR0aChhdmFpbGFibGVXaWR0aCkKIHsKKyAgICBmb3IgKGF1dG8mIHJ1biA6IG1f
cnVucykgeworICAgICAgICBhdXRvIHJ1bkhlaWdodCA9IFsmXSgpIC0+IElubGluZUxheW91dFVu
aXQgeworICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBydW4uc3R5bGUoKS5mb250TWV0
cmljcygpOworICAgICAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWso
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7CisKKyAgICAg
ICAgICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKKworICAgICAg
ICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOworICAgICAgICAgICAgYXV0
byYgYm94R2VvbWV0cnkgPSBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChs
YXlvdXRCb3gpOworICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc1JlcGxhY2VkQm94KCkgfHwg
bGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGJveEdlb21ldHJ5LmNvbnRlbnRCb3hIZWlnaHQoKTsKKworICAgICAgICAgICAgLy8gTm9uLXJl
cGxhY2VkIGlubGluZSBib3ggKGUuZy4gaW5saW5lLWJsb2NrKS4gSXQgbG9va3MgYSBiaXQgbWlz
bGVhZGluZyBidXQgdGhlaXIgbWFyZ2luIGJveCBpcyBjb25zaWRlcmVkIHRoZSBjb250ZW50IGhl
aWdodCBoZXJlLgorICAgICAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdo
dCgpOworICAgICAgICB9OworICAgICAgICBtX3J1blJlY3RMaXN0LmFwcGVuZCh7IDAsIHJ1bi5s
b2dpY2FsTGVmdCgpLCBydW4ubG9naWNhbFdpZHRoKCksIHJ1bkhlaWdodCgpIH0pOworICAgIH0K
IH0KIAogdm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFsaWduSG9yaXpvbnRhbGx5KFRleHRBbGln
bk1vZGUgaG9yaXpvbnRhbEFsaWdubWVudCwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlz
TGFzdExpbmUpCkBAIC0xMzYsNyArMTU3LDE0IEBAIHZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjph
bGlnbkhvcml6b250YWxseShUZXh0QWxpZ25Nb2RlIGhvcml6b250YWxBbGlnbm1lbnQsIElzCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChob3Jpem9udGFsQWxpZ25tZW50ID09IFRleHRBbGln
bk1vZGU6Okp1c3RpZnkpIHsKLSAgICAgICAganVzdGlmeVJ1bnMoYXZhaWxhYmxlV2lkdGgpOwor
ICAgICAgICBhdXRvIGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gSW5saW5lTGF5b3V0VW5pdCB7IH07
CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX3J1bnMuc2l6ZSgpOyAr
K2luZGV4KSB7CisgICAgICAgICAgICBtX3J1blJlY3RMaXN0W2luZGV4XS5tb3ZlSG9yaXpvbnRh
bGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKKworICAgICAgICAgICAgYXV0byBob3Jpem9udGFs
RXhwYW5zaW9uID0gbV9ydW5zW2luZGV4XS5leHBhbnNpb24oKS5ob3Jpem9udGFsRXhwYW5zaW9u
OworICAgICAgICAgICAgbV9ydW5SZWN0TGlzdFtpbmRleF0uZXhwYW5kSG9yaXpvbnRhbGx5KGhv
cml6b250YWxFeHBhbnNpb24pOworICAgICAgICAgICAgYWNjdW11bGF0ZWRFeHBhbnNpb24gKz0g
aG9yaXpvbnRhbEV4cGFuc2lvbjsKKyAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0xNjEsMjIgKzE4OSwxOCBAQCB2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25Ib3Jp
em9udGFsbHkoVGV4dEFsaWduTW9kZSBob3Jpem9udGFsQWxpZ25tZW50LCBJcwogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH07CiAKLSAgICBhdXRvIGFkanVzdG1lbnQgPSBhZGp1c3RtZW50Rm9y
QWxpZ25tZW50KGF2YWlsYWJsZVdpZHRoKTsKLSAgICBpZiAoIWFkanVzdG1lbnQpCi0gICAgICAg
IHJldHVybjsKLSAgICAvLyBIb3Jpem9udGFsIGFsaWdubWVudCBtZWFucyB0aGF0IHdlIG5vdCBv
bmx5IGFkanVzdCB0aGUgcnVucyBidXQgYWxzbyBtYWtlIHN1cmUKLSAgICAvLyB0aGF0IHRoZSBs
aW5lIGJveCBpcyBhbGlnbmVkIGFzIHdlbGwKLSAgICAvLyBlLmcuIDxkaXYgc3R5bGU9InRleHQt
YWxpZ246IGNlbnRlcjsgd2lkdGg6IDEwMHB4OyI+Y2VudGVyZWQgdGV4dDwvZGl2PiA6IHRoZSBs
aW5lIGJveCB3aWxsIGFsc28gYmUgY2VudGVyZWQKLSAgICAvLyBhcyBvcHBvc2VkIHRvIHN0YXJ0
IGF0IDBweCBhbGwgdGhlIHdheSB0byBbY2VudGVyZWQgdGV4dF0gcnVuJ3MgcmlnaHQgZWRnZS4K
LSAgICBtX2xpbmVCb3gubW92ZUhvcml6b250YWxseSgqYWRqdXN0bWVudCk7Ci0gICAgZm9yIChh
dXRvJiBydW4gOiBtX3J1bnMpCi0gICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3Rt
ZW50KTsKKyAgICBpZiAoYXV0byBhZGp1c3RtZW50ID0gYWRqdXN0bWVudEZvckFsaWdubWVudChh
dmFpbGFibGVXaWR0aCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBydW5SZWN0IDogbV9ydW5SZWN0
TGlzdCkKKyAgICAgICAgICAgIHJ1blJlY3QubW92ZUhvcml6b250YWxseSgqYWRqdXN0bWVudCk7
CisgICAgfQogfQogCiB2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25WZXJ0aWNhbGx5KCkK
IHsKICAgICBhdXRvIHNjcm9sbGFibGVPdmVyZmxvd1JlY3QgPSBtX2xpbmVCb3gubG9naWNhbFJl
Y3QoKTsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgeworICAgIGZvciAoc2l6ZV90IGlu
ZGV4ID0gMDsgaW5kZXggPCBtX3J1bnMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGF1dG8m
IHJ1biA9IG1fcnVuc1tpbmRleF07CisgICAgICAgIGF1dG8mIHJ1blJlY3QgPSBtX3J1blJlY3RM
aXN0W2luZGV4XTsKICAgICAgICAgYXV0byBsb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7
IH07CiAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKICAgICAgICAg
YXV0byB2ZXJ0aWNhbEFsaWduID0gbGF5b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpOwpA
QCAtMjEwLDY2ICsyMzQsMjkgQEAgdm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFsaWduVmVydGlj
YWxseSgpCiAgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRC
YXNlbGluZSgpIC0gYmFzZWxpbmVGcm9tTWFyZ2luQm94OwogICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCku
Z2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0g
bV9saW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgLSAoYm94R2VvbWV0cnkudmVydGljYWxCb3Jk
ZXIoKSArIGJveEdlb21ldHJ5LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMF9sdSkgKyBydW4u
bG9naWNhbFJlY3QoKS5oZWlnaHQoKSArIGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCkpOworICAg
ICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAt
IChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnkudmVydGljYWxQYWRk
aW5nKCkudmFsdWVPcigwX2x1KSArIHJ1blJlY3QuaGVpZ2h0KCkgKyBib3hHZW9tZXRyeS5tYXJn
aW5BZnRlcigpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFZlcnRpY2FsQWxpZ246OlRvcDoKICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSAwX2x1Owog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOgot
ICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5sb2dpY2FsQm90dG9tKCkgLSBydW4u
bG9naWNhbFJlY3QoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVC
b3gubG9naWNhbEJvdHRvbSgpIC0gcnVuUmVjdC5oZWlnaHQoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9Z
RVQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHJ1bi5hZGp1c3RM
b2dpY2FsVG9wKGxvZ2ljYWxUb3ApOworICAgICAgICBydW5SZWN0LnNldFRvcChsb2dpY2FsVG9w
KTsKICAgICAgICAgLy8gQWRqdXN0IHNjcm9sbGFibGUgb3ZlcmZsb3cgaWYgdGhlIHJ1biBvdmVy
Zmxvd3MgdGhlIGxpbmUuCi0gICAgICAgIHNjcm9sbGFibGVPdmVyZmxvd1JlY3QuZXhwYW5kVmVy
dGljYWxseVRvQ29udGFpbihydW4ubG9naWNhbFJlY3QoKSk7CisgICAgICAgIHNjcm9sbGFibGVP
dmVyZmxvd1JlY3QuZXhwYW5kVmVydGljYWxseVRvQ29udGFpbihydW5SZWN0KTsKICAgICAgICAg
Ly8gQ29udmVydCBydW5zIGZyb20gcmVsYXRpdmUgdG8gdGhlIGxpbmUgdG9wL2xlZnQgdG8gdGhl
IGZvcm1hdHRpbmcgcm9vdCdzIGJvcmRlciBib3ggdG9wL2xlZnQuCi0gICAgICAgIHJ1bi5tb3Zl
VmVydGljYWxseShtX2xpbmVCb3gubG9naWNhbFRvcCgpKTsKLSAgICAgICAgcnVuLm1vdmVIb3Jp
em9udGFsbHkobV9saW5lQm94LmxvZ2ljYWxMZWZ0KCkpOworICAgICAgICBydW5SZWN0Lm1vdmVW
ZXJ0aWNhbGx5KG1fbGluZUJveC5sb2dpY2FsVG9wKCkpOworICAgICAgICBydW5SZWN0Lm1vdmVI
b3Jpem9udGFsbHkobV9saW5lQm94LmxvZ2ljYWxMZWZ0KCkpOwogICAgIH0KICAgICBtX2xpbmVC
b3guc2V0U2Nyb2xsYWJsZU92ZXJmbG93KHNjcm9sbGFibGVPdmVyZmxvd1JlY3QpOwogfQogCi12
b2lkIExpbmVDb250ZW50QWxpZ25lcjo6anVzdGlmeVJ1bnMoSW5saW5lTGF5b3V0VW5pdCBhdmFp
bGFibGVXaWR0aCkKLXsKLSAgICBBU1NFUlQoYXZhaWxhYmxlV2lkdGggPiAwKTsKLSAgICAvLyBD
b2xsZWN0IHRoZSBleHBhbnNpb24gb3Bwb3J0dW5pdHkgbnVtYmVycyBhbmQgZmluZCB0aGUgbGFz
dCBydW4gd2l0aCBjb250ZW50LgotICAgIGF1dG8gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9
IDA7Ci0gICAgTGluZUJ1aWxkZXI6OlJ1biogbGFzdFJ1bldpdGhDb250ZW50ID0gbnVsbHB0cjsK
LSAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgewotICAgICAgICBleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50ICs9IHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCk7Ci0gICAgICAgIGlm
IChydW4uaXNUZXh0KCkgfHwgcnVuLmlzQm94KCkpCi0gICAgICAgICAgICBsYXN0UnVuV2l0aENv
bnRlbnQgPSAmcnVuOwotICAgIH0KLSAgICAvLyBOZWVkIHRvIGZpeCB1cCB0aGUgbGFzdCBydW4n
cyB0cmFpbGluZyBleHBhbnNpb24uCi0gICAgaWYgKGxhc3RSdW5XaXRoQ29udGVudCAmJiBsYXN0
UnVuV2l0aENvbnRlbnQtPmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpIHsKLSAgICAgICAgLy8g
VHVybiBvZmYgdGhlIHRyYWlsaW5nIGJpdHMgZmlyc3QgYW5kIGFkZCB0aGUgZm9yYmlkIHRyYWls
aW5nIGV4cGFuc2lvbi4KLSAgICAgICAgYXV0byBsZWZ0RXhwYW5zaW9uID0gbGFzdFJ1bldpdGhD
b250ZW50LT5leHBhbnNpb25CZWhhdmlvcigpICYgTGVmdEV4cGFuc2lvbk1hc2s7Ci0gICAgICAg
IGxhc3RSdW5XaXRoQ29udGVudC0+c2V0RXhwYW5zaW9uQmVoYXZpb3IobGVmdEV4cGFuc2lvbiB8
IEZvcmJpZFJpZ2h0RXhwYW5zaW9uKTsKLSAgICB9Ci0gICAgLy8gTm90aGluZyB0byBkaXN0cmli
dXRlPwotICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkKLSAgICAgICAgcmV0dXJu
OwotICAgIC8vIERpc3RyaWJ1dGUgdGhlIGV4dHJhIHNwYWNlLgotICAgIGF1dG8gZXhwYW5zaW9u
VG9EaXN0cmlidXRlID0gYXZhaWxhYmxlV2lkdGggLyBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
OwotICAgIElubGluZUxheW91dFVuaXQgYWNjdW11bGF0ZWRFeHBhbnNpb24gPSAwOwotICAgIGZv
ciAoYXV0byYgcnVuIDogbV9ydW5zKSB7Ci0gICAgICAgIC8vIEV4cGFuZCBhbmQgbW92ZXMgcnVu
cyBieSB0aGUgYWNjdW11bGF0ZWQgZXhwYW5zaW9uLgotICAgICAgICBpZiAoIXJ1bi5oYXNFeHBh
bnNpb25PcHBvcnR1bml0eSgpKSB7Ci0gICAgICAgICAgICBydW4ubW92ZUhvcml6b250YWxseShh
Y2N1bXVsYXRlZEV4cGFuc2lvbik7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
ICAgICAgICBBU1NFUlQocnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKSk7Ci0gICAgICAg
IGF1dG8gY29tcHV0ZWRFeHBhbnNpb24gPSBleHBhbnNpb25Ub0Rpc3RyaWJ1dGUgKiBydW4uZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpOwotICAgICAgICBydW4uc2V0Q29tcHV0ZWRIb3Jpem9u
dGFsRXhwYW5zaW9uKGNvbXB1dGVkRXhwYW5zaW9uKTsKLSAgICAgICAgcnVuLm1vdmVIb3Jpem9u
dGFsbHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOwotICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lv
biArPSBjb21wdXRlZEV4cGFuc2lvbjsKLSAgICB9Ci19Ci0KIHZvaWQgTGluZUNvbnRlbnRBbGln
bmVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKQogewogICAgIHVuc2lnbmVkIGlubGlu
ZUNvbnRhaW5lck5lc3RpbmdMZXZlbCA9IDA7CkBAIC0yNzcsOSArMjY0LDYgQEAgdm9pZCBMaW5l
Q29udGVudEFsaWduZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgpCiAgICAgZm9yIChh
dXRvJiBydW4gOiBtX3J1bnMpIHsKICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91
dEJveCgpOwogICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotCi0gICAg
ICAgIHJ1bi5zZXRMb2dpY2FsSGVpZ2h0KHJ1bkNvbnRlbnRIZWlnaHQocnVuKSk7Ci0KICAgICAg
ICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSkgewogICAgICAgICAgICAg
aWYgKGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCkgewogICAgICAgICAgICAgICAgIC8vIFdl
J3ZlIGFscmVhZHkgYWRqdXN0ZWQgdGhlIGxpbmUgaGVpZ2h0L2Jhc2VsaW5lIHRocm91Z2ggdGhl
IHBhcmVudCBpbmxpbmUgY29udGFpbmVyLiAKQEAgLTI5OSw3ICsyODMsNyBAQCB2b2lkIExpbmVD
b250ZW50QWxpZ25lcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCkKICAgICAgICAgICAg
IC8vIFZlcnRpY2FsIG1hcmdpbnMsIHBhZGRpbmdzIGFuZCBib3JkZXJzIGRvbid0IGNvbnRyaWJ1
dGUgdG8gdGhlIGxpbmUgaGVpZ2h0LgogICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBz
dHlsZS5mb250TWV0cmljcygpOwogICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsQWxpZ24o
KSA9PSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZSkgewotICAgICAgICAgICAgICAgIGF1dG8gaGFs
ZkxlYWRpbmcgPSBMaW5lQnVpbGRlcjo6aGFsZkxlYWRpbmdNZXRyaWNzKGZvbnRNZXRyaWNzLCBz
dHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgYXV0byBoYWxmTGVh
ZGluZyA9IExpbmVCb3g6OmhhbGZMZWFkaW5nTWV0cmljcyhmb250TWV0cmljcywgc3R5bGUuY29t
cHV0ZWRMaW5lSGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIC8vIEJvdGggaGFsZmxlYWRpbmcg
YXNjZW50IGFuZCBkZXNjZW50IGNvdWxkIGJlIG5lZ2F0aXZlICh0YWxsIGZvbnQgdnMuIHNtYWxs
IGxpbmUtaGVpZ2h0IHZhbHVlKQogICAgICAgICAgICAgICAgIGlmIChoYWxmTGVhZGluZy5kZXNj
ZW50ID4gMCkKICAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldERlc2NlbnRJZkdyZWF0
ZXIoaGFsZkxlYWRpbmcuZGVzY2VudCk7CkBAIC0zODUsMjQgKzM2OSw2IEBAIEhhbmdpbmdDb250
ZW50IExpbmVDb250ZW50QWxpZ25lcjo6Y29sbGVjdEhhbmdpbmdDb250ZW50KElzTGFzdExpbmVX
aXRoSW5saW5lQ29uCiAgICAgcmV0dXJuIGhhbmdpbmdDb250ZW50OwogfQogCi1JbmxpbmVMYXlv
dXRVbml0IExpbmVDb250ZW50QWxpZ25lcjo6cnVuQ29udGVudEhlaWdodChjb25zdCBMaW5lQnVp
bGRlcjo6UnVuJiBydW4pIGNvbnN0Ci17Ci0gICAgYXV0byYgZm9udE1ldHJpY3MgPSBydW4uc3R5
bGUoKS5mb250TWV0cmljcygpOwotICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGluZUJy
ZWFrKCkpCi0gICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKLQotICAgIGlmIChy
dW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgpKQotICAgICAgICBy
ZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0KLSAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4u
bGF5b3V0Qm94KCk7Ci0gICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgp
Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgaWYgKGxheW91dEJveC5pc1JlcGxhY2Vk
Qm94KCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgIHJldHVy
biBib3hHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCk7Ci0KLSAgICAvLyBOb24tcmVwbGFjZWQg
aW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJpdCBtaXNsZWFkaW5n
IGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRlbnQgaGVpZ2h0IGhl
cmUuCi0gICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOwotfQotCiB2b2lk
IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KEludmFsaWRhdGlv
blN0YXRlJiBpbnZhbGlkYXRpb25TdGF0ZSwgY29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dDb250
ZW50JiBjb25zdHJhaW50cykKIHsKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRl
eHRMYXlvdXQsIHN0cmVhbSA8PCAiW1N0YXJ0XSAtPiBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0
IC0+IGZvcm1hdHRpbmcgcm9vdCgiIDw8ICZyb290KCkgPDwgIikiKTsKQEAgLTQ3MCwxNyArNDM2
LDIwIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRl
bXMmIGlubGluZUl0ZW1zLCBMaW5lTGF5b3V0Q29uCiAgICAgYXV0byBsaW5lTGF5b3V0Q29udGV4
dCA9IExpbmVMYXlvdXRDb250ZXh0IHsgKnRoaXMsIHJvb3QoKSwgaW5saW5lSXRlbXMgfTsKIAog
ICAgIHdoaWxlICghbmVlZHNMYXlvdXRSYW5nZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbGluZS5p
bml0aWFsaXplKGNvbnN0cmFpbnRzRm9yTGluZShjb25zdHJhaW50cy5ob3Jpem9udGFsLCBsaW5l
TG9naWNhbFRvcCkpOworICAgICAgICBhdXRvIGxpbmVDb25zdHJhaW50cyA9IGNvbnN0cmFpbnRz
Rm9yTGluZShjb25zdHJhaW50cy5ob3Jpem9udGFsLCBsaW5lTG9naWNhbFRvcCk7CisgICAgICAg
IGxpbmUub3BlbihsaW5lQ29uc3RyYWludHMuYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKKyAgICAg
ICAgbGluZS5zZXRIYXNJbnRydXNpdmVGbG9hdChsaW5lQ29uc3RyYWludHMubGluZUlzQ29uc3Ry
YWluZWRCeUZsb2F0KTsKICAgICAgICAgLy8gVHVybiBwcmV2aW91cyBsaW5lJ3Mgb3ZlcmZsb3cg
Y29udGVudCBsZW5ndGggaW50byB0aGUgbmV4dCBsaW5lJ3MgbGVhZGluZyBjb250ZW50IHBhcnRp
YWwgbGVuZ3RoLgogICAgICAgICAvLyAic3BbPC1saW5lIGJyZWFrLT5dbGl0X2NvbnRlbnQiIC0+
IG92ZXJmbG93IGxlbmd0aDogMTEgLT4gbGVhZGluZyBwYXJ0aWFsIGNvbnRlbnQgbGVuZ3RoOiAx
MS4KICAgICAgICAgYXV0byBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGggPSBwcmV2aW91c0xp
bmUgPyBwcmV2aW91c0xpbmUtPm92ZXJmbG93Q29udGVudExlbmd0aCA6IFdURjo6bnVsbG9wdDsK
ICAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxpbmVMYXlvdXRDb250ZXh0LmxheW91dElubGlu
ZUNvbnRlbnQobGluZSwgbmVlZHNMYXlvdXRSYW5nZSwgcGFydGlhbExlYWRpbmdDb250ZW50TGVu
Z3RoKTsKLSAgICAgICAgYXV0byYgbGluZUJveCA9IGxpbmUubGluZUJveCgpOworCiAgICAgICAg
IGF1dG8gbGluZUNvbnRlbnRSYW5nZSA9IGxpbmVDb250ZW50LmlubGluZUl0ZW1SYW5nZTsKKyAg
ICAgICAgYXV0byBsaW5lQm94ID0gTGluZUJveCB7IERpc3BsYXk6OklubGluZVJlY3QgeyBsaW5l
Q29uc3RyYWludHMubG9naWNhbFRvcExlZnQsIGxpbmUuY29udGVudExvZ2ljYWxXaWR0aCgpLCBs
aW5lQ29uc3RyYWludHMubGluZUhlaWdodCB9LCBMaW5lQm94OjpoYWxmTGVhZGluZ01ldHJpY3Mo
cm9vdCgpLnN0eWxlKCkuZm9udE1ldHJpY3MoKSwgbGluZUNvbnN0cmFpbnRzLmxpbmVIZWlnaHQp
IH07CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGFuZCB3aWxsIGV2ZW50
dWFsbHkgZ2V0IG1lcmdlZCB0byBMaW5lQm94LgorICAgICAgICBhdXRvIGNvbnRlbnRBbGlnbmVy
ID0gTGluZUNvbnRlbnRBbGlnbmVyIHsgKnRoaXMsIGxpbmVCb3gsIGxpbmUucnVucygpLCBsaW5l
LmF2YWlsYWJsZVdpZHRoKCkgfTsKICAgICAgICAgYXV0byBhbGlnbkxpbmVDb250ZW50ID0gWyZd
IHsKLSAgICAgICAgICAgIGF1dG8gY29udGVudEFsaWduZXIgPSBMaW5lQ29udGVudEFsaWduZXIg
eyAqdGhpcywgbGluZUJveCwgbGluZS5ydW5zKCksIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSB9Owog
ICAgICAgICAgICAgY29udGVudEFsaWduZXIuYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCk7
CiAgICAgICAgICAgICBpZiAobGluZS5pc1Zpc3VhbGx5RW1wdHkoKSkgewogICAgICAgICAgICAg
ICAgIGxpbmVCb3gucmVzZXRBbGlnbm1lbnRCYXNlbGluZSgpOwpAQCAtNTIyLDExICs0OTEsMTEg
QEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJdGVtcyYg
aW5saW5lSXRlbXMsIExpbmVMYXlvdXRDb24KICAgICAgICAgfTsKIAogICAgICAgICBhbGlnbkxp
bmVDb250ZW50KCk7Ci0gICAgICAgIHNldERpc3BsYXlCb3hlc0ZvckxpbmUobGluZSwgbGluZUNv
bnRlbnQsIGNvbnN0cmFpbnRzLmhvcml6b250YWwpOworICAgICAgICBzZXREaXNwbGF5Qm94ZXNG
b3JMaW5lKGxpbmUsIGNvbnRlbnRBbGlnbmVyLmlubGluZVJlY3RMaXN0KCksIGxpbmVCb3gsIGxp
bmVDb250ZW50LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKIAogICAgICAgICBpZiAoIWxpbmVD
b250ZW50UmFuZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobmVlZHNMYXlvdXRS
YW5nZS5zdGFydCA8IGxpbmVDb250ZW50UmFuZ2UuZW5kKTsKLSAgICAgICAgICAgIGxpbmVMb2dp
Y2FsVG9wID0gbGluZS5saW5lQm94KCkubG9naWNhbEJvdHRvbSgpOworICAgICAgICAgICAgbGlu
ZUxvZ2ljYWxUb3AgPSBsaW5lQm94LmxvZ2ljYWxCb3R0b20oKTsKICAgICAgICAgICAgIC8vIFdo
ZW4gdGhlIHRyYWlsaW5nIGNvbnRlbnQgaXMgcGFydGlhbCwgd2UgbmVlZCB0byByZXVzZSB0aGUg
bGFzdCBJbmxpbmVUZXh0SXRlbS4KICAgICAgICAgICAgIGF1dG8gbGFzdElubGluZUl0ZW1OZWVk
c1BhcnRpYWxMYXlvdXQgPSBsaW5lQ29udGVudC5wYXJ0aWFsQ29udGVudC5oYXNWYWx1ZSgpOwog
ICAgICAgICAgICAgaWYgKGxhc3RJbmxpbmVJdGVtTmVlZHNQYXJ0aWFsTGF5b3V0KSB7CkBAIC01
NTAsNyArNTE5LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJ
bmxpbmVJdGVtcyYgaW5saW5lSXRlbXMsIExpbmVMYXlvdXRDb24KICAgICAgICAgQVNTRVJUKGxp
bmUuaGFzSW50cnVzaXZlRmxvYXQoKSk7CiAgICAgICAgIC8vIE1vdmUgdGhlIG5leHQgbGluZSBi
ZWxvdyB0aGUgaW50cnVzaXZlIGZsb2F0LgogICAgICAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9
IEZsb2F0aW5nQ29udGV4dCB7IHJvb3QoKSwgKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLmZsb2F0
aW5nU3RhdGUoKSB9OwotICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMgPSBmbG9hdGluZ0Nv
bnRleHQuY29uc3RyYWludHMobGluZUxvZ2ljYWxUb3AsIHRvTGF5b3V0VW5pdChsaW5lLmxpbmVC
b3goKS5sb2dpY2FsQm90dG9tKCkpKTsKKyAgICAgICAgYXV0byBmbG9hdENvbnN0cmFpbnRzID0g
ZmxvYXRpbmdDb250ZXh0LmNvbnN0cmFpbnRzKGxpbmVMb2dpY2FsVG9wLCB0b0xheW91dFVuaXQo
bGluZUJveC5sb2dpY2FsQm90dG9tKCkpKTsKICAgICAgICAgQVNTRVJUKGZsb2F0Q29uc3RyYWlu
dHMubGVmdCB8fCBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0KTsKICAgICAgICAgc3RhdGljIGF1dG8g
aW5pZml0ZVBvaW50ID0gUG9pbnRJbkNvbnRleHRSb290OjptYXgoKTsKICAgICAgICAgLy8gSW4g
Y2FzZSBvZiBsZWZ0IGFuZCByaWdodCBjb25zdHJhaW50cywgd2UgbmVlZCB0byBwaWNrIHRoZSBv
bmUgdGhhdCdzIGNsb3NlciB0byB0aGUgY3VycmVudCBsaW5lLgpAQCAtNjI2LDExICs1OTUsMTEg
QEAgSW5saW5lTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRy
aW5zaWNXaWR0aEZvckNvbnN0cmFpbnQoSW4KICAgICBhdXRvIGxheW91dFJhbmdlID0gTGluZUxh
eW91dENvbnRleHQ6OklubGluZUl0ZW1SYW5nZSB7IDAgLCBpbmxpbmVJdGVtcy5zaXplKCkgfTsK
ICAgICB3aGlsZSAoIWxheW91dFJhbmdlLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBPbmx5IHRo
ZSBob3JpenRvbmFsIGF2YWlsYWJsZSB3aWR0aCBpcyBjb25zdHJhaW5lZCB3aGVuIGNvbXB1dGlu
ZyBpbnRyaW5zaWMgd2lkdGguCi0gICAgICAgIGxpbmUuaW5pdGlhbGl6ZShMaW5lQnVpbGRlcjo6
Q29uc3RyYWludHMgeyB7IH0sIGF2YWlsYWJsZVdpZHRoLCB7IH0sIGZhbHNlIH0pOworICAgICAg
ICBsaW5lLm9wZW4oYXZhaWxhYmxlV2lkdGgpOwogICAgICAgICBhdXRvIGxpbmVDb250ZW50ID0g
bGluZUxheW91dENvbnRleHQubGF5b3V0SW5saW5lQ29udGVudChsaW5lLCBsYXlvdXRSYW5nZSwg
eyB9KTsKICAgICAgICAgbGF5b3V0UmFuZ2Uuc3RhcnQgPSBsaW5lQ29udGVudC5pbmxpbmVJdGVt
UmFuZ2UuZW5kOwogICAgICAgICAvLyBGSVhNRTogVXNlIGxpbmUgbG9naWNhbCBsZWZ0IGFuZCBy
aWdodCB0byB0YWtlIGZsb2F0cyBpbnRvIGFjY291bnQuCi0gICAgICAgIG1heGltdW1MaW5lV2lk
dGggPSBzdGQ6Om1heChtYXhpbXVtTGluZVdpZHRoLCBsaW5lLmxpbmVCb3goKS5sb2dpY2FsV2lk
dGgoKSk7CisgICAgICAgIG1heGltdW1MaW5lV2lkdGggPSBzdGQ6Om1heChtYXhpbXVtTGluZVdp
ZHRoLCBsaW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7CiAgICAgfQogICAgIHJldHVybiBtYXhp
bXVtTGluZVdpZHRoOwogfQpAQCAtNzY0LDcgKzczMyw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbGxlY3RJbmxpbmVDb250ZW50SWZOZWVkZWQoKQogICAgIH0KIH0KIAotTGlu
ZUJ1aWxkZXI6OkNvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb25zdHJhaW50
c0ZvckxpbmUoY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWlu
dHMsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApCitJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6TGluZUNvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb25zdHJhaW50
c0ZvckxpbmUoY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWlu
dHMsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApCiB7CiAgICAgYXV0byBsaW5lTG9n
aWNhbExlZnQgPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbExlZnQ7CiAgICAgYXV0byBs
aW5lTG9naWNhbFJpZ2h0ID0gbGluZUxvZ2ljYWxMZWZ0ICsgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LmxvZ2ljYWxXaWR0aDsKQEAgLTgzMSwxMyArODAwLDEyIEBAIExpbmVCdWlsZGVyOjpDb25zdHJh
aW50cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29uc3RyYWludHNGb3JMaW5lKGNvbnN0IEhv
cml6CiAgICAgICAgIHJldHVybiBnZW9tZXRyeSgpLmNvbXB1dGVkVGV4dEluZGVudChyb290LCBo
b3Jpem9udGFsQ29uc3RyYWludHMpLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pOwogICAg
IH07CiAgICAgbGluZUxvZ2ljYWxMZWZ0ICs9IGNvbXB1dGVkVGV4dEluZGVudCgpOwotICAgIHJl
dHVybiBMaW5lQnVpbGRlcjo6Q29uc3RyYWludHMgeyB7IGxpbmVMb2dpY2FsTGVmdCwgbGluZUxv
Z2ljYWxUb3AgfSwgbGluZUxvZ2ljYWxSaWdodCAtIGxpbmVMb2dpY2FsTGVmdCwgaW5pdGlhbExp
bmVIZWlnaHQsIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCB9OworICAgIHJldHVybiBMaW5lQ29u
c3RyYWludHMgeyB7IGxpbmVMb2dpY2FsTGVmdCwgbGluZUxvZ2ljYWxUb3AgfSwgbGluZUxvZ2lj
YWxSaWdodCAtIGxpbmVMb2dpY2FsTGVmdCwgaW5pdGlhbExpbmVIZWlnaHQsIGxpbmVJc0NvbnN0
cmFpbmVkQnlGbG9hdCB9OwogfQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXRE
aXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyJiBsaW5lLCBjb25zdCBMaW5lTGF5
b3V0Q29udGV4dDo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50LCBjb25zdCBIb3Jpem9udGFsQ29u
c3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXImIGxpbmUsIGNv
bnN0IExpbmVDb250ZW50QWxpZ25lcjo6SW5saW5lUnVuUmVjdExpc3QmIHJ1blJlY3RMaXN0LCBj
b25zdCBMaW5lQm94JiBsaW5lQm94LCBjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6TGluZUNvbnRl
bnQmIGxpbmVDb250ZW50LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxD
b25zdHJhaW50cykKIHsKICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0
aW5nU3RhdGUoKTsKLSAgICBhdXRvJiBsaW5lQm94ID0gbGluZS5saW5lQm94KCk7CiAKICAgICBp
ZiAoIWxpbmVDb250ZW50LmZsb2F0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgYXV0byBmbG9hdGlu
Z0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyByb290KCksICp0aGlzLCBmb3JtYXR0aW5nU3Rh
dGUuZmxvYXRpbmdTdGF0ZSgpIH07CkBAIC04NjUsOSArODMzLDkgQEAgdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlciYg
bGluZSwgY28KICAgICBhdXRvIGxpbmVJbmtPdmVyZmxvdyA9IGxpbmVCb3guc2Nyb2xsYWJsZU92
ZXJmbG93KCk7CiAgICAgLy8gQ29tcHV0ZSBib3ggZmluYWwgZ2VvbWV0cnkuCiAgICAgYXV0byYg
bGluZVJ1bnMgPSBsaW5lLnJ1bnMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5k
ZXggPCBsaW5lUnVucy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9
IDA7IGluZGV4IDwgbGluZVJ1bnMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGF1dG8mIGxp
bmVSdW4gPSBsaW5lUnVucy5hdChpbmRleCk7Ci0gICAgICAgIGF1dG8mIGxvZ2ljYWxSZWN0ID0g
bGluZVJ1bi5sb2dpY2FsUmVjdCgpOworICAgICAgICBhdXRvIGxvZ2ljYWxSZWN0ID0gcnVuUmVj
dExpc3RbaW5kZXhdOwogICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxheW91dEJv
eCgpOwogCiAgICAgICAgIC8vIEFkZCBmaW5hbCBkaXNwbGF5IHJ1bnMgdG8gc3RhdGUgZmlyc3Qu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCAzNjQ0NTQ3YjMwZTRlZDQxMzgx
M2ZhYzFmYWE0MmRmMjUxOGFlNjZkLi4zMzk1NDQwOTI5NmI5YTBhYWU4NjhhNWM5NGNjMmQwNWJm
N2E2NmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTg3LDggKzg3LDE0
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94Jiwg
Y29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJik7CiAKICAgICB2b2lkIGNvbGxlY3RJbmxpbmVD
b250ZW50SWZOZWVkZWQoKTsKLSAgICBMaW5lQnVpbGRlcjo6Q29uc3RyYWludHMgY29uc3RyYWlu
dHNGb3JMaW5lKGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIElubGluZUxheW91dFVuaXQg
bGluZUxvZ2ljYWxUb3ApOwotICAgIHZvaWQgc2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBM
aW5lQnVpbGRlciYsIGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCYsIGNvbnN0
IEhvcml6b250YWxDb25zdHJhaW50cyYpOworICAgIHN0cnVjdCBMaW5lQ29uc3RyYWludHMgewor
ICAgICAgICBJbmxpbmVMYXlvdXRQb2ludCBsb2dpY2FsVG9wTGVmdDsKKyAgICAgICAgSW5saW5l
TGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGggeyAwIH07CisgICAgICAgIElubGluZUxh
eW91dFVuaXQgbGluZUhlaWdodCB7IDAgfTsKKyAgICAgICAgYm9vbCBsaW5lSXNDb25zdHJhaW5l
ZEJ5RmxvYXQgeyBmYWxzZSB9OworICAgIH07CisgICAgTGluZUNvbnN0cmFpbnRzIGNvbnN0cmFp
bnRzRm9yTGluZShjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBJbmxpbmVMYXlvdXRVbml0
IGxpbmVMb2dpY2FsVG9wKTsKKyAgICB2b2lkIHNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3Qg
TGluZUJ1aWxkZXImLCBjb25zdCBWZWN0b3I8RGlzcGxheTo6SW5saW5lUmVjdCwgMTA+JiwgY29u
c3QgTGluZUJveCYsIGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCYsIGNvbnN0
IEhvcml6b250YWxDb25zdHJhaW50cyYpOwogICAgIHZvaWQgaW52YWxpZGF0ZUZvcm1hdHRpbmdT
dGF0ZShjb25zdCBJbnZhbGlkYXRpb25TdGF0ZSYpOwogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0
dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxJbmxp
bmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAppbmRleCA2
YWJhNDAwZWZjMTBkZjAxZjg2OGY3NzlkY2U0NmNiY2M0ZGU0YWJjLi5iYTc1NWQ5MzExYTEzZTUy
Y2JhMjdkNGI3OGI4MzEzYzJjMGNmZGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHRRdWlya3MuY3BwCkBAIC03NCw3ICs3NCw3IEBAIElubGluZUxheW91dFVuaXQgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6aW5pdGlhbExpbmVIZWlnaHQoY29uc3QgQ29u
dGFpCiAgICAgLy8gTmVnYXRpdmUgbGluZUhlaWdodCB2YWx1ZSBtZWFucyB0aGUgbGluZS1oZWln
aHQgaXMgbm90IHNldAogICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluTm9RdWlya3NNb2RlKCkgfHwg
IWZvcm1hdHRpbmdSb290LnN0eWxlKCkubGluZUhlaWdodCgpLmlzTmVnYXRpdmUoKSkKICAgICAg
ICAgcmV0dXJuIGNvbXB1dGVkTGluZUhlaWdodDsKLSAgICByZXR1cm4gTGluZUJ1aWxkZXI6Omhh
bGZMZWFkaW5nTWV0cmljcyhmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmZvbnRNZXRyaWNzKCksIGNv
bXB1dGVkTGluZUhlaWdodCkuaGVpZ2h0KCk7CisgICAgcmV0dXJuIExpbmVCb3g6OmhhbGZMZWFk
aW5nTWV0cmljcyhmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmZvbnRNZXRyaWNzKCksIGNvbXB1dGVk
TGluZUhlaWdodCkuaGVpZ2h0KCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaAppbmRleCA2NWJlZWYzZWJl
N2IzMDdjNWVjNzJjNDY0MjhkM2ZhOGVjOWZlZTA0Li41NjE3MDUwYjJmOGJjMDJmNzg4ZmUwMTRl
MWQ4MjkxMWNiOTAyZmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oCkBAIC0xMTQsNiArMTE0LDggQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0SXNDb25zaWRlcmVkRW1wdHkoKSB7IG1faXNDb25zaWRlcmVkRW1wdHkg
PSB0cnVlOyB9CiAgICAgdm9pZCBzZXRJc0NvbnNpZGVyZWROb25FbXB0eSgpIHsgbV9pc0NvbnNp
ZGVyZWRFbXB0eSA9IGZhbHNlOyB9CiAKKyAgICBzdGF0aWMgQXNjZW50QW5kRGVzY2VudCBoYWxm
TGVhZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJpY3MmLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVM
b2dpY2FsSGVpZ2h0KTsKKwogcHJpdmF0ZToKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGJvb2wg
bV9oYXNWYWxpZEFsaWdubWVudEJhc2VsaW5lIHsgZmFsc2UgfTsKQEAgLTE4Niw2ICsxODgsMTgg
QEAgaW5saW5lIHZvaWQgTGluZUJveDo6cmVzZXRBbGlnbm1lbnRCYXNlbGluZSgpCiAgICAgbV9y
b290SW5saW5lQm94LmFzY2VudEFuZERlc2NlbnQuYXNjZW50ID0geyB9OwogfQogCitpbmxpbmUg
QXNjZW50QW5kRGVzY2VudCBMaW5lQm94OjpoYWxmTGVhZGluZ01ldHJpY3MoY29uc3QgRm9udE1l
dHJpY3MmIGZvbnRNZXRyaWNzLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KQor
eworICAgIGF1dG8gYXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KCk7CisgICAgYXV0byBkZXNj
ZW50ID0gZm9udE1ldHJpY3MuZGVzY2VudCgpOworICAgIC8vIDEwLjguMSBMZWFkaW5nIGFuZCBo
YWxmLWxlYWRpbmcKKyAgICBhdXRvIGhhbGZMZWFkaW5nID0gKGxpbmVMb2dpY2FsSGVpZ2h0IC0g
KGFzY2VudCArIGRlc2NlbnQpKSAvIDI7CisgICAgLy8gSW5saW5lIHRyZWUgaGVpZ2h0IGlzIGFs
bCBpbnRlZ2VyIGJhc2VkLgorICAgIGF1dG8gYWRqdXN0ZWRBc2NlbnQgPSBzdGQ6Om1heDxJbmxp
bmVMYXlvdXRVbml0PihmbG9vcmYoYXNjZW50ICsgaGFsZkxlYWRpbmcpLCAwKTsKKyAgICBhdXRv
IGFkanVzdGVkRGVzY2VudCA9IHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KGNlaWxmKGRlc2Nl
bnQgKyBoYWxmTGVhZGluZyksIDApOworICAgIHJldHVybiB7IGFkanVzdGVkQXNjZW50LCBhZGp1
c3RlZERlc2NlbnQgfTsKK30KKwogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKaW5kZXgg
NmYzZjRlMmU1YTE3ZThiNWNhZTJmNTllYWNiNzkwYTQ5ZjBiMGFhZi4uOTAzODRiOTk2ZTY3ZDY0
NDZjZGI4OTg4OTU2OTczNTg4MTJjNDY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcApAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0LmgiCiAjaW5j
bHVkZSAiSW5saW5lU29mdExpbmVCcmVha0l0ZW0uaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCiAjaW5jbHVkZSAiVGV4dFV0aWwu
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC01NCwyNCArNTUsMTkg
QEAgTGluZUJ1aWxkZXI6On5MaW5lQnVpbGRlcigpCiB7CiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6
OmluaXRpYWxpemUoY29uc3QgQ29uc3RyYWludHMmIGNvbnN0cmFpbnRzKQordm9pZCBMaW5lQnVp
bGRlcjo6b3BlbihJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQogewotICAgIG1fbGlu
ZUxvZ2ljYWxXaWR0aCA9IGNvbnN0cmFpbnRzLmF2YWlsYWJsZUxvZ2ljYWxXaWR0aDsKLSAgICBt
X2hhc0ludHJ1c2l2ZUZsb2F0ID0gY29uc3RyYWludHMubGluZUlzQ29uc3RyYWluZWRCeUZsb2F0
OwotICAgIGF1dG8gaW5pdGlhbExpbmVIZWlnaHQgPSBjb25zdHJhaW50cy5saW5lSGVpZ2h0Owot
ICAgIGF1dG8gbGluZVJlY3QgPSBEaXNwbGF5OjpJbmxpbmVSZWN0IHsgY29uc3RyYWludHMubG9n
aWNhbFRvcExlZnQsIDBfbHUsIGluaXRpYWxMaW5lSGVpZ2h0IH07Ci0gICAgYXV0byBhc2NlbnRB
bmREZXNjZW50ID0gTGluZUJ1aWxkZXI6OmhhbGZMZWFkaW5nTWV0cmljcyhmb3JtYXR0aW5nQ29u
dGV4dCgpLnJvb3QoKS5zdHlsZSgpLmZvbnRNZXRyaWNzKCksIGluaXRpYWxMaW5lSGVpZ2h0KTsK
LSAgICBtX2xpbmVCb3ggPSBMaW5lQm94IHsgbGluZVJlY3QsIGFzY2VudEFuZERlc2NlbnQgfTsK
LSAgICBjbGVhcigpOworICAgIG1fbGluZUxvZ2ljYWxXaWR0aCA9IGF2YWlsYWJsZVdpZHRoOwor
ICAgIGNsZWFyQ29udGVudCgpOwogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgbV9pc0Nsb3NlZCA9
IGZhbHNlOwogI2VuZGlmCiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6OmNsZWFyKCkKK3ZvaWQgTGlu
ZUJ1aWxkZXI6OmNsZWFyQ29udGVudCgpCiB7Ci0gICAgbV9saW5lQm94LnNldExvZ2ljYWxXaWR0
aCh7IH0pOwotICAgIG1fbGluZUJveC5zZXRJc0NvbnNpZGVyZWRFbXB0eSgpOworICAgIG1fY29u
dGVudExvZ2ljYWxXaWR0aCA9IHsgfTsKKyAgICBtX2lzVmlzdWFsbHlFbXB0eSA9IHRydWU7CiAg
ICAgbV9ydW5zLmNsZWFyKCk7CiAgICAgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQucmVzZXQo
KTsKICAgICBtX2xpbmVJc1Zpc3VhbGx5RW1wdHlCZWZvcmVUcmltbWFibGVUcmFpbGluZ0NvbnRl
bnQgPSB7IH07CkBAIC04MiwxMCArNzgsMzkgQEAgdm9pZCBMaW5lQnVpbGRlcjo6Y2xvc2UoKQog
I2lmIEFTU0VSVF9FTkFCTEVECiAgICAgbV9pc0Nsb3NlZCA9IHRydWU7CiAjZW5kaWYKLSAgICAv
LyAxLiBSZW1vdmUgdHJpbW1hYmxlIHRyYWlsaW5nIGNvbnRlbnQuCi0gICAgLy8gMi4gQWxpZ24g
bWVyZ2VkIHJ1bnMgYm90aCB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHkuCiAgICAgcmVtb3Zl
VHJhaWxpbmdUcmltbWFibGVDb250ZW50KCk7CiAgICAgdmlzdWFsbHlDb2xsYXBzZVByZVdyYXBP
dmVyZmxvd0NvbnRlbnQoKTsKKworICAgIGF1dG8gY29tcHV0ZUV4cGFuc2lvbkZvclJ1bnNJZk5l
ZWRlZCA9IFsmXSB7CisgICAgICAgIGlmIChmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKS5zdHls
ZSgpLnRleHRBbGlnbigpICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgYXV0byBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gMDsKKyAg
ICAgICAgUnVuKiBsYXN0UnVuV2l0aENvbnRlbnQgPSBudWxscHRyOworICAgICAgICAvLyBDb2xs
ZWN0IGFuZCBkaXN0cmlidXRlIHRoZSBleHBhbnNpb24gb3Bwb3J0dW5pdGllcy4KKyAgICAgICAg
Zm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKKyAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQgKz0gcnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKTsKKyAgICAgICAgICAg
IGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzQm94KCkpCisgICAgICAgICAgICAgICAgbGFzdFJ1
bldpdGhDb250ZW50ID0gJnJ1bjsKKyAgICAgICAgfQorICAgICAgICAvLyBOZWVkIHRvIGZpeCB1
cCB0aGUgbGFzdCBydW4ncyB0cmFpbGluZyBleHBhbnNpb24uCisgICAgICAgIGlmIChsYXN0UnVu
V2l0aENvbnRlbnQgJiYgbGFzdFJ1bldpdGhDb250ZW50LT5oYXNFeHBhbnNpb25PcHBvcnR1bml0
eSgpKSB7CisgICAgICAgICAgICAvLyBUdXJuIG9mZiB0aGUgdHJhaWxpbmcgYml0cyBmaXJzdCBh
bmQgYWRkIHRoZSBmb3JiaWQgdHJhaWxpbmcgZXhwYW5zaW9uLgorICAgICAgICAgICAgYXV0byBs
ZWFkaW5nRXhwYW5zaW9uID0gbGFzdFJ1bldpdGhDb250ZW50LT5leHBhbnNpb25CZWhhdmlvcigp
ICYgTGVmdEV4cGFuc2lvbk1hc2s7CisgICAgICAgICAgICBsYXN0UnVuV2l0aENvbnRlbnQtPnNl
dEV4cGFuc2lvbkJlaGF2aW9yKGxlYWRpbmdFeHBhbnNpb24gfCBGb3JiaWRSaWdodEV4cGFuc2lv
bik7CisgICAgICAgIH0KKyAgICAgICAgLy8gQW55dGhpbmcgdG8gZGlzdHJpYnV0ZT8KKyAgICAg
ICAgaWYgKGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgJiYgYXZhaWxhYmxlV2lkdGgoKSkgewor
ICAgICAgICAgICAgLy8gRGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3BhY2UuCisgICAgICAgICAgICBh
dXRvIGV4cGFuc2lvblRvRGlzdHJpYnV0ZSA9IGF2YWlsYWJsZVdpZHRoKCkgLyBleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50OworICAgICAgICAgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsK
KyAgICAgICAgICAgICAgICAvLyBFeHBhbmQgYW5kIG1vdmVzIHJ1bnMgYnkgdGhlIGFjY3VtdWxh
dGVkIGV4cGFuc2lvbi4KKyAgICAgICAgICAgICAgICBpZiAocnVuLmhhc0V4cGFuc2lvbk9wcG9y
dHVuaXR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJ1bi5zZXRIb3Jpem9udGFsRXhwYW5zaW9u
KGV4cGFuc2lvblRvRGlzdHJpYnV0ZSAqIHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBjb21wdXRlRXhwYW5zaW9u
Rm9yUnVuc0lmTmVlZGVkKCk7CiB9CiAKIHZvaWQgTGluZUJ1aWxkZXI6OnJlbW92ZVRyYWlsaW5n
VHJpbW1hYmxlQ29udGVudCgpCkBAIC0xMDgsMjEgKzEzMywyMCBAQCB2b2lkIExpbmVCdWlsZGVy
OjpyZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQoKQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgbV9saW5lQm94LnNocmlua0hvcml6b250YWxseShtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVu
dC5yZW1vdmUoKSk7CisgICAgbV9jb250ZW50TG9naWNhbFdpZHRoIC09IG1fdHJpbW1hYmxlVHJh
aWxpbmdDb250ZW50LnJlbW92ZSgpOwogICAgIC8vIElmIHdlIHJlbW92ZWQgdGhlIGZpcnN0IHZp
c2libGUgcnVuIG9uIHRoZSBsaW5lLCB3ZSBuZWVkIHRvIHJlLWNoZWNrIHRoZSB2aXNpYmlsaXR5
IHN0YXR1cy4KICAgICBpZiAobV9saW5lSXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1hYmxlVHJh
aWxpbmdDb250ZW50KSB7CiAgICAgICAgIC8vIEp1c3QgYmVjYXVzZSB0aGUgbGluZSB3YXMgdmlz
dWFsbHkgZW1wdHkgYmVmb3JlIHRoZSByZW1vdmVkIGNvbnRlbnQsIGl0IGRvZXMgbm90IG5lY2Vz
c2FyaWx5IG1lYW4gaXQgaXMgc3RpbGwgdmlzdWFsbHkgZW1wdHkuCiAgICAgICAgIC8vIDxzcGFu
PiAgPC9zcGFuPjxzcGFuIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDEwcHgiPjwvc3Bhbj4gIDwtIG5v
bi1lbXB0eQogICAgICAgICBhdXRvIGxpbmVJc1Zpc3VhbGx5RW1wdHkgPSBbJl0gewogICAgICAg
ICAgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNW
aXN1YWxseU5vbkVtcHR5KHJ1bikpCisgICAgICAgICAgICAgICAgaWYgKGlzUnVuVmlzdWFsbHlO
b25FbXB0eShydW4pKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfTsKICAgICAgICAgLy8g
V2UgY291bGQgb25seSBnbyBmcm9tIHZpc3VhbGx5IG5vbiBlbXB0eSAtPiB0byB2aXN1YWxseSBl
bXB0eS4gVHJpbW1lZCBydW5zIHNob3VsZCBuZXZlciBtYWtlIHRoZSBsaW5lIHZpc2libGUuCi0g
ICAgICAgIGlmIChsaW5lSXNWaXN1YWxseUVtcHR5KCkpCi0gICAgICAgICAgICBtX2xpbmVCb3gu
c2V0SXNDb25zaWRlcmVkRW1wdHkoKTsKKyAgICAgICAgbV9pc1Zpc3VhbGx5RW1wdHkgPSBsaW5l
SXNWaXN1YWxseUVtcHR5KCk7CiAgICAgICAgIG1fbGluZUlzVmlzdWFsbHlFbXB0eUJlZm9yZVRy
aW1tYWJsZVRyYWlsaW5nQ29udGVudCA9IHsgfTsKICAgICB9CiB9CkBAIC0xNTEsNyArMTc1LDcg
QEAgdm9pZCBMaW5lQnVpbGRlcjo6dmlzdWFsbHlDb2xsYXBzZVByZVdyYXBPdmVyZmxvd0NvbnRl
bnQoKQogICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHRyaW1tYWJsZVdpZHRoID0geyB9OwogICAg
ICAgICBpZiAocnVuLmlzVGV4dCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGFsd2F5cyBjb2xsYXBzZSB0aGUgcnVuIGF0IGEgZ2x5cGggYm91bmRhcnkgYXMgdGhlIHNwZWMg
aW5kaWNhdGVzOiAiY29sbGFwc2UgdGhlIGNoYXJhY3RlciBhZHZhbmNlIHdpZHRocyBvZiBhbnkg
dGhhdCB3b3VsZCBvdGhlcndpc2Ugb3ZlcmZsb3ciCi0gICAgICAgICAgICAvLyBhbmQgdGhlIHRy
aW1tZWQgd2lkdGggc2hvdWxkIGJlIGNhcHBlZCBhdCBzdGQ6Om1pbihydW4udHJhaWxpbmdXaGl0
ZXNwYWNlV2lkdGgoKSwgb3ZlcmZsb3dXaWR0aCkgZm9yIHRleGd0IHJ1bnMuIEJvdGggRkYgYW5k
IENocm9tZSBhZ3JlZS4KKyAgICAgICAgICAgIC8vIGFuZCB0aGUgdHJpbW1lZCB3aWR0aCBzaG91
bGQgYmUgY2FwcGVkIGF0IHN0ZDo6bWluKHJ1bi50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpLCBv
dmVyZmxvd1dpZHRoKSBmb3IgdGV4dCBydW5zLiBCb3RoIEZGIGFuZCBDaHJvbWUgYWdyZWUuCiAg
ICAgICAgICAgICB0cmltbWFibGVXaWR0aCA9IHJ1bi50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgp
OwogICAgICAgICAgICAgcnVuLnZpc3VhbGx5Q29sbGFwc2VUcmFpbGluZ1doaXRlc3BhY2UoKTsK
ICAgICAgICAgfSBlbHNlIHsKQEAgLTE2Myw3ICsxODcsNyBAQCB2b2lkIExpbmVCdWlsZGVyOjp2
aXN1YWxseUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCgpCiAgICAgICAgIGlmIChvdmVy
Zmxvd1dpZHRoIDw9IDApCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgbV9saW5lQm94
LnNocmlua0hvcml6b250YWxseSh0cmltbWVkQ29udGVudFdpZHRoKTsKKyAgICBtX2NvbnRlbnRM
b2dpY2FsV2lkdGggLT0gdHJpbW1lZENvbnRlbnRXaWR0aDsKIH0KIAogdm9pZCBMaW5lQnVpbGRl
cjo6bW92ZUxvZ2ljYWxMZWZ0KElubGluZUxheW91dFVuaXQgZGVsdGEpCkBAIC0xNzEsNyArMTk1
LDcgQEAgdm9pZCBMaW5lQnVpbGRlcjo6bW92ZUxvZ2ljYWxMZWZ0KElubGluZUxheW91dFVuaXQg
ZGVsdGEpCiAgICAgaWYgKCFkZWx0YSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChkZWx0
YSA+IDApOwotICAgIG1fbGluZUJveC5tb3ZlSG9yaXpvbnRhbGx5KGRlbHRhKTsKKyAgICBtX2xp
bmVMb2dpY2FsTGVmdCArPSBkZWx0YTsKICAgICBtX2xpbmVMb2dpY2FsV2lkdGggLT0gZGVsdGE7
CiB9CiAKQEAgLTIxMCwxNCArMjM0LDE0IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZFdpdGgo
Y29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgY29uc3QgSW5saW5lUnVuRGV0YWlsCiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhpcyBmcmVzaGx5
IGFwcGVuZGVkIGNvbnRlbnQgbWFrZXMgdGhlIGxpbmUgdmlzdWFsbHkgbm9uLWVtcHR5LgotICAg
IGlmIChtX2xpbmVCb3guaXNDb25zaWRlcmVkRW1wdHkoKSAmJiAhbV9ydW5zLmlzRW1wdHkoKSAm
JiBpc1Zpc3VhbGx5Tm9uRW1wdHkobV9ydW5zLmxhc3QoKSkpCi0gICAgICAgIG1fbGluZUJveC5z
ZXRJc0NvbnNpZGVyZWROb25FbXB0eSgpOworICAgIGlmIChtX2lzVmlzdWFsbHlFbXB0eSAmJiAh
bV9ydW5zLmlzRW1wdHkoKSAmJiBpc1J1blZpc3VhbGx5Tm9uRW1wdHkobV9ydW5zLmxhc3QoKSkp
CisgICAgICAgIG1faXNWaXN1YWxseUVtcHR5ID0gZmFsc2U7CiB9CiAKIHZvaWQgTGluZUJ1aWxk
ZXI6OmFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0s
IElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdp
ZHRoKQogewogICAgIG1fcnVucy5hcHBlbmQoeyBpbmxpbmVJdGVtLCBsb2dpY2FsTGVmdCwgbG9n
aWNhbFdpZHRoIH0pOwotICAgIG1fbGluZUJveC5leHBhbmRIb3Jpem9udGFsbHkobG9naWNhbFdp
ZHRoKTsKKyAgICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggKz0gbG9naWNhbFdpZHRoOwogfQogCiB2
b2lkIExpbmVCdWlsZGVyOjphcHBlbmRJbmxpbmVDb250YWluZXJTdGFydChjb25zdCBJbmxpbmVJ
dGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKQEAgLTIzMiw3
ICsyNTYsNyBAQCB2b2lkIExpbmVCdWlsZGVyOjphcHBlbmRJbmxpbmVDb250YWluZXJFbmQoY29u
c3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSW5saW5lTAogICAgIGF1dG8gcmVtb3ZlVHJhaWxp
bmdMZXR0ZXJTcGFjaW5nID0gWyZdIHsKICAgICAgICAgaWYgKCFtX3RyaW1tYWJsZVRyYWlsaW5n
Q29udGVudC5pc1RyYWlsaW5nUnVuUGFydGlhbGx5VHJpbW1hYmxlKCkpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIG1fbGluZUJveC5zaHJpbmtIb3Jpem9udGFsbHkobV90cmltbWFibGVU
cmFpbGluZ0NvbnRlbnQucmVtb3ZlUGFydGlhbGx5VHJpbW1hYmxlQ29udGVudCgpKTsKKyAgICAg
ICAgbV9jb250ZW50TG9naWNhbFdpZHRoIC09IG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LnJl
bW92ZVBhcnRpYWxseVRyaW1tYWJsZUNvbnRlbnQoKTsKICAgICB9OwogICAgIC8vIFByZXZlbnQg
dHJhaWxpbmcgbGV0dGVyLXNwYWNpbmcgZnJvbSBzcGlsbGluZyBvdXQgb2YgdGhlIGlubGluZSBj
b250YWluZXIuCiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10ZXh0LTMvI2xl
dHRlci1zcGFjaW5nLXByb3BlcnR5IFNlZSBleGFtcGxlIDIxLgpAQCAtMjgxLDkgKzMwNSw3IEBA
IHZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZFRleHRDb250ZW50KGNvbnN0IElubGluZVRleHRJdGVt
JiBpbmxpbmVUZXh0SXRlbSwgSW5saW5lCiAgICAgfQogICAgIGlmIChpbmxpbmVUZXh0SXRlbU5l
ZWRzTmV3UnVuKQogICAgICAgICBtX3J1bnMuYXBwZW5kKHsgaW5saW5lVGV4dEl0ZW0sIGNvbnRl
bnRMb2dpY2FsV2lkdGgoKSwgbG9naWNhbFdpZHRoLCBuZWVkc0h5cGhlbiB9KTsKLQotICAgIG1f
bGluZUJveC5leHBhbmRIb3Jpem9udGFsbHkobG9naWNhbFdpZHRoKTsKLQorICAgIG1fY29udGVu
dExvZ2ljYWxXaWR0aCArPSBsb2dpY2FsV2lkdGg7CiAgICAgLy8gU2V0IHRoZSB0cmFpbGluZyB0
cmltbWFibGUgY29udGVudC4KICAgICBpZiAoaW5saW5lVGV4dEl0ZW0uaXNXaGl0ZXNwYWNlKCkg
JiYgIVRleHRVdGlsOjpzaG91bGRQcmVzZXJ2ZVRyYWlsaW5nV2hpdGVzcGFjZShpbmxpbmVUZXh0
SXRlbS5zdHlsZSgpKSkgewogICAgICAgICBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC5hZGRG
dWxseVRyaW1tYWJsZUNvbnRlbnQobV9ydW5zLnNpemUoKSAtIDEsIGxvZ2ljYWxXaWR0aCk7CkBA
IC0zMDQsNyArMzI2LDcgQEAgdm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kTm9uUmVwbGFjZWRJbmxp
bmVCb3goY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSW5saW4KICAgICBhdXRvJiBib3hH
ZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsK
ICAgICBhdXRvIGhvcml6b250YWxNYXJnaW4gPSBib3hHZW9tZXRyeS5ob3Jpem9udGFsTWFyZ2lu
KCk7CiAgICAgbV9ydW5zLmFwcGVuZCh7IGlubGluZUl0ZW0sIGNvbnRlbnRMb2dpY2FsV2lkdGgo
KSArIGhvcml6b250YWxNYXJnaW4uc3RhcnQsIGxvZ2ljYWxXaWR0aCB9KTsKLSAgICBtX2xpbmVC
b3guZXhwYW5kSG9yaXpvbnRhbGx5KGxvZ2ljYWxXaWR0aCArIGhvcml6b250YWxNYXJnaW4uc3Rh
cnQgKyBob3Jpem9udGFsTWFyZ2luLmVuZCk7CisgICAgbV9jb250ZW50TG9naWNhbFdpZHRoICs9
IGxvZ2ljYWxXaWR0aCArIGhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBob3Jpem9udGFsTWFyZ2lu
LmVuZDsKICAgICBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC5yZXNldCgpOwogfQogCkBAIC0z
MjQsNyArMzQ2LDcgQEAgdm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kTGluZUJyZWFrKGNvbnN0IElu
bGluZUl0ZW0mIGlubGluZUl0ZW0pCiAgICAgbV9ydW5zLmFwcGVuZCh7IGRvd25jYXN0PElubGlu
ZVNvZnRMaW5lQnJlYWtJdGVtPihpbmxpbmVJdGVtKSwgY29udGVudExvZ2ljYWxXaWR0aCgpIH0p
OwogfQogCi1ib29sIExpbmVCdWlsZGVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoY29uc3QgUnVuJiBy
dW4pIGNvbnN0Citib29sIExpbmVCdWlsZGVyOjppc1J1blZpc3VhbGx5Tm9uRW1wdHkoY29uc3Qg
UnVuJiBydW4pIGNvbnN0CiB7CiAgICAgaWYgKHJ1bi5pc1RleHQoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0zNTQsMTggKzM3Niw2IEBAIGJvb2wgTGluZUJ1aWxkZXI6OmlzVmlzdWFsbHlO
b25FbXB0eShjb25zdCBSdW4mIHJ1bikgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUFz
Y2VudEFuZERlc2NlbnQgTGluZUJ1aWxkZXI6OmhhbGZMZWFkaW5nTWV0cmljcyhjb25zdCBGb250
TWV0cmljcyYgZm9udE1ldHJpY3MsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxIZWlnaHQp
Ci17Ci0gICAgYXV0byBhc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKLSAgICBhdXRvIGRl
c2NlbnQgPSBmb250TWV0cmljcy5kZXNjZW50KCk7Ci0gICAgLy8gMTAuOC4xIExlYWRpbmcgYW5k
IGhhbGYtbGVhZGluZwotICAgIGF1dG8gaGFsZkxlYWRpbmcgPSAobGluZUxvZ2ljYWxIZWlnaHQg
LSAoYXNjZW50ICsgZGVzY2VudCkpIC8gMjsKLSAgICAvLyBJbmxpbmUgdHJlZSBoZWlnaHQgaXMg
YWxsIGludGVnZXIgYmFzZWQuCi0gICAgYXV0byBhZGp1c3RlZEFzY2VudCA9IHN0ZDo6bWF4PElu
bGluZUxheW91dFVuaXQ+KGZsb29yZihhc2NlbnQgKyBoYWxmTGVhZGluZyksIDApOwotICAgIGF1
dG8gYWRqdXN0ZWREZXNjZW50ID0gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4oY2VpbGYoZGVz
Y2VudCArIGhhbGZMZWFkaW5nKSwgMCk7Ci0gICAgcmV0dXJuIHsgYWRqdXN0ZWRBc2NlbnQsIGFk
anVzdGVkRGVzY2VudCB9OwotfQotCiBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgTGlu
ZUJ1aWxkZXI6OmZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDsKQEAgLTM4MSwxNCArMzkxLDE0IEBAIHZvaWQgTGluZUJ1aWxk
ZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6YWRkRnVsbHlUcmltbWFibGVDb250ZW50KHNp
emVfdCBydW5JCiAgICAgLy8gQW55IHN1YnNlcXVlbnQgdHJpbW1hYmxlIHdoaXRlc3BhY2Ugc2hv
dWxkIGNvbGxhcHNlIHRvIHplcm8gYWR2YW5jZWQgd2lkdGggYW5kIGlnbm9yZWQgYXQgOjphcHBl
bmRUZXh0Q29udGVudCgpLgogICAgIEFTU0VSVCghbV9oYXNGdWxseVRyaW1tYWJsZUNvbnRlbnQp
OwogICAgIG1fZnVsbHlUcmltbWFibGVXaWR0aCA9IHRyaW1tYWJsZVdpZHRoOwotICAgIC8vIE5v
dGUgdGhhdCBqdXN0IGJlY2FzdWUgdGhlIHRyaW1tYWJsZSB3aWR0aCBpcyAwIChmb250LXNpemU6
IDBweCksIGl0IGRvZXMgbm90IG1lYW4gd2UgZG9uJ3QgaGF2ZSBhIHRyaW1tYWJsZSB0cmFpbGlu
ZyBjb250ZW50LgorICAgIC8vIE5vdGUgdGhhdCBqdXN0IGJlY2F1c2UgdGhlIHRyaW1tYWJsZSB3
aWR0aCBpcyAwIChmb250LXNpemU6IDBweCksIGl0IGRvZXMgbm90IG1lYW4gd2UgZG9uJ3QgaGF2
ZSBhIHRyaW1tYWJsZSB0cmFpbGluZyBjb250ZW50LgogICAgIG1faGFzRnVsbHlUcmltbWFibGVD
b250ZW50ID0gdHJ1ZTsKICAgICBtX2ZpcnN0UnVuSW5kZXggPSBtX2ZpcnN0UnVuSW5kZXgudmFs
dWVPcihydW5JbmRleCk7CiB9CiAKIHZvaWQgTGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5n
Q29udGVudDo6YWRkUGFydGlhbGx5VHJpbW1hYmxlQ29udGVudChzaXplX3QgcnVuSW5kZXgsIElu
bGluZUxheW91dFVuaXQgdHJpbW1hYmxlV2lkdGgpCiB7Ci0gICAgLy8gRG8gbm90IGFkZCB0cmlt
bWFibGUgbGV0dGVyIHNwYWNpbmcgYWZ0ZXIgYSBmdWxseSB0cmltbWFibGUgd2hpdGVzYXBjZS4K
KyAgICAvLyBEbyBub3QgYWRkIHRyaW1tYWJsZSBsZXR0ZXIgc3BhY2luZyBhZnRlciBhIGZ1bGx5
IHRyaW1tYWJsZSB3aGl0ZXNwYWNlLgogICAgIEFTU0VSVCghbV9maXJzdFJ1bkluZGV4KTsKICAg
ICBBU1NFUlQoIW1faGFzRnVsbHlUcmltbWFibGVDb250ZW50KTsKICAgICBBU1NFUlQoIW1fcGFy
dGlhbGx5VHJpbW1hYmxlV2lkdGgpOwpAQCAtNDMzLDE0ICs0NDMsMTUgQEAgSW5saW5lTGF5b3V0
VW5pdCBMaW5lQnVpbGRlcjo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50OjpyZW1vdmVQYXJ0aWFs
bHlUcmltbWFibGUKIExpbmVCdWlsZGVyOjpSdW46OlJ1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxp
bmVJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxXaWR0aCkKICAgICA6IG1fdHlwZShpbmxpbmVJdGVtLnR5cGUoKSkKICAgICAsIG1fbGF5
b3V0Qm94KCZpbmxpbmVJdGVtLmxheW91dEJveCgpKQotICAgICwgbV9sb2dpY2FsUmVjdCh7IDAs
IGxvZ2ljYWxMZWZ0LCBsb2dpY2FsV2lkdGgsIDAgfSkKKyAgICAsIG1fbG9naWNhbExlZnQobG9n
aWNhbExlZnQpCisgICAgLCBtX2xvZ2ljYWxXaWR0aChsb2dpY2FsV2lkdGgpCiB7CiB9CiAKIExp
bmVCdWlsZGVyOjpSdW46OlJ1bihjb25zdCBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbSYgc29mdExp
bmVCcmVha0l0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQpCiAgICAgOiBtX3R5cGUo
c29mdExpbmVCcmVha0l0ZW0udHlwZSgpKQogICAgICwgbV9sYXlvdXRCb3goJnNvZnRMaW5lQnJl
YWtJdGVtLmxheW91dEJveCgpKQotICAgICwgbV9sb2dpY2FsUmVjdCh7IDAsIGxvZ2ljYWxMZWZ0
LCAwLCAwIH0pCisgICAgLCBtX2xvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KQogICAgICwgbV90ZXh0
Q29udGVudCh7IHNvZnRMaW5lQnJlYWtJdGVtLnBvc2l0aW9uKCksIDEsIHNvZnRMaW5lQnJlYWtJ
dGVtLmlubGluZVRleHRCb3goKS5jb250ZW50KCksIGZhbHNlIH0pCiB7CiB9CkBAIC00NDgsNyAr
NDU5LDggQEAgTGluZUJ1aWxkZXI6OlJ1bjo6UnVuKGNvbnN0IElubGluZVNvZnRMaW5lQnJlYWtJ
dGVtJiBzb2Z0TGluZUJyZWFrSXRlbSwgSW5saW5lTGEKIExpbmVCdWlsZGVyOjpSdW46OlJ1bihj
b25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lVGV4dEl0ZW0sIElubGluZUxheW91dFVuaXQgbG9n
aWNhbExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoLCBib29sIG5lZWRzSHlwaGVu
KQogICAgIDogbV90eXBlKElubGluZUl0ZW06OlR5cGU6OlRleHQpCiAgICAgLCBtX2xheW91dEJv
eCgmaW5saW5lVGV4dEl0ZW0ubGF5b3V0Qm94KCkpCi0gICAgLCBtX2xvZ2ljYWxSZWN0KHsgMCwg
bG9naWNhbExlZnQsIGxvZ2ljYWxXaWR0aCwgMCB9KQorICAgICwgbV9sb2dpY2FsTGVmdChsb2dp
Y2FsTGVmdCkKKyAgICAsIG1fbG9naWNhbFdpZHRoKGxvZ2ljYWxXaWR0aCkKICAgICAsIG1fdHJh
aWxpbmdXaGl0ZXNwYWNlVHlwZSh0cmFpbGluZ1doaXRlc3BhY2VUeXBlKGlubGluZVRleHRJdGVt
KSkKICAgICAsIG1fdGV4dENvbnRlbnQoeyBpbmxpbmVUZXh0SXRlbS5zdGFydCgpLCBtX3RyYWls
aW5nV2hpdGVzcGFjZVR5cGUgPT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpDb2xsYXBzZWQgPyAxIDog
aW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCksIGlubGluZVRleHRJdGVtLmlubGluZVRleHRCb3goKS5j
b250ZW50KCksIG5lZWRzSHlwaGVuIH0pCiB7CkBAIC00NjYsNyArNDc4LDcgQEAgdm9pZCBMaW5l
QnVpbGRlcjo6UnVuOjpleHBhbmQoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZVRleHRJdGVt
LCBJbmxpbmVMYXlvdXQKICAgICBBU1NFUlQoaXNUZXh0KCkgJiYgaW5saW5lVGV4dEl0ZW0uaXNU
ZXh0KCkpOwogICAgIEFTU0VSVChtX2xheW91dEJveCA9PSAmaW5saW5lVGV4dEl0ZW0ubGF5b3V0
Qm94KCkpOwogCi0gICAgbV9sb2dpY2FsUmVjdC5leHBhbmRIb3Jpem9udGFsbHkobG9naWNhbFdp
ZHRoKTsKKyAgICBtX2xvZ2ljYWxXaWR0aCArPSBsb2dpY2FsV2lkdGg7CiAgICAgbV90cmFpbGlu
Z1doaXRlc3BhY2VUeXBlID0gdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZShpbmxpbmVUZXh0SXRlbSk7
CiAKICAgICBpZiAobV90cmFpbGluZ1doaXRlc3BhY2VUeXBlID09IFRyYWlsaW5nV2hpdGVzcGFj
ZTo6Tm9uZSkgewpAQCAtNTA3LDcgKzUxOSw3IEBAIHZvaWQgTGluZUJ1aWxkZXI6OlJ1bjo6cmVt
b3ZlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCkKIHZvaWQgTGluZUJ1aWxkZXI6OlJ1bjo6cmVtb3Zl
VHJhaWxpbmdXaGl0ZXNwYWNlKCkKIHsKICAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cHM6Ly93d3cu
dzMub3JnL1RSL2Nzcy10ZXh0LTMvI3doaXRlLXNwYWNlLXByb3BlcnR5IG1hdHJpeAotICAgIC8v
IFRyaW1tYWJsZSB3aGl0ZXNwYWNlIGlzIGFsd2F5cyBjb2xsYXBzYWJsZSBzbyB0aGUgbGVuZ3Ro
IG9mIHRoZSB0cmFpbGluZyB0cmltbWFibGUgd2hpdGVzcGFjZSBpcyBhbHdheXMgMSAob3Igbm9u
LWV4aXN0ZW50KS4KKyAgICAvLyBUcmltbWFibGUgd2hpdGVzcGFjZSBpcyBhbHdheXMgY29sbGFw
c2libGUgc28gdGhlIGxlbmd0aCBvZiB0aGUgdHJhaWxpbmcgdHJpbW1hYmxlIHdoaXRlc3BhY2Ug
aXMgYWx3YXlzIDEgKG9yIG5vbi1leGlzdGVudCkuCiAgICAgQVNTRVJUKG1fdGV4dENvbnRlbnQt
Pmxlbmd0aCgpKTsKICAgICBjb25zdGV4cHIgc2l6ZV90IHRyYWlsaW5nVHJpbW1hYmxlQ29udGVu
dExlbmd0aCA9IDE7CiAgICAgbV90ZXh0Q29udGVudC0+c2hyaW5rKHRyYWlsaW5nVHJpbW1hYmxl
Q29udGVudExlbmd0aCk7CkBAIC01NDAsMTEgKzU1MiwxMCBAQCBFeHBhbnNpb25CZWhhdmlvciBM
aW5lQnVpbGRlcjo6UnVuOjpleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0CiAgICAgcmV0dXJuIG1f
ZXhwYW5zaW9uLmJlaGF2aW9yOwogfQogCi12b2lkIExpbmVCdWlsZGVyOjpSdW46OnNldENvbXB1
dGVkSG9yaXpvbnRhbEV4cGFuc2lvbihJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxFeHBhbnNpb24p
Cit2b2lkIExpbmVCdWlsZGVyOjpSdW46OnNldEhvcml6b250YWxFeHBhbnNpb24oSW5saW5lTGF5
b3V0VW5pdCBsb2dpY2FsRXhwYW5zaW9uKQogewogICAgIEFTU0VSVChpc1RleHQoKSk7CiAgICAg
QVNTRVJUKGhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpOwotICAgIG1fbG9naWNhbFJlY3QuZXhw
YW5kSG9yaXpvbnRhbGx5KGxvZ2ljYWxFeHBhbnNpb24pOwogICAgIG1fZXhwYW5zaW9uLmhvcml6
b250YWxFeHBhbnNpb24gPSBsb2dpY2FsRXhwYW5zaW9uOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIu
aAppbmRleCA4ZTRkOTU2MGExMTY3ZDE3MGQ2ODdkNzVjMDExNWQxOWJiYmFhNWRlLi5hNTY3MjZh
ODJkNGI3NWE4ZjljNmNjMjJiNDQ0YTY5MWNmOWEzNDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgK
QEAgLTQxLDM0ICs0MSwyOSBAQCBjbGFzcyBMaW5lQ29udGVudEFsaWduZXI7CiAKIGNsYXNzIExp
bmVCdWlsZGVyIHsKIHB1YmxpYzoKLSAgICBzdHJ1Y3QgQ29uc3RyYWludHMgewotICAgICAgICBJ
bmxpbmVMYXlvdXRQb2ludCBsb2dpY2FsVG9wTGVmdDsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5p
dCBhdmFpbGFibGVMb2dpY2FsV2lkdGggeyAwIH07Ci0gICAgICAgIElubGluZUxheW91dFVuaXQg
bGluZUhlaWdodCB7IDAgfTsKLSAgICAgICAgYm9vbCBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQg
eyBmYWxzZSB9OwotICAgIH07Ci0KICAgICBMaW5lQnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCYpOwogICAgIH5MaW5lQnVpbGRlcigpOwogCi0gICAgdm9pZCBpbml0aWFsaXpl
KGNvbnN0IENvbnN0cmFpbnRzJik7CisgICAgdm9pZCBvcGVuKElubGluZUxheW91dFVuaXQgYXZh
aWxhYmxlTG9naWNhbFdpZHRoKTsKICAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBjbGVhckNv
bnRlbnQoKTsKKworICAgIHZvaWQgc2V0SGFzSW50cnVzaXZlRmxvYXQoYm9vbCBoYXNJbnRydXNp
dmVGbG9hdCkgeyBtX2hhc0ludHJ1c2l2ZUZsb2F0ID0gaGFzSW50cnVzaXZlRmxvYXQ7IH0KKyAg
ICBib29sIGhhc0ludHJ1c2l2ZUZsb2F0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbnRydXNpdmVG
bG9hdDsgfQogCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgSW5saW5lSXRlbSYsIElubGluZUxheW91
dFVuaXQgbG9naWNhbFdpZHRoKTsKICAgICB2b2lkIGFwcGVuZFBhcnRpYWxUcmFpbGluZ1RleHRJ
dGVtKGNvbnN0IElubGluZVRleHRJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgs
IGJvb2wgbmVlZHNIeXBlbik7Ci0gICAgdm9pZCBjbGVhcigpOwotICAgIGJvb2wgaXNWaXN1YWxs
eUVtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94LmlzQ29uc2lkZXJlZEVtcHR5KCk7IH0K
LSAgICBib29sIGhhc0ludHJ1c2l2ZUZsb2F0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbnRydXNp
dmVGbG9hdDsgfQorCisgICAgYm9vbCBpc1Zpc3VhbGx5RW1wdHkoKSBjb25zdCB7IHJldHVybiBt
X2lzVmlzdWFsbHlFbXB0eTsgfQorCiAgICAgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUxvZ2ljYWxXaWR0aCAtIGNvbnRlbnRMb2dpY2FsV2lk
dGgoKTsgfQorICAgIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudExvZ2ljYWxXaWR0aDsgfQogCiAgICAgSW5saW5lTGF5b3V0VW5p
dCB0cmltbWFibGVUcmFpbGluZ1dpZHRoKCkgY29uc3QgeyByZXR1cm4gbV90cmltbWFibGVUcmFp
bGluZ0NvbnRlbnQud2lkdGgoKTsgfQogICAgIGJvb2wgaXNUcmFpbGluZ1J1bkZ1bGx5VHJpbW1h
YmxlKCkgY29uc3QgeyByZXR1cm4gbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQuaXNUcmFpbGlu
Z1J1bkZ1bGx5VHJpbW1hYmxlKCk7IH0KIAotICAgIGNvbnN0IExpbmVCb3gmIGxpbmVCb3goKSBj
b25zdCB7IHJldHVybiBtX2xpbmVCb3g7IH0KLSAgICBMaW5lQm94JiBsaW5lQm94KCkgeyByZXR1
cm4gbV9saW5lQm94OyB9CiAgICAgdm9pZCBtb3ZlTG9naWNhbExlZnQoSW5saW5lTGF5b3V0VW5p
dCk7CiAgICAgdm9pZCBtb3ZlTG9naWNhbFJpZ2h0KElubGluZUxheW91dFVuaXQpOwotICAgIHZv
aWQgc2V0SGFzSW50cnVzaXZlRmxvYXQoKSB7IG1faGFzSW50cnVzaXZlRmxvYXQgPSB0cnVlOyB9
CiAKICAgICBzdHJ1Y3QgUnVuIHsKICAgICAgICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVy
biBtX3R5cGUgPT0gSW5saW5lSXRlbTo6VHlwZTo6VGV4dDsgfQpAQCAtNzksMzggKzc0LDMxIEBA
IHB1YmxpYzoKIAogICAgICAgICBjb25zdCBCb3gmIGxheW91dEJveCgpIGNvbnN0IHsgcmV0dXJu
ICptX2xheW91dEJveDsgfQogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX2xheW91dEJveC0+c3R5bGUoKTsgfQotICAgICAgICBjb25zdCBEaXNwbGF5
OjpJbmxpbmVSZWN0JiBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3Q7
IH0KLSAgICAgICAgRGlzcGxheTo6UnVuOjpFeHBhbnNpb24gZXhwYW5zaW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9leHBhbnNpb247IH0KICAgICAgICAgY29uc3QgT3B0aW9uYWw8RGlzcGxheTo6UnVu
OjpUZXh0Q29udGVudD4mIHRleHRDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q29udGVu
dDsgfQogCi0gICAgICAgIFJ1bihSdW4mJikgPSBkZWZhdWx0OwotICAgICAgICBSdW4mIG9wZXJh
dG9yPShSdW4mJiBvdGhlcikgPSBkZWZhdWx0OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFdpZHRoOyB9CisgICAgICAgIElu
bGluZUxheW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxMZWZ0
OyB9CisKKyAgICAgICAgY29uc3QgRGlzcGxheTo6UnVuOjpFeHBhbnNpb24mIGV4cGFuc2lvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uOyB9CisgICAgICAgIGJvb2wgaGFzRXhwYW5zaW9u
T3Bwb3J0dW5pdHkoKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7
IH0KKyAgICAgICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdDsK
KyAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsgfQorCisgICAgICAgIGJvb2wgaGFzVHJh
aWxpbmdXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1doaXRlc3BhY2VUeXBl
ICE9IFRyYWlsaW5nV2hpdGVzcGFjZTo6Tm9uZTsgfQorICAgICAgICBJbmxpbmVMYXlvdXRVbml0
IHRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1doaXRl
c3BhY2VXaWR0aDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExpbmVC
dWlsZGVyOwotICAgICAgICBmcmllbmQgY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyOwogCiAgICAg
ICAgIFJ1bihjb25zdCBJbmxpbmVUZXh0SXRlbSYsIElubGluZUxheW91dFVuaXQgbG9naWNhbExl
ZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoLCBib29sIG5lZWRzSHlwZW4pOwogICAg
ICAgICBSdW4oY29uc3QgSW5saW5lU29mdExpbmVCcmVha0l0ZW0mLCBJbmxpbmVMYXlvdXRVbml0
IGxvZ2ljYWxMZWZ0KTsKICAgICAgICAgUnVuKGNvbnN0IElubGluZUl0ZW0mLCBJbmxpbmVMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7CiAKICAg
ICAgICAgdm9pZCBleHBhbmQoY29uc3QgSW5saW5lVGV4dEl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0
IGxvZ2ljYWxXaWR0aCk7Ci0KLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LndpZHRoKCk7IH0KLQotICAgICAgICB2b2lk
IG1vdmVIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCBvZmZzZXQpIHsgbV9sb2dpY2FsUmVj
dC5tb3ZlSG9yaXpvbnRhbGx5KG9mZnNldCk7IH0KLSAgICAgICAgdm9pZCBzaHJpbmtIb3Jpem9u
dGFsbHkoSW5saW5lTGF5b3V0VW5pdCB3aWR0aCkgeyBtX2xvZ2ljYWxSZWN0LmV4cGFuZEhvcml6
b250YWxseSgtd2lkdGgpOyB9Ci0KLSAgICAgICAgdm9pZCBhZGp1c3RMb2dpY2FsVG9wKElubGlu
ZUxheW91dFVuaXQgbG9naWNhbFRvcCkgeyBtX2xvZ2ljYWxSZWN0LnNldFRvcChsb2dpY2FsVG9w
KTsgfQotICAgICAgICB2b2lkIG1vdmVWZXJ0aWNhbGx5KElubGluZUxheW91dFVuaXQgb2Zmc2V0
KSB7IG1fbG9naWNhbFJlY3QubW92ZVZlcnRpY2FsbHkob2Zmc2V0KTsgfQotICAgICAgICB2b2lk
IHNldExvZ2ljYWxIZWlnaHQoSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KSB7IG1fbG9n
aWNhbFJlY3Quc2V0SGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOyB9Ci0KLSAgICAgICAgYm9vbCBoYXNF
eHBhbnNpb25PcHBvcnR1bml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudDsgfQotICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcigp
IGNvbnN0OwotICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50OyB9Ci0gICAgICAgIHZvaWQg
c2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9uKElubGluZUxheW91dFVuaXQgbG9naWNhbEV4
cGFuc2lvbik7CisgICAgICAgIHZvaWQgbW92ZUhvcml6b250YWxseShJbmxpbmVMYXlvdXRVbml0
IG9mZnNldCkgeyBtX2xvZ2ljYWxMZWZ0ICs9IG9mZnNldDsgfQorICAgICAgICB2b2lkIHNocmlu
a0hvcml6b250YWxseShJbmxpbmVMYXlvdXRVbml0IHdpZHRoKSB7IG1fbG9naWNhbFdpZHRoIC09
IHdpZHRoOyB9CiAgICAgICAgIHZvaWQgc2V0RXhwYW5zaW9uQmVoYXZpb3IoRXhwYW5zaW9uQmVo
YXZpb3IpOwotCisgICAgICAgIHZvaWQgc2V0SG9yaXpvbnRhbEV4cGFuc2lvbihJbmxpbmVMYXlv
dXRVbml0IGxvZ2ljYWxFeHBhbnNpb24pOwogICAgICAgICB2b2lkIHNldE5lZWRzSHlwaGVuKCkg
eyBtX3RleHRDb250ZW50LT5zZXROZWVkc0h5cGhlbigpOyB9CiAKICAgICAgICAgZW51bSBjbGFz
cyBUcmFpbGluZ1doaXRlc3BhY2UgewpAQCAtMTE5LDEwICsxMDcsOCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBDb2xsYXBzaWJsZSwKICAgICAgICAgICAgIENvbGxhcHNlZAogICAgICAgICB9Owot
ICAgICAgICBib29sIGhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
aWxpbmdXaGl0ZXNwYWNlVHlwZSAhPSBUcmFpbGluZ1doaXRlc3BhY2U6Ok5vbmU7IH0KICAgICAg
ICAgYm9vbCBoYXNDb2xsYXBzaWJsZVRyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZSA9PSBUcmFpbGluZ1doaXRlc3BhY2U6OkNvbGxhcHNp
YmxlIHx8IGhhc0NvbGxhcHNlZFRyYWlsaW5nV2hpdGVzcGFjZSgpOyB9CiAgICAgICAgIGJvb2wg
aGFzQ29sbGFwc2VkVHJhaWxpbmdXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGlu
Z1doaXRlc3BhY2VUeXBlID09IFRyYWlsaW5nV2hpdGVzcGFjZTo6Q29sbGFwc2VkOyB9Ci0gICAg
ICAgIElubGluZUxheW91dFVuaXQgdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoOyB9CiAgICAgICAgIFRyYWlsaW5nV2hpdGVz
cGFjZSB0cmFpbGluZ1doaXRlc3BhY2VUeXBlKGNvbnN0IElubGluZVRleHRJdGVtJikgY29uc3Q7
CiAgICAgICAgIHZvaWQgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIHZvaWQg
dmlzdWFsbHlDb2xsYXBzZVRyYWlsaW5nV2hpdGVzcGFjZSgpOwpAQCAtMTMzLDcgKzExOSw4IEBA
IHB1YmxpYzoKIAogICAgICAgICBJbmxpbmVJdGVtOjpUeXBlIG1fdHlwZSB7IElubGluZUl0ZW06
OlR5cGU6OlRleHQgfTsKICAgICAgICAgY29uc3QgQm94KiBtX2xheW91dEJveCB7IG51bGxwdHIg
fTsKLSAgICAgICAgRGlzcGxheTo6SW5saW5lUmVjdCBtX2xvZ2ljYWxSZWN0OworICAgICAgICBJ
bmxpbmVMYXlvdXRVbml0IG1fbG9naWNhbExlZnQgeyAwIH07CisgICAgICAgIElubGluZUxheW91
dFVuaXQgbV9sb2dpY2FsV2lkdGggeyAwIH07CiAgICAgICAgIFRyYWlsaW5nV2hpdGVzcGFjZSBt
X3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgeyBUcmFpbGluZ1doaXRlc3BhY2U6Ok5vbmUgfTsKICAg
ICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoIHsgMCB9Owog
ICAgICAgICBPcHRpb25hbDxEaXNwbGF5OjpSdW46OlRleHRDb250ZW50PiBtX3RleHRDb250ZW50
OwpAQCAtMTQyLDEzICsxMjksOSBAQCBwdWJsaWM6CiAgICAgfTsKICAgICB1c2luZyBSdW5MaXN0
ID0gVmVjdG9yPFJ1biwgMTA+OwogICAgIGNvbnN0IFJ1bkxpc3QmIHJ1bnMoKSBjb25zdCB7IHJl
dHVybiBtX3J1bnM7IH0KLSAgICBSdW5MaXN0JiBydW5zKCkgeyByZXR1cm4gbV9ydW5zOyB9Ci0K
LSAgICBzdGF0aWMgQXNjZW50QW5kRGVzY2VudCBoYWxmTGVhZGluZ01ldHJpY3MoY29uc3QgRm9u
dE1ldHJpY3MmLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KTsKIAogcHJpdmF0
ZToKLSAgICBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmVCb3gubG9naWNhbFdpZHRoKCk7IH0KLSAgICBJbmxpbmVMYXlvdXRVbml0IGNv
bnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3gubG9naWNhbFJpZ2h0
KCk7IH0KKyAgICBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdCB7
IHJldHVybiBtX2xpbmVMb2dpY2FsTGVmdCArIG1fY29udGVudExvZ2ljYWxXaWR0aDsgfQogCiAg
ICAgc3RydWN0IElubGluZVJ1bkRldGFpbHMgewogICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxXaWR0aCB7IDAgfTsKQEAgLTE2Niw4ICsxNDksNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
cmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCk7CiAgICAgdm9pZCB2aXN1YWxseUNvbGxh
cHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCgpOwogCi0gICAgYm9vbCBpc1Zpc3VhbGx5Tm9uRW1w
dHkoY29uc3QgUnVuJikgY29uc3Q7Ci0KKyAgICBib29sIGlzUnVuVmlzdWFsbHlOb25FbXB0eShj
b25zdCBSdW4mKSBjb25zdDsKICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9y
bWF0dGluZ0NvbnRleHQoKSBjb25zdDsKIAogICAgIHN0cnVjdCBUcmltbWFibGVUcmFpbGluZ0Nv
bnRlbnQgewpAQCAtMTk2LDkgKzE3OCwxMSBAQCBwcml2YXRlOgogICAgIGNvbnN0IElubGluZUZv
cm1hdHRpbmdDb250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OwogICAgIFJ1bkxpc3Qg
bV9ydW5zOwogICAgIFRyaW1tYWJsZVRyYWlsaW5nQ29udGVudCBtX3RyaW1tYWJsZVRyYWlsaW5n
Q29udGVudDsKKyAgICBJbmxpbmVMYXlvdXRVbml0IG1fbGluZUxvZ2ljYWxMZWZ0IHsgMCB9Owog
ICAgIElubGluZUxheW91dFVuaXQgbV9saW5lTG9naWNhbFdpZHRoIHsgMCB9OworICAgIElubGlu
ZUxheW91dFVuaXQgbV9jb250ZW50TG9naWNhbFdpZHRoIHsgMCB9OwogICAgIGJvb2wgbV9oYXNJ
bnRydXNpdmVGbG9hdCB7IGZhbHNlIH07Ci0gICAgTGluZUJveCBtX2xpbmVCb3g7CisgICAgYm9v
bCBtX2lzVmlzdWFsbHlFbXB0eSB7IHRydWUgfTsKICAgICBPcHRpb25hbDxib29sPiBtX2xpbmVJ
c1Zpc3VhbGx5RW1wdHlCZWZvcmVUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ7CiAgICAgYm9vbCBt
X3Nob3VsZElnbm9yZVRyYWlsaW5nTGV0dGVyU3BhY2luZyB7IGZhbHNlIH07CiAjaWYgQVNTRVJU
X0VOQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcAppbmRleCA4MDJiZWRkOGQ3MzE3NTI1ODMz
YTQ3NDA4ZGYxMGQ1NDE3OGIyOTk4Li5kODBmMzBjMjFjNjgwMjhiMzNhM2E0Nzk0YTk4YTlkNzhl
MGE0ZDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9MaW5lTGF5b3V0Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCkBAIC0zMDAsNyArMzAwLDcgQEAgTGlu
ZUxheW91dENvbnRleHQ6OkxpbmVDb250ZW50IExpbmVMYXlvdXRDb250ZXh0OjpsYXlvdXRJbmxp
bmVDb250ZW50KExpbmVCdWlsZGUKICAgICAgICAgLy8gMi4gQXBwbHkgZmxvYXRzIGFuZCBzaHJp
bmsgdGhlIGF2YWlsYWJsZSBob3Jpem9udGFsIHNwYWNlIGUuZy4gPHNwYW4+aW50cnVfPGRpdiBz
dHlsZT0iZmxvYXQ6IGxlZnQiPjwvZGl2PnNpdmVfZmxvYXQ8L3NwYW4+LgogICAgICAgICAvLyAz
LiBDaGVjayBpZiB0aGUgY29udGVudCBmaXRzIHRoZSBsaW5lIGFuZCBjb21taXQgdGhlIGNvbnRl
bnQgYWNjb3JkaW5nbHkgKGZ1bGwsIHBhcnRpYWwgb3Igbm90IGNvbW1pdCBhdCBhbGwpLgogICAg
ICAgICAvLyA0LiBSZXR1cm4gaWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgZWl0aGVy
IGJ5IG5vdCBiZWluZyBhYmxlIHRvIGZpdCBtb3JlIGNvbnRlbnQgb3IgYmVjYXVzZSBvZiBhbiBl
eHBsaWNpdCBsaW5lIGJyZWFrLgotICAgICAgICBuZXh0Q29udGVudEZvckxpbmUobGluZUNhbmRp
ZGF0ZSwgY3VycmVudEl0ZW1JbmRleCwgbGF5b3V0UmFuZ2UsIHBhcnRpYWxMZWFkaW5nQ29udGVu
dExlbmd0aCwgbGluZS5hdmFpbGFibGVXaWR0aCgpICsgbGluZS50cmltbWFibGVUcmFpbGluZ1dp
ZHRoKCksIGxpbmUubGluZUJveCgpLmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgbmV4dENvbnRl
bnRGb3JMaW5lKGxpbmVDYW5kaWRhdGUsIGN1cnJlbnRJdGVtSW5kZXgsIGxheW91dFJhbmdlLCBw
YXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgsIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSArIGxpbmUu
dHJpbW1hYmxlVHJhaWxpbmdXaWR0aCgpLCBsaW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7CiAg
ICAgICAgIC8vIE5vdyBjaGVjayBpZiB3ZSBjYW4gcHV0IHRoaXMgY29udGVudCBvbiB0aGUgY3Vy
cmVudCBsaW5lLgogICAgICAgICBhdXRvIHJlc3VsdCA9IGhhbmRsZUZsb2F0c0FuZElubGluZUNv
bnRlbnQobGluZUJyZWFrZXIsIGxpbmUsIGxheW91dFJhbmdlLCBsaW5lQ2FuZGlkYXRlKTsKICAg
ICAgICAgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50ID0gcmVzdWx0LmNvbW1pdHRlZENvdW50Lmlz
UmV2ZXJ0ID8gcmVzdWx0LmNvbW1pdHRlZENvdW50LnZhbHVlIDogY29tbWl0dGVkSW5saW5lSXRl
bUNvdW50ICsgcmVzdWx0LmNvbW1pdHRlZENvdW50LnZhbHVlOwpAQCAtNDA1LDggKzQwNSw3IEBA
IHZvaWQgTGluZUxheW91dENvbnRleHQ6OmNvbW1pdEZsb2F0cyhMaW5lQnVpbGRlciYgbGluZSwg
Y29uc3QgTGluZUNhbmRpZGF0ZSYgbGluCiAgICAgICAgICAgICAgICAgcmlnaHRJbnRydXNpdmVG
bG9hdHNXaWR0aCArPSBmbG9hdENhbmRpZGF0ZS5sb2dpY2FsV2lkdGg7CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgaWYgKGhhc0ludHJ1c2l2ZUZsb2F0KQotICAgICAgICBsaW5lLnNldEhhc0ludHJ1
c2l2ZUZsb2F0KCk7CisgICAgbGluZS5zZXRIYXNJbnRydXNpdmVGbG9hdChoYXNJbnRydXNpdmVG
bG9hdCk7CiAgICAgaWYgKGxlZnRJbnRydXNpdmVGbG9hdHNXaWR0aCB8fCByaWdodEludHJ1c2l2
ZUZsb2F0c1dpZHRoKSB7CiAgICAgICAgIGlmIChsZWZ0SW50cnVzaXZlRmxvYXRzV2lkdGgpCiAg
ICAgICAgICAgICBsaW5lLm1vdmVMb2dpY2FsTGVmdChsZWZ0SW50cnVzaXZlRmxvYXRzV2lkdGgp
OwpAQCAtNTA1LDcgKzUwNCw3IEBAIHZvaWQgTGluZUxheW91dENvbnRleHQ6OmNvbW1pdFBhcnRp
YWxDb250ZW50KExpbmVCdWlsZGVyJiBsaW5lLCBjb25zdCBMaW5lQnJlYWtlCiBzaXplX3QgTGlu
ZUxheW91dENvbnRleHQ6OnJlYnVpbGRMaW5lKExpbmVCdWlsZGVyJiBsaW5lLCBjb25zdCBJbmxp
bmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlKQogewogICAgIC8vIENsZWFyIHRoZSBsaW5lIGFuZCBz
dGFydCBhcHBlbmRpbmcgdGhlIGlubGluZSBpdGVtcyBjbG9zaW5nIHdpdGggdGhlIGxhc3Qgd3Jh
cCBvcHBvcnR1bml0eSBydW4uCi0gICAgbGluZS5jbGVhcigpOworICAgIGxpbmUuY2xlYXJDb250
ZW50KCk7CiAgICAgYXV0byBjdXJyZW50SXRlbUluZGV4ID0gbGF5b3V0UmFuZ2Uuc3RhcnQ7CiAg
ICAgYXV0byBsb2dpY2FsUmlnaHQgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKICAgICBpZiAobV9w
YXJ0aWFsTGVhZGluZ1RleHRJdGVtKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407403</attachid>
            <date>2020-08-27 08:54:36 -0700</date>
            <delta_ts>2020-08-27 09:17:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215068-20200827085435.patch</filename>
            <type>text/plain</type>
            <size>30221</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg4ODkyYTYyZDhmOGVm
NzcxMGJhMjg2NDg1NDNhZTA0YzhmMDYyZC4uMjhmMWVlNTIzMDNjYmVhNWM4ZjA2NmQ1MjZlNTkw
ZTA5ZDk1MzZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDIwLTA4LTI2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBMaW5lQnVp
bGRlcjpSdW4gc2hvdWxkIG5vdCBoYXZlIHZlcnRpY2FsIGdlb21ldHJ5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwNjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBTaW5jZSBMaW5lQnVpbGRlciBvbmx5
IHRha2VzIGNhcmUgb2YgdGhlIGhvcml6b250YWwgYXNjcGVjdCBvZiBhIHJ1biwgTGluZUJ1aWxk
ZXI6OlJ1biBzaG91bGQgb25seSBoYXZlIGxvZ2ljYWwgbGVmdCBhbmQgd2lkdGggZ2VvbWV0cnku
CisgICAgICAgIFRoZSB2ZXJ0aWNhbCBnZW9tZXRyeSBpcyBjb21wdXRlZCBhcyBwYXJ0IG9mIHRo
ZSBjb250ZW50IGFsaWdubWVudCBwaGFzZSBpbiBMaW5lQ29udGVudEFsaWduZXIgKGFsb25nIHdp
dGggdGhlIGZpbmFsIGhvcml6b250YWwgcG9zaXRpb24KKyAgICAgICAgYWRqdXN0ZWQgd2l0aCB0
aGUgYWxpZ25tZW50KS4KKyAgICAgICAgVGhpcyBpcyBzdGlsbCBhIHRyYW5zaXRpb25hbCBzdGF0
ZSAoc2VlIElubGluZVJ1blJlY3RMaXN0IG1fcnVuUmVjdExpc3QpIGFuZCBhbGwgdGhlIGxpbmUg
Ym94IHJlbGF0ZWQgY29kZSB3aWxsIGdldCBtb3ZlZCB0byB0aGUgTGluZUJveCBjbGFzcy4KKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIGVuYWJsZXMgdXMgdG8ga2VlcCBMaW5lQnVpbGRlcjo6UnVu
IGNvbnN0LgorCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFs
aWduZXI6OmlubGluZVJlY3RMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUNvbnRlbnRBbGlnbmVyOjpMaW5lQ29udGVudEFsaWduZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFsaWduSG9yaXpvbnRhbGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphbGlnblZlcnRpY2FsbHkp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFkanVzdEJh
c2VsaW5lQW5kTGluZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5zKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpydW5D
b250ZW50SGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJ1aWxkZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OnZpc3VhbGx5Q29sbGFwc2VQcmVXcmFwT3ZlcmZsb3dDb250ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVu
dDo6YWRkRnVsbHlUcmltbWFibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6YWRkUGFydGlhbGx5VHJpbW1h
YmxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46
OlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmV4cGFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OnJlbW92ZVRy
YWlsaW5nV2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpSdW46OnNldEhvcml6b250YWxFeHBhbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjptX3RleHRDb250ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OlJ1bjo6c2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpzdHlsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmxvZ2ljYWxXaWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46Omxv
Z2ljYWxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6
OlJ1bjo6ZXhwYW5zaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OlJ1bjo6aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6aGFz
VHJhaWxpbmdXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OlJ1bjo6dHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjptb3ZlSG9yaXpvbnRhbGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6c2hyaW5rSG9yaXpvbnRh
bGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6aGFzQ29s
bGFwc2VkVHJhaWxpbmdXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OnJ1bnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6UnVuOjpsb2dpY2FsUmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmFkanVzdExvZ2ljYWxUb3ApOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjptb3ZlVmVy
dGljYWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpSdW46OnNldExvZ2ljYWxIZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQnVpbGRlcjo6cnVucyk6IERlbGV0ZWQuCisKIDIwMjAtMDgtMjYgIFphbGFuIEJ1
anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIE1vdmUgTGluZUJv
eCBvdXQgb2YgTGluZUJ1aWxkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApp
bmRleCAyYTgyOTExNTdiMDgzYjY0N2Q5YWIzNTU0NWY3M2QxYTcxYzRiNTc1Li4yYzcwNTQ1ZjY0
OGE4ZTY3MDc5NGZmOWE2ZTI3ZmE4NzA3NjQ2MDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCkBAIC05OSwzMyArOTksNTQgQEAgdm9pZCBIYW5naW5nQ29udGVudDo6cmVz
ZXQoKQogCiBjbGFzcyBMaW5lQ29udGVudEFsaWduZXIgewogcHVibGljOgotICAgIExpbmVDb250
ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIExpbmVCb3gmLCBMaW5l
QnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOworICAg
IExpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIExpbmVC
b3gmLCBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxheW91dFVuaXQgYXZhaWxh
YmxlV2lkdGgpOwogCiAgICAgZW51bSBjbGFzcyBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQg
eyBObywgWWVzIH07CiAgICAgdm9pZCBhbGlnbkhvcml6b250YWxseShUZXh0QWxpZ25Nb2RlLCBJ
c0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwogICAgIHZvaWQgYWxpZ25WZXJ0aWNhbGx5KCk7
CiAgICAgdm9pZCBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsKIAorICAgIHVzaW5nIElu
bGluZVJ1blJlY3RMaXN0ID0gVmVjdG9yPERpc3BsYXk6OklubGluZVJlY3QsIDEwPjsKKyAgICBj
b25zdCBJbmxpbmVSdW5SZWN0TGlzdCYgaW5saW5lUmVjdExpc3QoKSBjb25zdCB7IHJldHVybiBt
X3J1blJlY3RMaXN0OyB9CisKIHByaXZhdGU6Ci0gICAgdm9pZCBqdXN0aWZ5UnVucyhJbmxpbmVM
YXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKICAgICBIYW5naW5nQ29udGVudCBjb2xsZWN0SGFu
Z2luZ0NvbnRlbnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KSBjb25zdDsKLSAgICBJbmxp
bmVMYXlvdXRVbml0IHJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgTGluZUJ1aWxkZXI6OlJ1biYpIGNv
bnN0OwogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsgfQogICAgIExh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0
KCkubGF5b3V0U3RhdGUoKTsgfQogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQm
IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CiAgICAgTGluZUJveCYgbV9saW5lQm94OwotICAg
IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBtX3J1bnM7CisgICAgY29uc3QgTGluZUJ1aWxkZXI6OlJ1
bkxpc3QmIG1fcnVuczsKKyAgICBJbmxpbmVSdW5SZWN0TGlzdCBtX3J1blJlY3RMaXN0OwogICAg
IElubGluZUxheW91dFVuaXQgbV9hdmFpbGFibGVXaWR0aDsKIH07CiAKLUxpbmVDb250ZW50QWxp
Z25lcjo6TGluZUNvbnRlbnRBbGlnbmVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBp
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgTGluZUJveCYgbGluZUJveCwgTGluZUJ1aWxkZXI6OlJ1
bkxpc3QmIHJ1bnMsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpCitMaW5lQ29udGVu
dEFsaWduZXI6OkxpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmVC
dWlsZGVyOjpSdW5MaXN0JiBydW5zLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQog
ICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkK
ICAgICAsIG1fbGluZUJveChsaW5lQm94KQogICAgICwgbV9ydW5zKHJ1bnMpCiAgICAgLCBtX2F2
YWlsYWJsZVdpZHRoKGF2YWlsYWJsZVdpZHRoKQogeworICAgIGZvciAoYXV0byYgcnVuIDogbV9y
dW5zKSB7CisgICAgICAgIGF1dG8gcnVuSGVpZ2h0ID0gWyZdKCkgLT4gSW5saW5lTGF5b3V0VW5p
dCB7CisgICAgICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZvbnRNZXRy
aWNzKCk7CisgICAgICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKKworICAgICAg
ICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOworCisgICAgICAg
ICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CisgICAgICAgICAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGlubGluZUZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxh
eW91dEJveCk7CisgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSB8fCBs
YXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
Ym94R2VvbWV0cnkuY29udGVudEJveEhlaWdodCgpOworCisgICAgICAgICAgICAvLyBOb24tcmVw
bGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJpdCBtaXNs
ZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRlbnQgaGVp
Z2h0IGhlcmUuCisgICAgICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0
KCk7CisgICAgICAgIH07CisgICAgICAgIG1fcnVuUmVjdExpc3QuYXBwZW5kKHsgMCwgcnVuLmxv
Z2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2FsV2lkdGgoKSwgcnVuSGVpZ2h0KCkgfSk7CisgICAgfQog
fQogCiB2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25Ib3Jpem9udGFsbHkoVGV4dEFsaWdu
TW9kZSBob3Jpem9udGFsQWxpZ25tZW50LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNM
YXN0TGluZSkKQEAgLTEzNiw3ICsxNTcsMTQgQEAgdm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFs
aWduSG9yaXpvbnRhbGx5KFRleHRBbGlnbk1vZGUgaG9yaXpvbnRhbEFsaWdubWVudCwgSXMKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGhvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWdu
TW9kZTo6SnVzdGlmeSkgewotICAgICAgICBqdXN0aWZ5UnVucyhhdmFpbGFibGVXaWR0aCk7Cisg
ICAgICAgIGF1dG8gYWNjdW11bGF0ZWRFeHBhbnNpb24gPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsK
KyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fcnVucy5zaXplKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgICAgIG1fcnVuUmVjdExpc3RbaW5kZXhdLm1vdmVIb3Jpem9udGFs
bHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOworCisgICAgICAgICAgICBhdXRvIGhvcml6b250YWxF
eHBhbnNpb24gPSBtX3J1bnNbaW5kZXhdLmV4cGFuc2lvbigpLmhvcml6b250YWxFeHBhbnNpb247
CisgICAgICAgICAgICBtX3J1blJlY3RMaXN0W2luZGV4XS5leHBhbmRIb3Jpem9udGFsbHkoaG9y
aXpvbnRhbEV4cGFuc2lvbik7CisgICAgICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lvbiArPSBo
b3Jpem9udGFsRXhwYW5zaW9uOworICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTE2MSwyMiArMTg5LDE4IEBAIHZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGlnbkhvcml6
b250YWxseShUZXh0QWxpZ25Nb2RlIGhvcml6b250YWxBbGlnbm1lbnQsIElzCiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfTsKIAotICAgIGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRGb3JB
bGlnbm1lbnQoYXZhaWxhYmxlV2lkdGgpOwotICAgIGlmICghYWRqdXN0bWVudCkKLSAgICAgICAg
cmV0dXJuOwotICAgIC8vIEhvcml6b250YWwgYWxpZ25tZW50IG1lYW5zIHRoYXQgd2Ugbm90IG9u
bHkgYWRqdXN0IHRoZSBydW5zIGJ1dCBhbHNvIG1ha2Ugc3VyZQotICAgIC8vIHRoYXQgdGhlIGxp
bmUgYm94IGlzIGFsaWduZWQgYXMgd2VsbAotICAgIC8vIGUuZy4gPGRpdiBzdHlsZT0idGV4dC1h
bGlnbjogY2VudGVyOyB3aWR0aDogMTAwcHg7Ij5jZW50ZXJlZCB0ZXh0PC9kaXY+IDogdGhlIGxp
bmUgYm94IHdpbGwgYWxzbyBiZSBjZW50ZXJlZAotICAgIC8vIGFzIG9wcG9zZWQgdG8gc3RhcnQg
YXQgMHB4IGFsbCB0aGUgd2F5IHRvIFtjZW50ZXJlZCB0ZXh0XSBydW4ncyByaWdodCBlZGdlLgot
ICAgIG1fbGluZUJveC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLSAgICBmb3IgKGF1
dG8mIHJ1biA6IG1fcnVucykKLSAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1l
bnQpOworICAgIGlmIChhdXRvIGFkanVzdG1lbnQgPSBhZGp1c3RtZW50Rm9yQWxpZ25tZW50KGF2
YWlsYWJsZVdpZHRoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHJ1blJlY3QgOiBtX3J1blJlY3RM
aXN0KQorICAgICAgICAgICAgcnVuUmVjdC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsK
KyAgICB9CiB9CiAKIHZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGlnblZlcnRpY2FsbHkoKQog
ewogICAgIGF1dG8gc2Nyb2xsYWJsZU92ZXJmbG93UmVjdCA9IG1fbGluZUJveC5sb2dpY2FsUmVj
dCgpOwotICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CisgICAgZm9yIChzaXplX3QgaW5k
ZXggPSAwOyBpbmRleCA8IG1fcnVucy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byYg
cnVuID0gbV9ydW5zW2luZGV4XTsKKyAgICAgICAgYXV0byYgcnVuUmVjdCA9IG1fcnVuUmVjdExp
c3RbaW5kZXhdOwogICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsg
fTsKICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwogICAgICAgICBh
dXRvIHZlcnRpY2FsQWxpZ24gPSBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7CkBA
IC0yMTAsNjYgKzIzNCwyOSBAQCB2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25WZXJ0aWNh
bGx5KCkKICAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVudEJh
c2VsaW5lKCkgLSBiYXNlbGluZUZyb21NYXJnaW5Cb3g7CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5n
ZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBt
X2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAtIChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRl
cigpICsgYm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwX2x1KSArIHJ1bi5s
b2dpY2FsUmVjdCgpLmhlaWdodCgpICsgYm94R2VvbWV0cnkubWFyZ2luQWZ0ZXIoKSk7CisgICAg
ICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0g
KGJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBib3hHZW9tZXRyeS52ZXJ0aWNhbFBhZGRp
bmcoKS52YWx1ZU9yKDBfbHUpICsgcnVuUmVjdC5oZWlnaHQoKSArIGJveEdlb21ldHJ5Lm1hcmdp
bkFmdGVyKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgVmVydGljYWxBbGlnbjo6VG9wOgogICAgICAgICAgICAgbG9naWNhbFRvcCA9IDBfbHU7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206Ci0g
ICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmxvZ2ljYWxCb3R0b20oKSAtIHJ1bi5s
b2dpY2FsUmVjdCgpLmhlaWdodCgpOworICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJv
eC5sb2dpY2FsQm90dG9tKCkgLSBydW5SZWN0LmhlaWdodCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lF
VCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgcnVuLmFkanVzdExv
Z2ljYWxUb3AobG9naWNhbFRvcCk7CisgICAgICAgIHJ1blJlY3Quc2V0VG9wKGxvZ2ljYWxUb3Ap
OwogICAgICAgICAvLyBBZGp1c3Qgc2Nyb2xsYWJsZSBvdmVyZmxvdyBpZiB0aGUgcnVuIG92ZXJm
bG93cyB0aGUgbGluZS4KLSAgICAgICAgc2Nyb2xsYWJsZU92ZXJmbG93UmVjdC5leHBhbmRWZXJ0
aWNhbGx5VG9Db250YWluKHJ1bi5sb2dpY2FsUmVjdCgpKTsKKyAgICAgICAgc2Nyb2xsYWJsZU92
ZXJmbG93UmVjdC5leHBhbmRWZXJ0aWNhbGx5VG9Db250YWluKHJ1blJlY3QpOwogICAgICAgICAv
LyBDb252ZXJ0IHJ1bnMgZnJvbSByZWxhdGl2ZSB0byB0aGUgbGluZSB0b3AvbGVmdCB0byB0aGUg
Zm9ybWF0dGluZyByb290J3MgYm9yZGVyIGJveCB0b3AvbGVmdC4KLSAgICAgICAgcnVuLm1vdmVW
ZXJ0aWNhbGx5KG1fbGluZUJveC5sb2dpY2FsVG9wKCkpOwotICAgICAgICBydW4ubW92ZUhvcml6
b250YWxseShtX2xpbmVCb3gubG9naWNhbExlZnQoKSk7CisgICAgICAgIHJ1blJlY3QubW92ZVZl
cnRpY2FsbHkobV9saW5lQm94LmxvZ2ljYWxUb3AoKSk7CisgICAgICAgIHJ1blJlY3QubW92ZUhv
cml6b250YWxseShtX2xpbmVCb3gubG9naWNhbExlZnQoKSk7CiAgICAgfQogICAgIG1fbGluZUJv
eC5zZXRTY3JvbGxhYmxlT3ZlcmZsb3coc2Nyb2xsYWJsZU92ZXJmbG93UmVjdCk7CiB9CiAKLXZv
aWQgTGluZUNvbnRlbnRBbGlnbmVyOjpqdXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWls
YWJsZVdpZHRoKQotewotICAgIEFTU0VSVChhdmFpbGFibGVXaWR0aCA+IDApOwotICAgIC8vIENv
bGxlY3QgdGhlIGV4cGFuc2lvbiBvcHBvcnR1bml0eSBudW1iZXJzIGFuZCBmaW5kIHRoZSBsYXN0
IHJ1biB3aXRoIGNvbnRlbnQuCi0gICAgYXV0byBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0g
MDsKLSAgICBMaW5lQnVpbGRlcjo6UnVuKiBsYXN0UnVuV2l0aENvbnRlbnQgPSBudWxscHRyOwot
ICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7Ci0gICAgICAgIGV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQgKz0gcnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKTsKLSAgICAgICAgaWYg
KHJ1bi5pc1RleHQoKSB8fCBydW4uaXNCb3goKSkKLSAgICAgICAgICAgIGxhc3RSdW5XaXRoQ29u
dGVudCA9ICZydW47Ci0gICAgfQotICAgIC8vIE5lZWQgdG8gZml4IHVwIHRoZSBsYXN0IHJ1bidz
IHRyYWlsaW5nIGV4cGFuc2lvbi4KLSAgICBpZiAobGFzdFJ1bldpdGhDb250ZW50ICYmIGxhc3RS
dW5XaXRoQ29udGVudC0+aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkgewotICAgICAgICAvLyBU
dXJuIG9mZiB0aGUgdHJhaWxpbmcgYml0cyBmaXJzdCBhbmQgYWRkIHRoZSBmb3JiaWQgdHJhaWxp
bmcgZXhwYW5zaW9uLgotICAgICAgICBhdXRvIGxlZnRFeHBhbnNpb24gPSBsYXN0UnVuV2l0aENv
bnRlbnQtPmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBMZWZ0RXhwYW5zaW9uTWFzazsKLSAgICAgICAg
bGFzdFJ1bldpdGhDb250ZW50LT5zZXRFeHBhbnNpb25CZWhhdmlvcihsZWZ0RXhwYW5zaW9uIHwg
Rm9yYmlkUmlnaHRFeHBhbnNpb24pOwotICAgIH0KLSAgICAvLyBOb3RoaW5nIHRvIGRpc3RyaWJ1
dGU/Ci0gICAgaWYgKCFleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KQotICAgICAgICByZXR1cm47
Ci0gICAgLy8gRGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3BhY2UuCi0gICAgYXV0byBleHBhbnNpb25U
b0Rpc3RyaWJ1dGUgPSBhdmFpbGFibGVXaWR0aCAvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7
Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBhY2N1bXVsYXRlZEV4cGFuc2lvbiA9IDA7Ci0gICAgZm9y
IChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAgLy8gRXhwYW5kIGFuZCBtb3ZlcyBydW5z
IGJ5IHRoZSBhY2N1bXVsYXRlZCBleHBhbnNpb24uCi0gICAgICAgIGlmICghcnVuLmhhc0V4cGFu
c2lvbk9wcG9ydHVuaXR5KCkpIHsKLSAgICAgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KGFj
Y3VtdWxhdGVkRXhwYW5zaW9uKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g
ICAgICAgIEFTU0VSVChydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpKTsKLSAgICAgICAg
YXV0byBjb21wdXRlZEV4cGFuc2lvbiA9IGV4cGFuc2lvblRvRGlzdHJpYnV0ZSAqIHJ1bi5leHBh
bnNpb25PcHBvcnR1bml0eUNvdW50KCk7Ci0gICAgICAgIHJ1bi5zZXRDb21wdXRlZEhvcml6b250
YWxFeHBhbnNpb24oY29tcHV0ZWRFeHBhbnNpb24pOwotICAgICAgICBydW4ubW92ZUhvcml6b250
YWxseShhY2N1bXVsYXRlZEV4cGFuc2lvbik7Ci0gICAgICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9u
ICs9IGNvbXB1dGVkRXhwYW5zaW9uOwotICAgIH0KLX0KLQogdm9pZCBMaW5lQ29udGVudEFsaWdu
ZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgpCiB7CiAgICAgdW5zaWduZWQgaW5saW5l
Q29udGFpbmVyTmVzdGluZ0xldmVsID0gMDsKQEAgLTI3Nyw5ICsyNjQsNiBAQCB2b2lkIExpbmVD
b250ZW50QWxpZ25lcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCkKICAgICBmb3IgKGF1
dG8mIHJ1biA6IG1fcnVucykgewogICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0
Qm94KCk7CiAgICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0KLSAgICAg
ICAgcnVuLnNldExvZ2ljYWxIZWlnaHQocnVuQ29udGVudEhlaWdodChydW4pKTsKLQogICAgICAg
ICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKSB7CiAgICAgICAgICAgICBp
ZiAoaW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsKSB7CiAgICAgICAgICAgICAgICAgLy8gV2Un
dmUgYWxyZWFkeSBhZGp1c3RlZCB0aGUgbGluZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3VnaCB0aGUg
cGFyZW50IGlubGluZSBjb250YWluZXIuIApAQCAtMzg1LDI0ICszNjksNiBAQCBIYW5naW5nQ29u
dGVudCBMaW5lQ29udGVudEFsaWduZXI6OmNvbGxlY3RIYW5naW5nQ29udGVudChJc0xhc3RMaW5l
V2l0aElubGluZUNvbgogICAgIHJldHVybiBoYW5naW5nQ29udGVudDsKIH0KIAotSW5saW5lTGF5
b3V0VW5pdCBMaW5lQ29udGVudEFsaWduZXI6OnJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgTGluZUJ1
aWxkZXI6OlJ1biYgcnVuKSBjb25zdAotewotICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gcnVuLnN0
eWxlKCkuZm9udE1ldHJpY3MoKTsKLSAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVC
cmVhaygpKQotICAgICAgICByZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0KLSAgICBpZiAo
cnVuLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkKLSAgICAgICAg
cmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOwotCi0gICAgYXV0byYgbGF5b3V0Qm94ID0gcnVu
LmxheW91dEJveCgpOwotICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQo
KS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNl
ZEJveCgpIHx8IGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICByZXR1
cm4gYm94R2VvbWV0cnkuY29udGVudEJveEhlaWdodCgpOwotCi0gICAgLy8gTm9uLXJlcGxhY2Vk
IGlubGluZSBib3ggKGUuZy4gaW5saW5lLWJsb2NrKS4gSXQgbG9va3MgYSBiaXQgbWlzbGVhZGlu
ZyBidXQgdGhlaXIgbWFyZ2luIGJveCBpcyBjb25zaWRlcmVkIHRoZSBjb250ZW50IGhlaWdodCBo
ZXJlLgotICAgIHJldHVybiBib3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKLX0KLQogdm9p
ZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93Q29udGVudChJbnZhbGlkYXRp
b25TdGF0ZSYgaW52YWxpZGF0aW9uU3RhdGUsIGNvbnN0IENvbnN0cmFpbnRzRm9ySW5GbG93Q29u
dGVudCYgY29uc3RyYWludHMpCiB7CiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250
ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltTdGFydF0gLT4gaW5saW5lIGZvcm1hdHRpbmcgY29udGV4
dCAtPiBmb3JtYXR0aW5nIHJvb3QoIiA8PCAmcm9vdCgpIDw8ICIpIik7CkBAIC00ODIsOCArNDQ4
LDggQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJdGVt
cyYgaW5saW5lSXRlbXMsIExpbmVMYXlvdXRDb24KICAgICAgICAgYXV0byBsaW5lQm94ID0gTGlu
ZUJveCB7IERpc3BsYXk6OklubGluZVJlY3QgeyBsaW5lQ29uc3RyYWludHMubG9naWNhbFRvcExl
ZnQsIGxpbmUuY29udGVudExvZ2ljYWxXaWR0aCgpLCBsaW5lQ29uc3RyYWludHMubGluZUhlaWdo
dCB9LCBMaW5lQm94OjpoYWxmTGVhZGluZ01ldHJpY3Mocm9vdCgpLnN0eWxlKCkuZm9udE1ldHJp
Y3MoKSwgbGluZUNvbnN0cmFpbnRzLmxpbmVIZWlnaHQpIH07CiAKICAgICAgICAgLy8gRklYTUU6
IFRoaXMgaXMgdGVtcG9yYXJ5IGFuZCB3aWxsIGV2ZW50dWFsbHkgZ2V0IG1lcmdlZCB0byBMaW5l
Qm94LgorICAgICAgICBhdXRvIGNvbnRlbnRBbGlnbmVyID0gTGluZUNvbnRlbnRBbGlnbmVyIHsg
KnRoaXMsIGxpbmVCb3gsIGxpbmUucnVucygpLCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgfTsKICAg
ICAgICAgYXV0byBhbGlnbkxpbmVDb250ZW50ID0gWyZdIHsKLSAgICAgICAgICAgIGF1dG8gY29u
dGVudEFsaWduZXIgPSBMaW5lQ29udGVudEFsaWduZXIgeyAqdGhpcywgbGluZUJveCwgbGluZS5y
dW5zKCksIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSB9OwogICAgICAgICAgICAgY29udGVudEFsaWdu
ZXIuYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCk7CiAgICAgICAgICAgICBpZiAobGluZS5p
c1Zpc3VhbGx5RW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGxpbmVCb3gucmVzZXRBbGlnbm1l
bnRCYXNlbGluZSgpOwpAQCAtNTI1LDcgKzQ5MSw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zLCBMaW5lTGF5b3V0Q29u
CiAgICAgICAgIH07CiAKICAgICAgICAgYWxpZ25MaW5lQ29udGVudCgpOwotICAgICAgICBzZXRE
aXNwbGF5Qm94ZXNGb3JMaW5lKGxpbmUsIGxpbmVCb3gsIGxpbmVDb250ZW50LCBjb25zdHJhaW50
cy5ob3Jpem9udGFsKTsKKyAgICAgICAgc2V0RGlzcGxheUJveGVzRm9yTGluZShsaW5lLCBjb250
ZW50QWxpZ25lci5pbmxpbmVSZWN0TGlzdCgpLCBsaW5lQm94LCBsaW5lQ29udGVudCwgY29uc3Ry
YWludHMuaG9yaXpvbnRhbCk7CiAKICAgICAgICAgaWYgKCFsaW5lQ29udGVudFJhbmdlLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgQVNTRVJUKG5lZWRzTGF5b3V0UmFuZ2Uuc3RhcnQgPCBsaW5l
Q29udGVudFJhbmdlLmVuZCk7CkBAIC04MzcsNyArODAzLDcgQEAgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OkxpbmVDb25zdHJhaW50cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29uc3RyYWlu
dHNGb3IKICAgICByZXR1cm4gTGluZUNvbnN0cmFpbnRzIHsgeyBsaW5lTG9naWNhbExlZnQsIGxp
bmVMb2dpY2FsVG9wIH0sIGxpbmVMb2dpY2FsUmlnaHQgLSBsaW5lTG9naWNhbExlZnQsIGluaXRp
YWxMaW5lSGVpZ2h0LCBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgfTsKIH0KIAotdm9pZCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVp
bGRlciYgbGluZSwgY29uc3QgTGluZUJveCYgbGluZUJveCwgIGNvbnN0IExpbmVMYXlvdXRDb250
ZXh0OjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50
cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlciYgbGluZSwgY29uc3QgTGlu
ZUNvbnRlbnRBbGlnbmVyOjpJbmxpbmVSdW5SZWN0TGlzdCYgcnVuUmVjdExpc3QsIGNvbnN0IExp
bmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCYgbGlu
ZUNvbnRlbnQsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFp
bnRzKQogewogICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0
ZSgpOwogCkBAIC04NjcsOSArODMzLDkgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlciYgbGluZSwgY28KICAgICBh
dXRvIGxpbmVJbmtPdmVyZmxvdyA9IGxpbmVCb3guc2Nyb2xsYWJsZU92ZXJmbG93KCk7CiAgICAg
Ly8gQ29tcHV0ZSBib3ggZmluYWwgZ2VvbWV0cnkuCiAgICAgYXV0byYgbGluZVJ1bnMgPSBsaW5l
LnJ1bnMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBsaW5lUnVucy5z
aXplKCk7ICsraW5kZXgpIHsKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbGlu
ZVJ1bnMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGF1dG8mIGxpbmVSdW4gPSBsaW5lUnVu
cy5hdChpbmRleCk7Ci0gICAgICAgIGF1dG8mIGxvZ2ljYWxSZWN0ID0gbGluZVJ1bi5sb2dpY2Fs
UmVjdCgpOworICAgICAgICBhdXRvIGxvZ2ljYWxSZWN0ID0gcnVuUmVjdExpc3RbaW5kZXhdOwog
ICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxheW91dEJveCgpOwogCiAgICAgICAg
IC8vIEFkZCBmaW5hbCBkaXNwbGF5IHJ1bnMgdG8gc3RhdGUgZmlyc3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQuaAppbmRleCAwM2U0ZmI2YThhYTZjODViNjkwMDM5NWUzZTk3YmM0ZTkx
NjI4ZmFkLi4zMzk1NDQwOTI5NmI5YTBhYWU4NjhhNWM5NGNjMmQwNWJmN2E2NmYzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgYm9vbCBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgeyBmYWxzZSB9OwogICAgIH07CiAg
ICAgTGluZUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzRm9yTGluZShjb25zdCBIb3Jpem9udGFsQ29u
c3RyYWludHMmLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsVG9wKTsKLSAgICB2b2lkIHNl
dERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXImLCBjb25zdCBMaW5lQm94Jiwg
Y29uc3QgTGluZUxheW91dENvbnRleHQ6OkxpbmVDb250ZW50JiwgY29uc3QgSG9yaXpvbnRhbENv
bnN0cmFpbnRzJik7CisgICAgdm9pZCBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVC
dWlsZGVyJiwgY29uc3QgVmVjdG9yPERpc3BsYXk6OklubGluZVJlY3QsIDEwPiYsIGNvbnN0IExp
bmVCb3gmLCBjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6TGluZUNvbnRlbnQmLCBjb25zdCBIb3Jp
em9udGFsQ29uc3RyYWludHMmKTsKICAgICB2b2lkIGludmFsaWRhdGVGb3JtYXR0aW5nU3RhdGUo
Y29uc3QgSW52YWxpZGF0aW9uU3RhdGUmKTsKIAogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdT
dGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9y
bWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVMaW5lQnVpbGRlci5jcHAKaW5kZXggNjQ1MjY2MTM3OGY2NmZlM2JmNWU2YTQ2MzVhMjQ0
NjFjYjBlYWM5MC4uOTAzODRiOTk2ZTY3ZDY0NDZjZGI4OTg4OTU2OTczNTg4MTJjNDY2YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCdWlsZGVyLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIklubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW5saW5lU29mdExpbmVCcmVha0l0ZW0u
aCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiVGV4dEZs
YWdzLmgiCiAjaW5jbHVkZSAiVGV4dFV0aWwuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgogCkBAIC03OSw2ICs4MCwzNyBAQCB2b2lkIExpbmVCdWlsZGVyOjpjbG9zZSgpCiAj
ZW5kaWYKICAgICByZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQoKTsKICAgICB2aXN1YWxs
eUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCgpOworCisgICAgYXV0byBjb21wdXRlRXhw
YW5zaW9uRm9yUnVuc0lmTmVlZGVkID0gWyZdIHsKKyAgICAgICAgaWYgKGZvcm1hdHRpbmdDb250
ZXh0KCkucm9vdCgpLnN0eWxlKCkudGV4dEFsaWduKCkgIT0gVGV4dEFsaWduTW9kZTo6SnVzdGlm
eSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQgPSAwOworICAgICAgICBSdW4qIGxhc3RSdW5XaXRoQ29udGVudCA9IG51bGxwdHI7
CisgICAgICAgIC8vIENvbGxlY3QgYW5kIGRpc3RyaWJ1dGUgdGhlIGV4cGFuc2lvbiBvcHBvcnR1
bml0aWVzLgorICAgICAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgeworICAgICAgICAgICAg
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCArPSBydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3Vu
dCgpOworICAgICAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNCb3goKSkKKyAgICAg
ICAgICAgICAgICBsYXN0UnVuV2l0aENvbnRlbnQgPSAmcnVuOworICAgICAgICB9CisgICAgICAg
IC8vIE5lZWQgdG8gZml4IHVwIHRoZSBsYXN0IHJ1bidzIHRyYWlsaW5nIGV4cGFuc2lvbi4KKyAg
ICAgICAgaWYgKGxhc3RSdW5XaXRoQ29udGVudCAmJiBsYXN0UnVuV2l0aENvbnRlbnQtPmhhc0V4
cGFuc2lvbk9wcG9ydHVuaXR5KCkpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gb2ZmIHRoZSB0cmFp
bGluZyBiaXRzIGZpcnN0IGFuZCBhZGQgdGhlIGZvcmJpZCB0cmFpbGluZyBleHBhbnNpb24uCisg
ICAgICAgICAgICBhdXRvIGxlYWRpbmdFeHBhbnNpb24gPSBsYXN0UnVuV2l0aENvbnRlbnQtPmV4
cGFuc2lvbkJlaGF2aW9yKCkgJiBMZWZ0RXhwYW5zaW9uTWFzazsKKyAgICAgICAgICAgIGxhc3RS
dW5XaXRoQ29udGVudC0+c2V0RXhwYW5zaW9uQmVoYXZpb3IobGVhZGluZ0V4cGFuc2lvbiB8IEZv
cmJpZFJpZ2h0RXhwYW5zaW9uKTsKKyAgICAgICAgfQorICAgICAgICAvLyBBbnl0aGluZyB0byBk
aXN0cmlidXRlPworICAgICAgICBpZiAoZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCAmJiBhdmFp
bGFibGVXaWR0aCgpKSB7CisgICAgICAgICAgICAvLyBEaXN0cmlidXRlIHRoZSBleHRyYSBzcGFj
ZS4KKyAgICAgICAgICAgIGF1dG8gZXhwYW5zaW9uVG9EaXN0cmlidXRlID0gYXZhaWxhYmxlV2lk
dGgoKSAvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7CisgICAgICAgICAgICBmb3IgKGF1dG8m
IHJ1biA6IG1fcnVucykgeworICAgICAgICAgICAgICAgIC8vIEV4cGFuZCBhbmQgbW92ZXMgcnVu
cyBieSB0aGUgYWNjdW11bGF0ZWQgZXhwYW5zaW9uLgorICAgICAgICAgICAgICAgIGlmIChydW4u
aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcnVuLnNldEhv
cml6b250YWxFeHBhbnNpb24oZXhwYW5zaW9uVG9EaXN0cmlidXRlICogcnVuLmV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAg
IGNvbXB1dGVFeHBhbnNpb25Gb3JSdW5zSWZOZWVkZWQoKTsKIH0KIAogdm9pZCBMaW5lQnVpbGRl
cjo6cmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCkKQEAgLTE0Myw3ICsxNzUsNyBAQCB2
b2lkIExpbmVCdWlsZGVyOjp2aXN1YWxseUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCgp
CiAgICAgICAgIElubGluZUxheW91dFVuaXQgdHJpbW1hYmxlV2lkdGggPSB7IH07CiAgICAgICAg
IGlmIChydW4uaXNUZXh0KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWx3
YXlzIGNvbGxhcHNlIHRoZSBydW4gYXQgYSBnbHlwaCBib3VuZGFyeSBhcyB0aGUgc3BlYyBpbmRp
Y2F0ZXM6ICJjb2xsYXBzZSB0aGUgY2hhcmFjdGVyIGFkdmFuY2Ugd2lkdGhzIG9mIGFueSB0aGF0
IHdvdWxkIG90aGVyd2lzZSBvdmVyZmxvdyIKLSAgICAgICAgICAgIC8vIGFuZCB0aGUgdHJpbW1l
ZCB3aWR0aCBzaG91bGQgYmUgY2FwcGVkIGF0IHN0ZDo6bWluKHJ1bi50cmFpbGluZ1doaXRlc3Bh
Y2VXaWR0aCgpLCBvdmVyZmxvd1dpZHRoKSBmb3IgdGV4Z3QgcnVucy4gQm90aCBGRiBhbmQgQ2hy
b21lIGFncmVlLgorICAgICAgICAgICAgLy8gYW5kIHRoZSB0cmltbWVkIHdpZHRoIHNob3VsZCBi
ZSBjYXBwZWQgYXQgc3RkOjptaW4ocnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCksIG92ZXJm
bG93V2lkdGgpIGZvciB0ZXh0IHJ1bnMuIEJvdGggRkYgYW5kIENocm9tZSBhZ3JlZS4KICAgICAg
ICAgICAgIHRyaW1tYWJsZVdpZHRoID0gcnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCk7CiAg
ICAgICAgICAgICBydW4udmlzdWFsbHlDb2xsYXBzZVRyYWlsaW5nV2hpdGVzcGFjZSgpOwogICAg
ICAgICB9IGVsc2UgewpAQCAtMzU5LDE0ICszOTEsMTQgQEAgdm9pZCBMaW5lQnVpbGRlcjo6VHJp
bW1hYmxlVHJhaWxpbmdDb250ZW50OjphZGRGdWxseVRyaW1tYWJsZUNvbnRlbnQoc2l6ZV90IHJ1
bkkKICAgICAvLyBBbnkgc3Vic2VxdWVudCB0cmltbWFibGUgd2hpdGVzcGFjZSBzaG91bGQgY29s
bGFwc2UgdG8gemVybyBhZHZhbmNlZCB3aWR0aCBhbmQgaWdub3JlZCBhdCA6OmFwcGVuZFRleHRD
b250ZW50KCkuCiAgICAgQVNTRVJUKCFtX2hhc0Z1bGx5VHJpbW1hYmxlQ29udGVudCk7CiAgICAg
bV9mdWxseVRyaW1tYWJsZVdpZHRoID0gdHJpbW1hYmxlV2lkdGg7Ci0gICAgLy8gTm90ZSB0aGF0
IGp1c3QgYmVjYXN1ZSB0aGUgdHJpbW1hYmxlIHdpZHRoIGlzIDAgKGZvbnQtc2l6ZTogMHB4KSwg
aXQgZG9lcyBub3QgbWVhbiB3ZSBkb24ndCBoYXZlIGEgdHJpbW1hYmxlIHRyYWlsaW5nIGNvbnRl
bnQuCisgICAgLy8gTm90ZSB0aGF0IGp1c3QgYmVjYXVzZSB0aGUgdHJpbW1hYmxlIHdpZHRoIGlz
IDAgKGZvbnQtc2l6ZTogMHB4KSwgaXQgZG9lcyBub3QgbWVhbiB3ZSBkb24ndCBoYXZlIGEgdHJp
bW1hYmxlIHRyYWlsaW5nIGNvbnRlbnQuCiAgICAgbV9oYXNGdWxseVRyaW1tYWJsZUNvbnRlbnQg
PSB0cnVlOwogICAgIG1fZmlyc3RSdW5JbmRleCA9IG1fZmlyc3RSdW5JbmRleC52YWx1ZU9yKHJ1
bkluZGV4KTsKIH0KIAogdm9pZCBMaW5lQnVpbGRlcjo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50
OjphZGRQYXJ0aWFsbHlUcmltbWFibGVDb250ZW50KHNpemVfdCBydW5JbmRleCwgSW5saW5lTGF5
b3V0VW5pdCB0cmltbWFibGVXaWR0aCkKIHsKLSAgICAvLyBEbyBub3QgYWRkIHRyaW1tYWJsZSBs
ZXR0ZXIgc3BhY2luZyBhZnRlciBhIGZ1bGx5IHRyaW1tYWJsZSB3aGl0ZXNhcGNlLgorICAgIC8v
IERvIG5vdCBhZGQgdHJpbW1hYmxlIGxldHRlciBzcGFjaW5nIGFmdGVyIGEgZnVsbHkgdHJpbW1h
YmxlIHdoaXRlc3BhY2UuCiAgICAgQVNTRVJUKCFtX2ZpcnN0UnVuSW5kZXgpOwogICAgIEFTU0VS
VCghbV9oYXNGdWxseVRyaW1tYWJsZUNvbnRlbnQpOwogICAgIEFTU0VSVCghbV9wYXJ0aWFsbHlU
cmltbWFibGVXaWR0aCk7CkBAIC00MTEsMTQgKzQ0MywxNSBAQCBJbmxpbmVMYXlvdXRVbml0IExp
bmVCdWlsZGVyOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OnJlbW92ZVBhcnRpYWxseVRyaW1t
YWJsZQogTGluZUJ1aWxkZXI6OlJ1bjo6UnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0s
IElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdp
ZHRoKQogICAgIDogbV90eXBlKGlubGluZUl0ZW0udHlwZSgpKQogICAgICwgbV9sYXlvdXRCb3go
JmlubGluZUl0ZW0ubGF5b3V0Qm94KCkpCi0gICAgLCBtX2xvZ2ljYWxSZWN0KHsgMCwgbG9naWNh
bExlZnQsIGxvZ2ljYWxXaWR0aCwgMCB9KQorICAgICwgbV9sb2dpY2FsTGVmdChsb2dpY2FsTGVm
dCkKKyAgICAsIG1fbG9naWNhbFdpZHRoKGxvZ2ljYWxXaWR0aCkKIHsKIH0KIAogTGluZUJ1aWxk
ZXI6OlJ1bjo6UnVuKGNvbnN0IElubGluZVNvZnRMaW5lQnJlYWtJdGVtJiBzb2Z0TGluZUJyZWFr
SXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCkKICAgICA6IG1fdHlwZShzb2Z0TGlu
ZUJyZWFrSXRlbS50eXBlKCkpCiAgICAgLCBtX2xheW91dEJveCgmc29mdExpbmVCcmVha0l0ZW0u
bGF5b3V0Qm94KCkpCi0gICAgLCBtX2xvZ2ljYWxSZWN0KHsgMCwgbG9naWNhbExlZnQsIDAsIDAg
fSkKKyAgICAsIG1fbG9naWNhbExlZnQobG9naWNhbExlZnQpCiAgICAgLCBtX3RleHRDb250ZW50
KHsgc29mdExpbmVCcmVha0l0ZW0ucG9zaXRpb24oKSwgMSwgc29mdExpbmVCcmVha0l0ZW0uaW5s
aW5lVGV4dEJveCgpLmNvbnRlbnQoKSwgZmFsc2UgfSkKIHsKIH0KQEAgLTQyNiw3ICs0NTksOCBA
QCBMaW5lQnVpbGRlcjo6UnVuOjpSdW4oY29uc3QgSW5saW5lU29mdExpbmVCcmVha0l0ZW0mIHNv
ZnRMaW5lQnJlYWtJdGVtLCBJbmxpbmVMYQogTGluZUJ1aWxkZXI6OlJ1bjo6UnVuKGNvbnN0IElu
bGluZVRleHRJdGVtJiBpbmxpbmVUZXh0SXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVm
dCwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wgbmVlZHNIeXBoZW4pCiAgICAg
OiBtX3R5cGUoSW5saW5lSXRlbTo6VHlwZTo6VGV4dCkKICAgICAsIG1fbGF5b3V0Qm94KCZpbmxp
bmVUZXh0SXRlbS5sYXlvdXRCb3goKSkKLSAgICAsIG1fbG9naWNhbFJlY3QoeyAwLCBsb2dpY2Fs
TGVmdCwgbG9naWNhbFdpZHRoLCAwIH0pCisgICAgLCBtX2xvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0
KQorICAgICwgbV9sb2dpY2FsV2lkdGgobG9naWNhbFdpZHRoKQogICAgICwgbV90cmFpbGluZ1do
aXRlc3BhY2VUeXBlKHRyYWlsaW5nV2hpdGVzcGFjZVR5cGUoaW5saW5lVGV4dEl0ZW0pKQogICAg
ICwgbV90ZXh0Q29udGVudCh7IGlubGluZVRleHRJdGVtLnN0YXJ0KCksIG1fdHJhaWxpbmdXaGl0
ZXNwYWNlVHlwZSA9PSBUcmFpbGluZ1doaXRlc3BhY2U6OkNvbGxhcHNlZCA/IDEgOiBpbmxpbmVU
ZXh0SXRlbS5sZW5ndGgoKSwgaW5saW5lVGV4dEl0ZW0uaW5saW5lVGV4dEJveCgpLmNvbnRlbnQo
KSwgbmVlZHNIeXBoZW4gfSkKIHsKQEAgLTQ0NCw3ICs0NzgsNyBAQCB2b2lkIExpbmVCdWlsZGVy
OjpSdW46OmV4cGFuZChjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lVGV4dEl0ZW0sIElubGlu
ZUxheW91dAogICAgIEFTU0VSVChpc1RleHQoKSAmJiBpbmxpbmVUZXh0SXRlbS5pc1RleHQoKSk7
CiAgICAgQVNTRVJUKG1fbGF5b3V0Qm94ID09ICZpbmxpbmVUZXh0SXRlbS5sYXlvdXRCb3goKSk7
CiAKLSAgICBtX2xvZ2ljYWxSZWN0LmV4cGFuZEhvcml6b250YWxseShsb2dpY2FsV2lkdGgpOwor
ICAgIG1fbG9naWNhbFdpZHRoICs9IGxvZ2ljYWxXaWR0aDsKICAgICBtX3RyYWlsaW5nV2hpdGVz
cGFjZVR5cGUgPSB0cmFpbGluZ1doaXRlc3BhY2VUeXBlKGlubGluZVRleHRJdGVtKTsKIAogICAg
IGlmIChtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgPT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpOb25l
KSB7CkBAIC00ODUsNyArNTE5LDcgQEAgdm9pZCBMaW5lQnVpbGRlcjo6UnVuOjpyZW1vdmVUcmFp
bGluZ0xldHRlclNwYWNpbmcoKQogdm9pZCBMaW5lQnVpbGRlcjo6UnVuOjpyZW1vdmVUcmFpbGlu
Z1doaXRlc3BhY2UoKQogewogICAgIC8vIEFjY29yZGluZyB0byBodHRwczovL3d3dy53My5vcmcv
VFIvY3NzLXRleHQtMy8jd2hpdGUtc3BhY2UtcHJvcGVydHkgbWF0cml4Ci0gICAgLy8gVHJpbW1h
YmxlIHdoaXRlc3BhY2UgaXMgYWx3YXlzIGNvbGxhcHNhYmxlIHNvIHRoZSBsZW5ndGggb2YgdGhl
IHRyYWlsaW5nIHRyaW1tYWJsZSB3aGl0ZXNwYWNlIGlzIGFsd2F5cyAxIChvciBub24tZXhpc3Rl
bnQpLgorICAgIC8vIFRyaW1tYWJsZSB3aGl0ZXNwYWNlIGlzIGFsd2F5cyBjb2xsYXBzaWJsZSBz
byB0aGUgbGVuZ3RoIG9mIHRoZSB0cmFpbGluZyB0cmltbWFibGUgd2hpdGVzcGFjZSBpcyBhbHdh
eXMgMSAob3Igbm9uLWV4aXN0ZW50KS4KICAgICBBU1NFUlQobV90ZXh0Q29udGVudC0+bGVuZ3Ro
KCkpOwogICAgIGNvbnN0ZXhwciBzaXplX3QgdHJhaWxpbmdUcmltbWFibGVDb250ZW50TGVuZ3Ro
ID0gMTsKICAgICBtX3RleHRDb250ZW50LT5zaHJpbmsodHJhaWxpbmdUcmltbWFibGVDb250ZW50
TGVuZ3RoKTsKQEAgLTUxOCwxMSArNTUyLDEwIEBAIEV4cGFuc2lvbkJlaGF2aW9yIExpbmVCdWls
ZGVyOjpSdW46OmV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QKICAgICByZXR1cm4gbV9leHBhbnNp
b24uYmVoYXZpb3I7CiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6OlJ1bjo6c2V0Q29tcHV0ZWRIb3Jp
em9udGFsRXhwYW5zaW9uKElubGluZUxheW91dFVuaXQgbG9naWNhbEV4cGFuc2lvbikKK3ZvaWQg
TGluZUJ1aWxkZXI6OlJ1bjo6c2V0SG9yaXpvbnRhbEV4cGFuc2lvbihJbmxpbmVMYXlvdXRVbml0
IGxvZ2ljYWxFeHBhbnNpb24pCiB7CiAgICAgQVNTRVJUKGlzVGV4dCgpKTsKICAgICBBU1NFUlQo
aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSk7Ci0gICAgbV9sb2dpY2FsUmVjdC5leHBhbmRIb3Jp
em9udGFsbHkobG9naWNhbEV4cGFuc2lvbik7CiAgICAgbV9leHBhbnNpb24uaG9yaXpvbnRhbEV4
cGFuc2lvbiA9IGxvZ2ljYWxFeHBhbnNpb247CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCmluZGV4
IDcyNmE2NTczY2RhZDU1Mjk1YzAyMThjNTI3MGY1OWRkZjExMjgzMWMuLmE1NjcyNmE4MmQ0Yjc1
YThmOWM2Y2MyMmI0NDRhNjkxY2Y5YTM0N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaApAQCAtNzQs
MzggKzc0LDMxIEBAIHB1YmxpYzoKIAogICAgICAgICBjb25zdCBCb3gmIGxheW91dEJveCgpIGNv
bnN0IHsgcmV0dXJuICptX2xheW91dEJveDsgfQogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2xheW91dEJveC0+c3R5bGUoKTsgfQotICAgICAgICBj
b25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9naWNhbFJlY3Q7IH0KLSAgICAgICAgRGlzcGxheTo6UnVuOjpFeHBhbnNpb24gZXhwYW5zaW9u
KCkgY29uc3QgeyByZXR1cm4gbV9leHBhbnNpb247IH0KICAgICAgICAgY29uc3QgT3B0aW9uYWw8
RGlzcGxheTo6UnVuOjpUZXh0Q29udGVudD4mIHRleHRDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0Q29udGVudDsgfQogCi0gICAgICAgIFJ1bihSdW4mJikgPSBkZWZhdWx0OwotICAgICAg
ICBSdW4mIG9wZXJhdG9yPShSdW4mJiBvdGhlcikgPSBkZWZhdWx0OworICAgICAgICBJbmxpbmVM
YXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFdpZHRoOyB9
CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBt
X2xvZ2ljYWxMZWZ0OyB9CisKKyAgICAgICAgY29uc3QgRGlzcGxheTo6UnVuOjpFeHBhbnNpb24m
IGV4cGFuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uOyB9CisgICAgICAgIGJvb2wg
aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQ7IH0KKyAgICAgICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZp
b3IoKSBjb25zdDsKKyAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsgfQorCisgICAgICAg
IGJvb2wgaGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1do
aXRlc3BhY2VUeXBlICE9IFRyYWlsaW5nV2hpdGVzcGFjZTo6Tm9uZTsgfQorICAgICAgICBJbmxp
bmVMYXlvdXRVbml0IHRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV90
cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5k
IGNsYXNzIExpbmVCdWlsZGVyOwotICAgICAgICBmcmllbmQgY2xhc3MgTGluZUNvbnRlbnRBbGln
bmVyOwogCiAgICAgICAgIFJ1bihjb25zdCBJbmxpbmVUZXh0SXRlbSYsIElubGluZUxheW91dFVu
aXQgbG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoLCBib29sIG5lZWRz
SHlwZW4pOwogICAgICAgICBSdW4oY29uc3QgSW5saW5lU29mdExpbmVCcmVha0l0ZW0mLCBJbmxp
bmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KTsKICAgICAgICAgUnVuKGNvbnN0IElubGluZUl0ZW0m
LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxX
aWR0aCk7CiAKICAgICAgICAgdm9pZCBleHBhbmQoY29uc3QgSW5saW5lVGV4dEl0ZW0mLCBJbmxp
bmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7Ci0KLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LndpZHRoKCk7IH0KLQot
ICAgICAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCBvZmZzZXQpIHsg
bV9sb2dpY2FsUmVjdC5tb3ZlSG9yaXpvbnRhbGx5KG9mZnNldCk7IH0KLSAgICAgICAgdm9pZCBz
aHJpbmtIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCB3aWR0aCkgeyBtX2xvZ2ljYWxSZWN0
LmV4cGFuZEhvcml6b250YWxseSgtd2lkdGgpOyB9Ci0KLSAgICAgICAgdm9pZCBhZGp1c3RMb2dp
Y2FsVG9wKElubGluZUxheW91dFVuaXQgbG9naWNhbFRvcCkgeyBtX2xvZ2ljYWxSZWN0LnNldFRv
cChsb2dpY2FsVG9wKTsgfQotICAgICAgICB2b2lkIG1vdmVWZXJ0aWNhbGx5KElubGluZUxheW91
dFVuaXQgb2Zmc2V0KSB7IG1fbG9naWNhbFJlY3QubW92ZVZlcnRpY2FsbHkob2Zmc2V0KTsgfQot
ICAgICAgICB2b2lkIHNldExvZ2ljYWxIZWlnaHQoSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0KSB7IG1fbG9naWNhbFJlY3Quc2V0SGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOyB9Ci0KLSAgICAg
ICAgYm9vbCBoYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudDsgfQotICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNp
b25CZWhhdmlvcigpIGNvbnN0OwotICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50OyB9Ci0g
ICAgICAgIHZvaWQgc2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9uKElubGluZUxheW91dFVu
aXQgbG9naWNhbEV4cGFuc2lvbik7CisgICAgICAgIHZvaWQgbW92ZUhvcml6b250YWxseShJbmxp
bmVMYXlvdXRVbml0IG9mZnNldCkgeyBtX2xvZ2ljYWxMZWZ0ICs9IG9mZnNldDsgfQorICAgICAg
ICB2b2lkIHNocmlua0hvcml6b250YWxseShJbmxpbmVMYXlvdXRVbml0IHdpZHRoKSB7IG1fbG9n
aWNhbFdpZHRoIC09IHdpZHRoOyB9CiAgICAgICAgIHZvaWQgc2V0RXhwYW5zaW9uQmVoYXZpb3Io
RXhwYW5zaW9uQmVoYXZpb3IpOwotCisgICAgICAgIHZvaWQgc2V0SG9yaXpvbnRhbEV4cGFuc2lv
bihJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxFeHBhbnNpb24pOwogICAgICAgICB2b2lkIHNldE5l
ZWRzSHlwaGVuKCkgeyBtX3RleHRDb250ZW50LT5zZXROZWVkc0h5cGhlbigpOyB9CiAKICAgICAg
ICAgZW51bSBjbGFzcyBUcmFpbGluZ1doaXRlc3BhY2UgewpAQCAtMTE0LDEwICsxMDcsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBDb2xsYXBzaWJsZSwKICAgICAgICAgICAgIENvbGxhcHNlZAog
ICAgICAgICB9OwotICAgICAgICBib29sIGhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZSAhPSBUcmFpbGluZ1doaXRlc3BhY2U6Ok5v
bmU7IH0KICAgICAgICAgYm9vbCBoYXNDb2xsYXBzaWJsZVRyYWlsaW5nV2hpdGVzcGFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZSA9PSBUcmFpbGluZ1doaXRlc3Bh
Y2U6OkNvbGxhcHNpYmxlIHx8IGhhc0NvbGxhcHNlZFRyYWlsaW5nV2hpdGVzcGFjZSgpOyB9CiAg
ICAgICAgIGJvb2wgaGFzQ29sbGFwc2VkVHJhaWxpbmdXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV90cmFpbGluZ1doaXRlc3BhY2VUeXBlID09IFRyYWlsaW5nV2hpdGVzcGFjZTo6Q29sbGFw
c2VkOyB9Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoOyB9CiAgICAgICAgIFRy
YWlsaW5nV2hpdGVzcGFjZSB0cmFpbGluZ1doaXRlc3BhY2VUeXBlKGNvbnN0IElubGluZVRleHRJ
dGVtJikgY29uc3Q7CiAgICAgICAgIHZvaWQgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKCk7CiAg
ICAgICAgIHZvaWQgdmlzdWFsbHlDb2xsYXBzZVRyYWlsaW5nV2hpdGVzcGFjZSgpOwpAQCAtMTI4
LDcgKzExOSw4IEBAIHB1YmxpYzoKIAogICAgICAgICBJbmxpbmVJdGVtOjpUeXBlIG1fdHlwZSB7
IElubGluZUl0ZW06OlR5cGU6OlRleHQgfTsKICAgICAgICAgY29uc3QgQm94KiBtX2xheW91dEJv
eCB7IG51bGxwdHIgfTsKLSAgICAgICAgRGlzcGxheTo6SW5saW5lUmVjdCBtX2xvZ2ljYWxSZWN0
OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fbG9naWNhbExlZnQgeyAwIH07CisgICAgICAg
IElubGluZUxheW91dFVuaXQgbV9sb2dpY2FsV2lkdGggeyAwIH07CiAgICAgICAgIFRyYWlsaW5n
V2hpdGVzcGFjZSBtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgeyBUcmFpbGluZ1doaXRlc3BhY2U6
Ok5vbmUgfTsKICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX3RyYWlsaW5nV2hpdGVzcGFjZVdp
ZHRoIHsgMCB9OwogICAgICAgICBPcHRpb25hbDxEaXNwbGF5OjpSdW46OlRleHRDb250ZW50PiBt
X3RleHRDb250ZW50OwpAQCAtMTM3LDcgKzEyOSw2IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHVz
aW5nIFJ1bkxpc3QgPSBWZWN0b3I8UnVuLCAxMD47CiAgICAgY29uc3QgUnVuTGlzdCYgcnVucygp
IGNvbnN0IHsgcmV0dXJuIG1fcnVuczsgfQotICAgIFJ1bkxpc3QmIHJ1bnMoKSB7IHJldHVybiBt
X3J1bnM7IH0KIAogcHJpdmF0ZToKICAgICBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2Fs
UmlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVMb2dpY2FsTGVmdCArIG1fY29udGVudExvZ2lj
YWxXaWR0aDsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407432</attachid>
            <date>2020-08-27 16:21:21 -0700</date>
            <delta_ts>2020-08-27 16:55:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215068-20200827162120.patch</filename>
            <type>text/plain</type>
            <size>36647</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg4ODkyYTYyZDhmOGVm
NzcxMGJhMjg2NDg1NDNhZTA0YzhmMDYyZC4uMjhmMWVlNTIzMDNjYmVhNWM4ZjA2NmQ1MjZlNTkw
ZTA5ZDk1MzZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDIwLTA4LTI2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBMaW5lQnVp
bGRlcjpSdW4gc2hvdWxkIG5vdCBoYXZlIHZlcnRpY2FsIGdlb21ldHJ5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwNjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBTaW5jZSBMaW5lQnVpbGRlciBvbmx5
IHRha2VzIGNhcmUgb2YgdGhlIGhvcml6b250YWwgYXNjcGVjdCBvZiBhIHJ1biwgTGluZUJ1aWxk
ZXI6OlJ1biBzaG91bGQgb25seSBoYXZlIGxvZ2ljYWwgbGVmdCBhbmQgd2lkdGggZ2VvbWV0cnku
CisgICAgICAgIFRoZSB2ZXJ0aWNhbCBnZW9tZXRyeSBpcyBjb21wdXRlZCBhcyBwYXJ0IG9mIHRo
ZSBjb250ZW50IGFsaWdubWVudCBwaGFzZSBpbiBMaW5lQ29udGVudEFsaWduZXIgKGFsb25nIHdp
dGggdGhlIGZpbmFsIGhvcml6b250YWwgcG9zaXRpb24KKyAgICAgICAgYWRqdXN0ZWQgd2l0aCB0
aGUgYWxpZ25tZW50KS4KKyAgICAgICAgVGhpcyBpcyBzdGlsbCBhIHRyYW5zaXRpb25hbCBzdGF0
ZSAoc2VlIElubGluZVJ1blJlY3RMaXN0IG1fcnVuUmVjdExpc3QpIGFuZCBhbGwgdGhlIGxpbmUg
Ym94IHJlbGF0ZWQgY29kZSB3aWxsIGdldCBtb3ZlZCB0byB0aGUgTGluZUJveCBjbGFzcy4KKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIGVuYWJsZXMgdXMgdG8ga2VlcCBMaW5lQnVpbGRlcjo6UnVu
IGNvbnN0LgorCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFs
aWduZXI6OmlubGluZVJlY3RMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUNvbnRlbnRBbGlnbmVyOjpMaW5lQ29udGVudEFsaWduZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFsaWduSG9yaXpvbnRhbGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphbGlnblZlcnRpY2FsbHkp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFkanVzdEJh
c2VsaW5lQW5kTGluZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5zKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpydW5D
b250ZW50SGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJ1aWxkZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OnZpc3VhbGx5Q29sbGFwc2VQcmVXcmFwT3ZlcmZsb3dDb250ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVu
dDo6YWRkRnVsbHlUcmltbWFibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6YWRkUGFydGlhbGx5VHJpbW1h
YmxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46
OlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmV4cGFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OnJlbW92ZVRy
YWlsaW5nV2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpSdW46OnNldEhvcml6b250YWxFeHBhbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjptX3RleHRDb250ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OlJ1bjo6c2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpzdHlsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmxvZ2ljYWxXaWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46Omxv
Z2ljYWxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6
OlJ1bjo6ZXhwYW5zaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OlJ1bjo6aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6aGFz
VHJhaWxpbmdXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OlJ1bjo6dHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjptb3ZlSG9yaXpvbnRhbGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6c2hyaW5rSG9yaXpvbnRh
bGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6aGFzQ29s
bGFwc2VkVHJhaWxpbmdXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OnJ1bnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6UnVuOjpsb2dpY2FsUmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmFkanVzdExvZ2ljYWxUb3ApOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjptb3ZlVmVy
dGljYWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpSdW46OnNldExvZ2ljYWxIZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQnVpbGRlcjo6cnVucyk6IERlbGV0ZWQuCisKIDIwMjAtMDgtMjYgIFphbGFuIEJ1
anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIE1vdmUgTGluZUJv
eCBvdXQgb2YgTGluZUJ1aWxkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApp
bmRleCAyYTgyOTExNTdiMDgzYjY0N2Q5YWIzNTU0NWY3M2QxYTcxYzRiNTc1Li42MTQxOTc5NmU4
OGY0Y2VhNTQ3OGQyZDEyZWJhOWFmYjIwZTk0YzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCkBAIC05OSwzMyArOTksNTQgQEAgdm9pZCBIYW5naW5nQ29udGVudDo6cmVz
ZXQoKQogCiBjbGFzcyBMaW5lQ29udGVudEFsaWduZXIgewogcHVibGljOgotICAgIExpbmVDb250
ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIExpbmVCb3gmLCBMaW5l
QnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOworICAg
IExpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIExpbmVC
b3gmLCBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxheW91dFVuaXQgYXZhaWxh
YmxlV2lkdGgpOwogCiAgICAgZW51bSBjbGFzcyBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQg
eyBObywgWWVzIH07CiAgICAgdm9pZCBhbGlnbkhvcml6b250YWxseShUZXh0QWxpZ25Nb2RlLCBJ
c0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwogICAgIHZvaWQgYWxpZ25WZXJ0aWNhbGx5KCk7
CiAgICAgdm9pZCBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsKIAorICAgIHVzaW5nIElu
bGluZVJ1blJlY3RMaXN0ID0gVmVjdG9yPERpc3BsYXk6OklubGluZVJlY3QsIDEwPjsKKyAgICBj
b25zdCBJbmxpbmVSdW5SZWN0TGlzdCYgaW5saW5lUmVjdExpc3QoKSBjb25zdCB7IHJldHVybiBt
X3J1blJlY3RMaXN0OyB9CisKIHByaXZhdGU6Ci0gICAgdm9pZCBqdXN0aWZ5UnVucyhJbmxpbmVM
YXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKICAgICBIYW5naW5nQ29udGVudCBjb2xsZWN0SGFu
Z2luZ0NvbnRlbnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KSBjb25zdDsKLSAgICBJbmxp
bmVMYXlvdXRVbml0IHJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgTGluZUJ1aWxkZXI6OlJ1biYpIGNv
bnN0OwogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsgfQogICAgIExh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0
KCkubGF5b3V0U3RhdGUoKTsgfQogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQm
IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CiAgICAgTGluZUJveCYgbV9saW5lQm94OwotICAg
IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBtX3J1bnM7CisgICAgY29uc3QgTGluZUJ1aWxkZXI6OlJ1
bkxpc3QmIG1fcnVuczsKKyAgICBJbmxpbmVSdW5SZWN0TGlzdCBtX3J1blJlY3RMaXN0OwogICAg
IElubGluZUxheW91dFVuaXQgbV9hdmFpbGFibGVXaWR0aDsKIH07CiAKLUxpbmVDb250ZW50QWxp
Z25lcjo6TGluZUNvbnRlbnRBbGlnbmVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBp
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgTGluZUJveCYgbGluZUJveCwgTGluZUJ1aWxkZXI6OlJ1
bkxpc3QmIHJ1bnMsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpCitMaW5lQ29udGVu
dEFsaWduZXI6OkxpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmVC
dWlsZGVyOjpSdW5MaXN0JiBydW5zLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQog
ICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkK
ICAgICAsIG1fbGluZUJveChsaW5lQm94KQogICAgICwgbV9ydW5zKHJ1bnMpCiAgICAgLCBtX2F2
YWlsYWJsZVdpZHRoKGF2YWlsYWJsZVdpZHRoKQogeworICAgIGZvciAoYXV0byYgcnVuIDogbV9y
dW5zKSB7CisgICAgICAgIGF1dG8gcnVuSGVpZ2h0ID0gWyZdKCkgLT4gSW5saW5lTGF5b3V0VW5p
dCB7CisgICAgICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZvbnRNZXRy
aWNzKCk7CisgICAgICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKKworICAgICAg
ICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOworCisgICAgICAg
ICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CisgICAgICAgICAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGlubGluZUZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxh
eW91dEJveCk7CisgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSB8fCBs
YXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
Ym94R2VvbWV0cnkuY29udGVudEJveEhlaWdodCgpOworCisgICAgICAgICAgICAvLyBOb24tcmVw
bGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJpdCBtaXNs
ZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRlbnQgaGVp
Z2h0IGhlcmUuCisgICAgICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0
KCk7CisgICAgICAgIH07CisgICAgICAgIG1fcnVuUmVjdExpc3QuYXBwZW5kKHsgMCwgcnVuLmxv
Z2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2FsV2lkdGgoKSwgcnVuSGVpZ2h0KCkgfSk7CisgICAgfQog
fQogCiB2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25Ib3Jpem9udGFsbHkoVGV4dEFsaWdu
TW9kZSBob3Jpem9udGFsQWxpZ25tZW50LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNM
YXN0TGluZSkKQEAgLTEzNiw3ICsxNTcsMTQgQEAgdm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFs
aWduSG9yaXpvbnRhbGx5KFRleHRBbGlnbk1vZGUgaG9yaXpvbnRhbEFsaWdubWVudCwgSXMKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGhvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWdu
TW9kZTo6SnVzdGlmeSkgewotICAgICAgICBqdXN0aWZ5UnVucyhhdmFpbGFibGVXaWR0aCk7Cisg
ICAgICAgIGF1dG8gYWNjdW11bGF0ZWRFeHBhbnNpb24gPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsK
KyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fcnVucy5zaXplKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgICAgIG1fcnVuUmVjdExpc3RbaW5kZXhdLm1vdmVIb3Jpem9udGFs
bHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOworCisgICAgICAgICAgICBhdXRvIGhvcml6b250YWxF
eHBhbnNpb24gPSBtX3J1bnNbaW5kZXhdLmV4cGFuc2lvbigpLmhvcml6b250YWxFeHBhbnNpb247
CisgICAgICAgICAgICBtX3J1blJlY3RMaXN0W2luZGV4XS5leHBhbmRIb3Jpem9udGFsbHkoaG9y
aXpvbnRhbEV4cGFuc2lvbik7CisgICAgICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lvbiArPSBo
b3Jpem9udGFsRXhwYW5zaW9uOworICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTE2MSwyMiArMTg5LDIwIEBAIHZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGlnbkhvcml6
b250YWxseShUZXh0QWxpZ25Nb2RlIGhvcml6b250YWxBbGlnbm1lbnQsIElzCiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfTsKIAotICAgIGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRGb3JB
bGlnbm1lbnQoYXZhaWxhYmxlV2lkdGgpOwotICAgIGlmICghYWRqdXN0bWVudCkKLSAgICAgICAg
cmV0dXJuOwotICAgIC8vIEhvcml6b250YWwgYWxpZ25tZW50IG1lYW5zIHRoYXQgd2Ugbm90IG9u
bHkgYWRqdXN0IHRoZSBydW5zIGJ1dCBhbHNvIG1ha2Ugc3VyZQotICAgIC8vIHRoYXQgdGhlIGxp
bmUgYm94IGlzIGFsaWduZWQgYXMgd2VsbAotICAgIC8vIGUuZy4gPGRpdiBzdHlsZT0idGV4dC1h
bGlnbjogY2VudGVyOyB3aWR0aDogMTAwcHg7Ij5jZW50ZXJlZCB0ZXh0PC9kaXY+IDogdGhlIGxp
bmUgYm94IHdpbGwgYWxzbyBiZSBjZW50ZXJlZAotICAgIC8vIGFzIG9wcG9zZWQgdG8gc3RhcnQg
YXQgMHB4IGFsbCB0aGUgd2F5IHRvIFtjZW50ZXJlZCB0ZXh0XSBydW4ncyByaWdodCBlZGdlLgot
ICAgIG1fbGluZUJveC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLSAgICBmb3IgKGF1
dG8mIHJ1biA6IG1fcnVucykKLSAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1l
bnQpOworICAgIGlmIChhdXRvIGFkanVzdG1lbnQgPSBhZGp1c3RtZW50Rm9yQWxpZ25tZW50KGF2
YWlsYWJsZVdpZHRoKSkgeworICAgICAgICAvLyBGSVhNRTogbGluZSBib3ggc2hvdWxkIG5vdCBu
ZWVkIHRvIGJlIG1vdmVkLCBvbmx5IHRoZSBydW5zLgorICAgICAgICBtX2xpbmVCb3gubW92ZUhv
cml6b250YWxseSgqYWRqdXN0bWVudCk7CisgICAgICAgIGZvciAoYXV0byYgcnVuUmVjdCA6IG1f
cnVuUmVjdExpc3QpCisgICAgICAgICAgICBydW5SZWN0Lm1vdmVIb3Jpem9udGFsbHkoKmFkanVz
dG1lbnQpOworICAgIH0KIH0KIAogdm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFsaWduVmVydGlj
YWxseSgpCiB7CiAgICAgYXV0byBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0ID0gbV9saW5lQm94Lmxv
Z2ljYWxSZWN0KCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKKyAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9ydW5zLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICBhdXRvJiBydW4gPSBtX3J1bnNbaW5kZXhdOworICAgICAgICBhdXRvJiBydW5SZWN0ID0gbV9y
dW5SZWN0TGlzdFtpbmRleF07CiAgICAgICAgIGF1dG8gbG9naWNhbFRvcCA9IElubGluZUxheW91
dFVuaXQgeyB9OwogICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CiAg
ICAgICAgIGF1dG8gdmVydGljYWxBbGlnbiA9IGxheW91dEJveC5zdHlsZSgpLnZlcnRpY2FsQWxp
Z24oKTsKQEAgLTIxMCw2NiArMjM2LDI5IEBAIHZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGln
blZlcnRpY2FsbHkoKQogICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxp
Z25tZW50QmFzZWxpbmUoKSAtIGJhc2VsaW5lRnJvbU1hcmdpbkJveDsKICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29u
dGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAgbG9naWNh
bFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gKGJveEdlb21ldHJ5LnZlcnRp
Y2FsQm9yZGVyKCkgKyBib3hHZW9tZXRyeS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDBfbHUp
ICsgcnVuLmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCkgKyBib3hHZW9tZXRyeS5tYXJnaW5BZnRlcigp
KTsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVudEJhc2Vs
aW5lKCkgLSAoYm94R2VvbWV0cnkudmVydGljYWxCb3JkZXIoKSArIGJveEdlb21ldHJ5LnZlcnRp
Y2FsUGFkZGluZygpLnZhbHVlT3IoMF9sdSkgKyBydW5SZWN0LmhlaWdodCgpICsgYm94R2VvbWV0
cnkubWFyZ2luQWZ0ZXIoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6CiAgICAgICAgICAgICBsb2dpY2FsVG9wID0g
MF9sdTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJv
dHRvbToKLSAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3gubG9naWNhbEJvdHRvbSgp
IC0gcnVuLmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCk7CisgICAgICAgICAgICBsb2dpY2FsVG9wID0g
bV9saW5lQm94LmxvZ2ljYWxCb3R0b20oKSAtIHJ1blJlY3QuaGVpZ2h0KCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVN
RU5URURfWUVUKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBydW4u
YWRqdXN0TG9naWNhbFRvcChsb2dpY2FsVG9wKTsKKyAgICAgICAgcnVuUmVjdC5zZXRUb3AobG9n
aWNhbFRvcCk7CiAgICAgICAgIC8vIEFkanVzdCBzY3JvbGxhYmxlIG92ZXJmbG93IGlmIHRoZSBy
dW4gb3ZlcmZsb3dzIHRoZSBsaW5lLgotICAgICAgICBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0LmV4
cGFuZFZlcnRpY2FsbHlUb0NvbnRhaW4ocnVuLmxvZ2ljYWxSZWN0KCkpOworICAgICAgICBzY3Jv
bGxhYmxlT3ZlcmZsb3dSZWN0LmV4cGFuZFZlcnRpY2FsbHlUb0NvbnRhaW4ocnVuUmVjdCk7CiAg
ICAgICAgIC8vIENvbnZlcnQgcnVucyBmcm9tIHJlbGF0aXZlIHRvIHRoZSBsaW5lIHRvcC9sZWZ0
IHRvIHRoZSBmb3JtYXR0aW5nIHJvb3QncyBib3JkZXIgYm94IHRvcC9sZWZ0LgotICAgICAgICBy
dW4ubW92ZVZlcnRpY2FsbHkobV9saW5lQm94LmxvZ2ljYWxUb3AoKSk7Ci0gICAgICAgIHJ1bi5t
b3ZlSG9yaXpvbnRhbGx5KG1fbGluZUJveC5sb2dpY2FsTGVmdCgpKTsKKyAgICAgICAgcnVuUmVj
dC5tb3ZlVmVydGljYWxseShtX2xpbmVCb3gubG9naWNhbFRvcCgpKTsKKyAgICAgICAgcnVuUmVj
dC5tb3ZlSG9yaXpvbnRhbGx5KG1fbGluZUJveC5sb2dpY2FsTGVmdCgpKTsKICAgICB9CiAgICAg
bV9saW5lQm94LnNldFNjcm9sbGFibGVPdmVyZmxvdyhzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0KTsK
IH0KIAotdm9pZCBMaW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5zKElubGluZUxheW91dFVu
aXQgYXZhaWxhYmxlV2lkdGgpCi17Ci0gICAgQVNTRVJUKGF2YWlsYWJsZVdpZHRoID4gMCk7Ci0g
ICAgLy8gQ29sbGVjdCB0aGUgZXhwYW5zaW9uIG9wcG9ydHVuaXR5IG51bWJlcnMgYW5kIGZpbmQg
dGhlIGxhc3QgcnVuIHdpdGggY29udGVudC4KLSAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQgPSAwOwotICAgIExpbmVCdWlsZGVyOjpSdW4qIGxhc3RSdW5XaXRoQ29udGVudCA9IG51
bGxwdHI7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAgZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudCArPSBydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpOwotICAg
ICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0JveCgpKQotICAgICAgICAgICAgbGFzdFJ1
bldpdGhDb250ZW50ID0gJnJ1bjsKLSAgICB9Ci0gICAgLy8gTmVlZCB0byBmaXggdXAgdGhlIGxh
c3QgcnVuJ3MgdHJhaWxpbmcgZXhwYW5zaW9uLgotICAgIGlmIChsYXN0UnVuV2l0aENvbnRlbnQg
JiYgbGFzdFJ1bldpdGhDb250ZW50LT5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKSB7Ci0gICAg
ICAgIC8vIFR1cm4gb2ZmIHRoZSB0cmFpbGluZyBiaXRzIGZpcnN0IGFuZCBhZGQgdGhlIGZvcmJp
ZCB0cmFpbGluZyBleHBhbnNpb24uCi0gICAgICAgIGF1dG8gbGVmdEV4cGFuc2lvbiA9IGxhc3RS
dW5XaXRoQ29udGVudC0+ZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlZnRFeHBhbnNpb25NYXNrOwot
ICAgICAgICBsYXN0UnVuV2l0aENvbnRlbnQtPnNldEV4cGFuc2lvbkJlaGF2aW9yKGxlZnRFeHBh
bnNpb24gfCBGb3JiaWRSaWdodEV4cGFuc2lvbik7Ci0gICAgfQotICAgIC8vIE5vdGhpbmcgdG8g
ZGlzdHJpYnV0ZT8KLSAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCi0gICAgICAg
IHJldHVybjsKLSAgICAvLyBEaXN0cmlidXRlIHRoZSBleHRyYSBzcGFjZS4KLSAgICBhdXRvIGV4
cGFuc2lvblRvRGlzdHJpYnV0ZSA9IGF2YWlsYWJsZVdpZHRoIC8gZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudDsKLSAgICBJbmxpbmVMYXlvdXRVbml0IGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gMDsK
LSAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgewotICAgICAgICAvLyBFeHBhbmQgYW5kIG1v
dmVzIHJ1bnMgYnkgdGhlIGFjY3VtdWxhdGVkIGV4cGFuc2lvbi4KLSAgICAgICAgaWYgKCFydW4u
aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkgewotICAgICAgICAgICAgcnVuLm1vdmVIb3Jpem9u
dGFsbHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgQVNTRVJUKHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkpOwot
ICAgICAgICBhdXRvIGNvbXB1dGVkRXhwYW5zaW9uID0gZXhwYW5zaW9uVG9EaXN0cmlidXRlICog
cnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKTsKLSAgICAgICAgcnVuLnNldENvbXB1dGVk
SG9yaXpvbnRhbEV4cGFuc2lvbihjb21wdXRlZEV4cGFuc2lvbik7Ci0gICAgICAgIHJ1bi5tb3Zl
SG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKLSAgICAgICAgYWNjdW11bGF0ZWRF
eHBhbnNpb24gKz0gY29tcHV0ZWRFeHBhbnNpb247Ci0gICAgfQotfQotCiB2b2lkIExpbmVDb250
ZW50QWxpZ25lcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCkKIHsKICAgICB1bnNpZ25l
ZCBpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwgPSAwOwpAQCAtMjc3LDkgKzI2Niw2IEBAIHZv
aWQgTGluZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKQogICAg
IGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CiAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IHJ1
bi5sYXlvdXRCb3goKTsKICAgICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsK
LQotICAgICAgICBydW4uc2V0TG9naWNhbEhlaWdodChydW5Db250ZW50SGVpZ2h0KHJ1bikpOwot
CiAgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpIHsKICAgICAg
ICAgICAgIGlmIChpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwpIHsKICAgICAgICAgICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IGFkanVzdGVkIHRoZSBsaW5lIGhlaWdodC9iYXNlbGluZSB0aHJv
dWdoIHRoZSBwYXJlbnQgaW5saW5lIGNvbnRhaW5lci4gCkBAIC0zODUsMjQgKzM3MSw2IEBAIEhh
bmdpbmdDb250ZW50IExpbmVDb250ZW50QWxpZ25lcjo6Y29sbGVjdEhhbmdpbmdDb250ZW50KElz
TGFzdExpbmVXaXRoSW5saW5lQ29uCiAgICAgcmV0dXJuIGhhbmdpbmdDb250ZW50OwogfQogCi1J
bmxpbmVMYXlvdXRVbml0IExpbmVDb250ZW50QWxpZ25lcjo6cnVuQ29udGVudEhlaWdodChjb25z
dCBMaW5lQnVpbGRlcjo6UnVuJiBydW4pIGNvbnN0Ci17Ci0gICAgYXV0byYgZm9udE1ldHJpY3Mg
PSBydW4uc3R5bGUoKS5mb250TWV0cmljcygpOwotICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVu
LmlzTGluZUJyZWFrKCkpCi0gICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKLQot
ICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgpKQot
ICAgICAgICByZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0KLSAgICBhdXRvJiBsYXlvdXRC
b3ggPSBydW4ubGF5b3V0Qm94KCk7Ci0gICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgaWYgKGxheW91dEJveC5p
c1JlcGxhY2VkQm94KCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAg
ICAgIHJldHVybiBib3hHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCk7Ci0KLSAgICAvLyBOb24t
cmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJpdCBt
aXNsZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRlbnQg
aGVpZ2h0IGhlcmUuCi0gICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOwot
fQotCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KElu
dmFsaWRhdGlvblN0YXRlJiBpbnZhbGlkYXRpb25TdGF0ZSwgY29uc3QgQ29uc3RyYWludHNGb3JJ
bkZsb3dDb250ZW50JiBjb25zdHJhaW50cykKIHsKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0
dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1N0YXJ0XSAtPiBpbmxpbmUgZm9ybWF0dGlu
ZyBjb250ZXh0IC0+IGZvcm1hdHRpbmcgcm9vdCgiIDw8ICZyb290KCkgPDwgIikiKTsKQEAgLTQ3
NywxMyArNDQ1LDI4IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQo
SW5saW5lSXRlbXMmIGlubGluZUl0ZW1zLCBMaW5lTGF5b3V0Q29uCiAgICAgICAgIC8vICJzcFs8
LWxpbmUgYnJlYWstPl1saXRfY29udGVudCIgLT4gb3ZlcmZsb3cgbGVuZ3RoOiAxMSAtPiBsZWFk
aW5nIHBhcnRpYWwgY29udGVudCBsZW5ndGg6IDExLgogICAgICAgICBhdXRvIHBhcnRpYWxMZWFk
aW5nQ29udGVudExlbmd0aCA9IHByZXZpb3VzTGluZSA/IHByZXZpb3VzTGluZS0+b3ZlcmZsb3dD
b250ZW50TGVuZ3RoIDogV1RGOjpudWxsb3B0OwogICAgICAgICBhdXRvIGxpbmVDb250ZW50ID0g
bGluZUxheW91dENvbnRleHQubGF5b3V0SW5saW5lQ29udGVudChsaW5lLCBuZWVkc0xheW91dFJh
bmdlLCBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpOwotCiAgICAgICAgIGF1dG8gbGluZUNv
bnRlbnRSYW5nZSA9IGxpbmVDb250ZW50LmlubGluZUl0ZW1SYW5nZTsKLSAgICAgICAgYXV0byBs
aW5lQm94ID0gTGluZUJveCB7IERpc3BsYXk6OklubGluZVJlY3QgeyBsaW5lQ29uc3RyYWludHMu
bG9naWNhbFRvcExlZnQsIGxpbmUuY29udGVudExvZ2ljYWxXaWR0aCgpLCBsaW5lQ29uc3RyYWlu
dHMubGluZUhlaWdodCB9LCBMaW5lQm94OjpoYWxmTGVhZGluZ01ldHJpY3Mocm9vdCgpLnN0eWxl
KCkuZm9udE1ldHJpY3MoKSwgbGluZUNvbnN0cmFpbnRzLmxpbmVIZWlnaHQpIH07CiAKICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGFuZCB3aWxsIGV2ZW50dWFsbHkgZ2V0IG1l
cmdlZCB0byBMaW5lQm94LgorICAgICAgICBhdXRvIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCA9IFsmXSB7CisgICAgICAgICAgICBpZiAobGluZUNvbnRlbnRSYW5nZS5lbmQgPT0gbmVlZHNM
YXlvdXRSYW5nZS5lbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIExpbmVDb250ZW50QWxpZ25l
cjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXM7CisgICAgICAgICAgICBpZiAobGlu
ZUNvbnRlbnQucGFydGlhbENvbnRlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIExpbmVDb250
ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKKyAgICAgICAgICAg
IC8vIE9taXQgZmxvYXRzIHRvIHNlZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGxpbmUgd2l0aCBpbmxp
bmUgY29udGVudC4KKyAgICAgICAgICAgIGZvciAoYXV0byBpID0gbmVlZHNMYXlvdXRSYW5nZS5l
bmQ7IGktLTspIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlubGluZUl0ZW1zW2ldLmlzRmxvYXQo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT0gbGluZUNvbnRlbnRSYW5nZS5lbmQg
LSAxID8gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Olll
cyA6IExpbmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBv
bmUgbm9uLWZsb2F0IGl0ZW0uCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBMaW5lQ29udGVudEFsaWduZXI6OklzTGFzdExpbmVXaXRoSW5saW5l
Q29udGVudDo6Tm87CisgICAgICAgIH0oKTsKKyAgICAgICAgbGluZS5jbG9zZShpc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQgPT0gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElu
bGluZUNvbnRlbnQ6Olllcyk7CisKKyAgICAgICAgYXV0byBsaW5lQm94ID0gTGluZUJveCB7IERp
c3BsYXk6OklubGluZVJlY3QgeyBsaW5lQ29uc3RyYWludHMubG9naWNhbFRvcExlZnQsIGxpbmUu
Y29udGVudExvZ2ljYWxXaWR0aCgpLCBsaW5lQ29uc3RyYWludHMubGluZUhlaWdodCB9LCBMaW5l
Qm94OjpoYWxmTGVhZGluZ01ldHJpY3Mocm9vdCgpLnN0eWxlKCkuZm9udE1ldHJpY3MoKSwgbGlu
ZUNvbnN0cmFpbnRzLmxpbmVIZWlnaHQpIH07CisgICAgICAgIGF1dG8gY29udGVudEFsaWduZXIg
PSBMaW5lQ29udGVudEFsaWduZXIgeyAqdGhpcywgbGluZUJveCwgbGluZS5ydW5zKCksIGxpbmUu
YXZhaWxhYmxlV2lkdGgoKSB9OwogICAgICAgICBhdXRvIGFsaWduTGluZUNvbnRlbnQgPSBbJl0g
ewotICAgICAgICAgICAgYXV0byBjb250ZW50QWxpZ25lciA9IExpbmVDb250ZW50QWxpZ25lciB7
ICp0aGlzLCBsaW5lQm94LCBsaW5lLnJ1bnMoKSwgbGluZS5hdmFpbGFibGVXaWR0aCgpIH07CiAg
ICAgICAgICAgICBjb250ZW50QWxpZ25lci5hZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsK
ICAgICAgICAgICAgIGlmIChsaW5lLmlzVmlzdWFsbHlFbXB0eSgpKSB7CiAgICAgICAgICAgICAg
ICAgbGluZUJveC5yZXNldEFsaWdubWVudEJhc2VsaW5lKCk7CkBAIC00OTYsMjEgKzQ3OSw2IEBA
IHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRlbXMmIGlu
bGluZUl0ZW1zLCBMaW5lTGF5b3V0Q29uCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250
ZW50QWxpZ25lci5hbGlnblZlcnRpY2FsbHkoKTsKIAotICAgICAgICAgICAgYXV0byBpc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQgPSBbJl0gewotICAgICAgICAgICAgICAgIGlmIChsaW5lQ29u
dGVudFJhbmdlLmVuZCA9PSBuZWVkc0xheW91dFJhbmdlLmVuZCkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIExpbmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
OjpZZXM7Ci0gICAgICAgICAgICAgICAgaWYgKGxpbmVDb250ZW50LnBhcnRpYWxDb250ZW50KQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQ6Ok5vOwotICAgICAgICAgICAgICAgIC8vIE9taXQgZmxvYXRzIHRv
IHNlZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGxpbmUgd2l0aCBpbmxpbmUgY29udGVudC4KLSAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8gaSA9IG5lZWRzTGF5b3V0UmFuZ2UuZW5kOyBpLS07KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghaW5saW5lSXRlbXNbaV0uaXNGbG9hdCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT0gbGluZUNvbnRlbnRSYW5nZS5lbmQgLSAxID8g
TGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcyA6IExp
bmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gVGhlcmUgaGFzIHRvIGJlIGF0IGxlYXN0
IG9uZSBub24tZmxvYXQgaXRlbS4KLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQ6Ok5vOwotICAgICAgICAgICAgfSgpOwotCiAgICAgICAgICAgICBh
dXRvIGNvbXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCA9IFsmXSB7CiAgICAgICAgICAgICAgICAg
aWYgKHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKTsK
QEAgLTUyNSw3ICs0OTMsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5
b3V0KElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGluZUxheW91dENvbgogICAgICAgICB9Owog
CiAgICAgICAgIGFsaWduTGluZUNvbnRlbnQoKTsKLSAgICAgICAgc2V0RGlzcGxheUJveGVzRm9y
TGluZShsaW5lLCBsaW5lQm94LCBsaW5lQ29udGVudCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCk7
CisgICAgICAgIHNldERpc3BsYXlCb3hlc0ZvckxpbmUobGluZSwgY29udGVudEFsaWduZXIuaW5s
aW5lUmVjdExpc3QoKSwgbGluZUJveCwgbGluZUNvbnRlbnQsIGNvbnN0cmFpbnRzLmhvcml6b250
YWwpOwogCiAgICAgICAgIGlmICghbGluZUNvbnRlbnRSYW5nZS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIEFTU0VSVChuZWVkc0xheW91dFJhbmdlLnN0YXJ0IDwgbGluZUNvbnRlbnRSYW5nZS5l
bmQpOwpAQCAtODM3LDcgKzgwNSw3IEBAIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lQ29u
c3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbnN0cmFpbnRzRm9yCiAgICAgcmV0
dXJuIExpbmVDb25zdHJhaW50cyB7IHsgbGluZUxvZ2ljYWxMZWZ0LCBsaW5lTG9naWNhbFRvcCB9
LCBsaW5lTG9naWNhbFJpZ2h0IC0gbGluZUxvZ2ljYWxMZWZ0LCBpbml0aWFsTGluZUhlaWdodCwg
bGluZUlzQ29uc3RyYWluZWRCeUZsb2F0IH07CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXImIGxpbmUsIGNv
bnN0IExpbmVCb3gmIGxpbmVCb3gsICBjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6TGluZUNvbnRl
bnQmIGxpbmVDb250ZW50LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxD
b25zdHJhaW50cykKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hl
c0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXImIGxpbmUsIGNvbnN0IExpbmVDb250ZW50QWxpZ25l
cjo6SW5saW5lUnVuUmVjdExpc3QmIHJ1blJlY3RMaXN0LCBjb25zdCBMaW5lQm94JiBsaW5lQm94
LCBjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50LCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKIHsKICAgICBh
dXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKIApAQCAtODY3
LDkgKzgzNSw5IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hl
c0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXImIGxpbmUsIGNvCiAgICAgYXV0byBsaW5lSW5rT3Zl
cmZsb3cgPSBsaW5lQm94LnNjcm9sbGFibGVPdmVyZmxvdygpOwogICAgIC8vIENvbXB1dGUgYm94
IGZpbmFsIGdlb21ldHJ5LgogICAgIGF1dG8mIGxpbmVSdW5zID0gbGluZS5ydW5zKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbGluZVJ1bnMuc2l6ZSgpOyArK2luZGV4
KSB7CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVSdW5zLnNpemUoKTsg
KytpbmRleCkgewogICAgICAgICBhdXRvJiBsaW5lUnVuID0gbGluZVJ1bnMuYXQoaW5kZXgpOwot
ICAgICAgICBhdXRvJiBsb2dpY2FsUmVjdCA9IGxpbmVSdW4ubG9naWNhbFJlY3QoKTsKKyAgICAg
ICAgYXV0byBsb2dpY2FsUmVjdCA9IHJ1blJlY3RMaXN0W2luZGV4XTsKICAgICAgICAgYXV0byYg
bGF5b3V0Qm94ID0gbGluZVJ1bi5sYXlvdXRCb3goKTsKIAogICAgICAgICAvLyBBZGQgZmluYWwg
ZGlzcGxheSBydW5zIHRvIHN0YXRlIGZpcnN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
LmgKaW5kZXggMDNlNGZiNmE4YWE2Yzg1YjY5MDAzOTVlM2U5N2JjNGU5MTYyOGZhZC4uMzM5NTQ0
MDkyOTZiOWEwYWFlODY4YTVjOTRjYzJkMDViZjdhNjZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5oCkBAIC05NCw3ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbGlu
ZUlzQ29uc3RyYWluZWRCeUZsb2F0IHsgZmFsc2UgfTsKICAgICB9OwogICAgIExpbmVDb25zdHJh
aW50cyBjb25zdHJhaW50c0ZvckxpbmUoY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgSW5s
aW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFRvcCk7Ci0gICAgdm9pZCBzZXREaXNwbGF5Qm94ZXNG
b3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyJiwgY29uc3QgTGluZUJveCYsIGNvbnN0IExpbmVMYXlv
dXRDb250ZXh0OjpMaW5lQ29udGVudCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpOwor
ICAgIHZvaWQgc2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlciYsIGNvbnN0
IFZlY3RvcjxEaXNwbGF5OjpJbmxpbmVSZWN0LCAxMD4mLCBjb25zdCBMaW5lQm94JiwgY29uc3Qg
TGluZUxheW91dENvbnRleHQ6OkxpbmVDb250ZW50JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJik7CiAgICAgdm9pZCBpbnZhbGlkYXRlRm9ybWF0dGluZ1N0YXRlKGNvbnN0IEludmFsaWRh
dGlvblN0YXRlJik7CiAKICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRp
bmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4o
Rm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxk
ZXIuY3BwCmluZGV4IDY0NTI2NjEzNzhmNjZmZTNiZjVlNmE0NjM1YTI0NDYxY2IwZWFjOTAuLmNi
NDllNDRhNjIxZGNmMDE2OGY4NGM4MmI0ZGQ0Yzg1MzIyNmE3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVp
bGRlci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5oIgogI2luY2x1ZGUgIklubGluZVNvZnRMaW5lQnJlYWtJdGVtLmgiCiAjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1
ZGUgIlRleHRVdGlsLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAt
NzIsMTMgKzczLDQ2IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmNsZWFyQ29udGVudCgpCiAgICAgbV9s
aW5lSXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1hYmxlVHJhaWxpbmdDb250ZW50ID0geyB9Owog
fQogCi12b2lkIExpbmVCdWlsZGVyOjpjbG9zZSgpCit2b2lkIExpbmVCdWlsZGVyOjpjbG9zZShi
b29sIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkKIHsKICNpZiBBU1NFUlRfRU5BQkxFRAog
ICAgIG1faXNDbG9zZWQgPSB0cnVlOwogI2VuZGlmCiAgICAgcmVtb3ZlVHJhaWxpbmdUcmltbWFi
bGVDb250ZW50KCk7CiAgICAgdmlzdWFsbHlDb2xsYXBzZVByZVdyYXBPdmVyZmxvd0NvbnRlbnQo
KTsKKworICAgIGF1dG8gY29tcHV0ZUV4cGFuc2lvbkZvclJ1bnNJZk5lZWRlZCA9IFsmXSB7Cisg
ICAgICAgIGlmIChmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigp
ICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGlmIChpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgYXV0byBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gMDsKKyAgICAgICAgUnVu
KiBsYXN0UnVuV2l0aENvbnRlbnQgPSBudWxscHRyOworICAgICAgICAvLyBDb2xsZWN0IGFuZCBk
aXN0cmlidXRlIHRoZSBleHBhbnNpb24gb3Bwb3J0dW5pdGllcy4KKyAgICAgICAgZm9yIChhdXRv
JiBydW4gOiBtX3J1bnMpIHsKKyAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQg
Kz0gcnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKTsKKyAgICAgICAgICAgIGlmIChydW4u
aXNUZXh0KCkgfHwgcnVuLmlzQm94KCkpCisgICAgICAgICAgICAgICAgbGFzdFJ1bldpdGhDb250
ZW50ID0gJnJ1bjsKKyAgICAgICAgfQorICAgICAgICAvLyBOZWVkIHRvIGZpeCB1cCB0aGUgbGFz
dCBydW4ncyB0cmFpbGluZyBleHBhbnNpb24uCisgICAgICAgIGlmIChsYXN0UnVuV2l0aENvbnRl
bnQgJiYgbGFzdFJ1bldpdGhDb250ZW50LT5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKSB7Cisg
ICAgICAgICAgICAvLyBUdXJuIG9mZiB0aGUgdHJhaWxpbmcgYml0cyBmaXJzdCBhbmQgYWRkIHRo
ZSBmb3JiaWQgdHJhaWxpbmcgZXhwYW5zaW9uLgorICAgICAgICAgICAgYXV0byBsZWFkaW5nRXhw
YW5zaW9uID0gbGFzdFJ1bldpdGhDb250ZW50LT5leHBhbnNpb25CZWhhdmlvcigpICYgTGVmdEV4
cGFuc2lvbk1hc2s7CisgICAgICAgICAgICBsYXN0UnVuV2l0aENvbnRlbnQtPnNldEV4cGFuc2lv
bkJlaGF2aW9yKGxlYWRpbmdFeHBhbnNpb24gfCBGb3JiaWRSaWdodEV4cGFuc2lvbik7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gQW55dGhpbmcgdG8gZGlzdHJpYnV0ZT8KKyAgICAgICAgaWYgKGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgJiYgYXZhaWxhYmxlV2lkdGgoKSkgeworICAgICAgICAg
ICAgLy8gRGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3BhY2UuCisgICAgICAgICAgICBhdXRvIGV4cGFu
c2lvblRvRGlzdHJpYnV0ZSA9IGF2YWlsYWJsZVdpZHRoKCkgLyBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50OworICAgICAgICAgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKKyAgICAgICAg
ICAgICAgICAvLyBFeHBhbmQgYW5kIG1vdmVzIHJ1bnMgYnkgdGhlIGFjY3VtdWxhdGVkIGV4cGFu
c2lvbi4KKyAgICAgICAgICAgICAgICBpZiAocnVuLmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkp
CisgICAgICAgICAgICAgICAgICAgIHJ1bi5zZXRIb3Jpem9udGFsRXhwYW5zaW9uKGV4cGFuc2lv
blRvRGlzdHJpYnV0ZSAqIHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBjb21wdXRlRXhwYW5zaW9uRm9yUnVuc0lm
TmVlZGVkKCk7CiB9CiAKIHZvaWQgTGluZUJ1aWxkZXI6OnJlbW92ZVRyYWlsaW5nVHJpbW1hYmxl
Q29udGVudCgpCkBAIC0xNDMsNyArMTc3LDcgQEAgdm9pZCBMaW5lQnVpbGRlcjo6dmlzdWFsbHlD
b2xsYXBzZVByZVdyYXBPdmVyZmxvd0NvbnRlbnQoKQogICAgICAgICBJbmxpbmVMYXlvdXRVbml0
IHRyaW1tYWJsZVdpZHRoID0geyB9OwogICAgICAgICBpZiAocnVuLmlzVGV4dCgpKSB7CiAgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFsd2F5cyBjb2xsYXBzZSB0aGUgcnVuIGF0IGEg
Z2x5cGggYm91bmRhcnkgYXMgdGhlIHNwZWMgaW5kaWNhdGVzOiAiY29sbGFwc2UgdGhlIGNoYXJh
Y3RlciBhZHZhbmNlIHdpZHRocyBvZiBhbnkgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb3ZlcmZsb3ci
Ci0gICAgICAgICAgICAvLyBhbmQgdGhlIHRyaW1tZWQgd2lkdGggc2hvdWxkIGJlIGNhcHBlZCBh
dCBzdGQ6Om1pbihydW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSwgb3ZlcmZsb3dXaWR0aCkg
Zm9yIHRleGd0IHJ1bnMuIEJvdGggRkYgYW5kIENocm9tZSBhZ3JlZS4KKyAgICAgICAgICAgIC8v
IGFuZCB0aGUgdHJpbW1lZCB3aWR0aCBzaG91bGQgYmUgY2FwcGVkIGF0IHN0ZDo6bWluKHJ1bi50
cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpLCBvdmVyZmxvd1dpZHRoKSBmb3IgdGV4dCBydW5zLiBC
b3RoIEZGIGFuZCBDaHJvbWUgYWdyZWUuCiAgICAgICAgICAgICB0cmltbWFibGVXaWR0aCA9IHJ1
bi50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpOwogICAgICAgICAgICAgcnVuLnZpc3VhbGx5Q29s
bGFwc2VUcmFpbGluZ1doaXRlc3BhY2UoKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTM1OSwxNCAr
MzkzLDE0IEBAIHZvaWQgTGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6YWRk
RnVsbHlUcmltbWFibGVDb250ZW50KHNpemVfdCBydW5JCiAgICAgLy8gQW55IHN1YnNlcXVlbnQg
dHJpbW1hYmxlIHdoaXRlc3BhY2Ugc2hvdWxkIGNvbGxhcHNlIHRvIHplcm8gYWR2YW5jZWQgd2lk
dGggYW5kIGlnbm9yZWQgYXQgOjphcHBlbmRUZXh0Q29udGVudCgpLgogICAgIEFTU0VSVCghbV9o
YXNGdWxseVRyaW1tYWJsZUNvbnRlbnQpOwogICAgIG1fZnVsbHlUcmltbWFibGVXaWR0aCA9IHRy
aW1tYWJsZVdpZHRoOwotICAgIC8vIE5vdGUgdGhhdCBqdXN0IGJlY2FzdWUgdGhlIHRyaW1tYWJs
ZSB3aWR0aCBpcyAwIChmb250LXNpemU6IDBweCksIGl0IGRvZXMgbm90IG1lYW4gd2UgZG9uJ3Qg
aGF2ZSBhIHRyaW1tYWJsZSB0cmFpbGluZyBjb250ZW50LgorICAgIC8vIE5vdGUgdGhhdCBqdXN0
IGJlY2F1c2UgdGhlIHRyaW1tYWJsZSB3aWR0aCBpcyAwIChmb250LXNpemU6IDBweCksIGl0IGRv
ZXMgbm90IG1lYW4gd2UgZG9uJ3QgaGF2ZSBhIHRyaW1tYWJsZSB0cmFpbGluZyBjb250ZW50Lgog
ICAgIG1faGFzRnVsbHlUcmltbWFibGVDb250ZW50ID0gdHJ1ZTsKICAgICBtX2ZpcnN0UnVuSW5k
ZXggPSBtX2ZpcnN0UnVuSW5kZXgudmFsdWVPcihydW5JbmRleCk7CiB9CiAKIHZvaWQgTGluZUJ1
aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6YWRkUGFydGlhbGx5VHJpbW1hYmxlQ29u
dGVudChzaXplX3QgcnVuSW5kZXgsIElubGluZUxheW91dFVuaXQgdHJpbW1hYmxlV2lkdGgpCiB7
Ci0gICAgLy8gRG8gbm90IGFkZCB0cmltbWFibGUgbGV0dGVyIHNwYWNpbmcgYWZ0ZXIgYSBmdWxs
eSB0cmltbWFibGUgd2hpdGVzYXBjZS4KKyAgICAvLyBEbyBub3QgYWRkIHRyaW1tYWJsZSBsZXR0
ZXIgc3BhY2luZyBhZnRlciBhIGZ1bGx5IHRyaW1tYWJsZSB3aGl0ZXNwYWNlLgogICAgIEFTU0VS
VCghbV9maXJzdFJ1bkluZGV4KTsKICAgICBBU1NFUlQoIW1faGFzRnVsbHlUcmltbWFibGVDb250
ZW50KTsKICAgICBBU1NFUlQoIW1fcGFydGlhbGx5VHJpbW1hYmxlV2lkdGgpOwpAQCAtNDExLDE0
ICs0NDUsMTUgQEAgSW5saW5lTGF5b3V0VW5pdCBMaW5lQnVpbGRlcjo6VHJpbW1hYmxlVHJhaWxp
bmdDb250ZW50OjpyZW1vdmVQYXJ0aWFsbHlUcmltbWFibGUKIExpbmVCdWlsZGVyOjpSdW46OlJ1
bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxM
ZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKICAgICA6IG1fdHlwZShpbmxpbmVJ
dGVtLnR5cGUoKSkKICAgICAsIG1fbGF5b3V0Qm94KCZpbmxpbmVJdGVtLmxheW91dEJveCgpKQot
ICAgICwgbV9sb2dpY2FsUmVjdCh7IDAsIGxvZ2ljYWxMZWZ0LCBsb2dpY2FsV2lkdGgsIDAgfSkK
KyAgICAsIG1fbG9naWNhbExlZnQobG9naWNhbExlZnQpCisgICAgLCBtX2xvZ2ljYWxXaWR0aChs
b2dpY2FsV2lkdGgpCiB7CiB9CiAKIExpbmVCdWlsZGVyOjpSdW46OlJ1bihjb25zdCBJbmxpbmVT
b2Z0TGluZUJyZWFrSXRlbSYgc29mdExpbmVCcmVha0l0ZW0sIElubGluZUxheW91dFVuaXQgbG9n
aWNhbExlZnQpCiAgICAgOiBtX3R5cGUoc29mdExpbmVCcmVha0l0ZW0udHlwZSgpKQogICAgICwg
bV9sYXlvdXRCb3goJnNvZnRMaW5lQnJlYWtJdGVtLmxheW91dEJveCgpKQotICAgICwgbV9sb2dp
Y2FsUmVjdCh7IDAsIGxvZ2ljYWxMZWZ0LCAwLCAwIH0pCisgICAgLCBtX2xvZ2ljYWxMZWZ0KGxv
Z2ljYWxMZWZ0KQogICAgICwgbV90ZXh0Q29udGVudCh7IHNvZnRMaW5lQnJlYWtJdGVtLnBvc2l0
aW9uKCksIDEsIHNvZnRMaW5lQnJlYWtJdGVtLmlubGluZVRleHRCb3goKS5jb250ZW50KCksIGZh
bHNlIH0pCiB7CiB9CkBAIC00MjYsNyArNDYxLDggQEAgTGluZUJ1aWxkZXI6OlJ1bjo6UnVuKGNv
bnN0IElubGluZVNvZnRMaW5lQnJlYWtJdGVtJiBzb2Z0TGluZUJyZWFrSXRlbSwgSW5saW5lTGEK
IExpbmVCdWlsZGVyOjpSdW46OlJ1bihjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lVGV4dEl0
ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNh
bFdpZHRoLCBib29sIG5lZWRzSHlwaGVuKQogICAgIDogbV90eXBlKElubGluZUl0ZW06OlR5cGU6
OlRleHQpCiAgICAgLCBtX2xheW91dEJveCgmaW5saW5lVGV4dEl0ZW0ubGF5b3V0Qm94KCkpCi0g
ICAgLCBtX2xvZ2ljYWxSZWN0KHsgMCwgbG9naWNhbExlZnQsIGxvZ2ljYWxXaWR0aCwgMCB9KQor
ICAgICwgbV9sb2dpY2FsTGVmdChsb2dpY2FsTGVmdCkKKyAgICAsIG1fbG9naWNhbFdpZHRoKGxv
Z2ljYWxXaWR0aCkKICAgICAsIG1fdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZSh0cmFpbGluZ1doaXRl
c3BhY2VUeXBlKGlubGluZVRleHRJdGVtKSkKICAgICAsIG1fdGV4dENvbnRlbnQoeyBpbmxpbmVU
ZXh0SXRlbS5zdGFydCgpLCBtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgPT0gVHJhaWxpbmdXaGl0
ZXNwYWNlOjpDb2xsYXBzZWQgPyAxIDogaW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCksIGlubGluZVRl
eHRJdGVtLmlubGluZVRleHRCb3goKS5jb250ZW50KCksIG5lZWRzSHlwaGVuIH0pCiB7CkBAIC00
NDQsNyArNDgwLDcgQEAgdm9pZCBMaW5lQnVpbGRlcjo6UnVuOjpleHBhbmQoY29uc3QgSW5saW5l
VGV4dEl0ZW0mIGlubGluZVRleHRJdGVtLCBJbmxpbmVMYXlvdXQKICAgICBBU1NFUlQoaXNUZXh0
KCkgJiYgaW5saW5lVGV4dEl0ZW0uaXNUZXh0KCkpOwogICAgIEFTU0VSVChtX2xheW91dEJveCA9
PSAmaW5saW5lVGV4dEl0ZW0ubGF5b3V0Qm94KCkpOwogCi0gICAgbV9sb2dpY2FsUmVjdC5leHBh
bmRIb3Jpem9udGFsbHkobG9naWNhbFdpZHRoKTsKKyAgICBtX2xvZ2ljYWxXaWR0aCArPSBsb2dp
Y2FsV2lkdGg7CiAgICAgbV90cmFpbGluZ1doaXRlc3BhY2VUeXBlID0gdHJhaWxpbmdXaGl0ZXNw
YWNlVHlwZShpbmxpbmVUZXh0SXRlbSk7CiAKICAgICBpZiAobV90cmFpbGluZ1doaXRlc3BhY2VU
eXBlID09IFRyYWlsaW5nV2hpdGVzcGFjZTo6Tm9uZSkgewpAQCAtNDg1LDcgKzUyMSw3IEBAIHZv
aWQgTGluZUJ1aWxkZXI6OlJ1bjo6cmVtb3ZlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCkKIHZvaWQg
TGluZUJ1aWxkZXI6OlJ1bjo6cmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKCkKIHsKICAgICAvLyBB
Y2NvcmRpbmcgdG8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy10ZXh0LTMvI3doaXRlLXNwYWNl
LXByb3BlcnR5IG1hdHJpeAotICAgIC8vIFRyaW1tYWJsZSB3aGl0ZXNwYWNlIGlzIGFsd2F5cyBj
b2xsYXBzYWJsZSBzbyB0aGUgbGVuZ3RoIG9mIHRoZSB0cmFpbGluZyB0cmltbWFibGUgd2hpdGVz
cGFjZSBpcyBhbHdheXMgMSAob3Igbm9uLWV4aXN0ZW50KS4KKyAgICAvLyBUcmltbWFibGUgd2hp
dGVzcGFjZSBpcyBhbHdheXMgY29sbGFwc2libGUgc28gdGhlIGxlbmd0aCBvZiB0aGUgdHJhaWxp
bmcgdHJpbW1hYmxlIHdoaXRlc3BhY2UgaXMgYWx3YXlzIDEgKG9yIG5vbi1leGlzdGVudCkuCiAg
ICAgQVNTRVJUKG1fdGV4dENvbnRlbnQtPmxlbmd0aCgpKTsKICAgICBjb25zdGV4cHIgc2l6ZV90
IHRyYWlsaW5nVHJpbW1hYmxlQ29udGVudExlbmd0aCA9IDE7CiAgICAgbV90ZXh0Q29udGVudC0+
c2hyaW5rKHRyYWlsaW5nVHJpbW1hYmxlQ29udGVudExlbmd0aCk7CkBAIC01MTgsMTEgKzU1NCwx
MCBAQCBFeHBhbnNpb25CZWhhdmlvciBMaW5lQnVpbGRlcjo6UnVuOjpleHBhbnNpb25CZWhhdmlv
cigpIGNvbnN0CiAgICAgcmV0dXJuIG1fZXhwYW5zaW9uLmJlaGF2aW9yOwogfQogCi12b2lkIExp
bmVCdWlsZGVyOjpSdW46OnNldENvbXB1dGVkSG9yaXpvbnRhbEV4cGFuc2lvbihJbmxpbmVMYXlv
dXRVbml0IGxvZ2ljYWxFeHBhbnNpb24pCit2b2lkIExpbmVCdWlsZGVyOjpSdW46OnNldEhvcml6
b250YWxFeHBhbnNpb24oSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsRXhwYW5zaW9uKQogewogICAg
IEFTU0VSVChpc1RleHQoKSk7CiAgICAgQVNTRVJUKGhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkp
OwotICAgIG1fbG9naWNhbFJlY3QuZXhwYW5kSG9yaXpvbnRhbGx5KGxvZ2ljYWxFeHBhbnNpb24p
OwogICAgIG1fZXhwYW5zaW9uLmhvcml6b250YWxFeHBhbnNpb24gPSBsb2dpY2FsRXhwYW5zaW9u
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaAppbmRleCA3MjZhNjU3M2NkYWQ1NTI5NWMwMjE4YzUy
NzBmNTlkZGYxMTI4MzFjLi4yNzAzNDg2NmVkOTc3NTg5YWNhODRjOTFhZTk5MmEzNjJlZGUxM2I2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVMaW5lQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIH5M
aW5lQnVpbGRlcigpOwogCiAgICAgdm9pZCBvcGVuKElubGluZUxheW91dFVuaXQgYXZhaWxhYmxl
TG9naWNhbFdpZHRoKTsKLSAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBjbG9zZShib29sIGlz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7CiAgICAgdm9pZCBjbGVhckNvbnRlbnQoKTsKIAog
ICAgIHZvaWQgc2V0SGFzSW50cnVzaXZlRmxvYXQoYm9vbCBoYXNJbnRydXNpdmVGbG9hdCkgeyBt
X2hhc0ludHJ1c2l2ZUZsb2F0ID0gaGFzSW50cnVzaXZlRmxvYXQ7IH0KQEAgLTc0LDM4ICs3NCwz
MSBAQCBwdWJsaWM6CiAKICAgICAgICAgY29uc3QgQm94JiBsYXlvdXRCb3goKSBjb25zdCB7IHJl
dHVybiAqbV9sYXlvdXRCb3g7IH0KICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXlvdXRCb3gtPnN0eWxlKCk7IH0KLSAgICAgICAgY29uc3QgRGlz
cGxheTo6SW5saW5lUmVjdCYgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxS
ZWN0OyB9Ci0gICAgICAgIERpc3BsYXk6OlJ1bjo6RXhwYW5zaW9uIGV4cGFuc2lvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZXhwYW5zaW9uOyB9CiAgICAgICAgIGNvbnN0IE9wdGlvbmFsPERpc3BsYXk6
OlJ1bjo6VGV4dENvbnRlbnQ+JiB0ZXh0Q29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENv
bnRlbnQ7IH0KIAotICAgICAgICBSdW4oUnVuJiYpID0gZGVmYXVsdDsKLSAgICAgICAgUnVuJiBv
cGVyYXRvcj0oUnVuJiYgb3RoZXIpID0gZGVmYXVsdDsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5p
dCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxXaWR0aDsgfQorICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2Fs
TGVmdDsgfQorCisgICAgICAgIGNvbnN0IERpc3BsYXk6OlJ1bjo6RXhwYW5zaW9uJiBleHBhbnNp
b24oKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbjsgfQorICAgICAgICBib29sIGhhc0V4cGFu
c2lvbk9wcG9ydHVuaXR5KCkgY29uc3QgeyByZXR1cm4gbV9leHBhbnNpb25PcHBvcnR1bml0eUNv
dW50OyB9CisgICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29u
c3Q7CisgICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKSBjb25zdCB7
IHJldHVybiBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7IH0KKworICAgICAgICBib29sIGhh
c1RyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNl
VHlwZSAhPSBUcmFpbGluZ1doaXRlc3BhY2U6Ok5vbmU7IH0KKyAgICAgICAgSW5saW5lTGF5b3V0
VW5pdCB0cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdX
aGl0ZXNwYWNlV2lkdGg7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBM
aW5lQnVpbGRlcjsKLSAgICAgICAgZnJpZW5kIGNsYXNzIExpbmVDb250ZW50QWxpZ25lcjsKIAog
ICAgICAgICBSdW4oY29uc3QgSW5saW5lVGV4dEl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2lj
YWxMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgYm9vbCBuZWVkc0h5cGVuKTsK
ICAgICAgICAgUnVuKGNvbnN0IElubGluZVNvZnRMaW5lQnJlYWtJdGVtJiwgSW5saW5lTGF5b3V0
VW5pdCBsb2dpY2FsTGVmdCk7CiAgICAgICAgIFJ1bihjb25zdCBJbmxpbmVJdGVtJiwgSW5saW5l
TGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpOwog
CiAgICAgICAgIHZvaWQgZXhwYW5kKGNvbnN0IElubGluZVRleHRJdGVtJiwgSW5saW5lTGF5b3V0
VW5pdCBsb2dpY2FsV2lkdGgpOwotCi0gICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC53aWR0aCgpOyB9Ci0KLSAgICAgICAg
dm9pZCBtb3ZlSG9yaXpvbnRhbGx5KElubGluZUxheW91dFVuaXQgb2Zmc2V0KSB7IG1fbG9naWNh
bFJlY3QubW92ZUhvcml6b250YWxseShvZmZzZXQpOyB9Ci0gICAgICAgIHZvaWQgc2hyaW5rSG9y
aXpvbnRhbGx5KElubGluZUxheW91dFVuaXQgd2lkdGgpIHsgbV9sb2dpY2FsUmVjdC5leHBhbmRI
b3Jpem9udGFsbHkoLXdpZHRoKTsgfQotCi0gICAgICAgIHZvaWQgYWRqdXN0TG9naWNhbFRvcChJ
bmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxUb3ApIHsgbV9sb2dpY2FsUmVjdC5zZXRUb3AobG9naWNh
bFRvcCk7IH0KLSAgICAgICAgdm9pZCBtb3ZlVmVydGljYWxseShJbmxpbmVMYXlvdXRVbml0IG9m
ZnNldCkgeyBtX2xvZ2ljYWxSZWN0Lm1vdmVWZXJ0aWNhbGx5KG9mZnNldCk7IH0KLSAgICAgICAg
dm9pZCBzZXRMb2dpY2FsSGVpZ2h0KElubGluZUxheW91dFVuaXQgbG9naWNhbEhlaWdodCkgeyBt
X2xvZ2ljYWxSZWN0LnNldEhlaWdodChsb2dpY2FsSGVpZ2h0KTsgfQotCi0gICAgICAgIGJvb2wg
aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQ7IH0KLSAgICAgICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZp
b3IoKSBjb25zdDsKLSAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsgfQotICAgICAgICB2
b2lkIHNldENvbXB1dGVkSG9yaXpvbnRhbEV4cGFuc2lvbihJbmxpbmVMYXlvdXRVbml0IGxvZ2lj
YWxFeHBhbnNpb24pOworICAgICAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0
VW5pdCBvZmZzZXQpIHsgbV9sb2dpY2FsTGVmdCArPSBvZmZzZXQ7IH0KKyAgICAgICAgdm9pZCBz
aHJpbmtIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCB3aWR0aCkgeyBtX2xvZ2ljYWxXaWR0
aCAtPSB3aWR0aDsgfQogICAgICAgICB2b2lkIHNldEV4cGFuc2lvbkJlaGF2aW9yKEV4cGFuc2lv
bkJlaGF2aW9yKTsKLQorICAgICAgICB2b2lkIHNldEhvcml6b250YWxFeHBhbnNpb24oSW5saW5l
TGF5b3V0VW5pdCBsb2dpY2FsRXhwYW5zaW9uKTsKICAgICAgICAgdm9pZCBzZXROZWVkc0h5cGhl
bigpIHsgbV90ZXh0Q29udGVudC0+c2V0TmVlZHNIeXBoZW4oKTsgfQogCiAgICAgICAgIGVudW0g
Y2xhc3MgVHJhaWxpbmdXaGl0ZXNwYWNlIHsKQEAgLTExNCwxMCArMTA3LDggQEAgcHVibGljOgog
ICAgICAgICAgICAgQ29sbGFwc2libGUsCiAgICAgICAgICAgICBDb2xsYXBzZWQKICAgICAgICAg
fTsKLSAgICAgICAgYm9vbCBoYXNUcmFpbGluZ1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBt
X3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgIT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpOb25lOyB9CiAg
ICAgICAgIGJvb2wgaGFzQ29sbGFwc2libGVUcmFpbGluZ1doaXRlc3BhY2UoKSBjb25zdCB7IHJl
dHVybiBtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgPT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpDb2xs
YXBzaWJsZSB8fCBoYXNDb2xsYXBzZWRUcmFpbGluZ1doaXRlc3BhY2UoKTsgfQogICAgICAgICBi
b29sIGhhc0NvbGxhcHNlZFRyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
aWxpbmdXaGl0ZXNwYWNlVHlwZSA9PSBUcmFpbGluZ1doaXRlc3BhY2U6OkNvbGxhcHNlZDsgfQot
ICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsgfQogICAgICAgICBUcmFpbGluZ1do
aXRlc3BhY2UgdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZShjb25zdCBJbmxpbmVUZXh0SXRlbSYpIGNv
bnN0OwogICAgICAgICB2b2lkIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICB2
b2lkIHZpc3VhbGx5Q29sbGFwc2VUcmFpbGluZ1doaXRlc3BhY2UoKTsKQEAgLTEyOCw3ICsxMTks
OCBAQCBwdWJsaWM6CiAKICAgICAgICAgSW5saW5lSXRlbTo6VHlwZSBtX3R5cGUgeyBJbmxpbmVJ
dGVtOjpUeXBlOjpUZXh0IH07CiAgICAgICAgIGNvbnN0IEJveCogbV9sYXlvdXRCb3ggeyBudWxs
cHRyIH07Ci0gICAgICAgIERpc3BsYXk6OklubGluZVJlY3QgbV9sb2dpY2FsUmVjdDsKKyAgICAg
ICAgSW5saW5lTGF5b3V0VW5pdCBtX2xvZ2ljYWxMZWZ0IHsgMCB9OworICAgICAgICBJbmxpbmVM
YXlvdXRVbml0IG1fbG9naWNhbFdpZHRoIHsgMCB9OwogICAgICAgICBUcmFpbGluZ1doaXRlc3Bh
Y2UgbV90cmFpbGluZ1doaXRlc3BhY2VUeXBlIHsgVHJhaWxpbmdXaGl0ZXNwYWNlOjpOb25lIH07
CiAgICAgICAgIElubGluZUxheW91dFVuaXQgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCB7IDAg
fTsKICAgICAgICAgT3B0aW9uYWw8RGlzcGxheTo6UnVuOjpUZXh0Q29udGVudD4gbV90ZXh0Q29u
dGVudDsKQEAgLTEzNyw3ICsxMjksNiBAQCBwdWJsaWM6CiAgICAgfTsKICAgICB1c2luZyBSdW5M
aXN0ID0gVmVjdG9yPFJ1biwgMTA+OwogICAgIGNvbnN0IFJ1bkxpc3QmIHJ1bnMoKSBjb25zdCB7
IHJldHVybiBtX3J1bnM7IH0KLSAgICBSdW5MaXN0JiBydW5zKCkgeyByZXR1cm4gbV9ydW5zOyB9
CiAKIHByaXZhdGU6CiAgICAgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFJpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9saW5lTG9naWNhbExlZnQgKyBtX2NvbnRlbnRMb2dpY2FsV2lkdGg7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xp
bmVMYXlvdXRDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcAppbmRleCBkODBmMzBjMjFjNjgwMjhiMzNhM2E0Nzk0
YTk4YTlkNzhlMGE0ZDgyLi43ZmRhYzQ1YzE0ZWRjOWQ5MTQ2Njg2NGM5MmJkMGVmZjUxOTJiNTVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5l
TGF5b3V0Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCkBAIC0zMjUsMTQgKzMyNSwxMyBAQCBMaW5lTGF5
b3V0Q29udGV4dDo6TGluZUNvbnRlbnQgTGluZUxheW91dENvbnRleHQ6OmxheW91dElubGluZUNv
bnRlbnQoTGluZUJ1aWxkZQogICAgIHJldHVybiBjbG9zZShsaW5lLCBsYXlvdXRSYW5nZSwgY29t
bWl0dGVkSW5saW5lSXRlbUNvdW50LCB7IH0pOwogfQogCi1MaW5lTGF5b3V0Q29udGV4dDo6TGlu
ZUNvbnRlbnQgTGluZUxheW91dENvbnRleHQ6OmNsb3NlKExpbmVCdWlsZGVyJiBsaW5lLCBjb25z
dCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlLCB1bnNpZ25lZCBjb21taXR0ZWRJbmxpbmVJ
dGVtQ291bnQsIE9wdGlvbmFsPExpbmVDb250ZW50OjpQYXJ0aWFsQ29udGVudD4gcGFydGlhbENv
bnRlbnQpCitMaW5lTGF5b3V0Q29udGV4dDo6TGluZUNvbnRlbnQgTGluZUxheW91dENvbnRleHQ6
OmNsb3NlKGNvbnN0IExpbmVCdWlsZGVyJiBsaW5lLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxh
eW91dFJhbmdlLCB1bnNpZ25lZCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIE9wdGlvbmFsPExp
bmVDb250ZW50OjpQYXJ0aWFsQ29udGVudD4gcGFydGlhbENvbnRlbnQpCiB7Ci0gICAgQVNTRVJU
KGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCB8fCAhbV9mbG9hdHMuaXNFbXB0eSgpIHx8IGxpbmUu
aGFzSW50cnVzaXZlRmxvYXQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChsaW5lLCBjb21taXR0ZWRJ
bmxpbmVJdGVtQ291bnQgfHwgIW1fZmxvYXRzLmlzRW1wdHkoKSB8fCBsaW5lLmhhc0ludHJ1c2l2
ZUZsb2F0KCkpOwogICAgIGF1dG8gbnVtYmVyT2ZDb21taXR0ZWRJdGVtcyA9IGNvbW1pdHRlZElu
bGluZUl0ZW1Db3VudCArIG1fZmxvYXRzLnNpemUoKTsKICAgICBhdXRvIHRyYWlsaW5nSW5saW5l
SXRlbUluZGV4ID0gbGF5b3V0UmFuZ2Uuc3RhcnQgKyBudW1iZXJPZkNvbW1pdHRlZEl0ZW1zIC0g
MTsKICAgICBhdXRvIGxpbmVSYW5nZSA9IElubGluZUl0ZW1SYW5nZSB7IGxheW91dFJhbmdlLnN0
YXJ0LCB0cmFpbGluZ0lubGluZUl0ZW1JbmRleCArIDEgfTsKICAgICBBU1NFUlQobGluZVJhbmdl
LmVuZCA8PSBsYXlvdXRSYW5nZS5lbmQpOwotICAgIGxpbmUuY2xvc2UoKTsKICAgICAvLyBBZGp1
c3QgaHlwaGVuYXRlZCBsaW5lIGNvdW50LgogICAgIG1fc3VjY2Vzc2l2ZUh5cGhlbmF0ZWRMaW5l
Q291bnQgPSBwYXJ0aWFsQ29udGVudCAmJiBwYXJ0aWFsQ29udGVudC0+dHJhaWxpbmdDb250ZW50
SGFzSHlwaGVuID8gbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCArIDEgOiAwOwogICAg
IHJldHVybiBMaW5lQ29udGVudCB7IHBhcnRpYWxDb250ZW50LCBsaW5lUmFuZ2UsIFdURk1vdmUo
bV9mbG9hdHMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaAppbmRleCAyZDJmZTVkMjM0MDZhODMzYzgy
NTdkOTg1MmEyYzgzZjUyMmVmYTY1Li5hMTk3OTg5NmIxZTFiNDA4MTY0OGJkZGU3MTQwZGNiYzcy
MDk5OGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9MaW5lTGF5b3V0Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmgKQEAgLTc3LDcgKzc3LDcgQEAgcHJpdmF0ZToK
ICAgICBSZXN1bHQgaGFuZGxlRmxvYXRzQW5kSW5saW5lQ29udGVudChMaW5lQnJlYWtlciYsIExp
bmVCdWlsZGVyJiwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgY29uc3QgTGlu
ZUNhbmRpZGF0ZSYpOwogICAgIHNpemVfdCByZWJ1aWxkTGluZShMaW5lQnVpbGRlciYsIGNvbnN0
IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UpOwogICAgIHZvaWQgY29tbWl0UGFydGlhbENv
bnRlbnQoTGluZUJ1aWxkZXImLCBjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYsIGNvbnN0IExp
bmVCcmVha2VyOjpSZXN1bHQ6OlBhcnRpYWxUcmFpbGluZ0NvbnRlbnQmKTsKLSAgICBMaW5lQ29u
dGVudCBjbG9zZShMaW5lQnVpbGRlciYsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFu
Z2UsIHVuc2lnbmVkIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCwgT3B0aW9uYWw8TGluZUNvbnRl
bnQ6OlBhcnRpYWxDb250ZW50Pik7CisgICAgTGluZUNvbnRlbnQgY2xvc2UoY29uc3QgTGluZUJ1
aWxkZXImLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlLCB1bnNpZ25lZCBjb21t
aXR0ZWRJbmxpbmVJdGVtQ291bnQsIE9wdGlvbmFsPExpbmVDb250ZW50OjpQYXJ0aWFsQ29udGVu
dD4pOwogCiAgICAgSW5saW5lTGF5b3V0VW5pdCBpbmxpbmVJdGVtV2lkdGgoY29uc3QgSW5saW5l
SXRlbSYsIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407438</attachid>
            <date>2020-08-27 16:55:26 -0700</date>
            <delta_ts>2020-08-27 19:05:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215068-20200827165525.patch</filename>
            <type>text/plain</type>
            <size>37012</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg4ODkyYTYyZDhmOGVm
NzcxMGJhMjg2NDg1NDNhZTA0YzhmMDYyZC4uMjhmMWVlNTIzMDNjYmVhNWM4ZjA2NmQ1MjZlNTkw
ZTA5ZDk1MzZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDIwLTA4LTI2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBMaW5lQnVp
bGRlcjpSdW4gc2hvdWxkIG5vdCBoYXZlIHZlcnRpY2FsIGdlb21ldHJ5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwNjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBTaW5jZSBMaW5lQnVpbGRlciBvbmx5
IHRha2VzIGNhcmUgb2YgdGhlIGhvcml6b250YWwgYXNjcGVjdCBvZiBhIHJ1biwgTGluZUJ1aWxk
ZXI6OlJ1biBzaG91bGQgb25seSBoYXZlIGxvZ2ljYWwgbGVmdCBhbmQgd2lkdGggZ2VvbWV0cnku
CisgICAgICAgIFRoZSB2ZXJ0aWNhbCBnZW9tZXRyeSBpcyBjb21wdXRlZCBhcyBwYXJ0IG9mIHRo
ZSBjb250ZW50IGFsaWdubWVudCBwaGFzZSBpbiBMaW5lQ29udGVudEFsaWduZXIgKGFsb25nIHdp
dGggdGhlIGZpbmFsIGhvcml6b250YWwgcG9zaXRpb24KKyAgICAgICAgYWRqdXN0ZWQgd2l0aCB0
aGUgYWxpZ25tZW50KS4KKyAgICAgICAgVGhpcyBpcyBzdGlsbCBhIHRyYW5zaXRpb25hbCBzdGF0
ZSAoc2VlIElubGluZVJ1blJlY3RMaXN0IG1fcnVuUmVjdExpc3QpIGFuZCBhbGwgdGhlIGxpbmUg
Ym94IHJlbGF0ZWQgY29kZSB3aWxsIGdldCBtb3ZlZCB0byB0aGUgTGluZUJveCBjbGFzcy4KKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIGVuYWJsZXMgdXMgdG8ga2VlcCBMaW5lQnVpbGRlcjo6UnVu
IGNvbnN0LgorCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFs
aWduZXI6OmlubGluZVJlY3RMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUNvbnRlbnRBbGlnbmVyOjpMaW5lQ29udGVudEFsaWduZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFsaWduSG9yaXpvbnRhbGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphbGlnblZlcnRpY2FsbHkp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFkanVzdEJh
c2VsaW5lQW5kTGluZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5zKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpydW5D
b250ZW50SGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJ1aWxkZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OnZpc3VhbGx5Q29sbGFwc2VQcmVXcmFwT3ZlcmZsb3dDb250ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVu
dDo6YWRkRnVsbHlUcmltbWFibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6YWRkUGFydGlhbGx5VHJpbW1h
YmxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46
OlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmV4cGFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OnJlbW92ZVRy
YWlsaW5nV2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpSdW46OnNldEhvcml6b250YWxFeHBhbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjptX3RleHRDb250ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OlJ1bjo6c2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpzdHlsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmxvZ2ljYWxXaWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46Omxv
Z2ljYWxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6
OlJ1bjo6ZXhwYW5zaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OlJ1bjo6aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6aGFz
VHJhaWxpbmdXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OlJ1bjo6dHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjptb3ZlSG9yaXpvbnRhbGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6c2hyaW5rSG9yaXpvbnRh
bGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6aGFzQ29s
bGFwc2VkVHJhaWxpbmdXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OnJ1bnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6UnVuOjpsb2dpY2FsUmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmFkanVzdExvZ2ljYWxUb3ApOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjptb3ZlVmVy
dGljYWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpSdW46OnNldExvZ2ljYWxIZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQnVpbGRlcjo6cnVucyk6IERlbGV0ZWQuCisKIDIwMjAtMDgtMjYgIFphbGFuIEJ1
anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIE1vdmUgTGluZUJv
eCBvdXQgb2YgTGluZUJ1aWxkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApp
bmRleCAyYTgyOTExNTdiMDgzYjY0N2Q5YWIzNTU0NWY3M2QxYTcxYzRiNTc1Li42MTQxOTc5NmU4
OGY0Y2VhNTQ3OGQyZDEyZWJhOWFmYjIwZTk0YzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCkBAIC05OSwzMyArOTksNTQgQEAgdm9pZCBIYW5naW5nQ29udGVudDo6cmVz
ZXQoKQogCiBjbGFzcyBMaW5lQ29udGVudEFsaWduZXIgewogcHVibGljOgotICAgIExpbmVDb250
ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIExpbmVCb3gmLCBMaW5l
QnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOworICAg
IExpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIExpbmVC
b3gmLCBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxheW91dFVuaXQgYXZhaWxh
YmxlV2lkdGgpOwogCiAgICAgZW51bSBjbGFzcyBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQg
eyBObywgWWVzIH07CiAgICAgdm9pZCBhbGlnbkhvcml6b250YWxseShUZXh0QWxpZ25Nb2RlLCBJ
c0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwogICAgIHZvaWQgYWxpZ25WZXJ0aWNhbGx5KCk7
CiAgICAgdm9pZCBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsKIAorICAgIHVzaW5nIElu
bGluZVJ1blJlY3RMaXN0ID0gVmVjdG9yPERpc3BsYXk6OklubGluZVJlY3QsIDEwPjsKKyAgICBj
b25zdCBJbmxpbmVSdW5SZWN0TGlzdCYgaW5saW5lUmVjdExpc3QoKSBjb25zdCB7IHJldHVybiBt
X3J1blJlY3RMaXN0OyB9CisKIHByaXZhdGU6Ci0gICAgdm9pZCBqdXN0aWZ5UnVucyhJbmxpbmVM
YXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKICAgICBIYW5naW5nQ29udGVudCBjb2xsZWN0SGFu
Z2luZ0NvbnRlbnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KSBjb25zdDsKLSAgICBJbmxp
bmVMYXlvdXRVbml0IHJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgTGluZUJ1aWxkZXI6OlJ1biYpIGNv
bnN0OwogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsgfQogICAgIExh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0
KCkubGF5b3V0U3RhdGUoKTsgfQogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQm
IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CiAgICAgTGluZUJveCYgbV9saW5lQm94OwotICAg
IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBtX3J1bnM7CisgICAgY29uc3QgTGluZUJ1aWxkZXI6OlJ1
bkxpc3QmIG1fcnVuczsKKyAgICBJbmxpbmVSdW5SZWN0TGlzdCBtX3J1blJlY3RMaXN0OwogICAg
IElubGluZUxheW91dFVuaXQgbV9hdmFpbGFibGVXaWR0aDsKIH07CiAKLUxpbmVDb250ZW50QWxp
Z25lcjo6TGluZUNvbnRlbnRBbGlnbmVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBp
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgTGluZUJveCYgbGluZUJveCwgTGluZUJ1aWxkZXI6OlJ1
bkxpc3QmIHJ1bnMsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpCitMaW5lQ29udGVu
dEFsaWduZXI6OkxpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmVC
dWlsZGVyOjpSdW5MaXN0JiBydW5zLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQog
ICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkK
ICAgICAsIG1fbGluZUJveChsaW5lQm94KQogICAgICwgbV9ydW5zKHJ1bnMpCiAgICAgLCBtX2F2
YWlsYWJsZVdpZHRoKGF2YWlsYWJsZVdpZHRoKQogeworICAgIGZvciAoYXV0byYgcnVuIDogbV9y
dW5zKSB7CisgICAgICAgIGF1dG8gcnVuSGVpZ2h0ID0gWyZdKCkgLT4gSW5saW5lTGF5b3V0VW5p
dCB7CisgICAgICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZvbnRNZXRy
aWNzKCk7CisgICAgICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKKworICAgICAg
ICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOworCisgICAgICAg
ICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CisgICAgICAgICAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGlubGluZUZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxh
eW91dEJveCk7CisgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSB8fCBs
YXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
Ym94R2VvbWV0cnkuY29udGVudEJveEhlaWdodCgpOworCisgICAgICAgICAgICAvLyBOb24tcmVw
bGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJpdCBtaXNs
ZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRlbnQgaGVp
Z2h0IGhlcmUuCisgICAgICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0
KCk7CisgICAgICAgIH07CisgICAgICAgIG1fcnVuUmVjdExpc3QuYXBwZW5kKHsgMCwgcnVuLmxv
Z2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2FsV2lkdGgoKSwgcnVuSGVpZ2h0KCkgfSk7CisgICAgfQog
fQogCiB2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25Ib3Jpem9udGFsbHkoVGV4dEFsaWdu
TW9kZSBob3Jpem9udGFsQWxpZ25tZW50LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNM
YXN0TGluZSkKQEAgLTEzNiw3ICsxNTcsMTQgQEAgdm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFs
aWduSG9yaXpvbnRhbGx5KFRleHRBbGlnbk1vZGUgaG9yaXpvbnRhbEFsaWdubWVudCwgSXMKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGhvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWdu
TW9kZTo6SnVzdGlmeSkgewotICAgICAgICBqdXN0aWZ5UnVucyhhdmFpbGFibGVXaWR0aCk7Cisg
ICAgICAgIGF1dG8gYWNjdW11bGF0ZWRFeHBhbnNpb24gPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsK
KyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fcnVucy5zaXplKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgICAgIG1fcnVuUmVjdExpc3RbaW5kZXhdLm1vdmVIb3Jpem9udGFs
bHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOworCisgICAgICAgICAgICBhdXRvIGhvcml6b250YWxF
eHBhbnNpb24gPSBtX3J1bnNbaW5kZXhdLmV4cGFuc2lvbigpLmhvcml6b250YWxFeHBhbnNpb247
CisgICAgICAgICAgICBtX3J1blJlY3RMaXN0W2luZGV4XS5leHBhbmRIb3Jpem9udGFsbHkoaG9y
aXpvbnRhbEV4cGFuc2lvbik7CisgICAgICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lvbiArPSBo
b3Jpem9udGFsRXhwYW5zaW9uOworICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTE2MSwyMiArMTg5LDIwIEBAIHZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGlnbkhvcml6
b250YWxseShUZXh0QWxpZ25Nb2RlIGhvcml6b250YWxBbGlnbm1lbnQsIElzCiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfTsKIAotICAgIGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRGb3JB
bGlnbm1lbnQoYXZhaWxhYmxlV2lkdGgpOwotICAgIGlmICghYWRqdXN0bWVudCkKLSAgICAgICAg
cmV0dXJuOwotICAgIC8vIEhvcml6b250YWwgYWxpZ25tZW50IG1lYW5zIHRoYXQgd2Ugbm90IG9u
bHkgYWRqdXN0IHRoZSBydW5zIGJ1dCBhbHNvIG1ha2Ugc3VyZQotICAgIC8vIHRoYXQgdGhlIGxp
bmUgYm94IGlzIGFsaWduZWQgYXMgd2VsbAotICAgIC8vIGUuZy4gPGRpdiBzdHlsZT0idGV4dC1h
bGlnbjogY2VudGVyOyB3aWR0aDogMTAwcHg7Ij5jZW50ZXJlZCB0ZXh0PC9kaXY+IDogdGhlIGxp
bmUgYm94IHdpbGwgYWxzbyBiZSBjZW50ZXJlZAotICAgIC8vIGFzIG9wcG9zZWQgdG8gc3RhcnQg
YXQgMHB4IGFsbCB0aGUgd2F5IHRvIFtjZW50ZXJlZCB0ZXh0XSBydW4ncyByaWdodCBlZGdlLgot
ICAgIG1fbGluZUJveC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLSAgICBmb3IgKGF1
dG8mIHJ1biA6IG1fcnVucykKLSAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1l
bnQpOworICAgIGlmIChhdXRvIGFkanVzdG1lbnQgPSBhZGp1c3RtZW50Rm9yQWxpZ25tZW50KGF2
YWlsYWJsZVdpZHRoKSkgeworICAgICAgICAvLyBGSVhNRTogbGluZSBib3ggc2hvdWxkIG5vdCBu
ZWVkIHRvIGJlIG1vdmVkLCBvbmx5IHRoZSBydW5zLgorICAgICAgICBtX2xpbmVCb3gubW92ZUhv
cml6b250YWxseSgqYWRqdXN0bWVudCk7CisgICAgICAgIGZvciAoYXV0byYgcnVuUmVjdCA6IG1f
cnVuUmVjdExpc3QpCisgICAgICAgICAgICBydW5SZWN0Lm1vdmVIb3Jpem9udGFsbHkoKmFkanVz
dG1lbnQpOworICAgIH0KIH0KIAogdm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFsaWduVmVydGlj
YWxseSgpCiB7CiAgICAgYXV0byBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0ID0gbV9saW5lQm94Lmxv
Z2ljYWxSZWN0KCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKKyAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9ydW5zLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICBhdXRvJiBydW4gPSBtX3J1bnNbaW5kZXhdOworICAgICAgICBhdXRvJiBydW5SZWN0ID0gbV9y
dW5SZWN0TGlzdFtpbmRleF07CiAgICAgICAgIGF1dG8gbG9naWNhbFRvcCA9IElubGluZUxheW91
dFVuaXQgeyB9OwogICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CiAg
ICAgICAgIGF1dG8gdmVydGljYWxBbGlnbiA9IGxheW91dEJveC5zdHlsZSgpLnZlcnRpY2FsQWxp
Z24oKTsKQEAgLTIxMCw2NiArMjM2LDI5IEBAIHZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGln
blZlcnRpY2FsbHkoKQogICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxp
Z25tZW50QmFzZWxpbmUoKSAtIGJhc2VsaW5lRnJvbU1hcmdpbkJveDsKICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29u
dGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAgbG9naWNh
bFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gKGJveEdlb21ldHJ5LnZlcnRp
Y2FsQm9yZGVyKCkgKyBib3hHZW9tZXRyeS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDBfbHUp
ICsgcnVuLmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCkgKyBib3hHZW9tZXRyeS5tYXJnaW5BZnRlcigp
KTsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVudEJhc2Vs
aW5lKCkgLSAoYm94R2VvbWV0cnkudmVydGljYWxCb3JkZXIoKSArIGJveEdlb21ldHJ5LnZlcnRp
Y2FsUGFkZGluZygpLnZhbHVlT3IoMF9sdSkgKyBydW5SZWN0LmhlaWdodCgpICsgYm94R2VvbWV0
cnkubWFyZ2luQWZ0ZXIoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6CiAgICAgICAgICAgICBsb2dpY2FsVG9wID0g
MF9sdTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJv
dHRvbToKLSAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3gubG9naWNhbEJvdHRvbSgp
IC0gcnVuLmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCk7CisgICAgICAgICAgICBsb2dpY2FsVG9wID0g
bV9saW5lQm94LmxvZ2ljYWxCb3R0b20oKSAtIHJ1blJlY3QuaGVpZ2h0KCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVN
RU5URURfWUVUKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBydW4u
YWRqdXN0TG9naWNhbFRvcChsb2dpY2FsVG9wKTsKKyAgICAgICAgcnVuUmVjdC5zZXRUb3AobG9n
aWNhbFRvcCk7CiAgICAgICAgIC8vIEFkanVzdCBzY3JvbGxhYmxlIG92ZXJmbG93IGlmIHRoZSBy
dW4gb3ZlcmZsb3dzIHRoZSBsaW5lLgotICAgICAgICBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0LmV4
cGFuZFZlcnRpY2FsbHlUb0NvbnRhaW4ocnVuLmxvZ2ljYWxSZWN0KCkpOworICAgICAgICBzY3Jv
bGxhYmxlT3ZlcmZsb3dSZWN0LmV4cGFuZFZlcnRpY2FsbHlUb0NvbnRhaW4ocnVuUmVjdCk7CiAg
ICAgICAgIC8vIENvbnZlcnQgcnVucyBmcm9tIHJlbGF0aXZlIHRvIHRoZSBsaW5lIHRvcC9sZWZ0
IHRvIHRoZSBmb3JtYXR0aW5nIHJvb3QncyBib3JkZXIgYm94IHRvcC9sZWZ0LgotICAgICAgICBy
dW4ubW92ZVZlcnRpY2FsbHkobV9saW5lQm94LmxvZ2ljYWxUb3AoKSk7Ci0gICAgICAgIHJ1bi5t
b3ZlSG9yaXpvbnRhbGx5KG1fbGluZUJveC5sb2dpY2FsTGVmdCgpKTsKKyAgICAgICAgcnVuUmVj
dC5tb3ZlVmVydGljYWxseShtX2xpbmVCb3gubG9naWNhbFRvcCgpKTsKKyAgICAgICAgcnVuUmVj
dC5tb3ZlSG9yaXpvbnRhbGx5KG1fbGluZUJveC5sb2dpY2FsTGVmdCgpKTsKICAgICB9CiAgICAg
bV9saW5lQm94LnNldFNjcm9sbGFibGVPdmVyZmxvdyhzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0KTsK
IH0KIAotdm9pZCBMaW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5zKElubGluZUxheW91dFVu
aXQgYXZhaWxhYmxlV2lkdGgpCi17Ci0gICAgQVNTRVJUKGF2YWlsYWJsZVdpZHRoID4gMCk7Ci0g
ICAgLy8gQ29sbGVjdCB0aGUgZXhwYW5zaW9uIG9wcG9ydHVuaXR5IG51bWJlcnMgYW5kIGZpbmQg
dGhlIGxhc3QgcnVuIHdpdGggY29udGVudC4KLSAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQgPSAwOwotICAgIExpbmVCdWlsZGVyOjpSdW4qIGxhc3RSdW5XaXRoQ29udGVudCA9IG51
bGxwdHI7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAgZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudCArPSBydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpOwotICAg
ICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0JveCgpKQotICAgICAgICAgICAgbGFzdFJ1
bldpdGhDb250ZW50ID0gJnJ1bjsKLSAgICB9Ci0gICAgLy8gTmVlZCB0byBmaXggdXAgdGhlIGxh
c3QgcnVuJ3MgdHJhaWxpbmcgZXhwYW5zaW9uLgotICAgIGlmIChsYXN0UnVuV2l0aENvbnRlbnQg
JiYgbGFzdFJ1bldpdGhDb250ZW50LT5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKSB7Ci0gICAg
ICAgIC8vIFR1cm4gb2ZmIHRoZSB0cmFpbGluZyBiaXRzIGZpcnN0IGFuZCBhZGQgdGhlIGZvcmJp
ZCB0cmFpbGluZyBleHBhbnNpb24uCi0gICAgICAgIGF1dG8gbGVmdEV4cGFuc2lvbiA9IGxhc3RS
dW5XaXRoQ29udGVudC0+ZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlZnRFeHBhbnNpb25NYXNrOwot
ICAgICAgICBsYXN0UnVuV2l0aENvbnRlbnQtPnNldEV4cGFuc2lvbkJlaGF2aW9yKGxlZnRFeHBh
bnNpb24gfCBGb3JiaWRSaWdodEV4cGFuc2lvbik7Ci0gICAgfQotICAgIC8vIE5vdGhpbmcgdG8g
ZGlzdHJpYnV0ZT8KLSAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCi0gICAgICAg
IHJldHVybjsKLSAgICAvLyBEaXN0cmlidXRlIHRoZSBleHRyYSBzcGFjZS4KLSAgICBhdXRvIGV4
cGFuc2lvblRvRGlzdHJpYnV0ZSA9IGF2YWlsYWJsZVdpZHRoIC8gZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudDsKLSAgICBJbmxpbmVMYXlvdXRVbml0IGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gMDsK
LSAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgewotICAgICAgICAvLyBFeHBhbmQgYW5kIG1v
dmVzIHJ1bnMgYnkgdGhlIGFjY3VtdWxhdGVkIGV4cGFuc2lvbi4KLSAgICAgICAgaWYgKCFydW4u
aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkgewotICAgICAgICAgICAgcnVuLm1vdmVIb3Jpem9u
dGFsbHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgQVNTRVJUKHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkpOwot
ICAgICAgICBhdXRvIGNvbXB1dGVkRXhwYW5zaW9uID0gZXhwYW5zaW9uVG9EaXN0cmlidXRlICog
cnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKTsKLSAgICAgICAgcnVuLnNldENvbXB1dGVk
SG9yaXpvbnRhbEV4cGFuc2lvbihjb21wdXRlZEV4cGFuc2lvbik7Ci0gICAgICAgIHJ1bi5tb3Zl
SG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKLSAgICAgICAgYWNjdW11bGF0ZWRF
eHBhbnNpb24gKz0gY29tcHV0ZWRFeHBhbnNpb247Ci0gICAgfQotfQotCiB2b2lkIExpbmVDb250
ZW50QWxpZ25lcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCkKIHsKICAgICB1bnNpZ25l
ZCBpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwgPSAwOwpAQCAtMjc3LDkgKzI2Niw2IEBAIHZv
aWQgTGluZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKQogICAg
IGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CiAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IHJ1
bi5sYXlvdXRCb3goKTsKICAgICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsK
LQotICAgICAgICBydW4uc2V0TG9naWNhbEhlaWdodChydW5Db250ZW50SGVpZ2h0KHJ1bikpOwot
CiAgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpIHsKICAgICAg
ICAgICAgIGlmIChpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwpIHsKICAgICAgICAgICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IGFkanVzdGVkIHRoZSBsaW5lIGhlaWdodC9iYXNlbGluZSB0aHJv
dWdoIHRoZSBwYXJlbnQgaW5saW5lIGNvbnRhaW5lci4gCkBAIC0zODUsMjQgKzM3MSw2IEBAIEhh
bmdpbmdDb250ZW50IExpbmVDb250ZW50QWxpZ25lcjo6Y29sbGVjdEhhbmdpbmdDb250ZW50KElz
TGFzdExpbmVXaXRoSW5saW5lQ29uCiAgICAgcmV0dXJuIGhhbmdpbmdDb250ZW50OwogfQogCi1J
bmxpbmVMYXlvdXRVbml0IExpbmVDb250ZW50QWxpZ25lcjo6cnVuQ29udGVudEhlaWdodChjb25z
dCBMaW5lQnVpbGRlcjo6UnVuJiBydW4pIGNvbnN0Ci17Ci0gICAgYXV0byYgZm9udE1ldHJpY3Mg
PSBydW4uc3R5bGUoKS5mb250TWV0cmljcygpOwotICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVu
LmlzTGluZUJyZWFrKCkpCi0gICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKLQot
ICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgpKQot
ICAgICAgICByZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0KLSAgICBhdXRvJiBsYXlvdXRC
b3ggPSBydW4ubGF5b3V0Qm94KCk7Ci0gICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgaWYgKGxheW91dEJveC5p
c1JlcGxhY2VkQm94KCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAg
ICAgIHJldHVybiBib3hHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCk7Ci0KLSAgICAvLyBOb24t
cmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJpdCBt
aXNsZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRlbnQg
aGVpZ2h0IGhlcmUuCi0gICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOwot
fQotCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KElu
dmFsaWRhdGlvblN0YXRlJiBpbnZhbGlkYXRpb25TdGF0ZSwgY29uc3QgQ29uc3RyYWludHNGb3JJ
bkZsb3dDb250ZW50JiBjb25zdHJhaW50cykKIHsKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0
dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1N0YXJ0XSAtPiBpbmxpbmUgZm9ybWF0dGlu
ZyBjb250ZXh0IC0+IGZvcm1hdHRpbmcgcm9vdCgiIDw8ICZyb290KCkgPDwgIikiKTsKQEAgLTQ3
NywxMyArNDQ1LDI4IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQo
SW5saW5lSXRlbXMmIGlubGluZUl0ZW1zLCBMaW5lTGF5b3V0Q29uCiAgICAgICAgIC8vICJzcFs8
LWxpbmUgYnJlYWstPl1saXRfY29udGVudCIgLT4gb3ZlcmZsb3cgbGVuZ3RoOiAxMSAtPiBsZWFk
aW5nIHBhcnRpYWwgY29udGVudCBsZW5ndGg6IDExLgogICAgICAgICBhdXRvIHBhcnRpYWxMZWFk
aW5nQ29udGVudExlbmd0aCA9IHByZXZpb3VzTGluZSA/IHByZXZpb3VzTGluZS0+b3ZlcmZsb3dD
b250ZW50TGVuZ3RoIDogV1RGOjpudWxsb3B0OwogICAgICAgICBhdXRvIGxpbmVDb250ZW50ID0g
bGluZUxheW91dENvbnRleHQubGF5b3V0SW5saW5lQ29udGVudChsaW5lLCBuZWVkc0xheW91dFJh
bmdlLCBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpOwotCiAgICAgICAgIGF1dG8gbGluZUNv
bnRlbnRSYW5nZSA9IGxpbmVDb250ZW50LmlubGluZUl0ZW1SYW5nZTsKLSAgICAgICAgYXV0byBs
aW5lQm94ID0gTGluZUJveCB7IERpc3BsYXk6OklubGluZVJlY3QgeyBsaW5lQ29uc3RyYWludHMu
bG9naWNhbFRvcExlZnQsIGxpbmUuY29udGVudExvZ2ljYWxXaWR0aCgpLCBsaW5lQ29uc3RyYWlu
dHMubGluZUhlaWdodCB9LCBMaW5lQm94OjpoYWxmTGVhZGluZ01ldHJpY3Mocm9vdCgpLnN0eWxl
KCkuZm9udE1ldHJpY3MoKSwgbGluZUNvbnN0cmFpbnRzLmxpbmVIZWlnaHQpIH07CiAKICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGFuZCB3aWxsIGV2ZW50dWFsbHkgZ2V0IG1l
cmdlZCB0byBMaW5lQm94LgorICAgICAgICBhdXRvIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCA9IFsmXSB7CisgICAgICAgICAgICBpZiAobGluZUNvbnRlbnRSYW5nZS5lbmQgPT0gbmVlZHNM
YXlvdXRSYW5nZS5lbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIExpbmVDb250ZW50QWxpZ25l
cjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXM7CisgICAgICAgICAgICBpZiAobGlu
ZUNvbnRlbnQucGFydGlhbENvbnRlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIExpbmVDb250
ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKKyAgICAgICAgICAg
IC8vIE9taXQgZmxvYXRzIHRvIHNlZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGxpbmUgd2l0aCBpbmxp
bmUgY29udGVudC4KKyAgICAgICAgICAgIGZvciAoYXV0byBpID0gbmVlZHNMYXlvdXRSYW5nZS5l
bmQ7IGktLTspIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlubGluZUl0ZW1zW2ldLmlzRmxvYXQo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT0gbGluZUNvbnRlbnRSYW5nZS5lbmQg
LSAxID8gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Olll
cyA6IExpbmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBv
bmUgbm9uLWZsb2F0IGl0ZW0uCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBMaW5lQ29udGVudEFsaWduZXI6OklzTGFzdExpbmVXaXRoSW5saW5l
Q29udGVudDo6Tm87CisgICAgICAgIH0oKTsKKyAgICAgICAgbGluZS5jbG9zZShpc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQgPT0gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElu
bGluZUNvbnRlbnQ6Olllcyk7CisKKyAgICAgICAgYXV0byBsaW5lQm94ID0gTGluZUJveCB7IERp
c3BsYXk6OklubGluZVJlY3QgeyBsaW5lQ29uc3RyYWludHMubG9naWNhbFRvcExlZnQsIGxpbmUu
Y29udGVudExvZ2ljYWxXaWR0aCgpLCBsaW5lQ29uc3RyYWludHMubGluZUhlaWdodCB9LCBMaW5l
Qm94OjpoYWxmTGVhZGluZ01ldHJpY3Mocm9vdCgpLnN0eWxlKCkuZm9udE1ldHJpY3MoKSwgbGlu
ZUNvbnN0cmFpbnRzLmxpbmVIZWlnaHQpIH07CisgICAgICAgIGF1dG8gY29udGVudEFsaWduZXIg
PSBMaW5lQ29udGVudEFsaWduZXIgeyAqdGhpcywgbGluZUJveCwgbGluZS5ydW5zKCksIGxpbmUu
YXZhaWxhYmxlV2lkdGgoKSB9OwogICAgICAgICBhdXRvIGFsaWduTGluZUNvbnRlbnQgPSBbJl0g
ewotICAgICAgICAgICAgYXV0byBjb250ZW50QWxpZ25lciA9IExpbmVDb250ZW50QWxpZ25lciB7
ICp0aGlzLCBsaW5lQm94LCBsaW5lLnJ1bnMoKSwgbGluZS5hdmFpbGFibGVXaWR0aCgpIH07CiAg
ICAgICAgICAgICBjb250ZW50QWxpZ25lci5hZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsK
ICAgICAgICAgICAgIGlmIChsaW5lLmlzVmlzdWFsbHlFbXB0eSgpKSB7CiAgICAgICAgICAgICAg
ICAgbGluZUJveC5yZXNldEFsaWdubWVudEJhc2VsaW5lKCk7CkBAIC00OTYsMjEgKzQ3OSw2IEBA
IHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRlbXMmIGlu
bGluZUl0ZW1zLCBMaW5lTGF5b3V0Q29uCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250
ZW50QWxpZ25lci5hbGlnblZlcnRpY2FsbHkoKTsKIAotICAgICAgICAgICAgYXV0byBpc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQgPSBbJl0gewotICAgICAgICAgICAgICAgIGlmIChsaW5lQ29u
dGVudFJhbmdlLmVuZCA9PSBuZWVkc0xheW91dFJhbmdlLmVuZCkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIExpbmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
OjpZZXM7Ci0gICAgICAgICAgICAgICAgaWYgKGxpbmVDb250ZW50LnBhcnRpYWxDb250ZW50KQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQ6Ok5vOwotICAgICAgICAgICAgICAgIC8vIE9taXQgZmxvYXRzIHRv
IHNlZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGxpbmUgd2l0aCBpbmxpbmUgY29udGVudC4KLSAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8gaSA9IG5lZWRzTGF5b3V0UmFuZ2UuZW5kOyBpLS07KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghaW5saW5lSXRlbXNbaV0uaXNGbG9hdCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT0gbGluZUNvbnRlbnRSYW5nZS5lbmQgLSAxID8g
TGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcyA6IExp
bmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gVGhlcmUgaGFzIHRvIGJlIGF0IGxlYXN0
IG9uZSBub24tZmxvYXQgaXRlbS4KLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQ6Ok5vOwotICAgICAgICAgICAgfSgpOwotCiAgICAgICAgICAgICBh
dXRvIGNvbXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCA9IFsmXSB7CiAgICAgICAgICAgICAgICAg
aWYgKHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKTsK
QEAgLTUyNSw3ICs0OTMsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5
b3V0KElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGluZUxheW91dENvbgogICAgICAgICB9Owog
CiAgICAgICAgIGFsaWduTGluZUNvbnRlbnQoKTsKLSAgICAgICAgc2V0RGlzcGxheUJveGVzRm9y
TGluZShsaW5lLCBsaW5lQm94LCBsaW5lQ29udGVudCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCk7
CisgICAgICAgIHNldERpc3BsYXlCb3hlc0ZvckxpbmUobGluZSwgY29udGVudEFsaWduZXIuaW5s
aW5lUmVjdExpc3QoKSwgbGluZUJveCwgbGluZUNvbnRlbnQsIGNvbnN0cmFpbnRzLmhvcml6b250
YWwpOwogCiAgICAgICAgIGlmICghbGluZUNvbnRlbnRSYW5nZS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIEFTU0VSVChuZWVkc0xheW91dFJhbmdlLnN0YXJ0IDwgbGluZUNvbnRlbnRSYW5nZS5l
bmQpOwpAQCAtODM3LDcgKzgwNSw3IEBAIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lQ29u
c3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbnN0cmFpbnRzRm9yCiAgICAgcmV0
dXJuIExpbmVDb25zdHJhaW50cyB7IHsgbGluZUxvZ2ljYWxMZWZ0LCBsaW5lTG9naWNhbFRvcCB9
LCBsaW5lTG9naWNhbFJpZ2h0IC0gbGluZUxvZ2ljYWxMZWZ0LCBpbml0aWFsTGluZUhlaWdodCwg
bGluZUlzQ29uc3RyYWluZWRCeUZsb2F0IH07CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXImIGxpbmUsIGNv
bnN0IExpbmVCb3gmIGxpbmVCb3gsICBjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6TGluZUNvbnRl
bnQmIGxpbmVDb250ZW50LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxD
b25zdHJhaW50cykKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hl
c0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXImIGxpbmUsIGNvbnN0IExpbmVDb250ZW50QWxpZ25l
cjo6SW5saW5lUnVuUmVjdExpc3QmIHJ1blJlY3RMaXN0LCBjb25zdCBMaW5lQm94JiBsaW5lQm94
LCBjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50LCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKIHsKICAgICBh
dXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKIApAQCAtODY3
LDkgKzgzNSw5IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hl
c0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXImIGxpbmUsIGNvCiAgICAgYXV0byBsaW5lSW5rT3Zl
cmZsb3cgPSBsaW5lQm94LnNjcm9sbGFibGVPdmVyZmxvdygpOwogICAgIC8vIENvbXB1dGUgYm94
IGZpbmFsIGdlb21ldHJ5LgogICAgIGF1dG8mIGxpbmVSdW5zID0gbGluZS5ydW5zKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbGluZVJ1bnMuc2l6ZSgpOyArK2luZGV4
KSB7CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVSdW5zLnNpemUoKTsg
KytpbmRleCkgewogICAgICAgICBhdXRvJiBsaW5lUnVuID0gbGluZVJ1bnMuYXQoaW5kZXgpOwot
ICAgICAgICBhdXRvJiBsb2dpY2FsUmVjdCA9IGxpbmVSdW4ubG9naWNhbFJlY3QoKTsKKyAgICAg
ICAgYXV0byBsb2dpY2FsUmVjdCA9IHJ1blJlY3RMaXN0W2luZGV4XTsKICAgICAgICAgYXV0byYg
bGF5b3V0Qm94ID0gbGluZVJ1bi5sYXlvdXRCb3goKTsKIAogICAgICAgICAvLyBBZGQgZmluYWwg
ZGlzcGxheSBydW5zIHRvIHN0YXRlIGZpcnN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
LmgKaW5kZXggMDNlNGZiNmE4YWE2Yzg1YjY5MDAzOTVlM2U5N2JjNGU5MTYyOGZhZC4uMzM5NTQ0
MDkyOTZiOWEwYWFlODY4YTVjOTRjYzJkMDViZjdhNjZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5oCkBAIC05NCw3ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbGlu
ZUlzQ29uc3RyYWluZWRCeUZsb2F0IHsgZmFsc2UgfTsKICAgICB9OwogICAgIExpbmVDb25zdHJh
aW50cyBjb25zdHJhaW50c0ZvckxpbmUoY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgSW5s
aW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFRvcCk7Ci0gICAgdm9pZCBzZXREaXNwbGF5Qm94ZXNG
b3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyJiwgY29uc3QgTGluZUJveCYsIGNvbnN0IExpbmVMYXlv
dXRDb250ZXh0OjpMaW5lQ29udGVudCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpOwor
ICAgIHZvaWQgc2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlciYsIGNvbnN0
IFZlY3RvcjxEaXNwbGF5OjpJbmxpbmVSZWN0LCAxMD4mLCBjb25zdCBMaW5lQm94JiwgY29uc3Qg
TGluZUxheW91dENvbnRleHQ6OkxpbmVDb250ZW50JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJik7CiAgICAgdm9pZCBpbnZhbGlkYXRlRm9ybWF0dGluZ1N0YXRlKGNvbnN0IEludmFsaWRh
dGlvblN0YXRlJik7CiAKICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRp
bmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4o
Rm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxk
ZXIuY3BwCmluZGV4IDY0NTI2NjEzNzhmNjZmZTNiZjVlNmE0NjM1YTI0NDYxY2IwZWFjOTAuLjk1
YTQ3NDMwYjViNjdlNmNhYzVkZGZhNTM5NmNhMTAyNzYzNWNhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVp
bGRlci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5oIgogI2luY2x1ZGUgIklubGluZVNvZnRMaW5lQnJlYWtJdGVtLmgiCiAjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1
ZGUgIlRleHRVdGlsLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAt
NzIsMTMgKzczLDUxIEBAIHZvaWQgTGluZUJ1aWxkZXI6OmNsZWFyQ29udGVudCgpCiAgICAgbV9s
aW5lSXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1hYmxlVHJhaWxpbmdDb250ZW50ID0geyB9Owog
fQogCi12b2lkIExpbmVCdWlsZGVyOjpjbG9zZSgpCit2b2lkIExpbmVCdWlsZGVyOjpjbG9zZShi
b29sIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkKIHsKICNpZiBBU1NFUlRfRU5BQkxFRAog
ICAgIG1faXNDbG9zZWQgPSB0cnVlOwogI2VuZGlmCiAgICAgcmVtb3ZlVHJhaWxpbmdUcmltbWFi
bGVDb250ZW50KCk7CiAgICAgdmlzdWFsbHlDb2xsYXBzZVByZVdyYXBPdmVyZmxvd0NvbnRlbnQo
KTsKKworICAgIGF1dG8gY29tcHV0ZUV4cGFuc2lvbkZvclJ1bnNJZk5lZWRlZCA9IFsmXSB7Cisg
ICAgICAgIGlmIChmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigp
ICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IC8vIFRleHQgaXMganVzdGlmaWVkIGFjY29yZGluZyB0byB0aGUgbWV0aG9kIHNwZWNpZmllZCBi
eSB0aGUgdGV4dC1qdXN0aWZ5IHByb3BlcnR5LAorICAgICAgICAvLyBpbiBvcmRlciB0byBleGFj
dGx5IGZpbGwgdGhlIGxpbmUgYm94LiBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBieSB0ZXh0
LWFsaWduLWxhc3QsCisgICAgICAgIC8vIHRoZSBsYXN0IGxpbmUgYmVmb3JlIGEgZm9yY2VkIGJy
ZWFrIG9yIHRoZSBlbmQgb2YgdGhlIGJsb2NrIGlzIHN0YXJ0LWFsaWduZWQuCisgICAgICAgIGlm
IChpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGlmIChtX3J1bnMuaXNFbXB0eSgpIHx8IG1fcnVucy5sYXN0KCkuaXNMaW5lQnJlYWsoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQgPSAwOworICAgICAgICBSdW4qIGxhc3RSdW5XaXRoQ29udGVudCA9IG51bGxwdHI7Cisg
ICAgICAgIC8vIENvbGxlY3QgYW5kIGRpc3RyaWJ1dGUgdGhlIGV4cGFuc2lvbiBvcHBvcnR1bml0
aWVzLgorICAgICAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgeworICAgICAgICAgICAgZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudCArPSBydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgp
OworICAgICAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNCb3goKSkKKyAgICAgICAg
ICAgICAgICBsYXN0UnVuV2l0aENvbnRlbnQgPSAmcnVuOworICAgICAgICB9CisgICAgICAgIC8v
IE5lZWQgdG8gZml4IHVwIHRoZSBsYXN0IHJ1bidzIHRyYWlsaW5nIGV4cGFuc2lvbi4KKyAgICAg
ICAgaWYgKGxhc3RSdW5XaXRoQ29udGVudCAmJiBsYXN0UnVuV2l0aENvbnRlbnQtPmhhc0V4cGFu
c2lvbk9wcG9ydHVuaXR5KCkpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gb2ZmIHRoZSB0cmFpbGlu
ZyBiaXRzIGZpcnN0IGFuZCBhZGQgdGhlIGZvcmJpZCB0cmFpbGluZyBleHBhbnNpb24uCisgICAg
ICAgICAgICBhdXRvIGxlYWRpbmdFeHBhbnNpb24gPSBsYXN0UnVuV2l0aENvbnRlbnQtPmV4cGFu
c2lvbkJlaGF2aW9yKCkgJiBMZWZ0RXhwYW5zaW9uTWFzazsKKyAgICAgICAgICAgIGxhc3RSdW5X
aXRoQ29udGVudC0+c2V0RXhwYW5zaW9uQmVoYXZpb3IobGVhZGluZ0V4cGFuc2lvbiB8IEZvcmJp
ZFJpZ2h0RXhwYW5zaW9uKTsKKyAgICAgICAgfQorICAgICAgICAvLyBBbnl0aGluZyB0byBkaXN0
cmlidXRlPworICAgICAgICBpZiAoZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCAmJiBhdmFpbGFi
bGVXaWR0aCgpKSB7CisgICAgICAgICAgICAvLyBEaXN0cmlidXRlIHRoZSBleHRyYSBzcGFjZS4K
KyAgICAgICAgICAgIGF1dG8gZXhwYW5zaW9uVG9EaXN0cmlidXRlID0gYXZhaWxhYmxlV2lkdGgo
KSAvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHJ1
biA6IG1fcnVucykgeworICAgICAgICAgICAgICAgIC8vIEV4cGFuZCBhbmQgbW92ZXMgcnVucyBi
eSB0aGUgYWNjdW11bGF0ZWQgZXhwYW5zaW9uLgorICAgICAgICAgICAgICAgIGlmIChydW4uaGFz
RXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcnVuLnNldEhvcml6
b250YWxFeHBhbnNpb24oZXhwYW5zaW9uVG9EaXN0cmlidXRlICogcnVuLmV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIGNv
bXB1dGVFeHBhbnNpb25Gb3JSdW5zSWZOZWVkZWQoKTsKIH0KIAogdm9pZCBMaW5lQnVpbGRlcjo6
cmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCkKQEAgLTE0Myw3ICsxODIsNyBAQCB2b2lk
IExpbmVCdWlsZGVyOjp2aXN1YWxseUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCgpCiAg
ICAgICAgIElubGluZUxheW91dFVuaXQgdHJpbW1hYmxlV2lkdGggPSB7IH07CiAgICAgICAgIGlm
IChydW4uaXNUZXh0KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWx3YXlz
IGNvbGxhcHNlIHRoZSBydW4gYXQgYSBnbHlwaCBib3VuZGFyeSBhcyB0aGUgc3BlYyBpbmRpY2F0
ZXM6ICJjb2xsYXBzZSB0aGUgY2hhcmFjdGVyIGFkdmFuY2Ugd2lkdGhzIG9mIGFueSB0aGF0IHdv
dWxkIG90aGVyd2lzZSBvdmVyZmxvdyIKLSAgICAgICAgICAgIC8vIGFuZCB0aGUgdHJpbW1lZCB3
aWR0aCBzaG91bGQgYmUgY2FwcGVkIGF0IHN0ZDo6bWluKHJ1bi50cmFpbGluZ1doaXRlc3BhY2VX
aWR0aCgpLCBvdmVyZmxvd1dpZHRoKSBmb3IgdGV4Z3QgcnVucy4gQm90aCBGRiBhbmQgQ2hyb21l
IGFncmVlLgorICAgICAgICAgICAgLy8gYW5kIHRoZSB0cmltbWVkIHdpZHRoIHNob3VsZCBiZSBj
YXBwZWQgYXQgc3RkOjptaW4ocnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCksIG92ZXJmbG93
V2lkdGgpIGZvciB0ZXh0IHJ1bnMuIEJvdGggRkYgYW5kIENocm9tZSBhZ3JlZS4KICAgICAgICAg
ICAgIHRyaW1tYWJsZVdpZHRoID0gcnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCk7CiAgICAg
ICAgICAgICBydW4udmlzdWFsbHlDb2xsYXBzZVRyYWlsaW5nV2hpdGVzcGFjZSgpOwogICAgICAg
ICB9IGVsc2UgewpAQCAtMzU5LDE0ICszOTgsMTQgQEAgdm9pZCBMaW5lQnVpbGRlcjo6VHJpbW1h
YmxlVHJhaWxpbmdDb250ZW50OjphZGRGdWxseVRyaW1tYWJsZUNvbnRlbnQoc2l6ZV90IHJ1bkkK
ICAgICAvLyBBbnkgc3Vic2VxdWVudCB0cmltbWFibGUgd2hpdGVzcGFjZSBzaG91bGQgY29sbGFw
c2UgdG8gemVybyBhZHZhbmNlZCB3aWR0aCBhbmQgaWdub3JlZCBhdCA6OmFwcGVuZFRleHRDb250
ZW50KCkuCiAgICAgQVNTRVJUKCFtX2hhc0Z1bGx5VHJpbW1hYmxlQ29udGVudCk7CiAgICAgbV9m
dWxseVRyaW1tYWJsZVdpZHRoID0gdHJpbW1hYmxlV2lkdGg7Ci0gICAgLy8gTm90ZSB0aGF0IGp1
c3QgYmVjYXN1ZSB0aGUgdHJpbW1hYmxlIHdpZHRoIGlzIDAgKGZvbnQtc2l6ZTogMHB4KSwgaXQg
ZG9lcyBub3QgbWVhbiB3ZSBkb24ndCBoYXZlIGEgdHJpbW1hYmxlIHRyYWlsaW5nIGNvbnRlbnQu
CisgICAgLy8gTm90ZSB0aGF0IGp1c3QgYmVjYXVzZSB0aGUgdHJpbW1hYmxlIHdpZHRoIGlzIDAg
KGZvbnQtc2l6ZTogMHB4KSwgaXQgZG9lcyBub3QgbWVhbiB3ZSBkb24ndCBoYXZlIGEgdHJpbW1h
YmxlIHRyYWlsaW5nIGNvbnRlbnQuCiAgICAgbV9oYXNGdWxseVRyaW1tYWJsZUNvbnRlbnQgPSB0
cnVlOwogICAgIG1fZmlyc3RSdW5JbmRleCA9IG1fZmlyc3RSdW5JbmRleC52YWx1ZU9yKHJ1bklu
ZGV4KTsKIH0KIAogdm9pZCBMaW5lQnVpbGRlcjo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50Ojph
ZGRQYXJ0aWFsbHlUcmltbWFibGVDb250ZW50KHNpemVfdCBydW5JbmRleCwgSW5saW5lTGF5b3V0
VW5pdCB0cmltbWFibGVXaWR0aCkKIHsKLSAgICAvLyBEbyBub3QgYWRkIHRyaW1tYWJsZSBsZXR0
ZXIgc3BhY2luZyBhZnRlciBhIGZ1bGx5IHRyaW1tYWJsZSB3aGl0ZXNhcGNlLgorICAgIC8vIERv
IG5vdCBhZGQgdHJpbW1hYmxlIGxldHRlciBzcGFjaW5nIGFmdGVyIGEgZnVsbHkgdHJpbW1hYmxl
IHdoaXRlc3BhY2UuCiAgICAgQVNTRVJUKCFtX2ZpcnN0UnVuSW5kZXgpOwogICAgIEFTU0VSVCgh
bV9oYXNGdWxseVRyaW1tYWJsZUNvbnRlbnQpOwogICAgIEFTU0VSVCghbV9wYXJ0aWFsbHlUcmlt
bWFibGVXaWR0aCk7CkBAIC00MTEsMTQgKzQ1MCwxNSBAQCBJbmxpbmVMYXlvdXRVbml0IExpbmVC
dWlsZGVyOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OnJlbW92ZVBhcnRpYWxseVRyaW1tYWJs
ZQogTGluZUJ1aWxkZXI6OlJ1bjo6UnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElu
bGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRo
KQogICAgIDogbV90eXBlKGlubGluZUl0ZW0udHlwZSgpKQogICAgICwgbV9sYXlvdXRCb3goJmlu
bGluZUl0ZW0ubGF5b3V0Qm94KCkpCi0gICAgLCBtX2xvZ2ljYWxSZWN0KHsgMCwgbG9naWNhbExl
ZnQsIGxvZ2ljYWxXaWR0aCwgMCB9KQorICAgICwgbV9sb2dpY2FsTGVmdChsb2dpY2FsTGVmdCkK
KyAgICAsIG1fbG9naWNhbFdpZHRoKGxvZ2ljYWxXaWR0aCkKIHsKIH0KIAogTGluZUJ1aWxkZXI6
OlJ1bjo6UnVuKGNvbnN0IElubGluZVNvZnRMaW5lQnJlYWtJdGVtJiBzb2Z0TGluZUJyZWFrSXRl
bSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCkKICAgICA6IG1fdHlwZShzb2Z0TGluZUJy
ZWFrSXRlbS50eXBlKCkpCiAgICAgLCBtX2xheW91dEJveCgmc29mdExpbmVCcmVha0l0ZW0ubGF5
b3V0Qm94KCkpCi0gICAgLCBtX2xvZ2ljYWxSZWN0KHsgMCwgbG9naWNhbExlZnQsIDAsIDAgfSkK
KyAgICAsIG1fbG9naWNhbExlZnQobG9naWNhbExlZnQpCiAgICAgLCBtX3RleHRDb250ZW50KHsg
c29mdExpbmVCcmVha0l0ZW0ucG9zaXRpb24oKSwgMSwgc29mdExpbmVCcmVha0l0ZW0uaW5saW5l
VGV4dEJveCgpLmNvbnRlbnQoKSwgZmFsc2UgfSkKIHsKIH0KQEAgLTQyNiw3ICs0NjYsOCBAQCBM
aW5lQnVpbGRlcjo6UnVuOjpSdW4oY29uc3QgSW5saW5lU29mdExpbmVCcmVha0l0ZW0mIHNvZnRM
aW5lQnJlYWtJdGVtLCBJbmxpbmVMYQogTGluZUJ1aWxkZXI6OlJ1bjo6UnVuKGNvbnN0IElubGlu
ZVRleHRJdGVtJiBpbmxpbmVUZXh0SXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwg
SW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wgbmVlZHNIeXBoZW4pCiAgICAgOiBt
X3R5cGUoSW5saW5lSXRlbTo6VHlwZTo6VGV4dCkKICAgICAsIG1fbGF5b3V0Qm94KCZpbmxpbmVU
ZXh0SXRlbS5sYXlvdXRCb3goKSkKLSAgICAsIG1fbG9naWNhbFJlY3QoeyAwLCBsb2dpY2FsTGVm
dCwgbG9naWNhbFdpZHRoLCAwIH0pCisgICAgLCBtX2xvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KQor
ICAgICwgbV9sb2dpY2FsV2lkdGgobG9naWNhbFdpZHRoKQogICAgICwgbV90cmFpbGluZ1doaXRl
c3BhY2VUeXBlKHRyYWlsaW5nV2hpdGVzcGFjZVR5cGUoaW5saW5lVGV4dEl0ZW0pKQogICAgICwg
bV90ZXh0Q29udGVudCh7IGlubGluZVRleHRJdGVtLnN0YXJ0KCksIG1fdHJhaWxpbmdXaGl0ZXNw
YWNlVHlwZSA9PSBUcmFpbGluZ1doaXRlc3BhY2U6OkNvbGxhcHNlZCA/IDEgOiBpbmxpbmVUZXh0
SXRlbS5sZW5ndGgoKSwgaW5saW5lVGV4dEl0ZW0uaW5saW5lVGV4dEJveCgpLmNvbnRlbnQoKSwg
bmVlZHNIeXBoZW4gfSkKIHsKQEAgLTQ0NCw3ICs0ODUsNyBAQCB2b2lkIExpbmVCdWlsZGVyOjpS
dW46OmV4cGFuZChjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lVGV4dEl0ZW0sIElubGluZUxh
eW91dAogICAgIEFTU0VSVChpc1RleHQoKSAmJiBpbmxpbmVUZXh0SXRlbS5pc1RleHQoKSk7CiAg
ICAgQVNTRVJUKG1fbGF5b3V0Qm94ID09ICZpbmxpbmVUZXh0SXRlbS5sYXlvdXRCb3goKSk7CiAK
LSAgICBtX2xvZ2ljYWxSZWN0LmV4cGFuZEhvcml6b250YWxseShsb2dpY2FsV2lkdGgpOworICAg
IG1fbG9naWNhbFdpZHRoICs9IGxvZ2ljYWxXaWR0aDsKICAgICBtX3RyYWlsaW5nV2hpdGVzcGFj
ZVR5cGUgPSB0cmFpbGluZ1doaXRlc3BhY2VUeXBlKGlubGluZVRleHRJdGVtKTsKIAogICAgIGlm
IChtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgPT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpOb25lKSB7
CkBAIC00ODUsNyArNTI2LDcgQEAgdm9pZCBMaW5lQnVpbGRlcjo6UnVuOjpyZW1vdmVUcmFpbGlu
Z0xldHRlclNwYWNpbmcoKQogdm9pZCBMaW5lQnVpbGRlcjo6UnVuOjpyZW1vdmVUcmFpbGluZ1do
aXRlc3BhY2UoKQogewogICAgIC8vIEFjY29yZGluZyB0byBodHRwczovL3d3dy53My5vcmcvVFIv
Y3NzLXRleHQtMy8jd2hpdGUtc3BhY2UtcHJvcGVydHkgbWF0cml4Ci0gICAgLy8gVHJpbW1hYmxl
IHdoaXRlc3BhY2UgaXMgYWx3YXlzIGNvbGxhcHNhYmxlIHNvIHRoZSBsZW5ndGggb2YgdGhlIHRy
YWlsaW5nIHRyaW1tYWJsZSB3aGl0ZXNwYWNlIGlzIGFsd2F5cyAxIChvciBub24tZXhpc3RlbnQp
LgorICAgIC8vIFRyaW1tYWJsZSB3aGl0ZXNwYWNlIGlzIGFsd2F5cyBjb2xsYXBzaWJsZSBzbyB0
aGUgbGVuZ3RoIG9mIHRoZSB0cmFpbGluZyB0cmltbWFibGUgd2hpdGVzcGFjZSBpcyBhbHdheXMg
MSAob3Igbm9uLWV4aXN0ZW50KS4KICAgICBBU1NFUlQobV90ZXh0Q29udGVudC0+bGVuZ3RoKCkp
OwogICAgIGNvbnN0ZXhwciBzaXplX3QgdHJhaWxpbmdUcmltbWFibGVDb250ZW50TGVuZ3RoID0g
MTsKICAgICBtX3RleHRDb250ZW50LT5zaHJpbmsodHJhaWxpbmdUcmltbWFibGVDb250ZW50TGVu
Z3RoKTsKQEAgLTUxOCwxMSArNTU5LDEwIEBAIEV4cGFuc2lvbkJlaGF2aW9yIExpbmVCdWlsZGVy
OjpSdW46OmV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QKICAgICByZXR1cm4gbV9leHBhbnNpb24u
YmVoYXZpb3I7CiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6OlJ1bjo6c2V0Q29tcHV0ZWRIb3Jpem9u
dGFsRXhwYW5zaW9uKElubGluZUxheW91dFVuaXQgbG9naWNhbEV4cGFuc2lvbikKK3ZvaWQgTGlu
ZUJ1aWxkZXI6OlJ1bjo6c2V0SG9yaXpvbnRhbEV4cGFuc2lvbihJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxFeHBhbnNpb24pCiB7CiAgICAgQVNTRVJUKGlzVGV4dCgpKTsKICAgICBBU1NFUlQoaGFz
RXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSk7Ci0gICAgbV9sb2dpY2FsUmVjdC5leHBhbmRIb3Jpem9u
dGFsbHkobG9naWNhbEV4cGFuc2lvbik7CiAgICAgbV9leHBhbnNpb24uaG9yaXpvbnRhbEV4cGFu
c2lvbiA9IGxvZ2ljYWxFeHBhbnNpb247CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCmluZGV4IDcy
NmE2NTczY2RhZDU1Mjk1YzAyMThjNTI3MGY1OWRkZjExMjgzMWMuLjI3MDM0ODY2ZWQ5Nzc1ODlh
Y2E4NGM5MWFlOTkyYTM2MmVkZTEzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaApAQCAtNDUsNyAr
NDUsNyBAQCBwdWJsaWM6CiAgICAgfkxpbmVCdWlsZGVyKCk7CiAKICAgICB2b2lkIG9wZW4oSW5s
aW5lTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwotICAgIHZvaWQgY2xvc2UoKTsK
KyAgICB2b2lkIGNsb3NlKGJvb2wgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKICAgICB2
b2lkIGNsZWFyQ29udGVudCgpOwogCiAgICAgdm9pZCBzZXRIYXNJbnRydXNpdmVGbG9hdChib29s
IGhhc0ludHJ1c2l2ZUZsb2F0KSB7IG1faGFzSW50cnVzaXZlRmxvYXQgPSBoYXNJbnRydXNpdmVG
bG9hdDsgfQpAQCAtNzQsMzggKzc0LDMxIEBAIHB1YmxpYzoKIAogICAgICAgICBjb25zdCBCb3gm
IGxheW91dEJveCgpIGNvbnN0IHsgcmV0dXJuICptX2xheW91dEJveDsgfQogICAgICAgICBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2xheW91dEJveC0+c3R5bGUo
KTsgfQotICAgICAgICBjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiBsb2dpY2FsUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3Q7IH0KLSAgICAgICAgRGlzcGxheTo6UnVuOjpFeHBh
bnNpb24gZXhwYW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9leHBhbnNpb247IH0KICAgICAgICAg
Y29uc3QgT3B0aW9uYWw8RGlzcGxheTo6UnVuOjpUZXh0Q29udGVudD4mIHRleHRDb250ZW50KCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0Q29udGVudDsgfQogCi0gICAgICAgIFJ1bihSdW4mJikgPSBk
ZWZhdWx0OwotICAgICAgICBSdW4mIG9wZXJhdG9yPShSdW4mJiBvdGhlcikgPSBkZWZhdWx0Owor
ICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9naWNhbFdpZHRoOyB9CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQoKSBj
b25zdCB7IHJldHVybiBtX2xvZ2ljYWxMZWZ0OyB9CisKKyAgICAgICAgY29uc3QgRGlzcGxheTo6
UnVuOjpFeHBhbnNpb24mIGV4cGFuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uOyB9
CisgICAgICAgIGJvb2wgaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSBjb25zdCB7IHJldHVybiBt
X2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7IH0KKyAgICAgICAgRXhwYW5zaW9uQmVoYXZpb3Ig
ZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdDsKKyAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3Vu
dDsgfQorCisgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV90cmFpbGluZ1doaXRlc3BhY2VUeXBlICE9IFRyYWlsaW5nV2hpdGVzcGFjZTo6Tm9uZTsg
fQorICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsgfQogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIExpbmVCdWlsZGVyOwotICAgICAgICBmcmllbmQgY2xhc3Mg
TGluZUNvbnRlbnRBbGlnbmVyOwogCiAgICAgICAgIFJ1bihjb25zdCBJbmxpbmVUZXh0SXRlbSYs
IElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdp
ZHRoLCBib29sIG5lZWRzSHlwZW4pOwogICAgICAgICBSdW4oY29uc3QgSW5saW5lU29mdExpbmVC
cmVha0l0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KTsKICAgICAgICAgUnVuKGNv
bnN0IElubGluZUl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxpbmVMYXlv
dXRVbml0IGxvZ2ljYWxXaWR0aCk7CiAKICAgICAgICAgdm9pZCBleHBhbmQoY29uc3QgSW5saW5l
VGV4dEl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7Ci0KLSAgICAgICAgSW5s
aW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0
LndpZHRoKCk7IH0KLQotICAgICAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0
VW5pdCBvZmZzZXQpIHsgbV9sb2dpY2FsUmVjdC5tb3ZlSG9yaXpvbnRhbGx5KG9mZnNldCk7IH0K
LSAgICAgICAgdm9pZCBzaHJpbmtIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCB3aWR0aCkg
eyBtX2xvZ2ljYWxSZWN0LmV4cGFuZEhvcml6b250YWxseSgtd2lkdGgpOyB9Ci0KLSAgICAgICAg
dm9pZCBhZGp1c3RMb2dpY2FsVG9wKElubGluZUxheW91dFVuaXQgbG9naWNhbFRvcCkgeyBtX2xv
Z2ljYWxSZWN0LnNldFRvcChsb2dpY2FsVG9wKTsgfQotICAgICAgICB2b2lkIG1vdmVWZXJ0aWNh
bGx5KElubGluZUxheW91dFVuaXQgb2Zmc2V0KSB7IG1fbG9naWNhbFJlY3QubW92ZVZlcnRpY2Fs
bHkob2Zmc2V0KTsgfQotICAgICAgICB2b2lkIHNldExvZ2ljYWxIZWlnaHQoSW5saW5lTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0KSB7IG1fbG9naWNhbFJlY3Quc2V0SGVpZ2h0KGxvZ2ljYWxIZWln
aHQpOyB9Ci0KLSAgICAgICAgYm9vbCBoYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsgfQotICAgICAgICBFeHBhbnNpb25C
ZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0OwotICAgICAgICB1bnNpZ25lZCBleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9leHBhbnNpb25PcHBvcnR1
bml0eUNvdW50OyB9Ci0gICAgICAgIHZvaWQgc2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9u
KElubGluZUxheW91dFVuaXQgbG9naWNhbEV4cGFuc2lvbik7CisgICAgICAgIHZvaWQgbW92ZUhv
cml6b250YWxseShJbmxpbmVMYXlvdXRVbml0IG9mZnNldCkgeyBtX2xvZ2ljYWxMZWZ0ICs9IG9m
ZnNldDsgfQorICAgICAgICB2b2lkIHNocmlua0hvcml6b250YWxseShJbmxpbmVMYXlvdXRVbml0
IHdpZHRoKSB7IG1fbG9naWNhbFdpZHRoIC09IHdpZHRoOyB9CiAgICAgICAgIHZvaWQgc2V0RXhw
YW5zaW9uQmVoYXZpb3IoRXhwYW5zaW9uQmVoYXZpb3IpOwotCisgICAgICAgIHZvaWQgc2V0SG9y
aXpvbnRhbEV4cGFuc2lvbihJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxFeHBhbnNpb24pOwogICAg
ICAgICB2b2lkIHNldE5lZWRzSHlwaGVuKCkgeyBtX3RleHRDb250ZW50LT5zZXROZWVkc0h5cGhl
bigpOyB9CiAKICAgICAgICAgZW51bSBjbGFzcyBUcmFpbGluZ1doaXRlc3BhY2UgewpAQCAtMTE0
LDEwICsxMDcsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBDb2xsYXBzaWJsZSwKICAgICAgICAg
ICAgIENvbGxhcHNlZAogICAgICAgICB9OwotICAgICAgICBib29sIGhhc1RyYWlsaW5nV2hpdGVz
cGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZSAhPSBUcmFpbGlu
Z1doaXRlc3BhY2U6Ok5vbmU7IH0KICAgICAgICAgYm9vbCBoYXNDb2xsYXBzaWJsZVRyYWlsaW5n
V2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZSA9PSBU
cmFpbGluZ1doaXRlc3BhY2U6OkNvbGxhcHNpYmxlIHx8IGhhc0NvbGxhcHNlZFRyYWlsaW5nV2hp
dGVzcGFjZSgpOyB9CiAgICAgICAgIGJvb2wgaGFzQ29sbGFwc2VkVHJhaWxpbmdXaGl0ZXNwYWNl
KCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1doaXRlc3BhY2VUeXBlID09IFRyYWlsaW5nV2hp
dGVzcGFjZTo6Q29sbGFwc2VkOyB9Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgdHJhaWxpbmdX
aGl0ZXNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRo
OyB9CiAgICAgICAgIFRyYWlsaW5nV2hpdGVzcGFjZSB0cmFpbGluZ1doaXRlc3BhY2VUeXBlKGNv
bnN0IElubGluZVRleHRJdGVtJikgY29uc3Q7CiAgICAgICAgIHZvaWQgcmVtb3ZlVHJhaWxpbmdX
aGl0ZXNwYWNlKCk7CiAgICAgICAgIHZvaWQgdmlzdWFsbHlDb2xsYXBzZVRyYWlsaW5nV2hpdGVz
cGFjZSgpOwpAQCAtMTI4LDcgKzExOSw4IEBAIHB1YmxpYzoKIAogICAgICAgICBJbmxpbmVJdGVt
OjpUeXBlIG1fdHlwZSB7IElubGluZUl0ZW06OlR5cGU6OlRleHQgfTsKICAgICAgICAgY29uc3Qg
Qm94KiBtX2xheW91dEJveCB7IG51bGxwdHIgfTsKLSAgICAgICAgRGlzcGxheTo6SW5saW5lUmVj
dCBtX2xvZ2ljYWxSZWN0OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fbG9naWNhbExlZnQg
eyAwIH07CisgICAgICAgIElubGluZUxheW91dFVuaXQgbV9sb2dpY2FsV2lkdGggeyAwIH07CiAg
ICAgICAgIFRyYWlsaW5nV2hpdGVzcGFjZSBtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgeyBUcmFp
bGluZ1doaXRlc3BhY2U6Ok5vbmUgfTsKICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX3RyYWls
aW5nV2hpdGVzcGFjZVdpZHRoIHsgMCB9OwogICAgICAgICBPcHRpb25hbDxEaXNwbGF5OjpSdW46
OlRleHRDb250ZW50PiBtX3RleHRDb250ZW50OwpAQCAtMTM3LDcgKzEyOSw2IEBAIHB1YmxpYzoK
ICAgICB9OwogICAgIHVzaW5nIFJ1bkxpc3QgPSBWZWN0b3I8UnVuLCAxMD47CiAgICAgY29uc3Qg
UnVuTGlzdCYgcnVucygpIGNvbnN0IHsgcmV0dXJuIG1fcnVuczsgfQotICAgIFJ1bkxpc3QmIHJ1
bnMoKSB7IHJldHVybiBtX3J1bnM7IH0KIAogcHJpdmF0ZToKICAgICBJbmxpbmVMYXlvdXRVbml0
IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVMb2dpY2FsTGVmdCAr
IG1fY29udGVudExvZ2ljYWxXaWR0aDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCmluZGV4IGQ4
MGYzMGMyMWM2ODAyOGIzM2EzYTQ3OTRhOThhOWQ3OGUwYTRkODIuLjdmZGFjNDVjMTRlZGM5ZDkx
NDY2ODY0YzkyYmQwZWZmNTE5MmI1NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5jcHAKQEAgLTMy
NSwxNCArMzI1LDEzIEBAIExpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCBMaW5lTGF5b3V0
Q29udGV4dDo6bGF5b3V0SW5saW5lQ29udGVudChMaW5lQnVpbGRlCiAgICAgcmV0dXJuIGNsb3Nl
KGxpbmUsIGxheW91dFJhbmdlLCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIHsgfSk7CiB9CiAK
LUxpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCBMaW5lTGF5b3V0Q29udGV4dDo6Y2xvc2Uo
TGluZUJ1aWxkZXImIGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UsIHVu
c2lnbmVkIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCwgT3B0aW9uYWw8TGluZUNvbnRlbnQ6OlBh
cnRpYWxDb250ZW50PiBwYXJ0aWFsQ29udGVudCkKK0xpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29u
dGVudCBMaW5lTGF5b3V0Q29udGV4dDo6Y2xvc2UoY29uc3QgTGluZUJ1aWxkZXImIGxpbmUsIGNv
bnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UsIHVuc2lnbmVkIGNvbW1pdHRlZElubGlu
ZUl0ZW1Db3VudCwgT3B0aW9uYWw8TGluZUNvbnRlbnQ6OlBhcnRpYWxDb250ZW50PiBwYXJ0aWFs
Q29udGVudCkKIHsKLSAgICBBU1NFUlQoY29tbWl0dGVkSW5saW5lSXRlbUNvdW50IHx8ICFtX2Zs
b2F0cy5pc0VtcHR5KCkgfHwgbGluZS5oYXNJbnRydXNpdmVGbG9hdCgpKTsKKyAgICBBU1NFUlRf
VU5VU0VEKGxpbmUsIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCB8fCAhbV9mbG9hdHMuaXNFbXB0
eSgpIHx8IGxpbmUuaGFzSW50cnVzaXZlRmxvYXQoKSk7CiAgICAgYXV0byBudW1iZXJPZkNvbW1p
dHRlZEl0ZW1zID0gY29tbWl0dGVkSW5saW5lSXRlbUNvdW50ICsgbV9mbG9hdHMuc2l6ZSgpOwog
ICAgIGF1dG8gdHJhaWxpbmdJbmxpbmVJdGVtSW5kZXggPSBsYXlvdXRSYW5nZS5zdGFydCArIG51
bWJlck9mQ29tbWl0dGVkSXRlbXMgLSAxOwogICAgIGF1dG8gbGluZVJhbmdlID0gSW5saW5lSXRl
bVJhbmdlIHsgbGF5b3V0UmFuZ2Uuc3RhcnQsIHRyYWlsaW5nSW5saW5lSXRlbUluZGV4ICsgMSB9
OwogICAgIEFTU0VSVChsaW5lUmFuZ2UuZW5kIDw9IGxheW91dFJhbmdlLmVuZCk7Ci0gICAgbGlu
ZS5jbG9zZSgpOwogICAgIC8vIEFkanVzdCBoeXBoZW5hdGVkIGxpbmUgY291bnQuCiAgICAgbV9z
dWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCA9IHBhcnRpYWxDb250ZW50ICYmIHBhcnRpYWxD
b250ZW50LT50cmFpbGluZ0NvbnRlbnRIYXNIeXBoZW4gPyBtX3N1Y2Nlc3NpdmVIeXBoZW5hdGVk
TGluZUNvdW50ICsgMSA6IDA7CiAgICAgcmV0dXJuIExpbmVDb250ZW50IHsgcGFydGlhbENvbnRl
bnQsIGxpbmVSYW5nZSwgV1RGTW92ZShtX2Zsb2F0cykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oCmlu
ZGV4IDJkMmZlNWQyMzQwNmE4MzNjODI1N2Q5ODUyYTJjODNmNTIyZWZhNjUuLmExOTc5ODk2YjFl
MWI0MDgxNjQ4YmRkZTcxNDBkY2JjNzIwOTk4ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaApAQCAt
NzcsNyArNzcsNyBAQCBwcml2YXRlOgogICAgIFJlc3VsdCBoYW5kbGVGbG9hdHNBbmRJbmxpbmVD
b250ZW50KExpbmVCcmVha2VyJiwgTGluZUJ1aWxkZXImLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2Um
IGxheW91dFJhbmdlLCBjb25zdCBMaW5lQ2FuZGlkYXRlJik7CiAgICAgc2l6ZV90IHJlYnVpbGRM
aW5lKExpbmVCdWlsZGVyJiwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSk7CiAg
ICAgdm9pZCBjb21taXRQYXJ0aWFsQ29udGVudChMaW5lQnVpbGRlciYsIGNvbnN0IExpbmVCcmVh
a2VyOjpSdW5MaXN0JiwgY29uc3QgTGluZUJyZWFrZXI6OlJlc3VsdDo6UGFydGlhbFRyYWlsaW5n
Q29udGVudCYpOwotICAgIExpbmVDb250ZW50IGNsb3NlKExpbmVCdWlsZGVyJiwgY29uc3QgSW5s
aW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgdW5zaWduZWQgY29tbWl0dGVkSW5saW5lSXRlbUNv
dW50LCBPcHRpb25hbDxMaW5lQ29udGVudDo6UGFydGlhbENvbnRlbnQ+KTsKKyAgICBMaW5lQ29u
dGVudCBjbG9zZShjb25zdCBMaW5lQnVpbGRlciYsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5
b3V0UmFuZ2UsIHVuc2lnbmVkIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCwgT3B0aW9uYWw8TGlu
ZUNvbnRlbnQ6OlBhcnRpYWxDb250ZW50Pik7CiAKICAgICBJbmxpbmVMYXlvdXRVbml0IGlubGlu
ZUl0ZW1XaWR0aChjb25zdCBJbmxpbmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9n
aWNhbExlZnQpIGNvbnN0OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407444</attachid>
            <date>2020-08-27 19:05:03 -0700</date>
            <delta_ts>2020-08-27 20:07:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215068-20200827190502.patch</filename>
            <type>text/plain</type>
            <size>37661</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg4ODkyYTYyZDhmOGVm
NzcxMGJhMjg2NDg1NDNhZTA0YzhmMDYyZC4uMjhmMWVlNTIzMDNjYmVhNWM4ZjA2NmQ1MjZlNTkw
ZTA5ZDk1MzZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDIwLTA4LTI2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBMaW5lQnVp
bGRlcjpSdW4gc2hvdWxkIG5vdCBoYXZlIHZlcnRpY2FsIGdlb21ldHJ5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwNjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBTaW5jZSBMaW5lQnVpbGRlciBvbmx5
IHRha2VzIGNhcmUgb2YgdGhlIGhvcml6b250YWwgYXNjcGVjdCBvZiBhIHJ1biwgTGluZUJ1aWxk
ZXI6OlJ1biBzaG91bGQgb25seSBoYXZlIGxvZ2ljYWwgbGVmdCBhbmQgd2lkdGggZ2VvbWV0cnku
CisgICAgICAgIFRoZSB2ZXJ0aWNhbCBnZW9tZXRyeSBpcyBjb21wdXRlZCBhcyBwYXJ0IG9mIHRo
ZSBjb250ZW50IGFsaWdubWVudCBwaGFzZSBpbiBMaW5lQ29udGVudEFsaWduZXIgKGFsb25nIHdp
dGggdGhlIGZpbmFsIGhvcml6b250YWwgcG9zaXRpb24KKyAgICAgICAgYWRqdXN0ZWQgd2l0aCB0
aGUgYWxpZ25tZW50KS4KKyAgICAgICAgVGhpcyBpcyBzdGlsbCBhIHRyYW5zaXRpb25hbCBzdGF0
ZSAoc2VlIElubGluZVJ1blJlY3RMaXN0IG1fcnVuUmVjdExpc3QpIGFuZCBhbGwgdGhlIGxpbmUg
Ym94IHJlbGF0ZWQgY29kZSB3aWxsIGdldCBtb3ZlZCB0byB0aGUgTGluZUJveCBjbGFzcy4KKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIGVuYWJsZXMgdXMgdG8ga2VlcCBMaW5lQnVpbGRlcjo6UnVu
IGNvbnN0LgorCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFs
aWduZXI6OmlubGluZVJlY3RMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUNvbnRlbnRBbGlnbmVyOjpMaW5lQ29udGVudEFsaWduZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFsaWduSG9yaXpvbnRhbGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphbGlnblZlcnRpY2FsbHkp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFkanVzdEJh
c2VsaW5lQW5kTGluZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5zKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpydW5D
b250ZW50SGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJ1aWxkZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OnZpc3VhbGx5Q29sbGFwc2VQcmVXcmFwT3ZlcmZsb3dDb250ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVu
dDo6YWRkRnVsbHlUcmltbWFibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6YWRkUGFydGlhbGx5VHJpbW1h
YmxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46
OlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmV4cGFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OnJlbW92ZVRy
YWlsaW5nV2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpSdW46OnNldEhvcml6b250YWxFeHBhbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjptX3RleHRDb250ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OlJ1bjo6c2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpzdHlsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmxvZ2ljYWxXaWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46Omxv
Z2ljYWxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6
OlJ1bjo6ZXhwYW5zaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OlJ1bjo6aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6aGFz
VHJhaWxpbmdXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OlJ1bjo6dHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjptb3ZlSG9yaXpvbnRhbGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6c2hyaW5rSG9yaXpvbnRh
bGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6aGFzQ29s
bGFwc2VkVHJhaWxpbmdXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OnJ1bnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6UnVuOjpsb2dpY2FsUmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmFkanVzdExvZ2ljYWxUb3ApOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjptb3ZlVmVy
dGljYWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpSdW46OnNldExvZ2ljYWxIZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQnVpbGRlcjo6cnVucyk6IERlbGV0ZWQuCisKIDIwMjAtMDgtMjYgIFphbGFuIEJ1
anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIE1vdmUgTGluZUJv
eCBvdXQgb2YgTGluZUJ1aWxkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApp
bmRleCAyYTgyOTExNTdiMDgzYjY0N2Q5YWIzNTU0NWY3M2QxYTcxYzRiNTc1Li4xNDFhOTQ1MzFh
MTA4YmE5NDJjNGYyMTNlNGQxMTEyN2NkMDdmN2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCkBAIC05OSwzMyArOTksNTQgQEAgdm9pZCBIYW5naW5nQ29udGVudDo6cmVz
ZXQoKQogCiBjbGFzcyBMaW5lQ29udGVudEFsaWduZXIgewogcHVibGljOgotICAgIExpbmVDb250
ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIExpbmVCb3gmLCBMaW5l
QnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOworICAg
IExpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIExpbmVC
b3gmLCBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxheW91dFVuaXQgYXZhaWxh
YmxlV2lkdGgpOwogCiAgICAgZW51bSBjbGFzcyBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQg
eyBObywgWWVzIH07CiAgICAgdm9pZCBhbGlnbkhvcml6b250YWxseShUZXh0QWxpZ25Nb2RlLCBJ
c0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwogICAgIHZvaWQgYWxpZ25WZXJ0aWNhbGx5KCk7
CiAgICAgdm9pZCBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsKIAorICAgIHVzaW5nIElu
bGluZVJ1blJlY3RMaXN0ID0gVmVjdG9yPERpc3BsYXk6OklubGluZVJlY3QsIDEwPjsKKyAgICBj
b25zdCBJbmxpbmVSdW5SZWN0TGlzdCYgaW5saW5lUmVjdExpc3QoKSBjb25zdCB7IHJldHVybiBt
X3J1blJlY3RMaXN0OyB9CisKIHByaXZhdGU6Ci0gICAgdm9pZCBqdXN0aWZ5UnVucyhJbmxpbmVM
YXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKICAgICBIYW5naW5nQ29udGVudCBjb2xsZWN0SGFu
Z2luZ0NvbnRlbnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KSBjb25zdDsKLSAgICBJbmxp
bmVMYXlvdXRVbml0IHJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgTGluZUJ1aWxkZXI6OlJ1biYpIGNv
bnN0OwogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsgfQogICAgIExh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0
KCkubGF5b3V0U3RhdGUoKTsgfQogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQm
IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CiAgICAgTGluZUJveCYgbV9saW5lQm94OwotICAg
IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBtX3J1bnM7CisgICAgY29uc3QgTGluZUJ1aWxkZXI6OlJ1
bkxpc3QmIG1fcnVuczsKKyAgICBJbmxpbmVSdW5SZWN0TGlzdCBtX3J1blJlY3RMaXN0OwogICAg
IElubGluZUxheW91dFVuaXQgbV9hdmFpbGFibGVXaWR0aDsKIH07CiAKLUxpbmVDb250ZW50QWxp
Z25lcjo6TGluZUNvbnRlbnRBbGlnbmVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBp
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgTGluZUJveCYgbGluZUJveCwgTGluZUJ1aWxkZXI6OlJ1
bkxpc3QmIHJ1bnMsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpCitMaW5lQ29udGVu
dEFsaWduZXI6OkxpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmVC
dWlsZGVyOjpSdW5MaXN0JiBydW5zLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQog
ICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkK
ICAgICAsIG1fbGluZUJveChsaW5lQm94KQogICAgICwgbV9ydW5zKHJ1bnMpCiAgICAgLCBtX2F2
YWlsYWJsZVdpZHRoKGF2YWlsYWJsZVdpZHRoKQogeworICAgIGZvciAoYXV0byYgcnVuIDogbV9y
dW5zKSB7CisgICAgICAgIGF1dG8gcnVuSGVpZ2h0ID0gWyZdKCkgLT4gSW5saW5lTGF5b3V0VW5p
dCB7CisgICAgICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZvbnRNZXRy
aWNzKCk7CisgICAgICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKKworICAgICAg
ICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOworCisgICAgICAg
ICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CisgICAgICAgICAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGlubGluZUZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxh
eW91dEJveCk7CisgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSB8fCBs
YXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
Ym94R2VvbWV0cnkuY29udGVudEJveEhlaWdodCgpOworCisgICAgICAgICAgICAvLyBOb24tcmVw
bGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJpdCBtaXNs
ZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRlbnQgaGVp
Z2h0IGhlcmUuCisgICAgICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0
KCk7CisgICAgICAgIH07CisgICAgICAgIG1fcnVuUmVjdExpc3QuYXBwZW5kKHsgMCwgcnVuLmxv
Z2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2FsV2lkdGgoKSwgcnVuSGVpZ2h0KCkgfSk7CisgICAgfQog
fQogCiB2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25Ib3Jpem9udGFsbHkoVGV4dEFsaWdu
TW9kZSBob3Jpem9udGFsQWxpZ25tZW50LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNM
YXN0TGluZSkKQEAgLTEzNiw3ICsxNTcsMTQgQEAgdm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFs
aWduSG9yaXpvbnRhbGx5KFRleHRBbGlnbk1vZGUgaG9yaXpvbnRhbEFsaWdubWVudCwgSXMKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGhvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWdu
TW9kZTo6SnVzdGlmeSkgewotICAgICAgICBqdXN0aWZ5UnVucyhhdmFpbGFibGVXaWR0aCk7Cisg
ICAgICAgIGF1dG8gYWNjdW11bGF0ZWRFeHBhbnNpb24gPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsK
KyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fcnVucy5zaXplKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgICAgIG1fcnVuUmVjdExpc3RbaW5kZXhdLm1vdmVIb3Jpem9udGFs
bHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOworCisgICAgICAgICAgICBhdXRvIGhvcml6b250YWxF
eHBhbnNpb24gPSBtX3J1bnNbaW5kZXhdLmV4cGFuc2lvbigpLmhvcml6b250YWxFeHBhbnNpb247
CisgICAgICAgICAgICBtX3J1blJlY3RMaXN0W2luZGV4XS5leHBhbmRIb3Jpem9udGFsbHkoaG9y
aXpvbnRhbEV4cGFuc2lvbik7CisgICAgICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lvbiArPSBo
b3Jpem9udGFsRXhwYW5zaW9uOworICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTE2MSwyMiArMTg5LDIwIEBAIHZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGlnbkhvcml6
b250YWxseShUZXh0QWxpZ25Nb2RlIGhvcml6b250YWxBbGlnbm1lbnQsIElzCiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfTsKIAotICAgIGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRGb3JB
bGlnbm1lbnQoYXZhaWxhYmxlV2lkdGgpOwotICAgIGlmICghYWRqdXN0bWVudCkKLSAgICAgICAg
cmV0dXJuOwotICAgIC8vIEhvcml6b250YWwgYWxpZ25tZW50IG1lYW5zIHRoYXQgd2Ugbm90IG9u
bHkgYWRqdXN0IHRoZSBydW5zIGJ1dCBhbHNvIG1ha2Ugc3VyZQotICAgIC8vIHRoYXQgdGhlIGxp
bmUgYm94IGlzIGFsaWduZWQgYXMgd2VsbAotICAgIC8vIGUuZy4gPGRpdiBzdHlsZT0idGV4dC1h
bGlnbjogY2VudGVyOyB3aWR0aDogMTAwcHg7Ij5jZW50ZXJlZCB0ZXh0PC9kaXY+IDogdGhlIGxp
bmUgYm94IHdpbGwgYWxzbyBiZSBjZW50ZXJlZAotICAgIC8vIGFzIG9wcG9zZWQgdG8gc3RhcnQg
YXQgMHB4IGFsbCB0aGUgd2F5IHRvIFtjZW50ZXJlZCB0ZXh0XSBydW4ncyByaWdodCBlZGdlLgot
ICAgIG1fbGluZUJveC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLSAgICBmb3IgKGF1
dG8mIHJ1biA6IG1fcnVucykKLSAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1l
bnQpOworICAgIGlmIChhdXRvIGFkanVzdG1lbnQgPSBhZGp1c3RtZW50Rm9yQWxpZ25tZW50KGF2
YWlsYWJsZVdpZHRoKSkgeworICAgICAgICAvLyBGSVhNRTogbGluZSBib3ggc2hvdWxkIG5vdCBu
ZWVkIHRvIGJlIG1vdmVkLCBvbmx5IHRoZSBydW5zLgorICAgICAgICBtX2xpbmVCb3gubW92ZUhv
cml6b250YWxseSgqYWRqdXN0bWVudCk7CisgICAgICAgIGZvciAoYXV0byYgcnVuUmVjdCA6IG1f
cnVuUmVjdExpc3QpCisgICAgICAgICAgICBydW5SZWN0Lm1vdmVIb3Jpem9udGFsbHkoKmFkanVz
dG1lbnQpOworICAgIH0KIH0KIAogdm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFsaWduVmVydGlj
YWxseSgpCiB7CiAgICAgYXV0byBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0ID0gbV9saW5lQm94Lmxv
Z2ljYWxSZWN0KCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKKyAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9ydW5zLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICBhdXRvJiBydW4gPSBtX3J1bnNbaW5kZXhdOworICAgICAgICBhdXRvJiBydW5SZWN0ID0gbV9y
dW5SZWN0TGlzdFtpbmRleF07CiAgICAgICAgIGF1dG8gbG9naWNhbFRvcCA9IElubGluZUxheW91
dFVuaXQgeyB9OwogICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CiAg
ICAgICAgIGF1dG8gdmVydGljYWxBbGlnbiA9IGxheW91dEJveC5zdHlsZSgpLnZlcnRpY2FsQWxp
Z24oKTsKQEAgLTIxMCw2NiArMjM2LDI5IEBAIHZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGln
blZlcnRpY2FsbHkoKQogICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxp
Z25tZW50QmFzZWxpbmUoKSAtIGJhc2VsaW5lRnJvbU1hcmdpbkJveDsKICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29u
dGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAgbG9naWNh
bFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gKGJveEdlb21ldHJ5LnZlcnRp
Y2FsQm9yZGVyKCkgKyBib3hHZW9tZXRyeS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDBfbHUp
ICsgcnVuLmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCkgKyBib3hHZW9tZXRyeS5tYXJnaW5BZnRlcigp
KTsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVudEJhc2Vs
aW5lKCkgLSAoYm94R2VvbWV0cnkudmVydGljYWxCb3JkZXIoKSArIGJveEdlb21ldHJ5LnZlcnRp
Y2FsUGFkZGluZygpLnZhbHVlT3IoMF9sdSkgKyBydW5SZWN0LmhlaWdodCgpICsgYm94R2VvbWV0
cnkubWFyZ2luQWZ0ZXIoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6CiAgICAgICAgICAgICBsb2dpY2FsVG9wID0g
MF9sdTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJv
dHRvbToKLSAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3gubG9naWNhbEJvdHRvbSgp
IC0gcnVuLmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCk7CisgICAgICAgICAgICBsb2dpY2FsVG9wID0g
bV9saW5lQm94LmxvZ2ljYWxCb3R0b20oKSAtIHJ1blJlY3QuaGVpZ2h0KCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVN
RU5URURfWUVUKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBydW4u
YWRqdXN0TG9naWNhbFRvcChsb2dpY2FsVG9wKTsKKyAgICAgICAgcnVuUmVjdC5zZXRUb3AobG9n
aWNhbFRvcCk7CiAgICAgICAgIC8vIEFkanVzdCBzY3JvbGxhYmxlIG92ZXJmbG93IGlmIHRoZSBy
dW4gb3ZlcmZsb3dzIHRoZSBsaW5lLgotICAgICAgICBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0LmV4
cGFuZFZlcnRpY2FsbHlUb0NvbnRhaW4ocnVuLmxvZ2ljYWxSZWN0KCkpOworICAgICAgICBzY3Jv
bGxhYmxlT3ZlcmZsb3dSZWN0LmV4cGFuZFZlcnRpY2FsbHlUb0NvbnRhaW4ocnVuUmVjdCk7CiAg
ICAgICAgIC8vIENvbnZlcnQgcnVucyBmcm9tIHJlbGF0aXZlIHRvIHRoZSBsaW5lIHRvcC9sZWZ0
IHRvIHRoZSBmb3JtYXR0aW5nIHJvb3QncyBib3JkZXIgYm94IHRvcC9sZWZ0LgotICAgICAgICBy
dW4ubW92ZVZlcnRpY2FsbHkobV9saW5lQm94LmxvZ2ljYWxUb3AoKSk7Ci0gICAgICAgIHJ1bi5t
b3ZlSG9yaXpvbnRhbGx5KG1fbGluZUJveC5sb2dpY2FsTGVmdCgpKTsKKyAgICAgICAgcnVuUmVj
dC5tb3ZlVmVydGljYWxseShtX2xpbmVCb3gubG9naWNhbFRvcCgpKTsKKyAgICAgICAgcnVuUmVj
dC5tb3ZlSG9yaXpvbnRhbGx5KG1fbGluZUJveC5sb2dpY2FsTGVmdCgpKTsKICAgICB9CiAgICAg
bV9saW5lQm94LnNldFNjcm9sbGFibGVPdmVyZmxvdyhzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0KTsK
IH0KIAotdm9pZCBMaW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5zKElubGluZUxheW91dFVu
aXQgYXZhaWxhYmxlV2lkdGgpCi17Ci0gICAgQVNTRVJUKGF2YWlsYWJsZVdpZHRoID4gMCk7Ci0g
ICAgLy8gQ29sbGVjdCB0aGUgZXhwYW5zaW9uIG9wcG9ydHVuaXR5IG51bWJlcnMgYW5kIGZpbmQg
dGhlIGxhc3QgcnVuIHdpdGggY29udGVudC4KLSAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQgPSAwOwotICAgIExpbmVCdWlsZGVyOjpSdW4qIGxhc3RSdW5XaXRoQ29udGVudCA9IG51
bGxwdHI7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAgZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudCArPSBydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpOwotICAg
ICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0JveCgpKQotICAgICAgICAgICAgbGFzdFJ1
bldpdGhDb250ZW50ID0gJnJ1bjsKLSAgICB9Ci0gICAgLy8gTmVlZCB0byBmaXggdXAgdGhlIGxh
c3QgcnVuJ3MgdHJhaWxpbmcgZXhwYW5zaW9uLgotICAgIGlmIChsYXN0UnVuV2l0aENvbnRlbnQg
JiYgbGFzdFJ1bldpdGhDb250ZW50LT5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKSB7Ci0gICAg
ICAgIC8vIFR1cm4gb2ZmIHRoZSB0cmFpbGluZyBiaXRzIGZpcnN0IGFuZCBhZGQgdGhlIGZvcmJp
ZCB0cmFpbGluZyBleHBhbnNpb24uCi0gICAgICAgIGF1dG8gbGVmdEV4cGFuc2lvbiA9IGxhc3RS
dW5XaXRoQ29udGVudC0+ZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlZnRFeHBhbnNpb25NYXNrOwot
ICAgICAgICBsYXN0UnVuV2l0aENvbnRlbnQtPnNldEV4cGFuc2lvbkJlaGF2aW9yKGxlZnRFeHBh
bnNpb24gfCBGb3JiaWRSaWdodEV4cGFuc2lvbik7Ci0gICAgfQotICAgIC8vIE5vdGhpbmcgdG8g
ZGlzdHJpYnV0ZT8KLSAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCi0gICAgICAg
IHJldHVybjsKLSAgICAvLyBEaXN0cmlidXRlIHRoZSBleHRyYSBzcGFjZS4KLSAgICBhdXRvIGV4
cGFuc2lvblRvRGlzdHJpYnV0ZSA9IGF2YWlsYWJsZVdpZHRoIC8gZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudDsKLSAgICBJbmxpbmVMYXlvdXRVbml0IGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gMDsK
LSAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgewotICAgICAgICAvLyBFeHBhbmQgYW5kIG1v
dmVzIHJ1bnMgYnkgdGhlIGFjY3VtdWxhdGVkIGV4cGFuc2lvbi4KLSAgICAgICAgaWYgKCFydW4u
aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkgewotICAgICAgICAgICAgcnVuLm1vdmVIb3Jpem9u
dGFsbHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgQVNTRVJUKHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkpOwot
ICAgICAgICBhdXRvIGNvbXB1dGVkRXhwYW5zaW9uID0gZXhwYW5zaW9uVG9EaXN0cmlidXRlICog
cnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKTsKLSAgICAgICAgcnVuLnNldENvbXB1dGVk
SG9yaXpvbnRhbEV4cGFuc2lvbihjb21wdXRlZEV4cGFuc2lvbik7Ci0gICAgICAgIHJ1bi5tb3Zl
SG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKLSAgICAgICAgYWNjdW11bGF0ZWRF
eHBhbnNpb24gKz0gY29tcHV0ZWRFeHBhbnNpb247Ci0gICAgfQotfQotCiB2b2lkIExpbmVDb250
ZW50QWxpZ25lcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCkKIHsKICAgICB1bnNpZ25l
ZCBpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwgPSAwOwpAQCAtMjc3LDkgKzI2Niw2IEBAIHZv
aWQgTGluZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKQogICAg
IGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CiAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IHJ1
bi5sYXlvdXRCb3goKTsKICAgICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsK
LQotICAgICAgICBydW4uc2V0TG9naWNhbEhlaWdodChydW5Db250ZW50SGVpZ2h0KHJ1bikpOwot
CiAgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpIHsKICAgICAg
ICAgICAgIGlmIChpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwpIHsKICAgICAgICAgICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IGFkanVzdGVkIHRoZSBsaW5lIGhlaWdodC9iYXNlbGluZSB0aHJv
dWdoIHRoZSBwYXJlbnQgaW5saW5lIGNvbnRhaW5lci4gCkBAIC0zODUsMjQgKzM3MSw2IEBAIEhh
bmdpbmdDb250ZW50IExpbmVDb250ZW50QWxpZ25lcjo6Y29sbGVjdEhhbmdpbmdDb250ZW50KElz
TGFzdExpbmVXaXRoSW5saW5lQ29uCiAgICAgcmV0dXJuIGhhbmdpbmdDb250ZW50OwogfQogCi1J
bmxpbmVMYXlvdXRVbml0IExpbmVDb250ZW50QWxpZ25lcjo6cnVuQ29udGVudEhlaWdodChjb25z
dCBMaW5lQnVpbGRlcjo6UnVuJiBydW4pIGNvbnN0Ci17Ci0gICAgYXV0byYgZm9udE1ldHJpY3Mg
PSBydW4uc3R5bGUoKS5mb250TWV0cmljcygpOwotICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVu
LmlzTGluZUJyZWFrKCkpCi0gICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKLQot
ICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgpKQot
ICAgICAgICByZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0KLSAgICBhdXRvJiBsYXlvdXRC
b3ggPSBydW4ubGF5b3V0Qm94KCk7Ci0gICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgaWYgKGxheW91dEJveC5p
c1JlcGxhY2VkQm94KCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAg
ICAgIHJldHVybiBib3hHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCk7Ci0KLSAgICAvLyBOb24t
cmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJpdCBt
aXNsZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRlbnQg
aGVpZ2h0IGhlcmUuCi0gICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOwot
fQotCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KElu
dmFsaWRhdGlvblN0YXRlJiBpbnZhbGlkYXRpb25TdGF0ZSwgY29uc3QgQ29uc3RyYWludHNGb3JJ
bkZsb3dDb250ZW50JiBjb25zdHJhaW50cykKIHsKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0
dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1N0YXJ0XSAtPiBpbmxpbmUgZm9ybWF0dGlu
ZyBjb250ZXh0IC0+IGZvcm1hdHRpbmcgcm9vdCgiIDw8ICZyb290KCkgPDwgIikiKTsKQEAgLTQ3
NywxMyArNDQ1LDI4IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQo
SW5saW5lSXRlbXMmIGlubGluZUl0ZW1zLCBMaW5lTGF5b3V0Q29uCiAgICAgICAgIC8vICJzcFs8
LWxpbmUgYnJlYWstPl1saXRfY29udGVudCIgLT4gb3ZlcmZsb3cgbGVuZ3RoOiAxMSAtPiBsZWFk
aW5nIHBhcnRpYWwgY29udGVudCBsZW5ndGg6IDExLgogICAgICAgICBhdXRvIHBhcnRpYWxMZWFk
aW5nQ29udGVudExlbmd0aCA9IHByZXZpb3VzTGluZSA/IHByZXZpb3VzTGluZS0+b3ZlcmZsb3dD
b250ZW50TGVuZ3RoIDogV1RGOjpudWxsb3B0OwogICAgICAgICBhdXRvIGxpbmVDb250ZW50ID0g
bGluZUxheW91dENvbnRleHQubGF5b3V0SW5saW5lQ29udGVudChsaW5lLCBuZWVkc0xheW91dFJh
bmdlLCBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpOwotCiAgICAgICAgIGF1dG8gbGluZUNv
bnRlbnRSYW5nZSA9IGxpbmVDb250ZW50LmlubGluZUl0ZW1SYW5nZTsKLSAgICAgICAgYXV0byBs
aW5lQm94ID0gTGluZUJveCB7IERpc3BsYXk6OklubGluZVJlY3QgeyBsaW5lQ29uc3RyYWludHMu
bG9naWNhbFRvcExlZnQsIGxpbmUuY29udGVudExvZ2ljYWxXaWR0aCgpLCBsaW5lQ29uc3RyYWlu
dHMubGluZUhlaWdodCB9LCBMaW5lQm94OjpoYWxmTGVhZGluZ01ldHJpY3Mocm9vdCgpLnN0eWxl
KCkuZm9udE1ldHJpY3MoKSwgbGluZUNvbnN0cmFpbnRzLmxpbmVIZWlnaHQpIH07CiAKICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGFuZCB3aWxsIGV2ZW50dWFsbHkgZ2V0IG1l
cmdlZCB0byBMaW5lQm94LgorICAgICAgICBhdXRvIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCA9IFsmXSB7CisgICAgICAgICAgICBpZiAobGluZUNvbnRlbnRSYW5nZS5lbmQgPT0gbmVlZHNM
YXlvdXRSYW5nZS5lbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIExpbmVDb250ZW50QWxpZ25l
cjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXM7CisgICAgICAgICAgICBpZiAobGlu
ZUNvbnRlbnQucGFydGlhbENvbnRlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIExpbmVDb250
ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKKyAgICAgICAgICAg
IC8vIE9taXQgZmxvYXRzIHRvIHNlZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGxpbmUgd2l0aCBpbmxp
bmUgY29udGVudC4KKyAgICAgICAgICAgIGZvciAoYXV0byBpID0gbmVlZHNMYXlvdXRSYW5nZS5l
bmQ7IGktLTspIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlubGluZUl0ZW1zW2ldLmlzRmxvYXQo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT0gbGluZUNvbnRlbnRSYW5nZS5lbmQg
LSAxID8gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Olll
cyA6IExpbmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBv
bmUgbm9uLWZsb2F0IGl0ZW0uCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBMaW5lQ29udGVudEFsaWduZXI6OklzTGFzdExpbmVXaXRoSW5saW5l
Q29udGVudDo6Tm87CisgICAgICAgIH0oKTsKKyAgICAgICAgbGluZS5jbG9zZShpc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQgPT0gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElu
bGluZUNvbnRlbnQ6Olllcyk7CisKKyAgICAgICAgYXV0byBsaW5lQm94ID0gTGluZUJveCB7IERp
c3BsYXk6OklubGluZVJlY3QgeyBsaW5lQ29uc3RyYWludHMubG9naWNhbFRvcExlZnQsIGxpbmUu
Y29udGVudExvZ2ljYWxXaWR0aCgpLCBsaW5lQ29uc3RyYWludHMubGluZUhlaWdodCB9LCBMaW5l
Qm94OjpoYWxmTGVhZGluZ01ldHJpY3Mocm9vdCgpLnN0eWxlKCkuZm9udE1ldHJpY3MoKSwgbGlu
ZUNvbnN0cmFpbnRzLmxpbmVIZWlnaHQpIH07CisgICAgICAgIGF1dG8gY29udGVudEFsaWduZXIg
PSBMaW5lQ29udGVudEFsaWduZXIgeyAqdGhpcywgbGluZUJveCwgbGluZS5ydW5zKCksIGxpbmUu
YXZhaWxhYmxlV2lkdGgoKSB9OwogICAgICAgICBhdXRvIGFsaWduTGluZUNvbnRlbnQgPSBbJl0g
ewotICAgICAgICAgICAgYXV0byBjb250ZW50QWxpZ25lciA9IExpbmVDb250ZW50QWxpZ25lciB7
ICp0aGlzLCBsaW5lQm94LCBsaW5lLnJ1bnMoKSwgbGluZS5hdmFpbGFibGVXaWR0aCgpIH07CiAg
ICAgICAgICAgICBjb250ZW50QWxpZ25lci5hZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsK
ICAgICAgICAgICAgIGlmIChsaW5lLmlzVmlzdWFsbHlFbXB0eSgpKSB7CiAgICAgICAgICAgICAg
ICAgbGluZUJveC5yZXNldEFsaWdubWVudEJhc2VsaW5lKCk7CkBAIC00OTYsMjEgKzQ3OSw2IEBA
IHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRlbXMmIGlu
bGluZUl0ZW1zLCBMaW5lTGF5b3V0Q29uCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250
ZW50QWxpZ25lci5hbGlnblZlcnRpY2FsbHkoKTsKIAotICAgICAgICAgICAgYXV0byBpc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQgPSBbJl0gewotICAgICAgICAgICAgICAgIGlmIChsaW5lQ29u
dGVudFJhbmdlLmVuZCA9PSBuZWVkc0xheW91dFJhbmdlLmVuZCkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIExpbmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
OjpZZXM7Ci0gICAgICAgICAgICAgICAgaWYgKGxpbmVDb250ZW50LnBhcnRpYWxDb250ZW50KQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQ6Ok5vOwotICAgICAgICAgICAgICAgIC8vIE9taXQgZmxvYXRzIHRv
IHNlZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGxpbmUgd2l0aCBpbmxpbmUgY29udGVudC4KLSAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8gaSA9IG5lZWRzTGF5b3V0UmFuZ2UuZW5kOyBpLS07KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghaW5saW5lSXRlbXNbaV0uaXNGbG9hdCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT0gbGluZUNvbnRlbnRSYW5nZS5lbmQgLSAxID8g
TGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcyA6IExp
bmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gVGhlcmUgaGFzIHRvIGJlIGF0IGxlYXN0
IG9uZSBub24tZmxvYXQgaXRlbS4KLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQ6Ok5vOwotICAgICAgICAgICAgfSgpOwotCiAgICAgICAgICAgICBh
dXRvIGNvbXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCA9IFsmXSB7CiAgICAgICAgICAgICAgICAg
aWYgKHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKTsK
QEAgLTUyNSw3ICs0OTMsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5
b3V0KElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGluZUxheW91dENvbgogICAgICAgICB9Owog
CiAgICAgICAgIGFsaWduTGluZUNvbnRlbnQoKTsKLSAgICAgICAgc2V0RGlzcGxheUJveGVzRm9y
TGluZShsaW5lLCBsaW5lQm94LCBsaW5lQ29udGVudCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCk7
CisgICAgICAgIHNldERpc3BsYXlCb3hlc0ZvckxpbmUobGluZSwgY29udGVudEFsaWduZXIuaW5s
aW5lUmVjdExpc3QoKSwgbGluZUJveCwgbGluZUNvbnRlbnQsIGNvbnN0cmFpbnRzLmhvcml6b250
YWwpOwogCiAgICAgICAgIGlmICghbGluZUNvbnRlbnRSYW5nZS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIEFTU0VSVChuZWVkc0xheW91dFJhbmdlLnN0YXJ0IDwgbGluZUNvbnRlbnRSYW5nZS5l
bmQpOwpAQCAtNjMxLDYgKzU5OSw4IEBAIElubGluZUxheW91dFVuaXQgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhGb3JDb25zdHJhaW50KEluCiAgICAgICAg
IC8vIE9ubHkgdGhlIGhvcml6dG9uYWwgYXZhaWxhYmxlIHdpZHRoIGlzIGNvbnN0cmFpbmVkIHdo
ZW4gY29tcHV0aW5nIGludHJpbnNpYyB3aWR0aC4KICAgICAgICAgbGluZS5vcGVuKGF2YWlsYWJs
ZVdpZHRoKTsKICAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxpbmVMYXlvdXRDb250ZXh0Lmxh
eW91dElubGluZUNvbnRlbnQobGluZSwgbGF5b3V0UmFuZ2UsIHsgfSk7CisgICAgICAgIC8vIEZJ
WE1FOiBGaW5kIG91dCBpZiBtaW4vbWF4IG5lZWRzIHRvIHNldCB0aGUgaXNMYXN0TGluZSBiaXQu
CisgICAgICAgIGxpbmUuY2xvc2UoZmFsc2UpOwogICAgICAgICBsYXlvdXRSYW5nZS5zdGFydCA9
IGxpbmVDb250ZW50LmlubGluZUl0ZW1SYW5nZS5lbmQ7CiAgICAgICAgIC8vIEZJWE1FOiBVc2Ug
bGluZSBsb2dpY2FsIGxlZnQgYW5kIHJpZ2h0IHRvIHRha2UgZmxvYXRzIGludG8gYWNjb3VudC4K
ICAgICAgICAgbWF4aW11bUxpbmVXaWR0aCA9IHN0ZDo6bWF4KG1heGltdW1MaW5lV2lkdGgsIGxp
bmUuY29udGVudExvZ2ljYWxXaWR0aCgpKTsKQEAgLTgzNyw3ICs4MDcsNyBAQCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6TGluZUNvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b25zdHJhaW50c0ZvcgogICAgIHJldHVybiBMaW5lQ29uc3RyYWludHMgeyB7IGxpbmVMb2dpY2Fs
TGVmdCwgbGluZUxvZ2ljYWxUb3AgfSwgbGluZUxvZ2ljYWxSaWdodCAtIGxpbmVMb2dpY2FsTGVm
dCwgaW5pdGlhbExpbmVIZWlnaHQsIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCB9OwogfQogCi12
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0
IExpbmVCdWlsZGVyJiBsaW5lLCBjb25zdCBMaW5lQm94JiBsaW5lQm94LCAgY29uc3QgTGluZUxh
eW91dENvbnRleHQ6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCwgY29uc3QgSG9yaXpvbnRhbENv
bnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCit2b2lkIElubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyJiBsaW5lLCBj
b25zdCBMaW5lQ29udGVudEFsaWduZXI6OklubGluZVJ1blJlY3RMaXN0JiBydW5SZWN0TGlzdCwg
Y29uc3QgTGluZUJveCYgbGluZUJveCwgY29uc3QgTGluZUxheW91dENvbnRleHQ6OkxpbmVDb250
ZW50JiBsaW5lQ29udGVudCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFs
Q29uc3RyYWludHMpCiB7CiAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9ybWF0
dGluZ1N0YXRlKCk7CiAKQEAgLTg2Nyw5ICs4MzcsOSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyJiBsaW5lLCBj
bwogICAgIGF1dG8gbGluZUlua092ZXJmbG93ID0gbGluZUJveC5zY3JvbGxhYmxlT3ZlcmZsb3co
KTsKICAgICAvLyBDb21wdXRlIGJveCBmaW5hbCBnZW9tZXRyeS4KICAgICBhdXRvJiBsaW5lUnVu
cyA9IGxpbmUucnVucygpOwotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGxp
bmVSdW5zLnNpemUoKTsgKytpbmRleCkgeworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5k
ZXggPCBsaW5lUnVucy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgYXV0byYgbGluZVJ1biA9
IGxpbmVSdW5zLmF0KGluZGV4KTsKLSAgICAgICAgYXV0byYgbG9naWNhbFJlY3QgPSBsaW5lUnVu
LmxvZ2ljYWxSZWN0KCk7CisgICAgICAgIGF1dG8gbG9naWNhbFJlY3QgPSBydW5SZWN0TGlzdFtp
bmRleF07CiAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGxpbmVSdW4ubGF5b3V0Qm94KCk7CiAK
ICAgICAgICAgLy8gQWRkIGZpbmFsIGRpc3BsYXkgcnVucyB0byBzdGF0ZSBmaXJzdC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1h
dHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IDAzZTRmYjZhOGFhNmM4NWI2OTAwMzk1ZTNl
OTdiYzRlOTE2MjhmYWQuLjMzOTU0NDA5Mjk2YjlhMGFhZTg2OGE1Yzk0Y2MyZDA1YmY3YTY2ZjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtOTQsNyArOTQsNyBAQCBwcml2
YXRlOgogICAgICAgICBib29sIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCB7IGZhbHNlIH07CiAg
ICAgfTsKICAgICBMaW5lQ29uc3RyYWludHMgY29uc3RyYWludHNGb3JMaW5lKGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApOwotICAg
IHZvaWQgc2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlciYsIGNvbnN0IExp
bmVCb3gmLCBjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6TGluZUNvbnRlbnQmLCBjb25zdCBIb3Jp
em9udGFsQ29uc3RyYWludHMmKTsKKyAgICB2b2lkIHNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29u
c3QgTGluZUJ1aWxkZXImLCBjb25zdCBWZWN0b3I8RGlzcGxheTo6SW5saW5lUmVjdCwgMTA+Jiwg
Y29uc3QgTGluZUJveCYsIGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCYsIGNv
bnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpOwogICAgIHZvaWQgaW52YWxpZGF0ZUZvcm1hdHRp
bmdTdGF0ZShjb25zdCBJbnZhbGlkYXRpb25TdGF0ZSYpOwogCiAgICAgY29uc3QgSW5saW5lRm9y
bWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxJ
bmxpbmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUo
KSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAppbmRleCA2NDUyNjYxMzc4ZjY2ZmUzYmY1ZTZh
NDYzNWEyNDQ2MWNiMGVhYzkwLi45NWE0NzQzMGI1YjY3ZTZjYWM1ZGRmYTUzOTZjYTEwMjc2MzVj
YWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVMaW5lQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJJbmxpbmVTb2Z0TGluZUJy
ZWFrSXRlbS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRl
ICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlICJUZXh0VXRpbC5oIgogI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+CiAKQEAgLTcyLDEzICs3Myw1MSBAQCB2b2lkIExpbmVCdWlsZGVyOjpj
bGVhckNvbnRlbnQoKQogICAgIG1fbGluZUlzVmlzdWFsbHlFbXB0eUJlZm9yZVRyaW1tYWJsZVRy
YWlsaW5nQ29udGVudCA9IHsgfTsKIH0KIAotdm9pZCBMaW5lQnVpbGRlcjo6Y2xvc2UoKQordm9p
ZCBMaW5lQnVpbGRlcjo6Y2xvc2UoYm9vbCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpCiB7
CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBtX2lzQ2xvc2VkID0gdHJ1ZTsKICNlbmRpZgogICAg
IHJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgpOwogICAgIHZpc3VhbGx5Q29sbGFwc2VQ
cmVXcmFwT3ZlcmZsb3dDb250ZW50KCk7CisKKyAgICBhdXRvIGNvbXB1dGVFeHBhbnNpb25Gb3JS
dW5zSWZOZWVkZWQgPSBbJl0geworICAgICAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHQoKS5yb290
KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSAhPSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8g
dGhlIG1ldGhvZCBzcGVjaWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0eSwKKyAgICAg
ICAgLy8gaW4gb3JkZXIgdG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVy
d2lzZSBzcGVjaWZpZWQgYnkgdGV4dC1hbGlnbi1sYXN0LAorICAgICAgICAvLyB0aGUgbGFzdCBs
aW5lIGJlZm9yZSBhIGZvcmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9jayBpcyBzdGFy
dC1hbGlnbmVkLgorICAgICAgICBpZiAoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAobV9ydW5zLmlzRW1wdHkoKSB8fCBtX3J1bnMu
bGFzdCgpLmlzTGluZUJyZWFrKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0
byBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gMDsKKyAgICAgICAgUnVuKiBsYXN0UnVuV2l0
aENvbnRlbnQgPSBudWxscHRyOworICAgICAgICAvLyBDb2xsZWN0IGFuZCBkaXN0cmlidXRlIHRo
ZSBleHBhbnNpb24gb3Bwb3J0dW5pdGllcy4KKyAgICAgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1
bnMpIHsKKyAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgKz0gcnVuLmV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQoKTsKKyAgICAgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwg
cnVuLmlzQm94KCkpCisgICAgICAgICAgICAgICAgbGFzdFJ1bldpdGhDb250ZW50ID0gJnJ1bjsK
KyAgICAgICAgfQorICAgICAgICAvLyBOZWVkIHRvIGZpeCB1cCB0aGUgbGFzdCBydW4ncyB0cmFp
bGluZyBleHBhbnNpb24uCisgICAgICAgIGlmIChsYXN0UnVuV2l0aENvbnRlbnQgJiYgbGFzdFJ1
bldpdGhDb250ZW50LT5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKSB7CisgICAgICAgICAgICAv
LyBUdXJuIG9mZiB0aGUgdHJhaWxpbmcgYml0cyBmaXJzdCBhbmQgYWRkIHRoZSBmb3JiaWQgdHJh
aWxpbmcgZXhwYW5zaW9uLgorICAgICAgICAgICAgYXV0byBsZWFkaW5nRXhwYW5zaW9uID0gbGFz
dFJ1bldpdGhDb250ZW50LT5leHBhbnNpb25CZWhhdmlvcigpICYgTGVmdEV4cGFuc2lvbk1hc2s7
CisgICAgICAgICAgICBsYXN0UnVuV2l0aENvbnRlbnQtPnNldEV4cGFuc2lvbkJlaGF2aW9yKGxl
YWRpbmdFeHBhbnNpb24gfCBGb3JiaWRSaWdodEV4cGFuc2lvbik7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gQW55dGhpbmcgdG8gZGlzdHJpYnV0ZT8KKyAgICAgICAgaWYgKGV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQgJiYgYXZhaWxhYmxlV2lkdGgoKSkgeworICAgICAgICAgICAgLy8gRGlzdHJp
YnV0ZSB0aGUgZXh0cmEgc3BhY2UuCisgICAgICAgICAgICBhdXRvIGV4cGFuc2lvblRvRGlzdHJp
YnV0ZSA9IGF2YWlsYWJsZVdpZHRoKCkgLyBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50OworICAg
ICAgICAgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKKyAgICAgICAgICAgICAgICAvLyBF
eHBhbmQgYW5kIG1vdmVzIHJ1bnMgYnkgdGhlIGFjY3VtdWxhdGVkIGV4cGFuc2lvbi4KKyAgICAg
ICAgICAgICAgICBpZiAocnVuLmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpCisgICAgICAgICAg
ICAgICAgICAgIHJ1bi5zZXRIb3Jpem9udGFsRXhwYW5zaW9uKGV4cGFuc2lvblRvRGlzdHJpYnV0
ZSAqIHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKKyAgICBjb21wdXRlRXhwYW5zaW9uRm9yUnVuc0lmTmVlZGVkKCk7CiB9
CiAKIHZvaWQgTGluZUJ1aWxkZXI6OnJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgpCkBA
IC0xNDMsNyArMTgyLDcgQEAgdm9pZCBMaW5lQnVpbGRlcjo6dmlzdWFsbHlDb2xsYXBzZVByZVdy
YXBPdmVyZmxvd0NvbnRlbnQoKQogICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHRyaW1tYWJsZVdp
ZHRoID0geyB9OwogICAgICAgICBpZiAocnVuLmlzVGV4dCgpKSB7CiAgICAgICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGFsd2F5cyBjb2xsYXBzZSB0aGUgcnVuIGF0IGEgZ2x5cGggYm91bmRh
cnkgYXMgdGhlIHNwZWMgaW5kaWNhdGVzOiAiY29sbGFwc2UgdGhlIGNoYXJhY3RlciBhZHZhbmNl
IHdpZHRocyBvZiBhbnkgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb3ZlcmZsb3ciCi0gICAgICAgICAg
ICAvLyBhbmQgdGhlIHRyaW1tZWQgd2lkdGggc2hvdWxkIGJlIGNhcHBlZCBhdCBzdGQ6Om1pbihy
dW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSwgb3ZlcmZsb3dXaWR0aCkgZm9yIHRleGd0IHJ1
bnMuIEJvdGggRkYgYW5kIENocm9tZSBhZ3JlZS4KKyAgICAgICAgICAgIC8vIGFuZCB0aGUgdHJp
bW1lZCB3aWR0aCBzaG91bGQgYmUgY2FwcGVkIGF0IHN0ZDo6bWluKHJ1bi50cmFpbGluZ1doaXRl
c3BhY2VXaWR0aCgpLCBvdmVyZmxvd1dpZHRoKSBmb3IgdGV4dCBydW5zLiBCb3RoIEZGIGFuZCBD
aHJvbWUgYWdyZWUuCiAgICAgICAgICAgICB0cmltbWFibGVXaWR0aCA9IHJ1bi50cmFpbGluZ1do
aXRlc3BhY2VXaWR0aCgpOwogICAgICAgICAgICAgcnVuLnZpc3VhbGx5Q29sbGFwc2VUcmFpbGlu
Z1doaXRlc3BhY2UoKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTM1OSwxNCArMzk4LDE0IEBAIHZv
aWQgTGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6YWRkRnVsbHlUcmltbWFi
bGVDb250ZW50KHNpemVfdCBydW5JCiAgICAgLy8gQW55IHN1YnNlcXVlbnQgdHJpbW1hYmxlIHdo
aXRlc3BhY2Ugc2hvdWxkIGNvbGxhcHNlIHRvIHplcm8gYWR2YW5jZWQgd2lkdGggYW5kIGlnbm9y
ZWQgYXQgOjphcHBlbmRUZXh0Q29udGVudCgpLgogICAgIEFTU0VSVCghbV9oYXNGdWxseVRyaW1t
YWJsZUNvbnRlbnQpOwogICAgIG1fZnVsbHlUcmltbWFibGVXaWR0aCA9IHRyaW1tYWJsZVdpZHRo
OwotICAgIC8vIE5vdGUgdGhhdCBqdXN0IGJlY2FzdWUgdGhlIHRyaW1tYWJsZSB3aWR0aCBpcyAw
IChmb250LXNpemU6IDBweCksIGl0IGRvZXMgbm90IG1lYW4gd2UgZG9uJ3QgaGF2ZSBhIHRyaW1t
YWJsZSB0cmFpbGluZyBjb250ZW50LgorICAgIC8vIE5vdGUgdGhhdCBqdXN0IGJlY2F1c2UgdGhl
IHRyaW1tYWJsZSB3aWR0aCBpcyAwIChmb250LXNpemU6IDBweCksIGl0IGRvZXMgbm90IG1lYW4g
d2UgZG9uJ3QgaGF2ZSBhIHRyaW1tYWJsZSB0cmFpbGluZyBjb250ZW50LgogICAgIG1faGFzRnVs
bHlUcmltbWFibGVDb250ZW50ID0gdHJ1ZTsKICAgICBtX2ZpcnN0UnVuSW5kZXggPSBtX2ZpcnN0
UnVuSW5kZXgudmFsdWVPcihydW5JbmRleCk7CiB9CiAKIHZvaWQgTGluZUJ1aWxkZXI6OlRyaW1t
YWJsZVRyYWlsaW5nQ29udGVudDo6YWRkUGFydGlhbGx5VHJpbW1hYmxlQ29udGVudChzaXplX3Qg
cnVuSW5kZXgsIElubGluZUxheW91dFVuaXQgdHJpbW1hYmxlV2lkdGgpCiB7Ci0gICAgLy8gRG8g
bm90IGFkZCB0cmltbWFibGUgbGV0dGVyIHNwYWNpbmcgYWZ0ZXIgYSBmdWxseSB0cmltbWFibGUg
d2hpdGVzYXBjZS4KKyAgICAvLyBEbyBub3QgYWRkIHRyaW1tYWJsZSBsZXR0ZXIgc3BhY2luZyBh
ZnRlciBhIGZ1bGx5IHRyaW1tYWJsZSB3aGl0ZXNwYWNlLgogICAgIEFTU0VSVCghbV9maXJzdFJ1
bkluZGV4KTsKICAgICBBU1NFUlQoIW1faGFzRnVsbHlUcmltbWFibGVDb250ZW50KTsKICAgICBB
U1NFUlQoIW1fcGFydGlhbGx5VHJpbW1hYmxlV2lkdGgpOwpAQCAtNDExLDE0ICs0NTAsMTUgQEAg
SW5saW5lTGF5b3V0VW5pdCBMaW5lQnVpbGRlcjo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50Ojpy
ZW1vdmVQYXJ0aWFsbHlUcmltbWFibGUKIExpbmVCdWlsZGVyOjpSdW46OlJ1bihjb25zdCBJbmxp
bmVJdGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxpbmVM
YXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKICAgICA6IG1fdHlwZShpbmxpbmVJdGVtLnR5cGUoKSkK
ICAgICAsIG1fbGF5b3V0Qm94KCZpbmxpbmVJdGVtLmxheW91dEJveCgpKQotICAgICwgbV9sb2dp
Y2FsUmVjdCh7IDAsIGxvZ2ljYWxMZWZ0LCBsb2dpY2FsV2lkdGgsIDAgfSkKKyAgICAsIG1fbG9n
aWNhbExlZnQobG9naWNhbExlZnQpCisgICAgLCBtX2xvZ2ljYWxXaWR0aChsb2dpY2FsV2lkdGgp
CiB7CiB9CiAKIExpbmVCdWlsZGVyOjpSdW46OlJ1bihjb25zdCBJbmxpbmVTb2Z0TGluZUJyZWFr
SXRlbSYgc29mdExpbmVCcmVha0l0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQpCiAg
ICAgOiBtX3R5cGUoc29mdExpbmVCcmVha0l0ZW0udHlwZSgpKQogICAgICwgbV9sYXlvdXRCb3go
JnNvZnRMaW5lQnJlYWtJdGVtLmxheW91dEJveCgpKQotICAgICwgbV9sb2dpY2FsUmVjdCh7IDAs
IGxvZ2ljYWxMZWZ0LCAwLCAwIH0pCisgICAgLCBtX2xvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KQog
ICAgICwgbV90ZXh0Q29udGVudCh7IHNvZnRMaW5lQnJlYWtJdGVtLnBvc2l0aW9uKCksIDEsIHNv
ZnRMaW5lQnJlYWtJdGVtLmlubGluZVRleHRCb3goKS5jb250ZW50KCksIGZhbHNlIH0pCiB7CiB9
CkBAIC00MjYsNyArNDY2LDggQEAgTGluZUJ1aWxkZXI6OlJ1bjo6UnVuKGNvbnN0IElubGluZVNv
ZnRMaW5lQnJlYWtJdGVtJiBzb2Z0TGluZUJyZWFrSXRlbSwgSW5saW5lTGEKIExpbmVCdWlsZGVy
OjpSdW46OlJ1bihjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lVGV4dEl0ZW0sIElubGluZUxh
eW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoLCBib29s
IG5lZWRzSHlwaGVuKQogICAgIDogbV90eXBlKElubGluZUl0ZW06OlR5cGU6OlRleHQpCiAgICAg
LCBtX2xheW91dEJveCgmaW5saW5lVGV4dEl0ZW0ubGF5b3V0Qm94KCkpCi0gICAgLCBtX2xvZ2lj
YWxSZWN0KHsgMCwgbG9naWNhbExlZnQsIGxvZ2ljYWxXaWR0aCwgMCB9KQorICAgICwgbV9sb2dp
Y2FsTGVmdChsb2dpY2FsTGVmdCkKKyAgICAsIG1fbG9naWNhbFdpZHRoKGxvZ2ljYWxXaWR0aCkK
ICAgICAsIG1fdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZSh0cmFpbGluZ1doaXRlc3BhY2VUeXBlKGlu
bGluZVRleHRJdGVtKSkKICAgICAsIG1fdGV4dENvbnRlbnQoeyBpbmxpbmVUZXh0SXRlbS5zdGFy
dCgpLCBtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgPT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpDb2xs
YXBzZWQgPyAxIDogaW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCksIGlubGluZVRleHRJdGVtLmlubGlu
ZVRleHRCb3goKS5jb250ZW50KCksIG5lZWRzSHlwaGVuIH0pCiB7CkBAIC00NDQsNyArNDg1LDcg
QEAgdm9pZCBMaW5lQnVpbGRlcjo6UnVuOjpleHBhbmQoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlu
bGluZVRleHRJdGVtLCBJbmxpbmVMYXlvdXQKICAgICBBU1NFUlQoaXNUZXh0KCkgJiYgaW5saW5l
VGV4dEl0ZW0uaXNUZXh0KCkpOwogICAgIEFTU0VSVChtX2xheW91dEJveCA9PSAmaW5saW5lVGV4
dEl0ZW0ubGF5b3V0Qm94KCkpOwogCi0gICAgbV9sb2dpY2FsUmVjdC5leHBhbmRIb3Jpem9udGFs
bHkobG9naWNhbFdpZHRoKTsKKyAgICBtX2xvZ2ljYWxXaWR0aCArPSBsb2dpY2FsV2lkdGg7CiAg
ICAgbV90cmFpbGluZ1doaXRlc3BhY2VUeXBlID0gdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZShpbmxp
bmVUZXh0SXRlbSk7CiAKICAgICBpZiAobV90cmFpbGluZ1doaXRlc3BhY2VUeXBlID09IFRyYWls
aW5nV2hpdGVzcGFjZTo6Tm9uZSkgewpAQCAtNDg1LDcgKzUyNiw3IEBAIHZvaWQgTGluZUJ1aWxk
ZXI6OlJ1bjo6cmVtb3ZlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCkKIHZvaWQgTGluZUJ1aWxkZXI6
OlJ1bjo6cmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKCkKIHsKICAgICAvLyBBY2NvcmRpbmcgdG8g
aHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy10ZXh0LTMvI3doaXRlLXNwYWNlLXByb3BlcnR5IG1h
dHJpeAotICAgIC8vIFRyaW1tYWJsZSB3aGl0ZXNwYWNlIGlzIGFsd2F5cyBjb2xsYXBzYWJsZSBz
byB0aGUgbGVuZ3RoIG9mIHRoZSB0cmFpbGluZyB0cmltbWFibGUgd2hpdGVzcGFjZSBpcyBhbHdh
eXMgMSAob3Igbm9uLWV4aXN0ZW50KS4KKyAgICAvLyBUcmltbWFibGUgd2hpdGVzcGFjZSBpcyBh
bHdheXMgY29sbGFwc2libGUgc28gdGhlIGxlbmd0aCBvZiB0aGUgdHJhaWxpbmcgdHJpbW1hYmxl
IHdoaXRlc3BhY2UgaXMgYWx3YXlzIDEgKG9yIG5vbi1leGlzdGVudCkuCiAgICAgQVNTRVJUKG1f
dGV4dENvbnRlbnQtPmxlbmd0aCgpKTsKICAgICBjb25zdGV4cHIgc2l6ZV90IHRyYWlsaW5nVHJp
bW1hYmxlQ29udGVudExlbmd0aCA9IDE7CiAgICAgbV90ZXh0Q29udGVudC0+c2hyaW5rKHRyYWls
aW5nVHJpbW1hYmxlQ29udGVudExlbmd0aCk7CkBAIC01MTgsMTEgKzU1OSwxMCBAQCBFeHBhbnNp
b25CZWhhdmlvciBMaW5lQnVpbGRlcjo6UnVuOjpleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fZXhwYW5zaW9uLmJlaGF2aW9yOwogfQogCi12b2lkIExpbmVCdWlsZGVyOjpS
dW46OnNldENvbXB1dGVkSG9yaXpvbnRhbEV4cGFuc2lvbihJbmxpbmVMYXlvdXRVbml0IGxvZ2lj
YWxFeHBhbnNpb24pCit2b2lkIExpbmVCdWlsZGVyOjpSdW46OnNldEhvcml6b250YWxFeHBhbnNp
b24oSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsRXhwYW5zaW9uKQogewogICAgIEFTU0VSVChpc1Rl
eHQoKSk7CiAgICAgQVNTRVJUKGhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpOwotICAgIG1fbG9n
aWNhbFJlY3QuZXhwYW5kSG9yaXpvbnRhbGx5KGxvZ2ljYWxFeHBhbnNpb24pOwogICAgIG1fZXhw
YW5zaW9uLmhvcml6b250YWxFeHBhbnNpb24gPSBsb2dpY2FsRXhwYW5zaW9uOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5l
QnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJ1aWxkZXIuaAppbmRleCA3MjZhNjU3M2NkYWQ1NTI5NWMwMjE4YzUyNzBmNTlkZGYxMTI4
MzFjLi4yNzAzNDg2NmVkOTc3NTg5YWNhODRjOTFhZTk5MmEzNjJlZGUxM2I2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVCdWlsZGVyLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIH5MaW5lQnVpbGRlcigp
OwogCiAgICAgdm9pZCBvcGVuKElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRo
KTsKLSAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBjbG9zZShib29sIGlzTGFzdExpbmVXaXRo
SW5saW5lQ29udGVudCk7CiAgICAgdm9pZCBjbGVhckNvbnRlbnQoKTsKIAogICAgIHZvaWQgc2V0
SGFzSW50cnVzaXZlRmxvYXQoYm9vbCBoYXNJbnRydXNpdmVGbG9hdCkgeyBtX2hhc0ludHJ1c2l2
ZUZsb2F0ID0gaGFzSW50cnVzaXZlRmxvYXQ7IH0KQEAgLTc0LDM4ICs3NCwzMSBAQCBwdWJsaWM6
CiAKICAgICAgICAgY29uc3QgQm94JiBsYXlvdXRCb3goKSBjb25zdCB7IHJldHVybiAqbV9sYXlv
dXRCb3g7IH0KICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9sYXlvdXRCb3gtPnN0eWxlKCk7IH0KLSAgICAgICAgY29uc3QgRGlzcGxheTo6SW5saW5l
UmVjdCYgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0OyB9Ci0gICAg
ICAgIERpc3BsYXk6OlJ1bjo6RXhwYW5zaW9uIGV4cGFuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhwYW5zaW9uOyB9CiAgICAgICAgIGNvbnN0IE9wdGlvbmFsPERpc3BsYXk6OlJ1bjo6VGV4dENv
bnRlbnQ+JiB0ZXh0Q29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENvbnRlbnQ7IH0KIAot
ICAgICAgICBSdW4oUnVuJiYpID0gZGVmYXVsdDsKLSAgICAgICAgUnVuJiBvcGVyYXRvcj0oUnVu
JiYgb3RoZXIpID0gZGVmYXVsdDsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxXaWR0aDsgfQorICAgICAgICBJbmxpbmVMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsTGVmdDsgfQorCisg
ICAgICAgIGNvbnN0IERpc3BsYXk6OlJ1bjo6RXhwYW5zaW9uJiBleHBhbnNpb24oKSBjb25zdCB7
IHJldHVybiBtX2V4cGFuc2lvbjsgfQorICAgICAgICBib29sIGhhc0V4cGFuc2lvbk9wcG9ydHVu
aXR5KCkgY29uc3QgeyByZXR1cm4gbV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50OyB9CisgICAg
ICAgIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3Q7CisgICAgICAg
IHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2V4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7IH0KKworICAgICAgICBib29sIGhhc1RyYWlsaW5nV2hp
dGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZSAhPSBUcmFp
bGluZ1doaXRlc3BhY2U6Ok5vbmU7IH0KKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCB0cmFpbGlu
Z1doaXRlc3BhY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lk
dGg7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMaW5lQnVpbGRlcjsK
LSAgICAgICAgZnJpZW5kIGNsYXNzIExpbmVDb250ZW50QWxpZ25lcjsKIAogICAgICAgICBSdW4o
Y29uc3QgSW5saW5lVGV4dEl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxp
bmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgYm9vbCBuZWVkc0h5cGVuKTsKICAgICAgICAgUnVu
KGNvbnN0IElubGluZVNvZnRMaW5lQnJlYWtJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2Fs
TGVmdCk7CiAgICAgICAgIFJ1bihjb25zdCBJbmxpbmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdCwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpOwogCiAgICAgICAgIHZv
aWQgZXhwYW5kKGNvbnN0IElubGluZVRleHRJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2Fs
V2lkdGgpOwotCi0gICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2dpY2FsUmVjdC53aWR0aCgpOyB9Ci0KLSAgICAgICAgdm9pZCBtb3ZlSG9y
aXpvbnRhbGx5KElubGluZUxheW91dFVuaXQgb2Zmc2V0KSB7IG1fbG9naWNhbFJlY3QubW92ZUhv
cml6b250YWxseShvZmZzZXQpOyB9Ci0gICAgICAgIHZvaWQgc2hyaW5rSG9yaXpvbnRhbGx5KElu
bGluZUxheW91dFVuaXQgd2lkdGgpIHsgbV9sb2dpY2FsUmVjdC5leHBhbmRIb3Jpem9udGFsbHko
LXdpZHRoKTsgfQotCi0gICAgICAgIHZvaWQgYWRqdXN0TG9naWNhbFRvcChJbmxpbmVMYXlvdXRV
bml0IGxvZ2ljYWxUb3ApIHsgbV9sb2dpY2FsUmVjdC5zZXRUb3AobG9naWNhbFRvcCk7IH0KLSAg
ICAgICAgdm9pZCBtb3ZlVmVydGljYWxseShJbmxpbmVMYXlvdXRVbml0IG9mZnNldCkgeyBtX2xv
Z2ljYWxSZWN0Lm1vdmVWZXJ0aWNhbGx5KG9mZnNldCk7IH0KLSAgICAgICAgdm9pZCBzZXRMb2dp
Y2FsSGVpZ2h0KElubGluZUxheW91dFVuaXQgbG9naWNhbEhlaWdodCkgeyBtX2xvZ2ljYWxSZWN0
LnNldEhlaWdodChsb2dpY2FsSGVpZ2h0KTsgfQotCi0gICAgICAgIGJvb2wgaGFzRXhwYW5zaW9u
T3Bwb3J0dW5pdHkoKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7
IH0KLSAgICAgICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdDsK
LSAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsgfQotICAgICAgICB2b2lkIHNldENvbXB1
dGVkSG9yaXpvbnRhbEV4cGFuc2lvbihJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxFeHBhbnNpb24p
OworICAgICAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCBvZmZzZXQp
IHsgbV9sb2dpY2FsTGVmdCArPSBvZmZzZXQ7IH0KKyAgICAgICAgdm9pZCBzaHJpbmtIb3Jpem9u
dGFsbHkoSW5saW5lTGF5b3V0VW5pdCB3aWR0aCkgeyBtX2xvZ2ljYWxXaWR0aCAtPSB3aWR0aDsg
fQogICAgICAgICB2b2lkIHNldEV4cGFuc2lvbkJlaGF2aW9yKEV4cGFuc2lvbkJlaGF2aW9yKTsK
LQorICAgICAgICB2b2lkIHNldEhvcml6b250YWxFeHBhbnNpb24oSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsRXhwYW5zaW9uKTsKICAgICAgICAgdm9pZCBzZXROZWVkc0h5cGhlbigpIHsgbV90ZXh0
Q29udGVudC0+c2V0TmVlZHNIeXBoZW4oKTsgfQogCiAgICAgICAgIGVudW0gY2xhc3MgVHJhaWxp
bmdXaGl0ZXNwYWNlIHsKQEAgLTExNCwxMCArMTA3LDggQEAgcHVibGljOgogICAgICAgICAgICAg
Q29sbGFwc2libGUsCiAgICAgICAgICAgICBDb2xsYXBzZWQKICAgICAgICAgfTsKLSAgICAgICAg
Ym9vbCBoYXNUcmFpbGluZ1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5nV2hp
dGVzcGFjZVR5cGUgIT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpOb25lOyB9CiAgICAgICAgIGJvb2wg
aGFzQ29sbGFwc2libGVUcmFpbGluZ1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3RyYWls
aW5nV2hpdGVzcGFjZVR5cGUgPT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpDb2xsYXBzaWJsZSB8fCBo
YXNDb2xsYXBzZWRUcmFpbGluZ1doaXRlc3BhY2UoKTsgfQogICAgICAgICBib29sIGhhc0NvbGxh
cHNlZFRyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNw
YWNlVHlwZSA9PSBUcmFpbGluZ1doaXRlc3BhY2U6OkNvbGxhcHNlZDsgfQotICAgICAgICBJbmxp
bmVMYXlvdXRVbml0IHRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV90
cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsgfQogICAgICAgICBUcmFpbGluZ1doaXRlc3BhY2UgdHJh
aWxpbmdXaGl0ZXNwYWNlVHlwZShjb25zdCBJbmxpbmVUZXh0SXRlbSYpIGNvbnN0OwogICAgICAg
ICB2b2lkIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICB2b2lkIHZpc3VhbGx5
Q29sbGFwc2VUcmFpbGluZ1doaXRlc3BhY2UoKTsKQEAgLTEyOCw3ICsxMTksOCBAQCBwdWJsaWM6
CiAKICAgICAgICAgSW5saW5lSXRlbTo6VHlwZSBtX3R5cGUgeyBJbmxpbmVJdGVtOjpUeXBlOjpU
ZXh0IH07CiAgICAgICAgIGNvbnN0IEJveCogbV9sYXlvdXRCb3ggeyBudWxscHRyIH07Ci0gICAg
ICAgIERpc3BsYXk6OklubGluZVJlY3QgbV9sb2dpY2FsUmVjdDsKKyAgICAgICAgSW5saW5lTGF5
b3V0VW5pdCBtX2xvZ2ljYWxMZWZ0IHsgMCB9OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1f
bG9naWNhbFdpZHRoIHsgMCB9OwogICAgICAgICBUcmFpbGluZ1doaXRlc3BhY2UgbV90cmFpbGlu
Z1doaXRlc3BhY2VUeXBlIHsgVHJhaWxpbmdXaGl0ZXNwYWNlOjpOb25lIH07CiAgICAgICAgIElu
bGluZUxheW91dFVuaXQgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCB7IDAgfTsKICAgICAgICAg
T3B0aW9uYWw8RGlzcGxheTo6UnVuOjpUZXh0Q29udGVudD4gbV90ZXh0Q29udGVudDsKQEAgLTEz
Nyw3ICsxMjksNiBAQCBwdWJsaWM6CiAgICAgfTsKICAgICB1c2luZyBSdW5MaXN0ID0gVmVjdG9y
PFJ1biwgMTA+OwogICAgIGNvbnN0IFJ1bkxpc3QmIHJ1bnMoKSBjb25zdCB7IHJldHVybiBtX3J1
bnM7IH0KLSAgICBSdW5MaXN0JiBydW5zKCkgeyByZXR1cm4gbV9ydW5zOyB9CiAKIHByaXZhdGU6
CiAgICAgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9saW5lTG9naWNhbExlZnQgKyBtX2NvbnRlbnRMb2dpY2FsV2lkdGg7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlv
dXRDb250ZXh0LmNwcAppbmRleCBkODBmMzBjMjFjNjgwMjhiMzNhM2E0Nzk0YTk4YTlkNzhlMGE0
ZDgyLi43ZmRhYzQ1YzE0ZWRjOWQ5MTQ2Njg2NGM5MmJkMGVmZjUxOTJiNTVkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxh
eW91dENvbnRleHQuY3BwCkBAIC0zMjUsMTQgKzMyNSwxMyBAQCBMaW5lTGF5b3V0Q29udGV4dDo6
TGluZUNvbnRlbnQgTGluZUxheW91dENvbnRleHQ6OmxheW91dElubGluZUNvbnRlbnQoTGluZUJ1
aWxkZQogICAgIHJldHVybiBjbG9zZShsaW5lLCBsYXlvdXRSYW5nZSwgY29tbWl0dGVkSW5saW5l
SXRlbUNvdW50LCB7IH0pOwogfQogCi1MaW5lTGF5b3V0Q29udGV4dDo6TGluZUNvbnRlbnQgTGlu
ZUxheW91dENvbnRleHQ6OmNsb3NlKExpbmVCdWlsZGVyJiBsaW5lLCBjb25zdCBJbmxpbmVJdGVt
UmFuZ2UmIGxheW91dFJhbmdlLCB1bnNpZ25lZCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIE9w
dGlvbmFsPExpbmVDb250ZW50OjpQYXJ0aWFsQ29udGVudD4gcGFydGlhbENvbnRlbnQpCitMaW5l
TGF5b3V0Q29udGV4dDo6TGluZUNvbnRlbnQgTGluZUxheW91dENvbnRleHQ6OmNsb3NlKGNvbnN0
IExpbmVCdWlsZGVyJiBsaW5lLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlLCB1
bnNpZ25lZCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIE9wdGlvbmFsPExpbmVDb250ZW50OjpQ
YXJ0aWFsQ29udGVudD4gcGFydGlhbENvbnRlbnQpCiB7Ci0gICAgQVNTRVJUKGNvbW1pdHRlZElu
bGluZUl0ZW1Db3VudCB8fCAhbV9mbG9hdHMuaXNFbXB0eSgpIHx8IGxpbmUuaGFzSW50cnVzaXZl
RmxvYXQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChsaW5lLCBjb21taXR0ZWRJbmxpbmVJdGVtQ291
bnQgfHwgIW1fZmxvYXRzLmlzRW1wdHkoKSB8fCBsaW5lLmhhc0ludHJ1c2l2ZUZsb2F0KCkpOwog
ICAgIGF1dG8gbnVtYmVyT2ZDb21taXR0ZWRJdGVtcyA9IGNvbW1pdHRlZElubGluZUl0ZW1Db3Vu
dCArIG1fZmxvYXRzLnNpemUoKTsKICAgICBhdXRvIHRyYWlsaW5nSW5saW5lSXRlbUluZGV4ID0g
bGF5b3V0UmFuZ2Uuc3RhcnQgKyBudW1iZXJPZkNvbW1pdHRlZEl0ZW1zIC0gMTsKICAgICBhdXRv
IGxpbmVSYW5nZSA9IElubGluZUl0ZW1SYW5nZSB7IGxheW91dFJhbmdlLnN0YXJ0LCB0cmFpbGlu
Z0lubGluZUl0ZW1JbmRleCArIDEgfTsKICAgICBBU1NFUlQobGluZVJhbmdlLmVuZCA8PSBsYXlv
dXRSYW5nZS5lbmQpOwotICAgIGxpbmUuY2xvc2UoKTsKICAgICAvLyBBZGp1c3QgaHlwaGVuYXRl
ZCBsaW5lIGNvdW50LgogICAgIG1fc3VjY2Vzc2l2ZUh5cGhlbmF0ZWRMaW5lQ291bnQgPSBwYXJ0
aWFsQ29udGVudCAmJiBwYXJ0aWFsQ29udGVudC0+dHJhaWxpbmdDb250ZW50SGFzSHlwaGVuID8g
bV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCArIDEgOiAwOwogICAgIHJldHVybiBMaW5l
Q29udGVudCB7IHBhcnRpYWxDb250ZW50LCBsaW5lUmFuZ2UsIFdURk1vdmUobV9mbG9hdHMpIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5l
TGF5b3V0Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
TGluZUxheW91dENvbnRleHQuaAppbmRleCAyZDJmZTVkMjM0MDZhODMzYzgyNTdkOTg1MmEyYzgz
ZjUyMmVmYTY1Li5hMTk3OTg5NmIxZTFiNDA4MTY0OGJkZGU3MTQwZGNiYzcyMDk5OGUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xp
bmVMYXlvdXRDb250ZXh0LmgKQEAgLTc3LDcgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBSZXN1bHQg
aGFuZGxlRmxvYXRzQW5kSW5saW5lQ29udGVudChMaW5lQnJlYWtlciYsIExpbmVCdWlsZGVyJiwg
Y29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYp
OwogICAgIHNpemVfdCByZWJ1aWxkTGluZShMaW5lQnVpbGRlciYsIGNvbnN0IElubGluZUl0ZW1S
YW5nZSYgbGF5b3V0UmFuZ2UpOwogICAgIHZvaWQgY29tbWl0UGFydGlhbENvbnRlbnQoTGluZUJ1
aWxkZXImLCBjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYsIGNvbnN0IExpbmVCcmVha2VyOjpS
ZXN1bHQ6OlBhcnRpYWxUcmFpbGluZ0NvbnRlbnQmKTsKLSAgICBMaW5lQ29udGVudCBjbG9zZShM
aW5lQnVpbGRlciYsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UsIHVuc2lnbmVk
IGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCwgT3B0aW9uYWw8TGluZUNvbnRlbnQ6OlBhcnRpYWxD
b250ZW50Pik7CisgICAgTGluZUNvbnRlbnQgY2xvc2UoY29uc3QgTGluZUJ1aWxkZXImLCBjb25z
dCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlLCB1bnNpZ25lZCBjb21taXR0ZWRJbmxpbmVJ
dGVtQ291bnQsIE9wdGlvbmFsPExpbmVDb250ZW50OjpQYXJ0aWFsQ29udGVudD4pOwogCiAgICAg
SW5saW5lTGF5b3V0VW5pdCBpbmxpbmVJdGVtV2lkdGgoY29uc3QgSW5saW5lSXRlbSYsIElubGlu
ZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdDsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>