<?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>205621</bug_id>
          
          <creation_ts>2019-12-28 17:02:42 -0800</creation_ts>
          <short_desc>[LFC][IFC] Move soft wrap opportunity code out of LineBreaker</short_desc>
          <delta_ts>2019-12-29 07:59:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1601714</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-12-28 17:02:42 -0800</bug_when>
    <thetext>to not confuse it with line wrapping opportunities</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601715</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-28 17:03:06 -0800</bug_when>
    <thetext>&lt;rdar://problem/58227670&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601716</commentid>
    <comment_count>2</comment_count>
      <attachid>386478</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-12-28 17:05:18 -0800</bug_when>
    <thetext>Created attachment 386478
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601758</commentid>
    <comment_count>3</comment_count>
      <attachid>386478</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-29 07:59:08 -0800</bug_when>
    <thetext>Comment on attachment 386478
Patch

Clearing flags on attachment: 386478

Committed r253934: &lt;https://trac.webkit.org/changeset/253934&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601759</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-29 07:59:10 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386478</attachid>
            <date>2019-12-28 17:05:18 -0800</date>
            <delta_ts>2019-12-29 07:59:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205621-20191228170518.patch</filename>
            <type>text/plain</type>
            <size>30721</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzOTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDk3MGRiMTcyODEzMGYx
ZDY1YjkzODRmMTI3YjgyZGNmYWNlMDRlMi4uNmI3YmMwOWQ2MTYxYTNjNzRhM2M5ZjM0MzI0N2My
ZDkyYmNiNTE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDE5LTEyLTI4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIHNv
ZnQgd3JhcCBvcHBvcnR1bml0eSBjb2RlIG91dCBvZiBMaW5lQnJlYWtlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1NjIxCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS81ODIyNzY3MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBMZXQncyBub3QgbWl4IHNvZnQgYW5kIGxpbmUgd3JhcCBvcHBvcnR1bml0
eSBsb2dpYy4KKworICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVC
cmVha2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Q29udGlub3VzQ29udGVudDo6
cnVucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNvbnRpbm91c0NvbnRlbnQ6
OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpDb250aW5vdXNDb250
ZW50OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Q29udGlub3VzQ29u
dGVudDo6d2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpDb250aW5vdXND
b250ZW50Ojpub25Db2xsYXBzaWJsZVdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6Q29udGlub3VzQ29udGVudDo6aGFzVHJhaWxpbmdDb2xsYXBzaWJsZUNvbnRlbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpDb250aW5vdXNDb250ZW50Ojppc1RyYWls
aW5nQ29udGVudEZ1bGx5Q29sbGFwc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQnJlYWtlcjo6d3JhcFRleHRDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6Q29udGlub3VzQ29udGVudDo6Q29udGlub3VzQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkNvbnRpbm91c0NvbnRlbnQ6Omhhc1RleHRDb250ZW50T25seSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNvbnRpbm91c0NvbnRlbnQ6OmlzVmlz
dWFsbHlFbXB0eVdoaXRlc3BhY2VDb250ZW50T25seSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkNvbnRpbm91c0NvbnRlbnQ6OmZpcnN0VGV4dFJ1bkluZGV4IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6Q29udGlub3VzQ29udGVudDo6bGFzdENvbnRlbnRSdW5J
bmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNvbnRpbm91c0NvbnRlbnQ6
Omhhc05vbkNvbnRlbnRSdW5zT25seSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkNvbnRpbm91c0NvbnRlbnQ6Omxhc3RXcmFwT3Bwb3J0dW5pdHlJbmRleCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNvbnRpbm91c0NvbnRlbnQ6OlRyYWlsaW5nQ29sbGFwc2li
bGVDb250ZW50OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmVuZHNXaXRoU29m
dFdyYXBPcHBvcnR1bml0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Omlz
QXRTb2Z0V3JhcE9wcG9ydHVuaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJyZWFrZXI6Om5leHRXcmFwT3Bwb3J0dW5pdHkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6Q29udGlub3VzQ29udGVudDo6Q29udGlub3Vz
Q29udGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2Vy
OjpDb250aW5vdXNDb250ZW50OjpoYXNUZXh0Q29udGVudE9ubHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6Q29udGlub3VzQ29udGVudDo6
aXNWaXN1YWxseUVtcHR5V2hpdGVzcGFjZUNvbnRlbnRPbmx5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OkNvbnRpbm91c0NvbnRlbnQ6OmZp
cnN0VGV4dFJ1bkluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJyZWFrZXI6OkNvbnRpbm91c0NvbnRlbnQ6Omxhc3RDb250ZW50UnVuSW5kZXggY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6Q29u
dGlub3VzQ29udGVudDo6aGFzTm9uQ29udGVudFJ1bnNPbmx5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OkNvbnRpbm91c0NvbnRlbnQ6Omxh
c3RXcmFwT3Bwb3J0dW5pdHlJbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCcmVha2VyOjpDb250aW5vdXNDb250ZW50OjpUcmFpbGluZ0NvbGxhcHNp
YmxlQ29udGVudDo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCcmVha2VyOjpDb250aW5vdXNDb250ZW50OjpydW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OkNvbnRpbm91c0NvbnRlbnQ6OmlzRW1w
dHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtl
cjo6Q29udGlub3VzQ29udGVudDo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjpDb250aW5vdXNDb250ZW50Ojp3aWR0aCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjpDb250aW5v
dXNDb250ZW50Ojpub25Db2xsYXBzaWJsZVdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OkNvbnRpbm91c0NvbnRlbnQ6Omhhc1RyYWls
aW5nQ29sbGFwc2libGVDb250ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZUJyZWFrZXI6OkNvbnRpbm91c0NvbnRlbnQ6OmlzVHJhaWxpbmdDb250ZW50
RnVsbHlDb2xsYXBzaWJsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjplbmRzV2l0aFNvZnRXcmFwT3Bwb3J0dW5pdHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0Ojppc0F0U29mdFdyYXBPcHBvcnR1bml0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
Om5leHRXcmFwT3Bwb3J0dW5pdHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5
b3V0Q29udGV4dDo6bmV4dENvbnRlbnRGb3JMaW5lKToKKwogMjAxOS0xMi0yOCAgWmFsYW4gQnVq
dGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10gS2VlcCB0cmFjayBv
ZiBsYXN0IGxpbmUgd3JhcCBvcHBvcnR1bml0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwCmluZGV4
IGJlMzAwNTZiODM3ZDVhZTgyMDAwODMzM2RhMjBmODVlMWY0ZGYwNzIuLjU4ZGU1MWNmMDE0Yjdk
MzI2NzE5ZWY0ODE5MDQ3YWEzMDc0Y2VlZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKQEAg
LTQ5LDYgKzQ5LDQzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRLZWVwQmVnaW5uaW5nT2ZM
aW5lV2hpdGVzcGFjZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiAgICAgcmV0dXJuIHdoaXRl
c3BhY2UgPT0gV2hpdGVTcGFjZTo6UHJlIHx8IHdoaXRlc3BhY2UgPT0gV2hpdGVTcGFjZTo6UHJl
V3JhcCB8fCB3aGl0ZXNwYWNlID09IFdoaXRlU3BhY2U6OkJyZWFrU3BhY2VzOwogfQogCitzdHJ1
Y3QgQ29udGlub3VzQ29udGVudCB7CisgICAgQ29udGlub3VzQ29udGVudChjb25zdCBMaW5lQnJl
YWtlcjo6UnVuTGlzdCYpOworCisgICAgY29uc3QgTGluZUJyZWFrZXI6OlJ1bkxpc3QmIHJ1bnMo
KSBjb25zdCB7IHJldHVybiBtX3J1bnM7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX3J1bnMuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBoYXNUZXh0Q29udGVudE9ubHkoKSBj
b25zdDsKKyAgICBib29sIGlzVmlzdWFsbHlFbXB0eVdoaXRlc3BhY2VDb250ZW50T25seSgpIGNv
bnN0OworICAgIGJvb2wgaGFzTm9uQ29udGVudFJ1bnNPbmx5KCkgY29uc3Q7CisgICAgc2l6ZV90
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3J1bnMuc2l6ZSgpOyB9CisgICAgSW5saW5lTGF5b3V0
VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICBJbmxpbmVMYXlvdXRV
bml0IG5vbkNvbGxhcHNpYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoIC0gbV90cmFp
bGluZ0NvbGxhcHNpYmxlQ29udGVudC53aWR0aDsgfQorCisgICAgYm9vbCBoYXNUcmFpbGluZ0Nv
bGxhcHNpYmxlQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuICEhbV90cmFpbGluZ0NvbGxhcHNpYmxl
Q29udGVudC53aWR0aDsgfQorICAgIGJvb2wgaXNUcmFpbGluZ0NvbnRlbnRGdWxseUNvbGxhcHNp
YmxlKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ0NvbGxhcHNpYmxlQ29udGVudC5pc0Z1bGx5
Q29sbGFwc2libGU7IH0KKyAgICBPcHRpb25hbDxzaXplX3Q+IGxhc3RXcmFwT3Bwb3J0dW5pdHlJ
bmRleCgpIGNvbnN0OworCisgICAgT3B0aW9uYWw8c2l6ZV90PiBmaXJzdFRleHRSdW5JbmRleCgp
IGNvbnN0OworICAgIE9wdGlvbmFsPHNpemVfdD4gbGFzdENvbnRlbnRSdW5JbmRleCgpIGNvbnN0
OworCitwcml2YXRlOgorICAgIExpbmVCcmVha2VyOjpSdW5MaXN0IG1fcnVuczsKKyAgICBzdHJ1
Y3QgVHJhaWxpbmdDb2xsYXBzaWJsZUNvbnRlbnQgeworICAgICAgICB2b2lkIHJlc2V0KCk7CisK
KyAgICAgICAgYm9vbCBpc0Z1bGx5Q29sbGFwc2libGUgeyBmYWxzZSB9OworICAgICAgICBJbmxp
bmVMYXlvdXRVbml0IHdpZHRoIHsgMCB9OworICAgIH07CisgICAgVHJhaWxpbmdDb2xsYXBzaWJs
ZUNvbnRlbnQgbV90cmFpbGluZ0NvbGxhcHNpYmxlQ29udGVudDsKKyAgICBJbmxpbmVMYXlvdXRV
bml0IG1fd2lkdGggeyAwIH07Cit9OworCitzdHJ1Y3QgV3JhcHBlZFRleHRDb250ZW50IHsKKyAg
ICB1bnNpZ25lZCB0cmFpbGluZ1J1bkluZGV4IHsgMCB9OworICAgIGJvb2wgY29udGVudE92ZXJm
bG93cyB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8TGluZUJyZWFrZXI6OlBhcnRpYWxSdW4+IHBh
cnRpYWxUcmFpbGluZ1J1bjsKK307CisKIGJvb2wgTGluZUJyZWFrZXI6OmlzQ29udGVudFdyYXBw
aW5nQWxsb3dlZChjb25zdCBDb250aW5vdXNDb250ZW50JiBjYW5kaWRhdGVSdW5zKSBjb25zdAog
ewogICAgIC8vIFVzZSB0aGUgbGFzdCBpbmxpbmUgaXRlbSB3aXRoIGNvbnRlbnQgKHdoZXJlIHdl
IHdvdWxkIGJlIHdyYXBwaW5nKSB0byBkZWNpZGUgaWYgY29udGVudCB3cmFwcGluZyBpcyBhbGxv
d2VkLgpAQCAtMTUxLDcgKzE4OCw3IEBAIGJvb2wgTGluZUJyZWFrZXI6OnNob3VsZFdyYXBGbG9h
dEJveChJbmxpbmVMYXlvdXRVbml0IGZsb2F0TG9naWNhbFdpZHRoLCBJbmxpbmVMCiAgICAgcmV0
dXJuICFsaW5lSXNFbXB0eSAmJiBmbG9hdExvZ2ljYWxXaWR0aCA+IGF2YWlsYWJsZVdpZHRoOwog
fQogCi1PcHRpb25hbDxMaW5lQnJlYWtlcjo6V3JhcHBlZFRleHRDb250ZW50PiBMaW5lQnJlYWtl
cjo6d3JhcFRleHRDb250ZW50KGNvbnN0IFJ1bkxpc3QmIHJ1bnMsIGNvbnN0IExpbmVTdGF0dXMm
IGxpbmVTdGF0dXMpIGNvbnN0CitPcHRpb25hbDxXcmFwcGVkVGV4dENvbnRlbnQ+IExpbmVCcmVh
a2VyOjp3cmFwVGV4dENvbnRlbnQoY29uc3QgUnVuTGlzdCYgcnVucywgY29uc3QgTGluZVN0YXR1
cyYgbGluZVN0YXR1cykgY29uc3QKIHsKICAgICBhdXRvIGlzQ29udGVudFNwbGl0QWxsb3dlZCA9
IFtdIChhdXRvJiBydW4pIHsKICAgICAgICAgQVNTRVJUKHJ1bi5pbmxpbmVJdGVtLmlzVGV4dCgp
IHx8IHJ1bi5pbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaW5saW5lSXRlbS5p
c0NvbnRhaW5lckVuZCgpKTsKQEAgLTI5MCwxNDUgKzMyNyw3IEBAIE9wdGlvbmFsPExpbmVCcmVh
a2VyOjpQYXJ0aWFsUnVuPiBMaW5lQnJlYWtlcjo6dHJ5QnJlYWtpbmdUZXh0UnVuKGNvbnN0IFJ1
biYgb3ZlCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIGJvb2wgZW5kc1dpdGhTb2Z0V3Jh
cE9wcG9ydHVuaXR5KGNvbnN0IElubGluZVRleHRJdGVtJiBjdXJyZW50VGV4dEl0ZW0sIGNvbnN0
IElubGluZVRleHRJdGVtJiBuZXh0SW5saW5lVGV4dEl0ZW0pCi17Ci0gICAgQVNTRVJUKCFuZXh0
SW5saW5lVGV4dEl0ZW0uaXNXaGl0ZXNwYWNlKCkpOwotICAgIC8vIFdlIGFyZSBhdCB0aGUgcG9z
aXRpb24gYWZ0ZXIgYSB3aGl0ZXNwYWNlLgotICAgIGlmIChjdXJyZW50VGV4dEl0ZW0uaXNXaGl0
ZXNwYWNlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIFdoZW4gYm90aCB0aGVzZSBu
b24td2hpdGVzcGFjZSBydW5zIGJlbG9uZyB0byB0aGUgc2FtZSBsYXlvdXQgYm94LCBpdCdzIGd1
YXJhbnRlZWQgdGhhdAotICAgIC8vIHRoZXkgYXJlIHNwbGl0IGF0IGEgc29mdCBicmVha2luZyBv
cHBvcnR1bml0eS4gU2VlIElubGluZVRleHRJdGVtOjptb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRp
b24uCi0gICAgaWYgKCZjdXJyZW50VGV4dEl0ZW0ubGF5b3V0Qm94KCkgPT0gJm5leHRJbmxpbmVU
ZXh0SXRlbS5sYXlvdXRCb3goKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8gTm93IHdl
IG5lZWQgdG8gY29sbGVjdCBhdCBsZWFzdCAzIGFkamFjZW50IGNoYXJhY3RlcnMgdG8gYmUgYWJs
ZSB0byBtYWtlIGEgZGVzY2lzaW9uIHdoZXRoZXIgdGhlIHByZXZpb3VzIHRleHQgaXRlbSBlbmRz
IHdpdGggYnJlYWtpbmcgb3Bwb3J0dW5pdHkuCi0gICAgLy8gW2V4LV1bYW1wbGVdIDwtIHNlY29u
ZCB0byBsYXN0W3hdIGxhc3RbLV0gY3VycmVudFthXQotICAgIC8vIFdlIG5lZWQgYXQgbGVhc3Qg
MSBjaGFyYWN0ZXIgaW4gdGhlIGN1cnJlbnQgaW5saW5lIHRleHQgaXRlbSBhbmQgMiBtb3JlIGZy
b20gcHJldmlvdXMgaW5saW5lIGl0ZW1zLgotICAgIGF1dG8gcHJldmlvdXNDb250ZW50ID0gY3Vy
cmVudFRleHRJdGVtLmxheW91dEJveCgpLnRleHRDb250ZXh0KCktPmNvbnRlbnQ7Ci0gICAgYXV0
byBsaW5lQnJlYWtJdGVyYXRvciA9IExhenlMaW5lQnJlYWtJdGVyYXRvciB7IG5leHRJbmxpbmVU
ZXh0SXRlbS5sYXlvdXRCb3goKS50ZXh0Q29udGV4dCgpLT5jb250ZW50IH07Ci0gICAgYXV0byBw
cmV2aW91c0NvbnRlbnRMZW5ndGggPSBwcmV2aW91c0NvbnRlbnQubGVuZ3RoKCk7Ci0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCBsb29rIGludG8gdGhlIGVudGlyZSB1bmNvbW1pdHRlZCBjb250ZW50
IGZvciBtb3JlIHRleHQgY29udGV4dC4KLSAgICBVQ2hhciBsYXN0Q2hhcmFjdGVyID0gcHJldmlv
dXNDb250ZW50TGVuZ3RoID8gcHJldmlvdXNDb250ZW50W3ByZXZpb3VzQ29udGVudExlbmd0aCAt
IDFdIDogMDsKLSAgICBVQ2hhciBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIgPSBwcmV2aW91c0NvbnRl
bnRMZW5ndGggPiAxID8gcHJldmlvdXNDb250ZW50W3ByZXZpb3VzQ29udGVudExlbmd0aCAtIDJd
IDogMDsKLSAgICBsaW5lQnJlYWtJdGVyYXRvci5zZXRQcmlvckNvbnRleHQobGFzdENoYXJhY3Rl
ciwgc2Vjb25kVG9MYXN0Q2hhcmFjdGVyKTsKLSAgICAvLyBOb3cgY2hlY2sgaWYgd2UgY2FuIGJy
ZWFrIHJpZ2h0IGF0IHRoZSBpbmxpbmUgaXRlbSBib3VuZGFyeS4KLSAgICAvLyBXaXRoIHRoZSBb
ZXgtYW1wbGVdLCBmaW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uIHNob3VsZCByZXR1cm4gdGhlIHN0
YXJ0UG9zaXRpb24gKDApLgotICAgIC8vIEZJWE1FOiBDaGVjayBpZiB0aGVyZSdzIGEgbW9yZSBj
b3JyZWN0IHdheSBvZiBmaW5kaW5nIGJyZWFraW5nIG9wcG9ydHVuaXRpZXMuCi0gICAgcmV0dXJu
ICFUZXh0VXRpbDo6ZmluZE5leHRCcmVha2FibGVQb3NpdGlvbihsaW5lQnJlYWtJdGVyYXRvciwg
MCwgbmV4dElubGluZVRleHRJdGVtLnN0eWxlKCkpOwotfQotCi1zdGF0aWMgYm9vbCBpc0F0U29m
dFdyYXBPcHBvcnR1bml0eShjb25zdCBJbmxpbmVJdGVtJiBjdXJyZW50LCBjb25zdCBJbmxpbmVJ
dGVtJiBuZXh0KQotewotICAgIC8vICJpcyBhdCIgc2ltcGxlIG1lYW5zIHRoYXQgdGhlcmUncyBh
IHNvZnQgd3JhcCBvcHBvcnR1bml0eSByaWdodCBhZnRlciB0aGUgW2N1cnJlbnRdLgotICAgIC8v
IFt0ZXh0XVsgXVt0ZXh0XVtjb250YWluZXIgc3RhcnRdLi4uICg8ZGl2PnRleHQgY29udGVudDxz
cGFuPi4uPC9kaXY+KQotICAgIC8vIHNvZnQgd3JhcCBpbmRleGVzOiAwIGFuZCAxIGRlZmluaXRl
bHksIDIgZGVwZW5kcyBvbiB0aGUgY29udGVudCBhZnRlciB0aGUgW2NvbnRhaW5lciBzdGFydF0u
Ci0KLSAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRleHQtMy8jbGluZS1icmVh
ay1kZXRhaWxzCi0gICAgLy8gRmlndXJlIG91dCBpZiB0aGUgbmV3IGluY29taW5nIGNvbnRlbnQg
cHV0cyB0aGUgdW5jb21taXR0ZWQgY29udGVudCBvbiBhIHNvZnQgd3JhcCBvcHBvcnR1bml0eS4K
LSAgICAvLyBlLmcuIFtjb250YWluZXIgc3RhcnRdW3ByaW9yX2NvbnRpbnVvdXNfY29udGVudF1b
Y29udGFpbmVyIGVuZF0gKDxzcGFuPnByaW9yX2NvbnRpbnVvdXNfY29udGVudDwvc3Bhbj4pCi0g
ICAgLy8gQW4gaW5jb21pbmcgPGltZz4gYm94IHdvdWxkIGVuYWJsZSB1cyB0byBjb21taXQgdGhl
ICI8c3Bhbj5wcmlvcl9jb250aW51b3VzX2NvbnRlbnQ8L3NwYW4+IiBjb250ZW50Ci0gICAgLy8g
YnV0IGFuIGluY29taW5nIHRleHQgY29udGVudCB3b3VsZCBub3QgbmVjZXNzYXJpbHkuCi0gICAg
QVNTRVJUKGN1cnJlbnQuaXNUZXh0KCkgfHwgY3VycmVudC5pc0JveCgpKTsKLSAgICBBU1NFUlQo
bmV4dC5pc1RleHQoKSB8fCBuZXh0LmlzQm94KCkpOwotICAgIGlmIChjdXJyZW50LmlzQm94KCkg
fHwgbmV4dC5pc0JveCgpKSB7Ci0gICAgICAgIC8vIFt0ZXh0XVtjb250YWluZXIgc3RhcnRdW2Nv
bnRhaW5lciBlbmRdW2lubGluZSBib3hdICh0ZXh0PHNwYW4+PC9zcGFuPjxpbWc+KSA6IHRoZXJl
J3MgYSBzb2Z0IHdyYXAgb3Bwb3J0dW5pdHkgYmV0d2VlbiB0aGUgW3RleHRdIGFuZCBbaW1nXS4K
LSAgICAgICAgLy8gVGhlIGxpbmUgYnJlYWtpbmcgYmVoYXZpb3Igb2YgYSByZXBsYWNlZCBlbGVt
ZW50IG9yIG90aGVyIGF0b21pYyBpbmxpbmUgaXMgZXF1aXZhbGVudCB0byBhbiBpZGVvZ3JhcGhp
YyBjaGFyYWN0ZXIuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoY3VycmVu
dC5zdHlsZSgpLmxpbmVCcmVhaygpID09IExpbmVCcmVhazo6QW55d2hlcmUgfHwgbmV4dC5zdHls
ZSgpLmxpbmVCcmVhaygpID09IExpbmVCcmVhazo6QW55d2hlcmUpIHsKLSAgICAgICAgLy8gVGhl
cmUgaXMgYSBzb2Z0IHdyYXAgb3Bwb3J0dW5pdHkgYXJvdW5kIGV2ZXJ5IHR5cG9ncmFwaGljIGNo
YXJhY3RlciB1bml0LCBpbmNsdWRpbmcgYXJvdW5kIGFueSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXIK
LSAgICAgICAgLy8gb3IgcHJlc2VydmVkIHdoaXRlIHNwYWNlcywgb3IgaW4gdGhlIG1pZGRsZSBv
ZiB3b3Jkcy4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGF1dG8mIGN1cnJlbnRJ
bmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0PElubGluZVRleHRJdGVtPihjdXJyZW50KTsKLSAgICBh
dXRvJiBuZXh0SW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4obmV4dCk7
Ci0gICAgaWYgKGN1cnJlbnRJbmxpbmVUZXh0SXRlbS5pc1doaXRlc3BhY2UoKSkgewotICAgICAg
ICAvLyBbIF1bdGV4dF0gOiBhZnRlciBbd2hpdGVzcGFjZV0gcG9zaXRpb24gaXMgYSBzb2Z0IHdy
YXAgb3Bwb3J0dW5pdHkuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAobmV4
dElubGluZVRleHRJdGVtLmlzV2hpdGVzcGFjZSgpKSB7Ci0gICAgICAgIC8vIFt0ZXh0XVsgXSAo
PHNwYW4+dGV4dDwvc3Bhbj4gKQotICAgICAgICAvLyB3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2Vz
OiBsaW5lIGJyZWFraW5nIG9wcG9ydHVuaXR5IGV4aXN0cyBhZnRlciBldmVyeSBwcmVzZXJ2ZWQg
d2hpdGUgc3BhY2UgY2hhcmFjdGVyLCBidXQgbm90IGJlZm9yZS4KLSAgICAgICAgcmV0dXJuIG5l
eHRJbmxpbmVUZXh0SXRlbS5zdHlsZSgpLndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNwYWNlOjpCcmVh
a1NwYWNlczsKLSAgICB9Ci0gICAgLy8gQm90aCBjdXJyZW50IGFuZCBuZXh0IGl0ZW1zIGFyZSBu
b24td2hpdGVzcGFjZSB0ZXh0LgotICAgIC8vIFt0ZXh0XVt0ZXh0XSA6IGlzIGEgY29udGludW91
cyBjb250ZW50LgotICAgIC8vIFt0ZXh0LV1bdGV4dF0gOiBhZnRlciBbaHlwaGVuXSBwb3NpdGlv
biBpcyBhIHNvZnQgd3JhcCBvcHBvcnR1bml0eS4KLSAgICByZXR1cm4gZW5kc1dpdGhTb2Z0V3Jh
cE9wcG9ydHVuaXR5KGN1cnJlbnRJbmxpbmVUZXh0SXRlbSwgbmV4dElubGluZVRleHRJdGVtKTsK
LX0KLQotc2l6ZV90IExpbmVCcmVha2VyOjpuZXh0V3JhcE9wcG9ydHVuaXR5KGNvbnN0IElubGlu
ZUl0ZW1zJiBpbmxpbmVDb250ZW50LCB1bnNpZ25lZCBzdGFydEluZGV4KQotewotICAgIC8vIDEu
IEZpbmQgdGhlIHN0YXJ0IGNhbmRpZGF0ZSBieSBza2lwcGluZyBsZWFkaW5nIG5vbi1jb250ZW50
IGl0ZW1zIGUuZyA8c3Bhbj48c3Bhbj5zdGFydCA6IHNraXAgIjxzcGFuPjxzcGFuPiIKLSAgICAv
LyAyLiBGaW5kIHRoZSBlbmQgY2FuZGlkYXRlIGJ5IHNraXBwaW5nIG5vbi1jb250ZW50IGl0ZW1z
IGluYmV0d2VlbiBlLmcuIDxzcGFuPjxzcGFuPnN0YXJ0PC9zcGFuPmVuZDogc2tpcCAiPC9zcGFu
PiIKLSAgICAvLyAzLiBDaGVjayBpZiB0aGVyZSdzIGEgc29mdCB3cmFwIG9wcG9ydHVuaXR5IGJl
dHdlZW4gdGhlIDIgY2FuZGlkYXRlIGlubGluZSBpdGVtcyBhbmQgcmVwZWF0LgotICAgIC8vIDQu
IEFueSBmb3JjZSBsaW5lIGJyZWFrIGluYmV0d2VlbiBpcyBjb25zaWRlcmVkIGFzIGEgd3JhcCBv
cHBvcnR1bml0eS4KLQotICAgIC8vIFtleC1dW2NvbnRhaW5lciBzdGFydF1bY29udGFpbmVyIGVu
ZF1bZmxvYXRdW2FtcGxlXSAoZXgtPHNwYW4+PC9zcGFuPjxkaXYgc3R5bGU9ImZsb2F0OmxlZnQi
PjwvZGl2PmFtcGxlKSA6IHdyYXAgaW5kZXggaXMgYXQgW2V4LV0uCi0gICAgLy8gW2V4XVtjb250
YWluZXIgc3RhcnRdW2FtcC1dW2NvbnRhaW5lciBzdGFydF1bbGVdIChleDxzcGFuPmFtcC08c3Bh
bj5hbXBsZSkgOiB3cmFwIGluZGV4IGlzIGF0IFthbXAtXS4KLSAgICAvLyBbZXgtXVtjb250YWlu
ZXIgc3RhcnRdW2xpbmUgYnJlYWtdW2FtcGxlXSAoZXgtPHNwYW4+PGJyPmFtcGxlKSA6IHdyYXAg
aW5kZXggaXMgYWZ0ZXIgW2JyXS4KLSAgICBhdXRvIGVuZCA9IGlubGluZUNvbnRlbnQuc2l6ZSgp
OwotCi0gICAgc3RydWN0IFdyYXBDb250ZW50IHsKLSAgICAgICAgV3JhcENvbnRlbnQoc2l6ZV90
IGluZGV4LCBib29sIGlzQXRMaW5lQnJlYWspCi0gICAgICAgICAgICA6IG1faW5kZXgoaW5kZXgp
Ci0gICAgICAgICAgICAsIG1faXNBdExpbmVCcmVhayhpc0F0TGluZUJyZWFrKQotICAgICAgICB7
Ci0gICAgICAgIH0KLSAgICAgICAgc2l6ZV90IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXg7IH0KLSAgICAgICAgYm9vbCBpc0F0TGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV9p
c0F0TGluZUJyZWFrOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBzaXplX3QgbV9pbmRleCB7
IDAgfTsKLSAgICAgICAgYm9vbCBtX2lzQXRMaW5lQnJlYWsgeyBmYWxzZSB9OwotICAgIH07Ci0g
ICAgYXV0byBuZXh0SW5saW5lSXRlbVdpdGhDb250ZW50ID0gWyZdIChhdXRvIGluZGV4KSB7Ci0g
ICAgICAgIC8vIEJyZWFrIGF0IHRoZSBmaXJzdCB0ZXh0L2JveC9saW5lIGJyZWFrIGlubGluZSBp
dGVtLgotICAgICAgICBmb3IgKDsgaW5kZXggPCBlbmQ7ICsraW5kZXgpIHsKLSAgICAgICAgICAg
IGF1dG8mIGlubGluZUl0ZW0gPSAqaW5saW5lQ29udGVudFtpbmRleF07Ci0gICAgICAgICAgICBp
ZiAoaW5saW5lSXRlbS5pc1RleHQoKSB8fCBpbmxpbmVJdGVtLmlzQm94KCkgfHwgaW5saW5lSXRl
bS5pc0xpbmVCcmVhaygpKQotICAgICAgICAgICAgICAgIHJldHVybiBXcmFwQ29udGVudCB7IGlu
ZGV4LCBpbmxpbmVJdGVtLmlzTGluZUJyZWFrKCkgfTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gV3JhcENvbnRlbnQgeyBlbmQsIGZhbHNlIH07Ci0gICAgfTsKLQotICAgIC8vIFN0YXJ0IGF0
IHRoZSBmaXJzdCBpbmxpbmUgaXRlbSB3aXRoIGNvbnRlbnQuCi0gICAgLy8gW2NvbnRhaW5lciBz
dGFydF1bZXgtXSA6IHN0YXJ0IGF0IFtleC1dCi0gICAgYXV0byBzdGFydENvbnRlbnQgPSBuZXh0
SW5saW5lSXRlbVdpdGhDb250ZW50KHN0YXJ0SW5kZXgpOwotICAgIGlmIChzdGFydENvbnRlbnQu
aXNBdExpbmVCcmVhaygpKSB7Ci0gICAgICAgIC8vIENvbnRlbnQgc3RhcnRzIHdpdGggYSBsaW5l
IGJyZWFrLiBUaGUgd3JhcCBwb3NpdGlvbiBpcyBhZnRlciB0aGUgbGluZSBicmVhay4KLSAgICAg
ICAgcmV0dXJuICpzdGFydENvbnRlbnQgKyAxOwotICAgIH0KLQotICAgIHdoaWxlICgqc3RhcnRD
b250ZW50ICE9IGVuZCkgewotICAgICAgICAvLyAxLiBGaW5kIHRoZSBuZXh0IGlubGluZSBpdGVt
IHdpdGggY29udGVudC4KLSAgICAgICAgLy8gMi4gQ2hlY2sgaWYgdGhlcmUncyBhIHNvZnQgd3Jh
cCBvcHBvcnR1bml0eSBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgdGhlIG5leHQgaW5saW5lIGl0ZW0u
Ci0gICAgICAgIGF1dG8gbmV4dENvbnRlbnQgPSBuZXh0SW5saW5lSXRlbVdpdGhDb250ZW50KCpz
dGFydENvbnRlbnQgKyAxKTsKLSAgICAgICAgaWYgKCpuZXh0Q29udGVudCA9PSBlbmQgfHwgbmV4
dENvbnRlbnQuaXNBdExpbmVCcmVhaygpKQotICAgICAgICAgICAgcmV0dXJuICpuZXh0Q29udGVu
dDsKLSAgICAgICAgaWYgKGlzQXRTb2Z0V3JhcE9wcG9ydHVuaXR5KCppbmxpbmVDb250ZW50Wypz
dGFydENvbnRlbnRdLCAqaW5saW5lQ29udGVudFsqbmV4dENvbnRlbnRdKSkgewotICAgICAgICAg
ICAgLy8gVGhlcmUncyBhIHNvZnQgd3JhcCBvcHBvcnR1bml0eSBiZXR3ZWVuIHRoZSBzdGFydCBh
bmQgdGhlIG5leHRDb250ZW50LgotICAgICAgICAgICAgLy8gTm93IGZvcndhcmQtZmluZCBmcm9t
IHRoZSBzdGFydCBwb3NpdGlvbiB0byBzZWUgd2hlcmUgd2UgY2FuIGFjdHVhbGx5IHdyYXAuCi0g
ICAgICAgICAgICAvLyBbZXgtXVthbXBsZV0gdnMuIFtleC1dW2NvbnRhaW5lciBzdGFydF1bY29u
dGFpbmVyIGVuZF1bYW1wbGVdCi0gICAgICAgICAgICAvLyB3aGVyZSBbZXgtXSBpcyBzdGFydENv
bnRlbnQgYW5kIFthbXBsZV0gaXMgdGhlIG5leHRDb250ZW50LgotICAgICAgICAgICAgYXV0byBj
YW5kaWRhdGVJbmRleCA9ICpzdGFydENvbnRlbnQgKyAxOwotICAgICAgICAgICAgZm9yICg7IGNh
bmRpZGF0ZUluZGV4IDwgKm5leHRDb250ZW50OyArK2NhbmRpZGF0ZUluZGV4KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlubGluZUNvbnRlbnRbY2FuZGlkYXRlSW5kZXhdLT5pc0NvbnRhaW5lclN0
YXJ0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gaW5saW5lIGNvbnRlbnQgYW5kIFtjb250
YWluZXIgc3RhcnRdIGFuZCBbY29udGFpbmVyIGVuZF0gZm9ybSB1bmJyZWFrYWJsZSBjb250ZW50
LgotICAgICAgICAgICAgICAgICAgICAvLyBleC08c3Bhbj48L3NwYW4+YW1wbGUgIDogd3JhcCBv
cHBvcnR1bml0eSBpcyBhZnRlciAiZXgtIi4KLSAgICAgICAgICAgICAgICAgICAgLy8gZXgtPC9z
cGFuPjwvc3Bhbj5hbXBsZSA6IHdyYXAgb3Bwb3J0dW5pdHkgaXMgYWZ0ZXIgImV4LTwvc3Bhbj48
L3NwYW4+Ii4KLSAgICAgICAgICAgICAgICAgICAgLy8gZXgtPC9zcGFuPjxzcGFuPmFtcGxlPC9z
cGFuPiA6IHdyYXAgb3Bwb3J0dW5pdHkgaXMgYWZ0ZXIgImV4LTwvc3Bhbj4iLgotICAgICAgICAg
ICAgICAgICAgICAvLyBleC08c3Bhbj48c3Bhbj5hbXBsZTwvc3Bhbj48L3NwYW4+IDogd3JhcCBv
cHBvcnR1bml0eSBpcyBhZnRlciAiZXgtIi4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNh
bmRpZGF0ZUluZGV4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBjYW5kaWRhdGVJbmRleDsKLSAgICAgICAgfQotICAgICAgICBzdGFydENvbnRl
bnQgPSBuZXh0Q29udGVudDsKLSAgICB9Ci0gICAgcmV0dXJuIGVuZDsKLX0KLQotTGluZUJyZWFr
ZXI6OkNvbnRpbm91c0NvbnRlbnQ6OkNvbnRpbm91c0NvbnRlbnQoY29uc3QgUnVuTGlzdCYgcnVu
cykKK0NvbnRpbm91c0NvbnRlbnQ6OkNvbnRpbm91c0NvbnRlbnQoY29uc3QgTGluZUJyZWFrZXI6
OlJ1bkxpc3QmIHJ1bnMpCiAgICAgOiBtX3J1bnMocnVucykKIHsKICAgICAvLyBGaWd1cmUgb3V0
IHRoZSB0cmFpbGluZyBjb2xsYXBzaWJsZSBzdGF0ZS4KQEAgLTQ2Niw3ICszNjUsNyBAQCBMaW5l
QnJlYWtlcjo6Q29udGlub3VzQ29udGVudDo6Q29udGlub3VzQ29udGVudChjb25zdCBSdW5MaXN0
JiBydW5zKQogICAgIH0KIH0KIAotYm9vbCBMaW5lQnJlYWtlcjo6Q29udGlub3VzQ29udGVudDo6
aGFzVGV4dENvbnRlbnRPbmx5KCkgY29uc3QKK2Jvb2wgQ29udGlub3VzQ29udGVudDo6aGFzVGV4
dENvbnRlbnRPbmx5KCkgY29uc3QKIHsKICAgICAvLyA8c3Bhbj50ZXh0PC9zcGFuPiBpcyBjb25z
aWRlcmVkIGEgdGV4dCBydW4gZXZlbiB3aXRoIHRoZSBbY29udGFpbmVyIHN0YXJ0XVtjb250YWlu
ZXIgZW5kXSBpbmxpbmUgaXRlbXMuCiAgICAgLy8gRHVlIHRvIGNvbW1pdCBib3VuZGFyeSBydWxl
cywgd2UganVzdCBuZWVkIHRvIGNoZWNrIHRoZSBmaXJzdCBub24tdHlwZWxlc3MgaW5saW5lIGl0
ZW0gKGNhbid0IGhhdmUgYm90aCBbaW1nXSBhbmQgW3RleHRdKQpAQCAtNDc5LDcgKzM3OCw3IEBA
IGJvb2wgTGluZUJyZWFrZXI6OkNvbnRpbm91c0NvbnRlbnQ6Omhhc1RleHRDb250ZW50T25seSgp
IGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIExpbmVCcmVha2VyOjpDb250aW5v
dXNDb250ZW50Ojppc1Zpc3VhbGx5RW1wdHlXaGl0ZXNwYWNlQ29udGVudE9ubHkoKSBjb25zdAor
Ym9vbCBDb250aW5vdXNDb250ZW50Ojppc1Zpc3VhbGx5RW1wdHlXaGl0ZXNwYWNlQ29udGVudE9u
bHkoKSBjb25zdAogewogICAgIC8vIFs8c3Bhbj48L3NwYW4+IF0gWzxzcGFuPiA8L3NwYW4+XSBb
IDxzcGFuIHN0eWxlPSJwYWRkaW5nOiAwcHg7Ij48L3NwYW4+XSBhcmUgYWxsIGNvbnNpZGVyZWQg
dmlzdWFsbHkgZW1wdHkgd2hpdGVzcGFjZSBjb250ZW50LgogICAgIC8vIFs8c3BhbiBzdHlsZT0i
Ym9yZGVyOiAxcHggc29saWQgcmVkIj48L3NwYW4+IF0gd2hpbGUgdGhpcyBpcyB3aGl0ZXNwYWNl
IGNvbnRlbnQgb25seSwgaXQgaXMgbm90IGNvbnNpZGVyZWQgdmlzdWFsbHkgZW1wdHkuCkBAIC00
OTQsNyArMzkzLDcgQEAgYm9vbCBMaW5lQnJlYWtlcjo6Q29udGlub3VzQ29udGVudDo6aXNWaXN1
YWxseUVtcHR5V2hpdGVzcGFjZUNvbnRlbnRPbmx5KCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLU9wdGlvbmFsPHVuc2lnbmVkPiBMaW5lQnJlYWtlcjo6Q29udGlub3VzQ29udGVudDo6
Zmlyc3RUZXh0UnVuSW5kZXgoKSBjb25zdAorT3B0aW9uYWw8c2l6ZV90PiBDb250aW5vdXNDb250
ZW50OjpmaXJzdFRleHRSdW5JbmRleCgpIGNvbnN0CiB7CiAgICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IG1fcnVucy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgaWYgKG1fcnVu
c1tpbmRleF0uaW5saW5lSXRlbS5pc1RleHQoKSkKQEAgLTUwMyw3ICs0MDIsNyBAQCBPcHRpb25h
bDx1bnNpZ25lZD4gTGluZUJyZWFrZXI6OkNvbnRpbm91c0NvbnRlbnQ6OmZpcnN0VGV4dFJ1bklu
ZGV4KCkgY29uc3QKICAgICByZXR1cm4geyB9OwogfQogCi1PcHRpb25hbDx1bnNpZ25lZD4gTGlu
ZUJyZWFrZXI6OkNvbnRpbm91c0NvbnRlbnQ6Omxhc3RDb250ZW50UnVuSW5kZXgoKSBjb25zdAor
T3B0aW9uYWw8c2l6ZV90PiBDb250aW5vdXNDb250ZW50OjpsYXN0Q29udGVudFJ1bkluZGV4KCkg
Y29uc3QKIHsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IG1fcnVucy5zaXplKCk7IGluZGV4LS07
KSB7CiAgICAgICAgIGlmIChtX3J1bnNbaW5kZXhdLmlubGluZUl0ZW0uaXNUZXh0KCkgfHwgbV9y
dW5zW2luZGV4XS5pbmxpbmVJdGVtLmlzQm94KCkpCkBAIC01MTIsNyArNDExLDcgQEAgT3B0aW9u
YWw8dW5zaWduZWQ+IExpbmVCcmVha2VyOjpDb250aW5vdXNDb250ZW50OjpsYXN0Q29udGVudFJ1
bkluZGV4KCkgY29uc3QKICAgICByZXR1cm4geyB9OwogfQogCi1ib29sIExpbmVCcmVha2VyOjpD
b250aW5vdXNDb250ZW50OjpoYXNOb25Db250ZW50UnVuc09ubHkoKSBjb25zdAorYm9vbCBDb250
aW5vdXNDb250ZW50OjpoYXNOb25Db250ZW50UnVuc09ubHkoKSBjb25zdAogewogICAgIC8vIDxz
cGFuPjwvc3Bhbj4gPC0gbm9uIGNvbnRlbnQgcnVucy4KICAgICBmb3IgKGF1dG8mIHJ1biA6IG1f
cnVucykgewpAQCAtNTI0LDcgKzQyMyw3IEBAIGJvb2wgTGluZUJyZWFrZXI6OkNvbnRpbm91c0Nv
bnRlbnQ6Omhhc05vbkNvbnRlbnRSdW5zT25seSgpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLU9wdGlvbmFsPHNpemVfdD4gTGluZUJyZWFrZXI6OkNvbnRpbm91c0NvbnRlbnQ6Omxhc3RX
cmFwT3Bwb3J0dW5pdHlJbmRleCgpIGNvbnN0CitPcHRpb25hbDxzaXplX3Q+IENvbnRpbm91c0Nv
bnRlbnQ6Omxhc3RXcmFwT3Bwb3J0dW5pdHlJbmRleCgpIGNvbnN0CiB7CiAgICAgLy8gPHNwYW4g
c3R5bGU9IndoaXRlLXNwYWNlOiBwcmUiPm5vX3dyYXA8L3NwYW4+PHNwYW4+eWVzX3dyYXA8L3Nw
YW4+PHNwYW4gc3R5bGU9IndoaXRlLXNwYWNlOiBwcmUiPm5vX3dyYXA8L3NwYW4+LgogICAgIC8v
IFtjb250YWluZXIgc3RhcnRdW25vX3dyYXBdW2NvbnRhaW5lciBlbmRdW2NvbnRhaW5lciBzdGFy
dF1beWVzX3dyYXBdW2NvbnRhaW5lciBlbmRdW2NvbnRhaW5lciBzdGFydF1bbm9fd3JhcF1bY29u
dGFpbmVyIGVuZF0KQEAgLTUzNiw3ICs0MzUsNyBAQCBPcHRpb25hbDxzaXplX3Q+IExpbmVCcmVh
a2VyOjpDb250aW5vdXNDb250ZW50OjpsYXN0V3JhcE9wcG9ydHVuaXR5SW5kZXgoKSBjb25zdAog
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgTGluZUJyZWFrZXI6OkNvbnRpbm91c0NvbnRlbnQ6
OlRyYWlsaW5nQ29sbGFwc2libGVDb250ZW50OjpyZXNldCgpCit2b2lkIENvbnRpbm91c0NvbnRl
bnQ6OlRyYWlsaW5nQ29sbGFwc2libGVDb250ZW50OjpyZXNldCgpCiB7CiAgICAgaXNGdWxseUNv
bGxhcHNpYmxlID0gZmFsc2U7CiAgICAgd2lkdGggPSAwX2x1OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmgK
aW5kZXggMjZhZjM2M2FhZDZmNmI1MDgwNjI3ODFiNDBkMmUyMWJkNWI4MTU5My4uZjcxNDk1MGMw
ODcxN2RkN2IyYzdlYmY0MDJkMDk1ZjlkNTg1MjAzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oCkBA
IC0zNCw2ICszNCw4IEBAIG5hbWVzcGFjZSBMYXlvdXQgewogCiBjbGFzcyBJbmxpbmVJdGVtOwog
Y2xhc3MgSW5saW5lVGV4dEl0ZW07CitzdHJ1Y3QgQ29udGlub3VzQ29udGVudDsKK3N0cnVjdCBX
cmFwcGVkVGV4dENvbnRlbnQ7CiAKIGNsYXNzIExpbmVCcmVha2VyIHsKIHB1YmxpYzoKQEAgLTQ5
LDEwICs1MSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBTcGxpdCwgLy8gUGFydGlhbCBjb250
ZW50IGlzIG9uIHRoZSBjdXJyZW50IGxpbmUuCiAgICAgICAgICAgICBQdXNoIC8vIENvbnRlbnQg
aXMgcHVzaGVkIHRvIHRoZSBuZXh0IGxpbmUuCiAgICAgICAgIH07Ci0gICAgICAgIEFjdGlvbiBh
Y3Rpb247CisgICAgICAgIEFjdGlvbiBhY3Rpb24geyBBY3Rpb246OktlZXAgfTsKICAgICAgICAg
SXNFbmRPZkxpbmUgaXNFbmRPZkxpbmUgeyBJc0VuZE9mTGluZTo6Tm8gfTsKICAgICAgICAgc3Ry
dWN0IFBhcnRpYWxUcmFpbGluZ0NvbnRlbnQgewotICAgICAgICAgICAgdW5zaWduZWQgdHJhaWxp
bmdSdW5JbmRleCB7IDAgfTsKKyAgICAgICAgICAgIHNpemVfdCB0cmFpbGluZ1J1bkluZGV4IHsg
MCB9OwogICAgICAgICAgICAgT3B0aW9uYWw8UGFydGlhbFJ1bj4gcGFydGlhbFJ1bjsgLy8gbnVs
bG9wdCBwYXJ0aWFsIHJ1biBtZWFucyB0aGUgdHJhaWxpbmcgcnVuIGlzIGEgY29tcGxldGUgcnVu
LgogICAgICAgICB9OwogICAgICAgICBPcHRpb25hbDxQYXJ0aWFsVHJhaWxpbmdDb250ZW50PiBw
YXJ0aWFsVHJhaWxpbmdDb250ZW50OwpAQCAtNjcsNyArNjksNiBAQCBwdWJsaWM6CiAgICAgICAg
IElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoIHsgMCB9OwogICAgIH07CiAgICAgdXNpbmcg
UnVuTGlzdCA9IFZlY3RvcjxSdW4sIDMwPjsKLSAgICBzdGF0aWMgc2l6ZV90IG5leHRXcmFwT3Bw
b3J0dW5pdHkoY29uc3QgSW5saW5lSXRlbXMmLCB1bnNpZ25lZCBzdGFydEluZGV4KTsKIAogICAg
IHN0cnVjdCBMaW5lU3RhdHVzIHsKICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVX
aWR0aCB7IDAgfTsKQEAgLTkwLDQyICs5MSw2IEBAIHByaXZhdGU6CiAgICAgLy8gW2NvbnRlbnRd
CiAgICAgLy8gW2NvbnRhaW5lciBzdGFydF1bc3BhbjFdW2NvbnRhaW5lciBlbmRdW2JldHdlZW5d
W2NvbnRhaW5lciBzdGFydF1bc3BhbjJdW2NvbnRhaW5lciBlbmRdCiAgICAgLy8gc2VlIGh0dHBz
Oi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdGV4dC0zLyNsaW5lLWJyZWFrLWRldGFpbHMKLSAgICBz
dHJ1Y3QgQ29udGlub3VzQ29udGVudCB7Ci0gICAgICAgIENvbnRpbm91c0NvbnRlbnQoY29uc3Qg
UnVuTGlzdCYpOwotCi0gICAgICAgIGNvbnN0IFJ1bkxpc3QmIHJ1bnMoKSBjb25zdCB7IHJldHVy
biBtX3J1bnM7IH0KLSAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9ydW5z
LmlzRW1wdHkoKTsgfQotICAgICAgICBib29sIGhhc1RleHRDb250ZW50T25seSgpIGNvbnN0Owot
ICAgICAgICBib29sIGlzVmlzdWFsbHlFbXB0eVdoaXRlc3BhY2VDb250ZW50T25seSgpIGNvbnN0
OwotICAgICAgICBib29sIGhhc05vbkNvbnRlbnRSdW5zT25seSgpIGNvbnN0OwotICAgICAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVucy5zaXplKCk7IH0KLSAgICAgICAgSW5s
aW5lTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAgICAgICAg
SW5saW5lTGF5b3V0VW5pdCBub25Db2xsYXBzaWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93
aWR0aCAtIG1fdHJhaWxpbmdDb2xsYXBzaWJsZUNvbnRlbnQud2lkdGg7IH0KLQotICAgICAgICBi
b29sIGhhc1RyYWlsaW5nQ29sbGFwc2libGVDb250ZW50KCkgY29uc3QgeyByZXR1cm4gISFtX3Ry
YWlsaW5nQ29sbGFwc2libGVDb250ZW50LndpZHRoOyB9Ci0gICAgICAgIGJvb2wgaXNUcmFpbGlu
Z0NvbnRlbnRGdWxseUNvbGxhcHNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ0NvbGxh
cHNpYmxlQ29udGVudC5pc0Z1bGx5Q29sbGFwc2libGU7IH0KLSAgICAgICAgT3B0aW9uYWw8c2l6
ZV90PiBsYXN0V3JhcE9wcG9ydHVuaXR5SW5kZXgoKSBjb25zdDsKLQotICAgICAgICBPcHRpb25h
bDx1bnNpZ25lZD4gZmlyc3RUZXh0UnVuSW5kZXgoKSBjb25zdDsKLSAgICAgICAgT3B0aW9uYWw8
dW5zaWduZWQ+IGxhc3RDb250ZW50UnVuSW5kZXgoKSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0g
ICAgICAgIFJ1bkxpc3QgbV9ydW5zOwotICAgICAgICBzdHJ1Y3QgVHJhaWxpbmdDb2xsYXBzaWJs
ZUNvbnRlbnQgewotICAgICAgICAgICAgdm9pZCByZXNldCgpOwotCi0gICAgICAgICAgICBib29s
IGlzRnVsbHlDb2xsYXBzaWJsZSB7IGZhbHNlIH07Ci0gICAgICAgICAgICBJbmxpbmVMYXlvdXRV
bml0IHdpZHRoIHsgMCB9OwotICAgICAgICB9OwotICAgICAgICBUcmFpbGluZ0NvbGxhcHNpYmxl
Q29udGVudCBtX3RyYWlsaW5nQ29sbGFwc2libGVDb250ZW50OwotICAgICAgICBJbmxpbmVMYXlv
dXRVbml0IG1fd2lkdGggeyAwIH07Ci0gICAgfTsKLQotICAgIHN0cnVjdCBXcmFwcGVkVGV4dENv
bnRlbnQgewotICAgICAgICB1bnNpZ25lZCB0cmFpbGluZ1J1bkluZGV4IHsgMCB9OwotICAgICAg
ICBib29sIGNvbnRlbnRPdmVyZmxvd3MgeyBmYWxzZSB9OwotICAgICAgICBPcHRpb25hbDxQYXJ0
aWFsUnVuPiBwYXJ0aWFsVHJhaWxpbmdSdW47Ci0gICAgfTsKICAgICBPcHRpb25hbDxXcmFwcGVk
VGV4dENvbnRlbnQ+IHdyYXBUZXh0Q29udGVudChjb25zdCBSdW5MaXN0JiwgY29uc3QgTGluZVN0
YXR1cyYpIGNvbnN0OwogICAgIFJlc3VsdCB0cnlXcmFwcGluZ0lubGluZUNvbnRlbnQoY29uc3Qg
Q29udGlub3VzQ29udGVudCYsIGNvbnN0IExpbmVTdGF0dXMmKSBjb25zdDsKICAgICBPcHRpb25h
bDxQYXJ0aWFsUnVuPiB0cnlCcmVha2luZ1RleHRSdW4oY29uc3QgUnVuJiBvdmVyZmxvd1J1biwg
SW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4
dC5jcHAKaW5kZXggZmJmMDIzNDVjMDNlNDAyZTAzMjlkYzFlMGRjMzUxZWQ1ZDIzZWFhNC4uZmRl
NDljMzNiNzczM2VhMjA0MmVhZWJkNGYyYTk3MGUwYzVhY2NjZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250
ZXh0LmNwcApAQCAtMzQsNiArMzQsMTQ0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3Bh
Y2UgTGF5b3V0IHsKIAorc3RhdGljIGJvb2wgZW5kc1dpdGhTb2Z0V3JhcE9wcG9ydHVuaXR5KGNv
bnN0IElubGluZVRleHRJdGVtJiBjdXJyZW50VGV4dEl0ZW0sIGNvbnN0IElubGluZVRleHRJdGVt
JiBuZXh0SW5saW5lVGV4dEl0ZW0pCit7CisgICAgQVNTRVJUKCFuZXh0SW5saW5lVGV4dEl0ZW0u
aXNXaGl0ZXNwYWNlKCkpOworICAgIC8vIFdlIGFyZSBhdCB0aGUgcG9zaXRpb24gYWZ0ZXIgYSB3
aGl0ZXNwYWNlLgorICAgIGlmIChjdXJyZW50VGV4dEl0ZW0uaXNXaGl0ZXNwYWNlKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIC8vIFdoZW4gYm90aCB0aGVzZSBub24td2hpdGVzcGFjZSBy
dW5zIGJlbG9uZyB0byB0aGUgc2FtZSBsYXlvdXQgYm94LCBpdCdzIGd1YXJhbnRlZWQgdGhhdAor
ICAgIC8vIHRoZXkgYXJlIHNwbGl0IGF0IGEgc29mdCBicmVha2luZyBvcHBvcnR1bml0eS4gU2Vl
IElubGluZVRleHRJdGVtOjptb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24uCisgICAgaWYgKCZj
dXJyZW50VGV4dEl0ZW0ubGF5b3V0Qm94KCkgPT0gJm5leHRJbmxpbmVUZXh0SXRlbS5sYXlvdXRC
b3goKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gTm93IHdlIG5lZWQgdG8gY29sbGVj
dCBhdCBsZWFzdCAzIGFkamFjZW50IGNoYXJhY3RlcnMgdG8gYmUgYWJsZSB0byBtYWtlIGEgZGVz
Y2lzaW9uIHdoZXRoZXIgdGhlIHByZXZpb3VzIHRleHQgaXRlbSBlbmRzIHdpdGggYnJlYWtpbmcg
b3Bwb3J0dW5pdHkuCisgICAgLy8gW2V4LV1bYW1wbGVdIDwtIHNlY29uZCB0byBsYXN0W3hdIGxh
c3RbLV0gY3VycmVudFthXQorICAgIC8vIFdlIG5lZWQgYXQgbGVhc3QgMSBjaGFyYWN0ZXIgaW4g
dGhlIGN1cnJlbnQgaW5saW5lIHRleHQgaXRlbSBhbmQgMiBtb3JlIGZyb20gcHJldmlvdXMgaW5s
aW5lIGl0ZW1zLgorICAgIGF1dG8gcHJldmlvdXNDb250ZW50ID0gY3VycmVudFRleHRJdGVtLmxh
eW91dEJveCgpLnRleHRDb250ZXh0KCktPmNvbnRlbnQ7CisgICAgYXV0byBsaW5lQnJlYWtJdGVy
YXRvciA9IExhenlMaW5lQnJlYWtJdGVyYXRvciB7IG5leHRJbmxpbmVUZXh0SXRlbS5sYXlvdXRC
b3goKS50ZXh0Q29udGV4dCgpLT5jb250ZW50IH07CisgICAgYXV0byBwcmV2aW91c0NvbnRlbnRM
ZW5ndGggPSBwcmV2aW91c0NvbnRlbnQubGVuZ3RoKCk7CisgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBsb29rIGludG8gdGhlIGVudGlyZSB1bmNvbW1pdHRlZCBjb250ZW50IGZvciBtb3JlIHRleHQg
Y29udGV4dC4KKyAgICBVQ2hhciBsYXN0Q2hhcmFjdGVyID0gcHJldmlvdXNDb250ZW50TGVuZ3Ro
ID8gcHJldmlvdXNDb250ZW50W3ByZXZpb3VzQ29udGVudExlbmd0aCAtIDFdIDogMDsKKyAgICBV
Q2hhciBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIgPSBwcmV2aW91c0NvbnRlbnRMZW5ndGggPiAxID8g
cHJldmlvdXNDb250ZW50W3ByZXZpb3VzQ29udGVudExlbmd0aCAtIDJdIDogMDsKKyAgICBsaW5l
QnJlYWtJdGVyYXRvci5zZXRQcmlvckNvbnRleHQobGFzdENoYXJhY3Rlciwgc2Vjb25kVG9MYXN0
Q2hhcmFjdGVyKTsKKyAgICAvLyBOb3cgY2hlY2sgaWYgd2UgY2FuIGJyZWFrIHJpZ2h0IGF0IHRo
ZSBpbmxpbmUgaXRlbSBib3VuZGFyeS4KKyAgICAvLyBXaXRoIHRoZSBbZXgtYW1wbGVdLCBmaW5k
TmV4dEJyZWFrYWJsZVBvc2l0aW9uIHNob3VsZCByZXR1cm4gdGhlIHN0YXJ0UG9zaXRpb24gKDAp
LgorICAgIC8vIEZJWE1FOiBDaGVjayBpZiB0aGVyZSdzIGEgbW9yZSBjb3JyZWN0IHdheSBvZiBm
aW5kaW5nIGJyZWFraW5nIG9wcG9ydHVuaXRpZXMuCisgICAgcmV0dXJuICFUZXh0VXRpbDo6Zmlu
ZE5leHRCcmVha2FibGVQb3NpdGlvbihsaW5lQnJlYWtJdGVyYXRvciwgMCwgbmV4dElubGluZVRl
eHRJdGVtLnN0eWxlKCkpOworfQorCitzdGF0aWMgYm9vbCBpc0F0U29mdFdyYXBPcHBvcnR1bml0
eShjb25zdCBJbmxpbmVJdGVtJiBjdXJyZW50LCBjb25zdCBJbmxpbmVJdGVtJiBuZXh0KQorewor
ICAgIC8vICJpcyBhdCIgc2ltcGxlIG1lYW5zIHRoYXQgdGhlcmUncyBhIHNvZnQgd3JhcCBvcHBv
cnR1bml0eSByaWdodCBhZnRlciB0aGUgW2N1cnJlbnRdLgorICAgIC8vIFt0ZXh0XVsgXVt0ZXh0
XVtjb250YWluZXIgc3RhcnRdLi4uICg8ZGl2PnRleHQgY29udGVudDxzcGFuPi4uPC9kaXY+KQor
ICAgIC8vIHNvZnQgd3JhcCBpbmRleGVzOiAwIGFuZCAxIGRlZmluaXRlbHksIDIgZGVwZW5kcyBv
biB0aGUgY29udGVudCBhZnRlciB0aGUgW2NvbnRhaW5lciBzdGFydF0uCisKKyAgICAvLyBodHRw
czovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRleHQtMy8jbGluZS1icmVhay1kZXRhaWxzCisgICAg
Ly8gRmlndXJlIG91dCBpZiB0aGUgbmV3IGluY29taW5nIGNvbnRlbnQgcHV0cyB0aGUgdW5jb21t
aXR0ZWQgY29udGVudCBvbiBhIHNvZnQgd3JhcCBvcHBvcnR1bml0eS4KKyAgICAvLyBlLmcuIFtj
b250YWluZXIgc3RhcnRdW3ByaW9yX2NvbnRpbnVvdXNfY29udGVudF1bY29udGFpbmVyIGVuZF0g
KDxzcGFuPnByaW9yX2NvbnRpbnVvdXNfY29udGVudDwvc3Bhbj4pCisgICAgLy8gQW4gaW5jb21p
bmcgPGltZz4gYm94IHdvdWxkIGVuYWJsZSB1cyB0byBjb21taXQgdGhlICI8c3Bhbj5wcmlvcl9j
b250aW51b3VzX2NvbnRlbnQ8L3NwYW4+IiBjb250ZW50CisgICAgLy8gYnV0IGFuIGluY29taW5n
IHRleHQgY29udGVudCB3b3VsZCBub3QgbmVjZXNzYXJpbHkuCisgICAgQVNTRVJUKGN1cnJlbnQu
aXNUZXh0KCkgfHwgY3VycmVudC5pc0JveCgpKTsKKyAgICBBU1NFUlQobmV4dC5pc1RleHQoKSB8
fCBuZXh0LmlzQm94KCkpOworICAgIGlmIChjdXJyZW50LmlzQm94KCkgfHwgbmV4dC5pc0JveCgp
KSB7CisgICAgICAgIC8vIFt0ZXh0XVtjb250YWluZXIgc3RhcnRdW2NvbnRhaW5lciBlbmRdW2lu
bGluZSBib3hdICh0ZXh0PHNwYW4+PC9zcGFuPjxpbWc+KSA6IHRoZXJlJ3MgYSBzb2Z0IHdyYXAg
b3Bwb3J0dW5pdHkgYmV0d2VlbiB0aGUgW3RleHRdIGFuZCBbaW1nXS4KKyAgICAgICAgLy8gVGhl
IGxpbmUgYnJlYWtpbmcgYmVoYXZpb3Igb2YgYSByZXBsYWNlZCBlbGVtZW50IG9yIG90aGVyIGF0
b21pYyBpbmxpbmUgaXMgZXF1aXZhbGVudCB0byBhbiBpZGVvZ3JhcGhpYyBjaGFyYWN0ZXIuCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoY3VycmVudC5zdHlsZSgpLmxpbmVC
cmVhaygpID09IExpbmVCcmVhazo6QW55d2hlcmUgfHwgbmV4dC5zdHlsZSgpLmxpbmVCcmVhaygp
ID09IExpbmVCcmVhazo6QW55d2hlcmUpIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgYSBzb2Z0IHdy
YXAgb3Bwb3J0dW5pdHkgYXJvdW5kIGV2ZXJ5IHR5cG9ncmFwaGljIGNoYXJhY3RlciB1bml0LCBp
bmNsdWRpbmcgYXJvdW5kIGFueSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXIKKyAgICAgICAgLy8gb3Ig
cHJlc2VydmVkIHdoaXRlIHNwYWNlcywgb3IgaW4gdGhlIG1pZGRsZSBvZiB3b3Jkcy4KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGF1dG8mIGN1cnJlbnRJbmxpbmVUZXh0SXRlbSA9
IGRvd25jYXN0PElubGluZVRleHRJdGVtPihjdXJyZW50KTsKKyAgICBhdXRvJiBuZXh0SW5saW5l
VGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4obmV4dCk7CisgICAgaWYgKGN1cnJl
bnRJbmxpbmVUZXh0SXRlbS5pc1doaXRlc3BhY2UoKSkgeworICAgICAgICAvLyBbIF1bdGV4dF0g
OiBhZnRlciBbd2hpdGVzcGFjZV0gcG9zaXRpb24gaXMgYSBzb2Z0IHdyYXAgb3Bwb3J0dW5pdHku
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAobmV4dElubGluZVRleHRJdGVt
LmlzV2hpdGVzcGFjZSgpKSB7CisgICAgICAgIC8vIFt0ZXh0XVsgXSAoPHNwYW4+dGV4dDwvc3Bh
bj4gKQorICAgICAgICAvLyB3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzOiBsaW5lIGJyZWFraW5n
IG9wcG9ydHVuaXR5IGV4aXN0cyBhZnRlciBldmVyeSBwcmVzZXJ2ZWQgd2hpdGUgc3BhY2UgY2hh
cmFjdGVyLCBidXQgbm90IGJlZm9yZS4KKyAgICAgICAgcmV0dXJuIG5leHRJbmxpbmVUZXh0SXRl
bS5zdHlsZSgpLndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNwYWNlOjpCcmVha1NwYWNlczsKKyAgICB9
CisgICAgLy8gQm90aCBjdXJyZW50IGFuZCBuZXh0IGl0ZW1zIGFyZSBub24td2hpdGVzcGFjZSB0
ZXh0LgorICAgIC8vIFt0ZXh0XVt0ZXh0XSA6IGlzIGEgY29udGludW91cyBjb250ZW50LgorICAg
IC8vIFt0ZXh0LV1bdGV4dF0gOiBhZnRlciBbaHlwaGVuXSBwb3NpdGlvbiBpcyBhIHNvZnQgd3Jh
cCBvcHBvcnR1bml0eS4KKyAgICByZXR1cm4gZW5kc1dpdGhTb2Z0V3JhcE9wcG9ydHVuaXR5KGN1
cnJlbnRJbmxpbmVUZXh0SXRlbSwgbmV4dElubGluZVRleHRJdGVtKTsKK30KKworc3RhdGljIHNp
emVfdCBuZXh0V3JhcE9wcG9ydHVuaXR5KGNvbnN0IElubGluZUl0ZW1zJiBpbmxpbmVDb250ZW50
LCB1bnNpZ25lZCBzdGFydEluZGV4KQoreworICAgIC8vIDEuIEZpbmQgdGhlIHN0YXJ0IGNhbmRp
ZGF0ZSBieSBza2lwcGluZyBsZWFkaW5nIG5vbi1jb250ZW50IGl0ZW1zIGUuZyA8c3Bhbj48c3Bh
bj5zdGFydCA6IHNraXAgIjxzcGFuPjxzcGFuPiIKKyAgICAvLyAyLiBGaW5kIHRoZSBlbmQgY2Fu
ZGlkYXRlIGJ5IHNraXBwaW5nIG5vbi1jb250ZW50IGl0ZW1zIGluYmV0d2VlbiBlLmcuIDxzcGFu
PjxzcGFuPnN0YXJ0PC9zcGFuPmVuZDogc2tpcCAiPC9zcGFuPiIKKyAgICAvLyAzLiBDaGVjayBp
ZiB0aGVyZSdzIGEgc29mdCB3cmFwIG9wcG9ydHVuaXR5IGJldHdlZW4gdGhlIDIgY2FuZGlkYXRl
IGlubGluZSBpdGVtcyBhbmQgcmVwZWF0LgorICAgIC8vIDQuIEFueSBmb3JjZSBsaW5lIGJyZWFr
IGluYmV0d2VlbiBpcyBjb25zaWRlcmVkIGFzIGEgd3JhcCBvcHBvcnR1bml0eS4KKworICAgIC8v
IFtleC1dW2NvbnRhaW5lciBzdGFydF1bY29udGFpbmVyIGVuZF1bZmxvYXRdW2FtcGxlXSAoZXgt
PHNwYW4+PC9zcGFuPjxkaXYgc3R5bGU9ImZsb2F0OmxlZnQiPjwvZGl2PmFtcGxlKSA6IHdyYXAg
aW5kZXggaXMgYXQgW2V4LV0uCisgICAgLy8gW2V4XVtjb250YWluZXIgc3RhcnRdW2FtcC1dW2Nv
bnRhaW5lciBzdGFydF1bbGVdIChleDxzcGFuPmFtcC08c3Bhbj5hbXBsZSkgOiB3cmFwIGluZGV4
IGlzIGF0IFthbXAtXS4KKyAgICAvLyBbZXgtXVtjb250YWluZXIgc3RhcnRdW2xpbmUgYnJlYWtd
W2FtcGxlXSAoZXgtPHNwYW4+PGJyPmFtcGxlKSA6IHdyYXAgaW5kZXggaXMgYWZ0ZXIgW2JyXS4K
KyAgICBhdXRvIGVuZCA9IGlubGluZUNvbnRlbnQuc2l6ZSgpOworCisgICAgc3RydWN0IFdyYXBD
b250ZW50IHsKKyAgICAgICAgV3JhcENvbnRlbnQoc2l6ZV90IGluZGV4LCBib29sIGlzQXRMaW5l
QnJlYWspCisgICAgICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICAsIG1faXNB
dExpbmVCcmVhayhpc0F0TGluZUJyZWFrKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
c2l6ZV90IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAgICAgYm9v
bCBpc0F0TGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV9pc0F0TGluZUJyZWFrOyB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBzaXplX3QgbV9pbmRleCB7IDAgfTsKKyAgICAgICAgYm9vbCBt
X2lzQXRMaW5lQnJlYWsgeyBmYWxzZSB9OworICAgIH07CisgICAgYXV0byBuZXh0SW5saW5lSXRl
bVdpdGhDb250ZW50ID0gWyZdIChhdXRvIGluZGV4KSB7CisgICAgICAgIC8vIEJyZWFrIGF0IHRo
ZSBmaXJzdCB0ZXh0L2JveC9saW5lIGJyZWFrIGlubGluZSBpdGVtLgorICAgICAgICBmb3IgKDsg
aW5kZXggPCBlbmQ7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGF1dG8mIGlubGluZUl0ZW0gPSAq
aW5saW5lQ29udGVudFtpbmRleF07CisgICAgICAgICAgICBpZiAoaW5saW5lSXRlbS5pc1RleHQo
KSB8fCBpbmxpbmVJdGVtLmlzQm94KCkgfHwgaW5saW5lSXRlbS5pc0xpbmVCcmVhaygpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBXcmFwQ29udGVudCB7IGluZGV4LCBpbmxpbmVJdGVtLmlzTGlu
ZUJyZWFrKCkgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gV3JhcENvbnRlbnQgeyBlbmQs
IGZhbHNlIH07CisgICAgfTsKKworICAgIC8vIFN0YXJ0IGF0IHRoZSBmaXJzdCBpbmxpbmUgaXRl
bSB3aXRoIGNvbnRlbnQuCisgICAgLy8gW2NvbnRhaW5lciBzdGFydF1bZXgtXSA6IHN0YXJ0IGF0
IFtleC1dCisgICAgYXV0byBzdGFydENvbnRlbnQgPSBuZXh0SW5saW5lSXRlbVdpdGhDb250ZW50
KHN0YXJ0SW5kZXgpOworICAgIGlmIChzdGFydENvbnRlbnQuaXNBdExpbmVCcmVhaygpKSB7Cisg
ICAgICAgIC8vIENvbnRlbnQgc3RhcnRzIHdpdGggYSBsaW5lIGJyZWFrLiBUaGUgd3JhcCBwb3Np
dGlvbiBpcyBhZnRlciB0aGUgbGluZSBicmVhay4KKyAgICAgICAgcmV0dXJuICpzdGFydENvbnRl
bnQgKyAxOworICAgIH0KKworICAgIHdoaWxlICgqc3RhcnRDb250ZW50ICE9IGVuZCkgeworICAg
ICAgICAvLyAxLiBGaW5kIHRoZSBuZXh0IGlubGluZSBpdGVtIHdpdGggY29udGVudC4KKyAgICAg
ICAgLy8gMi4gQ2hlY2sgaWYgdGhlcmUncyBhIHNvZnQgd3JhcCBvcHBvcnR1bml0eSBiZXR3ZWVu
IHRoZSBzdGFydCBhbmQgdGhlIG5leHQgaW5saW5lIGl0ZW0uCisgICAgICAgIGF1dG8gbmV4dENv
bnRlbnQgPSBuZXh0SW5saW5lSXRlbVdpdGhDb250ZW50KCpzdGFydENvbnRlbnQgKyAxKTsKKyAg
ICAgICAgaWYgKCpuZXh0Q29udGVudCA9PSBlbmQgfHwgbmV4dENvbnRlbnQuaXNBdExpbmVCcmVh
aygpKQorICAgICAgICAgICAgcmV0dXJuICpuZXh0Q29udGVudDsKKyAgICAgICAgaWYgKGlzQXRT
b2Z0V3JhcE9wcG9ydHVuaXR5KCppbmxpbmVDb250ZW50WypzdGFydENvbnRlbnRdLCAqaW5saW5l
Q29udGVudFsqbmV4dENvbnRlbnRdKSkgeworICAgICAgICAgICAgLy8gVGhlcmUncyBhIHNvZnQg
d3JhcCBvcHBvcnR1bml0eSBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgdGhlIG5leHRDb250ZW50Lgor
ICAgICAgICAgICAgLy8gTm93IGZvcndhcmQtZmluZCBmcm9tIHRoZSBzdGFydCBwb3NpdGlvbiB0
byBzZWUgd2hlcmUgd2UgY2FuIGFjdHVhbGx5IHdyYXAuCisgICAgICAgICAgICAvLyBbZXgtXVth
bXBsZV0gdnMuIFtleC1dW2NvbnRhaW5lciBzdGFydF1bY29udGFpbmVyIGVuZF1bYW1wbGVdCisg
ICAgICAgICAgICAvLyB3aGVyZSBbZXgtXSBpcyBzdGFydENvbnRlbnQgYW5kIFthbXBsZV0gaXMg
dGhlIG5leHRDb250ZW50LgorICAgICAgICAgICAgYXV0byBjYW5kaWRhdGVJbmRleCA9ICpzdGFy
dENvbnRlbnQgKyAxOworICAgICAgICAgICAgZm9yICg7IGNhbmRpZGF0ZUluZGV4IDwgKm5leHRD
b250ZW50OyArK2NhbmRpZGF0ZUluZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKGlubGluZUNv
bnRlbnRbY2FuZGlkYXRlSW5kZXhdLT5pc0NvbnRhaW5lclN0YXJ0KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gaW5saW5lIGNvbnRlbnQgYW5kIFtjb250YWluZXIgc3RhcnRdIGFuZCBbY29u
dGFpbmVyIGVuZF0gZm9ybSB1bmJyZWFrYWJsZSBjb250ZW50LgorICAgICAgICAgICAgICAgICAg
ICAvLyBleC08c3Bhbj48L3NwYW4+YW1wbGUgIDogd3JhcCBvcHBvcnR1bml0eSBpcyBhZnRlciAi
ZXgtIi4KKyAgICAgICAgICAgICAgICAgICAgLy8gZXgtPC9zcGFuPjwvc3Bhbj5hbXBsZSA6IHdy
YXAgb3Bwb3J0dW5pdHkgaXMgYWZ0ZXIgImV4LTwvc3Bhbj48L3NwYW4+Ii4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gZXgtPC9zcGFuPjxzcGFuPmFtcGxlPC9zcGFuPiA6IHdyYXAgb3Bwb3J0dW5p
dHkgaXMgYWZ0ZXIgImV4LTwvc3Bhbj4iLgorICAgICAgICAgICAgICAgICAgICAvLyBleC08c3Bh
bj48c3Bhbj5hbXBsZTwvc3Bhbj48L3NwYW4+IDogd3JhcCBvcHBvcnR1bml0eSBpcyBhZnRlciAi
ZXgtIi4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZUluZGV4OworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGVJ
bmRleDsKKyAgICAgICAgfQorICAgICAgICBzdGFydENvbnRlbnQgPSBuZXh0Q29udGVudDsKKyAg
ICB9CisgICAgcmV0dXJuIGVuZDsKK30KKwogc3RydWN0IExpbmVDYW5kaWRhdGVDb250ZW50IHsK
ICAgICB2b2lkIGFwcGVuZChjb25zdCBJbmxpbmVJdGVtJiwgT3B0aW9uYWw8SW5saW5lTGF5b3V0
VW5pdD4gbG9naWNhbFdpZHRoKTsKIApAQCAtMTkwLDcgKzMyOCw3IEBAIExpbmVDYW5kaWRhdGVD
b250ZW50IExpbmVMYXlvdXRDb250ZXh0OjpuZXh0Q29udGVudEZvckxpbmUodW5zaWduZWQgaW5s
aW5lSXRlbUluCiAgICAgLy8gMS4gU2ltcGx5IGFkZCBhbnkgb3ZlcmZsb3cgY29udGVudCBmcm9t
IHRoZSBwcmV2aW91cyBsaW5lIHRvIHRoZSBjYW5kaWRhdGUgY29udGVudC4gSXQncyBhbHdheXMg
YSB0ZXh0IGNvbnRlbnQuCiAgICAgLy8gMi4gRmluZCB0aGUgbmV4dCBzb2Z0IHdyYXAgcG9zaXRp
b24gb3IgZXhwbGljaXQgbGluZSBicmVhay4KICAgICAvLyAzLiBDb2xsZWN0IGZsb2F0cyBiZXR3
ZWVuIHRoZSBpbmxpbmUgY29udGVudC4KLSAgICBhdXRvIHNvZnRXcmFwT3Bwb3J0dW5pdHlJbmRl
eCA9IExpbmVCcmVha2VyOjpuZXh0V3JhcE9wcG9ydHVuaXR5KG1faW5saW5lSXRlbXMsIGlubGlu
ZUl0ZW1JbmRleCk7CisgICAgYXV0byBzb2Z0V3JhcE9wcG9ydHVuaXR5SW5kZXggPSBuZXh0V3Jh
cE9wcG9ydHVuaXR5KG1faW5saW5lSXRlbXMsIGlubGluZUl0ZW1JbmRleCk7CiAgICAgLy8gc29m
dFdyYXBPcHBvcnR1bml0eUluZGV4ID09IG1faW5saW5lSXRlbXMuc2l6ZSgpIG1lYW5zIHdlIGRv
bid0IGhhdmUgYW55IHdyYXAgb3Bwb3J0dW5pdHkgaW4gdGhpcyBjb250ZW50LgogICAgIEFTU0VS
VChzb2Z0V3JhcE9wcG9ydHVuaXR5SW5kZXggPD0gbV9pbmxpbmVJdGVtcy5zaXplKCkpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>