<?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>106158</bug_id>
          
          <creation_ts>2013-01-04 18:19:48 -0800</creation_ts>
          <short_desc>Change SVG image cache to be per-size instead of per-renderer</short_desc>
          <delta_ts>2013-02-18 17:26:44 -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>SVG</component>
          <version>420+</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Philip Rogers">pdr</reporter>
          <assigned_to name="Philip Rogers">pdr</assigned_to>
          <cc>m.goleb+bugzilla</cc>
    
    <cc>thorton</cc>
    
    <cc>tomhudson</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>800803</commentid>
    <comment_count>0</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2013-01-04 18:19:48 -0800</bug_when>
    <thetext>The SVG image cache is currently per-renderer which makes it almost useless. Consider this example of 60 &lt;img&gt; tags with an SVG tiger:
http://philbit.com/SvgImagePerformance/image.html

We can knock this benchmark out of the park if we change the cache to be global or per-image-resource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805002</commentid>
    <comment_count>1</comment_count>
      <attachid>182273</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2013-01-10 23:41:15 -0800</bug_when>
    <thetext>Created attachment 182273
Preview patch - move SVGImageCache into SVGImage

Not yet ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806031</commentid>
    <comment_count>2</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2013-01-13 17:21:26 -0800</bug_when>
    <thetext>Update for posterity:
A caveat of caching per-size instead of per-renderer is we cannot have two users of an image rendering at different animation states. This is already our behavior but I don&apos;t think it has ever been explicitly stated (and it&apos;s untested).

I talked with dholbert on IRC and Mozilla&apos;s interpretation of the spec is that there is a single document animation timeline that all image renderers use. Therefore, like us, Firefox does not support different animation states. Opera does support different animation states, and IE10 does not support SMIL animations at all. Caching per-size will maintain our current behavior and we will continue to match Firefox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806045</commentid>
    <comment_count>3</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2013-01-13 18:58:21 -0800</bug_when>
    <thetext>Thorton (via email) pointed out that Nikolas&apos; original SVGImageCache patch mentions a related issue:
// FIXME: This doesn&apos;t work correctly with animations. If an image contains animations, that say run for 2 seconds,
// and we currently have one &lt;img&gt; that displays us. If we open another document referencing the same SVGImage it
// will display the document at a time where animations already ran - even though it has its own ImageBuffer.
// We currently don&apos;t implement SVGSVGElement::setCurrentTime, and can NOT go back in time, once animations started.
// There&apos;s no way to fix this besides avoiding style/attribute mutations from SVGAnimationElement.

This is slightly different than the situation I was thinking of (it&apos;s multiple documents referencing a single image instead of multiple &lt;img&gt;s referencing a single cached image), but it will affect our cache. A solution is to simply track the document as part of the key in our cache.

Firefox also seems to be affected by this so I filed a bug: https://bugzilla.mozilla.org/show_bug.cgi?id=830211</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182273</attachid>
            <date>2013-01-10 23:41:15 -0800</date>
            <delta_ts>2013-01-10 23:41:15 -0800</delta_ts>
            <desc>Preview patch - move SVGImageCache into SVGImage</desc>
            <filename>106158.1.patch</filename>
            <type>text/plain</type>
            <size>37573</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzOTQwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDEzLTAxLTEwICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgU1ZHSW1hZ2VDYWNo
ZSBpbnRvIFNWR0ltYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDYxNTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIGNoYW5nZSByZW1vdmVzIFNWR0ltYWdlQ2FjaGUgZW50aXJlbHkgYW5kIG1v
dmVzIGFsbCBtYWNoaW5lcnkgaW50byBTVkdJbWFnZS4gVGhpcyBpcworICAgICAgICB0aGUgZmly
c3Qgb2Ygc2V2ZXJhbCBwYXRjaGVzIHRvIG1vdmUgU1ZHJ3MgaW1hZ2UgY2FjaGUgdG8gYmUgcGVy
LWltYWdlIGluc3RlYWQgb2YKKyAgICAgICAgcGVyLXJlbmRlcmVyLiBJbiBvcmRlciB0byBtYWtl
IHRoaXMgZWFzeSB0byByZXZpZXcsIHRoaXMgcGF0Y2ggbWFrZXMgbm8gY2hhbmdlcyB0byB0aGUg
Y29kZQorICAgICAgICBvdGhlciB0aGFuIHRvIG1vdmUgU1ZHSW1hZ2VDYWNoZSBpbnRvIFNWR0lt
YWdlLgorCisgICAgICAgIENhY2hlZEltYWdlIGN1cnJlbnRseSBoYXMgc3BlY2lhbCBmdW5jdGlv
bnMgZm9yIGludGVyZmFjaW5nIGJldHdlZW4gdGhlIFNWR0ltYWdlQ2FjaGUsIHRoZQorICAgICAg
ICBTVkdJbWFnZSwgYW5kIHRoZSByZW5kZXJlcnMuIFRoaXMgcmVmYWN0b3JpbmcgbW92ZXMgdG93
YXJkcyBhIHNpbXBsZXIgQ2FjaGVkSW1hZ2Ugd2l0aG91dAorICAgICAgICBzcGVjaWFsLWNhc2Vz
IGZvciBTVkcuIEZ1cnRoZXJtb3JlLCB0aGUgbGlmZXRpbWUgb2YgQ2FjaGVkSW1hZ2UgaXMgbm90
IHRpZWQgdG8gZWl0aGVyCisgICAgICAgIFNWR0ltYWdlICh3aGljaCBjYW4gYmUgY2FjaGVkKSBu
b3IgdGhlIHJlbmRlcmVyKHMpLCBzbyBkYXRhIHN0b3JlZCBvZmYgb2YgQ2FjaGVkSW1hZ2UgaXMK
KyAgICAgICAgbm90IGd1YXJhbnRlZWQgdG8gbGFzdCB0aGUgbGlmZXRpbWUgb2YgdGhlIHJlbmRl
cmVyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlzIGlzIGp1c3QgYSByZWZhY3Rvcmlu
Zy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxp
c3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6ZGlkUmVtb3ZlQ2xp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpsb29rdXBPckNyZWF0ZUltYWdl
Rm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OnNldENvbnRhaW5l
clNpemVGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6aW1hZ2VT
aXplRm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmNsZWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRJbWFnZTo6Y2hhbmdlZEluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWRJbWFnZTo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9D
YWNoZWRJbWFnZS5oOgorICAgICAgICAoQ2FjaGVkSW1hZ2UpOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ltYWdlOjpTVkdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6flNWR0lt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpjbGVhckJpdG1hcENhY2hlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpzZXRDb250YWluZXJTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ltYWdlOjpyZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OnJl
ZHJhd1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmltYWdlQ29udGVu
dENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6Omxvb2t1cE9yQ3JlYXRlQml0
bWFwSW1hZ2VGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6cmVxdWVz
dGVkU2l6ZUFuZFNjYWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6c2V0UmVxdWVz
dGVkU2l6ZUFuZFNjYWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6cmVtb3ZlQ2xp
ZW50RnJvbUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpjYWNoZUNsZWFyVGlt
ZXJGaXJlZCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdJbWFnZTo6U2l6ZUFuZFNjYWxlczo6U2l6ZUFuZFNjYWxlcyk6CisgICAgICAg
IChTaXplQW5kU2NhbGVzKToKKyAgICAgICAgKFNWR0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ltYWdlOjpJbWFnZURhdGE6OkltYWdlRGF0YSk6CisgICAgICAgIChJbWFnZURhdGEpOgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5oOiBSZW1vdmVkLgorCiAyMDEyLTEyLTI4
ICBBbmRyZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IFtDYW52YXNdIGFkZCBhbiBvcHRpb24gdG8gcmVsb2FkIHRoZSBwYWdlIGlmIHRo
ZXJlIGlzIGFuIHVuaW5zdHJ1bWVudGVkIGNhbnZhcwpJbmRleDogU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDEzOTMyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDY0LDcgKzI0NjQsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAg
c3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKIAogICAgIHN2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHAKLSAgICBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKIAogICAgIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCiAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lv
biAxMzkzMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC00ODYxLDggKzQ4NjEsNiBAQCB3ZWJjb3JlX3N2Z19zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggXAog
CVNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAgXAotCVNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmggXAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZUNocm9tZUNsaWVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
aCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEzOTMyMykKKysrIFNvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTI1OTcsNyArMjU5Nyw2IEBAIEhFQURFUlMg
Kz0gXAogICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBcCiAgICAg
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggXAogICAgIHN2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5oIFwKLSAgICBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5oIFwKICAgICBzdmcvcHJv
cGVydGllcy9TVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmggXAogICAgIHN2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGVkRW51bWVyYXRpb25Qcm9wZXJ0eVRlYXJPZmYuaCBcCiAgICAgc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmLmggXApAQCAtMzcxOCw3ICszNzE3
LDYgQEAgZW5hYmxlPyhTVkcpIHsKICAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyLmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIu
Y3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBcCi0gICAgICAgIHN2Zy9n
cmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcCBcCiAgICAgICAgIHN2Zy9wcm9wZXJ0aWVzL1NWR0F0
dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwIFwKICAgICAgICAgc3ZnL3Byb3BlcnRpZXMvU1ZHUGF0
aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3BwIFwKICAgICAgICAgc3ZnL1NWR0RvY3VtZW50RXh0
ZW5zaW9ucy5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTM5MzIzKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC01MDU0LDggKzUw
NTQsNiBAQAogICAgICAgICAgICAgJ3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3Bw
JywKICAgICAgICAgICAgICdzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgnLAogICAg
ICAgICAgICAgJ3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwJywKLSAgICAgICAgICAg
ICdzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAnLAotICAgICAgICAgICAgJ3N2Zy9ncmFw
aGljcy9TVkdJbWFnZUNhY2hlLmgnLAogICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZUNocm9tZUNsaWVudC5oJywKICAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
JywKICAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaCcsCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTM5MzIz
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtp
bmcgY29weSkKQEAgLTc0MDU3LDE0ICs3NDA1Nyw2IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJ
CQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcU1ZHSW1hZ2VDYWNo
ZS5jcHAiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdmdcZ3JhcGhpY3NcU1ZHSW1hZ2VDYWNoZS5oIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgot
CQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXFNWR0ltYWdlQ2hy
b21lQ2xpZW50LmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzkzMjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTIyNyw4ICsyMjcsNiBAQAogCQkwOEYwQkZDNjEyNTVDNTNDMDAwNzUx
ODUgLyogU1ZHVGV4dE1ldHJpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4RjBCRkMxMTI1NUM1M0MwMDA3NTE4NSAvKiBTVkdUZXh0TWV0cmljcy5o
ICovOyB9OwogCQkwOEYyRjAwOTEyMTNFNjE3MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VSZXNvdXJj
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEYy
RjAwNzEyMTNFNjE3MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VSZXNvdXJjZS5jcHAgKi87IH07CiAJ
CTA4RjJGMDBBMTIxM0U2MTcwMERDRUM0OCAvKiBSZW5kZXJJbWFnZVJlc291cmNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEYyRjAwODEyMTNFNjE3
MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VSZXNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTA4Rjg1OUQ0MTQ2M0Y5Q0QwMDY3RDkzMyAvKiBT
VkdJbWFnZUNhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA4Rjg1OUQyMTQ2M0Y5Q0QwMDY3RDkzMyAvKiBTVkdJbWFnZUNhY2hlLmNwcCAqLzsg
fTsKLQkJMDhGODU5RDUxNDYzRjlDRDAwNjdEOTMzIC8qIFNWR0ltYWdlQ2FjaGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4Rjg1OUQzMTQ2M0Y5Q0Qw
MDY3RDkzMyAvKiBTVkdJbWFnZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDhGQjE3QzExM0JDN0U5MTAwMDQwMDg2IC8qIFNWR0F0dHJp
YnV0ZVRvUHJvcGVydHlNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDhGQjE3QzAxM0JDN0U5MTAwMDQwMDg2IC8qIFNWR0F0dHJpYnV0ZVRvUHJv
cGVydHlNYXAuY3BwICovOyB9OwogCQkwOEZCM0Y4NDEzQkM3NTRDMDA5OUZDMTggLyogU1ZHQXR0
cmlidXRlVG9Qcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDhGQjNGODMxM0JDNzU0QzAwOTlGQzE4IC8qIFNWR0F0dHJpYnV0ZVRvUHJv
cGVydHlNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwOEZFMEJDNTEyN0UyQUMxMDAwQzRGQjUgLyogU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVj
dFJhdGlvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
OEZFMEJDNDEyN0UyQUMxMDAwQzRGQjUgLyogU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlv
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc0
MDAsOCArNzM5OCw2IEBACiAJCTA4RjBCRkMxMTI1NUM1M0MwMDA3NTE4NSAvKiBTVkdUZXh0TWV0
cmljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdUZXh0TWV0cmljcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwOEYyRjAwNzEyMTNFNjE3MDBEQ0VDNDgg
LyogUmVuZGVySW1hZ2VSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZW5kZXJJbWFnZVJlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDhGMkYwMDgxMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlckltYWdlUmVzb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVySW1hZ2VSZXNvdXJjZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwOEY4NTlEMjE0NjNGOUNEMDA2N0Q5MzMgLyog
U1ZHSW1hZ2VDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
VkdJbWFnZUNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDhGODU5RDMx
NDYzRjlDRDAwNjdEOTMzIC8qIFNWR0ltYWdlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHSW1hZ2VDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwOEZCMTdDMDEzQkM3RTkxMDAwNDAwODYgLyogU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdBdHRyaWJ1dGVUb1By
b3BlcnR5TWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhGQjNGODMxM0JD
NzU0QzAwOTlGQzE4IC8qIFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwOEZFMEJDNDEyN0UyQUMxMDAwQzRGQjUgLyogU1ZHQW5p
bWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjAxMjAsOCArMjAxMTYsNiBAQAogCQkJCUIyNTU5ODlDMEQwMEQ4QjgwMEJC
ODI1QyAvKiBmaWx0ZXJzICovLAogCQkJCUIyNTU5OTBCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdJ
bWFnZS5jcHAgKi8sCiAJCQkJQjI1NTk5MEMwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ltYWdlLmgg
Ki8sCi0JCQkJMDhGODU5RDIxNDYzRjlDRDAwNjdEOTMzIC8qIFNWR0ltYWdlQ2FjaGUuY3BwICov
LAotCQkJCTA4Rjg1OUQzMTQ2M0Y5Q0QwMDY3RDkzMyAvKiBTVkdJbWFnZUNhY2hlLmggKi8sCiAJ
CQkJQUFDMDhDRUQxNUY5MzNENjAwRjFFMTg4IC8qIFNWR0ltYWdlQ2hyb21lQ2xpZW50LmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IGdyYXBoaWNzOwpAQCAtMjU2NzcsNyArMjU2NzEsNiBAQAogCQkJ
CUIyMjI3QTJBMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdHcmFkaWVudEVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTY1MEZCRjJCMEQ5QUYwNDcwMDhGQzI5MiAvKiBTVkdIS2VybkVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyNTU5OUE0MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdJbWFn
ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDhGODU5RDUxNDYzRjlDRDAwNjdEOTMzIC8qIFNWR0lt
YWdlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFBQzA4Q0VGMTVGOTMzRDYwMEYxRTE4OCAv
KiBTVkdJbWFnZUNocm9tZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMkQwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0ltYWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI4
QzZBMkEwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR0ltYWdlTG9hZGVyLmggaW4gSGVhZGVycyAqLywK
QEAgLTI4OTAyLDcgKzI4ODk1LDYgQEAKIAkJCQlCMjIyN0EyOTBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHR3JhZGllbnRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1MEZCRjJBMEQ5QUYw
NDcwMDhGQzI5MiAvKiBTVkdIS2VybkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI1
NTk5QTMwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ltYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTA4Rjg1OUQ0MTQ2M0Y5Q0QwMDY3RDkzMyAvKiBTVkdJbWFnZUNhY2hlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyMjI3QTJDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdJbWFnZUVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjI4QzZBMjkwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR0ltYWdl
TG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTJGMEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdMYW5nU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9uIDEzOTMyMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNiw4ICsxMDYsOCBAQCB2b2lkIENhY2hlZEltYWdlOjpkaWRSZW1vdmVDbGllbnQoQ2FjaGVk
CiAKICAgICBtX3BlbmRpbmdDb250YWluZXJTaXplUmVxdWVzdHMucmVtb3ZlKHN0YXRpY19jYXN0
PENhY2hlZEltYWdlQ2xpZW50Kj4oYykpOwogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKG1fc3Zn
SW1hZ2VDYWNoZSkKLSAgICAgICAgbV9zdmdJbWFnZUNhY2hlLT5yZW1vdmVDbGllbnRGcm9tQ2Fj
aGUoc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2VDbGllbnQqPihjKSk7CisgICAgaWYgKG1faW1hZ2Ug
JiYgbV9pbWFnZS0+aXNTVkdJbWFnZSgpKQorICAgICAgICBzdGF0aWNfY2FzdDxTVkdJbWFnZSo+
KG1faW1hZ2UuZ2V0KCkpLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUoc3RhdGljX2Nhc3Q8Q2FjaGVk
SW1hZ2VDbGllbnQqPihjKSk7CiAjZW5kaWYKIAogICAgIENhY2hlZFJlc291cmNlOjpkaWRSZW1v
dmVDbGllbnQoYyk7CkBAIC0xNDMsNyArMTQzLDcgQEAgaW5saW5lIEltYWdlKiBDYWNoZWRJbWFn
ZTo6bG9va3VwT3JDcmVhdAogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIW1faW1hZ2UtPmlz
U1ZHSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7Ci0gICAgSW1hZ2UqIHVz
ZUltYWdlID0gbV9zdmdJbWFnZUNhY2hlLT5sb29rdXBPckNyZWF0ZUJpdG1hcEltYWdlRm9yUmVu
ZGVyZXIocmVuZGVyZXIpOworICAgIEltYWdlKiB1c2VJbWFnZSA9IHN0YXRpY19jYXN0PFNWR0lt
YWdlKj4obV9pbWFnZS5nZXQoKSktPmxvb2t1cE9yQ3JlYXRlQml0bWFwSW1hZ2VGb3JSZW5kZXJl
cihyZW5kZXJlcik7CiAgICAgaWYgKHVzZUltYWdlID09IEltYWdlOjpudWxsSW1hZ2UoKSkKICAg
ICAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CiAgICAgcmV0dXJuIHVzZUltYWdlOwpAQCAtMTk5
LDE2ICsxOTksMTQgQEAgdm9pZCBDYWNoZWRJbWFnZTo6c2V0Q29udGFpbmVyU2l6ZUZvclJlbgog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKCFtX2ltYWdl
LT5pc1NWR0ltYWdlKCkpIHsKLSAgICAgICAgbV9pbWFnZS0+c2V0Q29udGFpbmVyU2l6ZShjb250
YWluZXJTaXplKTsKKyAgICBpZiAobV9pbWFnZS0+aXNTVkdJbWFnZSgpKSB7CisgICAgICAgIHN0
YXRpY19jYXN0PFNWR0ltYWdlKj4obV9pbWFnZS5nZXQoKSktPnNldFJlcXVlc3RlZFNpemVBbmRT
Y2FsZXMocmVuZGVyZXIsIFNWR0ltYWdlOjpTaXplQW5kU2NhbGVzKGNvbnRhaW5lclNpemUsIGNv
bnRhaW5lclpvb20pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIG1fc3ZnSW1hZ2VD
YWNoZS0+c2V0UmVxdWVzdGVkU2l6ZUFuZFNjYWxlcyhyZW5kZXJlciwgU1ZHSW1hZ2VDYWNoZTo6
U2l6ZUFuZFNjYWxlcyhjb250YWluZXJTaXplLCBjb250YWluZXJab29tKSk7CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTShjb250YWluZXJab29tKTsKLSAgICBtX2ltYWdlLT5zZXRDb250YWluZXJT
aXplKGNvbnRhaW5lclNpemUpOwogI2VuZGlmCisgICAgbV9pbWFnZS0+c2V0Q29udGFpbmVyU2l6
ZShjb250YWluZXJTaXplKTsKIH0KIAogYm9vbCBDYWNoZWRJbWFnZTo6dXNlc0ltYWdlQ29udGFp
bmVyU2l6ZSgpIGNvbnN0CkBAIC0yNTEsNyArMjQ5LDcgQEAgTGF5b3V0U2l6ZSBDYWNoZWRJbWFn
ZTo6aW1hZ2VTaXplRm9yUmVuZAogCiAjaWYgRU5BQkxFKFNWRykKICAgICBpZiAobV9pbWFnZS0+
aXNTVkdJbWFnZSgpKSB7Ci0gICAgICAgIFNWR0ltYWdlQ2FjaGU6OlNpemVBbmRTY2FsZXMgc2l6
ZUFuZFNjYWxlcyA9IG1fc3ZnSW1hZ2VDYWNoZS0+cmVxdWVzdGVkU2l6ZUFuZFNjYWxlcyhyZW5k
ZXJlcik7CisgICAgICAgIFNWR0ltYWdlOjpTaXplQW5kU2NhbGVzIHNpemVBbmRTY2FsZXMgPSBz
dGF0aWNfY2FzdDxTVkdJbWFnZSo+KG1faW1hZ2UuZ2V0KCkpLT5yZXF1ZXN0ZWRTaXplQW5kU2Nh
bGVzKHJlbmRlcmVyKTsKICAgICAgICAgaWYgKCFzaXplQW5kU2NhbGVzLnNpemUuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICBmbG9hdCBzY2FsZSA9IHNpemVBbmRTY2FsZXMuc2NhbGU7CiAgICAg
ICAgICAgICBpZiAoIXNjYWxlKSB7CkBAIC0zMDIsOSArMzAwLDYgQEAgdm9pZCBDYWNoZWRJbWFn
ZTo6Y2hlY2tTaG91bGRQYWludEJyb2tlbgogdm9pZCBDYWNoZWRJbWFnZTo6Y2xlYXIoKQogewog
ICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgpOwotI2lmIEVOQUJMRShTVkcpCi0gICAgbV9zdmdJbWFn
ZUNhY2hlLmNsZWFyKCk7Ci0jZW5kaWYKICAgICBjbGVhckltYWdlKCk7CiAgICAgbV9wZW5kaW5n
Q29udGFpbmVyU2l6ZVJlcXVlc3RzLmNsZWFyKCk7CiAgICAgc2V0RW5jb2RlZFNpemUoMCk7CkBA
IC0zMjAsMTEgKzMxNSw4IEBAIGlubGluZSB2b2lkIENhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSgp
CiAgICAgICAgIG1faW1hZ2UgPSBQREZEb2N1bWVudEltYWdlOjpjcmVhdGUoKTsKICNlbmRpZgog
I2lmIEVOQUJMRShTVkcpCi0gICAgZWxzZSBpZiAobV9yZXNwb25zZS5taW1lVHlwZSgpID09ICJp
bWFnZS9zdmcreG1sIikgewotICAgICAgICBSZWZQdHI8U1ZHSW1hZ2U+IHN2Z0ltYWdlID0gU1ZH
SW1hZ2U6OmNyZWF0ZSh0aGlzKTsKLSAgICAgICAgbV9zdmdJbWFnZUNhY2hlID0gU1ZHSW1hZ2VD
YWNoZTo6Y3JlYXRlKHN2Z0ltYWdlLmdldCgpKTsKLSAgICAgICAgbV9pbWFnZSA9IHN2Z0ltYWdl
LnJlbGVhc2UoKTsKLSAgICB9CisgICAgZWxzZSBpZiAobV9yZXNwb25zZS5taW1lVHlwZSgpID09
ICJpbWFnZS9zdmcreG1sIikKKyAgICAgICAgbV9pbWFnZSA9IFNWR0ltYWdlOjpjcmVhdGUodGhp
cyk7CiAjZW5kaWYKICAgICBlbHNlCiAgICAgICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3Jl
YXRlKHRoaXMpOwpAQCAtNDc0LDggKzQ2Niw4IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmNoYW5nZWRJ
blJlY3QoY29uc3QgSW0KICAgICAgICAgcmV0dXJuOwogI2lmIEVOQUJMRShTVkcpCiAgICAgLy8g
V2UgaGF2ZSB0byB1cGRhdGUgdGhlIGNhY2hlZCBJbWFnZUJ1ZmZlcnMgaWYgdGhlIHVuZGVybHlp
bmcgY29udGVudCBjaGFuZ2VkLgotICAgIGlmIChpbWFnZS0+aXNTVkdJbWFnZSgpKSB7Ci0gICAg
ICAgIG1fc3ZnSW1hZ2VDYWNoZS0+aW1hZ2VDb250ZW50Q2hhbmdlZCgpOworICAgIGlmIChtX2lt
YWdlLT5pc1NWR0ltYWdlKCkpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHSW1hZ2UqPihtX2lt
YWdlLmdldCgpKS0+aW1hZ2VDb250ZW50Q2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogI2VuZGlmCkBAIC00ODgsOSArNDgwLDYgQEAgdm9pZCBDYWNoZWRJbWFnZTo6cmVwb3J0TWVt
b3J5VXNhZ2UoTWVtbwogICAgIG1lbW9yeU9iamVjdEluZm8tPnNldENsYXNzTmFtZSgiQ2FjaGVk
SW1hZ2UiKTsKICAgICBDYWNoZWRSZXNvdXJjZTo6cmVwb3J0TWVtb3J5VXNhZ2UobWVtb3J5T2Jq
ZWN0SW5mbyk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9pbWFnZSwgIm1faW1hZ2UiKTsKLSNpZiBF
TkFCTEUoU1ZHKQotICAgIGluZm8uYWRkTWVtYmVyKG1fc3ZnSW1hZ2VDYWNoZSk7Ci0jZW5kaWYK
IH0KIAogYm9vbCBDYWNoZWRJbWFnZTo6Y3VycmVudEZyYW1lSGFzQWxwaGEoY29uc3QgUmVuZGVy
T2JqZWN0KiByZW5kZXJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5oCShyZXZpc2lvbiAxMzkzMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplSGFzaC5oIgogI2luY2x1ZGUgIkxheW91
dFNpemUuaCIKLSNpbmNsdWRlICJTVkdJbWFnZUNhY2hlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTExNCw5ICsxMTMsNiBAQCBwcml2
YXRlOgogICAgIENvbnRhaW5lclNpemVSZXF1ZXN0cyBtX3BlbmRpbmdDb250YWluZXJTaXplUmVx
dWVzdHM7CiAKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7Ci0jaWYgRU5BQkxFKFNWRykKLSAg
ICBPd25QdHI8U1ZHSW1hZ2VDYWNoZT4gbV9zdmdJbWFnZUNhY2hlOwotI2VuZGlmCiAgICAgYm9v
bCBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2U7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDEzOTMyMykKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQy
LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGNvbnN0IGludCB0aW1lVG9L
ZWVwQ2FjaGVkQml0bWFwc0FmdGVyTGFzdFVzZUluU2Vjb25kcyA9IDMwOworCiBTVkdJbWFnZTo6
U1ZHSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZlcikK
KyAgICAsIG1fcmVkcmF3VGltZXIodGhpcywgJlNWR0ltYWdlOjpyZWRyYXdUaW1lckZpcmVkKQor
ICAgICwgbV9jYWNoZUNsZWFyVGltZXIodGhpcywgJlNWR0ltYWdlOjpjYWNoZUNsZWFyVGltZXJG
aXJlZCwgdGltZVRvS2VlcENhY2hlZEJpdG1hcHNBZnRlckxhc3RVc2VJblNlY29uZHMpCiB7CiB9
CiAKQEAgLTU1LDEzICs1OSwyOSBAQCBTVkdJbWFnZTo6flNWR0ltYWdlKCkKICAgICAgICAgY3Vy
cmVudFBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+ZnJhbWVEZXRhY2hlZCgpOyAvLyBCcmVh
ayBib3RoIHRoZSBsb2FkZXIgYW5kIHZpZXcgcmVmZXJlbmNlcyB0byB0aGUgZnJhbWUKICAgICB9
CiAKKyAgICBtX3NpemVBbmRTY2FsZXNNYXAuY2xlYXIoKTsKKyAgICBjbGVhckJpdG1hcENhY2hl
KCk7CisKICAgICAvLyBWZXJpZnkgdGhhdCBwYWdlIHRlYXJkb3duIGRlc3Ryb3llZCB0aGUgQ2hy
b21lCiAgICAgQVNTRVJUKCFtX2Nocm9tZUNsaWVudCB8fCAhbV9jaHJvbWVDbGllbnQtPmltYWdl
KCkpOwogfQogCit2b2lkIFNWR0ltYWdlOjpjbGVhckJpdG1hcENhY2hlKCkKK3sKKyAgICBJbWFn
ZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VEYXRhTWFwLmVuZCgpOworICAgIGZvciAo
SW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VEYXRhTWFwLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICAvLyBDaGVja3MgaWYgdGhlIGNsaWVudCAoaXQtPmtleSkg
aXMgc3RpbGwgdmFsaWQuIFRoZSBjbGllbnQgc2hvdWxkIHJlbW92ZSBpdHNlbGYgZnJvbSB0aGlz
CisgICAgICAgIC8vIGNhY2hlIGJlZm9yZSBpdHMgZW5kIG9mIGxpZmUsIG90aGVyd2lzZSB0aGUg
Zm9sbG93aW5nIEFTU0VSVCB3aWxsIGNyYXNoIG9uIHB1cmUgdmlydHVhbAorICAgICAgICAvLyBm
dW5jdGlvbiBjYWxsIG9yIGEgZ2VuZXJhbCBjcmFzaC4KKyAgICAgICAgQVNTRVJUKGl0LT5rZXkt
PnJlc291cmNlQ2xpZW50VHlwZSgpID09IENhY2hlZEltYWdlQ2xpZW50OjpleHBlY3RlZFR5cGUo
KSk7CisgICAgICAgIGRlbGV0ZSBpdC0+dmFsdWUuYnVmZmVyOworICAgIH0KKyAgICBtX2ltYWdl
RGF0YU1hcC5jbGVhcigpOworfQorCiB2b2lkIFNWR0ltYWdlOjpzZXRDb250YWluZXJTaXplKGNv
bnN0IEludFNpemUmKQogewotICAgIC8vIFNWR0ltYWdlQ2FjaGUgYWxyZWFkeSBpbnRlcmNlcHRl
ZCB0aGlzIGNhbGwsIGFzIGl0IHN0b3JlcyAmIGNhY2hlcyB0aGUgZGVzaXJlZCBjb250YWluZXIg
c2l6ZXMgJiB6b29tIGxldmVscy4KKyAgICAvLyBDYWNoZWRJbWFnZSBzaG91bGQgaGF2ZSBpbnRl
cmNlcHRlZCB0aGlzIGNhbGwuCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKQEAgLTIw
Niw2ICsyMjYsMzYgQEAgdm9pZCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbgog
ICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7CiB9CiAKK3ZvaWQgU1ZHSW1h
Z2U6OnJlZHJhdygpCit7CisgICAgSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdl
RGF0YU1hcC5lbmQoKTsKKyAgICBmb3IgKEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX2lt
YWdlRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSW1hZ2VEYXRh
JiBkYXRhID0gaXQtPnZhbHVlOworICAgICAgICBpZiAoIWRhdGEuaW1hZ2VOZWVkc1VwZGF0ZSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAvLyBJZiB0aGUgY29udGVudCBjaGFuZ2Vk
IHdlIHJlZHJhdyB1c2luZyBvdXIgZXhpc3RpbmcgSW1hZ2VCdWZmZXIuCisgICAgICAgIEFTU0VS
VChkYXRhLmJ1ZmZlcik7CisgICAgICAgIEFTU0VSVChkYXRhLmltYWdlKTsKKyAgICAgICAgZHJh
d1NWR1RvSW1hZ2VCdWZmZXIoZGF0YS5idWZmZXIsIGRhdGEuc2l6ZUFuZFNjYWxlcy5zaXplLCBk
YXRhLnNpemVBbmRTY2FsZXMuem9vbSwgZGF0YS5zaXplQW5kU2NhbGVzLnNjYWxlLCBDbGVhcklt
YWdlQnVmZmVyKTsKKyAgICAgICAgZGF0YS5pbWFnZSA9IGRhdGEuYnVmZmVyLT5jb3B5SW1hZ2Uo
Q29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGRhdGEuaW1hZ2VOZWVkc1VwZGF0ZSA9IGZhbHNl
OworICAgIH0KKyAgICBBU1NFUlQoaW1hZ2VPYnNlcnZlcigpKTsKKyAgICBpbWFnZU9ic2VydmVy
KCktPmFuaW1hdGlvbkFkdmFuY2VkKHRoaXMpOworfQorCit2b2lkIFNWR0ltYWdlOjpyZWRyYXdU
aW1lckZpcmVkKFRpbWVyPFNWR0ltYWdlPiopCit7CisgICAgLy8gV2UgaGF2ZSBubyBndWFyYW50
ZWUgdGhhdCB0aGUgZnJhbWUgZG9lcyBub3QgcmVxdWlyZSBsYXlvdXQgd2hlbiB0aGUgdGltZXIg
ZmlyZWQuCisgICAgLy8gU28gYmUgc3VyZSB0byBjaGVjayBhZ2FpbiBpbiBjYXNlIGl0IGlzIHN0
aWxsIG5vdCBzYWZlIHRvIHJ1biByZWRyYXcuCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWVW
aWV3KCk7CisgICAgaWYgKHZpZXcgJiYgKHZpZXctPm5lZWRzTGF5b3V0KCkgfHwgdmlldy0+aXNJ
bkxheW91dCgpKSkgeworICAgICAgICBpZiAoIW1fcmVkcmF3VGltZXIuaXNBY3RpdmUoKSkKKyAg
ICAgICAgICAgIG1fcmVkcmF3VGltZXIuc3RhcnRPbmVTaG90KDApOworICAgIH0gZWxzZQorICAg
ICAgICByZWRyYXcoKTsKK30KKwogUmVuZGVyQm94KiBTVkdJbWFnZTo6ZW1iZWRkZWRDb250ZW50
Qm94KCkgY29uc3QKIHsKICAgICBpZiAoIW1fcGFnZSkKQEAgLTIyNSw2ICsyNzUsMTA1IEBAIEZy
YW1lVmlldyogU1ZHSW1hZ2U6OmZyYW1lVmlldygpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGFnZS0+
bWFpbkZyYW1lKCktPnZpZXcoKTsKIH0KIAordm9pZCBTVkdJbWFnZTo6aW1hZ2VDb250ZW50Q2hh
bmdlZCgpCit7CisgICAgSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlRGF0YU1h
cC5lbmQoKTsKKyAgICBmb3IgKEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlRGF0
YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT52YWx1ZS5pbWFnZU5l
ZWRzVXBkYXRlID0gdHJ1ZTsKKworICAgIC8vIEFsd2F5cyByZWRyYXcgb24gYSB0aW1lciBiZWNh
dXNlIHRoaXMgbWV0aG9kIG1heSBiZSBpbnZva2VkIGZyb20gZGVzdHJ1Y3RvcnMgb2YgdGhpbmdz
IHdlIGFyZSBpbnRlbmRpbmcgdG8gZHJhdy4KKyAgICBpZiAoIW1fcmVkcmF3VGltZXIuaXNBY3Rp
dmUoKSkKKyAgICAgICAgbV9yZWRyYXdUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK0ltYWdl
KiBTVkdJbWFnZTo6bG9va3VwT3JDcmVhdGVCaXRtYXBJbWFnZUZvclJlbmRlcmVyKGNvbnN0IFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0
dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKKworICAgIGNvbnN0IENhY2hlZEltYWdlQ2xpZW50KiBj
bGllbnQgPSByZW5kZXJlcjsKKworICAgIC8vIFRoZSBjYWNoZSBuZWVkcyB0byBrbm93IHRoZSBz
aXplIG9mIHRoZSByZW5kZXJlciBiZWZvcmUgcXVlcnlpbmcgYW4gaW1hZ2UgZm9yIGl0LgorICAg
IFNpemVBbmRTY2FsZXNNYXA6Oml0ZXJhdG9yIHNpemVJdCA9IG1fc2l6ZUFuZFNjYWxlc01hcC5m
aW5kKHJlbmRlcmVyKTsKKyAgICBpZiAoc2l6ZUl0ID09IG1fc2l6ZUFuZFNjYWxlc01hcC5lbmQo
KSkKKyAgICAgICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKKworICAgIEludFNpemUgc2l6
ZSA9IHNpemVJdC0+dmFsdWUuc2l6ZTsKKyAgICBmbG9hdCB6b29tID0gc2l6ZUl0LT52YWx1ZS56
b29tOworICAgIGZsb2F0IHNjYWxlID0gc2l6ZUl0LT52YWx1ZS5zY2FsZTsKKworICAgIC8vIEZJ
WE1FICg4NTMzNSk6IFRoaXMgbmVlZHMgdG8gdGFrZSBDU1MgdHJhbnNmb3JtIHNjYWxlIGludG8g
YWNjb3VudCBhcyB3ZWxsLgorICAgIFBhZ2UqIHBhZ2UgPSByZW5kZXJlci0+ZG9jdW1lbnQoKS0+
cGFnZSgpOworICAgIGlmICghc2NhbGUpCisgICAgICAgIHNjYWxlID0gcGFnZS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKSAqIHBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOworCisgICAgQVNTRVJUKCFzaXpl
LmlzRW1wdHkoKSk7CisKKyAgICAvLyAoUmUpc2NoZWR1bGUgdGhlIG9uZXNob3QgdGltZXIgdG8g
dGhyb3cgb3V0IGFsbCB0aGUgY2FjaGVkIEltYWdlQnVmZmVycyBpZiB0aGV5IHJlbWFpbiB1bnVz
ZWQgZm9yIHRvbyBsb25nLgorICAgIG1fY2FjaGVDbGVhclRpbWVyLnJlc3RhcnQoKTsKKworICAg
IC8vIExvb2t1cCBpbWFnZSBmb3IgY2xpZW50IGluIGNhY2hlIGFuZCBldmVudHVhbGx5IHVwZGF0
ZSBpdC4KKyAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZURhdGFNYXAuZmlu
ZChjbGllbnQpOworICAgIGlmIChpdCAhPSBtX2ltYWdlRGF0YU1hcC5lbmQoKSkgeworICAgICAg
ICBJbWFnZURhdGEmIGRhdGEgPSBpdC0+dmFsdWU7CisKKyAgICAgICAgLy8gQ29tbW9uIGNhc2U6
IGltYWdlIHNpemUgJiB6b29tIHJlbWFpbmVkIHRoZSBzYW1lLgorICAgICAgICBpZiAoZGF0YS5z
aXplQW5kU2NhbGVzLnNpemUgPT0gc2l6ZSAmJiBkYXRhLnNpemVBbmRTY2FsZXMuem9vbSA9PSB6
b29tICYmIGRhdGEuc2l6ZUFuZFNjYWxlcy5zY2FsZSA9PSBzY2FsZSkKKyAgICAgICAgICAgIHJl
dHVybiBkYXRhLmltYWdlLmdldCgpOworCisgICAgICAgIC8vIElmIHRoZSBpbWFnZSBzaXplIGZv
ciB0aGUgY2xpZW50IGNoYW5nZWQsIHdlIGhhdmUgdG8gZGVsZXRlIHRoZSBidWZmZXIsIHJlbW92
ZSB0aGUgaXRlbSBmcm9tIHRoZSBjYWNoZSBhbmQgcmVjcmVhdGUgaXQuCisgICAgICAgIGRlbGV0
ZSBkYXRhLmJ1ZmZlcjsKKyAgICAgICAgbV9pbWFnZURhdGFNYXAucmVtb3ZlKGl0KTsKKyAgICB9
CisKKyAgICBGbG9hdFNpemUgc2NhbGVkU2l6ZShzaXplKTsKKyAgICBzY2FsZWRTaXplLnNjYWxl
KHNjYWxlKTsKKworICAgIC8vIENyZWF0ZSBhbmQgY2FjaGUgbmV3IGltYWdlIGFuZCBpbWFnZSBi
dWZmZXIgYXQgcmVxdWVzdGVkIHNpemUuCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBuZXdCdWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShzY2FsZWRTaXplKSwgMSk7
CisgICAgaWYgKCFuZXdCdWZmZXIpCisgICAgICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7
CisKKyAgICBkcmF3U1ZHVG9JbWFnZUJ1ZmZlcihuZXdCdWZmZXIuZ2V0KCksIHNpemUsIHpvb20s
IHNjYWxlLCBEb250Q2xlYXJJbWFnZUJ1ZmZlcik7CisKKyAgICBSZWZQdHI8SW1hZ2U+IG5ld0lt
YWdlID0gbmV3QnVmZmVyLT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CisgICAgSW1hZ2Uq
IG5ld0ltYWdlUHRyID0gbmV3SW1hZ2UuZ2V0KCk7CisgICAgQVNTRVJUKG5ld0ltYWdlUHRyKTsK
KworICAgIG1faW1hZ2VEYXRhTWFwLmFkZChjbGllbnQsIEltYWdlRGF0YShuZXdCdWZmZXIubGVh
a1B0cigpLCBuZXdJbWFnZS5yZWxlYXNlKCksIFNpemVBbmRTY2FsZXMoc2l6ZSwgem9vbSwgc2Nh
bGUpKSk7CisgICAgcmV0dXJuIG5ld0ltYWdlUHRyOworfQorCitTVkdJbWFnZTo6U2l6ZUFuZFNj
YWxlcyBTVkdJbWFnZTo6cmVxdWVzdGVkU2l6ZUFuZFNjYWxlcyhjb25zdCBDYWNoZWRJbWFnZUNs
aWVudCogY2xpZW50KSBjb25zdAoreworICAgIGlmICghY2xpZW50KQorICAgICAgICByZXR1cm4g
U2l6ZUFuZFNjYWxlcygpOworICAgIFNpemVBbmRTY2FsZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9zaXplQW5kU2NhbGVzTWFwLmZpbmQoY2xpZW50KTsKKyAgICBpZiAoaXQgPT0gbV9zaXpl
QW5kU2NhbGVzTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gU2l6ZUFuZFNjYWxlcygpOworICAg
IHJldHVybiBpdC0+dmFsdWU7Cit9CisKK3ZvaWQgU1ZHSW1hZ2U6OnNldFJlcXVlc3RlZFNpemVB
bmRTY2FsZXMoY29uc3QgQ2FjaGVkSW1hZ2VDbGllbnQqIGNsaWVudCwgY29uc3QgU2l6ZUFuZFNj
YWxlcyYgc2l6ZUFuZFNjYWxlcykKK3sKKyAgICBBU1NFUlQoY2xpZW50KTsKKyAgICBBU1NFUlQo
IXNpemVBbmRTY2FsZXMuc2l6ZS5pc0VtcHR5KCkpOworICAgIG1fc2l6ZUFuZFNjYWxlc01hcC5z
ZXQoY2xpZW50LCBzaXplQW5kU2NhbGVzKTsKK30KKwordm9pZCBTVkdJbWFnZTo6cmVtb3ZlQ2xp
ZW50RnJvbUNhY2hlKGNvbnN0IENhY2hlZEltYWdlQ2xpZW50KiBjbGllbnQpCit7CisgICAgQVNT
RVJUKGNsaWVudCk7CisgICAgbV9zaXplQW5kU2NhbGVzTWFwLnJlbW92ZShjbGllbnQpOworCisg
ICAgSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VEYXRhTWFwLmZpbmQoY2xpZW50
KTsKKyAgICBpZiAoaXQgPT0gbV9pbWFnZURhdGFNYXAuZW5kKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGRlbGV0ZSBpdC0+dmFsdWUuYnVmZmVyOworICAgIG1faW1hZ2VEYXRhTWFwLnJlbW92
ZShpdCk7Cit9CisKIGJvb2wgU1ZHSW1hZ2U6Omhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdAogewog
ICAgIGlmICghbV9wYWdlKQpAQCAtMzI3LDYgKzQ3NiwxMSBAQCBib29sIFNWR0ltYWdlOjpkYXRh
Q2hhbmdlZChib29sIGFsbERhdGFSCiAgICAgcmV0dXJuIG1fcGFnZTsKIH0KIAordm9pZCBTVkdJ
bWFnZTo6Y2FjaGVDbGVhclRpbWVyRmlyZWQoRGVmZXJyYWJsZU9uZVNob3RUaW1lcjxTVkdJbWFn
ZT4qKQoreworICAgIGNsZWFyQml0bWFwQ2FjaGUoKTsKK30KKwogU3RyaW5nIFNWR0ltYWdlOjpm
aWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJzdmciOwpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHJldmlzaW9uIDEzOTMyMykKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsOCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI5LDcgKzMxLDkgQEAKIAogI2lmIEVOQUJMRShTVkcpCiAKKyNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTEsOSArNTUsNjMgQEAgcHVibGljOgogICAgICAg
ICBEb250Q2xlYXJJbWFnZUJ1ZmZlcgogICAgIH07CiAKKyAgICBzdHJ1Y3QgU2l6ZUFuZFNjYWxl
cyB7CisgICAgICAgIFNpemVBbmRTY2FsZXMoKQorICAgICAgICAgICAgOiB6b29tKDEpCisgICAg
ICAgICAgICAsIHNjYWxlKDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFNpemVB
bmRTY2FsZXMoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSwgZmxvYXQgbmV3Wm9vbSwgZmxvYXQgbmV3
U2NhbGUpCisgICAgICAgICAgICA6IHNpemUobmV3U2l6ZSkKKyAgICAgICAgICAgICwgem9vbShu
ZXdab29tKQorICAgICAgICAgICAgLCBzY2FsZShuZXdTY2FsZSkKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgU2l6ZUFuZFNjYWxlcyhjb25zdCBJbnRTaXplJiBuZXdTaXplLCBmbG9h
dCBuZXdab29tKQorICAgICAgICAgICAgOiBzaXplKG5ld1NpemUpCisgICAgICAgICAgICAsIHpv
b20obmV3Wm9vbSkKKyAgICAgICAgICAgICwgc2NhbGUoMCkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgSW50U2l6ZSBzaXplOworICAgICAgICBmbG9hdCB6b29tOworICAgICAgICBm
bG9hdCBzY2FsZTsgLy8gQSBzY2FsZSBvZiAwIGluZGljYXRlcyB0aGF0IHRoZSBkZWZhdWx0IHNj
YWxlIHNob3VsZCBiZSB1c2VkLgorICAgIH07CisKKyAgICBzdHJ1Y3QgSW1hZ2VEYXRhIHsKKyAg
ICAgICAgSW1hZ2VEYXRhKCkKKyAgICAgICAgICAgIDogaW1hZ2VOZWVkc1VwZGF0ZShmYWxzZSkK
KyAgICAgICAgICAgICwgYnVmZmVyKDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IEltYWdlRGF0YShJbWFnZUJ1ZmZlciogbmV3QnVmZmVyLCBQYXNzUmVmUHRyPEltYWdlPiBuZXdJ
bWFnZSwgY29uc3QgU2l6ZUFuZFNjYWxlcyYgbmV3U2l6ZUFuZFNjYWxlcykKKyAgICAgICAgICAg
IDogaW1hZ2VOZWVkc1VwZGF0ZShmYWxzZSkKKyAgICAgICAgICAgICwgc2l6ZUFuZFNjYWxlcyhu
ZXdTaXplQW5kU2NhbGVzKQorICAgICAgICAgICAgLCBidWZmZXIobmV3QnVmZmVyKQorICAgICAg
ICAgICAgLCBpbWFnZShuZXdJbWFnZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBpbWFnZU5lZWRzVXBkYXRlOworICAgICAgICBTaXplQW5kU2NhbGVzIHNpemVBbmRTY2Fs
ZXM7CisKKyAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlcjsKKyAgICAgICAgUmVmUHRyPEltYWdl
PiBpbWFnZTsKKyAgICB9OworCiAgICAgdm9pZCBkcmF3U1ZHVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciosIGNvbnN0IEludFNpemUmLCBmbG9hdCB6b29tLCBmbG9hdCBzY2FsZSwgU2hvdWxkQ2xl
YXJCdWZmZXIpOwogICAgIFJlbmRlckJveCogZW1iZWRkZWRDb250ZW50Qm94KCkgY29uc3Q7CiAg
ICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcoKSBjb25zdDsKKyAgICB2b2lkIGltYWdlQ29udGVudENo
YW5nZWQoKTsKKyAgICBJbWFnZSogbG9va3VwT3JDcmVhdGVCaXRtYXBJbWFnZUZvclJlbmRlcmVy
KGNvbnN0IFJlbmRlck9iamVjdCopOworCisgICAgU2l6ZUFuZFNjYWxlcyByZXF1ZXN0ZWRTaXpl
QW5kU2NhbGVzKGNvbnN0IENhY2hlZEltYWdlQ2xpZW50KikgY29uc3Q7CisgICAgdm9pZCBzZXRS
ZXF1ZXN0ZWRTaXplQW5kU2NhbGVzKGNvbnN0IENhY2hlZEltYWdlQ2xpZW50KiwgY29uc3QgU2l6
ZUFuZFNjYWxlcyYpOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKGNvbnN0IENhY2hl
ZEltYWdlQ2xpZW50Kik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbWFnZSgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwpAQCAtODQs
OSArMTQyLDIxIEBAIHByaXZhdGU6CiAKICAgICBTVkdJbWFnZShJbWFnZU9ic2VydmVyKik7CiAg
ICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBm
cm9tUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0b1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKKyAgICB2b2lkIHJlZHJhdygpOwor
ICAgIHZvaWQgcmVkcmF3VGltZXJGaXJlZChUaW1lcjxTVkdJbWFnZT4qKTsKKyAgICB2b2lkIGNh
Y2hlQ2xlYXJUaW1lckZpcmVkKERlZmVycmFibGVPbmVTaG90VGltZXI8U1ZHSW1hZ2U+Kik7Cisg
ICAgdm9pZCBjbGVhckJpdG1hcENhY2hlKCk7CiAKICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRy
IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAKKyAgICB0eXBlZGVmIEhhc2hNYXA8Y29u
c3QgQ2FjaGVkSW1hZ2VDbGllbnQqLCBTaXplQW5kU2NhbGVzPiBTaXplQW5kU2NhbGVzTWFwOwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBDYWNoZWRJbWFnZUNsaWVudCosIFNWR0ltYWdlOjpJ
bWFnZURhdGE+IEltYWdlRGF0YU1hcDsKKworICAgIFNpemVBbmRTY2FsZXNNYXAgbV9zaXplQW5k
U2NhbGVzTWFwOworICAgIEltYWdlRGF0YU1hcCBtX2ltYWdlRGF0YU1hcDsKKyAgICBUaW1lcjxT
VkdJbWFnZT4gbV9yZWRyYXdUaW1lcjsKKyAgICBEZWZlcnJhYmxlT25lU2hvdFRpbWVyPFNWR0lt
YWdlPiBtX2NhY2hlQ2xlYXJUaW1lcjsKKwogICAgIE93blB0cjxTVkdJbWFnZUNocm9tZUNsaWVu
dD4gbV9jaHJvbWVDbGllbnQ7CiAgICAgT3duUHRyPFBhZ2U+IG1fcGFnZTsKICAgICBSZWZQdHI8
SW1hZ2U+IG1fZnJhbWVDYWNoZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2VDYWNoZS5jcHAJKHJldmlzaW9uIDEzOTMyMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
VkdJbWFnZUNhY2hlLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkNhY2hlZEltYWdl
LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAi
UmVuZGVyU1ZHUm9vdC5oIgotI2luY2x1ZGUgIlNWR0ltYWdlLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIGNvbnN0IGludCB0aW1lVG9LZWVwQ2FjaGVkQml0bWFwc0FmdGVyTGFz
dFVzZUluU2Vjb25kcyA9IDMwOwotCi1TVkdJbWFnZUNhY2hlOjpTVkdJbWFnZUNhY2hlKFNWR0lt
YWdlKiBzdmdJbWFnZSkKLSAgICA6IG1fc3ZnSW1hZ2Uoc3ZnSW1hZ2UpCi0gICAgLCBtX3JlZHJh
d1RpbWVyKHRoaXMsICZTVkdJbWFnZUNhY2hlOjpyZWRyYXdUaW1lckZpcmVkKQotICAgICwgbV9j
YWNoZUNsZWFyVGltZXIodGhpcywgJlNWR0ltYWdlQ2FjaGU6OmNhY2hlQ2xlYXJUaW1lckZpcmVk
LCB0aW1lVG9LZWVwQ2FjaGVkQml0bWFwc0FmdGVyTGFzdFVzZUluU2Vjb25kcykKLXsKLSAgICBB
U1NFUlQobV9zdmdJbWFnZSk7Ci19Ci0KLVNWR0ltYWdlQ2FjaGU6On5TVkdJbWFnZUNhY2hlKCkK
LXsKLSAgICBtX3NpemVBbmRTY2FsZXNNYXAuY2xlYXIoKTsKLSAgICBjbGVhckJpdG1hcENhY2hl
KCk7Ci19Ci0KLXZvaWQgU1ZHSW1hZ2VDYWNoZTo6Y2xlYXJCaXRtYXBDYWNoZSgpCi17Ci0gICAg
SW1hZ2VEYXRhTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlRGF0YU1hcC5lbmQoKTsKLSAgICBm
b3IgKEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlRGF0YU1hcC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgLy8gQ2hlY2tzIGlmIHRoZSBjbGllbnQgKGl0LT5r
ZXkpIGlzIHN0aWxsIHZhbGlkLiBUaGUgY2xpZW50IHNob3VsZCByZW1vdmUgaXRzZWxmIGZyb20g
dGhpcwotICAgICAgICAvLyBjYWNoZSBiZWZvcmUgaXRzIGVuZCBvZiBsaWZlLCBvdGhlcndpc2Ug
dGhlIGZvbGxvd2luZyBBU1NFUlQgd2lsbCBjcmFzaCBvbiBwdXJlIHZpcnR1YWwKLSAgICAgICAg
Ly8gZnVuY3Rpb24gY2FsbCBvciBhIGdlbmVyYWwgY3Jhc2guCi0gICAgICAgIEFTU0VSVChpdC0+
a2V5LT5yZXNvdXJjZUNsaWVudFR5cGUoKSA9PSBDYWNoZWRJbWFnZUNsaWVudDo6ZXhwZWN0ZWRU
eXBlKCkpOwotICAgICAgICBkZWxldGUgaXQtPnZhbHVlLmJ1ZmZlcjsKLSAgICB9Ci0KLSAgICBt
X2ltYWdlRGF0YU1hcC5jbGVhcigpOwotfQotCi12b2lkIFNWR0ltYWdlQ2FjaGU6OnJlbW92ZUNs
aWVudEZyb21DYWNoZShjb25zdCBDYWNoZWRJbWFnZUNsaWVudCogY2xpZW50KQotewotICAgIEFT
U0VSVChjbGllbnQpOwotICAgIG1fc2l6ZUFuZFNjYWxlc01hcC5yZW1vdmUoY2xpZW50KTsKLQot
ICAgIEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlRGF0YU1hcC5maW5kKGNsaWVu
dCk7Ci0gICAgaWYgKGl0ID09IG1faW1hZ2VEYXRhTWFwLmVuZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBkZWxldGUgaXQtPnZhbHVlLmJ1ZmZlcjsKLSAgICBtX2ltYWdlRGF0YU1hcC5yZW1v
dmUoaXQpOwotfQotCi12b2lkIFNWR0ltYWdlQ2FjaGU6OnNldFJlcXVlc3RlZFNpemVBbmRTY2Fs
ZXMoY29uc3QgQ2FjaGVkSW1hZ2VDbGllbnQqIGNsaWVudCwgY29uc3QgU2l6ZUFuZFNjYWxlcyYg
c2l6ZUFuZFNjYWxlcykKLXsKLSAgICBBU1NFUlQoY2xpZW50KTsKLSAgICBBU1NFUlQoIXNpemVB
bmRTY2FsZXMuc2l6ZS5pc0VtcHR5KCkpOwotICAgIG1fc2l6ZUFuZFNjYWxlc01hcC5zZXQoY2xp
ZW50LCBzaXplQW5kU2NhbGVzKTsKLX0KLQotU1ZHSW1hZ2VDYWNoZTo6U2l6ZUFuZFNjYWxlcyBT
VkdJbWFnZUNhY2hlOjpyZXF1ZXN0ZWRTaXplQW5kU2NhbGVzKGNvbnN0IENhY2hlZEltYWdlQ2xp
ZW50KiBjbGllbnQpIGNvbnN0Ci17Ci0gICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiBT
aXplQW5kU2NhbGVzKCk7Ci0gICAgU2l6ZUFuZFNjYWxlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3NpemVBbmRTY2FsZXNNYXAuZmluZChjbGllbnQpOwotICAgIGlmIChpdCA9PSBtX3NpemVB
bmRTY2FsZXNNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBTaXplQW5kU2NhbGVzKCk7Ci0gICAg
cmV0dXJuIGl0LT52YWx1ZTsKLX0KLQotdm9pZCBTVkdJbWFnZUNhY2hlOjppbWFnZUNvbnRlbnRD
aGFuZ2VkKCkKLXsKLSAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VEYXRh
TWFwLmVuZCgpOwotICAgIGZvciAoSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VE
YXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLmltYWdl
TmVlZHNVcGRhdGUgPSB0cnVlOwotCi0gICAgLy8gQWx3YXlzIHJlZHJhdyBvbiBhIHRpbWVyIGJl
Y2F1c2UgdGhpcyBtZXRob2QgbWF5IGJlIGludm9rZWQgZnJvbSBkZXN0cnVjdG9ycyBvZiB0aGlu
Z3Mgd2UgYXJlIGludGVuZGluZyB0byBkcmF3LgotICAgIGlmICghbV9yZWRyYXdUaW1lci5pc0Fj
dGl2ZSgpKQotICAgICAgICBtX3JlZHJhd1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9p
ZCBTVkdJbWFnZUNhY2hlOjpyZWRyYXcoKQotewotICAgIEltYWdlRGF0YU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9pbWFnZURhdGFNYXAuZW5kKCk7Ci0gICAgZm9yIChJbWFnZURhdGFNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9pbWFnZURhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIEltYWdlRGF0YSYgZGF0YSA9IGl0LT52YWx1ZTsKLSAgICAgICAgaWYgKCFkYXRhLmltYWdl
TmVlZHNVcGRhdGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gSWYgdGhlIGNv
bnRlbnQgY2hhbmdlZCB3ZSByZWRyYXcgdXNpbmcgb3VyIGV4aXN0aW5nIEltYWdlQnVmZmVyLgot
ICAgICAgICBBU1NFUlQoZGF0YS5idWZmZXIpOwotICAgICAgICBBU1NFUlQoZGF0YS5pbWFnZSk7
Ci0gICAgICAgIG1fc3ZnSW1hZ2UtPmRyYXdTVkdUb0ltYWdlQnVmZmVyKGRhdGEuYnVmZmVyLCBk
YXRhLnNpemVBbmRTY2FsZXMuc2l6ZSwgZGF0YS5zaXplQW5kU2NhbGVzLnpvb20sIGRhdGEuc2l6
ZUFuZFNjYWxlcy5zY2FsZSwgU1ZHSW1hZ2U6OkNsZWFySW1hZ2VCdWZmZXIpOwotICAgICAgICBk
YXRhLmltYWdlID0gZGF0YS5idWZmZXItPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKLSAg
ICAgICAgZGF0YS5pbWFnZU5lZWRzVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotICAgIEFTU0VSVCht
X3N2Z0ltYWdlLT5pbWFnZU9ic2VydmVyKCkpOwotICAgIG1fc3ZnSW1hZ2UtPmltYWdlT2JzZXJ2
ZXIoKS0+YW5pbWF0aW9uQWR2YW5jZWQobV9zdmdJbWFnZSk7Ci19Ci0KLXZvaWQgU1ZHSW1hZ2VD
YWNoZTo6cmVkcmF3VGltZXJGaXJlZChUaW1lcjxTVkdJbWFnZUNhY2hlPiopCi17Ci0gICAgLy8g
V2UgaGF2ZSBubyBndWFyYW50ZWUgdGhhdCB0aGUgZnJhbWUgZG9lcyBub3QgcmVxdWlyZSBsYXlv
dXQgd2hlbiB0aGUgdGltZXIgZmlyZWQuCi0gICAgLy8gU28gYmUgc3VyZSB0byBjaGVjayBhZ2Fp
biBpbiBjYXNlIGl0IGlzIHN0aWxsIG5vdCBzYWZlIHRvIHJ1biByZWRyYXcuCi0gICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBtX3N2Z0ltYWdlLT5mcmFtZVZpZXcoKTsKLSAgICBpZiAoZnJhbWVW
aWV3ICYmIChmcmFtZVZpZXctPm5lZWRzTGF5b3V0KCkgfHwgZnJhbWVWaWV3LT5pc0luTGF5b3V0
KCkpKSB7Ci0gICAgICAgIGlmICghbV9yZWRyYXdUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICAg
ICAgbV9yZWRyYXdUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgfSBlbHNlCi0gICAgICAgcmVk
cmF3KCk7Ci19Ci0KLXZvaWQgU1ZHSW1hZ2VDYWNoZTo6Y2FjaGVDbGVhclRpbWVyRmlyZWQoRGVm
ZXJyYWJsZU9uZVNob3RUaW1lcjxTVkdJbWFnZUNhY2hlPiopCi17Ci0gICAgY2xlYXJCaXRtYXBD
YWNoZSgpOwotfQotCi1JbWFnZSogU1ZHSW1hZ2VDYWNoZTo6bG9va3VwT3JDcmVhdGVCaXRtYXBJ
bWFnZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi17Ci0gICAgaWYg
KCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKLQotICAgIGNv
bnN0IENhY2hlZEltYWdlQ2xpZW50KiBjbGllbnQgPSByZW5kZXJlcjsKLQotICAgIC8vIFRoZSBj
YWNoZSBuZWVkcyB0byBrbm93IHRoZSBzaXplIG9mIHRoZSByZW5kZXJlciBiZWZvcmUgcXVlcnlp
bmcgYW4gaW1hZ2UgZm9yIGl0LgotICAgIFNpemVBbmRTY2FsZXNNYXA6Oml0ZXJhdG9yIHNpemVJ
dCA9IG1fc2l6ZUFuZFNjYWxlc01hcC5maW5kKHJlbmRlcmVyKTsKLSAgICBpZiAoc2l6ZUl0ID09
IG1fc2l6ZUFuZFNjYWxlc01hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEltYWdlOjpudWxsSW1h
Z2UoKTsKLQotICAgIEludFNpemUgc2l6ZSA9IHNpemVJdC0+dmFsdWUuc2l6ZTsKLSAgICBmbG9h
dCB6b29tID0gc2l6ZUl0LT52YWx1ZS56b29tOwotICAgIGZsb2F0IHNjYWxlID0gc2l6ZUl0LT52
YWx1ZS5zY2FsZTsKLQotICAgIC8vIEZJWE1FICg4NTMzNSk6IFRoaXMgbmVlZHMgdG8gdGFrZSBD
U1MgdHJhbnNmb3JtIHNjYWxlIGludG8gYWNjb3VudCBhcyB3ZWxsLgotICAgIFBhZ2UqIHBhZ2Ug
PSByZW5kZXJlci0+ZG9jdW1lbnQoKS0+cGFnZSgpOwotICAgIGlmICghc2NhbGUpCi0gICAgICAg
IHNjYWxlID0gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSAqIHBhZ2UtPnBhZ2VTY2FsZUZhY3Rv
cigpOwotCi0gICAgQVNTRVJUKCFzaXplLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyAoUmUpc2NoZWR1
bGUgdGhlIG9uZXNob3QgdGltZXIgdG8gdGhyb3cgb3V0IGFsbCB0aGUgY2FjaGVkIEltYWdlQnVm
ZmVycyBpZiB0aGV5IHJlbWFpbiB1bnVzZWQgZm9yIHRvbyBsb25nLgotICAgIG1fY2FjaGVDbGVh
clRpbWVyLnJlc3RhcnQoKTsKLQotICAgIC8vIExvb2t1cCBpbWFnZSBmb3IgY2xpZW50IGluIGNh
Y2hlIGFuZCBldmVudHVhbGx5IHVwZGF0ZSBpdC4KLSAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9pbWFnZURhdGFNYXAuZmluZChjbGllbnQpOwotICAgIGlmIChpdCAhPSBtX2ltYWdl
RGF0YU1hcC5lbmQoKSkgewotICAgICAgICBJbWFnZURhdGEmIGRhdGEgPSBpdC0+dmFsdWU7Ci0K
LSAgICAgICAgLy8gQ29tbW9uIGNhc2U6IGltYWdlIHNpemUgJiB6b29tIHJlbWFpbmVkIHRoZSBz
YW1lLgotICAgICAgICBpZiAoZGF0YS5zaXplQW5kU2NhbGVzLnNpemUgPT0gc2l6ZSAmJiBkYXRh
LnNpemVBbmRTY2FsZXMuem9vbSA9PSB6b29tICYmIGRhdGEuc2l6ZUFuZFNjYWxlcy5zY2FsZSA9
PSBzY2FsZSkKLSAgICAgICAgICAgIHJldHVybiBkYXRhLmltYWdlLmdldCgpOwotCi0gICAgICAg
IC8vIElmIHRoZSBpbWFnZSBzaXplIGZvciB0aGUgY2xpZW50IGNoYW5nZWQsIHdlIGhhdmUgdG8g
ZGVsZXRlIHRoZSBidWZmZXIsIHJlbW92ZSB0aGUgaXRlbSBmcm9tIHRoZSBjYWNoZSBhbmQgcmVj
cmVhdGUgaXQuCi0gICAgICAgIGRlbGV0ZSBkYXRhLmJ1ZmZlcjsKLSAgICAgICAgbV9pbWFnZURh
dGFNYXAucmVtb3ZlKGl0KTsKLSAgICB9Ci0KLSAgICBGbG9hdFNpemUgc2NhbGVkU2l6ZShzaXpl
KTsKLSAgICBzY2FsZWRTaXplLnNjYWxlKHNjYWxlKTsKLQotICAgIC8vIENyZWF0ZSBhbmQgY2Fj
aGUgbmV3IGltYWdlIGFuZCBpbWFnZSBidWZmZXIgYXQgcmVxdWVzdGVkIHNpemUuCi0gICAgT3du
UHRyPEltYWdlQnVmZmVyPiBuZXdCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVk
SW50U2l6ZShzY2FsZWRTaXplKSwgMSk7Ci0gICAgaWYgKCFuZXdCdWZmZXIpCi0gICAgICAgIHJl
dHVybiBJbWFnZTo6bnVsbEltYWdlKCk7Ci0KLSAgICBtX3N2Z0ltYWdlLT5kcmF3U1ZHVG9JbWFn
ZUJ1ZmZlcihuZXdCdWZmZXIuZ2V0KCksIHNpemUsIHpvb20sIHNjYWxlLCBTVkdJbWFnZTo6RG9u
dENsZWFySW1hZ2VCdWZmZXIpOwotCi0gICAgUmVmUHRyPEltYWdlPiBuZXdJbWFnZSA9IG5ld0J1
ZmZlci0+Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwotICAgIEltYWdlKiBuZXdJbWFnZVB0
ciA9IG5ld0ltYWdlLmdldCgpOwotICAgIEFTU0VSVChuZXdJbWFnZVB0cik7Ci0KLSAgICBtX2lt
YWdlRGF0YU1hcC5hZGQoY2xpZW50LCBJbWFnZURhdGEobmV3QnVmZmVyLmxlYWtQdHIoKSwgbmV3
SW1hZ2UucmVsZWFzZSgpLCBTaXplQW5kU2NhbGVzKHNpemUsIHpvb20sIHNjYWxlKSkpOwotICAg
IHJldHVybiBuZXdJbWFnZVB0cjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlQ2FjaGUuaAkocmV2aXNpb24gMTM5MzIzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdJbWFnZUNhY2hlX2gKLSNkZWZpbmUgU1ZHSW1h
Z2VDYWNoZV9oCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVk
ZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYWNoZWRJbWFnZTsKLWNsYXNzIENhY2hl
ZEltYWdlQ2xpZW50OwotY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFzcyBTVkdJbWFnZTsKLWNsYXNz
IFJlbmRlck9iamVjdDsKLQotY2xhc3MgU1ZHSW1hZ2VDYWNoZSB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgflNWR0ltYWdlQ2FjaGUoKTsKLQotICAgIHN0YXRp
YyBQYXNzT3duUHRyPFNWR0ltYWdlQ2FjaGU+IGNyZWF0ZShTVkdJbWFnZSogaW1hZ2UpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNWR0ltYWdlQ2FjaGUoaW1hZ2UpKTsKLSAg
ICB9Ci0KLSAgICBzdHJ1Y3QgU2l6ZUFuZFNjYWxlcyB7Ci0gICAgICAgIFNpemVBbmRTY2FsZXMo
KQotICAgICAgICAgICAgOiB6b29tKDEpCi0gICAgICAgICAgICAsIHNjYWxlKDApCi0gICAgICAg
IHsKLSAgICAgICAgfQotCi0gICAgICAgIFNpemVBbmRTY2FsZXMoY29uc3QgSW50U2l6ZSYgbmV3
U2l6ZSwgZmxvYXQgbmV3Wm9vbSwgZmxvYXQgbmV3U2NhbGUpCi0gICAgICAgICAgICA6IHNpemUo
bmV3U2l6ZSkKLSAgICAgICAgICAgICwgem9vbShuZXdab29tKQotICAgICAgICAgICAgLCBzY2Fs
ZShuZXdTY2FsZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgU2l6ZUFuZFNjYWxl
cyhjb25zdCBJbnRTaXplJiBuZXdTaXplLCBmbG9hdCBuZXdab29tKQotICAgICAgICAgICAgOiBz
aXplKG5ld1NpemUpCi0gICAgICAgICAgICAsIHpvb20obmV3Wm9vbSkKLSAgICAgICAgICAgICwg
c2NhbGUoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgSW50U2l6ZSBzaXplOwot
ICAgICAgICBmbG9hdCB6b29tOwotICAgICAgICBmbG9hdCBzY2FsZTsgLy8gQSBzY2FsZSBvZiAw
IGluZGljYXRlcyB0aGF0IHRoZSBkZWZhdWx0IHNjYWxlIHNob3VsZCBiZSB1c2VkLgotICAgIH07
Ci0KLSAgICB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShjb25zdCBDYWNoZWRJbWFnZUNsaWVu
dCopOwotCi0gICAgdm9pZCBzZXRSZXF1ZXN0ZWRTaXplQW5kU2NhbGVzKGNvbnN0IENhY2hlZElt
YWdlQ2xpZW50KiwgY29uc3QgU2l6ZUFuZFNjYWxlcyYpOwotICAgIFNpemVBbmRTY2FsZXMgcmVx
dWVzdGVkU2l6ZUFuZFNjYWxlcyhjb25zdCBDYWNoZWRJbWFnZUNsaWVudCopIGNvbnN0OwotCi0g
ICAgSW1hZ2UqIGxvb2t1cE9yQ3JlYXRlQml0bWFwSW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5k
ZXJPYmplY3QqKTsKLSAgICB2b2lkIGltYWdlQ29udGVudENoYW5nZWQoKTsKLQotcHJpdmF0ZToK
LSAgICBTVkdJbWFnZUNhY2hlKFNWR0ltYWdlKik7Ci0gICAgdm9pZCByZWRyYXcoKTsKLSAgICB2
b2lkIHJlZHJhd1RpbWVyRmlyZWQoVGltZXI8U1ZHSW1hZ2VDYWNoZT4qKTsKLSAgICB2b2lkIGNh
Y2hlQ2xlYXJUaW1lckZpcmVkKERlZmVycmFibGVPbmVTaG90VGltZXI8U1ZHSW1hZ2VDYWNoZT4q
KTsKLSAgICB2b2lkIGNsZWFyQml0bWFwQ2FjaGUoKTsKLQotICAgIHN0cnVjdCBJbWFnZURhdGEg
ewotICAgICAgICBJbWFnZURhdGEoKQotICAgICAgICAgICAgOiBpbWFnZU5lZWRzVXBkYXRlKGZh
bHNlKQotICAgICAgICAgICAgLCBidWZmZXIoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAg
ICAgICAgSW1hZ2VEYXRhKEltYWdlQnVmZmVyKiBuZXdCdWZmZXIsIFBhc3NSZWZQdHI8SW1hZ2U+
IG5ld0ltYWdlLCBjb25zdCBTaXplQW5kU2NhbGVzJiBuZXdTaXplQW5kU2NhbGVzKQotICAgICAg
ICAgICAgOiBpbWFnZU5lZWRzVXBkYXRlKGZhbHNlKQotICAgICAgICAgICAgLCBzaXplQW5kU2Nh
bGVzKG5ld1NpemVBbmRTY2FsZXMpCi0gICAgICAgICAgICAsIGJ1ZmZlcihuZXdCdWZmZXIpCi0g
ICAgICAgICAgICAsIGltYWdlKG5ld0ltYWdlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICBib29sIGltYWdlTmVlZHNVcGRhdGU7Ci0gICAgICAgIFNpemVBbmRTY2FsZXMgc2l6ZUFu
ZFNjYWxlczsKLQotICAgICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyOwotICAgICAgICBSZWZQdHI8
SW1hZ2U+IGltYWdlOwotICAgIH07Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgQ2FjaGVk
SW1hZ2VDbGllbnQqLCBTaXplQW5kU2NhbGVzPiBTaXplQW5kU2NhbGVzTWFwOwotICAgIHR5cGVk
ZWYgSGFzaE1hcDxjb25zdCBDYWNoZWRJbWFnZUNsaWVudCosIEltYWdlRGF0YT4gSW1hZ2VEYXRh
TWFwOwotCi0gICAgU1ZHSW1hZ2UqIG1fc3ZnSW1hZ2U7Ci0gICAgU2l6ZUFuZFNjYWxlc01hcCBt
X3NpemVBbmRTY2FsZXNNYXA7Ci0gICAgSW1hZ2VEYXRhTWFwIG1faW1hZ2VEYXRhTWFwOwotICAg
IFRpbWVyPFNWR0ltYWdlQ2FjaGU+IG1fcmVkcmF3VGltZXI7Ci0gICAgRGVmZXJyYWJsZU9uZVNo
b3RUaW1lcjxTVkdJbWFnZUNhY2hlPiBtX2NhY2hlQ2xlYXJUaW1lcjsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0jZW5kaWYgLy8gU1ZHSW1h
Z2VDYWNoZV9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>