<?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>3939</bug_id>
          
          <creation_ts>2005-07-10 03:37:26 -0700</creation_ts>
          <short_desc>ksvg2/core files omited from CVS</short_desc>
          <delta_ts>2005-07-10 03:54:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>14317</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-07-10 03:37:26 -0700</bug_when>
    <thetext>ksvg2/core files omited from CVS

This patch adds them.

The &quot;core&quot; directory had been ignored by the global cvsinore rule.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14318</commentid>
    <comment_count>1</comment_count>
      <attachid>2898</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-07-10 03:43:55 -0700</bug_when>
    <thetext>Created attachment 2898
Adds ksvg2/core directory, previously ignored by cvs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14319</commentid>
    <comment_count>2</comment_count>
      <attachid>2898</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-07-10 03:52:54 -0700</bug_when>
    <thetext>Comment on attachment 2898
Adds ksvg2/core directory, previously ignored by cvs.

r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2898</attachid>
            <date>2005-07-10 03:43:55 -0700</date>
            <delta_ts>2005-07-10 03:52:54 -0700</delta_ts>
            <desc>Adds ksvg2/core directory, previously ignored by cvs.</desc>
            <filename>ksvg2core.patch</filename>
            <type>text/plain</type>
            <size>40634</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9D
aGFuZ2VMb2csdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDQwMApkaWZmIC1wIC11IC1yMS40NDAw
IENoYW5nZUxvZwotLS0gQ2hhbmdlTG9nCTEwIEp1bCAyMDA1IDA2OjQ4OjE2IC0wMDAwCTEuNDQw
MAorKysgQ2hhbmdlTG9nCTEwIEp1bCAyMDA1IDEwOjIzOjA3IC0wMDAwCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMDUtMDctMTAgIEVyaWMgU2VpZGVsICA8ZXNlaWRlbEBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgbWpzLgorCisgICAgICAgICoga3N2ZzIvY29yZS9LQ2FudmFzUmVuZGVy
aW5nU3R5bGUuY2M6IEFkZGVkLgorICAgICAgICAqIGtzdmcyL2NvcmUvS0NhbnZhc1JlbmRlcmlu
Z1N0eWxlLmg6IEFkZGVkLgorICAgICAgICAqIGtzdmcyL2NvcmUvS1NWR0RvY3VtZW50QnVpbGRl
ci5jYzogQWRkZWQuCisgICAgICAgICoga3N2ZzIvY29yZS9LU1ZHRG9jdW1lbnRCdWlsZGVyLmg6
IEFkZGVkLgorICAgICAgICAqIGtzdmcyL2NvcmUvS1NWR1RpbWVTY2hlZHVsZXIuY2M6IEFkZGVk
LgorICAgICAgICAqIGtzdmcyL2NvcmUvS1NWR1RpbWVTY2hlZHVsZXIuaDogQWRkZWQuCisgICAg
ICAgICoga3N2ZzIvY29yZS9LU1ZHVGltZVNjaGVkdWxlci5tb2M6IEFkZGVkLgorICAgICAgICBB
ZGRlZCBkaXJlY3RvcnkgcHJldmlvdXNseSBpZ25vcmVkIGJ5IGdsb2JhbCBjdnNpZ25vcmUgcnVs
ZXMuCisKKzIwMDUtMDctMTAgIEVyaWMgU2VpZGVsICA8ZXNlaWRlbEBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgbWpzLgorCisgICAgICAgICogV2ViQ29yZS5wYnByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICBhZGRlZCBodG1sZmFjdG9yeS4qIHRvIFdlYkNvcmUrU1ZHCisg
ICAgICAgIEFsc28gZml4ZWQgL3N3L2Jpbi9iaXNvbiBhYnNvbHV0ZSBwYXRoLgorICAgICAgICBo
dHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTM5MzgKKwogMjAw
NS0wNy0wOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBjb2xsb3F1eS5pbmZvPgogCiAgICAg
ICAgIFJldmlld2VkIGFuZCBsYW5kZWQgYnkgTWFjaWVqLgpJbmRleDogLi9rc3ZnMi9jb3JlL0tD
YW52YXNSZW5kZXJpbmdTdHlsZS5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBLQ2FudmFzUmVuZGVy
aW5nU3R5bGUuY2MKZGlmZiAtTiAuL2tzdmcyL2NvcmUvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNj
Ci0tLSAuL2tzdmcyL2NvcmUvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNjCTEgSmFuIDE5NzAgMDA6
MDA6MDAgLTAwMDAKKysrIC4va3N2ZzIvY29yZS9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuY2MJMTAg
SnVsIDIwMDUgMTA6MjU6MDkgLTAwMDAKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisJQ29weXJpZ2h0
IChDKSAyMDA0IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorCQkJCSAgMjAw
NCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorCisJVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KKyovCisKKyNpbmNsdWRlIDxxcGFpbnRkZXZpY2VtZXRyaWNzLmg+CisjaW5jbHVkZSA8cXBh
aW50ZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXMuaD4KKyNpbmNsdWRlIDxr
Y2FudmFzL0tDYW52YXNQYXRoLmg+CisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzVHlwZXMuaD4K
KyNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNSZWdpc3RyeS5oPgorI2luY2x1ZGUgPGtjYW52YXMv
ZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKyNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVu
ZGVyaW5nRmlsbFBhaW50ZXIuaD4KKyNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5n
U3Ryb2tlUGFpbnRlci5oPgorI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWlu
dFNlcnZlclNvbGlkLmg+CisjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50
U2VydmVyR3JhZGllbnQuaD4KKworI2luY2x1ZGUgPGtkb20vaW1wbC9Eb2N1bWVudEltcGwuaD4K
KyNpbmNsdWRlIDxrZG9tL2Nzcy9pbXBsL1JlbmRlclN0eWxlLmg+CisjaW5jbHVkZSA8a2RvbS9j
c3MvaW1wbC9DU1NWYWx1ZUxpc3RJbXBsLmg+CisjaW5jbHVkZSA8a2RvbS9jc3MvaW1wbC9DU1NQ
cmltaXRpdmVWYWx1ZUltcGwuaD4KKworI2luY2x1ZGUgImtzdmcuaCIKKyNpbmNsdWRlICJTVkdM
ZW5ndGhJbXBsLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTVkdT
dHlsZWRFbGVtZW50SW1wbC5oIgorI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgor
Cit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpLQ2FudmFz
UmVuZGVyaW5nU3R5bGUoS0NhbnZhcyAqY2FudmFzLCBjb25zdCBTVkdSZW5kZXJTdHlsZSAqc3R5
bGUpIDogS1JlbmRlcmluZ1N0eWxlKCkKK3sJCisJbV9zdHlsZSA9IHN0eWxlOworCW1fY2FudmFz
ID0gY2FudmFzOworCW1fZmlsbFBhaW50ZXIgPSAwOworCW1fc3Ryb2tlUGFpbnRlciA9IDA7Cit9
CisKK0tDYW52YXNSZW5kZXJpbmdTdHlsZTo6fktDYW52YXNSZW5kZXJpbmdTdHlsZSgpCit7CisJ
ZGlzYWJsZUZpbGxQYWludGVyKCk7CisJZGlzYWJsZVN0cm9rZVBhaW50ZXIoKTsKK30KKwordm9p
ZCBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OnVwZGF0ZUZpbGwoS0NhbnZhc0l0ZW0gKml0ZW0pCit7
CisJaWYoIW1fY2FudmFzIHx8ICFtX2NhbnZhcy0+cmVuZGVyaW5nRGV2aWNlKCkpCisJCXJldHVy
bjsKKworCVNWR1BhaW50SW1wbCAqZmlsbCA9IG1fc3R5bGUtPmZpbGxQYWludCgpOworCWlmKCFm
aWxsKSAvLyBpbml0aWFsIHZhbHVlIChibGFjaykKKwl7CisJCUtSZW5kZXJpbmdQYWludFNlcnZl
ciAqZmlsbFBhaW50U2VydmVyID0gbV9jYW52YXMtPnJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQ
YWludFNlcnZlcihLQ1BhaW50U2VydmVyVHlwZShQU19TT0xJRCkpOworCQlLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJTb2xpZCAqZmlsbFBhaW50U2VydmVyU29saWQgPSBzdGF0aWNfY2FzdDxLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJTb2xpZCAqPihmaWxsUGFpbnRTZXJ2ZXIpOworCQlmaWxsUGFpbnRTZXJ2
ZXJTb2xpZC0+c2V0Q29sb3IoUXQ6OmJsYWNrKTsKKworCQlmaWxsUGFpbnRlcigpLT5zZXRQYWlu
dFNlcnZlcihmaWxsUGFpbnRTZXJ2ZXIpOworCX0KKwllbHNlIGlmKGZpbGwtPnBhaW50VHlwZSgp
ID09IFNWR19QQUlOVFRZUEVfVVJJKQorCXsKKwkJS0RPTTo6RE9NU3RyaW5nIGlkKGZpbGwtPnVy
aSgpKTsKKworCQlLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKmZpbGxQYWludFNlcnZlciA9IG1fY2Fu
dmFzLT5yZWdpc3RyeSgpLT5nZXRQYWludFNlcnZlckJ5SWQoaWQuc3RyaW5nKCkubWlkKDEpKTsK
KwkJS0NhbnZhc1Jlc291cmNlICpmaWxsUGFpbnRSZXNvdXJjZSA9IGR5bmFtaWNfY2FzdDxLQ2Fu
dmFzUmVzb3VyY2UgKj4oZmlsbFBhaW50U2VydmVyKTsKKwkJaWYoaXRlbSAmJiBmaWxsUGFpbnRS
ZXNvdXJjZSkKKwkJCWZpbGxQYWludFJlc291cmNlLT5hZGRDbGllbnQoaXRlbSk7CisKKwkJZmls
bFBhaW50ZXIoKS0+c2V0UGFpbnRTZXJ2ZXIoZmlsbFBhaW50U2VydmVyKTsKKwl9CisJZWxzZSBp
ZihmaWxsLT5wYWludFR5cGUoKSAhPSBTVkdfUEFJTlRUWVBFX05PTkUpCisJeworCQlLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXIgKmZpbGxQYWludFNlcnZlciA9IG1fY2FudmFzLT5yZW5kZXJpbmdEZXZp
Y2UoKS0+Y3JlYXRlUGFpbnRTZXJ2ZXIoS0NQYWludFNlcnZlclR5cGUoUFNfU09MSUQpKTsKKwkJ
S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQgKmZpbGxQYWludFNlcnZlclNvbGlkID0gc3RhdGlj
X2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQgKj4oZmlsbFBhaW50U2VydmVyKTsKKwor
CQlpZihmaWxsLT5wYWludFR5cGUoKSA9PSBTVkdfUEFJTlRUWVBFX0NVUlJFTlRDT0xPUikKKwkJ
CWZpbGxQYWludFNlcnZlclNvbGlkLT5zZXRDb2xvcihtX3N0eWxlLT5jb2xvcigpKTsKKwkJZWxz
ZQorCQkJZmlsbFBhaW50U2VydmVyU29saWQtPnNldENvbG9yKGZpbGwtPmNvbG9yKCkpOworCisJ
CWZpbGxQYWludGVyKCktPnNldFBhaW50U2VydmVyKGZpbGxQYWludFNlcnZlcik7CisJfQorCisJ
ZmlsbFBhaW50ZXIoKS0+c2V0RmlsbFJ1bGUobV9zdHlsZS0+ZmlsbFJ1bGUoKSA9PSBXUl9OT05a
RVJPID8gUlVMRV9OT05aRVJPIDogUlVMRV9FVkVOT0REKTsKKwlmaWxsUGFpbnRlcigpLT5zZXRP
cGFjaXR5KG1fc3R5bGUtPmZpbGxPcGFjaXR5KCkpOworfQorCit2b2lkIEtDYW52YXNSZW5kZXJp
bmdTdHlsZTo6dXBkYXRlU3Ryb2tlKEtDYW52YXNJdGVtICppdGVtKQoreworCWlmKCFtX2NhbnZh
cyB8fCAhbV9jYW52YXMtPnJlbmRlcmluZ0RldmljZSgpKQorCQlyZXR1cm47CisKKwlTVkdQYWlu
dEltcGwgKnN0cm9rZSA9IG1fc3R5bGUtPnN0cm9rZVBhaW50KCk7CisJaWYoc3Ryb2tlICYmIHN0
cm9rZS0+cGFpbnRUeXBlKCkgPT0gU1ZHX1BBSU5UVFlQRV9VUkkpCisJeworCQlLRE9NOjpET01T
dHJpbmcgaWQoc3Ryb2tlLT51cmkoKSk7CisKKwkJS1JlbmRlcmluZ1BhaW50U2VydmVyICpzdHJv
a2VQYWludFNlcnZlciA9IG1fY2FudmFzLT5yZWdpc3RyeSgpLT5nZXRQYWludFNlcnZlckJ5SWQo
aWQuc3RyaW5nKCkubWlkKDEpKTsKKwkJS0NhbnZhc1Jlc291cmNlICpzdHJva2VQYWludFJlc291
cmNlID0gZHluYW1pY19jYXN0PEtDYW52YXNSZXNvdXJjZSAqPihzdHJva2VQYWludFNlcnZlcik7
CisJCWlmKGl0ZW0gJiYgc3Ryb2tlUGFpbnRSZXNvdXJjZSkKKwkJCXN0cm9rZVBhaW50UmVzb3Vy
Y2UtPmFkZENsaWVudChpdGVtKTsKKworCQlzdHJva2VQYWludGVyKCktPnNldFBhaW50U2VydmVy
KHN0cm9rZVBhaW50U2VydmVyKTsKKwl9CisJZWxzZSBpZihzdHJva2UgJiYgc3Ryb2tlLT5wYWlu
dFR5cGUoKSAhPSBTVkdfUEFJTlRUWVBFX05PTkUpCisJeworCQlLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXIgKnN0cm9rZVBhaW50U2VydmVyID0gbV9jYW52YXMtPnJlbmRlcmluZ0RldmljZSgpLT5jcmVh
dGVQYWludFNlcnZlcihLQ1BhaW50U2VydmVyVHlwZShQU19TT0xJRCkpOworCQlLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJTb2xpZCAqc3Ryb2tlUGFpbnRTZXJ2ZXJTb2xpZCA9IHN0YXRpY19jYXN0PEtS
ZW5kZXJpbmdQYWludFNlcnZlclNvbGlkICo+KHN0cm9rZVBhaW50U2VydmVyKTsKKwkJCisJCWlm
KHN0cm9rZS0+cGFpbnRUeXBlKCkgPT0gU1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IpCisJCQlz
dHJva2VQYWludFNlcnZlclNvbGlkLT5zZXRDb2xvcihtX3N0eWxlLT5jb2xvcigpKTsKKwkJZWxz
ZQorCQkJc3Ryb2tlUGFpbnRTZXJ2ZXJTb2xpZC0+c2V0Q29sb3Ioc3Ryb2tlLT5jb2xvcigpKTsK
KworCQlzdHJva2VQYWludGVyKCktPnNldFBhaW50U2VydmVyKHN0cm9rZVBhaW50U2VydmVyKTsK
Kwl9CisKKwlzdHJva2VQYWludGVyKCktPnNldE9wYWNpdHkobV9zdHlsZS0+c3Ryb2tlT3BhY2l0
eSgpKTsKKwlzdHJva2VQYWludGVyKCktPnNldFN0cm9rZVdpZHRoKGNzc1ByaW1pdGl2ZVRvTGVu
Z3RoKGl0ZW0sIG1fc3R5bGUtPnN0cm9rZVdpZHRoKCksIDEuMCkpOworCisJS0RPTTo6Q1NTVmFs
dWVMaXN0SW1wbCAqZGFzaGVzID0gbV9zdHlsZS0+c3Ryb2tlRGFzaEFycmF5KCk7CisJaWYoZGFz
aGVzKQorCXsKKwkJS0RPTTo6Q1NTUHJpbWl0aXZlVmFsdWVJbXBsICpkYXNoID0gMDsKKwkJUVBh
aW50RGV2aWNlTWV0cmljcyAqcGFpbnREZXZpY2VNZXRyaWNzID0gMDsKKworCQlTVkdFbGVtZW50
SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnRJbXBsICo+KGl0ZW0tPnVzZXJE
YXRhKCkpOworCQlpZihlbGVtZW50ICYmIGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKSkKKwkJCXBh
aW50RGV2aWNlTWV0cmljcyA9IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+cGFpbnREZXZpY2VN
ZXRyaWNzKCk7CisKKwkJS0NEYXNoQXJyYXkgYXJyYXk7CisJCXVuc2lnbmVkIGxvbmcgbGVuID0g
ZGFzaGVzLT5sZW5ndGgoKTsKKwkJZm9yKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBsZW47IGkr
KykKKwkJeworCQkJZGFzaCA9IHN0YXRpY19jYXN0PEtET006OkNTU1ByaW1pdGl2ZVZhbHVlSW1w
bCAqPihkYXNoZXMtPml0ZW0oaSkpOworCQkJaWYoZGFzaCkKKwkJCQlhcnJheS5hcHBlbmQoKGZs
b2F0KSBkYXNoLT5jb21wdXRlTGVuZ3RoRmxvYXQoY29uc3RfY2FzdDxTVkdSZW5kZXJTdHlsZSAq
PihtX3N0eWxlKSwgcGFpbnREZXZpY2VNZXRyaWNzKSk7CisJCX0KKworCQlzdHJva2VQYWludGVy
KCktPnNldERhc2hBcnJheShhcnJheSk7CisJCXN0cm9rZVBhaW50ZXIoKS0+c2V0RGFzaE9mZnNl
dChjc3NQcmltaXRpdmVUb0xlbmd0aChpdGVtLCBtX3N0eWxlLT5zdHJva2VEYXNoT2Zmc2V0KCks
IDAuMCkpOworCX0KKworCXN0cm9rZVBhaW50ZXIoKS0+c2V0U3Ryb2tlTWl0ZXJMaW1pdChtX3N0
eWxlLT5zdHJva2VNaXRlckxpbWl0KCkpOworCXN0cm9rZVBhaW50ZXIoKS0+c2V0U3Ryb2tlQ2Fw
U3R5bGUoKEtDQ2FwU3R5bGUpIG1fc3R5bGUtPmNhcFN0eWxlKCkpOworCXN0cm9rZVBhaW50ZXIo
KS0+c2V0U3Ryb2tlSm9pblN0eWxlKChLQ0pvaW5TdHlsZSkgbV9zdHlsZS0+am9pblN0eWxlKCkp
OworfQorCit2b2lkIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6dXBkYXRlU3R5bGUoY29uc3QgU1ZH
UmVuZGVyU3R5bGUgKnN0eWxlLCBLQ2FudmFzSXRlbSAqaXRlbSkKK3sKKwltX3N0eWxlID0gc3R5
bGU7CisJCisJZGlzYWJsZUZpbGxQYWludGVyKCk7CisJZGlzYWJsZVN0cm9rZVBhaW50ZXIoKTsK
KwkKKwl1cGRhdGVGaWxsKGl0ZW0pOworCXVwZGF0ZVN0cm9rZShpdGVtKTsKK30KKwordm9pZCBL
Q2FudmFzUmVuZGVyaW5nU3R5bGU6OmRpc2FibGVGaWxsUGFpbnRlcigpCit7CisJaWYobV9maWxs
UGFpbnRlcikKKwl7CisJCWRlbGV0ZSBtX2ZpbGxQYWludGVyOworCQltX2ZpbGxQYWludGVyID0g
MDsKKwl9Cit9CisKK2RvdWJsZSBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OmNzc1ByaW1pdGl2ZVRv
TGVuZ3RoKEtDYW52YXNJdGVtICppdGVtLCBLRE9NOjpDU1NWYWx1ZUltcGwgKnZhbHVlLCBkb3Vi
bGUgZGVmYXVsdFZhbHVlKSBjb25zdAoreworCUtET006OkNTU1ByaW1pdGl2ZVZhbHVlSW1wbCAq
cHJpbWl0aXZlID0gc3RhdGljX2Nhc3Q8S0RPTTo6Q1NTUHJpbWl0aXZlVmFsdWVJbXBsICo+KHZh
bHVlKTsKKworCXVuc2lnbmVkIHNob3J0IGNzc1R5cGUgPSAocHJpbWl0aXZlID8gcHJpbWl0aXZl
LT5wcmltaXRpdmVUeXBlKCkgOiAodW5zaWduZWQgc2hvcnQpIEtET006OkNTU19VTktOT1dOKTsK
KwlpZighKGNzc1R5cGUgPiBLRE9NOjpDU1NfVU5LTk9XTiAmJiBjc3NUeXBlIDw9IEtET006OkNT
U19QQykpCisJCXJldHVybiBkZWZhdWx0VmFsdWU7CisKKwlRUGFpbnREZXZpY2VNZXRyaWNzICpw
YWludERldmljZU1ldHJpY3MgPSAwOworCisJU1ZHRWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxTVkdFbGVtZW50SW1wbCAqPihpdGVtLT51c2VyRGF0YSgpKTsKKwlpZihlbGVtZW50
ICYmIGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKSkKKwkJcGFpbnREZXZpY2VNZXRyaWNzID0gZWxl
bWVudC0+b3duZXJEb2N1bWVudCgpLT5wYWludERldmljZU1ldHJpY3MoKTsKKworCWlmKGNzc1R5
cGUgPT0gS0RPTTo6Q1NTX1BFUkNFTlRBR0UpCisJeworCQlTVkdFbGVtZW50SW1wbCAqdmlld3Bv
cnRFbGVtZW50ID0gKGVsZW1lbnQgPyBlbGVtZW50LT52aWV3cG9ydEVsZW1lbnQoKSA6IDApOwor
CQlpZih2aWV3cG9ydEVsZW1lbnQpCisJCXsKKwkJCWRvdWJsZSByZXN1bHQgPSBwcmltaXRpdmUt
PmdldEZsb2F0VmFsdWUoS0RPTTo6Q1NTX1BFUkNFTlRBR0UpIC8gMTAwLjA7CisJCQlyZXR1cm4g
U1ZHSGVscGVyOjpQZXJjZW50YWdlT2ZWaWV3cG9ydChyZXN1bHQsIHZpZXdwb3J0RWxlbWVudCwg
TE1fT1RIRVIpOworCQl9CisJfQorCisJcmV0dXJuIHByaW1pdGl2ZS0+Y29tcHV0ZUxlbmd0aEZs
b2F0KGNvbnN0X2Nhc3Q8U1ZHUmVuZGVyU3R5bGUgKj4obV9zdHlsZSksIHBhaW50RGV2aWNlTWV0
cmljcyk7Cit9CisKKy8vIFdvcmxkIG1hdHJpeCBwcm9wZXJ0eQorS0NhbnZhc01hdHJpeCBLQ2Fu
dmFzUmVuZGVyaW5nU3R5bGU6Om9iamVjdE1hdHJpeCgpIGNvbnN0Cit7CisJcmV0dXJuIG1fbWF0
cml4OworfQorCit2b2lkIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6c2V0T2JqZWN0TWF0cml4KGNv
bnN0IEtDYW52YXNNYXRyaXggJm1hdHJpeCkKK3sKKwltX21hdHJpeCA9IG1hdHJpeDsKK30KKwor
Ly8gU3Ryb2tlIChha2EgUGVuKSBwcm9wZXJ0aWVzCitib29sIEtDYW52YXNSZW5kZXJpbmdTdHls
ZTo6aXNTdHJva2VkKCkgY29uc3QKK3sKKwlyZXR1cm4gKG1fc3Ryb2tlUGFpbnRlciAhPSAwKTsK
K30KKworS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIgKktDYW52YXNSZW5kZXJpbmdTdHlsZTo6c3Ry
b2tlUGFpbnRlcigpCit7CisJaWYoIW1fc3Ryb2tlUGFpbnRlcikKKwkJbV9zdHJva2VQYWludGVy
ID0gbmV3IEtSZW5kZXJpbmdTdHJva2VQYWludGVyKCk7CisKKwlyZXR1cm4gbV9zdHJva2VQYWlu
dGVyOworfQorCit2b2lkIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6ZGlzYWJsZVN0cm9rZVBhaW50
ZXIoKQoreworCWlmKG1fc3Ryb2tlUGFpbnRlcikKKwl7CisJCWRlbGV0ZSBtX3N0cm9rZVBhaW50
ZXI7CisJCW1fc3Ryb2tlUGFpbnRlciA9IDA7CisJfQorfQorCisvLyBGaWxsIChha2EgQnVzaCkg
cHJvcGVydGllcworYm9vbCBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OmlzRmlsbGVkKCkgY29uc3QK
K3sKKwlyZXR1cm4gKG1fZmlsbFBhaW50ZXIgIT0gMCk7Cit9CisKK0tSZW5kZXJpbmdGaWxsUGFp
bnRlciAqS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpmaWxsUGFpbnRlcigpCit7CisJaWYoIW1fZmls
bFBhaW50ZXIpCisJCW1fZmlsbFBhaW50ZXIgPSBuZXcgS1JlbmRlcmluZ0ZpbGxQYWludGVyKCk7
CisJCisJcmV0dXJuIG1fZmlsbFBhaW50ZXI7Cit9CisKKy8vIERpc3BsYXkgc3RhdGVzCitib29s
IEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6dmlzaWJsZSgpIGNvbnN0Cit7CisJcmV0dXJuIChtX3N0
eWxlLT5kaXNwbGF5KCkgIT0gS0RPTTo6RFNfTk9ORSkgJiYKKwkJICAgKG1fc3R5bGUtPnZpc2li
aWxpdHkoKSA9PSBLRE9NOjpWU19WSVNJQkxFKTsKK30KKwordm9pZCBLQ2FudmFzUmVuZGVyaW5n
U3R5bGU6OnNldFZpc2libGUoYm9vbCkKK3sKKwkvLyBuby1vcAorfQorCisvLyBDb2xvciBpbnRl
cnBvbGF0aW9uCitLQ0NvbG9ySW50ZXJwb2xhdGlvbiBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OmNv
bG9ySW50ZXJwb2xhdGlvbigpIGNvbnN0Cit7CisJcmV0dXJuIEtDQ29sb3JJbnRlcnBvbGF0aW9u
KCk7Cit9CisKK3ZvaWQgS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpzZXRDb2xvckludGVycG9sYXRp
b24oS0NDb2xvckludGVycG9sYXRpb24pCit7CisJLy8gbm9wLW9wCit9CisKK0tDSW1hZ2VSZW5k
ZXJpbmcgS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjppbWFnZVJlbmRlcmluZygpIGNvbnN0Cit7CisJ
cmV0dXJuIChtX3N0eWxlLT5pbWFnZVJlbmRlcmluZygpID09IElSX09QVElNSVpFU1BFRUQpID8g
SVJfT1BUSU1JWkVfU1BFRUQgOiBJUl9PUFRJTUlaRV9RVUFMSVRZOworfQorCit2b2lkIEtDYW52
YXNSZW5kZXJpbmdTdHlsZTo6c2V0SW1hZ2VSZW5kZXJpbmcoS0NJbWFnZVJlbmRlcmluZykKK3sK
KwkvLyBuby1vcAorfQorCisvLyBPdmVyYWxsIG9wYWNpdHkKK2ludCBLQ2FudmFzUmVuZGVyaW5n
U3R5bGU6Om9wYWNpdHkoKSBjb25zdAoreworCXJldHVybiBpbnQobV9zdHlsZS0+b3BhY2l0eSgp
ICogMjU1Lik7Cit9CisKK3ZvaWQgS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpzZXRPcGFjaXR5KGlu
dCkKK3sKKwkvLyBuby1vcAorfQorCisvLyBDbGlwcGluZworUVN0cmluZ0xpc3QgS0NhbnZhc1Jl
bmRlcmluZ1N0eWxlOjpjbGlwUGF0aHMoKSBjb25zdAoreworCVFTdHJpbmcgY2xpcFBhdGhSZWYg
PSBtX3N0eWxlLT5jbGlwUGF0aCgpOworCWlmKCFjbGlwUGF0aFJlZi5pc0VtcHR5KCkgJiYgKG1f
Y2xpcFBhdGhzLmlzRW1wdHkoKSB8fCAobV9jbGlwUGF0aHMubGFzdCgpICE9IGNsaXBQYXRoUmVm
KSkgKQorCQltX2NsaXBQYXRocy5hcHBlbmQoY2xpcFBhdGhSZWYpOworCisJcmV0dXJuIG1fY2xp
cFBhdGhzOworfQorCit2b2lkIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6YWRkQ2xpcFBhdGgoY29u
c3QgUVN0cmluZyAmY2xpcFBhdGgpCit7CisJbV9jbGlwUGF0aHMuYXBwZW5kKGNsaXBQYXRoKTsK
K30KKwordm9pZCBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OnJlbW92ZUNsaXBQYXRocygpCit7CisJ
bV9jbGlwUGF0aHMuY2xlYXIoKTsKK30KKworLy8gTWFya2VycworS0NhbnZhc01hcmtlciAqS0Nh
bnZhc1JlbmRlcmluZ1N0eWxlOjpzdGFydE1hcmtlcigpIGNvbnN0Cit7CisJcmV0dXJuIHN0YXRp
Y19jYXN0PEtDYW52YXNNYXJrZXIgKj4obV9jYW52YXMtPnJlZ2lzdHJ5KCktPmdldFJlc291cmNl
QnlJZChtX3N0eWxlLT5zdGFydE1hcmtlcigpLm1pZCgxKSkpOworfQorCit2b2lkIEtDYW52YXNS
ZW5kZXJpbmdTdHlsZTo6c2V0U3RhcnRNYXJrZXIoS0NhbnZhc01hcmtlciAqKQoreworCS8vIG5v
LW9wCit9CisKK0tDYW52YXNNYXJrZXIgKktDYW52YXNSZW5kZXJpbmdTdHlsZTo6bWlkTWFya2Vy
KCkgY29uc3QKK3sKKwlyZXR1cm4gc3RhdGljX2Nhc3Q8S0NhbnZhc01hcmtlciAqPihtX2NhbnZh
cy0+cmVnaXN0cnkoKS0+Z2V0UmVzb3VyY2VCeUlkKG1fc3R5bGUtPm1pZE1hcmtlcigpLm1pZCgx
KSkpOworfQorCit2b2lkIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6c2V0TWlkTWFya2VyKEtDYW52
YXNNYXJrZXIgKikKK3sKK30KKworS0NhbnZhc01hcmtlciAqS0NhbnZhc1JlbmRlcmluZ1N0eWxl
OjplbmRNYXJrZXIoKSBjb25zdAoreworCXJldHVybiBzdGF0aWNfY2FzdDxLQ2FudmFzTWFya2Vy
ICo+KG1fY2FudmFzLT5yZWdpc3RyeSgpLT5nZXRSZXNvdXJjZUJ5SWQobV9zdHlsZS0+ZW5kTWFy
a2VyKCkubWlkKDEpKSk7Cit9CisKK3ZvaWQgS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpzZXRFbmRN
YXJrZXIoS0NhbnZhc01hcmtlciAqKQoreworCS8vIG5vLW9wCit9CisKK2Jvb2wgS0NhbnZhc1Jl
bmRlcmluZ1N0eWxlOjpoYXNNYXJrZXJzKCkgY29uc3QKK3sKKwlyZXR1cm4gIW1fc3R5bGUtPnN0
YXJ0TWFya2VyKCkuaXNFbXB0eSgpIHx8CisJCSAgICFtX3N0eWxlLT5taWRNYXJrZXIoKS5pc0Vt
cHR5KCkgfHwKKwkJICAgIW1fc3R5bGUtPmVuZE1hcmtlcigpLmlzRW1wdHkoKTsKK30KKworS0Nh
bnZhc0ZpbHRlciAqS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpmaWx0ZXIoKSBjb25zdAoreworCVFT
dHJpbmcgbG9va3VwID0gbV9zdHlsZS0+ZmlsdGVyKCkubWlkKDEpOworCWlmKGxvb2t1cC5pc0Vt
cHR5KCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIHN0YXRpY19jYXN0PEtDYW52YXNGaWx0ZXIg
Kj4obV9jYW52YXMtPnJlZ2lzdHJ5KCktPmdldFJlc291cmNlQnlJZChsb29rdXApKTsKK30KKwor
Ly8gdmltOnRzPTQ6bm9ldApJbmRleDogLi9rc3ZnMi9jb3JlL0tDYW52YXNSZW5kZXJpbmdTdHls
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IEtDYW52YXNSZW5kZXJpbmdTdHlsZS5oCmRpZmYgLU4g
Li9rc3ZnMi9jb3JlL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5oCi0tLSAuL2tzdmcyL2NvcmUvS0Nh
bnZhc1JlbmRlcmluZ1N0eWxlLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgLi9rc3Zn
Mi9jb3JlL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5oCTEwIEp1bCAyMDA1IDEwOjI1OjA5IC0wMDAw
CkBAIC0wLDAgKzEsMTE4IEBACisvKgorCUNvcHlyaWdodCAoQykgMjAwNCBOaWtvbGFzIFppbW1l
cm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKwkJCQkgIDIwMDQgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KKworCVRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAz
MzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaWZuZGVmIEtTVkdf
S0NhbnZhc1JlbmRlcmluZ1N0eWxlX0gKKyNkZWZpbmUgS1NWR19LQ2FudmFzUmVuZGVyaW5nU3R5
bGVfSAorCisjaW5jbHVkZSA8a2RvbS9jc3MvaW1wbC9DU1NQcmltaXRpdmVWYWx1ZUltcGwuaD4K
KworI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc01hdHJpeC5oPgorI2luY2x1ZGUgPGtjYW52YXMv
ZGV2aWNlL0tSZW5kZXJpbmdTdHlsZS5oPgorCituYW1lc3BhY2UgS1NWRworeworCWNsYXNzIFNW
R1JlbmRlclN0eWxlOworCWNsYXNzIEtDYW52YXNSZW5kZXJpbmdTdHlsZSA6IHB1YmxpYyBLUmVu
ZGVyaW5nU3R5bGUKKwl7CisJcHVibGljOgorCQlLQ2FudmFzUmVuZGVyaW5nU3R5bGUoS0NhbnZh
cyAqY2FudmFzLCBjb25zdCBTVkdSZW5kZXJTdHlsZSAqc3R5bGUpOworCQl2aXJ0dWFsIH5LQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUoKTsKKworCQl2b2lkIHVwZGF0ZUZpbGwoS0NhbnZhc0l0ZW0gKml0
ZW0pOworCQl2b2lkIHVwZGF0ZVN0cm9rZShLQ2FudmFzSXRlbSAqaXRlbSk7CisKKwkJdm9pZCB1
cGRhdGVTdHlsZShjb25zdCBTVkdSZW5kZXJTdHlsZSAqc3R5bGUsIEtDYW52YXNJdGVtICppdGVt
KTsKKworCQkvLyBXb3JsZCBtYXRyaXggcHJvcGVydHkKKwkJdmlydHVhbCBLQ2FudmFzTWF0cml4
IG9iamVjdE1hdHJpeCgpIGNvbnN0OworCQl2aXJ0dWFsIHZvaWQgc2V0T2JqZWN0TWF0cml4KGNv
bnN0IEtDYW52YXNNYXRyaXggJm9iamVjdE1hdHJpeCk7CisKKwkJLy8gU3Ryb2tlIChha2EgUGVu
KSBwcm9wZXJ0aWVzCisJCXZpcnR1YWwgYm9vbCBpc1N0cm9rZWQoKSBjb25zdDsKKworCQl2aXJ0
dWFsIEtSZW5kZXJpbmdTdHJva2VQYWludGVyICpzdHJva2VQYWludGVyKCk7CisJCXZpcnR1YWwg
dm9pZCBkaXNhYmxlU3Ryb2tlUGFpbnRlcigpOworCisJCWRvdWJsZSBjc3NQcmltaXRpdmVUb0xl
bmd0aChLQ2FudmFzSXRlbSAqaXRlbSwgS0RPTTo6Q1NTVmFsdWVJbXBsICp2YWx1ZSwgZG91Ymxl
IGRlZmF1bHRWYWx1ZSA9IDAuMCkgY29uc3Q7CisKKwkJLy8gRmlsbCAoYWthIEJydXNoKSBwcm9w
ZXJ0aWVzCisJCXZpcnR1YWwgYm9vbCBpc0ZpbGxlZCgpIGNvbnN0OworCisJCXZpcnR1YWwgS1Jl
bmRlcmluZ0ZpbGxQYWludGVyICpmaWxsUGFpbnRlcigpOworCQl2aXJ0dWFsIHZvaWQgZGlzYWJs
ZUZpbGxQYWludGVyKCk7CisKKwkJLy8gRGlzcGxheSBzdGF0ZXMKKwkJdmlydHVhbCBib29sIHZp
c2libGUoKSBjb25zdDsKKwkJdmlydHVhbCB2b2lkIHNldFZpc2libGUoYm9vbCB2aXNpYmxlKTsK
KworCQkvLyBDb2xvciBpbnRlcnBvbGF0aW9uCisJCXZpcnR1YWwgS0NDb2xvckludGVycG9sYXRp
b24gY29sb3JJbnRlcnBvbGF0aW9uKCkgY29uc3Q7CisJCXZpcnR1YWwgdm9pZCBzZXRDb2xvcklu
dGVycG9sYXRpb24oS0NDb2xvckludGVycG9sYXRpb24gaW50ZXJwb2xhdGlvbik7CisKKwkJLy8g
UXVhbGl0eSB2cy4gc3BlZWQgY29udHJvbAorCQl2aXJ0dWFsIEtDSW1hZ2VSZW5kZXJpbmcgaW1h
Z2VSZW5kZXJpbmcoKSBjb25zdDsKKwkJdmlydHVhbCB2b2lkIHNldEltYWdlUmVuZGVyaW5nKEtD
SW1hZ2VSZW5kZXJpbmcgaXIpOworCisJCS8vIE92ZXJhbGwgb3BhY2l0eQorCQl2aXJ0dWFsIGlu
dCBvcGFjaXR5KCkgY29uc3Q7CisJCXZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGludCk7CisKKwkJ
Ly8gQ2xpcHBpbmcKKwkJdmlydHVhbCBRU3RyaW5nTGlzdCBjbGlwUGF0aHMoKSBjb25zdDsKKwor
CQl2b2lkIGFkZENsaXBQYXRoKGNvbnN0IFFTdHJpbmcgJmNsaXBQYXRoKTsKKwkJdm9pZCByZW1v
dmVDbGlwUGF0aHMoKTsKKworCQkvLyBNYXJrZXJzCisJCXZpcnR1YWwgS0NhbnZhc01hcmtlciAq
c3RhcnRNYXJrZXIoKSBjb25zdDsKKwkJdmlydHVhbCB2b2lkIHNldFN0YXJ0TWFya2VyKEtDYW52
YXNNYXJrZXIgKm1hcmtlcik7CisKKwkJdmlydHVhbCBLQ2FudmFzTWFya2VyICptaWRNYXJrZXIo
KSBjb25zdDsKKwkJdmlydHVhbCB2b2lkIHNldE1pZE1hcmtlcihLQ2FudmFzTWFya2VyICptYXJr
ZXIpOworCisJCXZpcnR1YWwgS0NhbnZhc01hcmtlciAqZW5kTWFya2VyKCkgY29uc3Q7CisJCXZp
cnR1YWwgdm9pZCBzZXRFbmRNYXJrZXIoS0NhbnZhc01hcmtlciAqbWFya2VyKTsKKworCQl2aXJ0
dWFsIGJvb2wgaGFzTWFya2VycygpIGNvbnN0OworCisJCS8vIEZpbHRlciBzdXBwb3J0CisJCXZp
cnR1YWwgS0NhbnZhc0ZpbHRlciAqZmlsdGVyKCkgY29uc3Q7CisKKwlwcml2YXRlOgorCQlLQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUoY29uc3QgS0NhbnZhc1JlbmRlcmluZ1N0eWxlICZvdGhlcik7CisK
KwkJLy8gRGF0YQorCQlLQ2FudmFzTWF0cml4IG1fbWF0cml4OworCQltdXRhYmxlIFFTdHJpbmdM
aXN0IG1fY2xpcFBhdGhzOworCisJCWNvbnN0IFNWR1JlbmRlclN0eWxlICptX3N0eWxlOworCisJ
CS8vIEtDYW52YXMgc3R1ZmYKKwkJS0NhbnZhcyAqbV9jYW52YXM7CisJCUtSZW5kZXJpbmdGaWxs
UGFpbnRlciAqbV9maWxsUGFpbnRlcjsKKwkJS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIgKm1fc3Ry
b2tlUGFpbnRlcjsKKwl9OworfTsKKworI2VuZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6
IC4va3N2ZzIvY29yZS9LU1ZHRG9jdW1lbnRCdWlsZGVyLmNjCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IEtTVkdEb2N1bWVudEJ1aWxkZXIuY2MKZGlmZiAtTiAuL2tzdmcyL2NvcmUvS1NWR0RvY3VtZW50
QnVpbGRlci5jYwotLS0gLi9rc3ZnMi9jb3JlL0tTVkdEb2N1bWVudEJ1aWxkZXIuY2MJMSBKYW4g
MTk3MCAwMDowMDowMCAtMDAwMAorKysgLi9rc3ZnMi9jb3JlL0tTVkdEb2N1bWVudEJ1aWxkZXIu
Y2MJMTAgSnVsIDIwMDUgMTA6MjU6MDkgLTAwMDAKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgICAg
Q29weXJpZ2h0IChDKSAyMDA0IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgor
CQkJCSAgMjAwNCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorCisgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCisqLworCisjaW5jbHVkZSA8a3VybC5oPgorCisjaW5jbHVkZSA8a2Rv
bS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPGtkb20vRG9jdW1lbnRUeXBlLmg+CisjaW5jbHVkZSA8
a2RvbS9IZWxwZXIuaD4KKyNpbmNsdWRlIDxrZG9tL05hbWVzcGFjZS5oPgorCisjaW5jbHVkZSA8
a2NhbnZhcy9LQ2FudmFzVmlldy5oPgorCisjaW5jbHVkZSAia3N2Zy5oIgorI2luY2x1ZGUgInN2
Z3RhZ3MuaCIKKyNpbmNsdWRlIDxrc3ZnMi9LU1ZHVmlldy5oPgorI2luY2x1ZGUgIlNWR0RvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHU1ZHRWxl
bWVudEltcGwuaCIKKyNpbmNsdWRlICJLU1ZHRG9jdW1lbnRCdWlsZGVyLmgiCisjaW5jbHVkZSAi
U1ZHRE9NSW1wbGVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJTVkdET01JbXBsZW1lbnRhdGlvbklt
cGwuaCIKKwordXNpbmcgbmFtZXNwYWNlIEtTVkc7CisKK0RvY3VtZW50QnVpbGRlcjo6RG9jdW1l
bnRCdWlsZGVyKEtTVkdWaWV3ICp2aWV3KSA6IEtET006OkRvY3VtZW50QnVpbGRlcigpCit7CisJ
bV92aWV3ID0gdmlldzsKK30KKworRG9jdW1lbnRCdWlsZGVyOjp+RG9jdW1lbnRCdWlsZGVyKCkK
K3sKK30KKworYm9vbCBEb2N1bWVudEJ1aWxkZXI6OnN0YXJ0RG9jdW1lbnQoY29uc3QgS1VSTCAm
dXJpKQoreworCWtkRGVidWcoMjYwMDEpIDw8ICJLU1ZHOjpEb2N1bWVudEJ1aWxkZXI6OnN0YXJ0
RG9jdW1lbnQsIHVyaSA9ICIgPDwgdXJpLnByZXR0eVVSTCgpIDw8IGVuZGw7CisKKwlTVkdET01J
bXBsZW1lbnRhdGlvbkltcGwgKmZhY3RvcnkgPSBTVkdET01JbXBsZW1lbnRhdGlvbkltcGw6OnNl
bGYoKTsKKwlTVkdEb2N1bWVudEltcGwgKmRvY0ltcGwgPSBzdGF0aWNfY2FzdDxTVkdEb2N1bWVu
dEltcGwgKj4oZmFjdG9yeS0+Y3JlYXRlRG9jdW1lbnQoS0RPTTo6TlNfU1ZHLCAic3ZnOnN2ZyIs
CisJCQkJCQkJCQkJCQkJCQkgIGZhY3RvcnktPmRlZmF1bHREb2N1bWVudFR5cGUoKSwgZmFsc2Us
IG1fdmlldykpOworCisJaWYoIWRvY0ltcGwpCisJCXJldHVybiBmYWxzZTsKKworCURvY3VtZW50
QnVpbGRlcjo6bGlua0RvY3VtZW50VG9DYW52YXMoZG9jSW1wbCwgbV92aWV3KTsKKworCXNldERv
Y3VtZW50KGRvY0ltcGwpOyAvLyBSZWdpc3RlciBpbiBrZG9tLi4uCisJcmV0dXJuIEtET006OkRv
Y3VtZW50QnVpbGRlcjo6c3RhcnREb2N1bWVudCh1cmkpOworfQorCit2b2lkIERvY3VtZW50QnVp
bGRlcjo6bGlua0RvY3VtZW50VG9DYW52YXMoY29uc3QgU1ZHRG9jdW1lbnQgJmRvYywgS1NWR1Zp
ZXcgKnZpZXcpCit7CisJU1ZHRG9jdW1lbnRJbXBsICpkb2NJbXBsID0gc3RhdGljX2Nhc3Q8U1ZH
RG9jdW1lbnRJbXBsICo+KGRvYy5oYW5kbGUoKSk7CisJaWYoIWRvY0ltcGwpCisJCXJldHVybjsK
KworCURvY3VtZW50QnVpbGRlcjo6bGlua0RvY3VtZW50VG9DYW52YXMoZG9jSW1wbCwgdmlldyk7
Cit9CisKK3ZvaWQgRG9jdW1lbnRCdWlsZGVyOjpsaW5rRG9jdW1lbnRUb0NhbnZhcyhTVkdEb2N1
bWVudEltcGwgKmRvY0ltcGwsIEtTVkdWaWV3ICp2aWV3KQoreworCWRvY0ltcGwtPnJlZigpOwor
CisJZG9jSW1wbC0+c2V0Q2FudmFzVmlldygodmlldyA/IHZpZXctPmNhbnZhc1ZpZXcoKSA6IDAp
KTsKKwlkb2NJbXBsLT5hdHRhY2goKTsKK30KKwordm9pZCBEb2N1bWVudEJ1aWxkZXI6OmZpbmlz
aGVkRG9jdW1lbnQoY29uc3QgU1ZHRG9jdW1lbnQgJmRvYykKK3sKKwlTVkdEb2N1bWVudEltcGwg
KmRvY0ltcGwgPSBzdGF0aWNfY2FzdDxTVkdEb2N1bWVudEltcGwgKj4oZG9jLmhhbmRsZSgpKTsK
KworCWlmKGRvY0ltcGwpCisJCWRvY0ltcGwtPmZpbmlzaGVkUGFyc2luZygpOworfQorCitib29s
IERvY3VtZW50QnVpbGRlcjo6ZW5kRG9jdW1lbnQoKQoreworCWtkRGVidWcoMjYwMDEpIDw8ICJL
U1ZHOjpEb2N1bWVudEJ1aWxkZXI6OmVuZERvY3VtZW50IiA8PCBlbmRsOworCisJS0RPTTo6RG9j
dW1lbnRCdWlsZGVyOjplbmREb2N1bWVudCgpOworCURvY3VtZW50QnVpbGRlcjo6ZmluaXNoZWRE
b2N1bWVudChkb2N1bWVudCgpKTsKKworCXJldHVybiB0cnVlOworfQorCisvLyB2aW06dHM9NDpu
b2V0CkluZGV4OiAuL2tzdmcyL2NvcmUvS1NWR0RvY3VtZW50QnVpbGRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IEtTVkdEb2N1bWVudEJ1aWxkZXIuaApkaWZmIC1OIC4va3N2ZzIvY29yZS9LU1ZH
RG9jdW1lbnRCdWlsZGVyLmgKLS0tIC4va3N2ZzIvY29yZS9LU1ZHRG9jdW1lbnRCdWlsZGVyLmgJ
MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgLi9rc3ZnMi9jb3JlL0tTVkdEb2N1bWVudEJ1
aWxkZXIuaAkxMCBKdWwgMjAwNSAxMDoyNTowOSAtMDAwMApAQCAtMCwwICsxLDY0IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwNCBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9y
Zz4KKwkJCQkgIDIwMDQgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKworICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKworI2lmbmRlZiBLU1ZHX0RvY3VtZW50QnVpbGRlcl9I
CisjZGVmaW5lIEtTVkdfRG9jdW1lbnRCdWlsZGVyX0gKKworI2luY2x1ZGUgPGtzdmcyL0tTVkdW
aWV3Lmg+CisKKyNpbmNsdWRlIDxrZG9tL3BhcnNlci9LRE9NRG9jdW1lbnRCdWlsZGVyLmg+CisK
K2NsYXNzIEtVUkw7CisKK25hbWVzcGFjZSBLU1ZHCit7CisJY2xhc3MgU1ZHRG9jdW1lbnQ7CisJ
Y2xhc3MgU1ZHRG9jdW1lbnRJbXBsOworCisJLy8gS1NWRyBEb2N1bWVudCBidWlsZGVyIAorCWNs
YXNzIERvY3VtZW50QnVpbGRlciA6IHB1YmxpYyBLRE9NOjpEb2N1bWVudEJ1aWxkZXIKKwl7CisJ
cHVibGljOgorCQlEb2N1bWVudEJ1aWxkZXIoS1NWR1ZpZXcgKnZpZXcpOworCQl2aXJ0dWFsIH5E
b2N1bWVudEJ1aWxkZXIoKTsKKworCQkvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGluLW1lbW9yeSBj
cmVhdGVkIGRvY3VtZW50cy4KKwkJLy8gVXNlIHRoaXMgZnVuY3Rpb24gdG8gbGluayBhIG5ld2x5
IGNyZWF0ZWQgJ0tET006OkRvY3VtZW50JworCQkvLyB3aXRoIHRoZSBwYXNzZWQgJ0tDYW52YXMn
LCBhbmQgdGhlIG90aGVyIGZvciBpbmRpY2F0ZSB0aGF0CisJCS8vIHlvdSBhcmUgZG9uZSBjcmVh
dGluZyB5b3VyIHRyZWUgKGludm9rZXMgcmVuZGVyaW5nIGluIG5vbi1wcm9nci4gbW9kZSkKKwkJ
c3RhdGljIHZvaWQgbGlua0RvY3VtZW50VG9DYW52YXMoY29uc3QgU1ZHRG9jdW1lbnQgJmRvYywg
S1NWR1ZpZXcgKnZpZXcpOworCQlzdGF0aWMgdm9pZCBsaW5rRG9jdW1lbnRUb0NhbnZhcyhTVkdE
b2N1bWVudEltcGwgKmRvY0ltcGwsIEtTVkdWaWV3ICp2aWV3KTsKKworCQlzdGF0aWMgdm9pZCBm
aW5pc2hlZERvY3VtZW50KGNvbnN0IFNWR0RvY3VtZW50ICZkb2MpOworCisJcHJvdGVjdGVkOgor
CQl2aXJ0dWFsIGJvb2wgc3RhcnREb2N1bWVudChjb25zdCBLVVJMICZ1cmkpOworCQl2aXJ0dWFs
IGJvb2wgZW5kRG9jdW1lbnQoKTsKKworCXByaXZhdGU6CisJCUtTVkdWaWV3ICptX3ZpZXc7CisJ
fTsKK307CisKKyNlbmRpZgorCisvLyB2aW06dHM9NDpub2V0CkluZGV4OiAuL2tzdmcyL2NvcmUv
S1NWR1RpbWVTY2hlZHVsZXIuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogS1NWR1RpbWVTY2hlZHVs
ZXIuY2MKZGlmZiAtTiAuL2tzdmcyL2NvcmUvS1NWR1RpbWVTY2hlZHVsZXIuY2MKLS0tIC4va3N2
ZzIvY29yZS9LU1ZHVGltZVNjaGVkdWxlci5jYwkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisr
KyAuL2tzdmcyL2NvcmUvS1NWR1RpbWVTY2hlZHVsZXIuY2MJMTAgSnVsIDIwMDUgMTA6MjU6MDkg
LTAwMDAKQEAgLTAsMCArMSw1MzggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0IE5pa29s
YXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorCQkJCSAgMjAwNCBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLworCisj
aW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzLmg+CisKKyNpbmNsdWRlICJTVkdNYXRyaXhJbXBsLmgi
CisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiS1NWR1RpbWVTY2hlZHVs
ZXIubW9jIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybWFibGVJbXBsLmgiCisjaW5jbHVkZSAiU1ZH
U3R5bGVkRWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdET01JbXBsZW1lbnRhdGlvbkltcGwu
aCIKKyNpbmNsdWRlICJTVkdBbmltYXRlQ29sb3JFbGVtZW50SW1wbC5oIgorI2luY2x1ZGUgIlNW
R0FuaW1hdGVkVHJhbnNmb3JtTGlzdEltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudEltcGwuaCIKKworI2lmZGVmIEFQUExFX0NIQU5HRVMKKyNpbmNsdWRlICJrc3Zn
Mi9LU1ZHU2xvdFN0dWJzLmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIEtTVkc7CisKK1NW
R1RpbWVyOjpTVkdUaW1lcihUaW1lU2NoZWR1bGVyICpzY2hlZHVsZXIsIHVuc2lnbmVkIGludCBt
cywgYm9vbCBzaW5nbGVTaG90KQoreworCW1fbXMgPSBtczsKKwltX3NjaGVkdWxlciA9IHNjaGVk
dWxlcjsKKwltX3NpbmdsZVNob3QgPSBzaW5nbGVTaG90OworCQorCW1fdGltZXIgPSBuZXcgUVRp
bWVyKHNjaGVkdWxlcik7Cit9CisKK1NWR1RpbWVyOjp+U1ZHVGltZXIoKQoreworCWRlbGV0ZSBt
X3RpbWVyOworfQorCitib29sIFNWR1RpbWVyOjpvcGVyYXRvcj09KGNvbnN0IFFUaW1lciAqdGlt
ZXIpCit7CisJcmV0dXJuIChtX3RpbWVyID09IHRpbWVyKTsKK30KKworY29uc3QgUVRpbWVyICpT
VkdUaW1lcjo6cXRpbWVyKCkgY29uc3QKK3sKKwlyZXR1cm4gbV90aW1lcjsKK30KKwordm9pZCBT
VkdUaW1lcjo6c3RhcnQoUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1lbWJlcikKK3sK
KyNpZmRlZiBBUFBMRV9DSEFOR0VTCisJS1NWR1Nsb3RTdHViICpzdHViID0gZHluYW1pY19jYXN0
PFRpbWVTY2hlZHVsZXIgKj4ocmVjZWl2ZXIpLT5zbG90U3R1YigpOworCVFPYmplY3Q6OmNvbm5l
Y3QobV90aW1lciwgU0lHTkFMKHRpbWVvdXQoKSksIHN0dWIsIG1lbWJlcik7CisjZWxzZQorCVFP
YmplY3Q6OmNvbm5lY3QobV90aW1lciwgU0lHTkFMKHRpbWVvdXQoKSksIHJlY2VpdmVyLCBtZW1i
ZXIpOworI2VuZGlmCisJbV90aW1lci0+c3RhcnQobV9tcywgbV9zaW5nbGVTaG90KTsKK30KKwor
dm9pZCBTVkdUaW1lcjo6c3RvcCgpCit7CisJbV90aW1lci0+c3RvcCgpOworfQorCitib29sIFNW
R1RpbWVyOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisJcmV0dXJuIG1fdGltZXItPmlzQWN0aXZlKCk7
Cit9CisKK3Vuc2lnbmVkIGludCBTVkdUaW1lcjo6bXMoKSBjb25zdAoreworCXJldHVybiBtX21z
OworfQorCitib29sIFNWR1RpbWVyOjpzaW5nbGVTaG90KCkgY29uc3QKK3sKKwlyZXR1cm4gbV9z
aW5nbGVTaG90OworfQorCQkKK2RvdWJsZSBTVkdUaW1lcjo6Y2FsY3VsYXRlVGltZVBlcmNlbnRh
Z2UoZG91YmxlIGVsYXBzZWQsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgZG91YmxlIGR1cmF0
aW9uLCBkb3VibGUgcmVwZWF0aW9ucykKK3sKKwlkb3VibGUgcGVyY2VudGFnZSA9IDAuMDsKKwor
CS8vIFRha2UgaW50byBhY2NvdW50IHJlcGVhdGlvbnMuLi4KKwlkb3VibGUgdXNlRWxhcHNlZCA9
IGVsYXBzZWQgLSAoZHVyYXRpb24gKiByZXBlYXRpb25zKTsKKwkKKwlpZihkdXJhdGlvbiA+IDAu
MCAmJiBlbmQgPT0gMC4wKQorCQlwZXJjZW50YWdlID0gMS4wIC0gKCgoc3RhcnQgKyBkdXJhdGlv
bikgLSB1c2VFbGFwc2VkKSAvIGR1cmF0aW9uKTsKKwllbHNlIGlmKGR1cmF0aW9uID4gMC4wICYm
IGVuZCAhPSAwLjApCisJeworCQlpZihkdXJhdGlvbiA+IGVuZCkKKwkJCXBlcmNlbnRhZ2UgPSAx
LjAgLSAoKChzdGFydCArIGVuZCkgLSB1c2VFbGFwc2VkKSAvIGVuZCk7CisJCWVsc2UKKwkJCXBl
cmNlbnRhZ2UgPSAxLjAgLSAoKChzdGFydCArIGR1cmF0aW9uKSAtIHVzZUVsYXBzZWQpIC8gZHVy
YXRpb24pOworCX0KKwllbHNlIGlmKGR1cmF0aW9uID09IDAuMCAmJiBlbmQgIT0gMC4wKQorCQlw
ZXJjZW50YWdlID0gMS4wIC0gKCgoc3RhcnQgKyBlbmQpIC0gdXNlRWxhcHNlZCkgLyBlbmQpOwor
CisJLy8ga2REZWJ1ZygpIDw8ICJSRVRVUk5JTkcgUEVSQ0VOVEFHRTogIiA8PCBwZXJjZW50YWdl
IDw8ICIgKGVsYXBzZWQ6ICIgPDwgZWxhcHNlZCA8PCAiIC0+ICIgPDwgdXNlRWxhcHNlZCA8PCAi
IHN0YXJ0OiAiIDw8IHN0YXJ0IDw8ICIgZW5kOiAiIDw8IGVuZCA8PCAiIGR1cjogIiA8PCBkdXJh
dGlvbiA8PCAiIHJlcDogIiA8PCByZXBlYXRpb25zIDw8ICIpIiA8PCBlbmRsOworCXJldHVybiBw
ZXJjZW50YWdlOworfQorCit2b2lkIFNWR1RpbWVyOjpub3RpZnlBbGwoKQoreworCWJvb2wgc3Rp
bGxSdW5uaW5nID0gZmFsc2U7CisJZm9yKHVuc2lnbmVkIGludCBpID0gbV9ub3RpZnlMaXN0LmNv
dW50KCk7IGkgPiAwOyBpLS0pCisJeworCQlTVkdOb3RpZmljYXRpb25TdHJ1Y3Qgbm90aWZ5U3Ry
dWN0ID0gbV9ub3RpZnlMaXN0W2kgLSAxXTsKKworCQlpZihub3RpZnlTdHJ1Y3QuZW5hYmxlZCkK
KwkJeworCQkJc3RpbGxSdW5uaW5nID0gdHJ1ZTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJ
aWYoIXN0aWxsUnVubmluZykKKwkJcmV0dXJuOworCisJZG91YmxlIGVsYXBzZWQgPSBtX3NjaGVk
dWxlci0+ZWxhcHNlZCgpICogMTAwMC4wOyAvLyBUYWtlIHRpbWUgbm93Li4uCisKKwkvLyBGaXJz
dCBidWlsZCBhIGxpc3Qgb2YgYW5pbWF0aW9uIGVsZW1lbnRzIHBlciB0YXJnZXQgZWxlbWVudAor
CS8vIFRoaXMgaXMgaW1wb3J0YW50IHRvIGRlY2lkZSBhYm91dCB0aGUgb3JkZXIgJiBwcmlvcml0
eSBvZiAKKwkvLyB0aGUgYW5pbWF0aW9ucyAtPiAnYWRkaXRpdmUnIHN1cHBvcnQgaXMgaGFuZGxl
ZCB0aGlzIHdheS4KKwl0eXBlZGVmIFFNYXA8U1ZHRWxlbWVudEltcGwgKiwgUVB0ckxpc3Q8U1ZH
QW5pbWF0aW9uRWxlbWVudEltcGw+ID4gVGFyZ2V0QW5pbWF0aW9uTWFwOworCVRhcmdldEFuaW1h
dGlvbk1hcCB0YXJnZXRNYXA7CisJCisJZm9yKHVuc2lnbmVkIGludCBpID0gbV9ub3RpZnlMaXN0
LmNvdW50KCk7IGkgPiAwOyBpLS0pCisJeworCQlTVkdOb3RpZmljYXRpb25TdHJ1Y3Qgbm90aWZ5
U3RydWN0ID0gbV9ub3RpZnlMaXN0W2kgLSAxXTsKKworCQlpZighbm90aWZ5U3RydWN0LmFuaW1h
dGlvbikKKwkJCWNvbnRpbnVlOworCisJCVNWR0FuaW1hdGlvbkVsZW1lbnRJbXBsICphbmltYXRp
b24gPSBub3RpZnlTdHJ1Y3QuYW5pbWF0aW9uOworCisJCS8vIElmIHdlJ3JlIGRlYWxpbmcgd2l0
aCBhIGRpc2FibGVkIGVsZW1lbnQgd2l0aCBmaWxsPSJmcmVlemUiLAorCQkvLyB3ZSBoYXZlIHRv
IHRha2UgaXQgaW50byBhY2NvdW50IGZvciBmdXJ0aGVyIGNhbGN1bGF0aW9ucy4uLiAKKwkJaWYo
IW5vdGlmeVN0cnVjdC5lbmFibGVkKQorCQl7CisJCQlpZihhbmltYXRpb24tPmlzRnJvemVuKCkp
CisJCQl7CisJCQkJaWYoZWxhcHNlZCA8PSAoYW5pbWF0aW9uLT5zdGFydFRpbWUoKSArIGFuaW1h
dGlvbi0+c2ltcGxlRHVyYXRpb24oKSkpCisJCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZWxzZQor
CQkJCWNvbnRpbnVlOworCQl9CisKKwkJU1ZHRWxlbWVudEltcGwgKnRhcmdldCA9IGNvbnN0X2Nh
c3Q8U1ZHRWxlbWVudEltcGwgKj4oYW5pbWF0aW9uLT50YXJnZXRFbGVtZW50KCkpOworCQlpZigh
dGFyZ2V0TWFwLmNvbnRhaW5zKHRhcmdldCkpCisJCXsKKwkJCVFQdHJMaXN0PFNWR0FuaW1hdGlv
bkVsZW1lbnRJbXBsPiBsaXN0OworCQkJbGlzdC5hcHBlbmQoYW5pbWF0aW9uKTsKKwkJCQkKKwkJ
CXRhcmdldE1hcC5pbnNlcnQodGFyZ2V0LCBsaXN0KTsKKwkJfQorCQllbHNlCisJCQl0YXJnZXRN
YXBbdGFyZ2V0XS5wcmVwZW5kKGFuaW1hdGlvbik7CisJfQorCisJVGFyZ2V0QW5pbWF0aW9uTWFw
OjpJdGVyYXRvciB0aXQgPSB0YXJnZXRNYXAuYmVnaW4oKTsKKwlUYXJnZXRBbmltYXRpb25NYXA6
Okl0ZXJhdG9yIHRlbmQgPSB0YXJnZXRNYXAuZW5kKCk7CisKKwlmb3IoOyB0aXQgIT0gdGVuZDsg
Kyt0aXQpCisJeworCQlRUHRyTGlzdDxTVkdBbmltYXRpb25FbGVtZW50SW1wbD46Okl0ZXJhdG9y
IGl0ID0gdGl0LmRhdGEoKS5iZWdpbigpOworCQlRUHRyTGlzdDxTVkdBbmltYXRpb25FbGVtZW50
SW1wbD46Okl0ZXJhdG9yIGVuZCA9IHRpdC5kYXRhKCkuZW5kKCk7CisKKwkJUU1hcDxRU3RyaW5n
LCBRQ29sb3I+IHRhcmdldENvbG9yOyAvLyBzcGVjaWFsIDxhbmltYXRlQ29sb3I+IGNhc2UKKwkJ
U1ZHVHJhbnNmb3JtTGlzdEltcGwgKnRhcmdldFRyYW5zZm9ybXMgPSAwOyAvLyBzcGVjaWFsIDxh
bmltYXRlVHJhbnNmb3JtPiBjYXNlCQorCQlmb3IoOyBpdCAhPSBlbmQ7ICsraXQpCisJCXsKKwkJ
CVNWR0FuaW1hdGlvbkVsZW1lbnRJbXBsICphbmltYXRpb24gPSAoKml0KTsKKworCQkJZG91Ymxl
IGVuZCA9IGFuaW1hdGlvbi0+ZW5kVGltZSgpOworCQkJZG91YmxlIHN0YXJ0ID0gYW5pbWF0aW9u
LT5zdGFydFRpbWUoKTsKKwkJCWRvdWJsZSBkdXJhdGlvbiA9IGFuaW1hdGlvbi0+c2ltcGxlRHVy
YXRpb24oKTsKKwkJCWRvdWJsZSByZXBlYXRpb25zID0gYW5pbWF0aW9uLT5yZXBlYXRpb25zKCk7
CisKKwkJCS8vIFZhbGlkYXRlIGFuaW1hdGlvbiB0aW1pbmcgc2V0dGluZ3M6CisJCQkvLyAjMSAo
ZHVyYXRpb24gPiAwKSAtPiBmaW5lCisJCQkvLyAjMiAoZHVyYXRpb24gPD0gMC4wICYmIGVuZCA+
IDApIC0+IGZpbmUKKwkJCQorCQkJaWYoKGR1cmF0aW9uIDw9IDAuMCAmJiBlbmQgPD0gMC4wKSB8
fAorCQkJICAgKGFuaW1hdGlvbi0+aXNJbmRlZmluaXRlKGR1cmF0aW9uKSAmJiBlbmQgPD0gMC4w
KSkgLy8gSWdub3JlIGR1cj0iMCIgb3IgZHVyPSItbmVnIi4uLgorCQkJCWNvbnRpbnVlOworCQkJ
CisJCQlmbG9hdCBwZXJjZW50YWdlID0gY2FsY3VsYXRlVGltZVBlcmNlbnRhZ2UoZWxhcHNlZCwg
c3RhcnQsIGVuZCwgZHVyYXRpb24sIHJlcGVhdGlvbnMpOworCQkJCQorCQkJaWYocGVyY2VudGFn
ZSA8PSAxLjAgfHwgYW5pbWF0aW9uLT5jb25uZWN0ZWQoKSkKKwkJCQlhbmltYXRpb24tPmhhbmRs
ZVRpbWVyRXZlbnQocGVyY2VudGFnZSk7CisKKwkJCS8vIFNwZWNpYWwgY2FzZXMgZm9yIGFuaW1h
dGUqIG9iamVjdHMgZGVwZW5kaW5nIG9uICdhZGRpdGl2ZScgYXR0cmlidXRlCisJCQlpZihhbmlt
YXRpb24tPmlkKCkgPT0gSURfQU5JTUFURVRSQU5TRk9STSkKKwkJCXsKKwkJCQlTVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudEltcGwgKmFuaW1UcmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudEltcGwgKj4oYW5pbWF0aW9uKTsKKwkJCQlpZighYW5pbVRyYW5z
Zm9ybSkKKwkJCQkJY29udGludWU7CisKKwkJCQlTVkdNYXRyaXhJbXBsICp0cmFuc2Zvcm1NYXRy
aXggPSBhbmltVHJhbnNmb3JtLT50cmFuc2Zvcm1NYXRyaXgoKTsKKwkJCQlpZighdHJhbnNmb3Jt
TWF0cml4KQorCQkJCQljb250aW51ZTsKKworCQkJCVNWR01hdHJpeEltcGwgKmluaXRpYWxNYXRy
aXggPSBhbmltVHJhbnNmb3JtLT5pbml0aWFsTWF0cml4KCk7CisJCisJCQkJaWYoaW5pdGlhbE1h
dHJpeCkKKwkJCQkJaW5pdGlhbE1hdHJpeC0+cmVmKCk7CisJCQkKKwkJCQl0cmFuc2Zvcm1NYXRy
aXgtPnJlZigpOworCQorCQkJCVNWR1RyYW5zZm9ybUltcGwgKmRhdGEgPSBuZXcgU1ZHVHJhbnNm
b3JtSW1wbCgpOworCQkJCWRhdGEtPnJlZigpOworCisJCQkJaWYoIXRhcmdldFRyYW5zZm9ybXMp
IC8vIGxhenkgY3JlYXRpb24sIG9ubHkgaWYgbmVlZGVkLgorCQkJCXsKKwkJCQkJdGFyZ2V0VHJh
bnNmb3JtcyA9IG5ldyBTVkdUcmFuc2Zvcm1MaXN0SW1wbCgpOworCQkJCQl0YXJnZXRUcmFuc2Zv
cm1zLT5yZWYoKTsKKworCQkJCQlpZihhbmltYXRpb24tPmlzQWRkaXRpdmUoKSAmJiBpbml0aWFs
TWF0cml4KQorCQkJCQl7CisJCQkJCQlTVkdNYXRyaXhJbXBsICptYXRyaXggPSBuZXcgU1ZHTWF0
cml4SW1wbChpbml0aWFsTWF0cml4LT5xbWF0cml4KCkpOworCQkJCQkJbWF0cml4LT5yZWYoKTsK
KworCQkJCQkJZGF0YS0+c2V0TWF0cml4KG1hdHJpeCk7CisJCQkJCQl0YXJnZXRUcmFuc2Zvcm1z
LT5hcHBlbmRJdGVtKGRhdGEpOworCisJCQkJCQlkYXRhID0gbmV3IFNWR1RyYW5zZm9ybUltcGwo
KTsKKwkJCQkJCWRhdGEtPnJlZigpOworCQkJCQl9CisJCQkJfQorCisJCQkJaWYodGFyZ2V0VHJh
bnNmb3Jtcy0+bnVtYmVyT2ZJdGVtcygpIDw9IDEpCisJCQkJCWRhdGEtPnNldE1hdHJpeCh0cmFu
c2Zvcm1NYXRyaXgpOworCQkJCWVsc2UKKwkJCQl7CisJCQkJCWlmKCFhbmltYXRpb24tPmlzQWRk
aXRpdmUoKSkKKwkJCQkJCXRhcmdldFRyYW5zZm9ybXMtPmNsZWFyKCk7CQorCQkJCQkKKwkJCQkJ
ZGF0YS0+c2V0TWF0cml4KHRyYW5zZm9ybU1hdHJpeCk7CisJCQkJfQorCisJCQkJdGFyZ2V0VHJh
bnNmb3Jtcy0+YXBwZW5kSXRlbShkYXRhKTsKKworCQkJCWlmKGluaXRpYWxNYXRyaXgpCisJCQkJ
CWluaXRpYWxNYXRyaXgtPmRlcmVmKCk7CisKKwkJCQl0cmFuc2Zvcm1NYXRyaXgtPmRlcmVmKCk7
CisJCQl9CisJCQllbHNlIGlmKGFuaW1hdGlvbi0+aWQoKSA9PSBJRF9BTklNQVRFQ09MT1IpCisJ
CQl7CisJCQkJU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudEltcGwgKmFuaW1Db2xvciA9IHN0YXRpY19j
YXN0PFNWR0FuaW1hdGVDb2xvckVsZW1lbnRJbXBsICo+KGFuaW1hdGlvbik7CisJCQkJaWYoIWFu
aW1Db2xvcikKKwkJCQkJY29udGludWU7CisKKwkJCQlRU3RyaW5nIG5hbWUgPSBhbmltQ29sb3It
PmF0dHJpYnV0ZU5hbWUoKTsKKwkJCQlRQ29sb3IgY29sb3IgPSBhbmltQ29sb3ItPmNvbG9yKCk7
CisKKwkJCQlpZighdGFyZ2V0Q29sb3IuY29udGFpbnMobmFtZSkpCisJCQkJeworCQkJCQlpZihh
bmltYXRpb24tPmlzQWRkaXRpdmUoKSkKKwkJCQkJeworCQkJCQkJaW50IHIgPSBhbmltQ29sb3It
PmluaXRpYWxDb2xvcigpLnJlZCgpICsgY29sb3IucmVkKCk7CisJCQkJCQlpbnQgZyA9IGFuaW1D
b2xvci0+aW5pdGlhbENvbG9yKCkuZ3JlZW4oKSArIGNvbG9yLmdyZWVuKCk7CisJCQkJCQlpbnQg
YiA9IGFuaW1Db2xvci0+aW5pdGlhbENvbG9yKCkuYmx1ZSgpICsgY29sb3IuYmx1ZSgpOworCQkJ
CQkKKwkJCQkJCXRhcmdldENvbG9yLmluc2VydChuYW1lLCBhbmltQ29sb3ItPmNsYW1wQ29sb3Io
ciwgZywgYikpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJCXRhcmdldENvbG9yLmluc2VydChu
YW1lLCBjb2xvcik7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWlmKCFhbmltYXRpb24t
PmlzQWRkaXRpdmUoKSkKKwkJCQkJCXRhcmdldENvbG9yW25hbWVdID0gY29sb3I7CisJCQkJCWVs
c2UKKwkJCQkJeworCQkJCQkJaW50IHIgPSB0YXJnZXRDb2xvcltuYW1lXS5yZWQoKSArIGNvbG9y
LnJlZCgpOworCQkJCQkJaW50IGcgPSB0YXJnZXRDb2xvcltuYW1lXS5ncmVlbigpICsgY29sb3Iu
Z3JlZW4oKTsKKwkJCQkJCWludCBiID0gdGFyZ2V0Q29sb3JbbmFtZV0uYmx1ZSgpICsgY29sb3Iu
Ymx1ZSgpOworCisJCQkJCQl0YXJnZXRDb2xvcltuYW1lXSA9IGFuaW1Db2xvci0+Y2xhbXBDb2xv
cihyLCBnLCBiKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCS8vIEhhbmRsZSA8YW5p
bWF0ZVRyYW5zZm9ybT4uLi4KKwkJaWYodGFyZ2V0VHJhbnNmb3JtcykKKwkJeworCQkJU1ZHU3R5
bGVkRWxlbWVudEltcGwgKnN0eWxlZCA9IGR5bmFtaWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50SW1w
bCAqPih0aXQua2V5KCkpOworCQkJU1ZHVHJhbnNmb3JtYWJsZUltcGwgKnRyYW5zZm9ybSA9IGR5
bmFtaWNfY2FzdDxTVkdUcmFuc2Zvcm1hYmxlSW1wbCAqPih0aXQua2V5KCkpOworCisJCQlpZihz
dHlsZWQgJiYgdHJhbnNmb3JtKQorCQkJeworCQkJCXRyYW5zZm9ybS0+dHJhbnNmb3JtKCktPnNl
dEFuaW1WYWwodGFyZ2V0VHJhbnNmb3Jtcyk7CisKKwkJCQkvLyBTd2l0Y2ggdG8gbmV3bHkgY3Jl
YXRlZCBiYXNlVmFsLi4uCisJCQkJdHJhbnNmb3JtLT51cGRhdGVMb2NhbFRyYW5zZm9ybSh0cmFu
c2Zvcm0tPnRyYW5zZm9ybSgpLT5hbmltVmFsKCkpOworCisJCQkJLy8gLi4uIHVwZGF0ZSBlbGVt
ZW50ICYgY2hpbGQgZWxlbWVudHMgLi4uCisJCQkJdHJhbnNmb3JtLT51cGRhdGVTdWJ0cmVlTWF0
cmljZXMoc3R5bGVkKTsKKworCQkJCS8vIC4uLiBhbmQgc3dpdGNoIGJhY2sgdG8gYmFzZVZhbCAo
YW5kIGRvIG5vdCB1cGRhdGUhKQorCQkJCXRyYW5zZm9ybS0+dXBkYXRlTG9jYWxUcmFuc2Zvcm0o
dHJhbnNmb3JtLT50cmFuc2Zvcm0oKS0+YmFzZVZhbCgpKTsKKwkJCX0KKwkJfQorCisJCS8vIEhh
bmRsZSA8YW5pbWF0ZUNvbG9yPi4uLgorCQlRTWFwPFFTdHJpbmcsIFFDb2xvcj46Okl0ZXJhdG9y
IGNpdCA9IHRhcmdldENvbG9yLmJlZ2luKCk7CisJCVFNYXA8UVN0cmluZywgUUNvbG9yPjo6SXRl
cmF0b3IgY2VuZCA9IHRhcmdldENvbG9yLmVuZCgpOworCQlmb3IoOyBjaXQgIT0gY2VuZDsgKytj
aXQpCisJCXsKKwkJCWlmKGNpdC5kYXRhKCkuaXNWYWxpZCgpKQorCQkJCVNWR0FuaW1hdGlvbkVs
ZW1lbnRJbXBsOjpzZXRUYXJnZXRBdHRyaWJ1dGUodGl0LmtleSgpLCBjaXQua2V5KCksIGNpdC5k
YXRhKCkubmFtZSgpKTsKKwkJfQorCX0KKworCS8vIE9wdGltaXplZCB1cGRhdGUgbG9naWMgKHRv
IGF2b2lkIDQgdXBkYXRlcywgb24gdGhlIHNhbWUgZWxlbWVudCkKKwlmb3IodGl0ID0gdGFyZ2V0
TWFwLmJlZ2luKCk7IHRpdCAhPSB0ZW5kOyArK3RpdCkKKwl7CisJCVNWR1N0eWxlZEVsZW1lbnRJ
bXBsICpzdHlsZWQgPSBkeW5hbWljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudEltcGwgKj4odGl0Lmtl
eSgpKTsKKwkJaWYoc3R5bGVkKQorCQkJc3R5bGVkLT5zZXRDaGFuZ2VkKHRydWUpOworCX0KK30K
Kwordm9pZCBTVkdUaW1lcjo6YWRkTm90aWZ5KFNWR0FuaW1hdGlvbkVsZW1lbnRJbXBsICplbGVt
ZW50LCBib29sIGVuYWJsZWQpCit7CisJZm9yKHVuc2lnbmVkIGludCBpID0gbV9ub3RpZnlMaXN0
LmNvdW50KCk7IGkgPiAwOyBpLS0pCisJeworCQlTVkdOb3RpZmljYXRpb25TdHJ1Y3QgJm5vdGlm
eVN0cnVjdCA9IG1fbm90aWZ5TGlzdFtpIC0gMV07CisJCWlmKG5vdGlmeVN0cnVjdC5hbmltYXRp
b24gPT0gZWxlbWVudCkKKwkJeworCQkJbm90aWZ5U3RydWN0LmVuYWJsZWQgPSBlbmFibGVkOwor
CQkJcmV0dXJuOworCQl9CisJfQorCisJU1ZHTm90aWZpY2F0aW9uU3RydWN0IG5vdGlmeVN0cnVj
dDsKKwlub3RpZnlTdHJ1Y3QuYW5pbWF0aW9uID0gZWxlbWVudDsKKwlub3RpZnlTdHJ1Y3QuZW5h
YmxlZCA9IGVuYWJsZWQ7CisJCisJbV9ub3RpZnlMaXN0LmFwcGVuZChub3RpZnlTdHJ1Y3QpOwor
fQorCit2b2lkIFNWR1RpbWVyOjpyZW1vdmVOb3RpZnkoU1ZHQW5pbWF0aW9uRWxlbWVudEltcGwg
KmVsZW1lbnQpCit7CisJZm9yKHVuc2lnbmVkIGludCBpID0gbV9ub3RpZnlMaXN0LmNvdW50KCk7
IGkgPiAwOyBpLS0pCisJeworCQlTVkdOb3RpZmljYXRpb25TdHJ1Y3QgJm5vdGlmeVN0cnVjdCA9
IG1fbm90aWZ5TGlzdFtpIC0gMV07CisJCWlmKG5vdGlmeVN0cnVjdC5hbmltYXRpb24gPT0gZWxl
bWVudCkKKwkJeworCQkJbm90aWZ5U3RydWN0LmVuYWJsZWQgPSBmYWxzZTsKKwkJCWJyZWFrOwor
CQl9CisJfQorCisJYm9vbCBhY3RpdmUgPSBmYWxzZTsKKwlmb3IodW5zaWduZWQgaW50IGkgPSBt
X25vdGlmeUxpc3QuY291bnQoKTsgaSA+IDA7IGktLSkKKwl7CisJCVNWR05vdGlmaWNhdGlvblN0
cnVjdCBub3RpZnlTdHJ1Y3QgPSBtX25vdGlmeUxpc3RbaSAtIDFdOworCQlpZihub3RpZnlTdHJ1
Y3QuZW5hYmxlZCkKKwkJeworCQkJYWN0aXZlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQor
CQorCWlmKCFhY3RpdmUpCisJCXN0b3AoKTsKK30KKworY29uc3QgdW5zaWduZWQgaW50IFRpbWVT
Y2hlZHVsZXI6OnN0YXRpY1RpbWVySW50ZXJ2YWwgPSA1MDsgLy8gbWlsbGlzZWNvbmRzCisKK1Rp
bWVTY2hlZHVsZXI6OlRpbWVTY2hlZHVsZXIoU1ZHRG9jdW1lbnRJbXBsICpkb2N1bWVudCkgOiBR
T2JqZWN0KCksIG1fZG9jdW1lbnQoZG9jdW1lbnQpCit7CisJLy8gQ3JlYXRlIHN0YXRpYyBpbnRl
cnZhbCB0aW1lcnMgYnV0IGRvbid0IHN0YXJ0IGl0IHlldCEKKwltX2ludGVydmFsVGltZXIgPSBu
ZXcgU1ZHVGltZXIodGhpcywgc3RhdGljVGltZXJJbnRlcnZhbCwgZmFsc2UpOworCisJbV9zYXZl
ZFRpbWUgPSAwOworCW1fY3JlYXRpb25UaW1lID0gUVRpbWU6OmN1cnJlbnRUaW1lKCk7CisjaWZk
ZWYgQVBQTEVfQ0hBTkdFUworCW1fc2xvdFN0dWIgPSBOVUxMOworI2VuZGlmCit9CisKK1RpbWVT
Y2hlZHVsZXI6On5UaW1lU2NoZWR1bGVyKCkKK3sKKwkvLyBVc3VhbGx5IHNpbmdsZVNob3QgdGlt
ZXJzIGNsZWFudXAgdGhlbXNlbHZlcywgYWZ0ZXIgdXNhZ2UKKwlTVkdUaW1lckxpc3Q6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV90aW1lckxpc3QuYmVnaW4oKTsKKwlTVkdUaW1lckxpc3Q6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fdGltZXJMaXN0LmVuZCgpOworCisJZm9yKDsgaXQgIT0gZW5kOyAr
K2l0KQorCQlkZWxldGUgKCppdCk7CisJCisJZGVsZXRlIG1faW50ZXJ2YWxUaW1lcjsKKwlpZiAo
bV9zbG90U3R1YikgZGVsZXRlIG1fc2xvdFN0dWI7Cit9CisKK3ZvaWQgVGltZVNjaGVkdWxlcjo6
YWRkVGltZXIoU1ZHQW5pbWF0aW9uRWxlbWVudEltcGwgKmVsZW1lbnQsIHVuc2lnbmVkIGludCBt
cykKK3sKKwlTVkdUaW1lciAqc3ZnVGltZXIgPSBuZXcgU1ZHVGltZXIodGhpcywgbXMsIHRydWUp
OworCXN2Z1RpbWVyLT5hZGROb3RpZnkoZWxlbWVudCwgdHJ1ZSk7CisJbV90aW1lckxpc3QuYXBw
ZW5kKHN2Z1RpbWVyKTsKKworCW1faW50ZXJ2YWxUaW1lci0+YWRkTm90aWZ5KGVsZW1lbnQsIGZh
bHNlKTsKK30KKwordm9pZCBUaW1lU2NoZWR1bGVyOjpjb25uZWN0SW50ZXJ2YWxUaW1lcihTVkdB
bmltYXRpb25FbGVtZW50SW1wbCAqZWxlbWVudCkKK3sKKwltX2ludGVydmFsVGltZXItPmFkZE5v
dGlmeShlbGVtZW50LCB0cnVlKTsKK30KKwordm9pZCBUaW1lU2NoZWR1bGVyOjpkaXNjb25uZWN0
SW50ZXJ2YWxUaW1lcihTVkdBbmltYXRpb25FbGVtZW50SW1wbCAqZWxlbWVudCkKK3sKKwltX2lu
dGVydmFsVGltZXItPnJlbW92ZU5vdGlmeShlbGVtZW50KTsKK30KKwordm9pZCBUaW1lU2NoZWR1
bGVyOjpzdGFydEFuaW1hdGlvbnMoKQoreworCW1fY3JlYXRpb25UaW1lLnN0YXJ0KCk7CisKKwlT
VkdUaW1lckxpc3Q6Oml0ZXJhdG9yIGl0ID0gbV90aW1lckxpc3QuYmVnaW4oKTsKKwlTVkdUaW1l
ckxpc3Q6Oml0ZXJhdG9yIGVuZCA9IG1fdGltZXJMaXN0LmVuZCgpOworCisJZm9yKDsgaXQgIT0g
ZW5kOyArK2l0KQorCXsKKwkJU1ZHVGltZXIgKnN2Z1RpbWVyID0gKml0OworCQlpZihzdmdUaW1l
ciAmJiAhc3ZnVGltZXItPmlzQWN0aXZlKCkpCisJCQlzdmdUaW1lci0+c3RhcnQodGhpcywgU0xP
VChzbG90VGltZXJOb3RpZnkoKSkpOworCX0KK30KKwordm9pZCBUaW1lU2NoZWR1bGVyOjp0b2dn
bGVBbmltYXRpb25zKCkKK3sKKwlpZihtX2ludGVydmFsVGltZXItPmlzQWN0aXZlKCkpCisJewor
CQltX2ludGVydmFsVGltZXItPnN0b3AoKTsKKwkJbV9zYXZlZFRpbWUgPSBtX2NyZWF0aW9uVGlt
ZS5lbGFwc2VkKCk7CisJfQorCWVsc2UKKwl7CisJCWlmKG1fc2F2ZWRUaW1lICE9IDApCisJCQlt
X2NyZWF0aW9uVGltZSA9IG1fY3JlYXRpb25UaW1lLmFkZE1TZWNzKG1fY3JlYXRpb25UaW1lLmVs
YXBzZWQoKSAtIG1fc2F2ZWRUaW1lKTsKKworCQltX2ludGVydmFsVGltZXItPnN0YXJ0KHRoaXMs
IFNMT1Qoc2xvdFRpbWVyTm90aWZ5KCkpKTsKKwl9Cit9CisKK2Jvb2wgVGltZVNjaGVkdWxlcjo6
YW5pbWF0aW9uc1BhdXNlZCgpIGNvbnN0Cit7CisJcmV0dXJuICFtX2ludGVydmFsVGltZXItPmlz
QWN0aXZlKCk7Cit9CisKK3ZvaWQgVGltZVNjaGVkdWxlcjo6c2xvdFRpbWVyTm90aWZ5KCkKK3sK
KwlRVGltZXIgKnNlbmRlclRpbWVyID0gY29uc3RfY2FzdDxRVGltZXIgKj4oc3RhdGljX2Nhc3Q8
Y29uc3QgUVRpbWVyICo+KHNlbmRlcigpKSk7CisJU1ZHVGltZXIgKnN2Z1RpbWVyID0gMDsKKwor
CVNWR1RpbWVyTGlzdDo6aXRlcmF0b3IgaXQgPSBtX3RpbWVyTGlzdC5iZWdpbigpOworCVNWR1Rp
bWVyTGlzdDo6aXRlcmF0b3IgZW5kID0gbV90aW1lckxpc3QuZW5kKCk7CisJZm9yKDsgaXQgIT0g
ZW5kOyArK2l0KQorCXsKKwkJU1ZHVGltZXIgKmN1ciA9ICppdDsKKwkJaWYoKmN1ciA9PSBzZW5k
ZXJUaW1lcikKKwkJeworCQkJc3ZnVGltZXIgPSBjdXI7CisJCQlicmVhazsKKwkJfQorCX0KKwor
CWlmKCFzdmdUaW1lcikKKwl7CisJCXN2Z1RpbWVyID0gKCptX2ludGVydmFsVGltZXIgPT0gc2Vu
ZGVyVGltZXIpID8gbV9pbnRlcnZhbFRpbWVyIDogMDsKKwkKKwkJaWYoIXN2Z1RpbWVyKQorCQkJ
cmV0dXJuOworCX0KKworCXN2Z1RpbWVyLT5ub3RpZnlBbGwoKTsKKworCS8vIFVwZGF0ZSBhbnkg
J2RpcnR5JyBzaGFwZXMuLi4KKwltX2RvY3VtZW50LT51cGRhdGVSZW5kZXJpbmcoKTsKKwkJCisJ
aWYoc3ZnVGltZXItPnNpbmdsZVNob3QoKSkKKwl7CisJCW1fdGltZXJMaXN0LnJlbW92ZShzdmdU
aW1lcik7CisJCWRlbGV0ZSBzdmdUaW1lcjsKKwl9CisKKwkvLyBUaGUgc2luZ2xlU2hvdCB0aW1l
cnMgb2YgaWUuIDxhbmltYXRlPiB3aXRoIGJlZ2luPSIzcyIgYXJlIG5vdGlmaWVkCisJLy8gYnkg
dGhlIHByZXZpb3VzIGNhbGwsIGFuZCBub3cgYWxsIGNvbm5lY3Rpb25zIHRvIHRoZSBpbnRlcnZh
bCB0aW1lcgorCS8vIGFyZSBjcmVhdGVkIGFuZCBub3cgd2UganVzdCBuZWVkIHRvIGZpcmUgdGhh
dCB0aW1lciAoTmlrbykKKwlpZihzdmdUaW1lciAhPSBtX2ludGVydmFsVGltZXIgJiYgIW1faW50
ZXJ2YWxUaW1lci0+aXNBY3RpdmUoKSkKKwkJbV9pbnRlcnZhbFRpbWVyLT5zdGFydCh0aGlzLCBT
TE9UKHNsb3RUaW1lck5vdGlmeSgpKSk7Cit9CisKK2Zsb2F0IFRpbWVTY2hlZHVsZXI6OmVsYXBz
ZWQoKSBjb25zdAoreworCXJldHVybiBmbG9hdChtX2NyZWF0aW9uVGltZS5lbGFwc2VkKCkpIC8g
MTAwMC4wOworfQorCisjaWZkZWYgQVBQTEVfQ0hBTkdFUworCit2b2lkIHNsb3RUaW1lck5vdGlm
eUZ1bmModm9pZCAqdHMpCit7CisJVGltZVNjaGVkdWxlciAqdGltZVNjaGVkdWxlciA9IHN0YXRp
Y19jYXN0PFRpbWVTY2hlZHVsZXIgKj4odHMpOworCXRpbWVTY2hlZHVsZXItPnNsb3RUaW1lck5v
dGlmeSgpOworfQorCitLU1ZHU2xvdFN0dWIgKlRpbWVTY2hlZHVsZXI6OnNsb3RTdHViKCkKK3sK
KwlpZiAoIW1fc2xvdFN0dWIpIHsKKwkJbV9zbG90U3R1YiA9IG5ldyBLU1ZHU2xvdFN0dWIodGhp
cywgJnNsb3RUaW1lck5vdGlmeUZ1bmMpOworCX0KKwlyZXR1cm4gbV9zbG90U3R1YjsKK30KKwor
I2VuZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IC4va3N2ZzIvY29yZS9LU1ZHVGltZVNj
aGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IEtTVkdUaW1lU2NoZWR1bGVyLmgKZGlmZiAt
TiAuL2tzdmcyL2NvcmUvS1NWR1RpbWVTY2hlZHVsZXIuaAotLS0gLi9rc3ZnMi9jb3JlL0tTVkdU
aW1lU2NoZWR1bGVyLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgLi9rc3ZnMi9jb3Jl
L0tTVkdUaW1lU2NoZWR1bGVyLmgJMTAgSnVsIDIwMDUgMTA6MjU6MDkgLTAwMDAKQEAgLTAsMCAr
MSwxMzEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0IE5pa29sYXMgWmltbWVybWFubiA8
d2lsZGZveEBrZGUub3JnPgorCQkJCSAgMjAwNCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorCisg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
CisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaWZuZGVmIEtTVkdfVGlt
ZVNjaGVkdWxlcl9ICisjZGVmaW5lIEtTVkdfVGltZVNjaGVkdWxlcl9ICisKKyNpbmNsdWRlIDxx
dGltZXIuaD4KKyNpbmNsdWRlIDxxb2JqZWN0Lmg+CisjaW5jbHVkZSA8cWRhdGV0aW1lLmg+Cisj
aW5jbHVkZSA8cXZhbHVlbGlzdC5oPgorCisjaW5jbHVkZSAiU1ZHQW5pbWF0aW9uRWxlbWVudElt
cGwuaCIKKworbmFtZXNwYWNlIEtTVkcKK3sKKwl0eXBlZGVmIHN0cnVjdAorCXsKKwkJYm9vbCBl
bmFibGVkIDogMTsKKwkJU1ZHQW5pbWF0aW9uRWxlbWVudEltcGwgKmFuaW1hdGlvbjsKKwl9IFNW
R05vdGlmaWNhdGlvblN0cnVjdDsKKwkKKwl0eXBlZGVmIFFWYWx1ZUxpc3Q8U1ZHTm90aWZpY2F0
aW9uU3RydWN0PiBTVkdOb3RpZnlMaXN0OworCisJY2xhc3MgVGltZVNjaGVkdWxlcjsKKwljbGFz
cyBTVkdUaW1lcgorCXsKKwlwdWJsaWM6CisJCVNWR1RpbWVyKFRpbWVTY2hlZHVsZXIgKnNjaGVk
dWxlciwgdW5zaWduZWQgaW50IG1zLCBib29sIHNpbmdsZVNob3QpOworCQl+U1ZHVGltZXIoKTsK
KworCQlib29sIG9wZXJhdG9yPT0oY29uc3QgUVRpbWVyICp0aW1lcik7CisJCWNvbnN0IFFUaW1l
ciAqcXRpbWVyKCkgY29uc3Q7CisKKwkJdm9pZCBzdGFydChRT2JqZWN0ICpyZWNlaXZlciwgY29u
c3QgY2hhciAqbWVtYmVyKTsKKwkJdm9pZCBzdG9wKCk7CisKKwkJYm9vbCBpc0FjdGl2ZSgpIGNv
bnN0OworCisJCXVuc2lnbmVkIGludCBtcygpIGNvbnN0OworCQlib29sIHNpbmdsZVNob3QoKSBj
b25zdDsKKworCQl2b2lkIG5vdGlmeUFsbCgpOworCQl2b2lkIGFkZE5vdGlmeShTVkdBbmltYXRp
b25FbGVtZW50SW1wbCAqZWxlbWVudCwgYm9vbCBlbmFibGVkID0gZmFsc2UpOworCQl2b2lkIHJl
bW92ZU5vdGlmeShTVkdBbmltYXRpb25FbGVtZW50SW1wbCAqZWxlbWVudCk7CisKKwlwcml2YXRl
OgorCQlkb3VibGUgY2FsY3VsYXRlVGltZVBlcmNlbnRhZ2UoZG91YmxlIGVsYXBzZWQsIGRvdWJs
ZSBzdGFydCwgZG91YmxlIGVuZCwgZG91YmxlIGR1cmF0aW9uLCBkb3VibGUgcmVwZWF0aW9ucyk7
CisKKwkJdW5zaWduZWQgaW50IG1fbXM7CisJCWJvb2wgbV9pbnZva2VkLCBtX3NpbmdsZVNob3Q7
CisKKwkJUVRpbWVyICptX3RpbWVyOworCQlUaW1lU2NoZWR1bGVyICptX3NjaGVkdWxlcjsKKwkJ
U1ZHTm90aWZ5TGlzdCBtX25vdGlmeUxpc3Q7CisJfTsKKworCXR5cGVkZWYgUVZhbHVlTGlzdDxT
VkdUaW1lciAqPiBTVkdUaW1lckxpc3Q7CisKKwljbGFzcyBTVkdEb2N1bWVudEltcGw7CisjaWZk
ZWYgQVBQTEVfQ0hBTkdFUworCWNsYXNzIEtTVkdTbG90U3R1YjsKKyNlbmRpZgorCWNsYXNzIFRp
bWVTY2hlZHVsZXIgOiBwdWJsaWMgUU9iamVjdAorCXsKKwlRX09CSkVDVAorCXB1YmxpYzoKKwkJ
VGltZVNjaGVkdWxlcihTVkdEb2N1bWVudEltcGwgKmRvYyk7CisJCX5UaW1lU2NoZWR1bGVyKCk7
CisKKwkJLy8gQWRkcyBzaW5nbGVTaG90IFRpbWVycworCQl2b2lkIGFkZFRpbWVyKFNWR0FuaW1h
dGlvbkVsZW1lbnRJbXBsICplbGVtZW50LCB1bnNpZ25lZCBpbnQgbXMpOworCisJCS8vIChEaXMt
KUNvbm5lY3RzIHRvIGludGVydmFsIHRpbWVyIHdpdGggbXMgPSAnc3RhdGljVGltZXJJbnRlcnZh
bCcKKwkJdm9pZCBjb25uZWN0SW50ZXJ2YWxUaW1lcihTVkdBbmltYXRpb25FbGVtZW50SW1wbCAq
ZWxlbWVudCk7CisJCXZvaWQgZGlzY29ubmVjdEludGVydmFsVGltZXIoU1ZHQW5pbWF0aW9uRWxl
bWVudEltcGwgKmVsZW1lbnQpOworCisJCXZvaWQgc3RhcnRBbmltYXRpb25zKCk7CisJCXZvaWQg
dG9nZ2xlQW5pbWF0aW9ucygpOworCQlib29sIGFuaW1hdGlvbnNQYXVzZWQoKSBjb25zdDsKKwor
CQkvLyB0aW1lIGVsYXBzZWQgaW4gc2Vjb25kcyBhZnRlciBjcmVhdGlvbiBvZiB0aGlzIG9iamVj
dAorCQlmbG9hdCBlbGFwc2VkKCkgY29uc3Q7CisKKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlu
dCBzdGF0aWNUaW1lckludGVydmFsOworCisJcHJpdmF0ZSBzbG90czoKKwkJdm9pZCBzbG90VGlt
ZXJOb3RpZnkoKTsKKworCXByaXZhdGU6IC8vIEhlbHBlcgorCQlmcmllbmQgY2xhc3MgU1ZHVGlt
ZXI7CisJCVNWR0RvY3VtZW50SW1wbCAqZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3Vt
ZW50OyB9CisjaWZkZWYgQVBQTEVfQ0hBTkdFUworCQlLU1ZHU2xvdFN0dWIgKnNsb3RTdHViKCk7
CisjZW5kaWYKKworCXByaXZhdGU6CisJCWludCBtX3NhdmVkVGltZTsKKwkJUVRpbWUgbV9jcmVh
dGlvblRpbWU7CisJCQorCQlTVkdUaW1lckxpc3QgbV90aW1lckxpc3Q7CisJCQorCQlTVkdUaW1l
ciAqbV9pbnRlcnZhbFRpbWVyOworCQlTVkdEb2N1bWVudEltcGwgKm1fZG9jdW1lbnQ7CisjaWZk
ZWYgQVBQTEVfQ0hBTkdFUworCQlLU1ZHU2xvdFN0dWIgKm1fc2xvdFN0dWI7CisjZW5kaWYKKwl9
OworfTsKKworI2VuZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IC4va3N2ZzIvY29yZS9L
U1ZHVGltZVNjaGVkdWxlci5tb2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogS1NWR1RpbWVTY2hlZHVs
ZXIubW9jCmRpZmYgLU4gLi9rc3ZnMi9jb3JlL0tTVkdUaW1lU2NoZWR1bGVyLm1vYwo=
</data>
<flag name="review"
          id="206"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>