<?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>115117</bug_id>
          
          <creation_ts>2013-04-24 10:26:25 -0700</creation_ts>
          <short_desc>[CSS Exclusions] ExclusionShape bounding box methods should return LayoutRects</short_desc>
          <delta_ts>2013-04-26 17:34:42 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Muller">giles_joplin</reporter>
          <assigned_to name="Hans Muller">giles_joplin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>880693</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-04-24 10:26:25 -0700</bug_when>
    <thetext>During the review of https://codereview.chromium.org/14289003/ it was pointed out that since the ExclusionShape classes are supposed to return values aligned with the LayoutUnit grid, the shapeMarginLogicalBoundingBox() and shapeMarginLogicalBoundingBox() methods should return LayoutRects, not FloatRects.

Also per the review: we should use flooredLayoutPoint() to snap polygon vertices to the LayoutUnit grid in snapVerticesToLayoutUnitGrid().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>880694</commentid>
    <comment_count>1</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-04-24 10:30:00 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; During the review of https://codereview.chromium.org/14289003/ it was pointed out that since the ExclusionShape classes are supposed to return values aligned with the LayoutUnit grid, the shapeMarginLogicalBoundingBox() and shapeMarginLogicalBoundingBox() methods should return LayoutRects, not FloatRects.

Note also: by just assigning the margin and padding min,max values to a LayoutRect, we should be able to eliminate the need for the internal snapVerticesToLayoutUnitGrid() method altogether.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>881500</commentid>
    <comment_count>2</comment_count>
      <attachid>199738</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-04-25 12:34:11 -0700</bug_when>
    <thetext>Created attachment 199738
Patch

Redefined the ExclusionShape API in terms of LayoutUnits, instead of floats: all of the ExclusionShape methods now have LayoutUnit parameters and return LayoutUnit values. This is more natural, since the callers work exclusively in LayoutUnits. All of the internal ExclusionShape computations are still done with floats.

I was not able to remove the (now streamlined) snapVerticesToLayoutUnitGrid() method, which is applied to the FloatPoint vertices computed for the internal margin and padding FloatPolygons.  Using LayoutUnit vertices for polygons would obviate the snapping step, but I think trying to replace all use of floating point in FloatPolygon, or LayoutPolygon if you like, would at least be rather destabilizing. The computed polygons need to be snapped to the LayoutUnit grid so that requests to layout lines aligned with their bounding boxes top/bottom succeed. That is: so that the vertical extent of the bounding box matches the FloatPolygon&apos;s vertical extent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882034</commentid>
    <comment_count>3</comment_count>
      <attachid>199738</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-04-26 14:34:08 -0700</bug_when>
    <thetext>Comment on attachment 199738
Patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882098</commentid>
    <comment_count>4</comment_count>
      <attachid>199738</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-26 17:34:41 -0700</bug_when>
    <thetext>Comment on attachment 199738
Patch

Clearing flags on attachment: 199738

Committed r149226: &lt;http://trac.webkit.org/changeset/149226&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882099</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-26 17:34:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>199738</attachid>
            <date>2013-04-25 12:34:11 -0700</date>
            <delta_ts>2013-04-26 17:34:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>29471</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyOGEwOGZiLi5hMWU3NTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQg
QEAKKzIwMTMtMDQtMjUgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAg
ICAgW0NTUyBFeGNsdXNpb25zXSBFeGNsdXNpb25TaGFwZSBib3VuZGluZyBib3ggbWV0aG9kcyBz
aG91bGQgcmV0dXJuIExheW91dFJlY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTUxMTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZWRlZmluZWQgdGhlIEV4Y2x1c2lvblNoYXBlIEFQSSBpbiB0ZXJt
cyBvZiBMYXlvdXRVbml0cywgaW5zdGVhZCBvZiBmbG9hdHM6IGFsbCBvZiB0aGUKKyAgICAgICAg
RXhjbHVzaW9uU2hhcGUgbWV0aG9kcyBub3cgaGF2ZSBMYXlvdXRVbml0IHBhcmFtZXRlcnMgYW5k
IHJldHVybiBMYXlvdXRVbml0IHZhbHVlcy4KKyAgICAgICAgVGhpcyBpcyBtb3JlIG5hdHVyYWws
IHNpbmNlIHRoZSBjYWxsZXJzIHdvcmsgZXhjbHVzaXZlbHkgaW4gTGF5b3V0VW5pdHMuCisKKyAg
ICAgICAgVGhpcyBpcyBzdHJpY3RseSBhIHJlZmFjdG9yaW5nLCBubyBuZXcgdGVzdHMgd2VyZSBu
ZWVkZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpnZXRFeGNsdWRlZEludGVydmFscyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpnZXRJbmNsdWRlZEludGVydmFscyk6
CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpmaXJzdEluY2x1ZGVkSW50ZXJ2
YWxMb2dpY2FsVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RXhjbHVzaW9uUmVjdGFuZ2xlOjpnZXRFeGNsdWRlZEludGVydmFscyk6CisgICAgICAg
IChXZWJDb3JlOjpFeGNsdXNpb25SZWN0YW5nbGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblJlY3RhbmdsZTo6Zmlyc3RJbmNsdWRlZEludGVydmFs
TG9naWNhbFRvcCk6CisgICAgICAgICogcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFeGNsdXNpb25TaGFwZTo6Y3JlYXRlRXhjbHVzaW9uU2hhcGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9FeGNsdXNpb25TaGFwZS5oOgorICAgICAgICAoTGluZVNlZ21lbnQpOgorICAgICAgICAo
RXhjbHVzaW9uU2hhcGUpOgorICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjo6OmNvbXB1dGVkU2hh
cGUpOgorICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uU2hhcGVJbmZvOjpzaGFwZUxv
Z2ljYWxUb3ApOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uU2hhcGVJbmZvOjpzaGFwZUxv
Z2ljYWxCb3R0b20pOgorICAgICAgICAoRXhjbHVzaW9uU2hhcGVJbmZvKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzo6YWRqdXN0TG9naWNhbExpbmVUb3ApOgorICAgICAg
ICAqIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oOgorCiAyMDEzLTA0LTI1ICBHcmVnZyBU
YXZhcmVzICA8Z21hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4IGJ1aWxkIGZpbGVzIHNv
IFdlYkdMRGVidWdYWFggZXh0ZW5zaW9ucyBjYW4gYmUgdXNlZCBpZiBlbmFibGVkLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwCmluZGV4IDA2OTEwOTIu
LmY5NjFkMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Q
b2x5Z29uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdv
bi5jcHAKQEAgLTM0NSwxNCArMzQ1LDE0IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVPdmVybGFwcGlu
Z0VkZ2VYUHJvamVjdGlvbnMoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hCiAgICAg
c29ydEV4Y2x1c2lvbkludGVydmFscyhyZXN1bHQpOwogfQogCi12b2lkIEV4Y2x1c2lvblBvbHln
b246OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxI
ZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Cit2b2lkIEV4Y2x1c2lvblBvbHlnb246
OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBs
b2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAogewogICAgIGNvbnN0IEZs
b2F0UG9seWdvbiYgcG9seWdvbiA9IHNoYXBlTWFyZ2luQm91bmRzKCk7CiAgICAgaWYgKHBvbHln
b24uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBmbG9hdCB5MSA9IGxvZ2ljYWxU
b3A7Ci0gICAgZmxvYXQgeTIgPSB5MSArIGxvZ2ljYWxIZWlnaHQ7CisgICAgZmxvYXQgeTIgPSBs
b2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsKIAogICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZh
bD4geTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHM7CiAgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25z
KHBvbHlnb24sIHkxLCB0cnVlLCB5MVhJbnRlcnZhbHMpOwpAQCAtMzczLDE0ICszNzMsMTQgQEAg
dm9pZCBFeGNsdXNpb25Qb2x5Z29uOjpnZXRFeGNsdWRlZEludGVydmFscyhmbG9hdCBsb2dpY2Fs
VG9wLCBmbG9hdCBsb2dpY2FsSGVpZ2gKICAgICB9CiB9CiAKLXZvaWQgRXhjbHVzaW9uUG9seWdv
bjo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhl
aWdodCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3ZvaWQgRXhjbHVzaW9uUG9seWdvbjo6
Z2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxv
Z2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgY29uc3QgRmxv
YXRQb2x5Z29uJiBwb2x5Z29uID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7CiAgICAgaWYgKHBvbHln
b24uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBmbG9hdCB5MSA9IGxvZ2ljYWxU
b3A7Ci0gICAgZmxvYXQgeTIgPSB5MSArIGxvZ2ljYWxIZWlnaHQ7CisgICAgZmxvYXQgeTIgPSBs
b2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsKIAogICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZh
bD4geTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHM7CiAgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25z
KHBvbHlnb24sIHkxLCB0cnVlLCB5MVhJbnRlcnZhbHMpOwpAQCAtNDI1LDI0ICs0MjUsMjggQEAg
c3RhdGljIGlubGluZSBib29sIGFib3ZlT3JUb1RoZUxlZnQoY29uc3QgRmxvYXRSZWN0JiByMSwg
Y29uc3QgRmxvYXRSZWN0JiByMikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRXhjbHVz
aW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChmbG9hdCBtaW5Mb2dp
Y2FsSW50ZXJ2YWxUb3AsIGNvbnN0IEZsb2F0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwg
ZmxvYXQmIHJlc3VsdCkgY29uc3QKK2Jvb2wgRXhjbHVzaW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRl
ZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29u
c3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYgcmVzdWx0
KSBjb25zdAogeworICAgIGZsb2F0IG1pbkludGVydmFsVG9wID0gbWluTG9naWNhbEludGVydmFs
VG9wOworICAgIGZsb2F0IG1pbkludGVydmFsSGVpZ2h0ID0gbWluTG9naWNhbEludGVydmFsU2l6
ZS5oZWlnaHQoKTsKKyAgICBmbG9hdCBtaW5JbnRlcnZhbFdpZHRoID0gbWluTG9naWNhbEludGVy
dmFsU2l6ZS53aWR0aCgpOworCiAgICAgY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uID0gc2hh
cGVQYWRkaW5nQm91bmRzKCk7CiAgICAgY29uc3QgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcG9s
eWdvbi5ib3VuZGluZ0JveCgpOwotICAgIGlmIChtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLndpZHRo
KCkgPiBib3VuZGluZ0JveC53aWR0aCgpKQorICAgIGlmIChtaW5JbnRlcnZhbFdpZHRoID4gYm91
bmRpbmdCb3gud2lkdGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZmxvYXQgbWlu
WSA9IHN0ZDo6bWF4KGJvdW5kaW5nQm94LnkoKSwgbWluTG9naWNhbEludGVydmFsVG9wKTsKLSAg
ICBmbG9hdCBtYXhZID0gbWluWSArIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUuaGVpZ2h0KCk7Cisg
ICAgZmxvYXQgbWluWSA9IHN0ZDo6bWF4KGJvdW5kaW5nQm94LnkoKSwgbWluSW50ZXJ2YWxUb3Ap
OworICAgIGZsb2F0IG1heFkgPSBtaW5ZICsgbWluSW50ZXJ2YWxIZWlnaHQ7CiAKICAgICBpZiAo
bWF4WSA+IGJvdW5kaW5nQm94Lm1heFkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
VmVjdG9yPGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKLSAgICBwb2x5Z29uLm92ZXJs
YXBwaW5nRWRnZXMobWluTG9naWNhbEludGVydmFsVG9wLCBib3VuZGluZ0JveC5tYXhZKCksIGVk
Z2VzKTsKKyAgICBwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMobWluSW50ZXJ2YWxUb3AsIGJvdW5k
aW5nQm94Lm1heFkoKSwgZWRnZXMpOwogCi0gICAgZmxvYXQgZHggPSBtaW5Mb2dpY2FsSW50ZXJ2
YWxTaXplLndpZHRoKCkgLyAyOwotICAgIGZsb2F0IGR5ID0gbWluTG9naWNhbEludGVydmFsU2l6
ZS5oZWlnaHQoKSAvIDI7CisgICAgZmxvYXQgZHggPSBtaW5JbnRlcnZhbFdpZHRoIC8gMjsKKyAg
ICBmbG9hdCBkeSA9IG1pbkludGVydmFsSGVpZ2h0IC8gMjsKICAgICBWZWN0b3I8T2Zmc2V0UG9s
eWdvbkVkZ2U+IG9mZnNldEVkZ2VzOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVk
Z2VzLnNpemUoKTsgKytpKSB7CkBAIC00NzYsNyArNDgwLDcgQEAgYm9vbCBFeGNsdXNpb25Qb2x5
Z29uOjpmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKGZsb2F0IG1pbkxvZ2ljYWxJbnRl
cnZhbFQKICAgICAgICAgICAgICAgICBvZmZzZXRFZGdlcy5hcHBlbmQob2Zmc2V0RWRnZUJ1ZmZl
cltqXSk7CiAgICAgfQogCi0gICAgb2Zmc2V0RWRnZXMuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdl
KHBvbHlnb24sIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgRmxvYXRTaXplKDAsIGR5KSkpOworICAg
IG9mZnNldEVkZ2VzLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZShwb2x5Z29uLCBtaW5JbnRlcnZh
bFRvcCwgRmxvYXRTaXplKDAsIGR5KSkpOwogCiAgICAgRmxvYXRQb2ludCBvZmZzZXRFZGdlc0lu
dGVyc2VjdGlvbjsKICAgICBGbG9hdFJlY3QgZmlyc3RGaXRSZWN0OwpAQCAtNDg5LDcgKzQ5Myw3
IEBAIGJvb2wgRXhjbHVzaW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRv
cChmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUCiAgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHBv
dGVudGlhbEZpcnN0Rml0UmVjdChwb3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uLCBtaW5Mb2dpY2Fs
SW50ZXJ2YWxTaXplKTsKICAgICAgICAgICAgICAgICBpZiAoKG9mZnNldEVkZ2VzW2ldLmJhc2lz
KCkgPT0gT2Zmc2V0UG9seWdvbkVkZ2U6OkxpbmVUb3AKICAgICAgICAgICAgICAgICAgICAgfHwg
b2Zmc2V0RWRnZXNbal0uYmFzaXMoKSA9PSBPZmZzZXRQb2x5Z29uRWRnZTo6TGluZVRvcAotICAg
ICAgICAgICAgICAgICAgICB8fCBwb3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uLnkoKSA+PSBtaW5M
b2dpY2FsSW50ZXJ2YWxUb3ApCisgICAgICAgICAgICAgICAgICAgIHx8IHBvdGVudGlhbEZpcnN0
Rml0TG9jYXRpb24ueSgpID49IG1pbkludGVydmFsVG9wKQogICAgICAgICAgICAgICAgICAgICAm
JiAoIWZpcnN0Rml0Rm91bmQgfHwgYWJvdmVPclRvVGhlTGVmdChwb3RlbnRpYWxGaXJzdEZpdFJl
Y3QsIGZpcnN0Rml0UmVjdCkpCiAgICAgICAgICAgICAgICAgICAgICYmIHBvbHlnb24uY29udGFp
bnMob2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgICYmIGZpcnN0
Rml0UmVjdEluUG9seWdvbihwb2x5Z29uLCBwb3RlbnRpYWxGaXJzdEZpdFJlY3QsIG9mZnNldEVk
Z2VzW2ldLmVkZ2VJbmRleCgpLCBvZmZzZXRFZGdlc1tqXS5lZGdlSW5kZXgoKSkpIHsKQEAgLTUw
MSw3ICs1MDUsNyBAQCBib29sIEV4Y2x1c2lvblBvbHlnb246OmZpcnN0SW5jbHVkZWRJbnRlcnZh
bExvZ2ljYWxUb3AoZmxvYXQgbWluTG9naWNhbEludGVydmFsVAogICAgIH0KIAogICAgIGlmIChm
aXJzdEZpdEZvdW5kKQotICAgICAgICByZXN1bHQgPSBmaXJzdEZpdFJlY3QueSgpOworICAgICAg
ICByZXN1bHQgPSBMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGZpcnN0Rml0UmVjdC55KCkpOwog
ICAgIHJldHVybiBmaXJzdEZpdEZvdW5kOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0V4Y2x1c2lvblBvbHlnb24uaAppbmRleCBlMTBmYmY2Li5jODg1NTNhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKQEAgLTkxLDE3ICs5MSwxNyBAQCBw
dWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNoYXBlTWFyZ2lu
TG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc2hhcGVNYXJnaW5C
b3VuZHMoKS5ib3VuZGluZ0JveCgpOyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc2hhcGVQYWRk
aW5nTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc2hhcGVQYWRk
aW5nQm91bmRzKCkuYm91bmRpbmdCb3goKTsgfQorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFw
ZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PExheW91dFJlY3Q+KHNoYXBlTWFyZ2luQm91bmRzKCkuYm91bmRpbmdCb3goKSk7IH0K
KyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVQYWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVQYWRk
aW5nQm91bmRzKCkuYm91bmRpbmdCb3goKSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcG9seWdvbi5pc0VtcHR5KCk7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9n
aWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhl
aWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgZmly
c3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3As
IGNvbnN0IEZsb2F0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgZmxvYXQmKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5p
dCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91
dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBmaXJzdEluY2x1ZGVkSW50ZXJ2YWxM
b2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBMYXlvdXRT
aXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JikgY29uc3QgT1ZFUlJJREU7
CiAKK3ByaXZhdGU6CiAgICAgY29uc3QgRmxvYXRQb2x5Z29uJiBzaGFwZU1hcmdpbkJvdW5kcygp
IGNvbnN0OwogICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgc2hhcGVQYWRkaW5nQm91bmRzKCkgY29u
c3Q7CiAKLXByaXZhdGU6CiAgICAgRmxvYXRQb2x5Z29uIG1fcG9seWdvbjsKICAgICBtdXRhYmxl
IE93blB0cjxGbG9hdFBvbHlnb24+IG1fbWFyZ2luQm91bmRzOwogICAgIG11dGFibGUgT3duUHRy
PEZsb2F0UG9seWdvbj4gbV9wYWRkaW5nQm91bmRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcAppbmRleCA2ZGUwOGUzLi42NTAyODNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcApAQCAt
MTAxLDE0ICsxMDEsMTQgQEAgRmxvYXRSb3VuZGVkUmVjdCBFeGNsdXNpb25SZWN0YW5nbGU6OnNo
YXBlTWFyZ2luQm91bmRzKCkgY29uc3QKICAgICByZXR1cm4gbV9tYXJnaW5Cb3VuZHM7CiB9CiAK
LXZvaWQgRXhjbHVzaW9uUmVjdGFuZ2xlOjpnZXRFeGNsdWRlZEludGVydmFscyhmbG9hdCBsb2dp
Y2FsVG9wLCBmbG9hdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAor
dm9pZCBFeGNsdXNpb25SZWN0YW5nbGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQg
bG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0
KSBjb25zdAogewogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGJvdW5kcyA9IHNoYXBlTWFy
Z2luQm91bmRzKCk7CiAgICAgaWYgKGJvdW5kcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKLSAgICBmbG9hdCB5MiA9IHkxICsgbG9naWNh
bEhlaWdodDsKKyAgICBmbG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OwogCiAg
ICAgaWYgKHkyIDwgYm91bmRzLnkoKSB8fCB5MSA+PSBib3VuZHMubWF4WSgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xMzMsMTQgKzEzMywxNCBAQCB2b2lkIEV4Y2x1c2lvblJlY3RhbmdsZTo6Z2V0
RXhjbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhlaQogICAg
IHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoeDEsIHgyKSk7CiB9CiAKLXZvaWQgRXhjbHVzaW9u
UmVjdGFuZ2xlOjpnZXRJbmNsdWRlZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBs
b2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAordm9pZCBFeGNsdXNpb25S
ZWN0YW5nbGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAogewogICAg
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGJvdW5kcyA9IHNoYXBlUGFkZGluZ0JvdW5kcygpOwog
ICAgIGlmIChib3VuZHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBmbG9hdCB5
MSA9IGxvZ2ljYWxUb3A7Ci0gICAgZmxvYXQgeTIgPSB5MSArIGxvZ2ljYWxIZWlnaHQ7CisgICAg
ZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsKIAogICAgIGlmICh5MSA8IGJv
dW5kcy55KCkgfHwgeTIgPiBib3VuZHMubWF4WSgpKQogICAgICAgICByZXR1cm47CkBAIC0xNzgs
MTQgKzE3OCwxOCBAQCB2b2lkIEV4Y2x1c2lvblJlY3RhbmdsZTo6Z2V0SW5jbHVkZWRJbnRlcnZh
bHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhlaQogICAgIHJlc3VsdC5hcHBlbmQo
TGluZVNlZ21lbnQoeDEsIHgyKSk7CiB9CiAKLWJvb2wgRXhjbHVzaW9uUmVjdGFuZ2xlOjpmaXJz
dEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKGZsb2F0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwg
Y29uc3QgRmxvYXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBmbG9hdCYgcmVzdWx0KSBj
b25zdAorYm9vbCBFeGNsdXNpb25SZWN0YW5nbGU6OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2lj
YWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUm
IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmIHJlc3VsdCkgY29uc3QKIHsKKyAg
ICBmbG9hdCBtaW5JbnRlcnZhbFRvcCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcDsKKyAgICBmbG9h
dCBtaW5JbnRlcnZhbEhlaWdodCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUuaGVpZ2h0KCk7Cisg
ICAgZmxvYXQgbWluSW50ZXJ2YWxXaWR0aCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUud2lkdGgo
KTsKKwogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGJvdW5kcyA9IHNoYXBlUGFkZGluZ0Jv
dW5kcygpOwotICAgIGlmIChib3VuZHMuaXNFbXB0eSgpIHx8IG1pbkxvZ2ljYWxJbnRlcnZhbFNp
emUud2lkdGgoKSA+IGJvdW5kcy53aWR0aCgpKQorICAgIGlmIChib3VuZHMuaXNFbXB0eSgpIHx8
IG1pbkludGVydmFsV2lkdGggPiBib3VuZHMud2lkdGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgZmxvYXQgbWluWSA9IHN0ZDo6bWF4KGJvdW5kcy55KCksIG1pbkxvZ2ljYWxJbnRl
cnZhbFRvcCk7Ci0gICAgZmxvYXQgbWF4WSA9IG1pblkgKyBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXpl
LmhlaWdodCgpOworICAgIGZsb2F0IG1pblkgPSBzdGQ6Om1heChib3VuZHMueSgpLCBtaW5JbnRl
cnZhbFRvcCk7CisgICAgZmxvYXQgbWF4WSA9IG1pblkgKyBtaW5JbnRlcnZhbEhlaWdodDsKIAog
ICAgIGlmIChtYXhZID4gYm91bmRzLm1heFkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MjAwLDIyICsyMDQsMjIgQEAgYm9vbCBFeGNsdXNpb25SZWN0YW5nbGU6OmZpcnN0SW5jbHVkZWRJ
bnRlcnZhbExvZ2ljYWxUb3AoZmxvYXQgbWluTG9naWNhbEludGVydmEKIAogICAgIGZsb2F0IGNl
bnRlclkgPSBib3VuZHMueSgpICsgYm91bmRzLmhlaWdodCgpIC8gMjsKICAgICBib29sIG1pbkNv
cm5lckRlZmluZXNYID0gZmFicyhjZW50ZXJZIC0gbWluWSkgPiBmYWJzKGNlbnRlclkgLSBtYXhZ
KTsKLSAgICBib29sIGludGVydmFsRml0c1dpdGhpbkNvcm5lcnMgPSBtaW5Mb2dpY2FsSW50ZXJ2
YWxTaXplLndpZHRoKCkgKyAyICogYm91bmRzLnJ4KCkgPD0gYm91bmRzLndpZHRoKCk7Ci0gICAg
RmxvYXRQb2ludCBjb3JuZXJJbnRlcmNlcHQgPSBib3VuZHMuY29ybmVySW50ZXJjZXB0Rm9yV2lk
dGgobWluTG9naWNhbEludGVydmFsU2l6ZS53aWR0aCgpKTsKKyAgICBib29sIGludGVydmFsRml0
c1dpdGhpbkNvcm5lcnMgPSBtaW5JbnRlcnZhbFdpZHRoICsgMiAqIGJvdW5kcy5yeCgpIDw9IGJv
dW5kcy53aWR0aCgpOworICAgIEZsb2F0UG9pbnQgY29ybmVySW50ZXJjZXB0ID0gYm91bmRzLmNv
cm5lckludGVyY2VwdEZvcldpZHRoKG1pbkludGVydmFsV2lkdGgpOwogCiAgICAgaWYgKGludGVy
dmFsT3ZlcmxhcHNNaW5Db3JuZXIgJiYgKCFpbnRlcnZhbE92ZXJsYXBzTWF4Q29ybmVyIHx8IG1p
bkNvcm5lckRlZmluZXNYKSkgewogICAgICAgICBpZiAoaW50ZXJ2YWxGaXRzV2l0aGluQ29ybmVy
cyB8fCBib3VuZHMueSgpICsgY29ybmVySW50ZXJjZXB0LnkoKSA8IG1pblkpIHsKICAgICAgICAg
ICAgIHJlc3VsdCA9IG1pblk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQot
ICAgICAgICBpZiAobWluTG9naWNhbEludGVydmFsU2l6ZS5oZWlnaHQoKSA8IGJvdW5kcy5oZWln
aHQoKSAtICgyICogY29ybmVySW50ZXJjZXB0LnkoKSkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9
IGJvdW5kcy55KCkgKyBjb3JuZXJJbnRlcmNlcHQueSgpOworICAgICAgICBpZiAobWluSW50ZXJ2
YWxIZWlnaHQgPCBib3VuZHMuaGVpZ2h0KCkgLSAoMiAqIGNvcm5lckludGVyY2VwdC55KCkpKSB7
CisgICAgICAgICAgICByZXN1bHQgPSBMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGJvdW5kcy55
KCkgKyBjb3JuZXJJbnRlcmNlcHQueSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgaWYgKGludGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIgJiYgKCFp
bnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyIHx8ICFtaW5Db3JuZXJEZWZpbmVzWCkpIHsKLSAgICAg
ICAgaWYgKGludGVydmFsRml0c1dpdGhpbkNvcm5lcnMgfHwgbWluWSA8PSAgYm91bmRzLm1heFko
KSAtIGNvcm5lckludGVyY2VwdC55KCkgLSBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLmhlaWdodCgp
KSB7CisgICAgICAgIGlmIChpbnRlcnZhbEZpdHNXaXRoaW5Db3JuZXJzIHx8IG1pblkgPD0gIGJv
dW5kcy5tYXhZKCkgLSBjb3JuZXJJbnRlcmNlcHQueSgpIC0gbWluSW50ZXJ2YWxIZWlnaHQpIHsK
ICAgICAgICAgICAgIHJlc3VsdCA9IG1pblk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblJl
Y3RhbmdsZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5o
CmluZGV4IDhiZTA3MGUuLjMwOWZkYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25SZWN0YW5nbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RXhjbHVzaW9uUmVjdGFuZ2xlLmgKQEAgLTY4LDE3ICs2OCwxNyBAQCBwdWJsaWM6CiAgICAgewog
ICAgIH0KIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5n
Qm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc2hhcGVNYXJnaW5Cb3VuZHMoKTsgfQotICAg
IHZpcnR1YWwgRmxvYXRSZWN0IHNoYXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIHNoYXBlUGFkZGluZ0JvdW5kcygpOyB9CisgICAgdmlydHVhbCBM
YXlvdXRSZWN0IHNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVNYXJnaW5Cb3VuZHMoKSk7IH0K
KyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVQYWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVQYWRk
aW5nQm91bmRzKCkpOyB9CiAgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBtX2JvdW5kcy5pc0VtcHR5KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhj
bHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhlaWdodCwgU2Vn
bWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJ
bnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExp
c3QmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRlZEludGVy
dmFsTG9naWNhbFRvcChmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IEZsb2F0U2l6
ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgZmxvYXQmKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBM
YXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRv
cCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCBmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91
dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2Fs
SW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JikgY29uc3QgT1ZFUlJJREU7CiAKK3ByaXZhdGU6CiAg
ICAgRmxvYXRSb3VuZGVkUmVjdCBzaGFwZU1hcmdpbkJvdW5kcygpIGNvbnN0OwogICAgIEZsb2F0
Um91bmRlZFJlY3Qgc2hhcGVQYWRkaW5nQm91bmRzKCkgY29uc3Q7CiAKLXByaXZhdGU6CiAgICAg
RmxvYXRSb3VuZGVkUmVjdCBtX2JvdW5kczsKICAgICBtdXRhYmxlIEZsb2F0Um91bmRlZFJlY3Qg
bV9tYXJnaW5Cb3VuZHM7CiAgICAgbXV0YWJsZSBGbG9hdFJvdW5kZWRSZWN0IG1fcGFkZGluZ0Jv
dW5kczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFw
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwCmluZGV4
IGNjNTQ1MGEuLmIwYWNkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlLmNwcApAQCAtOTAsMTMgKzkwLDEzIEBAIHN0YXRpYyBpbmxpbmUgRmxvYXRTaXplIHBo
eXNpY2FsU2l6ZVRvTG9naWNhbChjb25zdCBGbG9hdFNpemUmIHNpemUsIFdyaXRpbmdNb2RlCiAg
ICAgcmV0dXJuIHNpemUudHJhbnNwb3NlZFNpemUoKTsKIH0KIAotUGFzc093blB0cjxFeGNsdXNp
b25TaGFwZT4gRXhjbHVzaW9uU2hhcGU6OmNyZWF0ZUV4Y2x1c2lvblNoYXBlKGNvbnN0IEJhc2lj
U2hhcGUqIGJhc2ljU2hhcGUsIGZsb2F0IGxvZ2ljYWxCb3hXaWR0aCwgZmxvYXQgbG9naWNhbEJv
eEhlaWdodCwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIExlbmd0aCBtYXJnaW4sIExlbmd0aCBw
YWRkaW5nKQorUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gRXhjbHVzaW9uU2hhcGU6OmNyZWF0
ZUV4Y2x1c2lvblNoYXBlKGNvbnN0IEJhc2ljU2hhcGUqIGJhc2ljU2hhcGUsIGNvbnN0IExheW91
dFNpemUmIGxvZ2ljYWxCb3hTaXplLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgTGVuZ3RoIG1h
cmdpbiwgTGVuZ3RoIHBhZGRpbmcpCiB7CiAgICAgQVNTRVJUKGJhc2ljU2hhcGUpOwogCiAgICAg
Ym9vbCBob3Jpem9udGFsV3JpdGluZ01vZGUgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0
aW5nTW9kZSk7Ci0gICAgZmxvYXQgYm94V2lkdGggPSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyBs
b2dpY2FsQm94V2lkdGggOiBsb2dpY2FsQm94SGVpZ2h0OwotICAgIGZsb2F0IGJveEhlaWdodCA9
IGhvcml6b250YWxXcml0aW5nTW9kZSA/IGxvZ2ljYWxCb3hIZWlnaHQgOiBsb2dpY2FsQm94V2lk
dGg7CisgICAgZmxvYXQgYm94V2lkdGggPSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyBsb2dpY2Fs
Qm94U2l6ZS53aWR0aCgpIDogbG9naWNhbEJveFNpemUuaGVpZ2h0KCk7CisgICAgZmxvYXQgYm94
SGVpZ2h0ID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbG9naWNhbEJveFNpemUuaGVpZ2h0KCkg
OiBsb2dpY2FsQm94U2l6ZS53aWR0aCgpOwogICAgIE93blB0cjxFeGNsdXNpb25TaGFwZT4gZXhj
bHVzaW9uU2hhcGU7CiAKICAgICBzd2l0Y2ggKGJhc2ljU2hhcGUtPnR5cGUoKSkgewpAQCAtMTEz
LDcgKzExMyw3IEBAIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IEV4Y2x1c2lvblNoYXBlOjpj
cmVhdGVFeGNsdXNpb25TaGFwZShjb25zdCBCYXNpY1NoYXBlCiAgICAgICAgIEZsb2F0U2l6ZSBj
b3JuZXJSYWRpaSgKICAgICAgICAgICAgIHJhZGl1c1hMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAg
OiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJhZGl1c1hMZW5ndGgsIGJveFdpZHRoKSwKICAgICAgICAg
ICAgIHJhZGl1c1lMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KHJhZGl1c1lMZW5ndGgsIGJveEhlaWdodCkpOwotICAgICAgICBGbG9hdFJlY3QgbG9naWNhbEJv
dW5kcyA9IHBoeXNpY2FsUmVjdFRvTG9naWNhbChib3VuZHMsIGxvZ2ljYWxCb3hIZWlnaHQsIHdy
aXRpbmdNb2RlKTsKKyAgICAgICAgRmxvYXRSZWN0IGxvZ2ljYWxCb3VuZHMgPSBwaHlzaWNhbFJl
Y3RUb0xvZ2ljYWwoYm91bmRzLCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUp
OwogCiAgICAgICAgIGV4Y2x1c2lvblNoYXBlID0gY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKGxv
Z2ljYWxCb3VuZHMsIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb3JuZXJSYWRpaSwgd3JpdGluZ01v
ZGUpKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMjQsNyArMTI0LDcgQEAgUGFzc093blB0cjxFeGNs
dXNpb25TaGFwZT4gRXhjbHVzaW9uU2hhcGU6OmNyZWF0ZUV4Y2x1c2lvblNoYXBlKGNvbnN0IEJh
c2ljU2hhcGUKICAgICAgICAgZmxvYXQgY2VudGVyWCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoY2ly
Y2xlLT5jZW50ZXJYKCksIGJveFdpZHRoKTsKICAgICAgICAgZmxvYXQgY2VudGVyWSA9IGZsb2F0
VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5jZW50ZXJZKCksIGJveEhlaWdodCk7CiAgICAgICAgIGZs
b2F0IHJhZGl1cyA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5yYWRpdXMoKSwgc3RkOjpt
aW4oYm94SGVpZ2h0LCBib3hXaWR0aCkpOwotICAgICAgICBGbG9hdFBvaW50IGxvZ2ljYWxDZW50
ZXIgPSBwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKEZsb2F0UG9pbnQoY2VudGVyWCwgY2VudGVyWSks
IGxvZ2ljYWxCb3hIZWlnaHQsIHdyaXRpbmdNb2RlKTsKKyAgICAgICAgRmxvYXRQb2ludCBsb2dp
Y2FsQ2VudGVyID0gcGh5c2ljYWxQb2ludFRvTG9naWNhbChGbG9hdFBvaW50KGNlbnRlclgsIGNl
bnRlclkpLCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOwogCiAgICAgICAg
IGV4Y2x1c2lvblNoYXBlID0gY3JlYXRlRXhjbHVzaW9uQ2lyY2xlKGxvZ2ljYWxDZW50ZXIsIHJh
ZGl1cyk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTM2LDcgKzEzNiw3IEBAIFBhc3NPd25QdHI8RXhj
bHVzaW9uU2hhcGU+IEV4Y2x1c2lvblNoYXBlOjpjcmVhdGVFeGNsdXNpb25TaGFwZShjb25zdCBC
YXNpY1NoYXBlCiAgICAgICAgIGZsb2F0IGNlbnRlclkgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVs
bGlwc2UtPmNlbnRlclkoKSwgYm94SGVpZ2h0KTsKICAgICAgICAgZmxvYXQgcmFkaXVzWCA9IGZs
b2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+cmFkaXVzWCgpLCBib3hXaWR0aCk7CiAgICAgICAg
IGZsb2F0IHJhZGl1c1kgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPnJhZGl1c1koKSwg
Ym94SGVpZ2h0KTsKLSAgICAgICAgRmxvYXRQb2ludCBsb2dpY2FsQ2VudGVyID0gcGh5c2ljYWxQ
b2ludFRvTG9naWNhbChGbG9hdFBvaW50KGNlbnRlclgsIGNlbnRlclkpLCBsb2dpY2FsQm94SGVp
Z2h0LCB3cml0aW5nTW9kZSk7CisgICAgICAgIEZsb2F0UG9pbnQgbG9naWNhbENlbnRlciA9IHBo
eXNpY2FsUG9pbnRUb0xvZ2ljYWwoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZKSwgbG9naWNh
bEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKICAgICAgICAgRmxvYXRTaXplIGxvZ2lj
YWxSYWRpaSA9IHBoeXNpY2FsU2l6ZVRvTG9naWNhbChGbG9hdFNpemUocmFkaXVzWCwgcmFkaXVz
WSksIHdyaXRpbmdNb2RlKTsKIAogICAgICAgICBleGNsdXNpb25TaGFwZSA9IGNyZWF0ZUV4Y2x1
c2lvbkVsbGlwc2UobG9naWNhbENlbnRlciwgbG9naWNhbFJhZGlpKTsKQEAgLTE1Myw3ICsxNTMs
NyBAQCBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBFeGNsdXNpb25TaGFwZTo6Y3JlYXRlRXhj
bHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZQogICAgICAgICAgICAgRmxvYXRQb2ludCB2ZXJ0
ZXgoCiAgICAgICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aCh2YWx1ZXMuYXQoaSksIGJv
eFdpZHRoKSwKICAgICAgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChp
ICsgMSksIGJveEhlaWdodCkpOwotICAgICAgICAgICAgKCp2ZXJ0aWNlcylbaSAvIDJdID0gcGh5
c2ljYWxQb2ludFRvTG9naWNhbCh2ZXJ0ZXgsIGxvZ2ljYWxCb3hIZWlnaHQsIHdyaXRpbmdNb2Rl
KTsKKyAgICAgICAgICAgICgqdmVydGljZXMpW2kgLyAyXSA9IHBoeXNpY2FsUG9pbnRUb0xvZ2lj
YWwodmVydGV4LCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOwogICAgICAg
ICB9CiAKICAgICAgICAgZXhjbHVzaW9uU2hhcGUgPSBjcmVhdGVFeGNsdXNpb25Qb2x5Z29uKHZl
cnRpY2VzLnJlbGVhc2UoKSwgcG9seWdvbi0+d2luZFJ1bGUoKSk7CkBAIC0xNjQsOCArMTY0LDYg
QEAgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gRXhjbHVzaW9uU2hhcGU6OmNyZWF0ZUV4Y2x1
c2lvblNoYXBlKGNvbnN0IEJhc2ljU2hhcGUKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQogCi0gICAgZXhjbHVzaW9uU2hhcGUtPm1fbG9naWNhbEJveFdpZHRoID0gbG9naWNh
bEJveFdpZHRoOwotICAgIGV4Y2x1c2lvblNoYXBlLT5tX2xvZ2ljYWxCb3hIZWlnaHQgPSBsb2dp
Y2FsQm94SGVpZ2h0OwogICAgIGV4Y2x1c2lvblNoYXBlLT5tX3dyaXRpbmdNb2RlID0gd3JpdGlu
Z01vZGU7CiAgICAgZXhjbHVzaW9uU2hhcGUtPm1fbWFyZ2luID0gZmxvYXRWYWx1ZUZvckxlbmd0
aChtYXJnaW4sIDApOwogICAgIGV4Y2x1c2lvblNoYXBlLT5tX3BhZGRpbmcgPSBmbG9hdFZhbHVl
Rm9yTGVuZ3RoKHBhZGRpbmcsIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblNoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9u
U2hhcGUuaAppbmRleCA2MmMzYmU0Li5lM2Q1MWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRXhjbHVzaW9uU2hhcGUuaApAQCAtMzEsNyArMzEsNyBAQAogI2RlZmluZSBFeGNsdXNpb25T
aGFwZV9oCiAKICNpbmNsdWRlICJCYXNpY1NoYXBlcy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDUs
OCArNDUsOCBAQCBzdHJ1Y3QgTGluZVNlZ21lbnQgewogICAgIHsKICAgICB9CiAKLSAgICBmbG9h
dCBsb2dpY2FsTGVmdDsKLSAgICBmbG9hdCBsb2dpY2FsUmlnaHQ7CisgICAgTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodDsKIH07CiAKIHR5cGVkZWYg
VmVjdG9yPExpbmVTZWdtZW50PiBTZWdtZW50TGlzdDsKQEAgLTU5LDIzICs1OSwyMyBAQCB0eXBl
ZGVmIFZlY3RvcjxMaW5lU2VnbWVudD4gU2VnbWVudExpc3Q7CiAKIGNsYXNzIEV4Y2x1c2lvblNo
YXBlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gY3Jl
YXRlRXhjbHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZSosIGZsb2F0IGxvZ2ljYWxCb3hXaWR0
aCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgV3JpdGluZ01vZGUsIExlbmd0aCBtYXJnaW4sIExl
bmd0aCBwYWRkaW5nKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gY3Jl
YXRlRXhjbHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZSosIGNvbnN0IExheW91dFNpemUmIGxv
Z2ljYWxCb3hTaXplLCBXcml0aW5nTW9kZSwgTGVuZ3RoIG1hcmdpbiwgTGVuZ3RoIHBhZGRpbmcp
OwogCiAgICAgdmlydHVhbCB+RXhjbHVzaW9uU2hhcGUoKSB7IH0KIAorICAgIHZpcnR1YWwgTGF5
b3V0UmVjdCBzaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVQYWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBnZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVu
aXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgZmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJ
bnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5
b3V0VW5pdCYgcmVzdWx0KSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKICAgICBmbG9hdCBzaGFw
ZU1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luOyB9CiAgICAgZmxvYXQgc2hhcGVQYWRk
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wYWRkaW5nOyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qg
c2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBG
bG9hdFJlY3Qgc2hhcGVQYWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRJ
bmNsdWRlZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2FsSGVpZ2h0LCBT
ZWdtZW50TGlzdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRl
cnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3Qm
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2lj
YWxUb3AoZmxvYXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBGbG9hdFNpemUmIG1pbkxv
Z2ljYWxJbnRlcnZhbFNpemUsIGZsb2F0JiByZXN1bHQpIGNvbnN0ID0gMDsKIAogcHJpdmF0ZToK
ICAgICBXcml0aW5nTW9kZSBtX3dyaXRpbmdNb2RlOwotICAgIGZsb2F0IG1fbG9naWNhbEJveFdp
ZHRoOwotICAgIGZsb2F0IG1fbG9naWNhbEJveEhlaWdodDsKICAgICBmbG9hdCBtX21hcmdpbjsK
ICAgICBmbG9hdCBtX3BhZGRpbmc7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RXhjbHVzaW9uU2hhcGVJbmZvLmNwcAppbmRleCA4NDg0ZGM2Li44NjY5ZTcyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNwcApAQCAtMzksNyAr
MzksNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
LXRlbXBsYXRlPGNsYXNzIFJlbmRlclR5cGUsIEV4Y2x1c2lvblNoYXBlVmFsdWUqIChSZW5kZXJT
dHlsZTo6KnNoYXBlR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChFeGNsdXNpb25TaGFwZTo6KmludGVy
dmFsR2V0dGVyKShmbG9hdCwgZmxvYXQsIFNlZ21lbnRMaXN0JikgY29uc3Q+Cit0ZW1wbGF0ZTxj
bGFzcyBSZW5kZXJUeXBlLCBFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipzaGFw
ZUdldHRlcikoKSBjb25zdCwgdm9pZCAoRXhjbHVzaW9uU2hhcGU6OippbnRlcnZhbEdldHRlciko
TGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdD4KIGNvbnN0IEV4Y2x1
c2lvblNoYXBlKiBFeGNsdXNpb25TaGFwZUluZm88UmVuZGVyVHlwZSwgc2hhcGVHZXR0ZXIsIGlu
dGVydmFsR2V0dGVyPjo6Y29tcHV0ZWRTaGFwZSgpIGNvbnN0CiB7CiAgICAgaWYgKEV4Y2x1c2lv
blNoYXBlKiBleGNsdXNpb25TaGFwZSA9IG1fc2hhcGUuZ2V0KCkpCkBAIC01MCwxMiArNTAsMTIg
QEAgY29uc3QgRXhjbHVzaW9uU2hhcGUqIEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJUeXBlLCBz
aGFwZUdldHRlciwgaW50ZXJ2YWxHZXR0ZXIKIAogICAgIEFTU0VSVChzaGFwZSk7CiAKLSAgICBt
X3NoYXBlID0gRXhjbHVzaW9uU2hhcGU6OmNyZWF0ZUV4Y2x1c2lvblNoYXBlKHNoYXBlLCBtX3No
YXBlTG9naWNhbFdpZHRoLCBtX3NoYXBlTG9naWNhbEhlaWdodCwgbV9yZW5kZXJlci0+c3R5bGUo
KS0+d3JpdGluZ01vZGUoKSwgbV9yZW5kZXJlci0+c3R5bGUoKS0+c2hhcGVNYXJnaW4oKSwgbV9y
ZW5kZXJlci0+c3R5bGUoKS0+c2hhcGVQYWRkaW5nKCkpOworICAgIG1fc2hhcGUgPSBFeGNsdXNp
b25TaGFwZTo6Y3JlYXRlRXhjbHVzaW9uU2hhcGUoc2hhcGUsIExheW91dFNpemUobV9zaGFwZUxv
Z2ljYWxXaWR0aCwgbV9zaGFwZUxvZ2ljYWxIZWlnaHQpLCBtX3JlbmRlcmVyLT5zdHlsZSgpLT53
cml0aW5nTW9kZSgpLCBtX3JlbmRlcmVyLT5zdHlsZSgpLT5zaGFwZU1hcmdpbigpLCBtX3JlbmRl
cmVyLT5zdHlsZSgpLT5zaGFwZVBhZGRpbmcoKSk7CiAgICAgQVNTRVJUKG1fc2hhcGUpOwogICAg
IHJldHVybiBtX3NoYXBlLmdldCgpOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlLCBF
eGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipzaGFwZUdldHRlcikoKSBjb25zdCwg
dm9pZCAoRXhjbHVzaW9uU2hhcGU6OippbnRlcnZhbEdldHRlcikoZmxvYXQsIGZsb2F0LCBTZWdt
ZW50TGlzdCYpIGNvbnN0PgordGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgRXhjbHVzaW9uU2hh
cGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEV4Y2x1
c2lvblNoYXBlOjoqaW50ZXJ2YWxHZXR0ZXIpKExheW91dFVuaXQsIExheW91dFVuaXQsIFNlZ21l
bnRMaXN0JikgY29uc3Q+CiBMYXlvdXRVbml0IEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJUeXBl
LCBzaGFwZUdldHRlciwgaW50ZXJ2YWxHZXR0ZXI+Ojpsb2dpY2FsVG9wT2Zmc2V0KCkgY29uc3QK
IHsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BPZmZzZXQgPSBtX3JlbmRlcmVyLT5zdHlsZSgp
LT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCA/IG1fcmVuZGVyZXItPmJvcmRlckJlZm9yZSgp
ICsgbV9yZW5kZXJlci0+cGFkZGluZ0JlZm9yZSgpIDogTGF5b3V0VW5pdCgpOwpAQCAtNjUsNyAr
NjUsNyBAQCBMYXlvdXRVbml0IEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJUeXBlLCBzaGFwZUdl
dHRlciwgaW50ZXJ2YWxHZXR0ZXI+Ojpsb2dpY2FsVAogICAgIHJldHVybiBsb2dpY2FsVG9wT2Zm
c2V0OwogfQogCi10ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlLCBFeGNsdXNpb25TaGFwZVZhbHVl
KiAoUmVuZGVyU3R5bGU6OipzaGFwZUdldHRlcikoKSBjb25zdCwgdm9pZCAoRXhjbHVzaW9uU2hh
cGU6OippbnRlcnZhbEdldHRlcikoZmxvYXQsIGZsb2F0LCBTZWdtZW50TGlzdCYpIGNvbnN0Pgor
dGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgRXhjbHVzaW9uU2hhcGVWYWx1ZSogKFJlbmRlclN0
eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEV4Y2x1c2lvblNoYXBlOjoqaW50ZXJ2
YWxHZXR0ZXIpKExheW91dFVuaXQsIExheW91dFVuaXQsIFNlZ21lbnRMaXN0JikgY29uc3Q+CiBi
b29sIEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJUeXBlLCBzaGFwZUdldHRlciwgaW50ZXJ2YWxH
ZXR0ZXI+Ojpjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0
VW5pdCBsaW5lSGVpZ2h0KQogewogICAgIEFTU0VSVChsaW5lSGVpZ2h0ID49IDApOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5oCmluZGV4IGJjMjBiNDgu
LjIwZWQ0ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25T
aGFwZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJ
bmZvLmgKQEAgLTY0LDcgKzY0LDcgQEAgcHJpdmF0ZToKICAgICB9CiB9OwogCi10ZW1wbGF0ZTxj
bGFzcyBSZW5kZXJUeXBlLCBFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipzaGFw
ZUdldHRlcikoKSBjb25zdCwgdm9pZCAoRXhjbHVzaW9uU2hhcGU6OippbnRlcnZhbEdldHRlciko
ZmxvYXQsIGZsb2F0LCBTZWdtZW50TGlzdCYpIGNvbnN0PgordGVtcGxhdGU8Y2xhc3MgUmVuZGVy
VHlwZSwgRXhjbHVzaW9uU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqc2hhcGVHZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKEV4Y2x1c2lvblNoYXBlOjoqaW50ZXJ2YWxHZXR0ZXIpKExheW91dFVuaXQs
IExheW91dFVuaXQsIFNlZ21lbnRMaXN0JikgY29uc3Q+CiBjbGFzcyBFeGNsdXNpb25TaGFwZUlu
Zm8gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtODcsOCArODcs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5
b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpOwogICAgIHZvaWQgY2xlYXJT
ZWdtZW50cygpIHsgbV9zZWdtZW50cy5jbGVhcigpOyB9CiAKLSAgICBMYXlvdXRVbml0IHNoYXBl
TG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIGZsb2F0TG9naWNhbFRvcFRvTGF5b3V0VW5pdChj
b21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkueSgpKSArIGxvZ2ljYWxUb3BPZmZzZXQo
KTsgfQotICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4g
ZmxvYXRMb2dpY2FsQm90dG9tVG9MYXlvdXRVbml0KGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRp
bmdCb3goKS5tYXhZKCkpICsgbG9naWNhbFRvcE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBz
aGFwZUxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5k
aW5nQm94KCkueSgpICsgbG9naWNhbFRvcE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFw
ZUxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5k
aW5nQm94KCkubWF4WSgpICsgbG9naWNhbFRvcE9mZnNldCgpOyB9CiAgICAgTGF5b3V0VW5pdCBz
aGFwZUxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3Vu
ZGluZ0JveCgpLngoKSArIGxvZ2ljYWxMZWZ0T2Zmc2V0KCk7IH0KICAgICBMYXlvdXRVbml0IHNo
YXBlTG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3Vu
ZGluZ0JveCgpLm1heFgoKSArIGxvZ2ljYWxMZWZ0T2Zmc2V0KCk7IH0KICAgICBMYXlvdXRVbml0
IHNoYXBlTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxC
b3VuZGluZ0JveCgpLndpZHRoKCk7IH0KQEAgLTExMCwxMSArMTEwLDcgQEAgcHJvdGVjdGVkOgog
ICAgIEV4Y2x1c2lvblNoYXBlSW5mbyhjb25zdCBSZW5kZXJUeXBlKiByZW5kZXJlcik6IG1fcmVu
ZGVyZXIocmVuZGVyZXIpIHsgfQogCiAgICAgY29uc3QgRXhjbHVzaW9uU2hhcGUqIGNvbXB1dGVk
U2hhcGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNh
bEJvdW5kaW5nQm94KCkgY29uc3QgPSAwOwotCi0gICAgLy8gVXNlIGNlaWwgYW5kIGZsb29yIHRv
IGVuc3VyZSB0aGF0IHRoZSByZXR1cm5lZCBMYXlvdXRVbml0IHZhbHVlIGlzIHdpdGhpbiB0aGUg
c2hhcGUncyBib3VuZHMuCi0gICAgTGF5b3V0VW5pdCBmbG9hdExvZ2ljYWxUb3BUb0xheW91dFVu
aXQoZmxvYXQgbG9naWNhbFRvcCkgY29uc3QgeyByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0
Q2VpbChsb2dpY2FsVG9wKTsgfQotICAgIExheW91dFVuaXQgZmxvYXRMb2dpY2FsQm90dG9tVG9M
YXlvdXRVbml0KGZsb2F0IGxvZ2ljYWxCb3R0b20pIGNvbnN0IHsgcmV0dXJuIExheW91dFVuaXQ6
OmZyb21GbG9hdEZsb29yKGxvZ2ljYWxCb3R0b20pOyB9CisgICAgdmlydHVhbCBMYXlvdXRSZWN0
IGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7CiAKICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxUb3BPZmZzZXQoKSBjb25zdDsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxM
ZWZ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5n
KCkgPT0gQ09OVEVOVF9CT1ggPyBtX3JlbmRlcmVyLT5ib3JkZXJTdGFydCgpICsgbV9yZW5kZXJl
ci0+cGFkZGluZ1N0YXJ0KCkgOiBMYXlvdXRVbml0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAKaW5kZXggOWY1M2Yx
Mi4uZDg1ZDE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mby5jcHAKQEAgLTU1LDkgKzU1LDggQEAgYm9vbCBFeGNsdXNpb25T
aGFwZUluc2lkZUluZm86OmFkanVzdExvZ2ljYWxMaW5lVG9wKGZsb2F0IG1pblNlZ21lbnRXaWR0
aCkKICAgICBpZiAoIXNoYXBlIHx8IG1fbGluZUhlaWdodCA8PSAwIHx8IGxvZ2ljYWxMaW5lVG9w
KCkgPiBzaGFwZUxvZ2ljYWxCb3R0b20oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ZmxvYXQgZmxvYXROZXdMaW5lVG9wOwotICAgIGlmIChzaGFwZS0+Zmlyc3RJbmNsdWRlZEludGVy
dmFsTG9naWNhbFRvcChtX3NoYXBlTGluZVRvcCwgRmxvYXRTaXplKG1pblNlZ21lbnRXaWR0aCwg
bV9saW5lSGVpZ2h0KSwgZmxvYXROZXdMaW5lVG9wKSkgewotICAgICAgICBMYXlvdXRVbml0IG5l
d0xpbmVUb3AgPSBmbG9hdExvZ2ljYWxUb3BUb0xheW91dFVuaXQoZmxvYXROZXdMaW5lVG9wKTsK
KyAgICBMYXlvdXRVbml0IG5ld0xpbmVUb3A7CisgICAgaWYgKHNoYXBlLT5maXJzdEluY2x1ZGVk
SW50ZXJ2YWxMb2dpY2FsVG9wKG1fc2hhcGVMaW5lVG9wLCBMYXlvdXRTaXplKG1pblNlZ21lbnRX
aWR0aCwgbV9saW5lSGVpZ2h0KSwgbmV3TGluZVRvcCkpIHsKICAgICAgICAgaWYgKG5ld0xpbmVU
b3AgPiBtX3NoYXBlTGluZVRvcCkgewogICAgICAgICAgICAgbV9zaGFwZUxpbmVUb3AgPSBuZXdM
aW5lVG9wOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgKaW5kZXggNGFhMWIyOS4uYWMz
OTc2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFw
ZUluc2lkZUluZm8uaApAQCAtMTAyLDcgKzEwMiw3IEBAIHB1YmxpYzoKICAgICBib29sIG5lZWRz
UmVtb3ZhbCgpIHsgcmV0dXJuIG1fbmVlZHNSZW1vdmFsOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIEZsb2F0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLT5zaGFwZVBhZGRpbmdMb2dpY2FsQm91
bmRpbmdCb3goKTsgfQorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNh
bEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLT5z
aGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdCb3goKTsgfQogCiBwcml2YXRlOgogICAgIEV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mbyhjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaApp
bmRleCAyNTJjNmU1Li44OGZlZTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmgKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBib29sIGlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCb3gqKTsKIAogcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRp
bmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBjb21wdXRlZFNoYXBlKCktPnNoYXBlTWFy
Z2luTG9naWNhbEJvdW5kaW5nQm94KCk7IH0KKyAgICB2aXJ0dWFsIExheW91dFJlY3QgY29tcHV0
ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGNvbXB1
dGVkU2hhcGUoKS0+c2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKTsgfQogCiBwcml2YXRl
OgogICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oY29uc3QgUmVuZGVyQm94KiByZW5kZXJl
cikgOiBFeGNsdXNpb25TaGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0
c2lkZSwgJkV4Y2x1c2lvblNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz4ocmVuZGVyZXIpIHsg
fQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>