<?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>226916</bug_id>
          
          <creation_ts>2021-06-11 01:39:18 -0700</creation_ts>
          <short_desc>[CG] Create a sub-image when drawing an image only if the destination image will be enlarged, rotated or sheared</short_desc>
          <delta_ts>2021-07-02 15:07:33 -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>Images</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=227614</see_also>
          <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="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1768893</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-06-11 01:39:18 -0700</bug_when>
    <thetext>Creating a sub-image using CGImageCreateWithImageInRect() is expensive. But the cost of its creation will be worthy, if it is referenced multiple times. So we should postpone creating and caching the sub-image until it is referenced twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768894</commentid>
    <comment_count>1</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-06-11 01:39:58 -0700</bug_when>
    <thetext>&lt;rdar://71712144&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768895</commentid>
    <comment_count>2</comment_count>
      <attachid>431184</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-06-11 01:44:05 -0700</bug_when>
    <thetext>Created attachment 431184
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769251</commentid>
    <comment_count>3</comment_count>
      <attachid>431271</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-06-13 02:08:15 -0700</bug_when>
    <thetext>Created attachment 431271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769318</commentid>
    <comment_count>4</comment_count>
      <attachid>431298</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-06-13 19:56:12 -0700</bug_when>
    <thetext>Created attachment 431298
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769325</commentid>
    <comment_count>5</comment_count>
      <attachid>431303</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-06-13 23:45:20 -0700</bug_when>
    <thetext>Created attachment 431303
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769326</commentid>
    <comment_count>6</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-06-13 23:49:50 -0700</bug_when>
    <thetext>This patch fixes the following:
1. The perf problem in the emoji dropdown of twitter.com editor because no sub-images are created to display the emoji images.
2. The perf problem in the http://www.antutu.com/html5/collision.html because sub-images are created to display the rotated balls.
3. The display of the canvas in the layout test: fast/canvas/drawImage-with-negative-source-destination.html which has been broken for sometime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769552</commentid>
    <comment_count>7</comment_count>
      <attachid>431303</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-06-14 14:39:32 -0700</bug_when>
    <thetext>Comment on attachment 431303
Patch

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

&gt; Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp:230
&gt; +static inline bool shouldUseSubimage(CGInterpolationQuality interpolationQuality, const FloatRect&amp; destRect, const FloatRect&amp; srcRect, const AffineTransform&amp; transform)

This could be a lambda function.

&gt; Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp:241
&gt; +static inline RetainPtr&lt;CGImageRef&gt; getSubimage(CGImageRef image, const FloatSize&amp; imageSize, const FloatRect&amp; subimageRect, const ImagePaintingOptions&amp; options)

This could be a lambda function.

&gt; Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp:259
&gt; +static inline FloatSize imageLogicalSize(CGImageRef image, const ImagePaintingOptions&amp; options)

This could be a lambda function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769671</commentid>
    <comment_count>8</comment_count>
      <attachid>431396</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-06-14 19:30:06 -0700</bug_when>
    <thetext>Created attachment 431396
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769713</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-15 00:40:51 -0700</bug_when>
    <thetext>Committed r278863 (238807@main): &lt;https://commits.webkit.org/238807@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 431396.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431184</attachid>
            <date>2021-06-11 01:44:05 -0700</date>
            <delta_ts>2021-06-13 02:08:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226916-20210611014405.patch</filename>
            <type>text/plain</type>
            <size>7167</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjdiODk2MDlmODU4ZDUx
ZjZhNjk0MmUyNzZkMmZhZDY0OGEwZWFkOC4uNTAyNzJiNzQyYTQ2NmQ2YWZhOWU3ZGZmMmZkZDBh
MDE4YWQwYWMzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIxLTA2LTExICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtDR10gUG9zdHBvbmUg
Y3JlYXRpbmcgYW5kIGNhY2hpbmcgdGhlIHN1Yi1pbWFnZSB1bnRpbCBpdCBpcyByZWZlcmVuY2Vk
IHR3aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjY5MTYKKyAgICAgICAgPHJkYXI6Ly83MTcxMjE0ND4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDcmVhdGluZyBhIHN1Yi1pbWFnZSB1c2luZyBDR0lt
YWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KCkgaXMgZXhwZW5zaXZlLiAKKyAgICAgICAgQnV0IHRo
ZSBjb3N0IG9mIGl0cyBjcmVhdGlvbiB3aWxsIGJlIHdvcnRoeSwgaWYgaXQgaXMgcmVmZXJlbmNl
ZCBtdWx0aXBsZQorICAgICAgICB0aW1lcy4gU28gd2Ugc2hvdWxkIHBvc3Rwb25lIGNyZWF0aW5n
IGFuZCBjYWNoaW5nIHRoZSBzdWItaW1hZ2UgdW50aWwgaXQKKyAgICAgICAgaXMgcmVmZXJlbmNl
ZCB0d2ljZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRo
VGltZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3ViaW1hZ2VDYWNoZUFkZGVyOjp0cmFuc2xh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U3ViaW1hZ2VDYWNoZVdpdGhUaW1lcjo6c3ViaW1hZ2Up
OgorCiAyMDIxLTA2LTEwICBBcmNhZHkgR29sZG1pbnRzLU9ybG92ICA8YWdvbGRtaW50c0BpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtDYWlyb10gRml4IFBhdGg6OmJvdW5kaW5nUmVjdFNsb3dDYXNl
IHdoZW4gdGhlIHBhdGggaXMgYSBzaW5nbGUgTW92ZVRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXgg
Njc4MzJjMmQ4NWRkZmY5N2MwNDRlMWEyZTQxMTZiMDMwYTk2M2RjNS4uZTZiNzQzYmQ5Y2YxMzUw
NTE2YjE5MjgyMTMyMTE0YTkxYzNmZWZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtMjYwLDQz
ICsyNjAsNDUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXoKICAgICAgICAgLy8gY29udGFpbmlu
ZyBvbmx5IHRoZSBwb3J0aW9uIHdlIHdhbnQgdG8gZGlzcGxheS4gV2UgbmVlZCB0byBkbyB0aGlz
IGJlY2F1c2UgaGlnaC1xdWFsaXR5CiAgICAgICAgIC8vIGludGVycG9sYXRpb24gc21vb3RoZXMg
c2hhcnAgZWRnZXMsIGNhdXNpbmcgcGl4ZWxzIGZyb20gb3V0c2lkZSB0aGUgc291cmNlIHJlY3Qg
dG8gYmxlZWQKICAgICAgICAgLy8gaW50byB0aGUgZGVzdGluYXRpb24gcmVjdC4gU2VlIDxyZGFy
Oi8vcHJvYmxlbS82MTEyOTA5Pi4KLSAgICAgICAgY29uc3QgZmxvYXQgbWluaW11bUFyZWFGb3JJ
bnRlcnBvbGF0aW9uID0gNDAgKiA0MDsKICAgICAgICAgZmxvYXQgeFNjYWxlID0gc3JjUmVjdC53
aWR0aCgpIC8gZGVzdFJlY3Qud2lkdGgoKTsKICAgICAgICAgZmxvYXQgeVNjYWxlID0gc3JjUmVj
dC5oZWlnaHQoKSAvIGRlc3RSZWN0LmhlaWdodCgpOwotICAgICAgICBzaG91bGRVc2VTdWJpbWFn
ZSA9IChpbnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBrQ0dJbnRlcnBvbGF0aW9uTm9uZSkgJiYgKHhT
Y2FsZSA8IDAgfHwgeVNjYWxlIDwgMCB8fCBkZXN0UmVjdC5hcmVhKCkgPj0gbWluaW11bUFyZWFG
b3JJbnRlcnBvbGF0aW9uKSAmJiAoc3JjUmVjdC5zaXplKCkgIT0gZGVzdFJlY3Quc2l6ZSgpIHx8
ICFnZXRDVE0oKS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKTsKLSAgICAgICAg
aWYgKHNob3VsZFVzZVN1YmltYWdlKSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3Qgc3ViaW1hZ2VS
ZWN0ID0gc3JjUmVjdDsKLSAgICAgICAgICAgIGZsb2F0IGxlZnRQYWRkaW5nID0gc3JjUmVjdC54
KCkgLSBmbG9vcmYoc3JjUmVjdC54KCkpOwotICAgICAgICAgICAgZmxvYXQgdG9wUGFkZGluZyA9
IHNyY1JlY3QueSgpIC0gZmxvb3JmKHNyY1JlY3QueSgpKTsKLQotICAgICAgICAgICAgc3ViaW1h
Z2VSZWN0Lm1vdmUoLWxlZnRQYWRkaW5nLCAtdG9wUGFkZGluZyk7Ci0gICAgICAgICAgICBhZGp1
c3RlZERlc3RSZWN0Lm1vdmUoLWxlZnRQYWRkaW5nIC8geFNjYWxlLCAtdG9wUGFkZGluZyAvIHlT
Y2FsZSk7Ci0KLSAgICAgICAgICAgIHN1YmltYWdlUmVjdC5zZXRXaWR0aChjZWlsZihzdWJpbWFn
ZVJlY3Qud2lkdGgoKSArIGxlZnRQYWRkaW5nKSk7Ci0gICAgICAgICAgICBhZGp1c3RlZERlc3RS
ZWN0LnNldFdpZHRoKHN1YmltYWdlUmVjdC53aWR0aCgpIC8geFNjYWxlKTsKKyAgICAgICAgZmxv
YXQgbGVmdFBhZGRpbmcgPSBzcmNSZWN0LngoKSAtIGZsb29yZihzcmNSZWN0LngoKSk7CisgICAg
ICAgIGZsb2F0IHRvcFBhZGRpbmcgPSBzcmNSZWN0LnkoKSAtIGZsb29yZihzcmNSZWN0LnkoKSk7
CiAKLSAgICAgICAgICAgIHN1YmltYWdlUmVjdC5zZXRIZWlnaHQoY2VpbGYoc3ViaW1hZ2VSZWN0
LmhlaWdodCgpICsgdG9wUGFkZGluZykpOwotICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5z
ZXRIZWlnaHQoc3ViaW1hZ2VSZWN0LmhlaWdodCgpIC8geVNjYWxlKTsKKyAgICAgICAgRmxvYXRS
ZWN0IHN1YmltYWdlUmVjdCA9IHNyY1JlY3Q7CisgICAgICAgIHN1YmltYWdlUmVjdC5tb3ZlKC1s
ZWZ0UGFkZGluZywgLXRvcFBhZGRpbmcpOworICAgICAgICBzdWJpbWFnZVJlY3Quc2V0V2lkdGgo
Y2VpbGYoc3ViaW1hZ2VSZWN0LndpZHRoKCkgKyBsZWZ0UGFkZGluZykpOworICAgICAgICBzdWJp
bWFnZVJlY3Quc2V0SGVpZ2h0KGNlaWxmKHN1YmltYWdlUmVjdC5oZWlnaHQoKSArIHRvcFBhZGRp
bmcpKTsKIAorICAgICAgICBzaG91bGRVc2VTdWJpbWFnZSA9IChpbnRlcnBvbGF0aW9uUXVhbGl0
eSAhPSBrQ0dJbnRlcnBvbGF0aW9uTm9uZSkgJiYgKHNyY1JlY3Quc2l6ZSgpICE9IGRlc3RSZWN0
LnNpemUoKSB8fCAhZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7
CisgICAgICAgIGlmIChzaG91bGRVc2VTdWJpbWFnZSkgeworICAgICAgICAgICAgRmxvYXRSZWN0
IHBoeXNpY2FsU3ViaW1hZ2VSZWN0ID0gc3ViaW1hZ2VSZWN0OwogICAgICAgICAgICAgLy8gc3Vi
aW1hZ2VSZWN0IGlzIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMuIGdldFN1YmltYWdlKCkgZGVhbHMg
d2l0aCBub25lLW9yaWVudGVkCiAgICAgICAgICAgICAvLyBpbWFnZS4gV2UgbmVlZCB0byBjb252
ZXJ0IHN1YmltYWdlUmVjdCB0byBwaHlzaWNhbCBpbWFnZSBjb29yZGluYXRlcy4KICAgICAgICAg
ICAgIGlmIChvcHRpb25zLm9yaWVudGF0aW9uKCkgIT0gSW1hZ2VPcmllbnRhdGlvbjo6Tm9uZSkg
ewogICAgICAgICAgICAgICAgIGlmIChhdXRvIHRyYW5zZm9ybSA9IG9wdGlvbnMub3JpZW50YXRp
b24oKS50cmFuc2Zvcm1Gcm9tRGVmYXVsdChpbWFnZVNpemUpLmludmVyc2UoKSkKLSAgICAgICAg
ICAgICAgICAgICAgc3ViaW1hZ2VSZWN0ID0gdHJhbnNmb3JtLnZhbHVlKCkubWFwUmVjdChzdWJp
bWFnZVJlY3QpOworICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbFN1YmltYWdlUmVjdCA9IHRy
YW5zZm9ybS52YWx1ZSgpLm1hcFJlY3QocGh5c2ljYWxTdWJpbWFnZVJlY3QpOwogICAgICAgICAg
ICAgfQotCiAjaWYgQ0FDSEVfU1VCSU1BR0VTCi0gICAgICAgICAgICBzdWJJbWFnZSA9IFN1Ymlt
YWdlQ2FjaGVXaXRoVGltZXI6OmdldFN1YmltYWdlKHN1YkltYWdlLmdldCgpLCBzdWJpbWFnZVJl
Y3QpOworICAgICAgICAgICAgc3ViSW1hZ2UgPSBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyOjpnZXRT
dWJpbWFnZShzdWJJbWFnZS5nZXQoKSwgcGh5c2ljYWxTdWJpbWFnZVJlY3QpOwogI2Vsc2UKLSAg
ICAgICAgICAgIHN1YkltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0
KHN1YkltYWdlLmdldCgpLCBzdWJpbWFnZVJlY3QpKTsKKyAgICAgICAgICAgIHN1YkltYWdlID0g
YWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KHN1YkltYWdlLmdldCgpLCBwaHlz
aWNhbFN1YmltYWdlUmVjdCkpOwogI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBpZiAoc3Vi
SW1hZ2UgIT0gaW1hZ2UpIHsKKyAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3QubW92ZSgtbGVm
dFBhZGRpbmcgLyB4U2NhbGUsIC10b3BQYWRkaW5nIC8geVNjYWxlKTsKKyAgICAgICAgICAgIGFk
anVzdGVkRGVzdFJlY3Quc2V0V2lkdGgoc3ViaW1hZ2VSZWN0LndpZHRoKCkgLyB4U2NhbGUpOwor
ICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQoc3ViaW1hZ2VSZWN0LmhlaWdo
dCgpIC8geVNjYWxlKTsKKwogICAgICAgICAgICAgaWYgKGN1cnJIZWlnaHQgPCBzcmNSZWN0Lm1h
eFkoKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChsb2dpY2FsSGVpZ2h0KHN1YkltYWdlLmdl
dCgpKSA9PSBjdXJySGVpZ2h0IC0gQ0dSZWN0SW50ZWdyYWwoc3JjUmVjdCkub3JpZ2luLnkpOwog
ICAgICAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0SGVpZ2h0KGxvZ2ljYWxIZWlnaHQo
c3ViSW1hZ2UuZ2V0KCkpIC8geVNjYWxlKTsKICAgICAgICAgICAgIH0KKwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50
KGRlc3RSZWN0LngoKSAtIHNyY1JlY3QueCgpIC8geFNjYWxlLCBkZXN0UmVjdC55KCkgLSBzcmNS
ZWN0LnkoKSAvIHlTY2FsZSkpOwotICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRTaXpl
KEZsb2F0U2l6ZShpbWFnZVNpemUud2lkdGgoKSAvIHhTY2FsZSwgaW1hZ2VTaXplLmhlaWdodCgp
IC8geVNjYWxlKSk7CisgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldExvY2F0aW9uKHsg
ZGVzdFJlY3QueCgpIC0gc3JjUmVjdC54KCkgLyB4U2NhbGUsIGRlc3RSZWN0LnkoKSAtIHNyY1Jl
Y3QueSgpIC8geVNjYWxlIH0pOworICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRTaXpl
KHsgaW1hZ2VTaXplLndpZHRoKCkgLyB4U2NhbGUsIGltYWdlU2l6ZS5oZWlnaHQoKSAvIHlTY2Fs
ZSB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghZGVzdFJlY3QuY29udGFpbnMoYWRqdXN0
ZWREZXN0UmVjdCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKaW5kZXggMTc0YmQ0ODEw
MDA4YjQwM2M2Mjc2Y2UzZTRkMzZiNDc0ODlmYTZlNC4uNTQ2YTRkYWRmNTQ0OGIxMmI1N2Q4ZTY0
MWQ1ZGI3NDhlZmRkZmZmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKQEAgLTc3LDcg
Kzc3LDcgQEAgc3RydWN0IFN1YmltYWdlQ2FjaGVBZGRlciB7CiAgICAgc3RhdGljIHZvaWQgdHJh
bnNsYXRlKFN1YmltYWdlQ2FjaGVXaXRoVGltZXI6OlN1YmltYWdlQ2FjaGVFbnRyeSYgZW50cnks
IGNvbnN0IFN1YmltYWdlUmVxdWVzdCYgcmVxdWVzdCwgdW5zaWduZWQgLypoYXNoQ29kZSovKQog
ICAgIHsKICAgICAgICAgZW50cnkuaW1hZ2UgPSByZXF1ZXN0LmltYWdlOwotICAgICAgICBlbnRy
eS5zdWJpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChyZXF1ZXN0
LmltYWdlLCByZXF1ZXN0LnJlY3QpKTsKKyAgICAgICAgZW50cnkuc3ViaW1hZ2UgPSBudWxscHRy
OwogICAgICAgICBlbnRyeS5yZWN0ID0gcmVxdWVzdC5yZWN0OwogICAgIH0KIH07CkBAIC0xMjgs
MTAgKzEyOCwxNiBAQCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gU3ViaW1hZ2VDYWNoZVdpdGhUaW1l
cjo6c3ViaW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgRgogCiAgICAgQVNTRVJUKG1fY2Fj
aGUuc2l6ZSgpIDwgbWF4U3ViaW1hZ2VDYWNoZVNpemUpOwogICAgIGF1dG8gcmVzdWx0ID0gbV9j
YWNoZS5hZGQ8U3ViaW1hZ2VDYWNoZUFkZGVyPihTdWJpbWFnZVJlcXVlc3QoaW1hZ2UsIHJlY3Qp
KTsKLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAgcmVzdWx0Lml0ZXJhdG9yLT5sYXN0
QWNjZXNzVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworCisgICAgaWYgKHJlc3VsdC5pc05l
d0VudHJ5KSB7CiAgICAgICAgIG1faW1hZ2VDb3VudHMuYWRkKGltYWdlKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC5pdGVyYXRvci0+aW1hZ2U7CisgICAgfQorCisgICAgaWYgKCFyZXN1bHQuaXRl
cmF0b3ItPnN1YmltYWdlKQorICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnN1YmltYWdlID0gYWRv
cHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCByZWN0KSk7CiAKLSAgICBy
ZXN1bHQuaXRlcmF0b3ItPmxhc3RBY2Nlc3NUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c3ViaW1hZ2U7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431271</attachid>
            <date>2021-06-13 02:08:15 -0700</date>
            <delta_ts>2021-06-13 19:56:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226916-20210613020814.patch</filename>
            <type>text/plain</type>
            <size>15384</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjdiODk2MDlmODU4ZDUx
ZjZhNjk0MmUyNzZkMmZhZDY0OGEwZWFkOC4uNWY4MzE1M2YxNTE4OTUwOGRhMGNhZWQ0MjA2MGIy
YjMyYWEyZDRkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIxLTA2LTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtDR10gQ3JlYXRlIGEg
c3ViLWltYWdlIHdoZW4gZHJhd2luZyBhbiBpbWFnZSBvbmx5IGlmIHRoZSBkZXN0aW5hdGlvbiBp
bWFnZSB3aWxsIGJlIGVubGFyZ2VkLCByb3RhdGVkIG9yIHNoZWFyZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjkxNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVSZWN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkVXNlU3ViaW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0U3ViaW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VM
b2dpY2FsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05h
dGl2ZUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmlu
ZVRyYW5zZm9ybS5oOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjppc1JvdGF0
ZU9yU2hlYXIgY29uc3QpOgorCiAyMDIxLTA2LTEwICBBcmNhZHkgR29sZG1pbnRzLU9ybG92ICA8
YWdvbGRtaW50c0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtDYWlyb10gRml4IFBhdGg6OmJvdW5k
aW5nUmVjdFNsb3dDYXNlIHdoZW4gdGhlIHBhdGggaXMgYSBzaW5nbGUgTW92ZVRvCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwCmluZGV4IGM3ZTFjYjJjYjVjMGQxOGFhODFiNTZiYzE3MzUzOGUyMzJhYzBj
NzMuLmI0MGQ2ZDIxMjI1MjU2YmIxNmZiNTljY2NiZWFhNDMzYmM1NjU4ZmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwCkBAIC0xNDM0LDE0ICsxNDM0LDYgQEAgc3RhdGljIGlubGluZSBGbG9hdFNp
emUgc2l6ZShUeXBlZE9NQ1NTSW1hZ2VWYWx1ZSYgaW1hZ2UpCiB9CiAjZW5kaWYKIAotc3RhdGlj
IGlubGluZSBGbG9hdFJlY3Qgbm9ybWFsaXplUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChzdGQ6Om1pbihyZWN0LngoKSwgcmVjdC5tYXhYKCkpLAot
ICAgICAgICBzdGQ6Om1pbihyZWN0LnkoKSwgcmVjdC5tYXhZKCkpLAotICAgICAgICBzdGQ6Om1h
eChyZWN0LndpZHRoKCksIC1yZWN0LndpZHRoKCkpLAotICAgICAgICBzdGQ6Om1heChyZWN0Lmhl
aWdodCgpLCAtcmVjdC5oZWlnaHQoKSkpOwotfQotCiBFeGNlcHRpb25Pcjx2b2lkPiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3SW1hZ2UoQ2FudmFzSW1hZ2VTb3VyY2UmJiBpbWFn
ZSwgZmxvYXQgZHgsIGZsb2F0IGR5KQogewogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGltYWdl
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKaW5k
ZXggZTY5NDM5NzA1YTU1NDk4ZmZmZDVlNTM4YWQwZDMxNzQ0MzMzZjIxZC4uMDFhOGYxMjhjNTMz
OWVmOWQ0NDZhYzcyM2Y3MTk2Njc2YWE3MzI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCkBAIC0yMzEsNiArMjMxLDE0IEBAIHZvaWQgRmxv
YXRSZWN0OjpmaXRUb1BvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2lu
dCYgcDEsIGNvbnN0IEZsCiAgICAgc2V0TG9jYXRpb25BbmRTaXplRnJvbUVkZ2VzKGxlZnQsIHRv
cCwgcmlnaHQsIGJvdHRvbSk7CiB9CiAKK0Zsb2F0UmVjdCBub3JtYWxpemVSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KHN0ZDo6bWluKHJlY3QueCgp
LCByZWN0Lm1heFgoKSksCisgICAgICAgIHN0ZDo6bWluKHJlY3QueSgpLCByZWN0Lm1heFkoKSks
CisgICAgICAgIHN0ZDo6bWF4KHJlY3Qud2lkdGgoKSwgLXJlY3Qud2lkdGgoKSksCisgICAgICAg
IHN0ZDo6bWF4KHJlY3QuaGVpZ2h0KCksIC1yZWN0LmhlaWdodCgpKSk7Cit9CisKIEZsb2F0UmVj
dCBlbmNsb3NlUmVjdFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IpCiB7CiAgICAgRmxvYXRQb2ludCBsb2NhdGlvbiA9IGZsb29yUG9p
bnRUb0RldmljZVBpeGVscyhyZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGRldmljZVNjYWxlRmFjdG9y
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKaW5kZXgg
YjA4NWFhYTk5ODMyNGI0NzllOTUxMTMxMjUzMDM3OWNkYTQxNmJlOC4uNDY2ZjEyY2MzNzE5YmI5
MWUyNTE2Y2YxMTYzZWY4NGIwMDA5ZWNiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmgKQEAgLTI4OSw2ICsyODksNyBAQCBpbmxpbmUgYm9vbCBGbG9h
dFJlY3Q6OmlzSW5maW5pdGUoKSBjb25zdAogICAgIHJldHVybiAqdGhpcyA9PSBpbmZpbml0ZVJl
Y3QoKTsKIH0KIAorRmxvYXRSZWN0IG5vcm1hbGl6ZVJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiBX
RUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgZW5jbG9zZVJlY3RUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvcik7CiBXRUJDT1JFX0VYUE9SVCBJbnRS
ZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiBXRUJDT1JFX0VYUE9SVCBJ
bnRSZWN0IHJvdW5kZWRJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
CmluZGV4IDY3ODMyYzJkODVkZGZmOTdjMDQ0ZTFhMmU0MTE2YjAzMGE5NjNkYzUuLmMwZTM1NjI1
YzFiYTI1ZTJjYjRhYzc2NGY5NjkyODVkY2E0ZjEyY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAg
LTIyNyw4NyArMjI3LDk2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnJlc3RvcmUoKQogICAg
IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNl
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRVc2VTdWJpbWFn
ZShDR0ludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0
Zm9ybUltYWdlKCk7CisgICAgaWYgKGludGVycG9sYXRpb25RdWFsaXR5ID09IGtDR0ludGVycG9s
YXRpb25Ob25lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHRyYW5zZm9ybS5pc1Jv
dGF0ZU9yU2hlYXIoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGRlc3RSZWN0
LndpZHRoKCkgKiB0cmFuc2Zvcm0ueFNjYWxlKCkgPiBzcmNSZWN0LndpZHRoKCkgfHwgZGVzdFJl
Y3QuaGVpZ2h0KCkgKiB0cmFuc2Zvcm0ueVNjYWxlKCkgPiBzcmNSZWN0LmhlaWdodCgpOworfQog
Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lID0gTW9ub3Rv
bmljVGltZTo6bm93KCk7CitzdGF0aWMgaW5saW5lIFJldGFpblB0cjxDR0ltYWdlUmVmPiBnZXRT
dWJpbWFnZShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBzdWJpbWFnZVJlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQoreworICAgIGF1dG8gcGh5c2ljYWxTdWJpbWFnZVJlY3QgPSBzdWJpbWFnZVJlY3Q7
CisKKyAgICBpZiAob3B0aW9ucy5vcmllbnRhdGlvbigpICE9IEltYWdlT3JpZW50YXRpb246Ok5v
bmUpIHsKKyAgICAgICAgLy8gc3ViaW1hZ2VSZWN0IGlzIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMu
IGdldFN1YmltYWdlKCkgZGVhbHMgd2l0aCBub25lLW9yaWVudGVkCisgICAgICAgIC8vIGltYWdl
LiBXZSBuZWVkIHRvIGNvbnZlcnQgc3ViaW1hZ2VSZWN0IHRvIHBoeXNpY2FsIGltYWdlIGNvb3Jk
aW5hdGVzLgorICAgICAgICBpZiAoYXV0byB0cmFuc2Zvcm0gPSBvcHRpb25zLm9yaWVudGF0aW9u
KCkudHJhbnNmb3JtRnJvbURlZmF1bHQoaW1hZ2VTaXplKS5pbnZlcnNlKCkpCisgICAgICAgICAg
ICBwaHlzaWNhbFN1YmltYWdlUmVjdCA9IHRyYW5zZm9ybS52YWx1ZSgpLm1hcFJlY3QocGh5c2lj
YWxTdWJpbWFnZVJlY3QpOworICAgIH0KKworI2lmIENBQ0hFX1NVQklNQUdFUworICAgIHJldHVy
biBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyOjpnZXRTdWJpbWFnZShpbWFnZSwgcGh5c2ljYWxTdWJp
bWFnZVJlY3QpOworI2Vsc2UKKyAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aElt
YWdlSW5SZWN0KGltYWdlLCBwaHlzaWNhbFN1YmltYWdlUmVjdCkpOwogI2VuZGlmCi0gICAgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IHN1YkltYWdlKGltYWdlKTsKK30KIAotICAgIGF1dG8gbG9naWNh
bEhlaWdodCA9IFsmXShDR0ltYWdlUmVmIGltYWdlKSB7Ci0gICAgICAgIHJldHVybiBvcHRpb25z
Lm9yaWVudGF0aW9uKCkudXNlc1dpZHRoQXNIZWlnaHQoKSA/IENHSW1hZ2VHZXRXaWR0aChpbWFn
ZSkgOiBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKLSAgICB9Oworc3RhdGljIGlubGluZSBGbG9h
dFNpemUgaW1hZ2VMb2dpY2FsU2l6ZShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFNpemUgc2l6ZSA9IEZsb2F0U2l6ZShD
R0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSk7CisgICAgcmV0
dXJuIG9wdGlvbnMub3JpZW50YXRpb24oKS51c2VzV2lkdGhBc0hlaWdodCgpID8gc2l6ZS50cmFu
c3Bvc2VkU2l6ZSgpIDogc2l6ZTsKK30KIAotICAgIGZsb2F0IGN1cnJIZWlnaHQgPSBsb2dpY2Fs
SGVpZ2h0KHN1YkltYWdlLmdldCgpKTsKLSAgICBpZiAoY3VyckhlaWdodCA8PSBzcmNSZWN0Lnko
KSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYg
bmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQoreworICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0Zm9y
bUltYWdlKCk7CisgICAgYXV0byBpbWFnZVJlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIGltYWdlU2l6
ZSB9OworICAgIGF1dG8gbm9ybWFsaXplZFNyY1JlY3QgPSBub3JtYWxpemVSZWN0KHNyY1JlY3Qp
OworICAgIGF1dG8gbm9ybWFsaXplZERlc3RSZWN0ID0gbm9ybWFsaXplUmVjdChkZXN0UmVjdCk7
CisKKyAgICBpZiAoIWltYWdlIHx8ICFpbWFnZVJlY3QuaW50ZXJzZWN0cyhub3JtYWxpemVkU3Jj
UmVjdCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0KCk7Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dDb250
ZXh0R2V0Q1RNKGNvbnRleHQpOworI2lmICFMT0dfRElTQUJMRUQKKyAgICBNb25vdG9uaWNUaW1l
IHN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworI2VuZGlmCisgICAgYXV0byBjb250
ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKGNvbnRleHQsIGZhbHNlKTsKLSAgICAKLSAgICBib29sIHNob3VsZFVzZVN1YmltYWdlID0g
ZmFsc2U7CisgICAgYXV0byB0cmFuc2Zvcm0gPSBDR0NvbnRleHRHZXRDVE0oY29udGV4dCk7CiAK
LSAgICAvLyBJZiB0aGUgc291cmNlIHJlY3QgaXMgYSBzdWJwb3J0aW9uIG9mIHRoZSBpbWFnZSwg
dGhlbiB3ZSBjb21wdXRlIGFuIGluZmxhdGVkIGRlc3RpbmF0aW9uIHJlY3QgdGhhdCB3aWxsIGhv
bGQgdGhlIGVudGlyZSBpbWFnZQotICAgIC8vIGFuZCB0aGVuIHNldCBhIGNsaXAgdG8gdGhlIHBv
cnRpb24gdGhhdCB3ZSB3YW50IHRvIGRpc3BsYXkuCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkRGVz
dFJlY3QgPSBkZXN0UmVjdDsKKyAgICBhdXRvIHN1YkltYWdlID0gaW1hZ2U7CisgICAgYXV0byBj
dXJyZW50SW1hZ2VTaXplID0gaW1hZ2VMb2dpY2FsU2l6ZShpbWFnZS5nZXQoKSwgb3B0aW9ucyk7
CiAKLSAgICBpZiAoc3JjUmVjdC5zaXplKCkgIT0gaW1hZ2VTaXplKSB7Ci0gICAgICAgIENHSW50
ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkgPSBDR0NvbnRleHRHZXRJbnRl
cnBvbGF0aW9uUXVhbGl0eShjb250ZXh0KTsKLSAgICAgICAgLy8gV2hlbiB0aGUgaW1hZ2UgaXMg
c2NhbGVkIHVzaW5nIGhpZ2gtcXVhbGl0eSBpbnRlcnBvbGF0aW9uLCB3ZSBjcmVhdGUgYSB0ZW1w
b3JhcnkgQ0dJbWFnZQotICAgICAgICAvLyBjb250YWluaW5nIG9ubHkgdGhlIHBvcnRpb24gd2Ug
d2FudCB0byBkaXNwbGF5LiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSBoaWdoLXF1YWxpdHkK
LSAgICAgICAgLy8gaW50ZXJwb2xhdGlvbiBzbW9vdGhlcyBzaGFycCBlZGdlcywgY2F1c2luZyBw
aXhlbHMgZnJvbSBvdXRzaWRlIHRoZSBzb3VyY2UgcmVjdCB0byBibGVlZAotICAgICAgICAvLyBp
bnRvIHRoZSBkZXN0aW5hdGlvbiByZWN0LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYxMTI5MDk+Lgot
ICAgICAgICBjb25zdCBmbG9hdCBtaW5pbXVtQXJlYUZvckludGVycG9sYXRpb24gPSA0MCAqIDQw
OwotICAgICAgICBmbG9hdCB4U2NhbGUgPSBzcmNSZWN0LndpZHRoKCkgLyBkZXN0UmVjdC53aWR0
aCgpOwotICAgICAgICBmbG9hdCB5U2NhbGUgPSBzcmNSZWN0LmhlaWdodCgpIC8gZGVzdFJlY3Qu
aGVpZ2h0KCk7Ci0gICAgICAgIHNob3VsZFVzZVN1YmltYWdlID0gKGludGVycG9sYXRpb25RdWFs
aXR5ICE9IGtDR0ludGVycG9sYXRpb25Ob25lKSAmJiAoeFNjYWxlIDwgMCB8fCB5U2NhbGUgPCAw
IHx8IGRlc3RSZWN0LmFyZWEoKSA+PSBtaW5pbXVtQXJlYUZvckludGVycG9sYXRpb24pICYmIChz
cmNSZWN0LnNpemUoKSAhPSBkZXN0UmVjdC5zaXplKCkgfHwgIWdldENUTSgpLmlzSWRlbnRpdHlP
clRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOwotICAgICAgICBpZiAoc2hvdWxkVXNlU3ViaW1hZ2Up
IHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBzdWJpbWFnZVJlY3QgPSBzcmNSZWN0OwotICAgICAg
ICAgICAgZmxvYXQgbGVmdFBhZGRpbmcgPSBzcmNSZWN0LngoKSAtIGZsb29yZihzcmNSZWN0Lngo
KSk7Ci0gICAgICAgICAgICBmbG9hdCB0b3BQYWRkaW5nID0gc3JjUmVjdC55KCkgLSBmbG9vcmYo
c3JjUmVjdC55KCkpOwotCi0gICAgICAgICAgICBzdWJpbWFnZVJlY3QubW92ZSgtbGVmdFBhZGRp
bmcsIC10b3BQYWRkaW5nKTsKLSAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3QubW92ZSgtbGVm
dFBhZGRpbmcgLyB4U2NhbGUsIC10b3BQYWRkaW5nIC8geVNjYWxlKTsKLQotICAgICAgICAgICAg
c3ViaW1hZ2VSZWN0LnNldFdpZHRoKGNlaWxmKHN1YmltYWdlUmVjdC53aWR0aCgpICsgbGVmdFBh
ZGRpbmcpKTsKLSAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0V2lkdGgoc3ViaW1hZ2VS
ZWN0LndpZHRoKCkgLyB4U2NhbGUpOwotCi0gICAgICAgICAgICBzdWJpbWFnZVJlY3Quc2V0SGVp
Z2h0KGNlaWxmKHN1YmltYWdlUmVjdC5oZWlnaHQoKSArIHRvcFBhZGRpbmcpKTsKLSAgICAgICAg
ICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0SGVpZ2h0KHN1YmltYWdlUmVjdC5oZWlnaHQoKSAvIHlT
Y2FsZSk7Ci0KLSAgICAgICAgICAgIC8vIHN1YmltYWdlUmVjdCBpcyBpbiBsb2dpY2FsIGNvb3Jk
aW5hdGVzLiBnZXRTdWJpbWFnZSgpIGRlYWxzIHdpdGggbm9uZS1vcmllbnRlZAotICAgICAgICAg
ICAgLy8gaW1hZ2UuIFdlIG5lZWQgdG8gY29udmVydCBzdWJpbWFnZVJlY3QgdG8gcGh5c2ljYWwg
aW1hZ2UgY29vcmRpbmF0ZXMuCi0gICAgICAgICAgICBpZiAob3B0aW9ucy5vcmllbnRhdGlvbigp
ICE9IEltYWdlT3JpZW50YXRpb246Ok5vbmUpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byB0
cmFuc2Zvcm0gPSBvcHRpb25zLm9yaWVudGF0aW9uKCkudHJhbnNmb3JtRnJvbURlZmF1bHQoaW1h
Z2VTaXplKS5pbnZlcnNlKCkpCi0gICAgICAgICAgICAgICAgICAgIHN1YmltYWdlUmVjdCA9IHRy
YW5zZm9ybS52YWx1ZSgpLm1hcFJlY3Qoc3ViaW1hZ2VSZWN0KTsKLSAgICAgICAgICAgIH0KKyAg
ICBhdXRvIGFkanVzdGVkRGVzdFJlY3QgPSBub3JtYWxpemVkRGVzdFJlY3Q7CiAKLSNpZiBDQUNI
RV9TVUJJTUFHRVMKLSAgICAgICAgICAgIHN1YkltYWdlID0gU3ViaW1hZ2VDYWNoZVdpdGhUaW1l
cjo6Z2V0U3ViaW1hZ2Uoc3ViSW1hZ2UuZ2V0KCksIHN1YmltYWdlUmVjdCk7Ci0jZWxzZQotICAg
ICAgICAgICAgc3ViSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3Qo
c3ViSW1hZ2UuZ2V0KCksIHN1YmltYWdlUmVjdCkpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAo
Y3VyckhlaWdodCA8IHNyY1JlY3QubWF4WSgpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGxv
Z2ljYWxIZWlnaHQoc3ViSW1hZ2UuZ2V0KCkpID09IGN1cnJIZWlnaHQgLSBDR1JlY3RJbnRlZ3Jh
bChzcmNSZWN0KS5vcmlnaW4ueSk7Ci0gICAgICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5z
ZXRIZWlnaHQobG9naWNhbEhlaWdodChzdWJJbWFnZS5nZXQoKSkgLyB5U2NhbGUpOworICAgIGlm
IChub3JtYWxpemVkU3JjUmVjdCAhPSBpbWFnZVJlY3QpIHsKKyAgICAgICAgQ0dJbnRlcnBvbGF0
aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eSA9IENHQ29udGV4dEdldEludGVycG9sYXRp
b25RdWFsaXR5KGNvbnRleHQpOworICAgICAgICBhdXRvIHNjYWxlID0gbm9ybWFsaXplZERlc3RS
ZWN0LnNpemUoKSAvIG5vcm1hbGl6ZWRTcmNSZWN0LnNpemUoKTsKKworICAgICAgICBpZiAoc2hv
dWxkVXNlU3ViaW1hZ2UoaW50ZXJwb2xhdGlvblF1YWxpdHksIG5vcm1hbGl6ZWREZXN0UmVjdCwg
bm9ybWFsaXplZFNyY1JlY3QsIHRyYW5zZm9ybSkpIHsKKyAgICAgICAgICAgIGF1dG8gc3ViaW1h
Z2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChub3JtYWxpemVkU3JjUmVjdCk7CisKKyAgICAgICAg
ICAgIC8vIFdoZW4gdGhlIGltYWdlIGlzIHNjYWxlZCB1c2luZyBoaWdoLXF1YWxpdHkgaW50ZXJw
b2xhdGlvbiwgd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IENHSW1hZ2UKKyAgICAgICAgICAgIC8vIGNv
bnRhaW5pbmcgb25seSB0aGUgcG9ydGlvbiB3ZSB3YW50IHRvIGRpc3BsYXkuIFdlIG5lZWQgdG8g
ZG8gdGhpcyBiZWNhdXNlIGhpZ2gtcXVhbGl0eQorICAgICAgICAgICAgLy8gaW50ZXJwb2xhdGlv
biBzbW9vdGhlcyBzaGFycCBlZGdlcywgY2F1c2luZyBwaXhlbHMgZnJvbSBvdXRzaWRlIHRoZSBz
b3VyY2UgcmVjdCB0byBibGVlZAorICAgICAgICAgICAgLy8gaW50byB0aGUgZGVzdGluYXRpb24g
cmVjdC4gU2VlIDxyZGFyOi8vcHJvYmxlbS82MTEyOTA5Pi4KKyAgICAgICAgICAgIHN1YkltYWdl
ID0gZ2V0U3ViaW1hZ2Uoc3ViSW1hZ2UuZ2V0KCksIGltYWdlU2l6ZSwgc3ViaW1hZ2VSZWN0LCBv
cHRpb25zKTsKKyAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KGFkanVzdGVkRGVzdFJlY3QpOworCisgICAgICAgICAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgb25s
eSBwYXJ0aWFsbHkgbG9hZGVkLCB0aGVuIHNocmluayB0aGUgZGVzdGluYXRpb24gcmVjdCB0aGF0
IHdlJ3JlIGRyYXdpbmcKKyAgICAgICAgICAgIC8vIGludG8gYWNjb3JkaW5nbHkuCisgICAgICAg
ICAgICBpZiAoY3VycmVudEltYWdlU2l6ZS5oZWlnaHQoKSA8IG5vcm1hbGl6ZWRTcmNSZWN0Lm1h
eFkoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gY3VycmVudFN1YmltYWdlU2l6ZSA9IGltYWdl
TG9naWNhbFNpemUoc3ViSW1hZ2UuZ2V0KCksIG9wdGlvbnMpOworICAgICAgICAgICAgICAgIGFk
anVzdGVkRGVzdFJlY3Quc2V0SGVpZ2h0KGN1cnJlbnRTdWJpbWFnZVNpemUuaGVpZ2h0KCkgKiBz
Y2FsZS5oZWlnaHQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBhZGp1c3RlZERlc3RSZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoZGVzdFJlY3QueCgp
IC0gc3JjUmVjdC54KCkgLyB4U2NhbGUsIGRlc3RSZWN0LnkoKSAtIHNyY1JlY3QueSgpIC8geVNj
YWxlKSk7Ci0gICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldFNpemUoRmxvYXRTaXplKGlt
YWdlU2l6ZS53aWR0aCgpIC8geFNjYWxlLCBpbWFnZVNpemUuaGVpZ2h0KCkgLyB5U2NhbGUpKTsK
KyAgICAgICAgICAgIC8vIElmIHRoZSBzb3VyY2UgcmVjdCBpcyBhIHN1YnBvcnRpb24gb2YgdGhl
IGltYWdlLCB0aGVuIHdlIGNvbXB1dGUgYW4gaW5mbGF0ZWQgZGVzdGluYXRpb24gcmVjdAorICAg
ICAgICAgICAgLy8gdGhhdCB3aWxsIGhvbGQgdGhlIGVudGlyZSBpbWFnZSBhbmQgdGhlbiBzZXQg
YSBjbGlwIHRvIHRoZSBwb3J0aW9uIHRoYXQgd2Ugd2FudCB0byBkaXNwbGF5LgorICAgICAgICAg
ICAgYWRqdXN0ZWREZXN0UmVjdCA9IHsgYWRqdXN0ZWREZXN0UmVjdC5sb2NhdGlvbigpIC0gdG9G
bG9hdFNpemUobm9ybWFsaXplZFNyY1JlY3QubG9jYXRpb24oKSkgKiBzY2FsZSwgaW1hZ2VTaXpl
ICogc2NhbGUgfTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghZGVzdFJlY3QuY29udGFpbnMo
YWRqdXN0ZWREZXN0UmVjdCkpIHsKKyAgICAgICAgaWYgKCFub3JtYWxpemVkRGVzdFJlY3QuY29u
dGFpbnMoYWRqdXN0ZWREZXN0UmVjdCkpIHsKICAgICAgICAgICAgIHN0YXRlU2F2ZXIuc2F2ZSgp
OwotICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBkZXN0UmVjdCk7Cisg
ICAgICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIG5vcm1hbGl6ZWREZXN0UmVj
dCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgb25seSBwYXJ0
aWFsbHkgbG9hZGVkLCB0aGVuIHNocmluayB0aGUgZGVzdGluYXRpb24gcmVjdCB0aGF0IHdlJ3Jl
IGRyYXdpbmcgaW50byBhY2NvcmRpbmdseS4KLSAgICBpZiAoIXNob3VsZFVzZVN1YmltYWdlICYm
IGN1cnJIZWlnaHQgPCBpbWFnZVNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGFkanVzdGVkRGVzdFJl
Y3Quc2V0SGVpZ2h0KGFkanVzdGVkRGVzdFJlY3QuaGVpZ2h0KCkgKiBjdXJySGVpZ2h0IC8gaW1h
Z2VTaXplLmhlaWdodCgpKTsKKyAgICBpZiAoc3ViSW1hZ2UgPT0gaW1hZ2UgJiYgY3VycmVudElt
YWdlU2l6ZS5oZWlnaHQoKSA8IGltYWdlU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgYWRqdXN0ZWRE
ZXN0UmVjdC5zZXRIZWlnaHQoYWRqdXN0ZWREZXN0UmVjdC5oZWlnaHQoKSAqIGN1cnJlbnRJbWFn
ZVNpemUuaGVpZ2h0KCkgLyBpbWFnZVNpemUuaGVpZ2h0KCkpOwogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBib29sIHdhc0FudGlhbGlhc2VkID0gQ0dDb250ZXh0R2V0U2hvdWxkQW50
aWFsaWFzKGNvbnRleHQpOwpAQCAtMzIyLDE3ICszMzEsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxv
YXRTaXoKICAgICBhdXRvIG9sZEJsZW5kTW9kZSA9IGJsZW5kTW9kZU9wZXJhdGlvbigpOwogICAg
IHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlv
bnMuYmxlbmRNb2RlKCkpOwogCi0gICAgLy8gSW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRoZSBv
cmlnaW4gdG8gYmUgYXQgKDAsIDApCisgICAgLy8gTWFrZSB0aGUgb3JpZ2luIGJlIGF0IGFkanVz
dGVkRGVzdFJlY3QubG9jYXRpb24oKQogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0
LCBhZGp1c3RlZERlc3RSZWN0LngoKSwgYWRqdXN0ZWREZXN0UmVjdC55KCkpOwotICAgIGFkanVz
dGVkRGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKKyAgICBhZGp1c3RlZERlc3RS
ZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQ6Onplcm8oKSk7CiAKICAgICBpZiAob3B0aW9ucy5v
cmllbnRhdGlvbigpICE9IEltYWdlT3JpZW50YXRpb246Ok5vbmUpIHsKICAgICAgICAgQ0dDb250
ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG9wdGlvbnMub3JpZW50YXRpb24oKS50cmFuc2Zvcm1Gcm9t
RGVmYXVsdChhZGp1c3RlZERlc3RSZWN0LnNpemUoKSkpOwotICAgICAgICBpZiAob3B0aW9ucy5v
cmllbnRhdGlvbigpLnVzZXNXaWR0aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBk
ZXN0aW5hdGlvbiByZWN0IHdpbGwgaGF2ZSBpdHMgd2lkdGggYW5kIGhlaWdodCBhbHJlYWR5IHJl
dmVyc2VkIGZvciB0aGUgb3JpZW50YXRpb24gb2YKLSAgICAgICAgICAgIC8vIHRoZSBpbWFnZSwg
YXMgaXQgd2FzIG5lZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJzZSBp
dCBiYWNrIGhlcmUuCi0gICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0ID0gRmxvYXRSZWN0KGFk
anVzdGVkRGVzdFJlY3QueCgpLCBhZGp1c3RlZERlc3RSZWN0LnkoKSwgYWRqdXN0ZWREZXN0UmVj
dC5oZWlnaHQoKSwgYWRqdXN0ZWREZXN0UmVjdC53aWR0aCgpKTsKLSAgICAgICAgfQorCisgICAg
ICAgIC8vIFRoZSBkZXN0aW5hdGlvbiByZWN0IHdpbGwgaGF2ZSBpdHMgd2lkdGggYW5kIGhlaWdo
dCBhbHJlYWR5IHJldmVyc2VkIGZvciB0aGUgb3JpZW50YXRpb24gb2YKKyAgICAgICAgLy8gdGhl
IGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2UgbmVlZCB0byBy
ZXZlcnNlIGl0IGJhY2sgaGVyZS4KKyAgICAgICAgaWYgKG9wdGlvbnMub3JpZW50YXRpb24oKS51
c2VzV2lkdGhBc0hlaWdodCgpKQorICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdCA9IGFkanVz
dGVkRGVzdFJlY3QudHJhbnNwb3NlZFJlY3QoKTsKICAgICB9CiAgICAgCiAgICAgLy8gRmxpcCB0
aGUgY29vcmRzLgpAQCAtMzQxLDcgKzM1MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRy
YXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6CiAK
ICAgICAvLyBEcmF3IHRoZSBpbWFnZS4KICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwg
YWRqdXN0ZWREZXN0UmVjdCwgc3ViSW1hZ2UuZ2V0KCkpOwotICAgIAorCiAgICAgaWYgKCFzdGF0
ZVNhdmVyLmRpZFNhdmUoKSkgewogICAgICAgICBDR0NvbnRleHRTZXRDVE0oY29udGV4dCwgdHJh
bnNmb3JtKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3Jt
LmgKaW5kZXggNDI3Y2YyNzZiOTgwZGEyMWIxOWYzMWMzMzFhYTcxYWQ2MjZiNzE1My4uMzY1ZGIw
OTU5NGUwZDZiOTAwM2Q3NWNlMTNlNmE1Y2UyODk5MmYwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5z
Zm9ybS5oCkBAIC0xNDcsNiArMTQ3LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVy
biBtX3RyYW5zZm9ybVswXSA9PSAxICYmIG1fdHJhbnNmb3JtWzFdID09IDAgJiYgbV90cmFuc2Zv
cm1bMl0gPT0gMCAmJiAobV90cmFuc2Zvcm1bM10gPT0gMSB8fCBtX3RyYW5zZm9ybVszXSA9PSAt
MSk7CiAgICAgfQorICAgIAorICAgIGJvb2wgaXNSb3RhdGVPclNoZWFyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3RyYW5zZm9ybVsxXSB8fCBtX3RyYW5zZm9ybVsyXTsKKyAgICB9
CiAKICAgICBib29sIHByZXNlcnZlc0F4aXNBbGlnbm1lbnQoKSBjb25zdAogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431298</attachid>
            <date>2021-06-13 19:56:12 -0700</date>
            <delta_ts>2021-06-13 23:45:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226916-20210613195611.patch</filename>
            <type>text/plain</type>
            <size>15477</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjdiODk2MDlmODU4ZDUx
ZjZhNjk0MmUyNzZkMmZhZDY0OGEwZWFkOC4uNWY4MzE1M2YxNTE4OTUwOGRhMGNhZWQ0MjA2MGIy
YjMyYWEyZDRkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIxLTA2LTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtDR10gQ3JlYXRlIGEg
c3ViLWltYWdlIHdoZW4gZHJhd2luZyBhbiBpbWFnZSBvbmx5IGlmIHRoZSBkZXN0aW5hdGlvbiBp
bWFnZSB3aWxsIGJlIGVubGFyZ2VkLCByb3RhdGVkIG9yIHNoZWFyZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjkxNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVSZWN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkVXNlU3ViaW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0U3ViaW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VM
b2dpY2FsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05h
dGl2ZUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmlu
ZVRyYW5zZm9ybS5oOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjppc1JvdGF0
ZU9yU2hlYXIgY29uc3QpOgorCiAyMDIxLTA2LTEwICBBcmNhZHkgR29sZG1pbnRzLU9ybG92ICA8
YWdvbGRtaW50c0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtDYWlyb10gRml4IFBhdGg6OmJvdW5k
aW5nUmVjdFNsb3dDYXNlIHdoZW4gdGhlIHBhdGggaXMgYSBzaW5nbGUgTW92ZVRvCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwCmluZGV4IGM3ZTFjYjJjYjVjMGQxOGFhODFiNTZiYzE3MzUzOGUyMzJhYzBj
NzMuLmI0MGQ2ZDIxMjI1MjU2YmIxNmZiNTljY2NiZWFhNDMzYmM1NjU4ZmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwCkBAIC0xNDM0LDE0ICsxNDM0LDYgQEAgc3RhdGljIGlubGluZSBGbG9hdFNp
emUgc2l6ZShUeXBlZE9NQ1NTSW1hZ2VWYWx1ZSYgaW1hZ2UpCiB9CiAjZW5kaWYKIAotc3RhdGlj
IGlubGluZSBGbG9hdFJlY3Qgbm9ybWFsaXplUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChzdGQ6Om1pbihyZWN0LngoKSwgcmVjdC5tYXhYKCkpLAot
ICAgICAgICBzdGQ6Om1pbihyZWN0LnkoKSwgcmVjdC5tYXhZKCkpLAotICAgICAgICBzdGQ6Om1h
eChyZWN0LndpZHRoKCksIC1yZWN0LndpZHRoKCkpLAotICAgICAgICBzdGQ6Om1heChyZWN0Lmhl
aWdodCgpLCAtcmVjdC5oZWlnaHQoKSkpOwotfQotCiBFeGNlcHRpb25Pcjx2b2lkPiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3SW1hZ2UoQ2FudmFzSW1hZ2VTb3VyY2UmJiBpbWFn
ZSwgZmxvYXQgZHgsIGZsb2F0IGR5KQogewogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGltYWdl
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKaW5k
ZXggZTY5NDM5NzA1YTU1NDk4ZmZmZDVlNTM4YWQwZDMxNzQ0MzMzZjIxZC4uMDFhOGYxMjhjNTMz
OWVmOWQ0NDZhYzcyM2Y3MTk2Njc2YWE3MzI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCkBAIC0yMzEsNiArMjMxLDE0IEBAIHZvaWQgRmxv
YXRSZWN0OjpmaXRUb1BvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2lu
dCYgcDEsIGNvbnN0IEZsCiAgICAgc2V0TG9jYXRpb25BbmRTaXplRnJvbUVkZ2VzKGxlZnQsIHRv
cCwgcmlnaHQsIGJvdHRvbSk7CiB9CiAKK0Zsb2F0UmVjdCBub3JtYWxpemVSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KHN0ZDo6bWluKHJlY3QueCgp
LCByZWN0Lm1heFgoKSksCisgICAgICAgIHN0ZDo6bWluKHJlY3QueSgpLCByZWN0Lm1heFkoKSks
CisgICAgICAgIHN0ZDo6bWF4KHJlY3Qud2lkdGgoKSwgLXJlY3Qud2lkdGgoKSksCisgICAgICAg
IHN0ZDo6bWF4KHJlY3QuaGVpZ2h0KCksIC1yZWN0LmhlaWdodCgpKSk7Cit9CisKIEZsb2F0UmVj
dCBlbmNsb3NlUmVjdFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IpCiB7CiAgICAgRmxvYXRQb2ludCBsb2NhdGlvbiA9IGZsb29yUG9p
bnRUb0RldmljZVBpeGVscyhyZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGRldmljZVNjYWxlRmFjdG9y
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKaW5kZXgg
YjA4NWFhYTk5ODMyNGI0NzllOTUxMTMxMjUzMDM3OWNkYTQxNmJlOC4uNDY2ZjEyY2MzNzE5YmI5
MWUyNTE2Y2YxMTYzZWY4NGIwMDA5ZWNiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmgKQEAgLTI4OSw2ICsyODksNyBAQCBpbmxpbmUgYm9vbCBGbG9h
dFJlY3Q6OmlzSW5maW5pdGUoKSBjb25zdAogICAgIHJldHVybiAqdGhpcyA9PSBpbmZpbml0ZVJl
Y3QoKTsKIH0KIAorRmxvYXRSZWN0IG5vcm1hbGl6ZVJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiBX
RUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgZW5jbG9zZVJlY3RUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvcik7CiBXRUJDT1JFX0VYUE9SVCBJbnRS
ZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiBXRUJDT1JFX0VYUE9SVCBJ
bnRSZWN0IHJvdW5kZWRJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
CmluZGV4IDY3ODMyYzJkODVkZGZmOTdjMDQ0ZTFhMmU0MTE2YjAzMGE5NjNkYzUuLjAyMDc5OWM3
NGEyOTAyZTIyYzI0MDY3NzNhYjQ0YTllMjQ4NGNiNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAg
LTIyNyw4NyArMjI3LDk4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnJlc3RvcmUoKQogICAg
IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNl
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRVc2VTdWJpbWFn
ZShDR0ludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0
Zm9ybUltYWdlKCk7CisgICAgaWYgKGludGVycG9sYXRpb25RdWFsaXR5ID09IGtDR0ludGVycG9s
YXRpb25Ob25lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHRyYW5zZm9ybS5pc1Jv
dGF0ZU9yU2hlYXIoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgYXV0byB4U2NhbGUgPSBk
ZXN0UmVjdC53aWR0aCgpICogdHJhbnNmb3JtLnhTY2FsZSgpIC8gc3JjUmVjdC53aWR0aCgpOwor
ICAgIGF1dG8geVNjYWxlID0gZGVzdFJlY3QuaGVpZ2h0KCkgKiB0cmFuc2Zvcm0ueVNjYWxlKCkg
LyBzcmNSZWN0LmhlaWdodCgpOworICAgIHJldHVybiAhV1RGOjphcmVFc3NlbnRpYWxseUVxdWFs
KHhTY2FsZSwgeVNjYWxlKSB8fCB4U2NhbGUgPiAxOworfQogCi0jaWYgIUxPR19ESVNBQkxFRAot
ICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CitzdGF0
aWMgaW5saW5lIFJldGFpblB0cjxDR0ltYWdlUmVmPiBnZXRTdWJpbWFnZShDR0ltYWdlUmVmIGlt
YWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBzdWJpbWFn
ZVJlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGF1dG8g
cGh5c2ljYWxTdWJpbWFnZVJlY3QgPSBzdWJpbWFnZVJlY3Q7CisKKyAgICBpZiAob3B0aW9ucy5v
cmllbnRhdGlvbigpICE9IEltYWdlT3JpZW50YXRpb246Ok5vbmUpIHsKKyAgICAgICAgLy8gc3Vi
aW1hZ2VSZWN0IGlzIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMuIGdldFN1YmltYWdlKCkgZGVhbHMg
d2l0aCBub25lLW9yaWVudGVkCisgICAgICAgIC8vIGltYWdlLiBXZSBuZWVkIHRvIGNvbnZlcnQg
c3ViaW1hZ2VSZWN0IHRvIHBoeXNpY2FsIGltYWdlIGNvb3JkaW5hdGVzLgorICAgICAgICBpZiAo
YXV0byB0cmFuc2Zvcm0gPSBvcHRpb25zLm9yaWVudGF0aW9uKCkudHJhbnNmb3JtRnJvbURlZmF1
bHQoaW1hZ2VTaXplKS5pbnZlcnNlKCkpCisgICAgICAgICAgICBwaHlzaWNhbFN1YmltYWdlUmVj
dCA9IHRyYW5zZm9ybS52YWx1ZSgpLm1hcFJlY3QocGh5c2ljYWxTdWJpbWFnZVJlY3QpOworICAg
IH0KKworI2lmIENBQ0hFX1NVQklNQUdFUworICAgIHJldHVybiBTdWJpbWFnZUNhY2hlV2l0aFRp
bWVyOjpnZXRTdWJpbWFnZShpbWFnZSwgcGh5c2ljYWxTdWJpbWFnZVJlY3QpOworI2Vsc2UKKyAg
ICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBwaHlz
aWNhbFN1YmltYWdlUmVjdCkpOwogI2VuZGlmCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHN1
YkltYWdlKGltYWdlKTsKK30KIAotICAgIGF1dG8gbG9naWNhbEhlaWdodCA9IFsmXShDR0ltYWdl
UmVmIGltYWdlKSB7Ci0gICAgICAgIHJldHVybiBvcHRpb25zLm9yaWVudGF0aW9uKCkudXNlc1dp
ZHRoQXNIZWlnaHQoKSA/IENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgOiBDR0ltYWdlR2V0SGVpZ2h0
KGltYWdlKTsKLSAgICB9Oworc3RhdGljIGlubGluZSBGbG9hdFNpemUgaW1hZ2VMb2dpY2FsU2l6
ZShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
K3sKKyAgICBGbG9hdFNpemUgc2l6ZSA9IEZsb2F0U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2Up
LCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSk7CisgICAgcmV0dXJuIG9wdGlvbnMub3JpZW50YXRp
b24oKS51c2VzV2lkdGhBc0hlaWdodCgpID8gc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpIDogc2l6ZTsK
K30KIAotICAgIGZsb2F0IGN1cnJIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KHN1YkltYWdlLmdldCgp
KTsKLSAgICBpZiAoY3VyckhlaWdodCA8PSBzcmNSZWN0LnkoKSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorewor
ICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCk7CisgICAgYXV0byBp
bWFnZVJlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIGltYWdlU2l6ZSB9OworICAgIGF1dG8gbm9ybWFs
aXplZFNyY1JlY3QgPSBub3JtYWxpemVSZWN0KHNyY1JlY3QpOworICAgIGF1dG8gbm9ybWFsaXpl
ZERlc3RSZWN0ID0gbm9ybWFsaXplUmVjdChkZXN0UmVjdCk7CisKKyAgICBpZiAoIWltYWdlIHx8
ICFpbWFnZVJlY3QuaW50ZXJzZWN0cyhub3JtYWxpemVkU3JjUmVjdCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAg
Q0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpOwor
I2lmICFMT0dfRElTQUJMRUQKKyAgICBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOworI2VuZGlmCisgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGZhbHNlKTsK
LSAgICAKLSAgICBib29sIHNob3VsZFVzZVN1YmltYWdlID0gZmFsc2U7CisgICAgYXV0byB0cmFu
c2Zvcm0gPSBDR0NvbnRleHRHZXRDVE0oY29udGV4dCk7CiAKLSAgICAvLyBJZiB0aGUgc291cmNl
IHJlY3QgaXMgYSBzdWJwb3J0aW9uIG9mIHRoZSBpbWFnZSwgdGhlbiB3ZSBjb21wdXRlIGFuIGlu
ZmxhdGVkIGRlc3RpbmF0aW9uIHJlY3QgdGhhdCB3aWxsIGhvbGQgdGhlIGVudGlyZSBpbWFnZQot
ICAgIC8vIGFuZCB0aGVuIHNldCBhIGNsaXAgdG8gdGhlIHBvcnRpb24gdGhhdCB3ZSB3YW50IHRv
IGRpc3BsYXkuCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkRGVzdFJlY3QgPSBkZXN0UmVjdDsKKyAg
ICBhdXRvIHN1YkltYWdlID0gaW1hZ2U7CisgICAgYXV0byBjdXJyZW50SW1hZ2VTaXplID0gaW1h
Z2VMb2dpY2FsU2l6ZShpbWFnZS5nZXQoKSwgb3B0aW9ucyk7CiAKLSAgICBpZiAoc3JjUmVjdC5z
aXplKCkgIT0gaW1hZ2VTaXplKSB7Ci0gICAgICAgIENHSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50
ZXJwb2xhdGlvblF1YWxpdHkgPSBDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250
ZXh0KTsKLSAgICAgICAgLy8gV2hlbiB0aGUgaW1hZ2UgaXMgc2NhbGVkIHVzaW5nIGhpZ2gtcXVh
bGl0eSBpbnRlcnBvbGF0aW9uLCB3ZSBjcmVhdGUgYSB0ZW1wb3JhcnkgQ0dJbWFnZQotICAgICAg
ICAvLyBjb250YWluaW5nIG9ubHkgdGhlIHBvcnRpb24gd2Ugd2FudCB0byBkaXNwbGF5LiBXZSBu
ZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSBoaWdoLXF1YWxpdHkKLSAgICAgICAgLy8gaW50ZXJwb2xh
dGlvbiBzbW9vdGhlcyBzaGFycCBlZGdlcywgY2F1c2luZyBwaXhlbHMgZnJvbSBvdXRzaWRlIHRo
ZSBzb3VyY2UgcmVjdCB0byBibGVlZAotICAgICAgICAvLyBpbnRvIHRoZSBkZXN0aW5hdGlvbiBy
ZWN0LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYxMTI5MDk+LgotICAgICAgICBjb25zdCBmbG9hdCBt
aW5pbXVtQXJlYUZvckludGVycG9sYXRpb24gPSA0MCAqIDQwOwotICAgICAgICBmbG9hdCB4U2Nh
bGUgPSBzcmNSZWN0LndpZHRoKCkgLyBkZXN0UmVjdC53aWR0aCgpOwotICAgICAgICBmbG9hdCB5
U2NhbGUgPSBzcmNSZWN0LmhlaWdodCgpIC8gZGVzdFJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgIHNo
b3VsZFVzZVN1YmltYWdlID0gKGludGVycG9sYXRpb25RdWFsaXR5ICE9IGtDR0ludGVycG9sYXRp
b25Ob25lKSAmJiAoeFNjYWxlIDwgMCB8fCB5U2NhbGUgPCAwIHx8IGRlc3RSZWN0LmFyZWEoKSA+
PSBtaW5pbXVtQXJlYUZvckludGVycG9sYXRpb24pICYmIChzcmNSZWN0LnNpemUoKSAhPSBkZXN0
UmVjdC5zaXplKCkgfHwgIWdldENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVk
KCkpOwotICAgICAgICBpZiAoc2hvdWxkVXNlU3ViaW1hZ2UpIHsKLSAgICAgICAgICAgIEZsb2F0
UmVjdCBzdWJpbWFnZVJlY3QgPSBzcmNSZWN0OwotICAgICAgICAgICAgZmxvYXQgbGVmdFBhZGRp
bmcgPSBzcmNSZWN0LngoKSAtIGZsb29yZihzcmNSZWN0LngoKSk7Ci0gICAgICAgICAgICBmbG9h
dCB0b3BQYWRkaW5nID0gc3JjUmVjdC55KCkgLSBmbG9vcmYoc3JjUmVjdC55KCkpOwotCi0gICAg
ICAgICAgICBzdWJpbWFnZVJlY3QubW92ZSgtbGVmdFBhZGRpbmcsIC10b3BQYWRkaW5nKTsKLSAg
ICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3QubW92ZSgtbGVmdFBhZGRpbmcgLyB4U2NhbGUsIC10
b3BQYWRkaW5nIC8geVNjYWxlKTsKLQotICAgICAgICAgICAgc3ViaW1hZ2VSZWN0LnNldFdpZHRo
KGNlaWxmKHN1YmltYWdlUmVjdC53aWR0aCgpICsgbGVmdFBhZGRpbmcpKTsKLSAgICAgICAgICAg
IGFkanVzdGVkRGVzdFJlY3Quc2V0V2lkdGgoc3ViaW1hZ2VSZWN0LndpZHRoKCkgLyB4U2NhbGUp
OwotCi0gICAgICAgICAgICBzdWJpbWFnZVJlY3Quc2V0SGVpZ2h0KGNlaWxmKHN1YmltYWdlUmVj
dC5oZWlnaHQoKSArIHRvcFBhZGRpbmcpKTsKLSAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Qu
c2V0SGVpZ2h0KHN1YmltYWdlUmVjdC5oZWlnaHQoKSAvIHlTY2FsZSk7Ci0KLSAgICAgICAgICAg
IC8vIHN1YmltYWdlUmVjdCBpcyBpbiBsb2dpY2FsIGNvb3JkaW5hdGVzLiBnZXRTdWJpbWFnZSgp
IGRlYWxzIHdpdGggbm9uZS1vcmllbnRlZAotICAgICAgICAgICAgLy8gaW1hZ2UuIFdlIG5lZWQg
dG8gY29udmVydCBzdWJpbWFnZVJlY3QgdG8gcGh5c2ljYWwgaW1hZ2UgY29vcmRpbmF0ZXMuCi0g
ICAgICAgICAgICBpZiAob3B0aW9ucy5vcmllbnRhdGlvbigpICE9IEltYWdlT3JpZW50YXRpb246
Ok5vbmUpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byB0cmFuc2Zvcm0gPSBvcHRpb25zLm9y
aWVudGF0aW9uKCkudHJhbnNmb3JtRnJvbURlZmF1bHQoaW1hZ2VTaXplKS5pbnZlcnNlKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHN1YmltYWdlUmVjdCA9IHRyYW5zZm9ybS52YWx1ZSgpLm1hcFJl
Y3Qoc3ViaW1hZ2VSZWN0KTsKLSAgICAgICAgICAgIH0KKyAgICBhdXRvIGFkanVzdGVkRGVzdFJl
Y3QgPSBub3JtYWxpemVkRGVzdFJlY3Q7CiAKLSNpZiBDQUNIRV9TVUJJTUFHRVMKLSAgICAgICAg
ICAgIHN1YkltYWdlID0gU3ViaW1hZ2VDYWNoZVdpdGhUaW1lcjo6Z2V0U3ViaW1hZ2Uoc3ViSW1h
Z2UuZ2V0KCksIHN1YmltYWdlUmVjdCk7Ci0jZWxzZQotICAgICAgICAgICAgc3ViSW1hZ2UgPSBh
ZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3Qoc3ViSW1hZ2UuZ2V0KCksIHN1Ymlt
YWdlUmVjdCkpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoY3VyckhlaWdodCA8IHNyY1JlY3Qu
bWF4WSgpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGxvZ2ljYWxIZWlnaHQoc3ViSW1hZ2Uu
Z2V0KCkpID09IGN1cnJIZWlnaHQgLSBDR1JlY3RJbnRlZ3JhbChzcmNSZWN0KS5vcmlnaW4ueSk7
Ci0gICAgICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQobG9naWNhbEhlaWdo
dChzdWJJbWFnZS5nZXQoKSkgLyB5U2NhbGUpOworICAgIGlmIChub3JtYWxpemVkU3JjUmVjdCAh
PSBpbWFnZVJlY3QpIHsKKyAgICAgICAgQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0
aW9uUXVhbGl0eSA9IENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQpOwor
ICAgICAgICBhdXRvIHNjYWxlID0gbm9ybWFsaXplZERlc3RSZWN0LnNpemUoKSAvIG5vcm1hbGl6
ZWRTcmNSZWN0LnNpemUoKTsKKworICAgICAgICBpZiAoc2hvdWxkVXNlU3ViaW1hZ2UoaW50ZXJw
b2xhdGlvblF1YWxpdHksIG5vcm1hbGl6ZWREZXN0UmVjdCwgbm9ybWFsaXplZFNyY1JlY3QsIHRy
YW5zZm9ybSkpIHsKKyAgICAgICAgICAgIGF1dG8gc3ViaW1hZ2VSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChub3JtYWxpemVkU3JjUmVjdCk7CisKKyAgICAgICAgICAgIC8vIFdoZW4gdGhlIGltYWdl
IGlzIHNjYWxlZCB1c2luZyBoaWdoLXF1YWxpdHkgaW50ZXJwb2xhdGlvbiwgd2UgY3JlYXRlIGEg
dGVtcG9yYXJ5IENHSW1hZ2UKKyAgICAgICAgICAgIC8vIGNvbnRhaW5pbmcgb25seSB0aGUgcG9y
dGlvbiB3ZSB3YW50IHRvIGRpc3BsYXkuIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlIGhpZ2gt
cXVhbGl0eQorICAgICAgICAgICAgLy8gaW50ZXJwb2xhdGlvbiBzbW9vdGhlcyBzaGFycCBlZGdl
cywgY2F1c2luZyBwaXhlbHMgZnJvbSBvdXRzaWRlIHRoZSBzb3VyY2UgcmVjdCB0byBibGVlZAor
ICAgICAgICAgICAgLy8gaW50byB0aGUgZGVzdGluYXRpb24gcmVjdC4gU2VlIDxyZGFyOi8vcHJv
YmxlbS82MTEyOTA5Pi4KKyAgICAgICAgICAgIHN1YkltYWdlID0gZ2V0U3ViaW1hZ2Uoc3ViSW1h
Z2UuZ2V0KCksIGltYWdlU2l6ZSwgc3ViaW1hZ2VSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgICAg
IGFkanVzdGVkRGVzdFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGFkanVzdGVkRGVzdFJlY3QpOwor
CisgICAgICAgICAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgb25seSBwYXJ0aWFsbHkgbG9hZGVkLCB0
aGVuIHNocmluayB0aGUgZGVzdGluYXRpb24gcmVjdCB0aGF0IHdlJ3JlIGRyYXdpbmcKKyAgICAg
ICAgICAgIC8vIGludG8gYWNjb3JkaW5nbHkuCisgICAgICAgICAgICBpZiAoY3VycmVudEltYWdl
U2l6ZS5oZWlnaHQoKSA8IG5vcm1hbGl6ZWRTcmNSZWN0Lm1heFkoKSkgeworICAgICAgICAgICAg
ICAgIGF1dG8gY3VycmVudFN1YmltYWdlU2l6ZSA9IGltYWdlTG9naWNhbFNpemUoc3ViSW1hZ2Uu
Z2V0KCksIG9wdGlvbnMpOworICAgICAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0SGVp
Z2h0KGN1cnJlbnRTdWJpbWFnZVNpemUuaGVpZ2h0KCkgKiBzY2FsZS5oZWlnaHQoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0
LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoZGVzdFJlY3QueCgpIC0gc3JjUmVjdC54KCkgLyB4U2Nh
bGUsIGRlc3RSZWN0LnkoKSAtIHNyY1JlY3QueSgpIC8geVNjYWxlKSk7Ci0gICAgICAgICAgICBh
ZGp1c3RlZERlc3RSZWN0LnNldFNpemUoRmxvYXRTaXplKGltYWdlU2l6ZS53aWR0aCgpIC8geFNj
YWxlLCBpbWFnZVNpemUuaGVpZ2h0KCkgLyB5U2NhbGUpKTsKKyAgICAgICAgICAgIC8vIElmIHRo
ZSBzb3VyY2UgcmVjdCBpcyBhIHN1YnBvcnRpb24gb2YgdGhlIGltYWdlLCB0aGVuIHdlIGNvbXB1
dGUgYW4gaW5mbGF0ZWQgZGVzdGluYXRpb24gcmVjdAorICAgICAgICAgICAgLy8gdGhhdCB3aWxs
IGhvbGQgdGhlIGVudGlyZSBpbWFnZSBhbmQgdGhlbiBzZXQgYSBjbGlwIHRvIHRoZSBwb3J0aW9u
IHRoYXQgd2Ugd2FudCB0byBkaXNwbGF5LgorICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdCA9
IHsgYWRqdXN0ZWREZXN0UmVjdC5sb2NhdGlvbigpIC0gdG9GbG9hdFNpemUobm9ybWFsaXplZFNy
Y1JlY3QubG9jYXRpb24oKSkgKiBzY2FsZSwgaW1hZ2VTaXplICogc2NhbGUgfTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmICghZGVzdFJlY3QuY29udGFpbnMoYWRqdXN0ZWREZXN0UmVjdCkpIHsK
KyAgICAgICAgaWYgKCFub3JtYWxpemVkRGVzdFJlY3QuY29udGFpbnMoYWRqdXN0ZWREZXN0UmVj
dCkpIHsKICAgICAgICAgICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOwotICAgICAgICAgICAgQ0dDb250
ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBkZXN0UmVjdCk7CisgICAgICAgICAgICBDR0NvbnRleHRD
bGlwVG9SZWN0KGNvbnRleHQsIG5vcm1hbGl6ZWREZXN0UmVjdCk7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgb25seSBwYXJ0aWFsbHkgbG9hZGVkLCB0aGVuIHNo
cmluayB0aGUgZGVzdGluYXRpb24gcmVjdCB0aGF0IHdlJ3JlIGRyYXdpbmcgaW50byBhY2NvcmRp
bmdseS4KLSAgICBpZiAoIXNob3VsZFVzZVN1YmltYWdlICYmIGN1cnJIZWlnaHQgPCBpbWFnZVNp
emUuaGVpZ2h0KCkpCi0gICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0SGVpZ2h0KGFkanVzdGVk
RGVzdFJlY3QuaGVpZ2h0KCkgKiBjdXJySGVpZ2h0IC8gaW1hZ2VTaXplLmhlaWdodCgpKTsKKyAg
ICBpZiAoc3ViSW1hZ2UgPT0gaW1hZ2UgJiYgY3VycmVudEltYWdlU2l6ZS5oZWlnaHQoKSA8IGlt
YWdlU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQoYWRq
dXN0ZWREZXN0UmVjdC5oZWlnaHQoKSAqIGN1cnJlbnRJbWFnZVNpemUuaGVpZ2h0KCkgLyBpbWFn
ZVNpemUuaGVpZ2h0KCkpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBib29sIHdh
c0FudGlhbGlhc2VkID0gQ0dDb250ZXh0R2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQpOwpAQCAt
MzIyLDE3ICszMzMsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXoKICAgICBhdXRvIG9sZEJs
ZW5kTW9kZSA9IGJsZW5kTW9kZU9wZXJhdGlvbigpOwogICAgIHNldENvbXBvc2l0ZU9wZXJhdGlv
bihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwogCi0g
ICAgLy8gSW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDAp
CisgICAgLy8gTWFrZSB0aGUgb3JpZ2luIGJlIGF0IGFkanVzdGVkRGVzdFJlY3QubG9jYXRpb24o
KQogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBhZGp1c3RlZERlc3RSZWN0Lngo
KSwgYWRqdXN0ZWREZXN0UmVjdC55KCkpOwotICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0TG9jYXRp
b24oRmxvYXRQb2ludCgpKTsKKyAgICBhZGp1c3RlZERlc3RSZWN0LnNldExvY2F0aW9uKEZsb2F0
UG9pbnQ6Onplcm8oKSk7CiAKICAgICBpZiAob3B0aW9ucy5vcmllbnRhdGlvbigpICE9IEltYWdl
T3JpZW50YXRpb246Ok5vbmUpIHsKICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQs
IG9wdGlvbnMub3JpZW50YXRpb24oKS50cmFuc2Zvcm1Gcm9tRGVmYXVsdChhZGp1c3RlZERlc3RS
ZWN0LnNpemUoKSkpOwotICAgICAgICBpZiAob3B0aW9ucy5vcmllbnRhdGlvbigpLnVzZXNXaWR0
aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiByZWN0IHdpbGwg
aGF2ZSBpdHMgd2lkdGggYW5kIGhlaWdodCBhbHJlYWR5IHJldmVyc2VkIGZvciB0aGUgb3JpZW50
YXRpb24gb2YKLSAgICAgICAgICAgIC8vIHRoZSBpbWFnZSwgYXMgaXQgd2FzIG5lZWRlZCBmb3Ig
cGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJzZSBpdCBiYWNrIGhlcmUuCi0gICAgICAg
ICAgICBhZGp1c3RlZERlc3RSZWN0ID0gRmxvYXRSZWN0KGFkanVzdGVkRGVzdFJlY3QueCgpLCBh
ZGp1c3RlZERlc3RSZWN0LnkoKSwgYWRqdXN0ZWREZXN0UmVjdC5oZWlnaHQoKSwgYWRqdXN0ZWRE
ZXN0UmVjdC53aWR0aCgpKTsKLSAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlv
biByZWN0IHdpbGwgaGF2ZSBpdHMgd2lkdGggYW5kIGhlaWdodCBhbHJlYWR5IHJldmVyc2VkIGZv
ciB0aGUgb3JpZW50YXRpb24gb2YKKyAgICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVl
ZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4K
KyAgICAgICAgaWYgKG9wdGlvbnMub3JpZW50YXRpb24oKS51c2VzV2lkdGhBc0hlaWdodCgpKQor
ICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdCA9IGFkanVzdGVkRGVzdFJlY3QudHJhbnNwb3Nl
ZFJlY3QoKTsKICAgICB9CiAgICAgCiAgICAgLy8gRmxpcCB0aGUgY29vcmRzLgpAQCAtMzQxLDcg
KzM1Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJ
bWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBEcmF3IHRoZSBpbWFn
ZS4KICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgYWRqdXN0ZWREZXN0UmVjdCwgc3Vi
SW1hZ2UuZ2V0KCkpOwotICAgIAorCiAgICAgaWYgKCFzdGF0ZVNhdmVyLmRpZFNhdmUoKSkgewog
ICAgICAgICBDR0NvbnRleHRTZXRDVE0oY29udGV4dCwgdHJhbnNmb3JtKTsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmgKaW5kZXggNDI3Y2YyNzZiOTgw
ZGEyMWIxOWYzMWMzMzFhYTcxYWQ2MjZiNzE1My4uMzY1ZGIwOTU5NGUwZDZiOTAwM2Q3NWNlMTNl
NmE1Y2UyODk5MmYwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oCkBAIC0xNDcsNiArMTQ3
LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX3RyYW5zZm9ybVswXSA9PSAx
ICYmIG1fdHJhbnNmb3JtWzFdID09IDAgJiYgbV90cmFuc2Zvcm1bMl0gPT0gMCAmJiAobV90cmFu
c2Zvcm1bM10gPT0gMSB8fCBtX3RyYW5zZm9ybVszXSA9PSAtMSk7CiAgICAgfQorICAgIAorICAg
IGJvb2wgaXNSb3RhdGVPclNoZWFyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Ry
YW5zZm9ybVsxXSB8fCBtX3RyYW5zZm9ybVsyXTsKKyAgICB9CiAKICAgICBib29sIHByZXNlcnZl
c0F4aXNBbGlnbm1lbnQoKSBjb25zdAogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431303</attachid>
            <date>2021-06-13 23:45:20 -0700</date>
            <delta_ts>2021-06-14 14:39:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226916-20210613234519.patch</filename>
            <type>text/plain</type>
            <size>16988</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjdiODk2MDlmODU4ZDUx
ZjZhNjk0MmUyNzZkMmZhZDY0OGEwZWFkOC4uMGIxNzJlYmI4YzcyNWExZDhmMDViZmIyZjRiMDIz
MzYwZGNjOWYzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDIxLTA2LTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtDR10gQ3JlYXRlIGEg
c3ViLWltYWdlIHdoZW4gZHJhd2luZyBhbiBpbWFnZSBvbmx5IGlmIHRoZSBkZXN0aW5hdGlvbiBp
bWFnZSB3aWxsIGJlIGVubGFyZ2VkLCByb3RhdGVkIG9yIHNoZWFyZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjkxNgorICAgICAgICA8cmRhcjov
LzcxNzEyMTQ0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdoZW4gZHJhd2luZyBvbmx5IHBhcnQgb2YgdGhlIGltYWdlLCB3ZSBtYXkgd2FudCB0byBj
cmVhdGUgYSBzdWItaW1hZ2UgCisgICAgICAgIGZpcnN0IGFuZCBkcmF3IHRoaXMgc3ViLWltYWdl
LiBCdXQgY3JlYXRpbmcgdGhlIHN1Yi1pbWFnZSBpcyBleHBlbnNpdmUuCisgICAgICAgIFNvIHdl
IHVzZSBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyIHRvIGF2b2lkIHJlY3JlYXRpbmcgdGhlbSB2ZXJ5
IG9mdGVuLgorICAgICAgICBJZiB0aGUgc2FtZSBwYXJ0IG9mIHRoZSBpbWFnZSBpcyBkcmF3biBt
dWx0aXBsZSB0aW1lcywgY3JlYXRpbmcgdGhlIHN1Yi0KKyAgICAgICAgaW1hZ2UgaXMgYSB3aW4u
IEJ1dCBpZiB0aGUgcGFydCBvZiB0aGUgaW1hZ2UgaXMgZHJhd24gb25seSBvbmNlLCBkcmF3aW5n
CisgICAgICAgIHRoZSAgd2hvbGUgaW1hZ2UgdG8gYSBjbGlwcGVkIGNvbnRleHQgd2lsbCBiZSBm
YXN0ZXIuIEluIHNvbWUgY2FzZXMsIHdlCisgICAgICAgIG11c3QgdG8gZHJhdyB0aGUgcGFydCBv
ZiB0aGUgaW1hZ2UgdGhyb3VnaCBhIHN1Yi1pbWFnZS4gRm9yIGV4YW1wbGUsIGlmCisgICAgICAg
IHRoZSBkZXN0aW5hdGlvbiByZWN0YW5nbGUgc3RyZXRjaGVzIG9ubHkgYSBwYXJ0IG9mIGFuIGlt
YWdlLCBpbnRlcnBvbGF0aW5nCisgICAgICAgIHRoZSBzdWItaW1hZ2Ugd2lsbCBnaXZlIHRoZSBj
b3JyZWN0IGRpc3BsYXkuCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCBHcmFwaGljc0NvbnRleHRD
Rzo6ZHJhd05hdGl2ZUltYWdlKCkgaXMgcmUtZmFjdG9yZWQgdG8gZG8KKyAgICAgICAgdGhlIGZv
bGxvd2luZzoKKyAgICAgICAgMSkgTm9ybWFsaXplIHRoZSBzcmNSZWN0IGFuZCBkZXN0UmVjdAor
ICAgICAgICAyKSBTaW1wbGlmeSBjYWxjdWxhdGlvbiBvZiBhZGp1c3REZXN0UmVjdCBhbmQgc3Vi
aW1hZ2VSZWN0IHVzaW5nIEZsb2F0UmVjdAorICAgICAgICAgICBhbmQgRmxvYXRTaXplIG1hdGgK
KyAgICAgICAgMykgTW92ZSB0aGUgaGV1cmlzdGljIHdoaWNoIGRlY2lkZXMgd2hldGhlciB0byB1
c2UgYSBzdWItaW1hZ2Ugb3Igbm90IHRvCisgICAgICAgICAgIGEgc2VwYXJhdGUgZnVuY3Rpb24u
CisKKyAgICAgICAgQSBzdWItaW1hZ2Ugd2lsbCBiZSBjcmVhdGVkIGlmOgorICAgICAgICAxKSBB
biBpbnRlcnBvbGF0aW9uIHdpbGwgYmUgcGVyZm9ybWVkIHdoZW4gZHJhd2luZyB0aGUgc3ViLWlt
YWdlCisgICAgICAgIDIpIGFuZCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIGEp
IElmIHRoZSBjb250ZXh0IGlzIHJvdGF0ZWQgb3Igc2hlYXJlZAorICAgICAgICAgICAgYikgSWYg
ZGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCkgaXMgbm9uLXVuaWZvcm1seSBzY2FsZWQK
KyAgICAgICAgICAgIGMpIElmIGRlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpIGlzIHVu
aWZvcm1seSBlbmxhcmdpbmcgaW4KKyAgICAgICAgICAgICAgIGJvdGggZGlyZWN0aW9uCisKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om5vcm1hbGl6ZVJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpzaG91bGRVc2VTdWJpbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdWJpbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjppbWFnZUxvZ2ljYWxTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmg6CisgICAgICAgIChXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm06OmlzUm90YXRlT3JTaGVhciBjb25zdCk6CisKIDIwMjEtMDYt
MTAgIEFyY2FkeSBHb2xkbWludHMtT3Jsb3YgIDxhZ29sZG1pbnRzQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW0NhaXJvXSBGaXggUGF0aDo6Ym91bmRpbmdSZWN0U2xvd0Nhc2Ugd2hlbiB0aGUgcGF0
aCBpcyBhIHNpbmdsZSBNb3ZlVG8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggYzdlMWNiMmNi
NWMwZDE4YWE4MWI1NmJjMTczNTM4ZTIzMmFjMGM3My4uYjQwZDZkMjEyMjUyNTZiYjE2ZmI1OWNj
Y2JlYWE0MzNiYzU2NThmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTE0MzQsMTQgKzE0
MzQsNiBAQCBzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBzaXplKFR5cGVkT01DU1NJbWFnZVZhbHVl
JiBpbWFnZSkKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIEZsb2F0UmVjdCBub3JtYWxpemVS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gRmxvYXRSZWN0KHN0ZDo6
bWluKHJlY3QueCgpLCByZWN0Lm1heFgoKSksCi0gICAgICAgIHN0ZDo6bWluKHJlY3QueSgpLCBy
ZWN0Lm1heFkoKSksCi0gICAgICAgIHN0ZDo6bWF4KHJlY3Qud2lkdGgoKSwgLXJlY3Qud2lkdGgo
KSksCi0gICAgICAgIHN0ZDo6bWF4KHJlY3QuaGVpZ2h0KCksIC1yZWN0LmhlaWdodCgpKSk7Ci19
Ci0KIEV4Y2VwdGlvbk9yPHZvaWQ+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdJ
bWFnZShDYW52YXNJbWFnZVNvdXJjZSYmIGltYWdlLCBmbG9hdCBkeCwgZmxvYXQgZHkpCiB7CiAg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24oaW1hZ2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAppbmRleCBlNjk0Mzk3MDVhNTU0OThmZmZkNWU1Mzhh
ZDBkMzE3NDQzMzNmMjFkLi4wMWE4ZjEyOGM1MzM5ZWY5ZDQ0NmFjNzIzZjcxOTY2NzZhYTczMjdm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAK
QEAgLTIzMSw2ICsyMzEsMTQgQEAgdm9pZCBGbG9hdFJlY3Q6OmZpdFRvUG9pbnRzKGNvbnN0IEZs
b2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmwKICAgICBzZXRMb2Nh
dGlvbkFuZFNpemVGcm9tRWRnZXMobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKIH0KIAorRmxv
YXRSZWN0IG5vcm1hbGl6ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHJldHVy
biBGbG9hdFJlY3Qoc3RkOjptaW4ocmVjdC54KCksIHJlY3QubWF4WCgpKSwKKyAgICAgICAgc3Rk
OjptaW4ocmVjdC55KCksIHJlY3QubWF4WSgpKSwKKyAgICAgICAgc3RkOjptYXgocmVjdC53aWR0
aCgpLCAtcmVjdC53aWR0aCgpKSwKKyAgICAgICAgc3RkOjptYXgocmVjdC5oZWlnaHQoKSwgLXJl
Y3QuaGVpZ2h0KCkpKTsKK30KKwogRmxvYXRSZWN0IGVuY2xvc2VSZWN0VG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKICAgICBG
bG9hdFBvaW50IGxvY2F0aW9uID0gZmxvb3JQb2ludFRvRGV2aWNlUGl4ZWxzKHJlY3QubWluWE1p
bllDb3JuZXIoKSwgZGV2aWNlU2NhbGVGYWN0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuaAppbmRleCBiMDg1YWFhOTk4MzI0YjQ3OWU5NTExMzEyNTMw
Mzc5Y2RhNDE2YmU4Li40NjZmMTJjYzM3MTliYjkxZTI1MTZjZjExNjNlZjg0YjAwMDllY2I0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtMjg5
LDYgKzI4OSw3IEBAIGlubGluZSBib29sIEZsb2F0UmVjdDo6aXNJbmZpbml0ZSgpIGNvbnN0CiAg
ICAgcmV0dXJuICp0aGlzID09IGluZmluaXRlUmVjdCgpOwogfQogCitGbG9hdFJlY3Qgbm9ybWFs
aXplUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdCBlbmNs
b3NlUmVjdFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKTsKIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBG
bG9hdFJlY3QmKTsKIFdFQkNPUkVfRVhQT1JUIEludFJlY3Qgcm91bmRlZEludFJlY3QoY29uc3Qg
RmxvYXRSZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggNjc4MzJjMmQ4NWRkZmY5N2MwNDRl
MWEyZTQxMTZiMDMwYTk2M2RjNS4uMDIwNzk5Yzc0YTI5MDJlMjJjMjQwNjc3M2FiNDRhOWUyNDg0
Y2I1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtMjI3LDg3ICsyMjcsOTggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6cmVzdG9yZSgpCiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5z
Zm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorc3RhdGlj
IGlubGluZSBib29sIHNob3VsZFVzZVN1YmltYWdlKENHSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50
ZXJwb2xhdGlvblF1YWxpdHksIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAg
YXV0byBpbWFnZSA9IG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKTsKKyAgICBpZiAoaW50ZXJw
b2xhdGlvblF1YWxpdHkgPT0ga0NHSW50ZXJwb2xhdGlvbk5vbmUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAodHJhbnNmb3JtLmlzUm90YXRlT3JTaGVhcigpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBhdXRvIHhTY2FsZSA9IGRlc3RSZWN0LndpZHRoKCkgKiB0cmFuc2Zvcm0u
eFNjYWxlKCkgLyBzcmNSZWN0LndpZHRoKCk7CisgICAgYXV0byB5U2NhbGUgPSBkZXN0UmVjdC5o
ZWlnaHQoKSAqIHRyYW5zZm9ybS55U2NhbGUoKSAvIHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgcmV0
dXJuICFXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoeFNjYWxlLCB5U2NhbGUpIHx8IHhTY2FsZSA+
IDE7Cit9CiAKLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWUg
PSBNb25vdG9uaWNUaW1lOjpub3coKTsKK3N0YXRpYyBpbmxpbmUgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGdldFN1YmltYWdlKENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIHN1YmltYWdlUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit7CisgICAgYXV0byBwaHlzaWNhbFN1YmltYWdlUmVjdCA9IHN1Ymlt
YWdlUmVjdDsKKworICAgIGlmIChvcHRpb25zLm9yaWVudGF0aW9uKCkgIT0gSW1hZ2VPcmllbnRh
dGlvbjo6Tm9uZSkgeworICAgICAgICAvLyBzdWJpbWFnZVJlY3QgaXMgaW4gbG9naWNhbCBjb29y
ZGluYXRlcy4gZ2V0U3ViaW1hZ2UoKSBkZWFscyB3aXRoIG5vbmUtb3JpZW50ZWQKKyAgICAgICAg
Ly8gaW1hZ2UuIFdlIG5lZWQgdG8gY29udmVydCBzdWJpbWFnZVJlY3QgdG8gcGh5c2ljYWwgaW1h
Z2UgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmIChhdXRvIHRyYW5zZm9ybSA9IG9wdGlvbnMub3Jp
ZW50YXRpb24oKS50cmFuc2Zvcm1Gcm9tRGVmYXVsdChpbWFnZVNpemUpLmludmVyc2UoKSkKKyAg
ICAgICAgICAgIHBoeXNpY2FsU3ViaW1hZ2VSZWN0ID0gdHJhbnNmb3JtLnZhbHVlKCkubWFwUmVj
dChwaHlzaWNhbFN1YmltYWdlUmVjdCk7CisgICAgfQorCisjaWYgQ0FDSEVfU1VCSU1BR0VTCisg
ICAgcmV0dXJuIFN1YmltYWdlQ2FjaGVXaXRoVGltZXI6OmdldFN1YmltYWdlKGltYWdlLCBwaHlz
aWNhbFN1YmltYWdlUmVjdCk7CisjZWxzZQorICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVh
dGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIHBoeXNpY2FsU3ViaW1hZ2VSZWN0KSk7CiAjZW5kaWYK
LSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc3ViSW1hZ2UoaW1hZ2UpOworfQogCi0gICAgYXV0
byBsb2dpY2FsSGVpZ2h0ID0gWyZdKENHSW1hZ2VSZWYgaW1hZ2UpIHsKLSAgICAgICAgcmV0dXJu
IG9wdGlvbnMub3JpZW50YXRpb24oKS51c2VzV2lkdGhBc0hlaWdodCgpID8gQ0dJbWFnZUdldFdp
ZHRoKGltYWdlKSA6IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOwotICAgIH07CitzdGF0aWMgaW5s
aW5lIEZsb2F0U2l6ZSBpbWFnZUxvZ2ljYWxTaXplKENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0U2l6ZSBzaXplID0gRmxv
YXRTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKTsK
KyAgICByZXR1cm4gb3B0aW9ucy5vcmllbnRhdGlvbigpLnVzZXNXaWR0aEFzSGVpZ2h0KCkgPyBz
aXplLnRyYW5zcG9zZWRTaXplKCkgOiBzaXplOworfQogCi0gICAgZmxvYXQgY3VyckhlaWdodCA9
IGxvZ2ljYWxIZWlnaHQoc3ViSW1hZ2UuZ2V0KCkpOwotICAgIGlmIChjdXJySGVpZ2h0IDw9IHNy
Y1JlY3QueSgpKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgYXV0byBpbWFnZSA9IG5hdGl2ZUltYWdl
LnBsYXRmb3JtSW1hZ2UoKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwg
aW1hZ2VTaXplIH07CisgICAgYXV0byBub3JtYWxpemVkU3JjUmVjdCA9IG5vcm1hbGl6ZVJlY3Qo
c3JjUmVjdCk7CisgICAgYXV0byBub3JtYWxpemVkRGVzdFJlY3QgPSBub3JtYWxpemVSZWN0KGRl
c3RSZWN0KTsKKworICAgIGlmICghaW1hZ2UgfHwgIWltYWdlUmVjdC5pbnRlcnNlY3RzKG5vcm1h
bGl6ZWRTcmNSZWN0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0g
PSBDR0NvbnRleHRHZXRDVE0oY29udGV4dCk7CisjaWYgIUxPR19ESVNBQkxFRAorICAgIE1vbm90
b25pY1RpbWUgc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisjZW5kaWYKKyAgICBh
dXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoY29udGV4dCwgZmFsc2UpOwotICAgIAotICAgIGJvb2wgc2hvdWxkVXNlU3Vi
aW1hZ2UgPSBmYWxzZTsKKyAgICBhdXRvIHRyYW5zZm9ybSA9IENHQ29udGV4dEdldENUTShjb250
ZXh0KTsKIAotICAgIC8vIElmIHRoZSBzb3VyY2UgcmVjdCBpcyBhIHN1YnBvcnRpb24gb2YgdGhl
IGltYWdlLCB0aGVuIHdlIGNvbXB1dGUgYW4gaW5mbGF0ZWQgZGVzdGluYXRpb24gcmVjdCB0aGF0
IHdpbGwgaG9sZCB0aGUgZW50aXJlIGltYWdlCi0gICAgLy8gYW5kIHRoZW4gc2V0IGEgY2xpcCB0
byB0aGUgcG9ydGlvbiB0aGF0IHdlIHdhbnQgdG8gZGlzcGxheS4KLSAgICBGbG9hdFJlY3QgYWRq
dXN0ZWREZXN0UmVjdCA9IGRlc3RSZWN0OworICAgIGF1dG8gc3ViSW1hZ2UgPSBpbWFnZTsKKyAg
ICBhdXRvIGN1cnJlbnRJbWFnZVNpemUgPSBpbWFnZUxvZ2ljYWxTaXplKGltYWdlLmdldCgpLCBv
cHRpb25zKTsKIAotICAgIGlmIChzcmNSZWN0LnNpemUoKSAhPSBpbWFnZVNpemUpIHsKLSAgICAg
ICAgQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eSA9IENHQ29udGV4
dEdldEludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQpOwotICAgICAgICAvLyBXaGVuIHRoZSBp
bWFnZSBpcyBzY2FsZWQgdXNpbmcgaGlnaC1xdWFsaXR5IGludGVycG9sYXRpb24sIHdlIGNyZWF0
ZSBhIHRlbXBvcmFyeSBDR0ltYWdlCi0gICAgICAgIC8vIGNvbnRhaW5pbmcgb25seSB0aGUgcG9y
dGlvbiB3ZSB3YW50IHRvIGRpc3BsYXkuIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlIGhpZ2gt
cXVhbGl0eQotICAgICAgICAvLyBpbnRlcnBvbGF0aW9uIHNtb290aGVzIHNoYXJwIGVkZ2VzLCBj
YXVzaW5nIHBpeGVscyBmcm9tIG91dHNpZGUgdGhlIHNvdXJjZSByZWN0IHRvIGJsZWVkCi0gICAg
ICAgIC8vIGludG8gdGhlIGRlc3RpbmF0aW9uIHJlY3QuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjEx
MjkwOT4uCi0gICAgICAgIGNvbnN0IGZsb2F0IG1pbmltdW1BcmVhRm9ySW50ZXJwb2xhdGlvbiA9
IDQwICogNDA7Ci0gICAgICAgIGZsb2F0IHhTY2FsZSA9IHNyY1JlY3Qud2lkdGgoKSAvIGRlc3RS
ZWN0LndpZHRoKCk7Ci0gICAgICAgIGZsb2F0IHlTY2FsZSA9IHNyY1JlY3QuaGVpZ2h0KCkgLyBk
ZXN0UmVjdC5oZWlnaHQoKTsKLSAgICAgICAgc2hvdWxkVXNlU3ViaW1hZ2UgPSAoaW50ZXJwb2xh
dGlvblF1YWxpdHkgIT0ga0NHSW50ZXJwb2xhdGlvbk5vbmUpICYmICh4U2NhbGUgPCAwIHx8IHlT
Y2FsZSA8IDAgfHwgZGVzdFJlY3QuYXJlYSgpID49IG1pbmltdW1BcmVhRm9ySW50ZXJwb2xhdGlv
bikgJiYgKHNyY1JlY3Quc2l6ZSgpICE9IGRlc3RSZWN0LnNpemUoKSB8fCAhZ2V0Q1RNKCkuaXNJ
ZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7Ci0gICAgICAgIGlmIChzaG91bGRVc2VT
dWJpbWFnZSkgewotICAgICAgICAgICAgRmxvYXRSZWN0IHN1YmltYWdlUmVjdCA9IHNyY1JlY3Q7
Ci0gICAgICAgICAgICBmbG9hdCBsZWZ0UGFkZGluZyA9IHNyY1JlY3QueCgpIC0gZmxvb3JmKHNy
Y1JlY3QueCgpKTsKLSAgICAgICAgICAgIGZsb2F0IHRvcFBhZGRpbmcgPSBzcmNSZWN0LnkoKSAt
IGZsb29yZihzcmNSZWN0LnkoKSk7Ci0KLSAgICAgICAgICAgIHN1YmltYWdlUmVjdC5tb3ZlKC1s
ZWZ0UGFkZGluZywgLXRvcFBhZGRpbmcpOwotICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5t
b3ZlKC1sZWZ0UGFkZGluZyAvIHhTY2FsZSwgLXRvcFBhZGRpbmcgLyB5U2NhbGUpOwotCi0gICAg
ICAgICAgICBzdWJpbWFnZVJlY3Quc2V0V2lkdGgoY2VpbGYoc3ViaW1hZ2VSZWN0LndpZHRoKCkg
KyBsZWZ0UGFkZGluZykpOwotICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRXaWR0aChz
dWJpbWFnZVJlY3Qud2lkdGgoKSAvIHhTY2FsZSk7Ci0KLSAgICAgICAgICAgIHN1YmltYWdlUmVj
dC5zZXRIZWlnaHQoY2VpbGYoc3ViaW1hZ2VSZWN0LmhlaWdodCgpICsgdG9wUGFkZGluZykpOwot
ICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQoc3ViaW1hZ2VSZWN0LmhlaWdo
dCgpIC8geVNjYWxlKTsKLQotICAgICAgICAgICAgLy8gc3ViaW1hZ2VSZWN0IGlzIGluIGxvZ2lj
YWwgY29vcmRpbmF0ZXMuIGdldFN1YmltYWdlKCkgZGVhbHMgd2l0aCBub25lLW9yaWVudGVkCi0g
ICAgICAgICAgICAvLyBpbWFnZS4gV2UgbmVlZCB0byBjb252ZXJ0IHN1YmltYWdlUmVjdCB0byBw
aHlzaWNhbCBpbWFnZSBjb29yZGluYXRlcy4KLSAgICAgICAgICAgIGlmIChvcHRpb25zLm9yaWVu
dGF0aW9uKCkgIT0gSW1hZ2VPcmllbnRhdGlvbjo6Tm9uZSkgewotICAgICAgICAgICAgICAgIGlm
IChhdXRvIHRyYW5zZm9ybSA9IG9wdGlvbnMub3JpZW50YXRpb24oKS50cmFuc2Zvcm1Gcm9tRGVm
YXVsdChpbWFnZVNpemUpLmludmVyc2UoKSkKLSAgICAgICAgICAgICAgICAgICAgc3ViaW1hZ2VS
ZWN0ID0gdHJhbnNmb3JtLnZhbHVlKCkubWFwUmVjdChzdWJpbWFnZVJlY3QpOwotICAgICAgICAg
ICAgfQorICAgIGF1dG8gYWRqdXN0ZWREZXN0UmVjdCA9IG5vcm1hbGl6ZWREZXN0UmVjdDsKIAot
I2lmIENBQ0hFX1NVQklNQUdFUwotICAgICAgICAgICAgc3ViSW1hZ2UgPSBTdWJpbWFnZUNhY2hl
V2l0aFRpbWVyOjpnZXRTdWJpbWFnZShzdWJJbWFnZS5nZXQoKSwgc3ViaW1hZ2VSZWN0KTsKLSNl
bHNlCi0gICAgICAgICAgICBzdWJJbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFn
ZUluUmVjdChzdWJJbWFnZS5nZXQoKSwgc3ViaW1hZ2VSZWN0KSk7Ci0jZW5kaWYKLSAgICAgICAg
ICAgIGlmIChjdXJySGVpZ2h0IDwgc3JjUmVjdC5tYXhZKCkpIHsKLSAgICAgICAgICAgICAgICBB
U1NFUlQobG9naWNhbEhlaWdodChzdWJJbWFnZS5nZXQoKSkgPT0gY3VyckhlaWdodCAtIENHUmVj
dEludGVncmFsKHNyY1JlY3QpLm9yaWdpbi55KTsKLSAgICAgICAgICAgICAgICBhZGp1c3RlZERl
c3RSZWN0LnNldEhlaWdodChsb2dpY2FsSGVpZ2h0KHN1YkltYWdlLmdldCgpKSAvIHlTY2FsZSk7
CisgICAgaWYgKG5vcm1hbGl6ZWRTcmNSZWN0ICE9IGltYWdlUmVjdCkgeworICAgICAgICBDR0lu
dGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5ID0gQ0dDb250ZXh0R2V0SW50
ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCk7CisgICAgICAgIGF1dG8gc2NhbGUgPSBub3JtYWxp
emVkRGVzdFJlY3Quc2l6ZSgpIC8gbm9ybWFsaXplZFNyY1JlY3Quc2l6ZSgpOworCisgICAgICAg
IGlmIChzaG91bGRVc2VTdWJpbWFnZShpbnRlcnBvbGF0aW9uUXVhbGl0eSwgbm9ybWFsaXplZERl
c3RSZWN0LCBub3JtYWxpemVkU3JjUmVjdCwgdHJhbnNmb3JtKSkgeworICAgICAgICAgICAgYXV0
byBzdWJpbWFnZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG5vcm1hbGl6ZWRTcmNSZWN0KTsKKwor
ICAgICAgICAgICAgLy8gV2hlbiB0aGUgaW1hZ2UgaXMgc2NhbGVkIHVzaW5nIGhpZ2gtcXVhbGl0
eSBpbnRlcnBvbGF0aW9uLCB3ZSBjcmVhdGUgYSB0ZW1wb3JhcnkgQ0dJbWFnZQorICAgICAgICAg
ICAgLy8gY29udGFpbmluZyBvbmx5IHRoZSBwb3J0aW9uIHdlIHdhbnQgdG8gZGlzcGxheS4gV2Ug
bmVlZCB0byBkbyB0aGlzIGJlY2F1c2UgaGlnaC1xdWFsaXR5CisgICAgICAgICAgICAvLyBpbnRl
cnBvbGF0aW9uIHNtb290aGVzIHNoYXJwIGVkZ2VzLCBjYXVzaW5nIHBpeGVscyBmcm9tIG91dHNp
ZGUgdGhlIHNvdXJjZSByZWN0IHRvIGJsZWVkCisgICAgICAgICAgICAvLyBpbnRvIHRoZSBkZXN0
aW5hdGlvbiByZWN0LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYxMTI5MDk+LgorICAgICAgICAgICAg
c3ViSW1hZ2UgPSBnZXRTdWJpbWFnZShzdWJJbWFnZS5nZXQoKSwgaW1hZ2VTaXplLCBzdWJpbWFn
ZVJlY3QsIG9wdGlvbnMpOworICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QoYWRqdXN0ZWREZXN0UmVjdCk7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBpbWFn
ZSBpcyBvbmx5IHBhcnRpYWxseSBsb2FkZWQsIHRoZW4gc2hyaW5rIHRoZSBkZXN0aW5hdGlvbiBy
ZWN0IHRoYXQgd2UncmUgZHJhd2luZworICAgICAgICAgICAgLy8gaW50byBhY2NvcmRpbmdseS4K
KyAgICAgICAgICAgIGlmIChjdXJyZW50SW1hZ2VTaXplLmhlaWdodCgpIDwgbm9ybWFsaXplZFNy
Y1JlY3QubWF4WSgpKSB7CisgICAgICAgICAgICAgICAgYXV0byBjdXJyZW50U3ViaW1hZ2VTaXpl
ID0gaW1hZ2VMb2dpY2FsU2l6ZShzdWJJbWFnZS5nZXQoKSwgb3B0aW9ucyk7CisgICAgICAgICAg
ICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQoY3VycmVudFN1YmltYWdlU2l6ZS5oZWln
aHQoKSAqIHNjYWxlLmhlaWdodCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludChkZXN0
UmVjdC54KCkgLSBzcmNSZWN0LngoKSAvIHhTY2FsZSwgZGVzdFJlY3QueSgpIC0gc3JjUmVjdC55
KCkgLyB5U2NhbGUpKTsKLSAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShGbG9h
dFNpemUoaW1hZ2VTaXplLndpZHRoKCkgLyB4U2NhbGUsIGltYWdlU2l6ZS5oZWlnaHQoKSAvIHlT
Y2FsZSkpOworICAgICAgICAgICAgLy8gSWYgdGhlIHNvdXJjZSByZWN0IGlzIGEgc3VicG9ydGlv
biBvZiB0aGUgaW1hZ2UsIHRoZW4gd2UgY29tcHV0ZSBhbiBpbmZsYXRlZCBkZXN0aW5hdGlvbiBy
ZWN0CisgICAgICAgICAgICAvLyB0aGF0IHdpbGwgaG9sZCB0aGUgZW50aXJlIGltYWdlIGFuZCB0
aGVuIHNldCBhIGNsaXAgdG8gdGhlIHBvcnRpb24gdGhhdCB3ZSB3YW50IHRvIGRpc3BsYXkuCisg
ICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0ID0geyBhZGp1c3RlZERlc3RSZWN0LmxvY2F0aW9u
KCkgLSB0b0Zsb2F0U2l6ZShub3JtYWxpemVkU3JjUmVjdC5sb2NhdGlvbigpKSAqIHNjYWxlLCBp
bWFnZVNpemUgKiBzY2FsZSB9OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFkZXN0UmVjdC5j
b250YWlucyhhZGp1c3RlZERlc3RSZWN0KSkgeworICAgICAgICBpZiAoIW5vcm1hbGl6ZWREZXN0
UmVjdC5jb250YWlucyhhZGp1c3RlZERlc3RSZWN0KSkgewogICAgICAgICAgICAgc3RhdGVTYXZl
ci5zYXZlKCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRlc3RS
ZWN0KTsKKyAgICAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgbm9ybWFsaXpl
ZERlc3RSZWN0KTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIElmIHRoZSBpbWFnZSBpcyBv
bmx5IHBhcnRpYWxseSBsb2FkZWQsIHRoZW4gc2hyaW5rIHRoZSBkZXN0aW5hdGlvbiByZWN0IHRo
YXQgd2UncmUgZHJhd2luZyBpbnRvIGFjY29yZGluZ2x5LgotICAgIGlmICghc2hvdWxkVXNlU3Vi
aW1hZ2UgJiYgY3VyckhlaWdodCA8IGltYWdlU2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgYWRqdXN0
ZWREZXN0UmVjdC5zZXRIZWlnaHQoYWRqdXN0ZWREZXN0UmVjdC5oZWlnaHQoKSAqIGN1cnJIZWln
aHQgLyBpbWFnZVNpemUuaGVpZ2h0KCkpOworICAgIGlmIChzdWJJbWFnZSA9PSBpbWFnZSAmJiBj
dXJyZW50SW1hZ2VTaXplLmhlaWdodCgpIDwgaW1hZ2VTaXplLmhlaWdodCgpKQorICAgICAgICBh
ZGp1c3RlZERlc3RSZWN0LnNldEhlaWdodChhZGp1c3RlZERlc3RSZWN0LmhlaWdodCgpICogY3Vy
cmVudEltYWdlU2l6ZS5oZWlnaHQoKSAvIGltYWdlU2l6ZS5oZWlnaHQoKSk7CiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQogICAgIGJvb2wgd2FzQW50aWFsaWFzZWQgPSBDR0NvbnRleHRHZXRT
aG91bGRBbnRpYWxpYXMoY29udGV4dCk7CkBAIC0zMjIsMTcgKzMzMywxNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBj
b25zdCBGbG9hdFNpegogICAgIGF1dG8gb2xkQmxlbmRNb2RlID0gYmxlbmRNb2RlT3BlcmF0aW9u
KCk7CiAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3Io
KSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CiAKLSAgICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVj
dHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCkKKyAgICAvLyBNYWtlIHRoZSBvcmlnaW4gYmUg
YXQgYWRqdXN0ZWREZXN0UmVjdC5sb2NhdGlvbigpCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RN
KGNvbnRleHQsIGFkanVzdGVkRGVzdFJlY3QueCgpLCBhZGp1c3RlZERlc3RSZWN0LnkoKSk7Ci0g
ICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOworICAgIGFkanVz
dGVkRGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludDo6emVybygpKTsKIAogICAgIGlmIChv
cHRpb25zLm9yaWVudGF0aW9uKCkgIT0gSW1hZ2VPcmllbnRhdGlvbjo6Tm9uZSkgewogICAgICAg
ICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgb3B0aW9ucy5vcmllbnRhdGlvbigpLnRyYW5z
Zm9ybUZyb21EZWZhdWx0KGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIGlmIChv
cHRpb25zLm9yaWVudGF0aW9uKCkudXNlc1dpZHRoQXNIZWlnaHQoKSkgewotICAgICAgICAgICAg
Ly8gVGhlIGRlc3RpbmF0aW9uIHJlY3Qgd2lsbCBoYXZlIGl0cyB3aWR0aCBhbmQgaGVpZ2h0IGFs
cmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgotICAgICAgICAgICAgLy8gdGhl
IGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2UgbmVlZCB0byBy
ZXZlcnNlIGl0IGJhY2sgaGVyZS4KLSAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3QgPSBGbG9h
dFJlY3QoYWRqdXN0ZWREZXN0UmVjdC54KCksIGFkanVzdGVkRGVzdFJlY3QueSgpLCBhZGp1c3Rl
ZERlc3RSZWN0LmhlaWdodCgpLCBhZGp1c3RlZERlc3RSZWN0LndpZHRoKCkpOwotICAgICAgICB9
CisKKyAgICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3Qgd2lsbCBoYXZlIGl0cyB3aWR0aCBh
bmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgorICAgICAg
ICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBu
ZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJlLgorICAgICAgICBpZiAob3B0aW9ucy5vcmllbnRh
dGlvbigpLnVzZXNXaWR0aEFzSGVpZ2h0KCkpCisgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0
ID0gYWRqdXN0ZWREZXN0UmVjdC50cmFuc3Bvc2VkUmVjdCgpOwogICAgIH0KICAgICAKICAgICAv
LyBGbGlwIHRoZSBjb29yZHMuCkBAIC0zNDEsNyArMzUyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxv
YXRTaXoKIAogICAgIC8vIERyYXcgdGhlIGltYWdlLgogICAgIENHQ29udGV4dERyYXdJbWFnZShj
b250ZXh0LCBhZGp1c3RlZERlc3RSZWN0LCBzdWJJbWFnZS5nZXQoKSk7Ci0gICAgCisKICAgICBp
ZiAoIXN0YXRlU2F2ZXIuZGlkU2F2ZSgpKSB7CiAgICAgICAgIENHQ29udGV4dFNldENUTShjb250
ZXh0LCB0cmFuc2Zvcm0pOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9y
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVU
cmFuc2Zvcm0uaAppbmRleCA0MjdjZjI3NmI5ODBkYTIxYjE5ZjMxYzMzMWFhNzFhZDYyNmI3MTUz
Li4zNjVkYjA5NTk0ZTBkNmI5MDAzZDc1Y2UxM2U2YTVjZTI4OTkyZjBiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9y
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZm
aW5lVHJhbnNmb3JtLmgKQEAgLTE0Nyw2ICsxNDcsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fdHJhbnNmb3JtWzBdID09IDEgJiYgbV90cmFuc2Zvcm1bMV0gPT0gMCAmJiBt
X3RyYW5zZm9ybVsyXSA9PSAwICYmIChtX3RyYW5zZm9ybVszXSA9PSAxIHx8IG1fdHJhbnNmb3Jt
WzNdID09IC0xKTsKICAgICB9CisgICAgCisgICAgYm9vbCBpc1JvdGF0ZU9yU2hlYXIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHJhbnNmb3JtWzFdIHx8IG1fdHJhbnNmb3JtWzJd
OworICAgIH0KIAogICAgIGJvb2wgcHJlc2VydmVzQXhpc0FsaWdubWVudCgpIGNvbnN0CiAgICAg
ewo=
</data>
<flag name="review"
          id="453047"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="453053"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431396</attachid>
            <date>2021-06-14 19:30:06 -0700</date>
            <delta_ts>2021-06-15 00:40:52 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-226916-20210614193005.patch</filename>
            <type>text/plain</type>
            <size>16562</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjdiODk2MDlmODU4ZDUx
ZjZhNjk0MmUyNzZkMmZhZDY0OGEwZWFkOC4uZWZmM2JhZTNiNGRkNTIxOWNhYjlhZmRlMTNjNWQz
MTliYTMxMmNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDIxLTA2LTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtDR10gQ3JlYXRlIGEg
c3ViLWltYWdlIHdoZW4gZHJhd2luZyBhbiBpbWFnZSBvbmx5IGlmIHRoZSBkZXN0aW5hdGlvbiBp
bWFnZSB3aWxsIGJlIGVubGFyZ2VkLCByb3RhdGVkIG9yIHNoZWFyZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjkxNgorICAgICAgICA8cmRhcjov
LzcxNzEyMTQ0PgorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAg
ICBXaGVuIGRyYXdpbmcgb25seSBwYXJ0IG9mIHRoZSBpbWFnZSwgd2UgbWF5IHdhbnQgdG8gY3Jl
YXRlIGEgc3ViLWltYWdlIAorICAgICAgICBmaXJzdCBhbmQgZHJhdyB0aGlzIHN1Yi1pbWFnZS4g
QnV0IGNyZWF0aW5nIHRoZSBzdWItaW1hZ2UgaXMgZXhwZW5zaXZlLgorICAgICAgICBTbyB3ZSB1
c2UgU3ViaW1hZ2VDYWNoZVdpdGhUaW1lciB0byBhdm9pZCByZWNyZWF0aW5nIHRoZW0gdmVyeSBv
ZnRlbi4KKyAgICAgICAgSWYgdGhlIHNhbWUgcGFydCBvZiB0aGUgaW1hZ2UgaXMgZHJhd24gbXVs
dGlwbGUgdGltZXMsIGNyZWF0aW5nIHRoZSBzdWItCisgICAgICAgIGltYWdlIGlzIGEgd2luLiBC
dXQgaWYgdGhlIHBhcnQgb2YgdGhlIGltYWdlIGlzIGRyYXduIG9ubHkgb25jZSwgZHJhd2luZwor
ICAgICAgICB0aGUgIHdob2xlIGltYWdlIHRvIGEgY2xpcHBlZCBjb250ZXh0IHdpbGwgYmUgZmFz
dGVyLiBJbiBzb21lIGNhc2VzLCB3ZQorICAgICAgICBtdXN0IHRvIGRyYXcgdGhlIHBhcnQgb2Yg
dGhlIGltYWdlIHRocm91Z2ggYSBzdWItaW1hZ2UuIEZvciBleGFtcGxlLCBpZgorICAgICAgICB0
aGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHN0cmV0Y2hlcyBvbmx5IGEgcGFydCBvZiBhbiBpbWFn
ZSwgaW50ZXJwb2xhdGluZworICAgICAgICB0aGUgc3ViLWltYWdlIHdpbGwgZ2l2ZSB0aGUgY29y
cmVjdCBkaXNwbGF5LgorCisgICAgICAgIEluIHRoaXMgcGF0Y2ggR3JhcGhpY3NDb250ZXh0Q0c6
OmRyYXdOYXRpdmVJbWFnZSgpIGlzIHJlLWZhY3RvcmVkIHRvIGRvCisgICAgICAgIHRoZSBmb2xs
b3dpbmc6CisgICAgICAgIDEpIE5vcm1hbGl6ZSB0aGUgc3JjUmVjdCBhbmQgZGVzdFJlY3QKKyAg
ICAgICAgMikgU2ltcGxpZnkgY2FsY3VsYXRpb24gb2YgYWRqdXN0RGVzdFJlY3QgYW5kIHN1Ymlt
YWdlUmVjdCB1c2luZyBGbG9hdFJlY3QKKyAgICAgICAgICAgYW5kIEZsb2F0U2l6ZSBtYXRoCisg
ICAgICAgIDMpIE1vdmUgdGhlIGhldXJpc3RpYyB3aGljaCBkZWNpZGVzIHdoZXRoZXIgdG8gdXNl
IGEgc3ViLWltYWdlIG9yIG5vdCB0bworICAgICAgICAgICBhIHNlcGFyYXRlIGZ1bmN0aW9uLgor
CisgICAgICAgIEEgc3ViLWltYWdlIHdpbGwgYmUgY3JlYXRlZCBpZjoKKyAgICAgICAgMSkgQW4g
aW50ZXJwb2xhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCB3aGVuIGRyYXdpbmcgdGhlIHN1Yi1pbWFn
ZQorICAgICAgICAyKSBhbmQgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICBhKSBJ
ZiB0aGUgY29udGV4dCBpcyByb3RhdGVkIG9yIHNoZWFyZWQKKyAgICAgICAgICAgIGIpIElmIGRl
c3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpIGlzIG5vbi11bmlmb3JtbHkgc2NhbGVkCisg
ICAgICAgICAgICBjKSBJZiBkZXN0UmVjdC5zaXplKCkgLyBzcmNSZWN0LnNpemUoKSBpcyB1bmlm
b3JtbHkgZW5sYXJnaW5nIGluCisgICAgICAgICAgICAgICBib3RoIGRpcmVjdGlvbgorCisgICAg
ICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpub3JtYWxpemVSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplUmVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkVXNlU3ViaW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U3ViaW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VMb2dpY2FsU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oOgorICAgICAgICAoV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtOjppc1JvdGF0ZU9yU2hlYXIgY29uc3QpOgorCiAyMDIxLTA2LTEw
ICBBcmNhZHkgR29sZG1pbnRzLU9ybG92ICA8YWdvbGRtaW50c0BpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFtDYWlyb10gRml4IFBhdGg6OmJvdW5kaW5nUmVjdFNsb3dDYXNlIHdoZW4gdGhlIHBhdGgg
aXMgYSBzaW5nbGUgTW92ZVRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IGM3ZTFjYjJjYjVj
MGQxOGFhODFiNTZiYzE3MzUzOGUyMzJhYzBjNzMuLmI0MGQ2ZDIxMjI1MjU2YmIxNmZiNTljY2Ni
ZWFhNDMzYmM1NjU4ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0xNDM0LDE0ICsxNDM0
LDYgQEAgc3RhdGljIGlubGluZSBGbG9hdFNpemUgc2l6ZShUeXBlZE9NQ1NTSW1hZ2VWYWx1ZSYg
aW1hZ2UpCiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBGbG9hdFJlY3Qgbm9ybWFsaXplUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChzdGQ6Om1p
bihyZWN0LngoKSwgcmVjdC5tYXhYKCkpLAotICAgICAgICBzdGQ6Om1pbihyZWN0LnkoKSwgcmVj
dC5tYXhZKCkpLAotICAgICAgICBzdGQ6Om1heChyZWN0LndpZHRoKCksIC1yZWN0LndpZHRoKCkp
LAotICAgICAgICBzdGQ6Om1heChyZWN0LmhlaWdodCgpLCAtcmVjdC5oZWlnaHQoKSkpOwotfQot
CiBFeGNlcHRpb25Pcjx2b2lkPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3SW1h
Z2UoQ2FudmFzSW1hZ2VTb3VyY2UmJiBpbWFnZSwgZmxvYXQgZHgsIGZsb2F0IGR5KQogewogICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKGltYWdlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKaW5kZXggZTY5NDM5NzA1YTU1NDk4ZmZmZDVlNTM4YWQw
ZDMxNzQ0MzMzZjIxZC4uMDFhOGYxMjhjNTMzOWVmOWQ0NDZhYzcyM2Y3MTk2Njc2YWE3MzI3ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCkBA
IC0yMzEsNiArMjMxLDE0IEBAIHZvaWQgRmxvYXRSZWN0OjpmaXRUb1BvaW50cyhjb25zdCBGbG9h
dFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsCiAgICAgc2V0TG9jYXRp
b25BbmRTaXplRnJvbUVkZ2VzKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiB9CiAKK0Zsb2F0
UmVjdCBub3JtYWxpemVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4g
RmxvYXRSZWN0KHN0ZDo6bWluKHJlY3QueCgpLCByZWN0Lm1heFgoKSksCisgICAgICAgIHN0ZDo6
bWluKHJlY3QueSgpLCByZWN0Lm1heFkoKSksCisgICAgICAgIHN0ZDo6bWF4KHJlY3Qud2lkdGgo
KSwgLXJlY3Qud2lkdGgoKSksCisgICAgICAgIHN0ZDo6bWF4KHJlY3QuaGVpZ2h0KCksIC1yZWN0
LmhlaWdodCgpKSk7Cit9CisKIEZsb2F0UmVjdCBlbmNsb3NlUmVjdFRvRGV2aWNlUGl4ZWxzKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7CiAgICAgRmxv
YXRQb2ludCBsb2NhdGlvbiA9IGZsb29yUG9pbnRUb0RldmljZVBpeGVscyhyZWN0Lm1pblhNaW5Z
Q29ybmVyKCksIGRldmljZVNjYWxlRmFjdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmgKaW5kZXggYjA4NWFhYTk5ODMyNGI0NzllOTUxMTMxMjUzMDM3
OWNkYTQxNmJlOC4uNDY2ZjEyY2MzNzE5YmI5MWUyNTE2Y2YxMTYzZWY4NGIwMDA5ZWNiNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKQEAgLTI4OSw2
ICsyODksNyBAQCBpbmxpbmUgYm9vbCBGbG9hdFJlY3Q6OmlzSW5maW5pdGUoKSBjb25zdAogICAg
IHJldHVybiAqdGhpcyA9PSBpbmZpbml0ZVJlY3QoKTsKIH0KIAorRmxvYXRSZWN0IG5vcm1hbGl6
ZVJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgZW5jbG9z
ZVJlY3RUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3Rvcik7CiBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRmxv
YXRSZWN0Jik7CiBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IHJvdW5kZWRJbnRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IDY3ODMyYzJkODVkZGZmOTdjMDQ0ZTFh
MmU0MTE2YjAzMGE5NjNkYzUuLjJiZTNhNWU5Y2IzZTEzNmY1ODc0YTI3ZDg1Y2VjNjg2MTc5M2Zh
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTIzMCw4NCArMjMwLDkzIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OnJlc3RvcmUoKQogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05hdGl2
ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgYXV0byBpbWFnZSA9
IG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IEZsb2F0
UmVjdCB7IHsgfSwgaW1hZ2VTaXplIH07CisgICAgYXV0byBub3JtYWxpemVkU3JjUmVjdCA9IG5v
cm1hbGl6ZVJlY3Qoc3JjUmVjdCk7CisgICAgYXV0byBub3JtYWxpemVkRGVzdFJlY3QgPSBub3Jt
YWxpemVSZWN0KGRlc3RSZWN0KTsKKworICAgIGlmICghaW1hZ2UgfHwgIWltYWdlUmVjdC5pbnRl
cnNlY3RzKG5vcm1hbGl6ZWRTcmNSZWN0KSkKKyAgICAgICAgcmV0dXJuOwogCiAjaWYgIUxPR19E
SVNBQkxFRAogICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93
KCk7CiAjZW5kaWYKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc3ViSW1hZ2UoaW1hZ2UpOwog
Ci0gICAgYXV0byBsb2dpY2FsSGVpZ2h0ID0gWyZdKENHSW1hZ2VSZWYgaW1hZ2UpIHsKLSAgICAg
ICAgcmV0dXJuIG9wdGlvbnMub3JpZW50YXRpb24oKS51c2VzV2lkdGhBc0hlaWdodCgpID8gQ0dJ
bWFnZUdldFdpZHRoKGltYWdlKSA6IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOworICAgIGF1dG8g
c2hvdWxkVXNlU3ViaW1hZ2UgPSBbXShDR0ludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRp
b25RdWFsaXR5LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSAtPiBib29sIHsKKyAgICAg
ICAgaWYgKGludGVycG9sYXRpb25RdWFsaXR5ID09IGtDR0ludGVycG9sYXRpb25Ob25lKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodHJhbnNmb3JtLmlzUm90YXRlT3JT
aGVhcigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGF1dG8geFNjYWxlID0g
ZGVzdFJlY3Qud2lkdGgoKSAqIHRyYW5zZm9ybS54U2NhbGUoKSAvIHNyY1JlY3Qud2lkdGgoKTsK
KyAgICAgICAgYXV0byB5U2NhbGUgPSBkZXN0UmVjdC5oZWlnaHQoKSAqIHRyYW5zZm9ybS55U2Nh
bGUoKSAvIHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiAhV1RGOjphcmVFc3NlbnRp
YWxseUVxdWFsKHhTY2FsZSwgeVNjYWxlKSB8fCB4U2NhbGUgPiAxOwogICAgIH07CiAKLSAgICBm
bG9hdCBjdXJySGVpZ2h0ID0gbG9naWNhbEhlaWdodChzdWJJbWFnZS5nZXQoKSk7Ci0gICAgaWYg
KGN1cnJIZWlnaHQgPD0gc3JjUmVjdC55KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQ0dBZmZpbmVUcmFuc2Zv
cm0gdHJhbnNmb3JtID0gQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpOwotICAgIENHQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBmYWxzZSk7Ci0gICAgCi0gICAgYm9vbCBzaG91
bGRVc2VTdWJpbWFnZSA9IGZhbHNlOwotCi0gICAgLy8gSWYgdGhlIHNvdXJjZSByZWN0IGlzIGEg
c3VicG9ydGlvbiBvZiB0aGUgaW1hZ2UsIHRoZW4gd2UgY29tcHV0ZSBhbiBpbmZsYXRlZCBkZXN0
aW5hdGlvbiByZWN0IHRoYXQgd2lsbCBob2xkIHRoZSBlbnRpcmUgaW1hZ2UKLSAgICAvLyBhbmQg
dGhlbiBzZXQgYSBjbGlwIHRvIHRoZSBwb3J0aW9uIHRoYXQgd2Ugd2FudCB0byBkaXNwbGF5Lgot
ICAgIEZsb2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJlY3Q7Ci0KLSAgICBpZiAoc3Jj
UmVjdC5zaXplKCkgIT0gaW1hZ2VTaXplKSB7Ci0gICAgICAgIENHSW50ZXJwb2xhdGlvblF1YWxp
dHkgaW50ZXJwb2xhdGlvblF1YWxpdHkgPSBDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0
eShjb250ZXh0KTsKLSAgICAgICAgLy8gV2hlbiB0aGUgaW1hZ2UgaXMgc2NhbGVkIHVzaW5nIGhp
Z2gtcXVhbGl0eSBpbnRlcnBvbGF0aW9uLCB3ZSBjcmVhdGUgYSB0ZW1wb3JhcnkgQ0dJbWFnZQot
ICAgICAgICAvLyBjb250YWluaW5nIG9ubHkgdGhlIHBvcnRpb24gd2Ugd2FudCB0byBkaXNwbGF5
LiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSBoaWdoLXF1YWxpdHkKLSAgICAgICAgLy8gaW50
ZXJwb2xhdGlvbiBzbW9vdGhlcyBzaGFycCBlZGdlcywgY2F1c2luZyBwaXhlbHMgZnJvbSBvdXRz
aWRlIHRoZSBzb3VyY2UgcmVjdCB0byBibGVlZAotICAgICAgICAvLyBpbnRvIHRoZSBkZXN0aW5h
dGlvbiByZWN0LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYxMTI5MDk+LgotICAgICAgICBjb25zdCBm
bG9hdCBtaW5pbXVtQXJlYUZvckludGVycG9sYXRpb24gPSA0MCAqIDQwOwotICAgICAgICBmbG9h
dCB4U2NhbGUgPSBzcmNSZWN0LndpZHRoKCkgLyBkZXN0UmVjdC53aWR0aCgpOwotICAgICAgICBm
bG9hdCB5U2NhbGUgPSBzcmNSZWN0LmhlaWdodCgpIC8gZGVzdFJlY3QuaGVpZ2h0KCk7Ci0gICAg
ICAgIHNob3VsZFVzZVN1YmltYWdlID0gKGludGVycG9sYXRpb25RdWFsaXR5ICE9IGtDR0ludGVy
cG9sYXRpb25Ob25lKSAmJiAoeFNjYWxlIDwgMCB8fCB5U2NhbGUgPCAwIHx8IGRlc3RSZWN0LmFy
ZWEoKSA+PSBtaW5pbXVtQXJlYUZvckludGVycG9sYXRpb24pICYmIChzcmNSZWN0LnNpemUoKSAh
PSBkZXN0UmVjdC5zaXplKCkgfHwgIWdldENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JG
bGlwcGVkKCkpOwotICAgICAgICBpZiAoc2hvdWxkVXNlU3ViaW1hZ2UpIHsKLSAgICAgICAgICAg
IEZsb2F0UmVjdCBzdWJpbWFnZVJlY3QgPSBzcmNSZWN0OwotICAgICAgICAgICAgZmxvYXQgbGVm
dFBhZGRpbmcgPSBzcmNSZWN0LngoKSAtIGZsb29yZihzcmNSZWN0LngoKSk7Ci0gICAgICAgICAg
ICBmbG9hdCB0b3BQYWRkaW5nID0gc3JjUmVjdC55KCkgLSBmbG9vcmYoc3JjUmVjdC55KCkpOwot
Ci0gICAgICAgICAgICBzdWJpbWFnZVJlY3QubW92ZSgtbGVmdFBhZGRpbmcsIC10b3BQYWRkaW5n
KTsKLSAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3QubW92ZSgtbGVmdFBhZGRpbmcgLyB4U2Nh
bGUsIC10b3BQYWRkaW5nIC8geVNjYWxlKTsKLQotICAgICAgICAgICAgc3ViaW1hZ2VSZWN0LnNl
dFdpZHRoKGNlaWxmKHN1YmltYWdlUmVjdC53aWR0aCgpICsgbGVmdFBhZGRpbmcpKTsKLSAgICAg
ICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0V2lkdGgoc3ViaW1hZ2VSZWN0LndpZHRoKCkgLyB4
U2NhbGUpOwotCi0gICAgICAgICAgICBzdWJpbWFnZVJlY3Quc2V0SGVpZ2h0KGNlaWxmKHN1Ymlt
YWdlUmVjdC5oZWlnaHQoKSArIHRvcFBhZGRpbmcpKTsKLSAgICAgICAgICAgIGFkanVzdGVkRGVz
dFJlY3Quc2V0SGVpZ2h0KHN1YmltYWdlUmVjdC5oZWlnaHQoKSAvIHlTY2FsZSk7CisgICAgYXV0
byBnZXRTdWJpbWFnZSA9IFtdKENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIHN1YmltYWdlUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpIC0+IFJldGFpblB0cjxDR0ltYWdlUmVmPiB7CisgICAgICAgIGF1
dG8gcGh5c2ljYWxTdWJpbWFnZVJlY3QgPSBzdWJpbWFnZVJlY3Q7CiAKKyAgICAgICAgaWYgKG9w
dGlvbnMub3JpZW50YXRpb24oKSAhPSBJbWFnZU9yaWVudGF0aW9uOjpOb25lKSB7CiAgICAgICAg
ICAgICAvLyBzdWJpbWFnZVJlY3QgaXMgaW4gbG9naWNhbCBjb29yZGluYXRlcy4gZ2V0U3ViaW1h
Z2UoKSBkZWFscyB3aXRoIG5vbmUtb3JpZW50ZWQKICAgICAgICAgICAgIC8vIGltYWdlLiBXZSBu
ZWVkIHRvIGNvbnZlcnQgc3ViaW1hZ2VSZWN0IHRvIHBoeXNpY2FsIGltYWdlIGNvb3JkaW5hdGVz
LgotICAgICAgICAgICAgaWYgKG9wdGlvbnMub3JpZW50YXRpb24oKSAhPSBJbWFnZU9yaWVudGF0
aW9uOjpOb25lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gdHJhbnNmb3JtID0gb3B0aW9u
cy5vcmllbnRhdGlvbigpLnRyYW5zZm9ybUZyb21EZWZhdWx0KGltYWdlU2l6ZSkuaW52ZXJzZSgp
KQotICAgICAgICAgICAgICAgICAgICBzdWJpbWFnZVJlY3QgPSB0cmFuc2Zvcm0udmFsdWUoKS5t
YXBSZWN0KHN1YmltYWdlUmVjdCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXV0
byB0cmFuc2Zvcm0gPSBvcHRpb25zLm9yaWVudGF0aW9uKCkudHJhbnNmb3JtRnJvbURlZmF1bHQo
aW1hZ2VTaXplKS5pbnZlcnNlKCkpCisgICAgICAgICAgICAgICAgcGh5c2ljYWxTdWJpbWFnZVJl
Y3QgPSB0cmFuc2Zvcm0udmFsdWUoKS5tYXBSZWN0KHBoeXNpY2FsU3ViaW1hZ2VSZWN0KTsKKyAg
ICAgICAgfQogCiAjaWYgQ0FDSEVfU1VCSU1BR0VTCi0gICAgICAgICAgICBzdWJJbWFnZSA9IFN1
YmltYWdlQ2FjaGVXaXRoVGltZXI6OmdldFN1YmltYWdlKHN1YkltYWdlLmdldCgpLCBzdWJpbWFn
ZVJlY3QpOworICAgICAgICByZXR1cm4gU3ViaW1hZ2VDYWNoZVdpdGhUaW1lcjo6Z2V0U3ViaW1h
Z2UoaW1hZ2UsIHBoeXNpY2FsU3ViaW1hZ2VSZWN0KTsKICNlbHNlCi0gICAgICAgICAgICBzdWJJ
bWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChzdWJJbWFnZS5nZXQo
KSwgc3ViaW1hZ2VSZWN0KSk7CisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVX
aXRoSW1hZ2VJblJlY3QoaW1hZ2UsIHBoeXNpY2FsU3ViaW1hZ2VSZWN0KSk7CiAjZW5kaWYKLSAg
ICAgICAgICAgIGlmIChjdXJySGVpZ2h0IDwgc3JjUmVjdC5tYXhZKCkpIHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQobG9naWNhbEhlaWdodChzdWJJbWFnZS5nZXQoKSkgPT0gY3VyckhlaWdodCAt
IENHUmVjdEludGVncmFsKHNyY1JlY3QpLm9yaWdpbi55KTsKLSAgICAgICAgICAgICAgICBhZGp1
c3RlZERlc3RSZWN0LnNldEhlaWdodChsb2dpY2FsSGVpZ2h0KHN1YkltYWdlLmdldCgpKSAvIHlT
Y2FsZSk7CisgICAgfTsKKworICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IFtdKENHSW1hZ2VS
ZWYgaW1hZ2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSAtPiBGbG9hdFNp
emUgeworICAgICAgICBGbG9hdFNpemUgc2l6ZSA9IEZsb2F0U2l6ZShDR0ltYWdlR2V0V2lkdGgo
aW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSk7CisgICAgICAgIHJldHVybiBvcHRpb25z
Lm9yaWVudGF0aW9uKCkudXNlc1dpZHRoQXNIZWlnaHQoKSA/IHNpemUudHJhbnNwb3NlZFNpemUo
KSA6IHNpemU7CisgICAgfTsKKyAgICAKKyAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKKyAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZmFsc2Up
OworICAgIGF1dG8gdHJhbnNmb3JtID0gQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpOworCisgICAg
YXV0byBzdWJJbWFnZSA9IGltYWdlOworICAgIGF1dG8gY3VycmVudEltYWdlU2l6ZSA9IGltYWdl
TG9naWNhbFNpemUoaW1hZ2UuZ2V0KCksIG9wdGlvbnMpOworCisgICAgYXV0byBhZGp1c3RlZERl
c3RSZWN0ID0gbm9ybWFsaXplZERlc3RSZWN0OworCisgICAgaWYgKG5vcm1hbGl6ZWRTcmNSZWN0
ICE9IGltYWdlUmVjdCkgeworICAgICAgICBDR0ludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9s
YXRpb25RdWFsaXR5ID0gQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCk7
CisgICAgICAgIGF1dG8gc2NhbGUgPSBub3JtYWxpemVkRGVzdFJlY3Quc2l6ZSgpIC8gbm9ybWFs
aXplZFNyY1JlY3Quc2l6ZSgpOworCisgICAgICAgIGlmIChzaG91bGRVc2VTdWJpbWFnZShpbnRl
cnBvbGF0aW9uUXVhbGl0eSwgbm9ybWFsaXplZERlc3RSZWN0LCBub3JtYWxpemVkU3JjUmVjdCwg
dHJhbnNmb3JtKSkgeworICAgICAgICAgICAgYXV0byBzdWJpbWFnZVJlY3QgPSBlbmNsb3NpbmdJ
bnRSZWN0KG5vcm1hbGl6ZWRTcmNSZWN0KTsKKworICAgICAgICAgICAgLy8gV2hlbiB0aGUgaW1h
Z2UgaXMgc2NhbGVkIHVzaW5nIGhpZ2gtcXVhbGl0eSBpbnRlcnBvbGF0aW9uLCB3ZSBjcmVhdGUg
YSB0ZW1wb3JhcnkgQ0dJbWFnZQorICAgICAgICAgICAgLy8gY29udGFpbmluZyBvbmx5IHRoZSBw
b3J0aW9uIHdlIHdhbnQgdG8gZGlzcGxheS4gV2UgbmVlZCB0byBkbyB0aGlzIGJlY2F1c2UgaGln
aC1xdWFsaXR5CisgICAgICAgICAgICAvLyBpbnRlcnBvbGF0aW9uIHNtb290aGVzIHNoYXJwIGVk
Z2VzLCBjYXVzaW5nIHBpeGVscyBmcm9tIG91dHNpZGUgdGhlIHNvdXJjZSByZWN0IHRvIGJsZWVk
CisgICAgICAgICAgICAvLyBpbnRvIHRoZSBkZXN0aW5hdGlvbiByZWN0LiBTZWUgPHJkYXI6Ly9w
cm9ibGVtLzYxMTI5MDk+LgorICAgICAgICAgICAgc3ViSW1hZ2UgPSBnZXRTdWJpbWFnZShzdWJJ
bWFnZS5nZXQoKSwgaW1hZ2VTaXplLCBzdWJpbWFnZVJlY3QsIG9wdGlvbnMpOworICAgICAgICAg
ICAgYWRqdXN0ZWREZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoYWRqdXN0ZWREZXN0UmVjdCk7
CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBpbWFnZSBpcyBvbmx5IHBhcnRpYWxseSBsb2FkZWQs
IHRoZW4gc2hyaW5rIHRoZSBkZXN0aW5hdGlvbiByZWN0IHRoYXQgd2UncmUgZHJhd2luZworICAg
ICAgICAgICAgLy8gaW50byBhY2NvcmRpbmdseS4KKyAgICAgICAgICAgIGlmIChjdXJyZW50SW1h
Z2VTaXplLmhlaWdodCgpIDwgbm9ybWFsaXplZFNyY1JlY3QubWF4WSgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byBjdXJyZW50U3ViaW1hZ2VTaXplID0gaW1hZ2VMb2dpY2FsU2l6ZShzdWJJbWFn
ZS5nZXQoKSwgb3B0aW9ucyk7CisgICAgICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRI
ZWlnaHQoY3VycmVudFN1YmltYWdlU2l6ZS5oZWlnaHQoKSAqIHNjYWxlLmhlaWdodCgpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFkanVzdGVkRGVzdFJl
Y3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludChkZXN0UmVjdC54KCkgLSBzcmNSZWN0LngoKSAvIHhT
Y2FsZSwgZGVzdFJlY3QueSgpIC0gc3JjUmVjdC55KCkgLyB5U2NhbGUpKTsKLSAgICAgICAgICAg
IGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShGbG9hdFNpemUoaW1hZ2VTaXplLndpZHRoKCkgLyB4
U2NhbGUsIGltYWdlU2l6ZS5oZWlnaHQoKSAvIHlTY2FsZSkpOworICAgICAgICAgICAgLy8gSWYg
dGhlIHNvdXJjZSByZWN0IGlzIGEgc3VicG9ydGlvbiBvZiB0aGUgaW1hZ2UsIHRoZW4gd2UgY29t
cHV0ZSBhbiBpbmZsYXRlZCBkZXN0aW5hdGlvbiByZWN0CisgICAgICAgICAgICAvLyB0aGF0IHdp
bGwgaG9sZCB0aGUgZW50aXJlIGltYWdlIGFuZCB0aGVuIHNldCBhIGNsaXAgdG8gdGhlIHBvcnRp
b24gdGhhdCB3ZSB3YW50IHRvIGRpc3BsYXkuCisgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0
ID0geyBhZGp1c3RlZERlc3RSZWN0LmxvY2F0aW9uKCkgLSB0b0Zsb2F0U2l6ZShub3JtYWxpemVk
U3JjUmVjdC5sb2NhdGlvbigpKSAqIHNjYWxlLCBpbWFnZVNpemUgKiBzY2FsZSB9OwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKCFkZXN0UmVjdC5jb250YWlucyhhZGp1c3RlZERlc3RSZWN0KSkg
eworICAgICAgICBpZiAoIW5vcm1hbGl6ZWREZXN0UmVjdC5jb250YWlucyhhZGp1c3RlZERlc3RS
ZWN0KSkgewogICAgICAgICAgICAgc3RhdGVTYXZlci5zYXZlKCk7Ci0gICAgICAgICAgICBDR0Nv
bnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRlc3RSZWN0KTsKKyAgICAgICAgICAgIENHQ29udGV4
dENsaXBUb1JlY3QoY29udGV4dCwgbm9ybWFsaXplZERlc3RSZWN0KTsKICAgICAgICAgfQogICAg
IH0KIAogICAgIC8vIElmIHRoZSBpbWFnZSBpcyBvbmx5IHBhcnRpYWxseSBsb2FkZWQsIHRoZW4g
c2hyaW5rIHRoZSBkZXN0aW5hdGlvbiByZWN0IHRoYXQgd2UncmUgZHJhd2luZyBpbnRvIGFjY29y
ZGluZ2x5LgotICAgIGlmICghc2hvdWxkVXNlU3ViaW1hZ2UgJiYgY3VyckhlaWdodCA8IGltYWdl
U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQoYWRqdXN0
ZWREZXN0UmVjdC5oZWlnaHQoKSAqIGN1cnJIZWlnaHQgLyBpbWFnZVNpemUuaGVpZ2h0KCkpOwor
ICAgIGlmIChzdWJJbWFnZSA9PSBpbWFnZSAmJiBjdXJyZW50SW1hZ2VTaXplLmhlaWdodCgpIDwg
aW1hZ2VTaXplLmhlaWdodCgpKQorICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdodChh
ZGp1c3RlZERlc3RSZWN0LmhlaWdodCgpICogY3VycmVudEltYWdlU2l6ZS5oZWlnaHQoKSAvIGlt
YWdlU2l6ZS5oZWlnaHQoKSk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGJvb2wg
d2FzQW50aWFsaWFzZWQgPSBDR0NvbnRleHRHZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCk7CkBA
IC0zMjIsMTcgKzMzMSwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TmF0aXZlSW1h
Z2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpegogICAgIGF1dG8gb2xk
QmxlbmRNb2RlID0gYmxlbmRNb2RlT3BlcmF0aW9uKCk7CiAgICAgc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CiAK
LSAgICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwg
MCkKKyAgICAvLyBNYWtlIHRoZSBvcmlnaW4gYmUgYXQgYWRqdXN0ZWREZXN0UmVjdC5sb2NhdGlv
bigpCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIGFkanVzdGVkRGVzdFJlY3Qu
eCgpLCBhZGp1c3RlZERlc3RSZWN0LnkoKSk7Ci0gICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2Nh
dGlvbihGbG9hdFBvaW50KCkpOworICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0TG9jYXRpb24oRmxv
YXRQb2ludDo6emVybygpKTsKIAogICAgIGlmIChvcHRpb25zLm9yaWVudGF0aW9uKCkgIT0gSW1h
Z2VPcmllbnRhdGlvbjo6Tm9uZSkgewogICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4
dCwgb3B0aW9ucy5vcmllbnRhdGlvbigpLnRyYW5zZm9ybUZyb21EZWZhdWx0KGFkanVzdGVkRGVz
dFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIGlmIChvcHRpb25zLm9yaWVudGF0aW9uKCkudXNlc1dp
ZHRoQXNIZWlnaHQoKSkgewotICAgICAgICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3Qgd2ls
bCBoYXZlIGl0cyB3aWR0aCBhbmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmll
bnRhdGlvbiBvZgotICAgICAgICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZv
ciBwYWdlIGxheW91dCwgc28gd2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4KLSAgICAg
ICAgICAgIGFkanVzdGVkRGVzdFJlY3QgPSBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0UmVjdC54KCks
IGFkanVzdGVkRGVzdFJlY3QueSgpLCBhZGp1c3RlZERlc3RSZWN0LmhlaWdodCgpLCBhZGp1c3Rl
ZERlc3RSZWN0LndpZHRoKCkpOwotICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIGRlc3RpbmF0
aW9uIHJlY3Qgd2lsbCBoYXZlIGl0cyB3aWR0aCBhbmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQg
Zm9yIHRoZSBvcmllbnRhdGlvbiBvZgorICAgICAgICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBu
ZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBuZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJl
LgorICAgICAgICBpZiAob3B0aW9ucy5vcmllbnRhdGlvbigpLnVzZXNXaWR0aEFzSGVpZ2h0KCkp
CisgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0ID0gYWRqdXN0ZWREZXN0UmVjdC50cmFuc3Bv
c2VkUmVjdCgpOwogICAgIH0KICAgICAKICAgICAvLyBGbGlwIHRoZSBjb29yZHMuCkBAIC0zNDEs
NyArMzUwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXoKIAogICAgIC8vIERyYXcgdGhlIGlt
YWdlLgogICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBhZGp1c3RlZERlc3RSZWN0LCBz
dWJJbWFnZS5nZXQoKSk7Ci0gICAgCisKICAgICBpZiAoIXN0YXRlU2F2ZXIuZGlkU2F2ZSgpKSB7
CiAgICAgICAgIENHQ29udGV4dFNldENUTShjb250ZXh0LCB0cmFuc2Zvcm0pOwogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAppbmRleCA0MjdjZjI3NmI5
ODBkYTIxYjE5ZjMxYzMzMWFhNzFhZDYyNmI3MTUzLi4zNjVkYjA5NTk0ZTBkNmI5MDAzZDc1Y2Ux
M2U2YTVjZTI4OTkyZjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmgKQEAgLTE0Nyw2ICsx
NDcsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdHJhbnNmb3JtWzBdID09
IDEgJiYgbV90cmFuc2Zvcm1bMV0gPT0gMCAmJiBtX3RyYW5zZm9ybVsyXSA9PSAwICYmIChtX3Ry
YW5zZm9ybVszXSA9PSAxIHx8IG1fdHJhbnNmb3JtWzNdID09IC0xKTsKICAgICB9CisgICAgCisg
ICAgYm9vbCBpc1JvdGF0ZU9yU2hlYXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
dHJhbnNmb3JtWzFdIHx8IG1fdHJhbnNmb3JtWzJdOworICAgIH0KIAogICAgIGJvb2wgcHJlc2Vy
dmVzQXhpc0FsaWdubWVudCgpIGNvbnN0CiAgICAgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>