<?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>212405</bug_id>
          
          <creation_ts>2020-05-27 05:07:03 -0700</creation_ts>
          <short_desc>Support density-corrected size from EXIF metadata</short_desc>
          <delta_ts>2022-11-08 02:41:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=145380</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>217821</dependson>
    
    <dependson>217820</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>colin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>steven</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1656339</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-05-27 05:07:03 -0700</bug_when>
    <thetext>A new proposal to the HTML spec, following lack of traction to Content-DPR: https://bugs.webkit.org/show_bug.cgi?id=145380

The proposal is to use 5 EXIF attributes (XDimension/YDimension/XResolution/YResolution/ResolutionUnit) to allow an image to declare its &quot;intrinsic preferred size&quot; and &quot;intrinsic resolution&quot; - and only if they match each other, affect its intrinsic (natural) size accordingly.

Creating this bug to follow progress, in parallel with a similar Chromium bug, and the proposals to HTML spec. 

WICG: https://discourse.wicg.io/t/proposal-exif-image-resolution-auto-and-from-image/4326/24
HTML spec proposal: https://github.com/whatwg/html/pull/5574
WPT: https://github.com/web-platform-tests/wpt/pull/23789
Chromium bug: https://bugs.chromium.org/p/chromium/issues/detail?id=1069755</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673042</commentid>
    <comment_count>1</comment_count>
      <attachid>404712</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-07-20 06:35:18 -0700</bug_when>
    <thetext>Created attachment 404712
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673043</commentid>
    <comment_count>2</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-07-20 06:36:50 -0700</bug_when>
    <thetext>(In reply to Noam Rosenthal from comment #1)
&gt; Created attachment 404712 [details]
&gt; Patch

Uploaded a dry-run patch. It contains most of the bits and pieces, but waiting for the security issue with image metadata to be resolved before continuing (https://github.com/w3c/csswg-drafts/issues/5165#)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404712</attachid>
            <date>2020-07-20 06:35:18 -0700</date>
            <delta_ts>2020-07-20 06:35:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212405-20200720163515.patch</filename>
            <type>text/plain</type>
            <size>36810</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDU5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNyBAQAorMjAyMC0wNy0yMCAgTm9hbSBS
b3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3VwcG9ydCBkZW5zaXR5LWNv
cnJlY3RlZCBzaXplIGZyb20gRVhJRiBtZXRhZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHlldC4gd2FpdGluZyBmb3IgV1BU
IFBSIHRvIGxhbmQ6CisgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVz
dHMvd3B0L3B1bGwvMjM3ODkKKyAgICAgICAgCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNpemUpOgor
ICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRJbWFnZTo6aW1hZ2VTaXplRm9yUmVuZGVyZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGVkSW1hZ2U6OnVuY2xhbXBlZEltYWdlU2l6ZUZvclJlbmRlcmVyIGNvbnN0KToK
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpjb21wdXRlSW50cmluc2ljRGltZW5z
aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpkZW5zaXR5Q29ycmVjdGVkU2l6ZSBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXI6OmZyYW1lRGVuc2l0eUNvcnJlY3RlZFNpemVBdEluZGV4IGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpzZXREZW5zaXR5Q29ycmVjdGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpkZW5zaXR5Q29ycmVjdGVkU2l6ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmNhY2hlTWV0YWRhdGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpk
ZW5zaXR5Q29ycmVjdGVkU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJbWFnZVNvdXJjZU1ldGFkYXRhT3B0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpkZW5zaXR5Q29ycmVjdGVkU2l6ZUZyb21Qcm9wZXJ0aWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckNHOjpmcmFtZURlbnNpdHlDb3JyZWN0ZWRT
aXplQXRJbmRleCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VE
ZWNvZGVyQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUlt
YWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWFkUG9pbnRlck9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpyZWFkVW5zaWduZWRSYXRpb25hbCk6CisgICAgICAgIChXZWJD
b3JlOjpyZWFkRXhpZkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkSW1hZ2VPcmll
bnRhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OkpQ
RUdJbWFnZVJlYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFk
ZXI6On5KUEVHSW1hZ2VSZWFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlBFR0lt
YWdlUmVhZGVyOjpjbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VS
ZWFkZXI6OnNraXBCeXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VS
ZWFkZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFk
ZXI6OmluZm8pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpz
YW1wbGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJlYWRl
cjo6ZGVjb2Rlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjplcnJvcl9leGl0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmluaXRfc291cmNlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnNraXBfaW5wdXRfZGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpm
aWxsX2lucHV0X2J1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp0ZXJtX3NvdXJj
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpKUEVHSW1h
Z2VEZWNvZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6
OmZyYW1lQnVmZmVyQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1h
Z2VEZWNvZGVyOjpzZXRGYWlsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4
ZWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0
U2NhbmxpbmVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6
OmpwZWdDb21wbGV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNv
ZGVyOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFn
ZVJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlUmVzb3VyY2U6Omlt
YWdlU2l6ZSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDYWNoZWRJbWFnZTo6aW1hZ2VTaXplIGNv
bnN0KToKKworMjAyMC0wNy0yMCAgTm9hbSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgU3VwcG9ydCBkZW5zaXR5LWNvcnJlY3RlZCBzaXplIGZyb20gRVhJRiBtZXRhZGF0
YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDA1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNpemUpOgorICAgICAgICAqIGxv
YWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFn
ZTo6aW1hZ2VTaXplRm9yUmVuZGVyZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
SW1hZ2U6OnVuY2xhbXBlZEltYWdlU2l6ZUZvclJlbmRlcmVyIGNvbnN0KToKKyAgICAgICAgKiBs
b2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlOjpjb21wdXRlSW50cmluc2ljRGltZW5zaW9ucyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
OjpkZW5zaXR5Q29ycmVjdGVkU2l6ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1l
RGVuc2l0eUNvcnJlY3RlZFNpemVBdEluZGV4IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRE
ZW5zaXR5Q29ycmVjdGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpkZW5z
aXR5Q29ycmVjdGVkU2l6ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNhY2hlTWV0YWRh
dGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpkZW5zaXR5Q29ycmVj
dGVkU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVJbWFnZVNvdXJjZU1ldGFkYXRhT3B0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpkZW5zaXR5Q29ycmVjdGVkU2l6ZUZyb21Qcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RlckNHOjpmcmFtZURlbnNpdHlDb3JyZWN0ZWRTaXplQXRJbmRleCBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWFkUG9pbnRlck9mZnNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpyZWFkVW5zaWduZWRSYXRpb25hbCk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkRXhp
ZkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkSW1hZ2VPcmllbnRhdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OkpQRUdJbWFnZVJlYWRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6On5KUEVHSW1h
Z2VSZWFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpj
bG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OnNraXBC
eXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OmluZm8pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpzYW1wbGVzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJlYWRlcjo6ZGVjb2Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjplcnJvcl9leGl0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmluaXRfc291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNr
aXBfaW5wdXRfZGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaWxsX2lucHV0X2J1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp0ZXJtX3NvdXJjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpKUEVHSW1hZ2VEZWNvZGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVy
QXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpz
ZXRGYWlsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWwpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmpwZWdDb21wbGV0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0lt
YWdlRGVjb2Rlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlUmVzb3VyY2U6OmltYWdlU2l6ZSBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVDYWNoZWRJbWFnZTo6aW1hZ2VTaXplIGNvbnN0KToKKwogMjAy
MC0wNy0yMCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dTdHJlYW1lcl0gQWRkIHN1cHBvcnQgZm9yIGNhbnZhcyBjYXB0dXJlU3RyZWFtLCB0ZXN0
cyBmYWlsaW5nIHNpbmNlIHRoZXkgd2VyZSBhZGRlZCBpbiByMjEzNTk4CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmNwcAkocmV2aXNpb24gMjY0NTk2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNzAsMTMgKzEzNzAsMTUgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
aG91bAogZW51bSBjbGFzcyBJbWFnZVNpemVUeXBlIHsgQWZ0ZXJEZXZpY2VQaXhlbFJhdGlvLCBC
ZWZvcmVEZXZpY2VQaXhlbFJhdGlvIH07CiBzdGF0aWMgTGF5b3V0U2l6ZSBzaXplKEhUTUxJbWFn
ZUVsZW1lbnQmIGVsZW1lbnQsIEltYWdlU2l6ZVR5cGUgc2l6ZVR5cGUgPSBJbWFnZVNpemVUeXBl
OjpCZWZvcmVEZXZpY2VQaXhlbFJhdGlvKQogewotICAgIExheW91dFNpemUgc2l6ZTsKLSAgICBp
ZiAoYXV0byogY2FjaGVkSW1hZ2UgPSBlbGVtZW50LmNhY2hlZEltYWdlKCkpIHsKLSAgICAgICAg
c2l6ZSA9IGNhY2hlZEltYWdlLT5pbWFnZVNpemVGb3JSZW5kZXJlcihlbGVtZW50LnJlbmRlcmVy
KCksIDEuMGYpOyAvLyBGSVhNRTogTm90IHN1cmUgYWJvdXQgdGhpcy4KLSAgICAgICAgaWYgKHNp
emVUeXBlID09IEltYWdlU2l6ZVR5cGU6OkFmdGVyRGV2aWNlUGl4ZWxSYXRpbyAmJiBpczxSZW5k
ZXJJbWFnZT4oZWxlbWVudC5yZW5kZXJlcigpKSAmJiBjYWNoZWRJbWFnZS0+aW1hZ2UoKSAmJiAh
Y2FjaGVkSW1hZ2UtPmltYWdlKCktPmhhc1JlbGF0aXZlV2lkdGgoKSkKLSAgICAgICAgICAgIHNp
emUuc2NhbGUoZG93bmNhc3Q8UmVuZGVySW1hZ2U+KCplbGVtZW50LnJlbmRlcmVyKCkpLmltYWdl
RGV2aWNlUGl4ZWxSYXRpbygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNpemU7CisgICAgYXV0byog
Y2FjaGVkSW1hZ2UgPSBlbGVtZW50LmNhY2hlZEltYWdlKCk7CisgICAgaWYgKCFjYWNoZWRJbWFn
ZSkKKyAgICAgICAgcmV0dXJuIExheW91dFNpemUoKTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9
IDEuZjsKKworICAgIGlmIChzaXplVHlwZSA9PSBJbWFnZVNpemVUeXBlOjpBZnRlckRldmljZVBp
eGVsUmF0aW8gJiYgaXM8UmVuZGVySW1hZ2U+KGVsZW1lbnQucmVuZGVyZXIoKSkgJiYgY2FjaGVk
SW1hZ2UtPmltYWdlKCkgJiYgIWNhY2hlZEltYWdlLT5pbWFnZSgpLT5oYXNSZWxhdGl2ZVdpZHRo
KCkpCisgICAgICAgIHNjYWxlRmFjdG9yID0gZG93bmNhc3Q8UmVuZGVySW1hZ2U+KCplbGVtZW50
LnJlbmRlcmVyKCkpLmltYWdlRGV2aWNlUGl4ZWxSYXRpbygpOworCisgICAgcmV0dXJuIGNhY2hl
ZEltYWdlLT5pbWFnZVNpemVGb3JSZW5kZXJlcihlbGVtZW50LnJlbmRlcmVyKCksIDEuMGYsIHNp
emVUeXBlID09IEltYWdlU2l6ZVR5cGU6OkFmdGVyRGV2aWNlUGl4ZWxSYXRpbyA/IENhY2hlZElt
YWdlOjpVc2VkU2l6ZSA6IENhY2hlZEltYWdlOjpTb3VyY2VTaXplLCBzY2FsZUZhY3Rvcik7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgRmxvYXRTaXplIHNpemUoQ2FudmFzQmFzZSYgY2FudmFzKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lv
biAyNjQ1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsMTYgKzI5NiwzMCBAQCBGbG9hdFNpemUgQ2FjaGVkSW1h
Z2U6OmltYWdlU2l6ZUZvclJlbmRlCiAgICAgaWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgaWYgKGlzPFNWR0ltYWdlPigqbV9pbWFnZSkgJiYgc2l6ZVR5cGUgPT0gVXNl
ZFNpemUpCisgICAgaWYgKGlzPFNWR0ltYWdlPigqbV9pbWFnZSkgJiYgc2l6ZVR5cGUgIT0gSW50
cmluc2ljU2l6ZSkKICAgICAgICAgcmV0dXJuIG1fc3ZnSW1hZ2VDYWNoZS0+aW1hZ2VTaXplRm9y
UmVuZGVyZXIocmVuZGVyZXIpOwogCiAgICAgcmV0dXJuIG1faW1hZ2UtPnNpemUocmVuZGVyZXIg
PyByZW5kZXJlci0+aW1hZ2VPcmllbnRhdGlvbigpIDogSW1hZ2VPcmllbnRhdGlvbihJbWFnZU9y
aWVudGF0aW9uOjpGcm9tSW1hZ2UpKTsKIH0KIAotCi1MYXlvdXRTaXplIENhY2hlZEltYWdlOjp1
bmNsYW1wZWRJbWFnZVNpemVGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJl
ciwgZmxvYXQgbXVsdGlwbGllciwgU2l6ZVR5cGUgc2l6ZVR5cGUpIGNvbnN0CitMYXlvdXRTaXpl
IENhY2hlZEltYWdlOjp1bmNsYW1wZWRJbWFnZVNpemVGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJF
bGVtZW50KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGllciwgU2l6ZVR5cGUgc2l6ZVR5cGUsIGZs
b2F0IHJlcXVlc3RlZFNjYWxlRmFjdG9yKSBjb25zdAogewotICAgIExheW91dFNpemUgaW1hZ2VT
aXplID0gTGF5b3V0U2l6ZShpbWFnZVNpemVGb3JSZW5kZXJlcihyZW5kZXJlciwgc2l6ZVR5cGUp
KTsKKyAgICBpZiAoIW1faW1hZ2UpCisgICAgICAgIHJldHVybiBMYXlvdXRTaXplKCk7CisKKyAg
ICBMYXlvdXRTaXplIGltYWdlU2l6ZTsKKyAgICBPcHRpb25hbDxJbnRTaXplPiBwcmVmZXJyZWRT
aXplOworICAgIAorICAgIGlmIChzaXplVHlwZSAhPSBTb3VyY2VTaXplKQorICAgICAgICBwcmVm
ZXJyZWRTaXplID0gbV9pbWFnZS0+ZGVuc2l0eUNvcnJlY3RlZFNpemUocmVuZGVyZXIgPyByZW5k
ZXJlci0+aW1hZ2VPcmllbnRhdGlvbigpIDogSW1hZ2VPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0
aW9uOjpGcm9tSW1hZ2UpKTsKKworICAgIGlmIChwcmVmZXJyZWRTaXplKQorICAgICAgICBpbWFn
ZVNpemUgPSBwcmVmZXJyZWRTaXplLnZhbHVlKCk7CisgICAgZWxzZSB7CisgICAgICAgIGltYWdl
U2l6ZSA9IExheW91dFNpemUoaW1hZ2VTaXplRm9yUmVuZGVyZXIocmVuZGVyZXIsIHNpemVUeXBl
KSk7CisgICAgICAgIGltYWdlU2l6ZS5zY2FsZShyZXF1ZXN0ZWRTY2FsZUZhY3Rvcik7CisgICAg
fQorCiAgICAgaWYgKGltYWdlU2l6ZS5pc0VtcHR5KCkgfHwgbXVsdGlwbGllciA9PSAxLjBmKQog
ICAgICAgICByZXR1cm4gaW1hZ2VTaXplOwogCkBAIC0zMTUsOSArMzI5LDkgQEAgTGF5b3V0U2l6
ZSBDYWNoZWRJbWFnZTo6dW5jbGFtcGVkSW1hZ2VTaQogICAgIHJldHVybiBpbWFnZVNpemU7ICAg
IAogfQogCi1MYXlvdXRTaXplIENhY2hlZEltYWdlOjppbWFnZVNpemVGb3JSZW5kZXJlcihjb25z
dCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGllciwgU2l6ZVR5cGUgc2l6
ZVR5cGUpIGNvbnN0CitMYXlvdXRTaXplIENhY2hlZEltYWdlOjppbWFnZVNpemVGb3JSZW5kZXJl
cihjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGllciwgU2l6ZVR5
cGUgc2l6ZVR5cGUsIGZsb2F0IHJlcXVlc3RlZFNjYWxlRmFjdG9yKSBjb25zdAogewotICAgIGF1
dG8gaW1hZ2VTaXplID0gdW5jbGFtcGVkSW1hZ2VTaXplRm9yUmVuZGVyZXIocmVuZGVyZXIsIG11
bHRpcGxpZXIsIHNpemVUeXBlKTsKKyAgICBhdXRvIGltYWdlU2l6ZSA9IHVuY2xhbXBlZEltYWdl
U2l6ZUZvclJlbmRlcmVyKHJlbmRlcmVyLCBtdWx0aXBsaWVyLCBzaXplVHlwZSwgcmVxdWVzdGVk
U2NhbGVGYWN0b3IpOwogICAgIGlmIChpbWFnZVNpemUuaXNFbXB0eSgpIHx8IG11bHRpcGxpZXIg
PT0gMS4wZikKICAgICAgICAgcmV0dXJuIGltYWdlU2l6ZTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgJKHJldmlzaW9uIDI2NDU5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NCwxMiArNzQsMTMgQEAgcHVibGljOgogCiAgICAgZW51bSBTaXplVHlwZSB7CiAgICAgICAgIFVz
ZWRTaXplLAotICAgICAgICBJbnRyaW5zaWNTaXplCisgICAgICAgIEludHJpbnNpY1NpemUsCisg
ICAgICAgIFNvdXJjZVNpemUKICAgICB9OwogICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBp
bWFnZVNpemVGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgU2l6ZVR5
cGUgPSBVc2VkU2l6ZSkgY29uc3Q7CiAgICAgLy8gVGhpcyBtZXRob2QgdGFrZXMgYSB6b29tIG11
bHRpcGxpZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBpbmNyZWFzZSB0aGUgbmF0dXJhbCBzaXplIG9m
IHRoZSBpbWFnZSBieSB0aGUgem9vbS4KLSAgICBMYXlvdXRTaXplIGltYWdlU2l6ZUZvclJlbmRl
cmVyKGNvbnN0IFJlbmRlckVsZW1lbnQqLCBmbG9hdCBtdWx0aXBsaWVyLCBTaXplVHlwZSA9IFVz
ZWRTaXplKSBjb25zdDsgLy8gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgY29tcGxldGUgaW1hZ2Uu
Ci0gICAgTGF5b3V0U2l6ZSB1bmNsYW1wZWRJbWFnZVNpemVGb3JSZW5kZXJlcihjb25zdCBSZW5k
ZXJFbGVtZW50KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGllciwgU2l6ZVR5cGUgPSBVc2VkU2l6
ZSkgY29uc3Q7CisgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemVGb3JSZW5kZXJlcihjb25zdCBSZW5k
ZXJFbGVtZW50KiwgZmxvYXQgbXVsdGlwbGllciwgU2l6ZVR5cGUgPSBVc2VkU2l6ZSwgZmxvYXQg
c2NhbGVGYWN0b3IgPSAxLmYpIGNvbnN0OyAvLyByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb21w
bGV0ZSBpbWFnZS4KKyAgICBMYXlvdXRTaXplIHVuY2xhbXBlZEltYWdlU2l6ZUZvclJlbmRlcmVy
KGNvbnN0IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBmbG9hdCBtdWx0aXBsaWVyLCBTaXplVHlw
ZSA9IFVzZWRTaXplLCBmbG9hdCA9IDEuZikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlSW50cmlu
c2ljRGltZW5zaW9ucyhMZW5ndGgmIGludHJpbnNpY1dpZHRoLCBMZW5ndGgmIGludHJpbnNpY0hl
aWdodCwgRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbyk7CiAKICAgICBib29sIGlzTWFudWFsbHlD
YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lzTWFudWFsbHlDYWNoZWQ7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAkocmV2aXNpb24g
MjY0NTk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBGbG9h
dFNpemUgZHVlIHRvIG92ZXJyaWRlLgogICAgIEZsb2F0U2l6ZSBzaXplKEltYWdlT3JpZW50YXRp
b24gb3JpZW50YXRpb24gPSBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fc291cmNlLT5zaXplKG9yaWVudGF0aW9uKTsgfQorICAgIE9wdGlvbmFs
PEludFNpemU+IGRlbnNpdHlDb3JyZWN0ZWRTaXplKEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRp
b24gPSBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fc291cmNlLT5kZW5zaXR5Q29ycmVjdGVkU2l6ZShvcmllbnRhdGlvbik7IH0KICAgICBJbWFn
ZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zb3Vy
Y2UtPm9yaWVudGF0aW9uKCk7IH0KICAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS0+c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7
IH0KICAgICBib29sIGZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0NvbXBhdGlibGVXaXRoT3B0aW9u
c0F0SW5kZXgoc2l6ZV90IGluZGV4LCBjb25zdCBEZWNvZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0
aW9ucykgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0Nv
bXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoaW5kZXgsIGRlY29kaW5nT3B0aW9ucyk7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAJKHJldmlzaW9u
IDI2NDU5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMyLDcgKzMzMiw4IEBAIEltYWdlRHJhd1Jlc3VsdCBJbWFnZTo6
ZHJhd1RpbGVkKEdyYXBoaWMKIAogdm9pZCBJbWFnZTo6Y29tcHV0ZUludHJpbnNpY0RpbWVuc2lv
bnMoTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0
U2l6ZSYgaW50cmluc2ljUmF0aW8pCiB7Ci0gICAgaW50cmluc2ljUmF0aW8gPSBzaXplKCk7Cisg
ICAgYXV0byBwcmVmZXJyZWRTaXplID0gZGVuc2l0eUNvcnJlY3RlZFNpemUoKTsKKyAgICBpbnRy
aW5zaWNSYXRpbyA9IHByZWZlcnJlZFNpemUgPyBwcmVmZXJyZWRTaXplLnZhbHVlKCkgOiBzaXpl
KCk7CiAgICAgaW50cmluc2ljV2lkdGggPSBMZW5ndGgoaW50cmluc2ljUmF0aW8ud2lkdGgoKSwg
Rml4ZWQpOwogICAgIGludHJpbnNpY0hlaWdodCA9IExlbmd0aChpbnRyaW5zaWNSYXRpby5oZWln
aHQoKSwgRml4ZWQpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZS5oCShyZXZpc2lvbiAyNjQ1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDcgQEAgcHVibGljOgog
ICAgIGZsb2F0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKS5oZWlnaHQoKTsgfQogICAg
IHZpcnR1YWwgT3B0aW9uYWw8SW50UG9pbnQ+IGhvdFNwb3QoKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KICAgICB2aXJ0dWFsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBj
b25zdCB7IHJldHVybiBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2U7IH0KKyAgICB2aXJ0dWFs
IE9wdGlvbmFsPEludFNpemU+IGRlbnNpdHlDb3JyZWN0ZWRTaXplKEltYWdlT3JpZW50YXRpb24g
PSBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9w
dDsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgRW5jb2RlZERhdGFTdGF0dXMgc2V0RGF0YShSZWZQ
dHI8U2hhcmVkQnVmZmVyPiYmIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKICAgICB2aXJ0
dWFsIEVuY29kZWREYXRhU3RhdHVzIGRhdGFDaGFuZ2VkKGJvb2wgLyphbGxEYXRhUmVjZWl2ZWQq
LykgeyByZXR1cm4gRW5jb2RlZERhdGFTdGF0dXM6OlVua25vd247IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAy
NjQ1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJ
bnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2Ft
cGxpbmdMZXZlbDo6RGVmYXVsdCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBmcmFtZUlz
Q29tcGxldGVBdEluZGV4KHNpemVfdCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgSW1hZ2VPcmll
bnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIE9wdGlvbmFsPEludFNpemU+IGZyYW1lRGVuc2l0eUNvcnJlY3RlZFNpemVBdEluZGV4
KHNpemVfdCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKICAgICB2aXJ0dWFsIFNl
Y29uZHMgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCkgY29uc3QgPSAwOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuaAkocmV2aXNpb24g
MjY0NTk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE9y
aWVudGF0aW9uKEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9
IG9yaWVudGF0aW9uOyB9OwogICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25z
dCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9CiAKKyAgICB2b2lkIHNldERlbnNpdHlDb3JyZWN0
ZWRTaXplKGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9kZW5zaXR5Q29ycmVjdGVkU2l6ZSA9IHNp
emU7IH0KKyAgICBPcHRpb25hbDxJbnRTaXplPiBkZW5zaXR5Q29ycmVjdGVkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGVuc2l0eUNvcnJlY3RlZFNpemU7IH0KKwogICAgIHZvaWQgc2V0RHVyYXRp
b24oY29uc3QgU2Vjb25kcyYgZHVyYXRpb24pIHsgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9CiAg
ICAgU2Vjb25kcyBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KIApAQCAt
OTAsNiArOTMsNyBAQCBwcml2YXRlOgogICAgIERlY29kaW5nT3B0aW9ucyBtX2RlY29kaW5nT3B0
aW9uczsKIAogICAgIEltYWdlT3JpZW50YXRpb24gbV9vcmllbnRhdGlvbiB7IEltYWdlT3JpZW50
YXRpb246Ok5vbmUgfTsKKyAgICBPcHRpb25hbDxJbnRTaXplPiBtX2RlbnNpdHlDb3JyZWN0ZWRT
aXplOwogICAgIFNlY29uZHMgbV9kdXJhdGlvbjsKICAgICBib29sIG1faGFzQWxwaGEgeyB0cnVl
IH07CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlU291cmNlLmNwcAkocmV2aXNpb24gMjY0NTk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNiArMjcy
LDcgQEAgdm9pZCBJbWFnZVNvdXJjZTo6Y2FjaGVNZXRhZGF0YUF0SW5kZXgocwogICAgICAgICBm
cmFtZS5tX3NpemUgPSBtX2RlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBs
aW5nTGV2ZWwpOwogCiAgICAgZnJhbWUubV9vcmllbnRhdGlvbiA9IG1fZGVjb2Rlci0+ZnJhbWVP
cmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOworICAgIGZyYW1lLm1fZGVuc2l0eUNvcnJlY3RlZFNp
emUgPSBtX2RlY29kZXItPmZyYW1lRGVuc2l0eUNvcnJlY3RlZFNpemVBdEluZGV4KGluZGV4KTsK
ICAgICBmcmFtZS5tX2hhc0FscGhhID0gbV9kZWNvZGVyLT5mcmFtZUhhc0FscGhhQXRJbmRleChp
bmRleCk7CiAKICAgICBpZiAocmVwZXRpdGlvbkNvdW50KCkpCkBAIC01NjUsNiArNTY2LDE4IEBA
IEltYWdlT3JpZW50YXRpb24gSW1hZ2VTb3VyY2U6Om9yaWVudGF0aW8KICAgICByZXR1cm4gZnJh
bWVNZXRhZGF0YUF0SW5kZXhDYWNoZUlmTmVlZGVkPEltYWdlT3JpZW50YXRpb24+KDAsICgmSW1h
Z2VGcmFtZTo6b3JpZW50YXRpb24pLCAmbV9vcmllbnRhdGlvbiwgSW1hZ2VGcmFtZTo6Q2FjaGlu
Zzo6TWV0YWRhdGEpOwogfQogCitPcHRpb25hbDxJbnRTaXplPiBJbWFnZVNvdXJjZTo6ZGVuc2l0
eUNvcnJlY3RlZFNpemUoSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBPcHRp
b25hbDxJbnRTaXplPiBzaXplID0gZnJhbWVNZXRhZGF0YUF0SW5kZXhDYWNoZUlmTmVlZGVkPE9w
dGlvbmFsPEludFNpemU+PigwLCAoJkltYWdlRnJhbWU6OmRlbnNpdHlDb3JyZWN0ZWRTaXplKSwg
Jm1fZGVuc2l0eUNvcnJlY3RlZFNpemUsIEltYWdlRnJhbWU6OkNhY2hpbmc6Ok1ldGFkYXRhKTsK
KyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAo
b3JpZW50YXRpb24gPT0gSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlKQorICAgICAgICBvcmll
bnRhdGlvbiA9IHRoaXMtPm9yaWVudGF0aW9uKCk7CisKKyAgICByZXR1cm4gb3JpZW50YXRpb24u
dXNlc1dpZHRoQXNIZWlnaHQoKSA/IE9wdGlvbmFsPEludFNpemU+KHNpemUudmFsdWUoKS50cmFu
c3Bvc2VkU2l6ZSgpKSA6IHNpemU7Cit9CisKIEludFNpemUgSW1hZ2VTb3VyY2U6OnNpemUoSW1h
Z2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBJbnRTaXplIHNpemU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgJKHJldmlz
aW9uIDI2NDU5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDcgQEAgcHVibGljOgogICAgIFN0cmlu
ZyB1dGkoKTsKICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKTsKICAgICBPcHRpb25hbDxJ
bnRQb2ludD4gaG90U3BvdCgpOworICAgIE9wdGlvbmFsPEludFNpemU+IGRlbnNpdHlDb3JyZWN0
ZWRTaXplKEltYWdlT3JpZW50YXRpb24gPSBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UpOwog
ICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24oKTsKIAogICAgIC8vIEltYWdlIG1ldGFk
YXRhIHdoaWNoIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZmlyc3QgSW1hZ2VGcmFtZS4KQEAgLTIw
MCw2ICsyMDEsNyBAQCBwcml2YXRlOgogICAgIC8vIEltYWdlIG1ldGFkYXRhIHdoaWNoIGlzIGNh
bGN1bGF0ZWQgZnJvbSB0aGUgZmlyc3QgSW1hZ2VGcmFtZS4KICAgICBPcHRpb25hbDxJbnRTaXpl
PiBtX3NpemU7CiAgICAgT3B0aW9uYWw8SW1hZ2VPcmllbnRhdGlvbj4gbV9vcmllbnRhdGlvbjsK
KyAgICBPcHRpb25hbDxPcHRpb25hbDxJbnRTaXplPj4gbV9kZW5zaXR5Q29ycmVjdGVkU2l6ZTsK
ICAgICBPcHRpb25hbDxDb2xvcj4gbV9zaW5nbGVQaXhlbFNvbGlkQ29sb3I7CiAgICAgT3B0aW9u
YWw8U3Vic2FtcGxpbmdMZXZlbD4gbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbDsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVj
b2RlckNHLmNwcAkocmV2aXNpb24gMjY0NTk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2
NCwxMyBAQCBzdGF0aWMgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+CiAgICAgQ0ZE
aWN0aW9uYXJ5U2V0VmFsdWUob3B0aW9ucy5nZXQoKSwga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRh
dGEsIGtDRkJvb2xlYW5UcnVlKTsKICAgICByZXR1cm4gb3B0aW9uczsKIH0KKworc3RhdGljIFJl
dGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBjcmVhdGVJbWFnZVNvdXJjZU1ldGFkYXRh
T3B0aW9ucygpCit7CisgICAgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IG9wdGlv
bnMgPSBjcmVhdGVJbWFnZVNvdXJjZU9wdGlvbnMoKTsKKyAgICBDRkRpY3Rpb25hcnlTZXRWYWx1
ZShvcHRpb25zLmdldCgpLCBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSwga0NGQm9vbGVhbkZh
bHNlKTsKKyAgICByZXR1cm4gb3B0aW9uczsKK30KICAgICAKIHN0YXRpYyBSZXRhaW5QdHI8Q0ZN
dXRhYmxlRGljdGlvbmFyeVJlZj4gY3JlYXRlSW1hZ2VTb3VyY2VBc3luY09wdGlvbnMoKQogewpA
QCAtMTY2LDYgKzE3Myw1MSBAQCBzdGF0aWMgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZy
b21QCiAgICAgcmV0dXJuIEltYWdlT3JpZW50YXRpb246OmZyb21FWElGVmFsdWUoZXhpZlZhbHVl
KTsKIH0KIAorc3RhdGljIE9wdGlvbmFsPEludFNpemU+IGRlbnNpdHlDb3JyZWN0ZWRTaXplRnJv
bVByb3BlcnRpZXMoQ0ZEaWN0aW9uYXJ5UmVmIGltYWdlUHJvcGVydGllcykKK3sKKyAgICBBU1NF
UlQoaW1hZ2VQcm9wZXJ0aWVzKTsKKyAgICBDRkRpY3Rpb25hcnlSZWYgZXhpZkRpY3Rpb25hcnkg
PSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGltYWdlUHJvcGVydGllcywg
a0NHSW1hZ2VQcm9wZXJ0eUV4aWZEaWN0aW9uYXJ5KTsKKyAgICBDRkRpY3Rpb25hcnlSZWYgdGlm
ZkRpY3Rpb25hcnkgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGltYWdl
UHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eVRJRkZEaWN0aW9uYXJ5KTsKKworICAgIGlmICgh
ZXhpZkRpY3Rpb25hcnkgfHwgIXRpZmZEaWN0aW9uYXJ5KQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgQ0ZOdW1iZXJSZWYgd2lkdGhQcm9wZXJ0eSA9IChDRk51bWJlclJlZilD
RkRpY3Rpb25hcnlHZXRWYWx1ZShpbWFnZVByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlQaXhl
bFdpZHRoKTsKKyAgICBDRk51bWJlclJlZiBoZWlnaHRQcm9wZXJ0eSA9IChDRk51bWJlclJlZilD
RkRpY3Rpb25hcnlHZXRWYWx1ZShpbWFnZVByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlQaXhl
bEhlaWdodCk7CisgICAgQ0ZOdW1iZXJSZWYgcHJlZmVycmVkV2lkdGhQcm9wZXJ0eSA9IChDRk51
bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShleGlmRGljdGlvbmFyeSwga0NHSW1hZ2VQcm9w
ZXJ0eUV4aWZQaXhlbFhEaW1lbnNpb24pOworICAgIENGTnVtYmVyUmVmIHByZWZlcnJlZEhlaWdo
dFByb3BlcnR5ID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGV4aWZEaWN0aW9u
YXJ5LCBrQ0dJbWFnZVByb3BlcnR5RXhpZlBpeGVsWURpbWVuc2lvbik7CisgICAgQ0ZOdW1iZXJS
ZWYgcmVzb2x1dGlvblhQcm9wZXJ0eSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1
ZShpbWFnZVByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlEUElXaWR0aCk7CisgICAgQ0ZOdW1i
ZXJSZWYgcmVzb2x1dGlvbllQcm9wZXJ0eSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRW
YWx1ZShpbWFnZVByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlEUElIZWlnaHQpOworICAgIENG
TnVtYmVyUmVmIHJlc29sdXRpb25Vbml0UHJvcGVydHkgPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUodGlmZkRpY3Rpb25hcnksIGtDR0ltYWdlUHJvcGVydHlUSUZGUmVzb2x1dGlv
blVuaXQpOworCisgICAgaWYgKCFwcmVmZXJyZWRXaWR0aFByb3BlcnR5IHx8ICFwcmVmZXJyZWRI
ZWlnaHRQcm9wZXJ0eSB8fCAhcmVzb2x1dGlvblhQcm9wZXJ0eSB8fCAhcmVzb2x1dGlvbllQcm9w
ZXJ0eSB8fCAhcmVzb2x1dGlvblVuaXRQcm9wZXJ0eSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRSZXNvbHV0aW9uID0gNzI7CisgICAg
Y29uc3QgdW5zaWduZWQgaW5jaFJlc29sdXRpb25Vbml0ID0gMjsKKworICAgIHNob3J0IHdpZHRo
VmFsdWUsIGhlaWdodFZhbHVlLCByZXNVbml0VmFsdWUsIHByZWZlcnJlZFdpZHRoVmFsdWUsIHBy
ZWZlcnJlZEhlaWdodFZhbHVlOworICAgIGZsb2F0IHJlc1hWYWx1ZSwgcmVzWVZhbHVlOworICAg
IENGTnVtYmVyR2V0VmFsdWUod2lkdGhQcm9wZXJ0eSwga0NGTnVtYmVyU2hvcnRUeXBlLCAmd2lk
dGhWYWx1ZSk7CisgICAgQ0ZOdW1iZXJHZXRWYWx1ZShoZWlnaHRQcm9wZXJ0eSwga0NGTnVtYmVy
U2hvcnRUeXBlLCAmaGVpZ2h0VmFsdWUpOworICAgIENGTnVtYmVyR2V0VmFsdWUocHJlZmVycmVk
V2lkdGhQcm9wZXJ0eSwga0NGTnVtYmVyU2hvcnRUeXBlLCAmcHJlZmVycmVkV2lkdGhWYWx1ZSk7
CisgICAgQ0ZOdW1iZXJHZXRWYWx1ZShwcmVmZXJyZWRIZWlnaHRQcm9wZXJ0eSwga0NGTnVtYmVy
U2hvcnRUeXBlLCAmcHJlZmVycmVkSGVpZ2h0VmFsdWUpOworICAgIENGTnVtYmVyR2V0VmFsdWUo
cmVzb2x1dGlvblhQcm9wZXJ0eSwga0NGTnVtYmVyRmxvYXQzMlR5cGUsICZyZXNYVmFsdWUpOwor
ICAgIENGTnVtYmVyR2V0VmFsdWUocmVzb2x1dGlvbllQcm9wZXJ0eSwga0NGTnVtYmVyRmxvYXQz
MlR5cGUsICZyZXNZVmFsdWUpOworICAgIENGTnVtYmVyR2V0VmFsdWUocmVzb2x1dGlvblVuaXRQ
cm9wZXJ0eSwga0NGTnVtYmVyU2hvcnRUeXBlLCAmcmVzVW5pdFZhbHVlKTsKKworICAgIGlmIChy
ZXNVbml0VmFsdWUgIT0gaW5jaFJlc29sdXRpb25Vbml0KQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgRmxvYXRTaXplIHNpemVGcm9tUmVzb2x1dGlvbih3aWR0aFZhbHVlICog
ZGVmYXVsdFJlc29sdXRpb24gLyByZXNYVmFsdWUsIGhlaWdodFZhbHVlICogZGVmYXVsdFJlc29s
dXRpb24gLyByZXNZVmFsdWUpOworCisgICAgSW50U2l6ZSBwcmVmZXJyZWRTaXplKHByZWZlcnJl
ZFdpZHRoVmFsdWUsIHByZWZlcnJlZEhlaWdodFZhbHVlKTsKKyAgICBpZiAocm91bmRlZEludFNp
emUoc2l6ZUZyb21SZXNvbHV0aW9uKSA9PSBwcmVmZXJyZWRTaXplKQorICAgICAgICByZXR1cm4g
cHJlZmVycmVkU2l6ZTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKICNpZiAhUExB
VEZPUk0oQ09DT0EpCiBzaXplX3Qgc2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKHZvaWQq
IGluZm8sIHZvaWQqIGJ1ZmZlciwgb2ZmX3QgcG9zaXRpb24sIHNpemVfdCBjb3VudCkKIHsKQEAg
LTM2NCw2ICs0MTYsMTUgQEAgSW1hZ2VPcmllbnRhdGlvbiBJbWFnZURlY29kZXJDRzo6ZnJhbWVP
cgogICAgIHJldHVybiBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMuZ2V0KCkp
OwogfQogCitPcHRpb25hbDxJbnRTaXplPiBJbWFnZURlY29kZXJDRzo6ZnJhbWVEZW5zaXR5Q29y
cmVjdGVkU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAgIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJv
cGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBpbmRleCwgY3JlYXRlSW1hZ2VT
b3VyY2VNZXRhZGF0YU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVydGllcykKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAKKyAgICByZXR1cm4gZGVuc2l0eUNvcnJl
Y3RlZFNpemVGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLmdldCgpKTsKK30KKwogU2Vjb25kcyBJ
bWFnZURlY29kZXJDRzo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAog
ewogICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBudWxscHRyOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZURlY29kZXJDRy5oCShyZXZpc2lvbiAyNjQ1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1
NSw3IEBAIHB1YmxpYzoKICAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCkgY29uc3QgZmluYWw7CiAg
ICAgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCkgY29uc3QgZmluYWw7CiAgICAg
SW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0IGZp
bmFsOworICAgIE9wdGlvbmFsPEludFNpemU+IGZyYW1lRGVuc2l0eUNvcnJlY3RlZFNpemVBdElu
ZGV4KHNpemVfdCkgY29uc3QgZmluYWw7CiAKICAgICBTZWNvbmRzIGZyYW1lRHVyYXRpb25BdElu
ZGV4KHNpemVfdCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChz
aXplX3QpIGNvbnN0IGZpbmFsOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5oCShyZXZp
c2lvbiAyNjQ1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9T
Y2FsYWJsZUltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDcgQEAg
cHVibGljOgogICAgIGJvb2wgaWdub3Jlc0dhbW1hQW5kQ29sb3JQcm9maWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZTsgfQogCiAgICAgSW1hZ2VPcmllbnRh
dGlvbiBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fb3JpZW50YXRpb247IH0KKyAgICBPcHRpb25hbDxJbnRTaXplPiBmcmFtZURlbnNpdHlD
b3JyZWN0ZWRTaXplQXRJbmRleChzaXplX3QpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVu
c2l0eUNvcnJlY3RlZFNpemU7IH0KIAogICAgIGJvb2wgZnJhbWVBbGxvd1N1YnNhbXBsaW5nQXRJ
bmRleChzaXplX3QpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKQEAgLTIwMSw2
ICsyMDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGE7CiAgICAg
Ym9vbCBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlOwogICAgIEltYWdlT3JpZW50YXRpb24g
bV9vcmllbnRhdGlvbjsKKyAgICBPcHRpb25hbDxJbnRTaXplPiBtX2RlbnNpdHlDb3JyZWN0ZWRT
aXplOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB0cnlEZWNvZGVTaXplKGJvb2wpID0g
MDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjY0NTk2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1h
Z2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSwyNyBAQCBzdGF0aWMg
dW5zaWduZWQgcmVhZFVpbnQzMihKT0NURVQqIGRhdGEsCiAgICAgcmV0dXJuIChHRVRKT0NURVQo
ZGF0YVszXSkgPDwgMjQpIHwgKEdFVEpPQ1RFVChkYXRhWzJdKSA8PCAxNikgfCAoR0VUSk9DVEVU
KGRhdGFbMV0pIDw8IDgpIHwgR0VUSk9DVEVUKGRhdGFbMF0pOwogfQogCitzdGF0aWMgSk9DVEVU
KiByZWFkUG9pbnRlck9mZnNldChKT0NURVQqIGRhdGEsIEpPQ1RFVCogc3RhcnQsIEpPQ1RFVCog
ZW5kLCBib29sIGlzQmlnRW5kaWFuKQoreworICAgIHVuc2lnbmVkIG1heE9mZnNldCA9IGVuZCAt
IHN0YXJ0OworICAgIHVuc2lnbmVkIG9mZnNldCA9IHJlYWRVaW50MzIoZGF0YSwgaXNCaWdFbmRp
YW4pOworICAgIGlmIChvZmZzZXQgPiBtYXhPZmZzZXQpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgcmV0dXJuIHN0YXJ0ICsgb2Zmc2V0OworfQorCitzdGF0aWMgT3B0aW9uYWw8Zmxv
YXQ+IHJlYWRVbnNpZ25lZFJhdGlvbmFsKEpPQ1RFVCogZGF0YSwgYm9vbCBpc0JpZ0VuZGlhbikK
K3sKKyAgICB1bnNpZ25lZCBub20gPSBSZWFkVWludDMyKGRhdGEsIGlzQmlnRW5kaWFuKTsKKyAg
ICB1bnNpZ25lZCBkZW5vbSA9IFJlYWRVaW50MzIoZGF0YSArIDQsIGlzQmlnRW5kaWFuKTsKKyAg
ICBpZiAoIWRlbm9tKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJu
IGZsb2F0KG5vbSkgLyBmbG9hdChkZW5vbSk7Cit9CisKKwogc3RhdGljIGJvb2wgY2hlY2tFeGlm
SGVhZGVyKGpwZWdfc2F2ZWRfbWFya2VyX3B0ciBtYXJrZXIsIGJvb2wmIGlzQmlnRW5kaWFuLCB1
bnNpZ25lZCYgaWZkT2Zmc2V0KQogewogICAgIC8vIEZvciBleGlmIGRhdGEsIHRoZSBBUFAxIGJs
b2NrIGlzIGZvbGxvd2VkIGJ5ICdFJywgJ3gnLCAnaScsICdmJywgJ1wwJywKQEAgLTE1MCw0OCAr
MTcxLDE2OCBAQCBzdGF0aWMgYm9vbCBjaGVja0V4aWZIZWFkZXIoanBlZ19zYXZlZF9tCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBJbWFnZU9yaWVudGF0aW9uIHJlYWRJbWFnZU9yaWVu
dGF0aW9uKGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8pCitzdHJ1Y3QgRGVjb2RlZEltYWdl
TWV0YURhdGEgeworICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAgRmxvYXRT
aXplIHJlc29sdXRpb247CisgICAgSW50U2l6ZSBzaXplOworICAgIHVuc2lnbmVkIHJlc29sdXRp
b25fdW5pdCB7IDAgfTsKK30KKworLy8gRklYTUU6IG1vdmUgdGhpcyB0byBvd24gZmlsZSB3aGVu
IHJlYWRpbmcgRVhJRiBmb3Igb3RoZXIgZm9ybWF0cy4KK2VudW0gRXhpZkNvbnN0YW50cyB7Cisg
ICAgVW5zaWduZWRTaG9ydFR5cGUgICAgID0gMywKKyAgICBVbnNpZ25lZExvbmdUeXBlICAgICAg
PSA0LAorICAgIFVuc2lnbmVkUmF0aW9uYWxUeXBlICA9IDUsCisKKyAgICBVbmtub3duUmVzb2x1
dGlvblVuaXQgPSAxLAorICAgIEluY2hlc1Jlc29sdXRpb25Vbml0ICA9IDIsCisgICAgQ21SZXNv
bHV0aW9uVW5pdCAgICAgID0gMywKKworICAgIE9yaWVudGF0aW9uVGFnICAgICAgICA9IDB4MDEx
MiwKKyAgICBSZXNvbHV0aW9uWFRhZyAgICAgICAgPSAweDAxMWEsCisgICAgUmVzb2x1dGlvbllU
YWcgICAgICAgID0gMHgwMTFiLAorICAgIFJlc29sdXRpb25Vbml0VGFnICAgICA9IDB4MDEyOCwK
KyAgICBQaXhlbFhEaW1lbnNpb25UYWcgICAgPSAweGEwMDIsCisgICAgUGl4ZWxZRGltZW5zaW9u
VGFnICAgID0gMHhhMDAzLAorICAgIEV4aWZPZmZzZXRUYWcgICAgICAgICA9IDB4ODc2OSwKKwor
ICAgIERlZmF1bHRSZXNvbHV0aW9uICAgICA9IDcyCit9OworCitlbnVtIGNsYXNzIEV4aWZEaXJU
eXBlIHsKKyAgICBSb290RGlyVHlwZSwKKyAgICBTdWJEaXJUeXBlCit9OworCitzdGF0aWMgdm9p
ZCByZWFkRXhpZkRpcmVjdG9yeShKT0NURVQqIGRpclN0YXJ0LCBKT0NURVQqIHRpZmZTdGFydCwg
Sk9DVEVUKiByb290RGlyU3RhcnQsIEpPQ1RFVCogZGF0YUVuZCwgYm9vbCBpc0JpZ0VuZGlhbiwg
RGVjb2RlZEltYWdlTWV0YURhdGEmIG1ldGFkYXRhLCBFeGlmRGlyVHlwZSBkaXJUeXBlID0gRXhp
ZkRpclR5cGU6OlJvb3REaXIpCit7CisgICAgaWYgKGRhdGFFbmQgLSBkaXJTdGFydCA8IDIpCisg
ICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIHRhZ0NvdW50ID0gcmVhZFVpbnQxNihkaXJT
dGFydCwgaXNCaWdFbmRpYW4pOworCisgICAgLy8gU2tpcCBvdmVyIHRoZSB1aW50MTYgdGhhdCB3
YXMganVzdCByZWFkLgorICAgIEpPQ1RFVCogaWZkID0gZGlyU3RhcnQgKyAyOyAKKworICAgIC8v
IEV2ZXJ5IGlmZCBlbnRyeSBpcyAyIGJ5dGVzIG9mIHRhZywgMiBieXRlcyBvZiBjb250ZW50cyBk
YXRhdHlwZSwKKyAgICAvLyA0IGJ5dGVzIG9mIG51bWJlci1vZi1lbGVtZW50cywgYW5kIDQgYnl0
ZXMgb2YgZWl0aGVyIG9mZnNldCB0byB0aGUKKyAgICAvLyB0YWcgZGF0YSwgb3IgaWYgdGhlIGRh
dGEgaXMgc21hbGwgZW5vdWdoLCB0aGUgaW5saW5lZCBkYXRhIGl0c2VsZi4KKyAgICBjb25zdCBp
bnQgaWZkRW50cnlTaXplID0gMTI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhZ0Nv
dW50ICYmIGRhdGFFbmQgLSBpZmQgPj0gaWZkRW50cnlTaXplOyArK2ksIGlmZCArPSBpZmRFbnRy
eVNpemUpIHsKKyAgICAgICAgdW5zaWduZWQgdGFnID0gcmVhZFVpbnQxNihpZmQsIGlzQmlnRW5k
aWFuKTsKKyAgICAgICAgdW5zaWduZWQgdHlwZSA9IHJlYWRVaW50MTYoaWZkICsgMiwgaXNCaWdF
bmRpYW4pOworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IHJlYWRVaW50MzIoaWZkICsgNCwgaXNC
aWdFbmRpYW4pOworICAgICAgICBKT0NURVQqIHZhbHVlUHRyID0gaWZkICsgODsKKworICAgICAg
ICAvLyBFWElGIHN0b3JlcyB0aGUgdmFsdWUgd2l0aCBhbiBvZmZzZXQgaWYgaXQncyBiaWdnZXIg
dGhhbiA0IGJ5dGVzLCBlLmcuIGZvciByYXRpb25hbCB2YWx1ZXMuCisgICAgICAgIGlmICh0eXBl
ID09IEV4aWZDb25zdGFudHM6OlVuc2lnbmVkUmF0aW9uYWxUeXBlKSB7CisgICAgICAgICAgICB2
YWx1ZVB0ciA9IHJlYWRQb2ludGVyT2Zmc2V0KHZhbHVlUHRyLCB0aWZmU3RhcnQsIGRhdGFFbmQs
IGlzQmlnRW5kaWFuKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTWFrZSBzdXJlIG9m
ZnNldCBwb2ludHMgdG8gYSB2YWxpZCBsb2NhdGlvbi4KKyAgICAgICAgICAgIGlmICghdmFsdWVQ
dHIgfHwgdmFsdWVQdHIgPCBpZmQgfHwgdmFsdWVQdHIgPiBkYXRhRW5kIC0gMTYpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHRhZykgewor
ICAgICAgICBjYXNlIEV4aWZDb25zdGFudHM6Ok9yaWVudGF0aW9uVGFnOgorICAgICAgICAgICAg
aWYgKHR5cGUgPT0gRXhpZkNvbnN0YW50czo6VW5zaWduZWRTaG9ydFR5cGUgJiYgY291bnQgPT0g
MSkKKyAgICAgICAgICAgICAgICBtZXRhZGF0YS5vcmllbnRhdGlvbiA9IEltYWdlT3JpZW50YXRp
b246OmZyb21FWElGVmFsdWUoUmVhZFVpbnQxNih2YWx1ZV9wdHIsIGlzQmlnRW5kaWFuKSk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEV4aWZDb25zdGFudHM6OlJlc29sdXRp
b25Vbml0VGFnOgorICAgICAgICAgICAgaWYgKHR5cGUgPT0gRXhpZkNvbnN0YW50czo6VW5zaWdu
ZWRTaG9ydFR5cGUgJiYgY291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICBtZXRhZGF0YS5yZXNv
bHV0aW9uX3VuaXQgPSBSZWFkVWludDE2KHZhbHVlX3B0ciwgaXNCaWdFbmRpYW4pOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFeGlmQ29uc3RhbnRzOjpSZXNvbHV0aW9uWFRh
ZzogeworICAgICAgICAgICAgaWYgKHR5cGUgPT0gRXhpZkNvbnN0YW50czo6VW5zaWduZWRSYXRp
b25hbFR5cGUgJiYgY291bnQgPT0gMSkgeworICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9
IHRydWU7CisgICAgICAgICAgICAgICAgT3B0aW9uYWw8ZmxvYXQ+IHZhbHVlID0gcmVhZFVuc2ln
bmVkUmF0aW9uYWwodmFsdWVQdHIsIGlzQmlnRW5kaWFuKTsKKyAgICAgICAgICAgICAgICBpZiAo
dmFsdWUpCisgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnJlc29sdXRpb24uU2V0V2lkdGgo
dmFsdWUudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBtZXRhZGF0YS5pbnZhbGlkUmVzb2x1dGlvbiA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEV4aWZDb25zdGFudHM6OlJlc29sdXRpb25Z
VGFnOgorICAgICAgICAgICAgaWYgKHR5cGUgPT0gRXhpZkNvbnN0YW50czo6VW5zaWduZWRSYXRp
b25hbFR5cGUgJiYgY291bnQgPT0gMSkgeworICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9
IHRydWU7CisgICAgICAgICAgICAgICAgT3B0aW9uYWw8ZmxvYXQ+IHZhbHVlID0gcmVhZFVuc2ln
bmVkUmF0aW9uYWwodmFsdWVQdHIsIGlzQmlnRW5kaWFuKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEucmVzb2x1dGlvbi5T
ZXRXaWR0aCh2YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgbWV0YWRhdGEuaW52YWxpZFJlc29sdXRpb24gPSB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFeGlmQ29uc3Rh
bnRzOjpQaXhlbFhEaW1lbnNpb25UYWc6CisgICAgICAgICAgICBpZiAodHlwZSA9PSBFeGlmQ29u
c3RhbnRzOjpVbnNpZ25lZFNob3J0VHlwZSAmJiBjb3VudCA9PSAxKQorICAgICAgICAgICAgICAg
IG1ldGFkYXRhLnNpemUuU2V0V2lkdGgocmVhZFVpbnQxNih2YWx1ZV9wdHIsIGlzQmlnRW5kaWFu
KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEV4aWZDb25zdGFudHM6OlBp
eGVsWURpbWVuc2lvblRhZzoKKyAgICAgICAgICAgIGlmICh0eXBlID09IEV4aWZDb25zdGFudHM6
OlVuc2lnbmVkU2hvcnRUeXBlICYmIGNvdW50ID09IDEpCisgICAgICAgICAgICAgICAgbWV0YWRh
dGEuc2l6ZS5TZXRIZWlnaHQocmVhZFVpbnQxNih2YWx1ZV9wdHIsIGlzQmlnRW5kaWFuKSk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEV4aWZDb25zdGFudHM6OkV4aWZPZmZz
ZXRUYWc6CisgICAgICAgICAgICBpZiAodHlwZSA9PSBFeGlmQ29uc3RhbnRzOjpVbnNpZ25lZExv
bmdUeXBlICYmIGNvdW50ID09IDEgJiYgaXNSb290KSB7CisgICAgICAgICAgICAgICAgSk9DVEVU
KiBzdWJkaXIgPSByZWFkUG9pbnRlck9mZnNldCh2YWx1ZVB0ciwgcm9vdERpclN0YXJ0LCBkYXRh
RW5kLCBpc0JpZ0VuZGlhbik7CisKKyAgICAgICAgICAgICAgICBpZiAoc3ViZGlyKQorICAgICAg
ICAgICAgICAgICAgICByZWFkRXhpZkRpcmVjdG9yeShzdWJkaXIsIHRpZmZTdGFydCwgcm9vdERp
clN0YXJ0LCBkYXRhRW5kLCBpc0JpZ0VuZGlhbiwgbWV0YWRhdGEsIEV4aWZEaXJUeXBlOjpTdWJk
aXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3N0YXRpYyBJbnRTaXplIGRldGVybWluZURlbnNpdHlDb3JyZWN0ZWRTaXplKGNvbnN0
IERlY29kZWRJbWFnZU1ldGFEYXRhJiBtZXRhZGF0YSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxT
aXplKQoreworICAgIGlmIChtZXRhZGF0YS5yZXNvbHV0aW9uVW5pdCAhPSBFeGlmQ29uc3RhbnRz
OjpJbmNoUmVzb2x1dGlvblVuaXQgfHwgbWV0YWRhdGEucmVzb2x1dGlvbi5Jc0VtcHR5KCkgfHwg
bWV0YWRhdGEuc2l6ZS5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBwaHlzaWNhbFNpemU7CisK
KyAgICBBU1NFUlQobWV0YWRhdGEucmVzb2x1dGlvbi5XaWR0aCgpKTsKKyAgICBBU1NFUlQobWV0
YWRhdGEucmVzb2x1dGlvbi5IZWlnaHQoKSk7CisKKyAgICBGbG9hdFNpemUgc2l6ZUZyb21SZXNv
bHV0aW9uKHBoeXNpY2FsU2l6ZS53aWR0aCgpICoga0RlZmF1bHRSZXNvbHV0aW9uIC8gbWV0YWRh
dGEucmVzb2x1dGlvbi53aWR0aCgpLCBwaHlzaWNhbFNpemUuaGVpZ2h0KCkgKiBrRGVmYXVsdFJl
c29sdXRpb24gLyBtZXRhZGF0YS5yZXNvbHV0aW9uLmhlaWdodCgpKTsKKworICAgIGlmIChyb3Vu
ZGVkSW50U2l6ZShzaXplRnJvbVJlc29sdXRpb24pID09IG1ldGFkYXRhLnNpemUpCisgICAgICAg
IHJldHVybiBtZXRhZGF0YS5zaXplOworCisgICAgcmV0dXJuIHBoeXNpY2FsU2l6ZTsKK30KKwor
CitzdGF0aWMgdm9pZCByZWFkSW1hZ2VNZXRhZGF0YShqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBp
bmZvLCBEZWNvZGVkSW1hZ2VNZXRhRGF0YSYgbWV0YWRhdGEpCiB7CiAgICAgLy8gVGhlIEpQRUcg
ZGVjb2RlciBsb29rcyBhdCBFWElGIG1ldGFkYXRhLgogICAgIC8vIEZJWE1FOiBQb3NzaWJseSBp
bXBsZW1lbnQgWE1QIGFuZCBJUFRDIHN1cHBvcnQuCi0gICAgY29uc3QgdW5zaWduZWQgb3JpZW50
YXRpb25UYWcgPSAweDExMjsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydFR5cGUgPSAzOwogICAg
IGZvciAoanBlZ19zYXZlZF9tYXJrZXJfcHRyIG1hcmtlciA9IGluZm8tPm1hcmtlcl9saXN0OyBt
YXJrZXI7IG1hcmtlciA9IG1hcmtlci0+bmV4dCkgewogICAgICAgICBib29sIGlzQmlnRW5kaWFu
OwogICAgICAgICB1bnNpZ25lZCBpZmRPZmZzZXQ7CiAgICAgICAgIGlmICghY2hlY2tFeGlmSGVh
ZGVyKG1hcmtlciwgaXNCaWdFbmRpYW4sIGlmZE9mZnNldCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgb2Zmc2V0VG9UaWZmRGF0YSA9IDY7IC8vIEFjY291
bnQgZm9yICdFeGlmXDA8ZmlsbCBieXRlPicgaGVhZGVyLgorCisgICAgICAgIC8vIEFjY291bnQg
Zm9yICdFeGlmXDA8ZmlsbCBieXRlPicgaGVhZGVyLgorICAgICAgICBjb25zdCB1bnNpZ25lZCBv
ZmZzZXRUb1RpZmZEYXRhID0gNjsgIAorICAgICAgICAKICAgICAgICAgaWYgKG1hcmtlci0+ZGF0
YV9sZW5ndGggPCBvZmZzZXRUb1RpZmZEYXRhIHx8IGlmZE9mZnNldCA+PSBtYXJrZXItPmRhdGFf
bGVuZ3RoIC0gb2Zmc2V0VG9UaWZmRGF0YSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZmRPZmZzZXQgKz0gb2Zmc2V0VG9UaWZmRGF0YTsKIAogICAgICAgICAvLyBUaGUganBlZyBl
eGlmIGNvbnRhaW5lciBmb3JtYXQgY29udGFpbnMgYSB0aWZmIGJsb2NrIGZvciBtZXRhZGF0YS4K
ICAgICAgICAgLy8gQSB0aWZmIGltYWdlIGZpbGUgZGlyZWN0b3J5IChpZmQpIGNvbnNpc3RzIG9m
IGEgdWludDE2X3QgZGVzY3JpYmluZwogICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGlmZCBlbnRy
aWVzLCBmb2xsb3dlZCBieSB0aGF0IG1hbnkgZW50cmllcy4KICAgICAgICAgLy8gV2hlbiB0b3Vj
aGluZyB0aGlzIGNvZGUsIGl0J3MgdXNlZnVsIHRvIGxvb2sgYXQgdGhlIHRpZmYgc3BlYzoKICAg
ICAgICAgLy8gaHR0cDovL3BhcnRuZXJzLmFkb2JlLmNvbS9wdWJsaWMvZGV2ZWxvcGVyL2VuL3Rp
ZmYvVElGRjYucGRmCi0gICAgICAgIEpPQ1RFVCogaWZkID0gbWFya2VyLT5kYXRhICsgaWZkT2Zm
c2V0OwotICAgICAgICBKT0NURVQqIGVuZCA9IG1hcmtlci0+ZGF0YSArIG1hcmtlci0+ZGF0YV9s
ZW5ndGg7Ci0gICAgICAgIGlmIChlbmQgLSBpZmQgPCAyKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIHVuc2lnbmVkIHRhZ0NvdW50ID0gcmVhZFVpbnQxNihpZmQsIGlzQmlnRW5kaWFu
KTsKLSAgICAgICAgaWZkICs9IDI7IC8vIFNraXAgb3ZlciB0aGUgdWludDE2IHRoYXQgd2FzIGp1
c3QgcmVhZC4KKyAgICAgICAgSk9DVEVUKiBkYXRhRW5kID0gbWFya2VyLT5kYXRhICsgbWFya2Vy
LT5kYXRhX2xlbmd0aDsKKyAgICAgICAgSk9DVEVUKiByb290U3RhcnQgPSBtYXJrZXItPmRhdGEg
KyBvZmZzZXRUb1RpZmZEYXRhOworICAgICAgICBKT0NURVQqIHRpZmZTdGFydCA9IG1hcmtlci0+
ZGF0YSArIGlmZE9mZnNldDsKKyAgICAgICAgSk9DVEVUKiBpZmQwID0gcm9vdFN0YXJ0ICsgaWZk
T2Zmc2V0OwogCi0gICAgICAgIC8vIEV2ZXJ5IGlmZCBlbnRyeSBpcyAyIGJ5dGVzIG9mIHRhZywg
MiBieXRlcyBvZiBjb250ZW50cyBkYXRhdHlwZSwKLSAgICAgICAgLy8gNCBieXRlcyBvZiBudW1i
ZXItb2YtZWxlbWVudHMsIGFuZCA0IGJ5dGVzIG9mIGVpdGhlciBvZmZzZXQgdG8gdGhlCi0gICAg
ICAgIC8vIHRhZyBkYXRhLCBvciBpZiB0aGUgZGF0YSBpcyBzbWFsbCBlbm91Z2gsIHRoZSBpbmxp
bmVkIGRhdGEgaXRzZWxmLgotICAgICAgICBjb25zdCBpbnQgaWZkRW50cnlTaXplID0gMTI7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWdDb3VudCAmJiBlbmQgLSBpZmQgPj0g
aWZkRW50cnlTaXplOyArK2ksIGlmZCArPSBpZmRFbnRyeVNpemUpIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHRhZyA9IHJlYWRVaW50MTYoaWZkLCBpc0JpZ0VuZGlhbik7Ci0gICAgICAgICAgICB1
bnNpZ25lZCB0eXBlID0gcmVhZFVpbnQxNihpZmQgKyAyLCBpc0JpZ0VuZGlhbik7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBjb3VudCA9IHJlYWRVaW50MzIoaWZkICsgNCwgaXNCaWdFbmRpYW4pOwot
ICAgICAgICAgICAgaWYgKHRhZyA9PSBvcmllbnRhdGlvblRhZyAmJiB0eXBlID09IHNob3J0VHlw
ZSAmJiBjb3VudCA9PSAxKQotICAgICAgICAgICAgICAgIHJldHVybiBJbWFnZU9yaWVudGF0aW9u
Ojpmcm9tRVhJRlZhbHVlKHJlYWRVaW50MTYoaWZkICsgOCwgaXNCaWdFbmRpYW4pKTsKLSAgICAg
ICAgfQorICAgICAgICByZWFkRXhpZkRpcmVjdG9yeShpZmQwLCB0aWZmU3RhcnQsIHJvb3RTdGFy
dCwgZGF0YUVuZCwgaXNCaWdFbmRpYW4sIG1ldGFkYXRhKTsKICAgICB9Ci0KLSAgICByZXR1cm4g
SW1hZ2VPcmllbnRhdGlvbjo6Tm9uZTsKIH0KIAogY2xhc3MgSlBFR0ltYWdlUmVhZGVyIHsKQEAg
LTMxNSw3ICs0NTYsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNl
dFNpemUoSW50U2l6ZShtX2luZm8uaW1hZ2Vfd2lkdGgsIG1faW5mby5pbWFnZV9oZWlnaHQpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIG1fZGVjb2Rlci0+
c2V0T3JpZW50YXRpb24ocmVhZEltYWdlT3JpZW50YXRpb24oaW5mbygpKSk7CisgICAgICAgICAg
ICBEZWNvZGVkSW1hZ2VNZXRhRGF0YSBtZXRhZGF0YTsKKyAgICAgICAgICAgIHJlYWRJbWFnZU1l
dGFkYXRhKGluZm8oKSwgbWV0YWRhdGEpOworCisgICAgICAgICAgICBtX2RlY29kZXItPnNldE9y
aWVudGF0aW9uKG1ldGFkYXRhLm9yaWVudGF0aW9uKTsKIAogICAgICAgICAgICAgLy8gRG9uJ3Qg
YWxsb2NhdGUgYSBnaWFudCBhbmQgc3VwZXJmbHVvdXMgbWVtb3J5IGJ1ZmZlciB3aGVuIHRoZQog
ICAgICAgICAgICAgLy8gaW1hZ2UgaXMgYSBzZXF1ZW50aWFsIEpQRUcuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVn
L0pQRUdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjY0NTk2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IGpwZWdDb21wbGV0ZSgpOwogCiAgICAgICAgIHZvaWQgc2V0T3JpZW50YXRpb24oSW1hZ2VPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH0KKyAg
ICAgICAgdm9pZCBzZXREZW5zaXR5Q29ycmVjdGVkU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSB7
IG1fZGVuc2l0eUNvcnJlY3RlZFNpemUgPSBzaXplOyB9CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBKUEVHSW1hZ2VEZWNvZGVyKEFscGhhT3B0aW9uLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
bik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVz
b3VyY2UuY3BwCShyZXZpc2lvbiAyNjQ1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2VSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMCArMTA5LDEx
IEBAIExheW91dFNpemUgUmVuZGVySW1hZ2VSZXNvdXJjZTo6aW1hZ2VTaXoKIHsKICAgICBpZiAo
IW1fY2FjaGVkSW1hZ2UpCiAgICAgICAgIHJldHVybiBMYXlvdXRTaXplKCk7Ci0gICAgTGF5b3V0
U2l6ZSBzaXplID0gbV9jYWNoZWRJbWFnZS0+aW1hZ2VTaXplRm9yUmVuZGVyZXIocmVuZGVyZXIo
KSwgbXVsdGlwbGllciwgdHlwZSk7CisKKyAgICBmbG9hdCBpbWFnZURldmljZVBpeGVsUmF0aW8g
PSAxOwogICAgIGlmIChpczxSZW5kZXJJbWFnZT4ocmVuZGVyZXIoKSkpCi0gICAgICAgIHNpemUu
c2NhbGUoZG93bmNhc3Q8UmVuZGVySW1hZ2U+KCpyZW5kZXJlcigpKS5pbWFnZURldmljZVBpeGVs
UmF0aW8oKSk7Ci0gICAgcmV0dXJuIHNpemU7CisgICAgICAgIGltYWdlRGV2aWNlUGl4ZWxSYXRp
byA9IGRvd25jYXN0PFJlbmRlckltYWdlPigqcmVuZGVyZXIoKSkuaW1hZ2VEZXZpY2VQaXhlbFJh
dGlvKCk7CisgICAgcmV0dXJuIG1fY2FjaGVkSW1hZ2UtPmltYWdlU2l6ZUZvclJlbmRlcmVyKHJl
bmRlcmVyKCksIG11bHRpcGxpZXIsIHR5cGUsIGltYWdlRGV2aWNlUGl4ZWxSYXRpbyk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9uIDI2NDU5NikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE2LDggKzExNiw5IEBAIEZsb2F0U2l6ZSBTdHlsZUNhY2hlZEltYWdl
OjppbWFnZVNpemUoY28KIHsKICAgICBpZiAoIW1fY2FjaGVkSW1hZ2UpCiAgICAgICAgIHJldHVy
biB7IH07Ci0gICAgRmxvYXRTaXplIHNpemUgPSBtX2NhY2hlZEltYWdlLT5pbWFnZVNpemVGb3JS
ZW5kZXJlcihyZW5kZXJlciwgbXVsdGlwbGllcik7Ci0gICAgc2l6ZS5zY2FsZSgxIC8gbV9zY2Fs
ZUZhY3Rvcik7CisKKyAgICBmbG9hdCBpbWFnZURldmljZVBpeGVsUmF0aW8gPSAxIC8gbV9zY2Fs
ZUZhY3RvcjsKKyAgICBGbG9hdFNpemUgc2l6ZSA9IG1fY2FjaGVkSW1hZ2UtPmltYWdlU2l6ZUZv
clJlbmRlcmVyKHJlbmRlcmVyLCBtdWx0aXBsaWVyLCBDYWNoZWRJbWFnZTo6VXNlZFNpemUsIGlt
YWdlRGV2aWNlUGl4ZWxSYXRpbyk7CiAgICAgcmV0dXJuIHNpemU7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>