<?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>45497</bug_id>
          
          <creation_ts>2010-09-09 15:25:21 -0700</creation_ts>
          <short_desc>Paginate columns at layout time rather than at paint time</short_desc>
          <delta_ts>2010-09-10 13:11:22 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>38402</dup_id>
          
          <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="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>276791</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-09 15:25:21 -0700</bug_when>
    <thetext>This bug is covering the task of paginating columns at layout time rather than at paint time.  Effectively it&apos;s a rewrite of how columns lay out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276794</commentid>
    <comment_count>1</comment_count>
      <attachid>67100</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-09 15:26:29 -0700</bug_when>
    <thetext>Created attachment 67100
Work in progress

This initial patch gets all multicol tests passing except for floats.  Once I get floats paginating properly (tricky!), then all multicol tests should pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277395</commentid>
    <comment_count>2</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-10 13:11:22 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 38402 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67100</attachid>
            <date>2010-09-09 15:26:29 -0700</date>
            <delta_ts>2010-09-09 15:26:29 -0700</delta_ts>
            <desc>Work in progress</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>59750</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIHB1
YmxpYzoKICAgICBDb2x1bW5JbmZvKCkKICAgICAgICAgOiBtX2Rlc2lyZWRDb2x1bW5XaWR0aCgw
KQogICAgICAgICAsIG1fZGVzaXJlZENvbHVtbkNvdW50KDEpCisgICAgICAgICwgbV9jb2x1bW5D
b3VudCgxKQorICAgICAgICAsIG1fY29sdW1uSGVpZ2h0KDApCisgICAgICAgICwgbV9taW5pbXVt
Q29sdW1uSGVpZ2h0KDApCiAgICAgICAgIHsgfQogICAgIAogICAgIGludCBkZXNpcmVkQ29sdW1u
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5XaWR0aDsgfQpAQCAtNDQsMTkg
KzQ3LDI3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXNpcmVkQ29sdW1uQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5Db3VudDsgfQogICAgIHZvaWQgc2V0RGVzaXJlZENv
bHVtbkNvdW50KHVuc2lnbmVkIGNvdW50KSB7IG1fZGVzaXJlZENvbHVtbkNvdW50ID0gY291bnQ7
IH0KIAotICAgIC8vIEVuY2Fwc3VsYXRlZCBmb3IgdGhlIGZ1dHVyZSB3aGVyZSB3ZSBjYW4gYXZv
aWQgc3RvcmluZyB0aGUgcmVjdHMgYW5kIGp1c3QgY29tcHV0ZSB0aGVtIGR5bmFtaWNhbGx5Lgot
ICAgIHNpemVfdCBjb2x1bW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uUmVjdHMuc2l6
ZSgpOyB9Ci0gICAgY29uc3QgSW50UmVjdCYgY29sdW1uUmVjdEF0KHNpemVfdCBpKSBjb25zdCB7
IHJldHVybiBtX2NvbHVtblJlY3RzW2ldOyB9CisgICAgdW5zaWduZWQgY29sdW1uQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2NvbHVtbkNvdW50OyB9CisgICAgaW50IGNvbHVtbkhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sdW1uSGVpZ2h0OyB9CiAKLSAgICB2b2lkIGNsZWFyQ29sdW1ucygp
IHsgbV9jb2x1bW5SZWN0cy5jbGVhcigpOyB9Ci0KLSAgICAvLyBGSVhNRTogV2lsbCBnbyBhd2F5
IG9uY2Ugd2UgZG9uJ3QgdXNlIHRoZSBWZWN0b3IuCi0gICAgdm9pZCBhZGRDb2x1bW5SZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpIHsgbV9jb2x1bW5SZWN0cy5hcHBlbmQocmVjdCk7IH0KKyAgICAv
LyBTZXQgb3VyIGNvdW50IGFuZCBoZWlnaHQuICBUaGlzIGlzIGVub3VnaCBpbmZvIGZvciBhIFJl
bmRlckJsb2NrIHRvIGNvbXB1dGUgcGFnZSByZWN0cworICAgIC8vIGR5bmFtaWNhbGx5LgorICAg
IHZvaWQgc2V0Q29sdW1uQ291bnRBbmRIZWlnaHQoaW50IGMsIGludCBoKQorICAgIHsgCisgICAg
ICAgIG1fY29sdW1uQ291bnQgPSBjOworICAgICAgICBtX2NvbHVtbkhlaWdodCA9IGg7CisgICAg
fQogICAgIAorICAgIHZvaWQgdXBkYXRlTWluaW11bUNvbHVtbkhlaWdodChpbnQgaCkgeyBtX21p
bmltdW1Db2x1bW5IZWlnaHQgPSBtYXgoaCwgbV9taW5pbXVtQ29sdW1uSGVpZ2h0KTsgfQorICAg
IGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9taW5pbXVtQ29sdW1u
SGVpZ2h0OyB9CisKIHByaXZhdGU6CiAgICAgaW50IG1fZGVzaXJlZENvbHVtbldpZHRoOwogICAg
IHVuc2lnbmVkIG1fZGVzaXJlZENvbHVtbkNvdW50OwotICAgIFZlY3RvcjxJbnRSZWN0PiBtX2Nv
bHVtblJlY3RzOworICAgIAorICAgIHVuc2lnbmVkIG1fY29sdW1uQ291bnQ7CisgICAgaW50IG1f
Y29sdW1uSGVpZ2h0OworICAgIGludCBtX21pbmltdW1Db2x1bW5IZWlnaHQ7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShM
YXlvdXRTdGF0ZSogcHJldiwgUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0KQotICAgIDogbV9uZXh0KHByZXYpCitMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0
U3RhdGUqIHByZXYsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwg
aW50IHBhZ2VIZWlnaHQsIENvbHVtbkluZm8qIGNvbEluZm8pCisgICAgOiBtX2NvbHVtbkluZm8o
Y29sSW5mbykKKyAgICAsIG1fbmV4dChwcmV2KQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVu
ZGVyZXIocmVuZGVyZXIpCiAjZW5kaWYKQEAgLTQ1LDQzICs0Niw2OCBAQCBMYXlvdXRTdGF0ZTo6
TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByCiAgICAgaWYgKGZpeGVkKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgogICAg
ICAgICBGbG9hdFBvaW50IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fi
c29sdXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7Ci0gICAgICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShm
aXhlZE9mZnNldC54KCksIGZpeGVkT2Zmc2V0LnkoKSkgKyBvZmZzZXQ7CisgICAgICAgIG1fcGFp
bnRPZmZzZXQgPSBJbnRTaXplKGZpeGVkT2Zmc2V0LngoKSwgZml4ZWRPZmZzZXQueSgpKSArIG9m
ZnNldDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9vZmZzZXQgPSBwcmV2LT5tX29mZnNldCArIG9m
ZnNldDsKKyAgICAgICAgbV9wYWludE9mZnNldCA9IHByZXYtPm1fcGFpbnRPZmZzZXQgKyBvZmZz
ZXQ7CiAKLSAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGlm
IChyZW5kZXJlci0+aGFzTGF5ZXIoKSkKLSAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHJlbmRlcmVy
LT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7Ci0gICAgfSBlbHNlIGlmIChyZW5k
ZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgIWZpeGVkKSB7CisgICAgaWYgKHJlbmRlcmVyLT5pc1Bv
c2l0aW9uZWQoKSAmJiAhZml4ZWQpIHsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogY29udGFp
bmVyID0gcmVuZGVyZXItPmNvbnRhaW5lcigpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmVy
LT5pc1JlbFBvc2l0aW9uZWQoKSAmJiBjb250YWluZXItPmlzUmVuZGVySW5saW5lKCkpCi0gICAg
ICAgICAgICAgICAgbV9vZmZzZXQgKz0gdG9SZW5kZXJJbmxpbmUoY29udGFpbmVyKS0+cmVsYXRp
dmVQb3NpdGlvbmVkSW5saW5lT2Zmc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0ICs9IHRvUmVuZGVySW5saW5lKGNvbnRhaW5lciktPnJlbGF0aXZlUG9zaXRpb25l
ZElubGluZU9mZnNldChyZW5kZXJlcik7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2xheW91
dE9mZnNldCA9IG1fcGFpbnRPZmZzZXQ7CisKKyAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRp
b25lZCgpICYmIHJlbmRlcmVyLT5oYXNMYXllcigpKQorICAgICAgICBtX3BhaW50T2Zmc2V0ICs9
IHJlbmRlcmVyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CisKICAgICBtX2Ns
aXBwZWQgPSAhZml4ZWQgJiYgcHJldi0+bV9jbGlwcGVkOwogICAgIGlmIChtX2NsaXBwZWQpCiAg
ICAgICAgIG1fY2xpcFJlY3QgPSBwcmV2LT5tX2NsaXBSZWN0OwogCiAgICAgaWYgKHJlbmRlcmVy
LT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5k
ZXJlci0+bGF5ZXIoKTsKLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdCh0b1BvaW50KG1fb2Zmc2V0
KSArIHJlbmRlcmVyLT52aWV3KCktPmxheW91dERlbHRhKCksIGxheWVyLT5zaXplKCkpOworICAg
ICAgICBJbnRSZWN0IGNsaXBSZWN0KHRvUG9pbnQobV9wYWludE9mZnNldCkgKyByZW5kZXJlci0+
dmlldygpLT5sYXlvdXREZWx0YSgpLCBsYXllci0+c2l6ZSgpKTsKICAgICAgICAgaWYgKG1fY2xp
cHBlZCkKICAgICAgICAgICAgIG1fY2xpcFJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0KTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7CiAgICAgICAgICAg
ICBtX2NsaXBwZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIG1fb2Zmc2V0IC09IGxheWVy
LT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKKworICAgICAgICBtX3BhaW50T2Zmc2V0IC09IGxh
eWVyLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICB9CiAKLSAgICBtX2xheW91dERlbHRh
ID0gbV9uZXh0LT5tX2xheW91dERlbHRhOworICAgIC8vIERpc2FibGUgcGFnaW5hdGlvbiBmb3Ig
b2JqZWN0cyB3ZSBkb24ndCBzdXBwb3J0LiAgRm9yIG5vdyB0aGlzIGluY2x1ZGVzIGZsb2F0cyBh
bmQgaW5saW5lIGJsb2Nrcy4KKyAgICAvLyBGSVhNRTogU3VwcG9ydCBmbG9hdHMuICBJdCdzIHVu
bGlrZWx5IHdlJ2xsIGV2ZXIgc3VwcG9ydCBpbmxpbmUgYmxvY2tzLgorICAgIGlmIChyZW5kZXJl
ci0+aXNGbG9hdGluZygpIHx8IHJlbmRlcmVyLT5pc1JlcGxhY2VkKCkgfHwgcmVuZGVyZXItPnNj
cm9sbHNPdmVyZmxvdygpKQorICAgICAgICBtX3BhZ2VIZWlnaHQgPSAwOworCisgICAgLy8gSWYg
d2UgZXN0YWJsaXNoIGEgbmV3IHBhZ2UgaGVpZ2h0LCB0aGVuIGNhY2hlIHRoZSBvZmZzZXQgdG8g
dGhlIHRvcCBvZiB0aGUgZmlyc3QgcGFnZS4KKyAgICAvLyBXZSBjYW4gY29tcGFyZSB0aGlzIGxh
dGVyIG9uIHRvIGZpZ3VyZSBvdXQgd2hhdCBwYXJ0IG9mIHRoZSBwYWdlIHdlJ3JlIGFjdHVhbGx5
IG9uLAorICAgIGlmIChwYWdlSGVpZ2h0KSB7CisgICAgICAgIG1fcGFnZUhlaWdodCA9IHBhZ2VI
ZWlnaHQ7CisgICAgICAgIG1fcGFnZU9mZnNldCA9IEludFNpemUobV9wYWludE9mZnNldC53aWR0
aCgpICsgcmVuZGVyZXItPmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFpbnRPZmZzZXQuaGVpZ2h0KCkgKyBy
ZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZW5kZXJlci0+cGFkZGluZ1RvcCgpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBJZiB3ZSBkb24ndCBlc3RhYmxpc2ggYSBuZXcgcGFnZSBoZWlnaHQs
IHRoZW4gcHJvcGFnYXRlIHRoZSBvbGQgcGFnZSBoZWlnaHQgYW5kIG9mZnNldCBkb3duLgorICAg
ICAgICBtX3BhZ2VIZWlnaHQgPSBtX25leHQtPm1fcGFnZUhlaWdodDsKKyAgICAgICAgbV9wYWdl
T2Zmc2V0ID0gbV9uZXh0LT5tX3BhZ2VPZmZzZXQ7CisgICAgfQorICAgIAorICAgIGlmICghbV9j
b2x1bW5JbmZvKQorICAgICAgICBtX2NvbHVtbkluZm8gPSBtX25leHQtPm1fY29sdW1uSW5mbzsK
IAorICAgIG1fbGF5b3V0RGVsdGEgPSBtX25leHQtPm1fbGF5b3V0RGVsdGE7CisgICAgCiAgICAg
Ly8gRklYTUU6IDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ0Mz4g
QXBwbHkgY29udHJvbCBjbGlwIGlmIHByZXNlbnQuCiB9CiAKIExheW91dFN0YXRlOjpMYXlvdXRT
dGF0ZShSZW5kZXJPYmplY3QqIHJvb3QpCiAgICAgOiBtX2NsaXBwZWQoZmFsc2UpCisgICAgLCBt
X3BhZ2VIZWlnaHQoMCkKKyAgICAsIG1fY29sdW1uSW5mbygwKQogICAgICwgbV9uZXh0KDApCiAj
aWZuZGVmIE5ERUJVRwogICAgICwgbV9yZW5kZXJlcihyb290KQpAQCAtODksMTMgKzExNSwxMyBA
QCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByCiB7CiAgICAgUmVuZGVy
T2JqZWN0KiBjb250YWluZXIgPSByb290LT5jb250YWluZXIoKTsKICAgICBGbG9hdFBvaW50IGFi
c0NvbnRlbnRQb2ludCA9IGNvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwg
ZmFsc2UsIHRydWUpOwotICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShhYnNDb250ZW50UG9pbnQueCgp
LCBhYnNDb250ZW50UG9pbnQueSgpKTsKKyAgICBtX3BhaW50T2Zmc2V0ID0gSW50U2l6ZShhYnND
b250ZW50UG9pbnQueCgpLCBhYnNDb250ZW50UG9pbnQueSgpKTsKIAogICAgIGlmIChjb250YWlu
ZXItPmhhc092ZXJmbG93Q2xpcCgpKSB7CiAgICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IHRv
UmVuZGVyQm94TW9kZWxPYmplY3QoY29udGFpbmVyKS0+bGF5ZXIoKTsKICAgICAgICAgbV9jbGlw
cGVkID0gdHJ1ZTsKLSAgICAgICAgbV9jbGlwUmVjdCA9IEludFJlY3QodG9Qb2ludChtX29mZnNl
dCksIGxheWVyLT5zaXplKCkpOwotICAgICAgICBtX29mZnNldCAtPSBsYXllci0+c2Nyb2xsZWRD
b250ZW50T2Zmc2V0KCk7CisgICAgICAgIG1fY2xpcFJlY3QgPSBJbnRSZWN0KHRvUG9pbnQobV9w
YWludE9mZnNldCksIGxheWVyLT5zaXplKCkpOworICAgICAgICBtX3BhaW50T2Zmc2V0IC09IGxh
eWVyLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICB9CiB9CiAKQEAgLTEyNiw0ICsxNTIs
MTEgQEAgdm9pZCBMYXlvdXRTdGF0ZTo6b3BlcmF0b3IgZGVsZXRlKHZvaWQqIAogICAgICooc2l6
ZV90KilwdHIgPSBzejsKIH0KIAordm9pZCBMYXlvdXRTdGF0ZTo6Y2xlYXJQYWdpbmF0aW9uSW5m
b3JtYXRpb24oKQoreworICAgIG1fcGFnZUhlaWdodCA9IG1fbmV4dC0+bV9wYWdlSGVpZ2h0Owor
ICAgIG1fcGFnZU9mZnNldCA9IG1fbmV4dC0+bV9wYWdlT2Zmc2V0OworICAgIG1fY29sdW1uSW5m
byA9IG1fbmV4dC0+bV9jb2x1bW5JbmZvOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvTGF5b3V0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENvbHVtbkluZm87CiBjbGFzcyBSZW5kZXJB
cmVuYTsKIGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRlck9iamVjdDsKQEAgLTQwLDYgKzQx
LDggQEAgY2xhc3MgTGF5b3V0U3RhdGUgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgog
ICAgIExheW91dFN0YXRlKCkKICAgICAgICAgOiBtX2NsaXBwZWQoZmFsc2UpCisgICAgICAgICwg
bV9wYWdlSGVpZ2h0KDApCisgICAgICAgICwgbV9jb2x1bW5JbmZvKDApCiAgICAgICAgICwgbV9u
ZXh0KDApCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fcmVuZGVyZXIoMCkKQEAgLTQ3LDcg
KzUwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBMYXlvdXRTdGF0ZShMYXlvdXRT
dGF0ZSosIFJlbmRlckJveCosIGNvbnN0IEludFNpemUmIG9mZnNldCk7CisgICAgTGF5b3V0U3Rh
dGUoTGF5b3V0U3RhdGUqLCBSZW5kZXJCb3gqLCBjb25zdCBJbnRTaXplJiBvZmZzZXQsIGludCBw
YWdlSGVpZ2h0LCBDb2x1bW5JbmZvKik7CiAgICAgTGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0Kik7
CiAKICAgICB2b2lkIGRlc3Ryb3koUmVuZGVyQXJlbmEqKTsKQEAgLTU4LDYgKzYxLDEwIEBAIHB1
YmxpYzoKICAgICAvLyBPdmVycmlkZGVuIHRvIHByZXZlbnQgdGhlIG5vcm1hbCBkZWxldGUgZnJv
bSBiZWluZyBjYWxsZWQuCiAgICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCosIHNpemVfdCk7
CiAKKyAgICB2b2lkIGNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCk7CisgICAgYm9vbCBwYWdp
bmF0aW5nQ29sdW1ucygpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uSW5mbzsgfQorICAgIGJvb2wg
cGFnaW5hdGVkKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlSGVpZ2h0IHx8IG1fY29sdW1uSW5mbzsg
fQorCiBwcml2YXRlOgogICAgIC8vIFRoZSBub3JtYWwgb3BlcmF0b3IgbmV3IGlzIGRpc2FsbG93
ZWQuCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCkgdGhyb3coKTsKQEAgLTY1LDEwICs3
MiwxNiBAQCBwcml2YXRlOgogcHVibGljOgogICAgIGJvb2wgbV9jbGlwcGVkOwogICAgIEludFJl
Y3QgbV9jbGlwUmVjdDsKLSAgICBJbnRTaXplIG1fb2Zmc2V0OyAgICAgICAvLyB4L3kgb2Zmc2V0
IGZyb20gY29udGFpbmVyLgorICAgIEludFNpemUgbV9wYWludE9mZnNldDsgICAgICAgLy8geC95
IG9mZnNldCBmcm9tIGNvbnRhaW5lci4gIEluY2x1ZGVzIHJlbGF0aXZlIHBvc2l0aW9uaW5nIGFu
ZCBzY3JvbGwgb2Zmc2V0cy4KKyAgICBJbnRTaXplIG1fbGF5b3V0T2Zmc2V0OyAgICAgIC8vIHgv
eSBvZmZzZXQgZnJvbSBjb250YWluZXIuICBEb2VzIG5vdCBpbmNsdWRlIHJlbGF0aXZlIHBvc2l0
aW9uaW5nIG9yIHNjcm9sbCBvZmZzZXRzLgogICAgIEludFNpemUgbV9sYXlvdXREZWx0YTsgIC8v
IFRyYW5zaWVudCBvZmZzZXQgZnJvbSB0aGUgZmluYWwgcG9zaXRpb24gb2YgdGhlIG9iamVjdAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZWQgdG8gZW5zdXJlIHRoYXQgcmVwYWlu
dHMgaGFwcGVuIGluIHRoZSBjb3JyZWN0IHBsYWNlLgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBkZWx0YSBhY2N1bXVsYXRlZCBmcm9tIHRoZSByb290Lgor
CisgICAgaW50IG1fcGFnZUhlaWdodDsgICAgICAgICAgICAvLyBUaGUgY3VycmVudCBwYWdlIGhl
aWdodCBmb3IgdGhlIHBhZ2luYXRpb24gbW9kZWwgdGhhdCBlbmNsb3NlcyB1cy4KKyAgICBJbnRT
aXplIG1fcGFnZU9mZnNldDsgICAgICAgIC8vIFRoZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRo
ZSBmaXJzdCBwYWdlIGluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBwYWdpbmF0aW9uIG1vZGVsLgor
ICAgIENvbHVtbkluZm8qIG1fY29sdW1uSW5mbzsgICAgLy8gSWYgdGhlIGVuY2xvc2luZyBwYWdp
bmF0aW9uIG1vZGVsIGlzIGEgY29sdW1uIG1vZGVsLCB0aGVuIHRoaXMgd2lsbCBzdG9yZSBjb2x1
bW4gaW5mb3JtYXRpb24gZm9yIGVhc3kgcmV0cmlldmFsL21hbmlwdWxhdGlvbi4KKwogICAgIExh
eW91dFN0YXRlKiBtX25leHQ7CiAjaWZuZGVmIE5ERUJVRwogICAgIFJlbmRlck9iamVjdCogbV9y
ZW5kZXJlcjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDY2OTAz
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTEyLDcgKzExMTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQogICAgICAgICBj
bGVhckxheW91dE92ZXJmbG93KCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2Nr
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKK3ZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJv
b2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQpCiB7CiAgICAgQVNTRVJUKG5lZWRz
TGF5b3V0KCkpOwogCkBAIC0xMTIyLDkgKzExMjIsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRCbG9jayhib29sIHJlbGF5CiAgICAgaWYgKCFyZWxheW91dENoaWxkcmVuICYmIGxheW91dE9u
bHlQb3NpdGlvbmVkT2JqZWN0cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRSZXBh
aW50ZXIgcmVwYWludGVyKCp0aGlzLCBtX2V2ZXJIYWRMYXlvdXQgJiYgY2hlY2tGb3JSZXBhaW50
RHVyaW5nTGF5b3V0KCkpOwotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2
aWV3KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJhbnNm
b3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpKTsKLQogICAgIGludCBvbGRXaWR0aCA9IHdpZHRoKCk7
CiAgICAgaW50IG9sZENvbHVtbldpZHRoID0gZGVzaXJlZENvbHVtbldpZHRoKCk7CiAKQEAgLTEx
NDAsNiArMTEzNywyNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5
CiAKICAgICBpbnQgcHJldmlvdXNIZWlnaHQgPSBoZWlnaHQoKTsKICAgICBzZXRIZWlnaHQoMCk7
CisgICAgYm9vbCBoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0ID0gZmFsc2U7CisgICAgQ29sdW1uSW5m
byogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKKyAgICBpZiAoaGFzQ29sdW1ucygpKSB7CisgICAg
ICAgIGlmICghcGFnZUhlaWdodCkgeworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnbyBhaGVh
ZCBhbmQgc2V0IG91ciBleHBsaWNpdCBwYWdlIGhlaWdodCBpZiBvbmUgZXhpc3RzLCBzbyB0aGF0
IHdlIGNhbgorICAgICAgICAgICAgLy8gYXZvaWQgZG9pbmcgdHdvIGxheW91dCBwYXNzZXMuCisg
ICAgICAgICAgICBjYWxjSGVpZ2h0KCk7CisgICAgICAgICAgICBpbnQgY29sdW1uSGVpZ2h0ID0g
Y29udGVudEhlaWdodCgpOworICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA+IDApIHsKKyAg
ICAgICAgICAgICAgICBwYWdlSGVpZ2h0ID0gY29sdW1uSGVpZ2h0OworICAgICAgICAgICAgICAg
IGhhc1NwZWNpZmllZFBhZ2VIZWlnaHQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgc2V0SGVpZ2h0KDApOworICAgICAgICB9CisgICAgICAgIGlmIChjb2xJbmZvLT5jb2x1bW5I
ZWlnaHQoKSA+IDAgJiYgY29sSW5mby0+Y29sdW1uSGVpZ2h0KCkgIT0gcGFnZUhlaWdodCkKKyAg
ICAgICAgICAgIG1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoKTsgLy8gV2Ug
bmVlZCB0byBkaXJ0eSBhbGwgZGVzY2VuZGFudCBibG9ja3MgYW5kIGxpbmVzLCBzaW5jZSB0aGUg
Y29sdW1uIGhlaWdodCBpcyBkaWZmZXJlbnQgbm93LgorICAgIH0KKworICAgIExheW91dFJlcGFp
bnRlciByZXBhaW50ZXIoKnRoaXMsIG1fZXZlckhhZExheW91dCAmJiBjaGVja0ZvclJlcGFpbnRE
dXJpbmdMYXlvdXQoKSk7CisgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZp
ZXcoKSwgdGhpcywgSW50U2l6ZSh4KCksIHkoKSksIGhhc0NvbHVtbnMoKSB8fCBoYXNUcmFuc2Zv
cm0oKSB8fCBoYXNSZWZsZWN0aW9uKCksIHBhZ2VIZWlnaHQsIGNvbEluZm8pOwogCiAgICAgLy8g
V2UgdXNlIGZvdXIgdmFsdWVzLCBtYXhUb3BQb3MsIG1heFRvcE5lZywgbWF4Qm90dG9tUG9zLCBh
bmQgbWF4Qm90dG9tTmVnLCB0byB0cmFjawogICAgIC8vIG91ciBjdXJyZW50IG1heGltYWwgcG9z
aXRpdmUgYW5kIG5lZ2F0aXZlIG1hcmdpbnMuICBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgd2hlbiB3
ZQpAQCAtMTE4OSwxMCArMTIwNiw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJv
b2wgcmVsYXkKICAgICBpZiAoZmxvYXRCb3R0b20oKSA+IChoZWlnaHQoKSAtIHRvQWRkKSAmJiBl
eHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSkKICAgICAgICAgc2V0SGVpZ2h0KGZs
b2F0Qm90dG9tKCkgKyB0b0FkZCk7CiAgICAgCi0gICAgLy8gTm93IGxheSBvdXQgb3VyIGNvbHVt
bnMgd2l0aGluIHRoaXMgaW50cmluc2ljIGhlaWdodCwgc2luY2UgdGhleSBjYW4gc2xpZ2h0bHkg
YWZmZWN0IHRoZSBpbnRyaW5zaWMgaGVpZ2h0IGFzCi0gICAgLy8gd2UgYWRqdXN0IGZvciBjbGVh
biBjb2x1bW4gYnJlYWtzLgotICAgIGludCBzaW5nbGVDb2x1bW5Cb3R0b20gPSBsYXlvdXRDb2x1
bW5zKCk7Ci0KKyAgICBpZiAobGF5b3V0Q29sdW1ucyhoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0LCBw
YWdlSGVpZ2h0LCBzdGF0ZVB1c2hlcikpCisgICAgICAgIHJldHVybjsKKyAKICAgICAvLyBDYWxj
dWxhdGUgb3VyIG5ldyBoZWlnaHQuCiAgICAgaW50IG9sZEhlaWdodCA9IGhlaWdodCgpOwogICAg
IGNhbGNIZWlnaHQoKTsKQEAgLTEyMDcsMjEgKzEyMjMsMTggQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gV2UgaGF2ZSB0byByZWJhbGFuY2UgY29s
dW1ucyB0byB0aGUgbmV3IGhlaWdodC4KLSAgICAgICAgbGF5b3V0Q29sdW1ucyhzaW5nbGVDb2x1
bW5Cb3R0b20pOwogICAgIH0KIAogICAgIGlmIChwcmV2aW91c0hlaWdodCAhPSBoZWlnaHQoKSkK
ICAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CiAKLSAgICAvLyBUaGlzIGNoZWNrIGlz
IGRlc2lnbmVkIHRvIGNhdGNoIGFueW9uZQotICAgIC8vIHdobyB3YXNuJ3QgZ29pbmcgdG8gcHJv
cGFnYXRlIGZsb2F0IGluZm9ybWF0aW9uIHVwIHRvIHRoZSBwYXJlbnQgYW5kIHlldCBjb3VsZCBw
b3RlbnRpYWxseSBiZSBwYWludGVkIGJ5IGl0cyBhbmNlc3Rvci4KLSAgICBpZiAoaXNSb290KCkg
fHwgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkpCi0gICAgICAgIGFkZE92ZXJm
bG93RnJvbUZsb2F0cygpOwotCiAgICAgLy8gQWRkIG92ZXJmbG93IGZyb20gY2hpbGRyZW4gKHVu
bGVzcyB3ZSdyZSBtdWx0aS1jb2x1bW4sIHNpbmNlIGluIHRoYXQgY2FzZSBhbGwgb3VyIGNoaWxk
IG92ZXJmbG93IGlzIGNsaXBwZWQgYW55d2F5KS4KICAgICBpZiAoIWhhc0NvbHVtbnMoKSkgewor
ICAgICAgICAvLyBUaGlzIGNoZWNrIGlzIGRlc2lnbmVkIHRvIGNhdGNoIGFueW9uZQorICAgICAg
ICAvLyB3aG8gd2Fzbid0IGdvaW5nIHRvIHByb3BhZ2F0ZSBmbG9hdCBpbmZvcm1hdGlvbiB1cCB0
byB0aGUgcGFyZW50IGFuZCB5ZXQgY291bGQgcG90ZW50aWFsbHkgYmUgcGFpbnRlZCBieSBpdHMg
YW5jZXN0b3IuCisgICAgICAgIGlmIChpc1Jvb3QoKSB8fCBleHBhbmRzVG9FbmNsb3NlT3Zlcmhh
bmdpbmdGbG9hdHMoKSkKKyAgICAgICAgICAgIGFkZE92ZXJmbG93RnJvbUZsb2F0cygpOworCiAg
ICAgICAgIGlmIChjaGlsZHJlbklubGluZSgpKQogICAgICAgICAgICAgYWRkT3ZlcmZsb3dGcm9t
SW5saW5lQ2hpbGRyZW4oKTsKICAgICAgICAgZWxzZQpAQCAtMTQzNSw3ICsxNDQ4LDcgQEAgYm9v
bCBSZW5kZXJCbG9jazo6aGFuZGxlUnVuSW5DaGlsZChSZW5kZQogICAgIGJsb2NrUnVuSW4tPmRl
c3Ryb3koKTsKIAogICAgIC8vIFRoZSBibG9jayBhY3RzIGxpa2UgYW4gaW5saW5lLCBzbyBqdXN0
IG51bGwgb3V0IGl0cwotICAgIC8vIHBvc2l0aW9uLgorICAgIC8vIHBvc2l0aW9uLiBnb3QKICAg
ICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE0ODUsNyArMTQ5OCw4IEBAIGludCBSZW5kZXJC
bG9jazo6Y29sbGFwc2VNYXJnaW5zKFJlbmRlckIKICAgICBpZiAobWFyZ2luSW5mby5xdWlya0Nv
bnRhaW5lcigpICYmIG1hcmdpbkluZm8uYXRUb3BPZkJsb2NrKCkgJiYgKHBvc1RvcCAtIG5lZ1Rv
cCkpCiAgICAgICAgIG1hcmdpbkluZm8uc2V0VG9wUXVpcmsodG9wUXVpcmspOwogCi0gICAgaW50
IHlwb3MgPSBoZWlnaHQoKTsKKyAgICBpbnQgYmVmb3JlQ29sbGFwc2VZID0gaGVpZ2h0KCk7Cisg
ICAgaW50IHlwb3MgPSBiZWZvcmVDb2xsYXBzZVk7CiAgICAgaWYgKGNoaWxkLT5pc1NlbGZDb2xs
YXBzaW5nQmxvY2soKSkgewogICAgICAgICAvLyBUaGlzIGNoaWxkIGhhcyBubyBoZWlnaHQuICBX
ZSBuZWVkIHRvIGNvbXB1dGUgb3VyCiAgICAgICAgIC8vIHBvc2l0aW9uIGJlZm9yZSB3ZSBjb2xs
YXBzZSB0aGUgY2hpbGQncyBtYXJnaW5zIHRvZ2V0aGVyLApAQCAtMTUyNyw2ICsxNTQxLDEyIEBA
IGludCBSZW5kZXJCbG9jazo6Y29sbGFwc2VNYXJnaW5zKFJlbmRlckIKICAgICAgICAgICAgIG1h
cmdpbkluZm8uc2V0Qm90dG9tUXVpcmsoY2hpbGQtPmlzQm90dG9tTWFyZ2luUXVpcmsoKSB8fCBz
dHlsZSgpLT5tYXJnaW5Cb3R0b21Db2xsYXBzZSgpID09IE1ESVNDQVJEKTsKICAgICB9CiAgICAg
CisgICAgLy8gSWYgbWFyZ2lucyB3b3VsZCBwdWxsIHVzIHBhc3QgdGhlIHRvcCBvZiB0aGUgbmV4
dCBwYWdlLCB0aGVuIHdlIG5lZWQgdG8gcHVsbCBiYWNrIGFuZCBwcmV0ZW5kIGxpa2UgdGhlIG1h
cmdpbnMKKyAgICAvLyBjb2xsYXBzZWQgaW50byB0aGUgcGFnZSBlZGdlLgorICAgIGJvb2wgcGFn
aW5hdGVkID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdpbmF0ZWQoKTsKKyAgICBpZiAocGFn
aW5hdGVkICYmIHlwb3MgPiBiZWZvcmVDb2xsYXBzZVkpCisgICAgICAgIHlwb3MgPSBtaW4oeXBv
cywgbmV4dFBhZ2VUb3AoYmVmb3JlQ29sbGFwc2VZKSk7CisKICAgICByZXR1cm4geXBvczsKIH0K
IApAQCAtMTU4Niw3ICsxNjA2LDI0IEBAIGludCBSZW5kZXJCbG9jazo6ZXN0aW1hdGVWZXJ0aWNh
bFBvc2l0aW8KICAgICAgICAgaW50IGNoaWxkTWFyZ2luVG9wID0gY2hpbGQtPnNlbGZOZWVkc0xh
eW91dCgpID8gY2hpbGQtPm1hcmdpblRvcCgpIDogY2hpbGQtPmNvbGxhcHNlZE1hcmdpblRvcCgp
OwogICAgICAgICB5UG9zRXN0aW1hdGUgKz0gbWF4KG1hcmdpbkluZm8ubWFyZ2luKCksIGNoaWxk
TWFyZ2luVG9wKTsKICAgICB9CisgICAgCisgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxh
eW91dFN0YXRlKCktPnBhZ2luYXRlZCgpOworCisgICAgLy8gQWRqdXN0IHlQb3NFc3RpbWF0ZSBk
b3duIHRvIHRoZSBuZXh0IHBhZ2UgaWYgdGhlIG1hcmdpbnMgYXJlIHNvIGxhcmdlIHRoYXQgd2Ug
ZG9uJ3QgZml0IG9uIHRoZSBjdXJyZW50CisgICAgLy8gcGFnZS4KKyAgICBpZiAocGFnaW5hdGVk
ICYmIHlQb3NFc3RpbWF0ZSA+IGhlaWdodCgpKQorICAgICAgICB5UG9zRXN0aW1hdGUgPSBtaW4o
eVBvc0VzdGltYXRlLCBuZXh0UGFnZVRvcChoZWlnaHQoKSkpOworCiAgICAgeVBvc0VzdGltYXRl
ICs9IGdldENsZWFyRGVsdGEoY2hpbGQsIHlQb3NFc3RpbWF0ZSk7CisgICAgCisgICAgaWYgKHBh
Z2luYXRlZCkgeworICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBhIHBhZ2Ugb3IgY29sdW1u
IGJyZWFrIHZhbHVlIG9mICJiZWZvcmUiLCB0aGVuIHdlIHNob3VsZCBzaGlmdCB0byB0aGUgdG9w
IG9mIHRoZSBuZXh0IHBhZ2UuCisgICAgICAgIHlQb3NFc3RpbWF0ZSA9IGFwcGx5QmVmb3JlQnJl
YWsoY2hpbGQsIHlQb3NFc3RpbWF0ZSk7CisgICAgCisgICAgICAgIC8vIEZvciByZXBsYWNlZCBl
bGVtZW50cyBhbmQgc2Nyb2xsZWQgZWxlbWVudHMsIHdlIHdhbnQgdG8gc2hpZnQgdGhlbSB0byB0
aGUgbmV4dCBwYWdlIGlmIHRoZXkgZG9uJ3QgZml0IG9uIHRoZSBjdXJyZW50IG9uZS4KKyAgICAg
ICAgeVBvc0VzdGltYXRlID0gYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoY2hpbGQsIHlQb3NF
c3RpbWF0ZSk7CisgICAgfQorCiAgICAgcmV0dXJuIHlQb3NFc3RpbWF0ZTsKIH0KIApAQCAtMTgw
Niw2ICsxODQzLDIwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUK
ICAgICAvLyBOb3cgY2hlY2sgZm9yIGNsZWFyLgogICAgIGludCB5QWZ0ZXJDbGVhciA9IGNsZWFy
RmxvYXRzSWZOZWVkZWQoY2hpbGQsIG1hcmdpbkluZm8sIG9sZFRvcFBvc01hcmdpbiwgb2xkVG9w
TmVnTWFyZ2luLCB5QmVmb3JlQ2xlYXIpOwogICAgIAorICAgIGJvb2wgcGFnaW5hdGVkID0gdmll
dygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdpbmF0ZWQoKTsKKyAgICBpZiAocGFnaW5hdGVkKSB7Cisg
ICAgICAgIGludCBvbGRZID0geUFmdGVyQ2xlYXI7CisgICAgICAgIAorICAgICAgICAvLyBJZiB0
aGUgb2JqZWN0IGhhcyBhIHBhZ2Ugb3IgY29sdW1uIGJyZWFrIHZhbHVlIG9mICJiZWZvcmUiLCB0
aGVuIHdlIHNob3VsZCBzaGlmdCB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UuCisgICAgICAg
IHlBZnRlckNsZWFyID0gYXBwbHlCZWZvcmVCcmVhayhjaGlsZCwgeUFmdGVyQ2xlYXIpOworICAg
IAorICAgICAgICAvLyBGb3IgcmVwbGFjZWQgZWxlbWVudHMgYW5kIHNjcm9sbGVkIGVsZW1lbnRz
LCB3ZSB3YW50IHRvIHNoaWZ0IHRoZW0gdG8gdGhlIG5leHQgcGFnZSBpZiB0aGV5IGRvbid0IGZp
dCBvbiB0aGUgY3VycmVudCBvbmUuCisgICAgICAgIHlBZnRlckNsZWFyID0gYWRqdXN0Rm9yVW5z
cGxpdHRhYmxlQ2hpbGQoY2hpbGQsIHlBZnRlckNsZWFyKTsKKyAgICAgICAgCisgICAgICAgIC8v
IFNpbWlsYXIgdG8gaG93IHdlIGFwcGx5IGNsZWFyYW5jZS4gIEdvIGFoZWFkIGFuZCBib29zdCBo
ZWlnaHQoKSB0byBiZSB0aGUgcGxhY2Ugd2hlcmUgd2UncmUgZ29pbmcgdG8gcG9zaXRpb24gdGhl
IGNoaWxkLgorICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyAoeUFmdGVyQ2xlYXIgLSBvbGRZ
KSk7CisgICAgfQorCiAgICAgdmlldygpLT5hZGRMYXlvdXREZWx0YShJbnRTaXplKDAsIHlQb3NF
c3RpbWF0ZSAtIHlBZnRlckNsZWFyKSk7CiAgICAgY2hpbGQtPnNldExvY2F0aW9uKGNoaWxkLT54
KCksIHlBZnRlckNsZWFyKTsKIApAQCAtMTg1OSw2ICsxOTEwLDE0IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUKICAgICAgICAgY2hpbGQtPnJlcGFpbnRPdmVyaGFu
Z2luZ0Zsb2F0cyh0cnVlKTsKICAgICB9CiAKKyAgICBpZiAocGFnaW5hdGVkKSB7CisgICAgICAg
IC8vIENoZWNrIGZvciBhbiBhZnRlciBwYWdlL2NvbHVtbiBicmVhay4KKyAgICAgICAgaW50IG5l
d0hlaWdodCA9IGFwcGx5QWZ0ZXJCcmVhayhjaGlsZCwgaGVpZ2h0KCkpOworICAgICAgICBpZiAo
bmV3SGVpZ2h0ICE9IGhlaWdodCgpKQorICAgICAgICAgICAgc2V0SGVpZ2h0KG5ld0hlaWdodCk7
CisgICAgICAgIG1hcmdpbkluZm8uc2V0Qm90dG9tUXVpcmsodHJ1ZSk7IC8vIENhdXNlIG1hcmdp
bnMgdG8gYmUgZGlzY2FyZGVkIGZvciBhbnkgZm9sbG93aW5nIGNvbnRlbnQuCisgICAgfQorCiAg
ICAgQVNTRVJUKG9sZExheW91dERlbHRhID09IHZpZXcoKS0+bGF5b3V0RGVsdGEoKSk7CiB9CiAK
QEAgLTE4ODksNiArMTk0OCw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmxheW91dE9ubHlQb3NpdGlv
bmVkT2IKIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRPYmplY3RzKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbikKIHsKICAgICBpZiAobV9wb3NpdGlvbmVkT2JqZWN0cykgeworICAgICAg
ICBpZiAoaGFzQ29sdW1ucygpKQorICAgICAgICAgICAgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5j
bGVhclBhZ2luYXRpb25JbmZvcm1hdGlvbigpOyAvLyBQb3NpdGlvbmVkIG9iamVjdHMgYXJlIG5v
dCBwYXJ0IG9mIHRoZSBjb2x1bW4gZmxvdywgc28gdGhleSBkb24ndCBwYWdpbmF0ZSB3aXRoIHRo
ZSBjb2x1bW5zLgorCiAgICAgICAgIFJlbmRlckJveCogcjsKICAgICAgICAgSXRlcmF0b3IgZW5k
ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQg
PSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKQEAgLTE5
MTAsNiArMTk3Miw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRPYmplY3QK
ICAgICAgICAgICAgICAgICByLT50cnlMYXlvdXREb2luZ1Bvc2l0aW9uZWRNb3ZlbWVudE9ubHko
KTsKICAgICAgICAgICAgIHItPmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChoYXNDb2x1bW5zKCkpCisgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0
YXRlKCktPm1fY29sdW1uSW5mbyA9IGNvbHVtbkluZm8oKTsgLy8gRklYTUU6IEtpbmQgb2YgZ3Jv
c3MuIFdlIGp1c3QgcHV0IHRoaXMgYmFjayBpbnRvIHRoZSBsYXlvdXQgc3RhdGUgc28gdGhhdCBw
b3AoKSB3aWxsIHdvcmsuCiAgICAgfQogfQogCkBAIC0xOTk3LDEyICsyMDYyLDEyIEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uUnVsZXMoUGFpbnQKIAogICAgIC8vIFdlIG5lZWQgdG8g
ZG8gbXVsdGlwbGUgcGFzc2VzLCBicmVha2luZyB1cCBvdXIgY2hpbGQgcGFpbnRpbmcgaW50byBz
dHJpcHMuCiAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICB1bnNp
Z25lZCBjb2xDb3VudCA9IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7CisgICAgdW5zaWduZWQgY29s
Q291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsKICAgICBpbnQgY3VyclhPZmZzZXQgPSBzdHls
ZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAwIDogY29udGVudFdpZHRoKCk7CiAgICAgaW50IHJ1
bGVBZGQgPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwogICAgIGludCBydWxlWCA9IHN0
eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IDAgOiBjb250ZW50V2lkdGgoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykgewotICAgICAgICBJbnRSZWN0IGNv
bFJlY3QgPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVj
dCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKIAogICAgICAgICAvLyBNb3ZlIHRvIHRoZSBu
ZXh0IHBvc2l0aW9uLgogICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7
CkBAIC0yMDMzLDE0ICsyMDk4LDE0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uQ29u
dGVudHMoUGEKICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4
dDsKICAgICBpbnQgY29sR2FwID0gY29sdW1uR2FwKCk7CiAgICAgQ29sdW1uSW5mbyogY29sSW5m
byA9IGNvbHVtbkluZm8oKTsKLSAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbEluZm8tPmNvbHVt
bkNvdW50KCk7CisgICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsK
ICAgICBpZiAoIWNvbENvdW50KQogICAgICAgICByZXR1cm47Ci0gICAgaW50IGN1cnJYT2Zmc2V0
ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gMCA6IGNvbnRlbnRXaWR0aCgpIC0gY29s
SW5mby0+Y29sdW1uUmVjdEF0KDApLndpZHRoKCk7CisgICAgaW50IGN1cnJYT2Zmc2V0ID0gc3R5
bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gMCA6IGNvbnRlbnRXaWR0aCgpIC0gY29sdW1uUmVj
dEF0KGNvbEluZm8sIDApLndpZHRoKCk7CiAgICAgaW50IGN1cnJZT2Zmc2V0ID0gMDsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykgewogICAgICAgICAvLyBGb3Ig
ZWFjaCByZWN0LCB3ZSBjbGlwIHRvIHRoZSByZWN0LCBhbmQgdGhlbiB3ZSBhZGp1c3Qgb3VyIGNv
b3Jkcy4KLSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0KGkp
OworICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAg
ICAgICAgIGNvbFJlY3QubW92ZSh0eCwgdHkpOwogICAgICAgICBQYWludEluZm8gaW5mbyhwYWlu
dEluZm8pOwogICAgICAgICBpbmZvLnJlY3QuaW50ZXJzZWN0KGNvbFJlY3QpOwpAQCAtMjA5OCwx
NCArMjE2MywxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mCiAg
ICAgaW5mby51cGRhdGVQYWludGluZ1Jvb3RGb3JDaGlsZHJlbih0aGlzKTsKICAgICAKICAgICBS
ZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdmlldygpOwotICAgIGJvb2wgdXNlUHJpbnRSZWN0ID0g
IXJlbmRlclZpZXctPnByaW50UmVjdCgpLmlzRW1wdHkoKSAmJiAhZG9jdW1lbnQoKS0+c2V0dGlu
Z3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7CisgICAgYm9vbCB1c2VQcmludFJl
Y3QgPSAhcmVuZGVyVmlldy0+cHJpbnRSZWN0KCkuaXNFbXB0eSgpOwogICAgIAogICAgIGJvb2wg
Y2hlY2tQYWdlQnJlYWtzID0gZG9jdW1lbnQoKS0+cGFnaW5hdGVkKCkgJiYgIWRvY3VtZW50KCkt
PnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOwotICAgIGJvb2wgY2hl
Y2tDb2x1bW5CcmVha3MgPSAhY2hlY2tQYWdlQnJlYWtzICYmIHVzZVByaW50UmVjdDsKIAogICAg
IGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsgICAgICAgIAogICAgICAgICAvLyBDaGVjayBmb3Ig
cGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cywgYW5kIGlmIGl0J3Mgc2V0LCBicmVhayBhbmQgYmFp
bC4KLSAgICAgICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYm
ICgoY2hlY2tQYWdlQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtCZWZvcmUoKSA9
PSBQQkFMV0FZUykgfHwgKGNoZWNrQ29sdW1uQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5jb2x1
bW5CcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKSk7CisgICAgICAgIGJvb2wgY2hlY2tCZWZvcmVB
bHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAoY2hlY2tQYWdlQnJlYWtzICYmIGNoaWxkLT5z
dHlsZSgpLT5wYWdlQnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUyk7CiAgICAgICAgIGlmIChjaGVj
a0JlZm9yZUFsd2F5cwogICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSkgPiBwYWludElu
Zm8ucmVjdC55KCkKICAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkpIDwgcGFpbnRJbmZv
LnJlY3QuYm90dG9tKCkpIHsKQEAgLTIxMjgsNyArMjE5Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKICAgICAgICAgICAgIGNoaWxkLT5wYWludChpbmZvLCB0
eCwgdHkpOwogCiAgICAgICAgIC8vIENoZWNrIGZvciBwYWdlLWJyZWFrLWFmdGVyOiBhbHdheXMs
IGFuZCBpZiBpdCdzIHNldCwgYnJlYWsgYW5kIGJhaWwuCi0gICAgICAgIGJvb2wgY2hlY2tBZnRl
ckFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYmICgoY2hlY2tQYWdlQnJlYWtzICYmIGNoaWxk
LT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tDb2x1bW5C
cmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUykp
OworICAgICAgICBib29sIGNoZWNrQWZ0ZXJBbHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAo
Y2hlY2tQYWdlQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRlcigpID09IFBC
QUxXQVlTKTsKICAgICAgICAgaWYgKGNoZWNrQWZ0ZXJBbHdheXMKICAgICAgICAgICAgICYmICh0
eSArIGNoaWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkpID4gcGFpbnRJbmZvLnJlY3QueSgpCiAg
ICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpICsgY2hpbGQtPmhlaWdodCgpKSA8IHBhaW50
SW5mby5yZWN0LmJvdHRvbSgpKSB7CkBAIC0zMTU4LDggKzMyMjIsOCBAQCBpbnQgUmVuZGVyQmxv
Y2s6Omxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jCiAKICAgICBpZiAoaGFzQ29sdW1ucygpKSB7CiAg
ICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOyBpKyspCi0gICAgICAg
ICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSkuYm90dG9t
KCkgKyByZWxhdGl2ZU9mZnNldCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b2x1bW5Db3VudChjb2xJbmZvKTsgaSsrKQorICAgICAgICAgICAgYm90dG9tID0gbWF4KGJvdHRv
bSwgY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpLmJvdHRvbSgpICsgcmVsYXRpdmVPZmZzZXQpOwog
ICAgICAgICByZXR1cm4gYm90dG9tOwogICAgIH0KIApAQCAtMzI1Myw4ICszMzE3LDkgQEAgaW50
IFJlbmRlckJsb2NrOjpyaWdodG1vc3RQb3NpdGlvbihib29sIAogICAgICAgICAvLyBUaGlzIG9u
bHkgbWF0dGVycyBmb3IgTFRSCiAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBM
VFIpIHsKICAgICAgICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0g
ICAgICAgICAgICBpZiAoY29sSW5mby0+Y29sdW1uQ291bnQoKSkKLSAgICAgICAgICAgICAgICBy
aWdodCA9IG1heChjb2xJbmZvLT5jb2x1bW5SZWN0QXQoY29sSW5mby0+Y29sdW1uQ291bnQoKSAt
IDEpLnJpZ2h0KCkgKyByZWxhdGl2ZU9mZnNldCwgcmlnaHQpOworICAgICAgICAgICAgdW5zaWdu
ZWQgY291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsKKyAgICAgICAgICAgIGlmIChjb3VudCkK
KyAgICAgICAgICAgICAgICByaWdodCA9IG1heChjb2x1bW5SZWN0QXQoY29sSW5mbywgY291bnQg
LSAxKS5yaWdodCgpICsgcmVsYXRpdmVPZmZzZXQsIHJpZ2h0KTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gcmlnaHQ7CiAgICAgfQpAQCAtMzM1Myw4ICszNDE4LDkgQEAgaW50IFJlbmRlckJs
b2NrOjpsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaQogICAgICAgICAvLyBUaGlzIG9ubHkgbWF0dGVy
cyBmb3IgUlRMCiAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpIHsKICAg
ICAgICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgICAgICAg
ICBpZiAoY29sSW5mby0+Y29sdW1uQ291bnQoKSkKLSAgICAgICAgICAgICAgICBsZWZ0ID0gbWlu
KGNvbEluZm8tPmNvbHVtblJlY3RBdChjb2xJbmZvLT5jb2x1bW5Db3VudCgpIC0gMSkueCgpICsg
cmVsYXRpdmVPZmZzZXQsIGxlZnQpOworICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSBjb2x1
bW5Db3VudChjb2xJbmZvKTsKKyAgICAgICAgICAgIGlmIChjb3VudCkKKyAgICAgICAgICAgICAg
ICBsZWZ0ID0gbWluKGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb3VudCAtIDEpLngoKSArIHJlbGF0
aXZlT2Zmc2V0LCBsZWZ0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbGVmdDsKICAgICB9
CkBAIC0zNjY0LDMwICszNzMwLDIyIEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5k
YW50c1dpdGgKICAgICB9CiB9CiAKLWludCBSZW5kZXJCbG9jazo6dmlzaWJsZVRvcE9mSGlnaGVz
dEZsb2F0RXh0ZW5kaW5nQmVsb3coaW50IGJvdHRvbSwgaW50IG1heEhlaWdodCkgY29uc3QKK3Zv
aWQgUmVuZGVyQmxvY2s6Om1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoYm9v
bCBpbkxheW91dCkKIHsKLSAgICBpbnQgdG9wID0gYm90dG9tOwotICAgIGlmIChtX2Zsb2F0aW5n
T2JqZWN0cykgewotICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3Q7Ci0gICAg
ICAgIGZvciAoRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1f
ZmxvYXRpbmdPYmplY3RzKTsgKGZsb2F0aW5nT2JqZWN0ID0gaXQuY3VycmVudCgpKTsgKytpdCkg
ewotICAgICAgICAgICAgUmVuZGVyQm94KiBmbG9hdGluZ0JveCA9IGZsb2F0aW5nT2JqZWN0LT5t
X3JlbmRlcmVyOwotICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlT3ZlcmZsb3cgPSBmbG9hdGlu
Z0JveC0+dmlzaWJsZU92ZXJmbG93UmVjdCgpOwotICAgICAgICAgICAgdmlzaWJsZU92ZXJmbG93
Lm1vdmUoZmxvYXRpbmdCb3gtPngoKSwgZmxvYXRpbmdCb3gtPnkoKSk7Ci0gICAgICAgICAgICBp
ZiAodmlzaWJsZU92ZXJmbG93LnkoKSA8IHRvcCAmJiB2aXNpYmxlT3ZlcmZsb3cuYm90dG9tKCkg
PiBib3R0b20gJiYgdmlzaWJsZU92ZXJmbG93LmhlaWdodCgpIDw9IG1heEhlaWdodCAmJiBmbG9h
dGluZ0JveC0+Y29udGFpbmluZ0Jsb2NrKCkgPT0gdGhpcykKLSAgICAgICAgICAgICAgICB0b3Ag
PSB2aXNpYmxlT3ZlcmZsb3cueSgpOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChjaGlsZHJl
bklubGluZSgpKQorICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlLCAhaW5MYXlvdXQpOyAvLyBX
ZSB3YW50IHRvIGZvcmNlIGEgZnVsbCBsaW5lIGxheW91dCB0b28uCisgICAgZWxzZQorICAgICAg
ICBzZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsICFpbkxheW91dCk7CiAKKyAgICAvLyBJdGVyYXRl
IG92ZXIgb3VyIGNoaWxkcmVuIGFuZCBtYXJrIHRoZW0gYXMgbmVlZGVkLgogICAgIGlmICghY2hp
bGRyZW5JbmxpbmUoKSkgewogICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAg
ICAgICBpZiAoY2hpbGQtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSB8fCAhY2hpbGQtPmlzUmVu
ZGVyQmxvY2soKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIFJlbmRl
ckJsb2NrKiBjaGlsZEJsb2NrID0gdG9SZW5kZXJCbG9jayhjaGlsZCk7Ci0gICAgICAgICAgICB0
b3AgPSBtaW4odG9wLCBjaGlsZEJsb2NrLT55KCkgKyBjaGlsZEJsb2NrLT52aXNpYmxlVG9wT2ZI
aWdoZXN0RmxvYXRFeHRlbmRpbmdCZWxvdyhib3R0b20gLSBjaGlsZEJsb2NrLT55KCksIG1heEhl
aWdodCkpOworICAgICAgICAgICAgY2hpbGRCbG9jay0+bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRM
aW5lc0ZvckxheW91dChpbkxheW91dCk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4g
dG9wOwogfQogCiBpbnQgUmVuZGVyQmxvY2s6OmdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGls
ZCwgaW50IHlQb3MpCkBAIC0zODQ3LDE2ICszOTA1LDE2IEBAIGJvb2wgUmVuZGVyQmxvY2s6Omhp
dFRlc3RDb2x1bW5zKGNvbnN0IEgKIHsKICAgICAvLyBXZSBuZWVkIHRvIGRvIG11bHRpcGxlIHBh
c3NlcywgYnJlYWtpbmcgdXAgb3VyIGhpdCB0ZXN0aW5nIGludG8gc3RyaXBzLgogICAgIENvbHVt
bkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgaW50IGNvbENvdW50ID0gY29sSW5m
by0+Y29sdW1uQ291bnQoKTsKKyAgICBpbnQgY29sQ291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZv
KTsKICAgICBpZiAoIWNvbENvdW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW50IGxl
ZnQgPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwogICAgIGludCBjdXJyWU9mZnNldCA9
IDA7CiAgICAgaW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGNvbENvdW50OyBpKyspCi0gICAg
ICAgIGN1cnJZT2Zmc2V0IC09IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKS5oZWlnaHQoKTsKKyAg
ICAgICAgY3VycllPZmZzZXQgLT0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpLmhlaWdodCgpOwog
ICAgIGZvciAoaSA9IGNvbENvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgSW50UmVj
dCBjb2xSZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0KGkpOworICAgICAgICBJbnRSZWN0IGNv
bFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAgICAgIGludCBjdXJyWE9mZnNl
dCA9IGNvbFJlY3QueCgpIC0gbGVmdDsKICAgICAgICAgY3VycllPZmZzZXQgKz0gY29sUmVjdC5o
ZWlnaHQoKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKHR4LCB0eSk7CkBAIC00MTUwLDggKzQyMDgs
NyBAQCB2b2lkIFJlbmRlckJsb2NrOjpzZXREZXNpcmVkQ29sdW1uQ291bnRBCiAgICAgYm9vbCBk
ZXN0cm95Q29sdW1ucyA9ICFmaXJzdENoaWxkKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgKGNvdW50ID09IDEgJiYgc3R5bGUoKS0+aGFzQXV0b0NvbHVtbldpZHRoKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IGZpcnN0Q2hpbGQoKS0+aXNBbm9ueW1vdXNDb2x1bW5zQmxv
Y2soKQotICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCktPmlzQW5vbnlt
b3VzQ29sdW1uU3BhbkJsb2NrKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZG9jdW1l
bnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IGZpcnN0Q2hpbGQoKS0+aXNBbm9ueW1vdXNDb2x1bW5TcGFu
QmxvY2soKTsKICAgICBpZiAoZGVzdHJveUNvbHVtbnMpIHsKICAgICAgICAgaWYgKGhhc0NvbHVt
bnMoKSkgewogICAgICAgICAgICAgZGVsZXRlIGdDb2x1bW5JbmZvTWFwLT50YWtlKHRoaXMpOwpA
QCAtNDE5NCwxMzMgKzQyNTEsNTggQEAgQ29sdW1uSW5mbyogUmVuZGVyQmxvY2s6OmNvbHVtbklu
Zm8oKSBjbwogICAgIHJldHVybiBnQ29sdW1uSW5mb01hcC0+Z2V0KHRoaXMpOyAgICAKIH0KIAot
aW50IFJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKGludCBlbmRPZkNvbnRlbnQsIGludCByZXF1
ZXN0ZWRDb2x1bW5IZWlnaHQpCit1bnNpZ25lZCBSZW5kZXJCbG9jazo6Y29sdW1uQ291bnQoQ29s
dW1uSW5mbyogY29sSW5mbykgY29uc3QKIHsKLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3
ZSBoYXZlIG5vIGNvbHVtbnMKLSAgICBpZiAoIWhhc0NvbHVtbnMoKSkKLSAgICAgICAgcmV0dXJu
IC0xOworICAgIEFTU0VSVChoYXNDb2x1bW5zKCkgJiYgZ0NvbHVtbkluZm9NYXAtPmdldCh0aGlz
KSA9PSBjb2xJbmZvKTsKKyAgICByZXR1cm4gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKK30KIAot
ICAgIENvbHVtbkluZm8qIGluZm8gPSBnQ29sdW1uSW5mb01hcC0+Z2V0KHRoaXMpOwotICAgIGlu
dCBkZXNpcmVkQ29sdW1uV2lkdGggPSBpbmZvLT5kZXNpcmVkQ29sdW1uV2lkdGgoKTsKLSAgICBp
bnQgZGVzaXJlZENvbHVtbkNvdW50ID0gaW5mby0+ZGVzaXJlZENvbHVtbkNvdW50KCk7Ci0gICAg
Ci0gICAgYm9vbCBjb21wdXRlSW50cmluc2ljSGVpZ2h0ID0gKGVuZE9mQ29udGVudCA9PSAtMSk7
Ci0KLSAgICAvLyBGaWxsIHRoZSBjb2x1bW5zIGluIHRvIHRoZSBhdmFpbGFibGUgaGVpZ2h0LiAg
QXR0ZW1wdCB0byBiYWxhbmNlIHRoZSBoZWlnaHQgb2YgdGhlIGNvbHVtbnMuCi0gICAgLy8gQWRk
IGluIGhhbGYgb3VyIGxpbmUtaGVpZ2h0IHRvIGhlbHAgd2l0aCBiZXN0LWd1ZXNzIGluaXRpYWwg
YmFsYW5jaW5nLgotICAgIGludCBjb2x1bW5TbG9wID0gbGluZUhlaWdodChmYWxzZSkgLyAyOwot
ICAgIGludCByZW1haW5pbmdTbG9wU3BhY2UgPSBjb2x1bW5TbG9wICogZGVzaXJlZENvbHVtbkNv
dW50OwotICAgIGludCBhdmFpbGFibGVIZWlnaHQgPSBjb250ZW50SGVpZ2h0KCk7Ci0gICAgaW50
IGNvbEhlaWdodDsKLSAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCAmJiByZXF1ZXN0ZWRD
b2x1bW5IZWlnaHQgPj0gMCkKLSAgICAgICAgY29sSGVpZ2h0ID0gcmVxdWVzdGVkQ29sdW1uSGVp
Z2h0OwotICAgIGVsc2UgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQpCi0gICAgICAgIGNvbEhl
aWdodCA9IG1pbihhdmFpbGFibGVIZWlnaHQsIGF2YWlsYWJsZUhlaWdodCAvIGRlc2lyZWRDb2x1
bW5Db3VudCArIGNvbHVtblNsb3ApOwotICAgIGVsc2UKLSAgICAgICAgY29sSGVpZ2h0ID0gYXZh
aWxhYmxlSGVpZ2h0OwotICAgIGludCBvcmlnaW5hbENvbEhlaWdodCA9IGNvbEhlaWdodDsKK0lu
dFJlY3QgUmVuZGVyQmxvY2s6OmNvbHVtblJlY3RBdChDb2x1bW5JbmZvKiBjb2xJbmZvLCB1bnNp
Z25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFzQ29sdW1ucygpICYmIGdDb2x1bW5J
bmZvTWFwLT5nZXQodGhpcykgPT0gY29sSW5mbyk7CiAKKyAgICAvLyBDb21wdXRlIHRoZSBhcHBy
b3ByaWF0ZSByZWN0IGJhc2VkIG9mZiBvdXIgaW5mb3JtYXRpb24uCisgICAgaW50IGNvbFdpZHRo
ID0gY29sSW5mby0+ZGVzaXJlZENvbHVtbldpZHRoKCk7CisgICAgaW50IGNvbEhlaWdodCA9IGNv
bEluZm8tPmNvbHVtbkhlaWdodCgpOworICAgIGludCBjb2xUb3AgPSBib3JkZXJUb3AoKSArIHBh
ZGRpbmdUb3AoKTsKICAgICBpbnQgY29sR2FwID0gY29sdW1uR2FwKCk7CisgICAgaW50IGNvbExl
ZnQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAKKyAgICAgICAgICAgICAgICAgICAg
ICBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsgKGluZGV4ICogKGNvbFdpZHRoICsgY29s
R2FwKSkKKyAgICAgICAgICAgICAgICAgICAgICA6IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0
KCkgKyBjb250ZW50V2lkdGgoKSAtIGNvbFdpZHRoIC0gKGluZGV4ICogKGNvbFdpZHRoICsgY29s
R2FwKSk7CisgICAgcmV0dXJuIEludFJlY3QoY29sTGVmdCwgY29sVG9wLCBjb2xXaWR0aCwgY29s
SGVpZ2h0KTsKK30KIAotICAgIC8vIENvbXB1dGUgYSBjb2xsZWN0aW9uIG9mIGNvbHVtbiByZWN0
cy4KLSAgICBpbmZvLT5jbGVhckNvbHVtbnMoKTsKLSAgICAKLSAgICAvLyBUaGVuIHdlIGRvIGEg
c2ltdWxhdGVkICJwYWludCIgaW50byB0aGUgY29sdW1uIHNsaWNlcyBhbmQgYWxsb3cgdGhlIGNv
bnRlbnQgdG8gc2xpZ2h0bHkgYWRqdXN0IG91ciBpbmRpdmlkdWFsIGNvbHVtbiByZWN0cy4KLSAg
ICAvLyBGSVhNRTogV2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCBsYXllcnMgdGhhdCBhcmUg
YWZmZWN0ZWQgYnkgdGhlIGNvbHVtbnMgYXMgd2VsbCBoZXJlIHNvIHRoYXQgdGhleSBjYW4gaGF2
ZSBhbiBvcHBvcnR1bml0eQotICAgIC8vIHRvIGFkanVzdCBjb2x1bW4gcmVjdHMgYWxzby4KLSAg
ICBSZW5kZXJWaWV3KiB2ID0gdmlldygpOwotICAgIGludCBsZWZ0ID0gYm9yZGVyTGVmdCgpICsg
cGFkZGluZ0xlZnQoKTsKLSAgICBpbnQgdG9wID0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7
Ci0gICAgaW50IGN1cnJYID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gYm9yZGVyTGVm
dCgpICsgcGFkZGluZ0xlZnQoKSA6IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgKyBjb250
ZW50V2lkdGgoKSAtIGRlc2lyZWRDb2x1bW5XaWR0aDsKLSAgICBpbnQgY3VyclkgPSB0b3A7Ci0g
ICAgdW5zaWduZWQgY29sQ291bnQgPSBkZXNpcmVkQ29sdW1uQ291bnQ7Ci0gICAgaW50IG1heENv
bEJvdHRvbSA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOwotICAgIGludCBjb250ZW50Qm90
dG9tID0gdG9wICsgYXZhaWxhYmxlSGVpZ2h0OwotICAgIGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0
ID0gLTE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKLSAg
ICAgICAgLy8gSWYgd2UgYXJlbid0IGNvbnN0cmFpbmVkLCB0aGVuIHRoZSBsYXN0IGNvbHVtbiBj
YW4ganVzdCBnZXQgYWxsIHRoZSByZW1haW5pbmcgc3BhY2UuCi0gICAgICAgIGlmIChjb21wdXRl
SW50cmluc2ljSGVpZ2h0ICYmIGkgPT0gY29sQ291bnQgLSAxKQotICAgICAgICAgICAgY29sSGVp
Z2h0ID0gYXZhaWxhYmxlSGVpZ2h0OwotCi0gICAgICAgIC8vIFRoaXMgcmVwcmVzZW50cyB0aGUg
cmVhbCBjb2x1bW4gcG9zaXRpb24uCi0gICAgICAgIEludFJlY3QgY29sUmVjdChjdXJyWCwgdG9w
LCBkZXNpcmVkQ29sdW1uV2lkdGgsIGNvbEhlaWdodCk7Ci0KLSAgICAgICAgaW50IHRydW5jYXRp
b25Qb2ludCA9IHZpc2libGVUb3BPZkhpZ2hlc3RGbG9hdEV4dGVuZGluZ0JlbG93KGN1cnJZICsg
Y29sSGVpZ2h0LCBjb2xIZWlnaHQpOwotCi0gICAgICAgIC8vIEZvciB0aGUgc2ltdWxhdGVkIHBh
aW50LCB3ZSBwcmV0ZW5kIGxpa2UgZXZlcnl0aGluZyBpcyBpbiBvbmUgbG9uZyBzdHJpcC4KLSAg
ICAgICAgSW50UmVjdCBwYWdlUmVjdChsZWZ0LCBjdXJyWSwgY29udGVudFdpZHRoKCksIHRydW5j
YXRpb25Qb2ludCAtIGN1cnJZKTsKLSAgICAgICAgdi0+c2V0UHJpbnRSZWN0KHBhZ2VSZWN0KTsK
LSAgICAgICAgdi0+c2V0VHJ1bmNhdGVkQXQodHJ1bmNhdGlvblBvaW50KTsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQoKFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KikwKTsKLSAgICAg
ICAgUGFpbnRJbmZvIHBhaW50SW5mbygmY29udGV4dCwgcGFnZVJlY3QsIFBhaW50UGhhc2VGb3Jl
Z3JvdW5kLCBmYWxzZSwgMCwgMCk7Citib29sIFJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKGJv
b2wgaGFzU3BlY2lmaWVkUGFnZUhlaWdodCwgaW50IHBhZ2VIZWlnaHQsIExheW91dFN0YXRlTWFp
bnRhaW5lciYgc3RhdGVQdXNoZXIpCit7CisgICAgaWYgKGhhc0NvbHVtbnMoKSkgeworICAgICAg
ICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOworICAgICAgICBpZiAocGFnZUhl
aWdodCkgLy8gRklYTUU6IFNob3VsZCB1c2UgbG93ZXN0UG9zaXRpb24gaW5zdGVhZCBvZiBjb250
ZW50SGVpZ2h0KCksIGJ1dCBuZWVkIHRvIGV4Y2x1ZGUgcG9zaXRpb25lZCBvYmplY3RzLgorICAg
ICAgICAgICAgY29sSW5mby0+c2V0Q29sdW1uQ291bnRBbmRIZWlnaHQoY2VpbGYoKGZsb2F0KWNv
bnRlbnRIZWlnaHQoKSAvIHBhZ2VIZWlnaHQpLCBwYWdlSGVpZ2h0KTsKKyAgICAgICAgaW50IGRl
c2lyZWRDb2x1bW5Db3VudCA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5Db3VudCgpOworICAgICAg
ICBpZiAoIWhhc1NwZWNpZmllZFBhZ2VIZWlnaHQgJiYgY29udGVudEhlaWdodCgpID4gcGFnZUhl
aWdodCAqIGRlc2lyZWRDb2x1bW5Db3VudCkgeworICAgICAgICAgICAgLy8gTm93IHRoYXQgd2Ug
a25vdyB0aGUgaW50cmluc2ljIGhlaWdodCBvZiB0aGUgY29sdW1ucywgd2UgaGF2ZSB0byByZWJh
bGFuY2UgdGhlbS4KKyAgICAgICAgICAgIGludCBjb2x1bW5IZWlnaHQgPSBtYXgoY29sSW5mby0+
bWluaW11bUNvbHVtbkhlaWdodCgpLCAoaW50KWNlaWxmKChmbG9hdCljb250ZW50SGVpZ2h0KCkg
LyBkZXNpcmVkQ29sdW1uQ291bnQpKTsKKyAgICAgICAgICAgIGlmIChjb2x1bW5IZWlnaHQgPiAw
KSB7CisgICAgICAgICAgICAgICAgc3RhdGVQdXNoZXIucG9wKCk7CisgICAgICAgICAgICAgICAg
bGF5b3V0QmxvY2soZmFsc2UsIGNvbHVtbkhlaWdodCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gCiAgICAgICAgIAotICAgICAgICBzZXRI
YXNDb2x1bW5zKGZhbHNlKTsKLSAgICAgICAgcGFpbnRPYmplY3QocGFpbnRJbmZvLCAwLCAwKTsK
LSAgICAgICAgc2V0SGFzQ29sdW1ucyh0cnVlKTsKLQotICAgICAgICBpZiAoY29tcHV0ZUludHJp
bnNpY0hlaWdodCAmJiB2LT5taW5pbXVtQ29sdW1uSGVpZ2h0KCkgPiBvcmlnaW5hbENvbEhlaWdo
dCkgewotICAgICAgICAgICAgLy8gVGhlIGluaXRpYWwgY29sdW1uIGhlaWdodCB3YXMgdG9vIHNt
YWxsIHRvIGNvbnRhaW4gb25lIGxpbmUgb2YgdGV4dC4KLSAgICAgICAgICAgIG1pbmltdW1Db2x1
bW5IZWlnaHQgPSBtYXgobWluaW11bUNvbHVtbkhlaWdodCwgdi0+bWluaW11bUNvbHVtbkhlaWdo
dCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoY29sdW1uQ291bnQoY29sSW5mbykpIHsKKyAg
ICAgICAgICAgIEludFJlY3QgbGFzdFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgY29sdW1u
Q291bnQoY29sSW5mbykgLSAxKTsKKyAgICAgICAgICAgIGludCBvdmVyZmxvd0xlZnQgPSBzdHls
ZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwgPyBtaW4oMCwgbGFzdFJlY3QueCgpKSA6IDA7CisgICAg
ICAgICAgICBpbnQgb3ZlcmZsb3dSaWdodCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/
IG1heCh3aWR0aCgpLCBsYXN0UmVjdC54KCkgKyBsYXN0UmVjdC53aWR0aCgpKSA6IDA7CisgICAg
ICAgICAgICBpbnQgb3ZlcmZsb3dIZWlnaHQgPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSAr
IGNvbEluZm8tPmNvbHVtbkhlaWdodCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRI
ZWlnaHQob3ZlcmZsb3dIZWlnaHQgKyBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20oKSAr
IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSk7CiAKLSAgICAgICAgaW50IGFkanVzdGVkQm90
dG9tID0gdi0+YmVzdFRydW5jYXRlZEF0KCk7Ci0gICAgICAgIGlmIChhZGp1c3RlZEJvdHRvbSA8
PSBjdXJyWSkKLSAgICAgICAgICAgIGFkanVzdGVkQm90dG9tID0gdHJ1bmNhdGlvblBvaW50Owot
ICAgICAgICAKLSAgICAgICAgY29sUmVjdC5zZXRIZWlnaHQoYWRqdXN0ZWRCb3R0b20gLSBjdXJy
WSk7Ci0gICAgICAgIAotICAgICAgICAvLyBBZGQgaW4gdGhlIGxvc3Qgc3BhY2UgdG8gdGhlIHN1
YnNlcXVlbnQgY29sdW1ucy4KLSAgICAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBjcmVhdGUgYSAi
c3RhaXJjYXNlIiBlZmZlY3QgaWYgdGhlcmUgYXJlIGVub3VnaCBjb2x1bW5zLCBidXQgdGhlIGVm
ZmVjdCBzaG91bGQgYmUgcHJldHR5IHN1YnRsZS4KLSAgICAgICAgaWYgKGNvbXB1dGVJbnRyaW5z
aWNIZWlnaHQpIHsKLSAgICAgICAgICAgIGludCBsb3N0U3BhY2UgPSBjb2xIZWlnaHQgLSBjb2xS
ZWN0LmhlaWdodCgpOwotICAgICAgICAgICAgaWYgKGxvc3RTcGFjZSA+IHJlbWFpbmluZ1Nsb3BT
cGFjZSkgewotICAgICAgICAgICAgICAgIC8vIFJlZGVzdHJpYnV0ZSB0aGUgc3BhY2UgYW1vbmcg
dGhlIHJlbWFpbmluZyBjb2x1bW5zLgotICAgICAgICAgICAgICAgIGludCBzcGFjZVRvUmVkaXN0
cmlidXRlID0gbG9zdFNwYWNlIC0gcmVtYWluaW5nU2xvcFNwYWNlOwotICAgICAgICAgICAgICAg
IGludCByZW1haW5pbmdDb2x1bW5zID0gY29sQ291bnQgLSBpICsgMTsKLSAgICAgICAgICAgICAg
ICBjb2xIZWlnaHQgKz0gc3BhY2VUb1JlZGlzdHJpYnV0ZSAvIHJlbWFpbmluZ0NvbHVtbnM7Ci0g
ICAgICAgICAgICB9IAotICAgICAgICAgICAgcmVtYWluaW5nU2xvcFNwYWNlID0gbWF4KDAsIHJl
bWFpbmluZ1Nsb3BTcGFjZSAtIGxvc3RTcGFjZSk7CisgICAgICAgICAgICBtX292ZXJmbG93LmNs
ZWFyKCk7CisgICAgICAgICAgICBhZGRMYXlvdXRPdmVyZmxvdyhJbnRSZWN0KG92ZXJmbG93TGVm
dCwgMCwgb3ZlcmZsb3dSaWdodCAtIG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dIZWlnaHQpKTsKICAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UikKLSAgICAgICAgICAgIGN1cnJYICs9IGRlc2lyZWRDb2x1bW5XaWR0aCArIGNvbEdhcDsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgY3VyclggLT0gKGRlc2lyZWRDb2x1bW5XaWR0aCArIGNv
bEdhcCk7Ci0KLSAgICAgICAgY3VyclkgKz0gY29sUmVjdC5oZWlnaHQoKTsKLSAgICAgICAgYXZh
aWxhYmxlSGVpZ2h0IC09IGNvbFJlY3QuaGVpZ2h0KCk7Ci0KLSAgICAgICAgbWF4Q29sQm90dG9t
ID0gbWF4KGNvbFJlY3QuYm90dG9tKCksIG1heENvbEJvdHRvbSk7Ci0KLSAgICAgICAgaW5mby0+
YWRkQ29sdW1uUmVjdChjb2xSZWN0KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFN0YXJ0IGFkZGlu
ZyBpbiBtb3JlIGNvbHVtbnMgYXMgbG9uZyBhcyB0aGVyZSdzIHN0aWxsIGNvbnRlbnQgbGVmdC4K
LSAgICAgICAgaWYgKGN1cnJZIDwgZW5kT2ZDb250ZW50ICYmIGkgPT0gY29sQ291bnQgLSAxICYm
IChjb21wdXRlSW50cmluc2ljSGVpZ2h0IHx8IGNvbnRlbnRIZWlnaHQoKSkpCi0gICAgICAgICAg
ICBjb2xDb3VudCsrOwogICAgIH0KLQotICAgIGlmIChtaW5pbXVtQ29sdW1uSGVpZ2h0ID49IDAp
IHsKLSAgICAgICAgLy8gSWYgb3JpZ2luYWxDb2xIZWlnaHQgd2FzIHRvbyBzbWFsbCwgd2UgbmVl
ZCB0byB0cnkgdG8gbGF5b3V0IGFnYWluLgotICAgICAgICByZXR1cm4gbGF5b3V0Q29sdW1ucyhl
bmRPZkNvbnRlbnQsIG1pbmltdW1Db2x1bW5IZWlnaHQpOwotICAgIH0KLQotICAgIGludCBvdmVy
Zmxvd1JpZ2h0ID0gbWF4KHdpZHRoKCksIGN1cnJYIC0gY29sR2FwKTsKLSAgICBpbnQgb3ZlcmZs
b3dMZWZ0ID0gbWluKDAsIGN1cnJYICsgZGVzaXJlZENvbHVtbldpZHRoICsgY29sR2FwKTsKLSAg
ICBpbnQgb3ZlcmZsb3dIZWlnaHQgPSBtYXhDb2xCb3R0b207Ci0gICAgaW50IHRvQWRkID0gYm9y
ZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
KCk7Ci0gICAgICAgIAotICAgIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0KQotICAgICAgICBz
ZXRIZWlnaHQobWF4Q29sQm90dG9tICsgdG9BZGQpOwotCi0gICAgbV9vdmVyZmxvdy5jbGVhcigp
OwotICAgIGFkZExheW91dE92ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dMZWZ0LCAwLCBvdmVyZmxv
d1JpZ2h0IC0gb3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0hlaWdodCkpOwotCi0gICAgdi0+c2V0UHJp
bnRSZWN0KEludFJlY3QoKSk7Ci0gICAgdi0+c2V0VHJ1bmNhdGVkQXQoMCk7Ci0gICAgCi0gICAg
QVNTRVJUKGNvbENvdW50ID09IGluZm8tPmNvbHVtbkNvdW50KCkpOwogICAgIAotICAgIHJldHVy
biBjb250ZW50Qm90dG9tOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBSZW5kZXJCbG9j
azo6YWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRzKEludFBvaW50JiBwb2ludCkgY29uc3QKQEAg
LTQzMzAsMTcgKzQzMTIsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVt
bkNvbgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNv
bHVtbkluZm8oKTsKLSAgICBpZiAoIWNvbEluZm8tPmNvbHVtbkNvdW50KCkpCisgICAgaWYgKCFj
b2x1bW5Db3VudChjb2xJbmZvKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRGV0ZXJtaW5l
IHdoaWNoIGNvbHVtbnMgd2UgaW50ZXJzZWN0LgogICAgIGludCBjb2xHYXAgPSBjb2x1bW5HYXAo
KTsKICAgICBpbnQgbGVmdEdhcCA9IGNvbEdhcCAvIDI7Ci0gICAgSW50UG9pbnQgY29sdW1uUG9p
bnQoY29sSW5mby0+Y29sdW1uUmVjdEF0KDApLmxvY2F0aW9uKCkpOworICAgIEludFBvaW50IGNv
bHVtblBvaW50KGNvbHVtblJlY3RBdChjb2xJbmZvLCAwKS5sb2NhdGlvbigpKTsKICAgICBpbnQg
eU9mZnNldCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbEluZm8tPmNvbHVt
bkNvdW50KCk7IGkrKykgewogICAgICAgICAvLyBBZGQgaW4gaGFsZiB0aGUgY29sdW1uIGdhcCB0
byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIHJlY3QuCi0gICAgICAgIEludFJlY3QgY29sUmVj
dCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0g
Y29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBJbnRSZWN0IGdhcEFuZENvbHVtblJl
Y3QoY29sUmVjdC54KCkgLSBsZWZ0R2FwLCBjb2xSZWN0LnkoKSwgY29sUmVjdC53aWR0aCgpICsg
Y29sR2FwLCBjb2xSZWN0LmhlaWdodCgpKTsKIAogICAgICAgICBpZiAocG9pbnQueCgpID49IGdh
cEFuZENvbHVtblJlY3QueCgpICYmIHBvaW50LngoKSA8IGdhcEFuZENvbHVtblJlY3QucmlnaHQo
KSkgewpAQCAtNDM3OCw3ICs0MzYwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UmVjdEZv
ckNvbHVtbnMoSQogICAgIEludFJlY3QgcmVzdWx0OwogICAgIAogICAgIC8vIERldGVybWluZSB3
aGljaCBjb2x1bW5zIHdlIGludGVyc2VjdC4KLSAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbElu
Zm8tPmNvbHVtbkNvdW50KCk7CisgICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2x1bW5Db3VudChj
b2xJbmZvKTsKICAgICBpZiAoIWNvbENvdW50KQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC00
Mzg2LDcgKzQzNjgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29sdW1ucyhJ
CiAgICAgCiAgICAgaW50IGN1cnJZT2Zmc2V0ID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY29sQ291bnQ7IGkrKykgewotICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2xJbmZv
LT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RB
dChjb2xJbmZvLCBpKTsKICAgICAgICAgaW50IGN1cnJYT2Zmc2V0ID0gY29sUmVjdC54KCkgLSBs
ZWZ0OwogICAgICAgICAKICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCA9IHI7CkBAIC00NDEy
LDkgKzQzOTQsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JDb2x1bW5zKEludFNpCiAK
ICAgICBpbnQgbGVmdCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7CiAgICAgaW50IHlP
ZmZzZXQgPSAwOwotICAgIHNpemVfdCBjb2x1bW5Db3VudCA9IGNvbEluZm8tPmNvbHVtbkNvdW50
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgKytpKSB7Ci0gICAg
ICAgIEludFJlY3QgY29sdW1uUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICBz
aXplX3QgY29sQ291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvbENvdW50OyArK2kpIHsKKyAgICAgICAgSW50UmVjdCBjb2x1bW5SZWN0ID0g
Y29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgeE9mZnNldCA9IGNvbHVtblJl
Y3QueCgpIC0gbGVmdDsKICAgICAgICAgaWYgKHBvaW50LnkoKSA8IGNvbHVtblJlY3QuYm90dG9t
KCkgKyB5T2Zmc2V0KSB7CiAgICAgICAgICAgICBvZmZzZXQuZXhwYW5kKHhPZmZzZXQsIC15T2Zm
c2V0KTsKQEAgLTU2NzAsNiArNTY1Miw2OSBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmNy
ZWF0ZUFub255bW91CiAgICAgcmV0dXJuIG5ld0JveDsKIH0KIAoraW50IFJlbmRlckJsb2NrOjpu
ZXh0UGFnZVRvcChpbnQgeVBvcykgY29uc3QKK3sKKyAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3Rh
dGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7CisgICAgaWYgKCFsYXlvdXRTdGF0ZS0+bV9wYWdl
SGVpZ2h0KQorICAgICAgICByZXR1cm4geVBvczsKKyAgICAKKyAgICAvLyBUaGUgeVBvcyBpcyBp
biBvdXIgY29vcmRpbmF0ZSBzcGFjZS4gIFdlIGNhbiBhZGQgaW4gb3VyIHB1c2hlZCBvZmZzZXQu
CisgICAgaW50IHBhZ2VIZWlnaHQgPSBsYXlvdXRTdGF0ZS0+bV9wYWdlSGVpZ2h0OworICAgIGlu
dCByZW1haW5pbmdIZWlnaHQgPSBwYWdlSGVpZ2h0IC0gKChsYXlvdXRTdGF0ZS0+bV9sYXlvdXRP
ZmZzZXQgLSBsYXlvdXRTdGF0ZS0+bV9wYWdlT2Zmc2V0KS5oZWlnaHQoKSArIHlQb3MpICUgcGFn
ZUhlaWdodDsKKyAgICByZXR1cm4geVBvcyArIHJlbWFpbmluZ0hlaWdodDsKK30KKworaW50IFJl
bmRlckJsb2NrOjphcHBseUJlZm9yZUJyZWFrKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zKQor
eworICAgIGJvb2wgY2hlY2tQYWdlQnJlYWtzID0gZG9jdW1lbnQoKS0+cGFnaW5hdGVkKCkgJiYg
ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7Cisg
ICAgYm9vbCBjaGVja0NvbHVtbkJyZWFrcyA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5h
dGluZ0NvbHVtbnMoKTsKKyAgICBib29sIGNoZWNrQmVmb3JlQWx3YXlzID0gKGNoZWNrUGFnZUJy
ZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpIHx8
IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtCZWZvcmUo
KSA9PSBQQkFMV0FZUyk7CisgICAgaWYgKGNoZWNrQmVmb3JlQWx3YXlzKQorICAgICAgICByZXR1
cm4gbmV4dFBhZ2VUb3AoeVBvcyk7CisgICAgcmV0dXJuIHlQb3M7Cit9CisKK2ludCBSZW5kZXJC
bG9jazo6YXBwbHlBZnRlckJyZWFrKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zKQoreworICAg
IGJvb2wgY2hlY2tQYWdlQnJlYWtzID0gZG9jdW1lbnQoKS0+cGFnaW5hdGVkKCkgJiYgZG9jdW1l
bnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7CisgICAgYm9v
bCBjaGVja0NvbHVtbkJyZWFrcyA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGluZ0Nv
bHVtbnMoKTsKKyAgICBib29sIGNoZWNrQWZ0ZXJBbHdheXMgPSAoY2hlY2tQYWdlQnJlYWtzICYm
IGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tD
b2x1bW5CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQWZ0ZXIoKSA9PSBQQkFM
V0FZUyk7CisgICAgaWYgKGNoZWNrQWZ0ZXJBbHdheXMpCisgICAgICAgIHJldHVybiBuZXh0UGFn
ZVRvcCh5UG9zKTsKKyAgICByZXR1cm4geVBvczsKK30KKworaW50IFJlbmRlckJsb2NrOjphZGp1
c3RGb3JVbnNwbGl0dGFibGVDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcykKK3sKKyAg
ICBib29sIGlzVW5zcGxpdHRhYmxlID0gY2hpbGQtPmlzUmVwbGFjZWQoKSB8fCBjaGlsZC0+c2Ny
b2xsc092ZXJmbG93KCk7CisgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5s
YXlvdXRTdGF0ZSgpOworICAgIGlmIChpc1Vuc3BsaXR0YWJsZSAmJiBsYXlvdXRTdGF0ZS0+bV9j
b2x1bW5JbmZvKQorICAgICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51cGRhdGVNaW5p
bXVtQ29sdW1uSGVpZ2h0KGNoaWxkLT5oZWlnaHQoKSk7CisgICAgaW50IHBhZ2VIZWlnaHQgPSBs
YXlvdXRTdGF0ZS0+bV9wYWdlSGVpZ2h0OworICAgIGlmICghaXNVbnNwbGl0dGFibGUgfHwgIXBh
Z2VIZWlnaHQgfHwgY2hpbGQtPmhlaWdodCgpID4gcGFnZUhlaWdodCkKKyAgICAgICAgcmV0dXJu
IHlQb3M7CisgICAgaW50IHJlbWFpbmluZ0hlaWdodCA9IHBhZ2VIZWlnaHQgLSAoKGxheW91dFN0
YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRlLT5tX3BhZ2VPZmZzZXQpLmhlaWdodCgp
ICsgeVBvcykgJSBwYWdlSGVpZ2h0OworICAgIGlmIChyZW1haW5pbmdIZWlnaHQgPCBjaGlsZC0+
aGVpZ2h0KCkpCisgICAgICAgIHJldHVybiB5UG9zICsgcmVtYWluaW5nSGVpZ2h0OworICAgIHJl
dHVybiB5UG9zOworfQorCit2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RMaW5lUG9zaXRpb25Gb3JQ
YWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIGludCYgZGVsdGEpCit7CisgICAgTGF5
b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOworICAgIGludCBw
YWdlSGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodDsKKyAgICBpbnQgeVBvcyA9IGxp
bmVCb3gtPnRvcFZpc2libGVPdmVyZmxvdygpOworICAgIGludCBsaW5lSGVpZ2h0ID0gbGluZUJv
eC0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkgLSB5UG9zOworICAgIGlmIChsYXlvdXRTdGF0ZS0+
bV9jb2x1bW5JbmZvKQorICAgICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51cGRhdGVN
aW5pbXVtQ29sdW1uSGVpZ2h0KGxpbmVIZWlnaHQpOworICAgIHlQb3MgKz0gZGVsdGE7CisgICAg
aWYgKCFwYWdlSGVpZ2h0IHx8IGxpbmVIZWlnaHQgPiBwYWdlSGVpZ2h0KQorICAgICAgICByZXR1
cm47CisgICAgaW50IHJlbWFpbmluZ0hlaWdodCA9IHBhZ2VIZWlnaHQgLSAoKGxheW91dFN0YXRl
LT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRlLT5tX3BhZ2VPZmZzZXQpLmhlaWdodCgpICsg
eVBvcykgJSBwYWdlSGVpZ2h0OworICAgIGlmIChyZW1haW5pbmdIZWlnaHQgPCBsaW5lSGVpZ2h0
KQorICAgICAgICBkZWx0YSArPSByZW1haW5pbmdIZWlnaHQ7Cit9CisgCiBjb25zdCBjaGFyKiBS
ZW5kZXJCbG9jazo6cmVuZGVyTmFtZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzQm9keSgpKQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiA2NjkwMykKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb2x1bW5JbmZvOwogY2xhc3MgSW5saW5lSXRlcmF0
b3I7CitjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXI7CiBjbGFzcyBSZW5kZXJJbmxpbmU7CiAK
IHN0cnVjdCBCaWRpUnVuOwpAQCAtNzAsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3Jl
Q2hpbGQgPSAwKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Kik7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuKTsK
KyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQg
cGFnZUhlaWdodCA9IDApOwogCiAgICAgdm9pZCBpbnNlcnRQb3NpdGlvbmVkT2JqZWN0KFJlbmRl
ckJveCopOwogICAgIHZvaWQgcmVtb3ZlUG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gqKTsKQEAg
LTg5LDYgKzkwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBtYXJrQWxsRGVzY2VuZGFudHNXaXRo
RmxvYXRzRm9yTGF5b3V0KFJlbmRlckJveCogZmxvYXRUb1JlbW92ZSA9IDAsIGJvb2wgaW5MYXlv
dXQgPSB0cnVlKTsKICAgICB2b2lkIG1hcmtQb3NpdGlvbmVkT2JqZWN0c0ZvckxheW91dCgpOwor
ICAgIHZvaWQgbWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dChib29sIGluTGF5
b3V0ID0gdHJ1ZSk7CiAKICAgICBib29sIGNvbnRhaW5zRmxvYXRzKCkgeyByZXR1cm4gbV9mbG9h
dGluZ09iamVjdHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5pc0VtcHR5KCk7IH0KICAgICBib29s
IGNvbnRhaW5zRmxvYXQoUmVuZGVyT2JqZWN0Kik7CkBAIC0xNTEsNiArMTUzLDEwIEBAIHB1Ymxp
YzoKIAogICAgIENvbHVtbkluZm8qIGNvbHVtbkluZm8oKSBjb25zdDsKICAgICBpbnQgY29sdW1u
R2FwKCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhlc2UgdHdvIGZ1bmN0aW9ucyB0YWtlIHRoZSBD
b2x1bW5JbmZvKiB0byBhdm9pZCByZXBlYXRlZCBsb29rdXBzIG9mIHRoZSBpbmZvIGluIHRoZSBn
bG9iYWwgSGFzaE1hcC4KKyAgICB1bnNpZ25lZCBjb2x1bW5Db3VudChDb2x1bW5JbmZvKikgY29u
c3Q7CisgICAgSW50UmVjdCBjb2x1bW5SZWN0QXQoQ29sdW1uSW5mbyosIHVuc2lnbmVkKSBjb25z
dDsKIAogcHJvdGVjdGVkOgogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSB1c2VkIGlu
dGVybmFsbHkgdG8gbWFuaXB1bGF0ZSB0aGUgcmVuZGVyIHRyZWUgc3RydWN0dXJlIHZpYSByZW1v
dmUvaW5zZXJ0L2FwcGVuZENoaWxkTm9kZS4KQEAgLTI5Nyw3ICszMDMsOCBAQCBwcml2YXRlOgog
CiAgICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMnIGltcGxlbWVudGF0aW9ucyBhcmUgaW4g
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcC4KICAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVT
dGFydFBvc2l0aW9uKGJvb2wmIGZpcnN0TGluZSwgYm9vbCYgZnVsbExheW91dCwgYm9vbCYgcHJl
dmlvdXNMaW5lQnJva2VDbGVhbmx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW5saW5lQmlkaVJlc29sdmVyJiwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9h
dHMsIHVuc2lnbmVkJiBudW1DbGVhbkZsb2F0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXImLCBWZWN0b3I8RmxvYXRXaXRoUmVj
dD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgdXNlUmVwYWludEJvdW5kcywgaW50JiByZXBh
aW50VG9wLCBpbnQmIHJlcGFpbnRCb3R0b20pOwogICAgIFJvb3RJbmxpbmVCb3gqIGRldGVybWlu
ZUVuZFBvc2l0aW9uKFJvb3RJbmxpbmVCb3gqIHN0YXJ0Qm94LCBJbmxpbmVJdGVyYXRvciYgY2xl
YW5MaW5lU3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlk
aVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQmIHlQb3MpOwpAQCAtNDE2LDggKzQyMyw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBvZmZzZXRGb3JDb250ZW50cyhpbnQmIHR4LCBpbnQmIHR5KSBjb25zdDsKIAogICAg
IHZvaWQgY2FsY0NvbHVtbldpZHRoKCk7Ci0gICAgaW50IGxheW91dENvbHVtbnMoaW50IGVuZE9m
Q29udGVudCA9IC0xLCBpbnQgcmVxdWVzdGVkQ29sdW1uSGVpZ2h0ID0gLTEpOwotICAgIGludCB2
aXNpYmxlVG9wT2ZIaWdoZXN0RmxvYXRFeHRlbmRpbmdCZWxvdyhpbnQgYm90dG9tLCBpbnQgbWF4
SGVpZ2h0KSBjb25zdDsKKyAgICBib29sIGxheW91dENvbHVtbnMoYm9vbCBoYXNTcGVjaWZpZWRQ
YWdlSGVpZ2h0LCBpbnQgcGFnZUhlaWdodCwgTGF5b3V0U3RhdGVNYWludGFpbmVyJik7CiAgICAg
dm9pZCBtYWtlQ2hpbGRyZW5Bbm9ueW1vdXNDb2x1bW5CbG9ja3MoUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCwgUmVuZGVyQmxvY2sqIG5ld0Jsb2NrQm94LCBSZW5kZXJPYmplY3QqIG5ld0NoaWxk
KTsKIAogICAgIGJvb2wgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkgY29uc3Q7
CkBAIC00MzQsNiArNDQwLDEyIEBAIHByaXZhdGU6CiAgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5p
bmdDb2x1bW5zQmxvY2soYm9vbCBhbGxvd0Fub255bW91c0NvbHVtbkJsb2NrID0gdHJ1ZSk7CiAg
ICAgUmVuZGVyQmxvY2sqIGNvbHVtbnNCbG9ja0ZvclNwYW5uaW5nRWxlbWVudChSZW5kZXJPYmpl
Y3QqIG5ld0NoaWxkKTsKICAgICAKKyAgICAvLyBQYWdpbmF0aW9uIHJvdXRpbmVzLgorICAgIGlu
dCBuZXh0UGFnZVRvcChpbnQgeVBvcykgY29uc3Q7IC8vIFJldHVybnMgdGhlIHRvcCBvZiB0aGUg
bmV4dCBwYWdlIGZvbGxvd2luZyB5UG9zLgorICAgIGludCBhcHBseUJlZm9yZUJyZWFrKFJlbmRl
ckJveCogY2hpbGQsIGludCB5UG9zKTsgLy8gSWYgdGhlIGNoaWxkIGhhcyBhIGJlZm9yZSBicmVh
aywgdGhlbiByZXR1cm4gYSBuZXcgeVBvcyB0aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRoZSBu
ZXh0IHBhZ2UvY29sdW1uLgorICAgIGludCBhcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94KiBjaGls
ZCwgaW50IHlQb3MpOyAvLyBJZiB0aGUgY2hpbGQgaGFzIGFuIGFmdGVyIGJyZWFrLCB0aGVuIHJl
dHVybiBhIG5ldyB5UG9zIHRoYXQgc2hpZnRzIHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9j
b2x1bW4uCisgICAgaW50IGFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKFJlbmRlckJveCogY2hp
bGQsIGludCB5UG9zKTsgLy8gSWYgdGhlIGNoaWxkIGlzIHVuc3BsaXR0YWJsZSBhbmQgY2FuJ3Qg
Zml0IG9uIHRoZSBjdXJyZW50IHBhZ2UsIHJldHVybiB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2Uv
Y29sdW1uLgorICAgIHZvaWQgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihSb290SW5s
aW5lQm94KiwgaW50JiBkZWx0YVkpOyAvLyBDb21wdXRlcyBhIGRlbHRhWSB2YWx1ZSB0aGF0IHB1
dCBhIGxpbmUgYXQgdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlIGlmIGl0IGRvZXNuJ3QgZml0IG9u
IHRoZSBjdXJyZW50IHBhZ2UuCiAgICAgc3RydWN0IEZsb2F0aW5nT2JqZWN0IDogTm9uY29weWFi
bGUgewogICAgICAgICBlbnVtIFR5cGUgewogICAgICAgICAgICAgRmxvYXRMZWZ0LApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiA2
Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgog
I2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVC
b3guaCIKICNpbmNsdWRlICJicmVha19saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxp
bmUuaD4KQEAgLTU5NCw3ICs1OTUsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVD
aGlsZHJlbihiCiAgICAgICAgIHVuc2lnbmVkIGZsb2F0SW5kZXg7CiAgICAgICAgIGJvb2wgZmly
c3RMaW5lID0gdHJ1ZTsKICAgICAgICAgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkgPSB0
cnVlOwotICAgICAgICBSb290SW5saW5lQm94KiBzdGFydExpbmUgPSBkZXRlcm1pbmVTdGFydFBv
c2l0aW9uKGZpcnN0TGluZSwgZnVsbExheW91dCwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCBy
ZXNvbHZlciwgZmxvYXRzLCBmbG9hdEluZGV4KTsKKyAgICAgICAgUm9vdElubGluZUJveCogc3Rh
cnRMaW5lID0gZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihmaXJzdExpbmUsIGZ1bGxMYXlvdXQsIHBy
ZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgcmVzb2x2ZXIsIGZsb2F0cywgZmxvYXRJbmRleCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
c2VSZXBhaW50Qm91bmRzLCByZXBhaW50VG9wLCByZXBhaW50Qm90dG9tKTsKIAogICAgICAgICBp
ZiAoZnVsbExheW91dCAmJiBoYXNJbmxpbmVDaGlsZCAmJiAhc2VsZk5lZWRzTGF5b3V0KCkpIHsK
ICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsgIC8vIE1hcmsgb3Vyc2Vs
dmVzIGFzIG5lZWRpbmcgYSBmdWxsIGxheW91dC4gVGhpcyB3YXkgd2UnbGwgcmVwYWludCBsaWtl
CkBAIC02MjIsOSArNjI0LDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxk
cmVuKGIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBkZXRlcm1pbmVFbmRQ
b3NpdGlvbihzdGFydExpbmUsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzLCBl
bmRMaW5lWVBvcyk7CiAKICAgICAgICAgaWYgKHN0YXJ0TGluZSkgewotICAgICAgICAgICAgdXNl
UmVwYWludEJvdW5kcyA9IHRydWU7Ci0gICAgICAgICAgICByZXBhaW50VG9wID0gaGVpZ2h0KCk7
Ci0gICAgICAgICAgICByZXBhaW50Qm90dG9tID0gaGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAo
IXVzZVJlcGFpbnRCb3VuZHMpIHsKKyAgICAgICAgICAgICAgICB1c2VSZXBhaW50Qm91bmRzID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICByZXBhaW50VG9wID0gaGVpZ2h0KCk7CisgICAgICAgICAg
ICAgICAgcmVwYWludEJvdHRvbSA9IGhlaWdodCgpOworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgUmVuZGVyQXJlbmEqIGFyZW5hID0gcmVuZGVyQXJlbmEoKTsKICAgICAgICAgICAgIFJvb3RJ
bmxpbmVCb3gqIGJveCA9IHN0YXJ0TGluZTsKICAgICAgICAgICAgIHdoaWxlIChib3gpIHsKQEAg
LTY1OSw2ICs2NjMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihi
CiAgICAgICAgIGJvb2wgY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUgPSBmYWxzZTsKIAogICAg
ICAgICBib29sIGlzTGluZUVtcHR5ID0gdHJ1ZTsKKyAgICAgICAgYm9vbCBwYWdpbmF0ZWQgPSB2
aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRlZCgpOwogCiAgICAgICAgIHdoaWxlICghZW5k
LmF0RW5kKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlzIGNoZWNrIG5lY2Vzc2Fy
eSBiZWZvcmUgdGhlIGZpcnN0IGl0ZXJhdGlvbiBvciBjYW4gaXQgYmUgbW92ZWQgdG8gdGhlIGVu
ZD8KQEAgLTc4Niw2ICs3OTEsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hp
bGRyZW4oYgogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYWludFRvcCA9IG1pbihyZXBhaW50
VG9wLCBsaW5lQm94LT50b3BWaXNpYmxlT3ZlcmZsb3coKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXBhaW50Qm90dG9tID0gbWF4KHJlcGFpbnRCb3R0b20sIGxpbmVCb3gtPmJvdHRvbVZp
c2libGVPdmVyZmxvdygpKTsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGFkanVzdG1lbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAg
YWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lQm94LCBhZGp1c3RtZW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGp1c3RtZW50KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGluZUJveC0+YWRqdXN0UG9zaXRpb24oMCwgYWRqdXN0bWVudCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZVJlcGFpbnRCb3VuZHMpIC8vIFRoaXMgY2Fu
IG9ubHkgYmUgYSBwb3NpdGl2ZSBhZGp1c3RtZW50LCBzbyBubyBuZWVkIHRvIHVwZGF0ZSByZXBh
aW50VG9wLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50Qm90dG9tID0g
bWF4KHJlcGFpbnRCb3R0b20sIGxpbmVCb3gtPmJvdHRvbVZpc2libGVPdmVyZmxvdygpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRIZWlnaHQobGluZUJveC0+YmxvY2tIZWlnaHQo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBmaXJzdExpbmUgPSBmYWxzZTsKQEAg
LTgyMCw2ICs4MzYsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihi
CiAgICAgICAgICAgICAgICAgaW50IGRlbHRhID0gaGVpZ2h0KCkgLSBlbmRMaW5lWVBvczsKICAg
ICAgICAgICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBlbmRMaW5lOyBsaW5lOyBs
aW5lID0gbGluZS0+bmV4dFJvb3RCb3goKSkgewogICAgICAgICAgICAgICAgICAgICBsaW5lLT5h
dHRhY2hMaW5lKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQpCisgICAgICAg
ICAgICAgICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKGxpbmUsIGRl
bHRhKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXBhaW50VG9wID0gbWluKHJlcGFpbnRUb3AsIGxpbmUtPnRvcFZpc2libGVPdmVy
ZmxvdygpICsgbWluKGRlbHRhLCAwKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50
Qm90dG9tID0gbWF4KHJlcGFpbnRCb3R0b20sIGxpbmUtPmJvdHRvbVZpc2libGVPdmVyZmxvdygp
ICsgbWF4KGRlbHRhLCAwKSk7CkBAIC05MDAsNyArOTE4LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogfQogCiBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6
ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihib29sJiBmaXJzdExpbmUsIGJvb2wmIGZ1bGxMYXlvdXQs
IGJvb2wmIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVy
LCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRz
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5s
aW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMs
IHVuc2lnbmVkJiBudW1DbGVhbkZsb2F0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIHVzZVJlcGFpbnRCb3VuZHMsIGludCYgcmVwYWlu
dFRvcCwgaW50JiByZXBhaW50Qm90dG9tKQogewogICAgIFJvb3RJbmxpbmVCb3gqIGN1cnIgPSAw
OwogICAgIFJvb3RJbmxpbmVCb3gqIGxhc3QgPSAwOwpAQCAtOTcyLDYgKzk5MSwyMiBAQCBSb290
SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhCiAgICAgICAgIGxhc3QgPSBjdXJy
ID8gY3Vyci0+cHJldlJvb3RCb3goKSA6IGxhc3RSb290Qm94KCk7CiAgICAgfQogCisgICAgLy8g
UGFnaW5hdGUgYWxsIG9mIHRoZSBjbGVhbiBsaW5lcy4KKyAgICBib29sIHBhZ2luYXRlZCA9IHZp
ZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVkKCk7CisgICAgaWYgKHBhZ2luYXRlZCkgewor
ICAgICAgICBpbnQgZGVsdGEgPSAwOworICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGxpbmVC
b3ggPSBmaXJzdFJvb3RCb3goKTsgbGluZUJveCAhPSBjdXJyOyBsaW5lQm94ID0gbGluZUJveC0+
bmV4dFJvb3RCb3goKSkgeworICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5h
dGlvbihsaW5lQm94LCBkZWx0YSk7CisgICAgICAgICAgICBpZiAoZGVsdGEpIHsKKyAgICAgICAg
ICAgICAgICBsaW5lQm94LT5hZGp1c3RQb3NpdGlvbigwLCBkZWx0YSk7CisgICAgICAgICAgICAg
ICAgaWYgKCF1c2VSZXBhaW50Qm91bmRzKQorICAgICAgICAgICAgICAgICAgICB1c2VSZXBhaW50
Qm91bmRzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXBhaW50VG9wID0gbWluKHJlcGFpbnRU
b3AsIGxpbmVCb3gtPnRvcFZpc2libGVPdmVyZmxvdygpKTsKKyAgICAgICAgICAgICAgICByZXBh
aW50Qm90dG9tID0gbWF4KHJlcGFpbnRCb3R0b20sIGxpbmVCb3gtPmJvdHRvbVZpc2libGVPdmVy
ZmxvdygpICsgZGVsdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAg
bnVtQ2xlYW5GbG9hdHMgPSAwOwogICAgIGlmICghZmxvYXRzLmlzRW1wdHkoKSkgewogICAgICAg
ICBpbnQgc2F2ZWRIZWlnaHQgPSBoZWlnaHQoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NzMsNyArOTczLDcgQEAgdm9pZCBSZW5kZXJCb3g6Om1hcExvY2Fs
VG9Db250YWluZXIoUmVuZAogICAgIGlmIChSZW5kZXJWaWV3KiB2ID0gdmlldygpKSB7CiAgICAg
ICAgIGlmICh2LT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSAmJiAhcmVwYWludENvbnRhaW5lcikgewog
ICAgICAgICAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0U3RhdGUoKTsK
LSAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1fb2Zmc2V0OworICAg
ICAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBsYXlvdXRTdGF0ZS0+bV9wYWludE9mZnNldDsKICAg
ICAgICAgICAgIG9mZnNldC5leHBhbmQoeCgpLCB5KCkpOwogICAgICAgICAgICAgaWYgKHN0eWxl
KCktPnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBsYXllcigpKQogICAgICAgICAg
ICAgICAgIG9mZnNldCArPSBsYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CkBAIC0x
MTcwLDcgKzExNzAsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJl
CiAgICAgICAgICAgICAgICAgcmVjdC5tb3ZlKGxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZz
ZXQoKSk7CiAKICAgICAgICAgICAgIHJlY3QubW92ZSh4KCksIHkoKSk7Ci0gICAgICAgICAgICBy
ZWN0Lm1vdmUobGF5b3V0U3RhdGUtPm1fb2Zmc2V0KTsKKyAgICAgICAgICAgIHJlY3QubW92ZShs
YXlvdXRTdGF0ZS0+bV9wYWludE9mZnNldCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUt
Pm1fY2xpcHBlZCkKICAgICAgICAgICAgICAgICByZWN0LmludGVyc2VjdChsYXlvdXRTdGF0ZS0+
bV9jbGlwUmVjdCk7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3
IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNQcmVmV2lkdGhzKCkKICAgICBzZXRQcmVm
V2lkdGhzRGlydHkoZmFsc2UpOwogfQogCi12b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRC
bG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCit2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlv
dXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCAvKnBhZ2VIZWlnaHQgRklYTUU6IElt
cGxlbWVudCAqLykKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICsz
OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbGNIb3Jpem9udGFsUHJlZldpZHRocygpOwogICAg
IHZvaWQgY2FsY1ZlcnRpY2FsUHJlZldpZHRocygpOwogCi0gICAgdmlydHVhbCB2b2lkIGxheW91
dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CisgICAgdmlydHVhbCB2b2lkIGxheW91dEJs
b2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQpOwogICAgIHZvaWQgbGF5
b3V0SG9yaXpvbnRhbEJveChib29sIHJlbGF5b3V0Q2hpbGRyZW4pOwogICAgIHZvaWQgbGF5b3V0
VmVydGljYWxCb3goYm9vbCByZWxheW91dENoaWxkcmVuKTsKIApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Nyw3ICs2NDcsNyBAQCB2b2lkIFJl
bmRlcklubGluZTo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50CiAgICAgICAgICAgICBMYXlvdXRTdGF0
ZSogbGF5b3V0U3RhdGUgPSB2LT5sYXlvdXRTdGF0ZSgpOwogICAgICAgICAgICAgaWYgKHN0eWxl
KCktPnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBsYXllcigpKQogICAgICAgICAg
ICAgICAgIHJlY3QubW92ZShsYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCkpOwotICAg
ICAgICAgICAgcmVjdC5tb3ZlKGxheW91dFN0YXRlLT5tX29mZnNldCk7CisgICAgICAgICAgICBy
ZWN0Lm1vdmUobGF5b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgaWYgKGxh
eW91dFN0YXRlLT5tX2NsaXBwZWQpCiAgICAgICAgICAgICAgICAgcmVjdC5pbnRlcnNlY3QobGF5
b3V0U3RhdGUtPm1fY2xpcFJlY3QpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzM0LDcgKzcz
NCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjptYXBMb2NhbFRvQ29udGFpbmVyKFIKICAgICBpZiAo
UmVuZGVyVmlldyAqdiA9IHZpZXcoKSkgewogICAgICAgICBpZiAodi0+bGF5b3V0U3RhdGVFbmFi
bGVkKCkgJiYgIXJlcGFpbnRDb250YWluZXIpIHsKICAgICAgICAgICAgIExheW91dFN0YXRlKiBs
YXlvdXRTdGF0ZSA9IHYtPmxheW91dFN0YXRlKCk7Ci0gICAgICAgICAgICBJbnRTaXplIG9mZnNl
dCA9IGxheW91dFN0YXRlLT5tX29mZnNldDsKKyAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0g
bGF5b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQ7CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+cG9z
aXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGxheWVyKCkpCiAgICAgICAgICAgICAgICAg
b2Zmc2V0ICs9IGxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKTsKICAgICAgICAgICAg
IHRyYW5zZm9ybVN0YXRlLm1vdmUob2Zmc2V0KTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQxLDExICsyNTQxLDExIEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnBhaW50Q2hpbGRMYXllckludG9Db2wKICAgICBjb2x1bW5CbG9jay0+bGF5ZXIoKS0+Y29u
dmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBsYXllclgsIGxheWVyWSk7CiAgICAgCiAgICAg
Q29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkJsb2NrLT5jb2x1bW5JbmZvKCk7Ci0gICAgdW5z
aWduZWQgY29sQ291bnQgPSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOworICAgIHVuc2lnbmVkIGNv
bENvdW50ID0gY29sdW1uQmxvY2stPmNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGludCBjdXJy
WU9mZnNldCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKysp
IHsKICAgICAgICAgLy8gRm9yIGVhY2ggcmVjdCwgd2UgY2xpcCB0byB0aGUgcmVjdCwgYW5kIHRo
ZW4gd2UgYWRqdXN0IG91ciBjb29yZHMuCi0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbElu
Zm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uQmxv
Y2stPmNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgaW50IGN1cnJYT2Zmc2V0ID0g
Y29sUmVjdC54KCkgLSAoY29sdW1uQmxvY2stPmJvcmRlckxlZnQoKSArIGNvbHVtbkJsb2NrLT5w
YWRkaW5nTGVmdCgpKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKGxheWVyWCwgbGF5ZXJZKTsKIApA
QCAtMzAwNywxNyArMzAwNywxNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RD
aGlsZExhCiAgICAgY29sdW1uQmxvY2stPmxheWVyKCktPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJv
b3RMYXllciwgbGF5ZXJYLCBsYXllclkpOwogICAgIAogICAgIENvbHVtbkluZm8qIGNvbEluZm8g
PSBjb2x1bW5CbG9jay0+Y29sdW1uSW5mbygpOwotICAgIGludCBjb2xDb3VudCA9IGNvbEluZm8t
PmNvbHVtbkNvdW50KCk7CisgICAgaW50IGNvbENvdW50ID0gY29sdW1uQmxvY2stPmNvbHVtbkNv
dW50KGNvbEluZm8pOwogICAgIAogICAgIC8vIFdlIGhhdmUgdG8gZ28gYmFja3dhcmRzIGZyb20g
dGhlIGxhc3QgY29sdW1uIHRvIHRoZSBmaXJzdC4KICAgICBpbnQgbGVmdCA9IGNvbHVtbkJsb2Nr
LT5ib3JkZXJMZWZ0KCkgKyBjb2x1bW5CbG9jay0+cGFkZGluZ0xlZnQoKTsKICAgICBpbnQgY3Vy
cllPZmZzZXQgPSAwOwogICAgIGludCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBjb2xDb3VudDsg
aSsrKQotICAgICAgICBjdXJyWU9mZnNldCAtPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSkuaGVp
Z2h0KCk7CisgICAgICAgIGN1cnJZT2Zmc2V0IC09IGNvbHVtbkJsb2NrLT5jb2x1bW5SZWN0QXQo
Y29sSW5mbywgaSkuaGVpZ2h0KCk7CiAgICAgZm9yIChpID0gY29sQ291bnQgLSAxOyBpID49IDA7
IGktLSkgewogICAgICAgICAvLyBGb3IgZWFjaCByZWN0LCB3ZSBjbGlwIHRvIHRoZSByZWN0LCBh
bmQgdGhlbiB3ZSBhZGp1c3Qgb3VyIGNvb3Jkcy4KLSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0g
Y29sSW5mby0+Y29sdW1uUmVjdEF0KGkpOworICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1
bW5CbG9jay0+Y29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgY3VyclhPZmZz
ZXQgPSBjb2xSZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIGN1cnJZT2Zmc2V0ICs9IGNvbFJlY3Qu
aGVpZ2h0KCk7CiAgICAgICAgIGNvbFJlY3QubW92ZShsYXllclgsIGxheWVyWSk7CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCShyZXZpc2lvbiA2Njg4NikKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCi0jaW5jbHVkZSAiU2V0dGlu
Z3MuaCIgLy8gRklYTUU6IFRoaXMgaW5jbHVkZSBjYW4gYmUgcmVtb3ZlZCB3aGVuIHBhZ2luYXRl
RHVyaW5nTGF5b3V0RW5hYmxlZCBpcyB0YWtlbiBvdXQuCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKQEAgLTE2MSw3ICsxNjAsNyBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5k
ZXJCb3hNCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlbmRlclZpZXcqIHYgPSByZW5kZXJlci0+
dmlldygpOwotICAgIGJvb2wgdXNlUHJpbnRSZWN0ID0gIXYtPnByaW50UmVjdCgpLmlzRW1wdHko
KSAmJiAhcmVuZGVyZXItPmRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5
b3V0RW5hYmxlZCgpOworICAgIGJvb2wgdXNlUHJpbnRSZWN0ID0gIXYtPnByaW50UmVjdCgpLmlz
RW1wdHkoKTsKICAgICAKICAgICAvLyBXZSBjYW4gY2hlY2sgdGhlIGZpcnN0IGJveCBhbmQgbGFz
dCBib3ggYW5kIGF2b2lkIHBhaW50aW5nIGlmIHdlIGRvbid0CiAgICAgLy8gaW50ZXJzZWN0LiAg
VGhpcyBpcyBhIHF1aWNrIHNob3J0LWNpcmN1aXQgdGhhdCB3ZSBjYW4gdGFrZSB0byBhdm9pZCB3
YWxraW5nIGFueSBsaW5lcy4KQEAgLTIxNSw3ICsyMTQsNiBAQCB2b2lkIFJlbmRlckxpbmVCb3hM
aXN0OjpwYWludChSZW5kZXJCb3hNCiAgICAgICAgIGludCBib3R0b20gPSBjdXJyLT5ib3R0b21W
aXNpYmxlT3ZlcmZsb3coKSArIHJlbmRlcmVyLT5tYXhpbWFsT3V0bGluZVNpemUoaW5mby5waGFz
ZSk7CiAgICAgICAgIGggPSBib3R0b20gLSB0b3A7CiAgICAgICAgIHlQb3MgPSB0eSArIHRvcDsK
LSAgICAgICAgdi0+c2V0TWluaW11bUNvbHVtbkhlaWdodChoKTsKICAgICAgICAgaWYgKHlQb3Mg
PCBpbmZvLnJlY3QuYm90dG9tKCkgJiYgeVBvcyArIGggPiBpbmZvLnJlY3QueSgpKQogICAgICAg
ICAgICAgY3Vyci0+cGFpbnQoaW5mbywgdHgsIHR5KTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNiBAQCBSZW5kZXJWaWV3OjpS
ZW5kZXJWaWV3KE5vZGUqIG5vZGUsIEZyYW1lCiAgICAgLCBtX21heGltYWxPdXRsaW5lU2l6ZSgw
KQogICAgICwgbV9iZXN0VHJ1bmNhdGVkQXQoMCkKICAgICAsIG1fdHJ1bmNhdG9yV2lkdGgoMCkK
LSAgICAsIG1fbWluaW11bUNvbHVtbkhlaWdodCgwKQogICAgICwgbV9mb3JjZWRQYWdlQnJlYWso
ZmFsc2UpCiAgICAgLCBtX2xheW91dFN0YXRlKDApCiAgICAgLCBtX2xheW91dFN0YXRlRGlzYWJs
ZUNvdW50KDApCkBAIC02OTUsNyArNjk0LDYgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRCZXN0VHJ1
bmNhdGVkQXQoaW50IAogCiB2b2lkIFJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZShSZW5kZXJP
YmplY3QqIHJvb3QpCiB7Ci0gICAgQVNTRVJUKCFkb2luZ0Z1bGxSZXBhaW50KCkpOwogICAgIEFT
U0VSVChtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50ID09IDApOwogICAgIEFTU0VSVChtX2xheW91
dFN0YXRlID09IDApOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCShyZXZpc2lvbiA2Njg4
NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAt
ODMsMTIgKzgzLDEwIEBAIHB1YmxpYzoKICAgICBJbnRSZWN0IHByaW50UmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJpbnRSZWN0OyB9CiAgICAgdm9pZCBzZXRQcmludFJlY3QoY29uc3QgSW50UmVj
dCYgcikgeyBtX3ByaW50UmVjdCA9IHI7IH0KIAotICAgIHZvaWQgc2V0VHJ1bmNhdGVkQXQoaW50
IHkpIHsgbV90cnVuY2F0ZWRBdCA9IHk7IG1fYmVzdFRydW5jYXRlZEF0ID0gbV90cnVuY2F0b3JX
aWR0aCA9IDA7IG1fbWluaW11bUNvbHVtbkhlaWdodCA9IDA7IG1fZm9yY2VkUGFnZUJyZWFrID0g
ZmFsc2U7IH0KKyAgICB2b2lkIHNldFRydW5jYXRlZEF0KGludCB5KSB7IG1fdHJ1bmNhdGVkQXQg
PSB5OyBtX2Jlc3RUcnVuY2F0ZWRBdCA9IG1fdHJ1bmNhdG9yV2lkdGggPSAwOyBtX2ZvcmNlZFBh
Z2VCcmVhayA9IGZhbHNlOyB9CiAgICAgdm9pZCBzZXRCZXN0VHJ1bmNhdGVkQXQoaW50IHksIFJl
bmRlckJveE1vZGVsT2JqZWN0KiBmb3JSZW5kZXJlciwgYm9vbCBmb3JjZWRCcmVhayA9IGZhbHNl
KTsKLSAgICB2b2lkIHNldE1pbmltdW1Db2x1bW5IZWlnaHQoaW50IGhlaWdodCkgeyBtX21pbmlt
dW1Db2x1bW5IZWlnaHQgPSBoZWlnaHQ7IH0KICAgICBpbnQgYmVzdFRydW5jYXRlZEF0KCkgY29u
c3QgeyByZXR1cm4gbV9iZXN0VHJ1bmNhdGVkQXQ7IH0KLSAgICBpbnQgbWluaW11bUNvbHVtbkhl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbWluaW11bUNvbHVtbkhlaWdodDsgfQotCisgICAgCiAg
ICAgaW50IHRydW5jYXRlZEF0KCkgY29uc3QgeyByZXR1cm4gbV90cnVuY2F0ZWRBdDsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBp
bnQgdHkpOwpAQCAtMTIyLDIxICsxMjAsMjAgQEAgcHVibGljOgogCiAgICAgYm9vbCBkb2luZ0Z1
bGxSZXBhaW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVZpZXctPm5lZWRzRnVsbFJlcGFpbnQo
KTsgfQogCi0gICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUoUmVuZGVyQm94KiByZW5kZXJlciwgY29u
c3QgSW50U2l6ZSYgb2Zmc2V0KQorICAgIHZvaWQgcHVzaExheW91dFN0YXRlKFJlbmRlckJveCog
cmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwgaW50IHBhZ2VIZWlnaHQgPSAwLCBDb2x1
bW5JbmZvKiBjb2xJbmZvID0gMCkKICAgICB7Ci0gICAgICAgIGlmIChkb2luZ0Z1bGxSZXBhaW50
KCkpCi0gICAgICAgICAgICByZXR1cm47CiAgICAgICAgIC8vIFdlIHB1c2ggTGF5b3V0U3RhdGUg
ZXZlbiBpZiBsYXlvdXRTdGF0ZSBpcyBkaXNhYmxlZCBiZWNhdXNlIGl0IHN0b3JlcyBsYXlvdXRE
ZWx0YSB0b28uCi0gICAgICAgIG1fbGF5b3V0U3RhdGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIExh
eW91dFN0YXRlKG1fbGF5b3V0U3RhdGUsIHJlbmRlcmVyLCBvZmZzZXQpOworICAgICAgICBpZiAo
IWRvaW5nRnVsbFJlcGFpbnQoKSB8fCByZW5kZXJlci0+aGFzQ29sdW1ucygpIHx8IG1fbGF5b3V0
U3RhdGUtPnBhZ2luYXRlZCgpKQorICAgICAgICAgICAgbV9sYXlvdXRTdGF0ZSA9IG5ldyAocmVu
ZGVyQXJlbmEoKSkgTGF5b3V0U3RhdGUobV9sYXlvdXRTdGF0ZSwgcmVuZGVyZXIsIG9mZnNldCwg
cGFnZUhlaWdodCwgY29sSW5mbyk7CiAgICAgfQogCiAgICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUo
UmVuZGVyT2JqZWN0Kik7CiAKICAgICB2b2lkIHBvcExheW91dFN0YXRlKCkKICAgICB7Ci0gICAg
ICAgIGlmIChkb2luZ0Z1bGxSZXBhaW50KCkpCi0gICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IExheW91dFN0YXRlKiBzdGF0ZSA9IG1fbGF5b3V0U3RhdGU7CisgICAgICAgIGlmIChkb2luZ0Z1
bGxSZXBhaW50KCkgJiYgIW1fbGF5b3V0U3RhdGUtPnBhZ2luYXRlZCgpKQorICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBtX2xheW91dFN0YXRlID0gc3RhdGUtPm1fbmV4dDsKICAgICAgICAg
c3RhdGUtPmRlc3Ryb3kocmVuZGVyQXJlbmEoKSk7CiAgICAgfQpAQCAtMTk4LDcgKzE5NSw2IEBA
IHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgaW50IG1fYmVzdFRydW5jYXRlZEF0OwogICAgIGlu
dCBtX3RydW5jYXRvcldpZHRoOwotICAgIGludCBtX21pbmltdW1Db2x1bW5IZWlnaHQ7CiAgICAg
Ym9vbCBtX2ZvcmNlZFBhZ2VCcmVhazsKICAgICBMYXlvdXRTdGF0ZSogbV9sYXlvdXRTdGF0ZTsK
ICAgICB1bnNpZ25lZCBtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50OwpAQCAtMjI3LDEzICsyMjMs
MTMgQEAgdm9pZCB0b1JlbmRlclZpZXcoY29uc3QgUmVuZGVyVmlldyopOwogY2xhc3MgTGF5b3V0
U3RhdGVNYWludGFpbmVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICAvLyBj
dG9yIHRvIHB1c2ggbm93Ci0gICAgTGF5b3V0U3RhdGVNYWludGFpbmVyKFJlbmRlclZpZXcqIHZp
ZXcsIFJlbmRlckJveCogcm9vdCwgSW50U2l6ZSBvZmZzZXQsIGJvb2wgZGlzYWJsZVN0YXRlID0g
ZmFsc2UpCisgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyKFJlbmRlclZpZXcqIHZpZXcsIFJlbmRl
ckJveCogcm9vdCwgSW50U2l6ZSBvZmZzZXQsIGJvb2wgZGlzYWJsZVN0YXRlID0gZmFsc2UsIGlu
dCBwYWdlSGVpZ2h0ID0gMCwgQ29sdW1uSW5mbyogY29sSW5mbyA9IDApCiAgICAgICAgIDogbV92
aWV3KHZpZXcpCiAgICAgICAgICwgbV9kaXNhYmxlZChkaXNhYmxlU3RhdGUpCiAgICAgICAgICwg
bV9kaWRTdGFydChmYWxzZSkKICAgICAgICAgLCBtX2RpZEVuZChmYWxzZSkKICAgICB7Ci0gICAg
ICAgIHB1c2gocm9vdCwgb2Zmc2V0KTsKKyAgICAgICAgcHVzaChyb290LCBvZmZzZXQsIHBhZ2VI
ZWlnaHQsIGNvbEluZm8pOwogICAgIH0KICAgICAKICAgICAvLyBjdG9yIHRvIG1heWJlIHB1c2gg
bGF0ZXIKQEAgLTI1MCwxMSArMjQ2LDExIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZGlk
U3RhcnQgPT0gbV9kaWRFbmQpOyAgIC8vIGlmIHRoaXMgZmlyZXMsIGl0IG1lYW5zIHRoYXQgc29t
ZW9uZSBkaWQgYSBwdXNoKCksIGJ1dCBmb3Jnb3QgdG8gcG9wKCkuCiAgICAgfQogCi0gICAgdm9p
ZCBwdXNoKFJlbmRlckJveCogcm9vdCwgSW50U2l6ZSBvZmZzZXQpCisgICAgdm9pZCBwdXNoKFJl
bmRlckJveCogcm9vdCwgSW50U2l6ZSBvZmZzZXQsIGludCBwYWdlSGVpZ2h0ID0gMCwgQ29sdW1u
SW5mbyogY29sSW5mbyA9IDApCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fZGlkU3RhcnQpOwog
ICAgICAgICAvLyBXZSBwdXNoIHN0YXRlIGV2ZW4gaWYgZGlzYWJsZWQsIGJlY2F1c2Ugd2Ugc3Rp
bGwgbmVlZCB0byBzdG9yZSBsYXlvdXREZWx0YQotICAgICAgICBtX3ZpZXctPnB1c2hMYXlvdXRT
dGF0ZShyb290LCBvZmZzZXQpOworICAgICAgICBtX3ZpZXctPnB1c2hMYXlvdXRTdGF0ZShyb290
LCBvZmZzZXQsIHBhZ2VIZWlnaHQsIGNvbEluZm8pOwogICAgICAgICBpZiAobV9kaXNhYmxlZCkK
ICAgICAgICAgICAgIG1fdmlldy0+ZGlzYWJsZUxheW91dFN0YXRlKCk7CiAgICAgICAgIG1fZGlk
U3RhcnQgPSB0cnVlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>