<?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>15478</bug_id>
          
          <creation_ts>2007-10-12 12:35:11 -0700</creation_ts>
          <short_desc>Declare vars and functions iteratively upon entering an execution context</short_desc>
          <delta_ts>2007-10-18 16:48:59 -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>JavaScriptCore</component>
          <version>523.x (Safari 3)</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>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>14868</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>58374</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-10-12 12:35:11 -0700</bug_when>
    <thetext>Broken off from bug 14868.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58375</commentid>
    <comment_count>1</comment_count>
      <attachid>16642</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-10-12 12:35:24 -0700</bug_when>
    <thetext>Created attachment 16642
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58377</commentid>
    <comment_count>2</comment_count>
      <attachid>16643</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-10-12 13:05:11 -0700</bug_when>
    <thetext>Created attachment 16643
Patch2

Added some layout tests to the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58435</commentid>
    <comment_count>3</comment_count>
      <attachid>16643</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-10-13 18:30:33 -0700</bug_when>
    <thetext>Comment on attachment 16643
Patch2

r=me

Don&apos;t forget to add a ChangeLog.

One other comment: you use i++ as the increment in some for loops, I would mildly suggest changing it to ++i. Preincrement vs. postincrement doesn&apos;t matter for integers, but it is more efficient for iterators and it is nicer to consistently use that style instead of only when needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58680</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-10-16 14:46:11 -0700</bug_when>
    <thetext>Added ChangeLog. Changed some i++ to ++i.

Committed revision 26682.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16642</attachid>
            <date>2007-10-12 12:35:24 -0700</date>
            <delta_ts>2007-10-12 13:05:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch-iterative-declaration.txt</filename>
            <type>text/plain</type>
            <size>36000</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEFQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQVBJL0pTT2JqZWN0UmVm
LmNwcAkocmV2aXNpb24gMjU4MTUpCisrKyBBUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw3ICszNSw2IEBACiAKICNpbmNsdWRlICJpZGVudGlmaWVyLmgiCiAjaW5jbHVk
ZSAiZnVuY3Rpb24uaCIKLSNpbmNsdWRlICJub2Rlcy5oIgogI2luY2x1ZGUgImludGVybmFsLmgi
CiAjaW5jbHVkZSAib2JqZWN0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKSW5k
ZXg6IGtqcy9mdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL2Z1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjU4MTUpCisrKyBranMvZnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUs
NyArMzI1LDcgQEAgQ29tcGxldGlvbiBEZWNsYXJlZEZ1bmN0aW9uSW1wOjpleGVjdXRlKAogCiB2
b2lkIERlY2xhcmVkRnVuY3Rpb25JbXA6OnByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gIGJvZHktPnByb2Nlc3NWYXJEZWNscyhleGVjKTsKKyAgICBib2R5LT5wcm9jZXNzRGVj
bGFyYXRpb25zKGV4ZWMpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
SW5kZXhUb05hbWVNYXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04Mzks
NyArODM5LDcgQEAgSlNWYWx1ZSogR2xvYmFsRnVuY0ltcDo6Y2FsbEFzRnVuY3Rpb24oRQogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBleGVjdXRlIHRoZSBjb2RlCi0gICAgICAgIHBy
b2dOb2RlLT5wcm9jZXNzVmFyRGVjbHMoJm5ld0V4ZWMpOworICAgICAgICBwcm9nTm9kZS0+cHJv
Y2Vzc0RlY2xhcmF0aW9ucygmbmV3RXhlYyk7CiAgICAgICAgIENvbXBsZXRpb24gYyA9IHByb2dO
b2RlLT5leGVjdXRlKCZuZXdFeGVjKTsKICAgICAgICAgICAKICAgICAgICAgaWYgKHN3aXRjaEds
b2JhbCkKSW5kZXg6IGtqcy9pbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL2ludGVy
cHJldGVyLmNwcAkocmV2aXNpb24gMjU4MTUpCisrKyBranMvaW50ZXJwcmV0ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjUsNyArMzY1LDcgQEAgQ29tcGxldGlvbiBJbnRlcnByZXRlcjo6ZXZh
bHVhdGUoY29uc3QgVQogICAgICAgICBDb250ZXh0IGN0eChnbG9iYWxPYmosIHRoaXMsIHRoaXNP
YmosIHByb2dOb2RlLmdldCgpKTsKICAgICAgICAgRXhlY1N0YXRlIG5ld0V4ZWModGhpcywgJmN0
eCk7CiAgICAgICAgIGN0eC5zZXRFeGVjU3RhdGUoJm5ld0V4ZWMpOwotICAgICAgICBwcm9nTm9k
ZS0+cHJvY2Vzc1ZhckRlY2xzKCZuZXdFeGVjKTsKKyAgICAgICAgcHJvZ05vZGUtPnByb2Nlc3NE
ZWNsYXJhdGlvbnMoJm5ld0V4ZWMpOwogICAgICAgICByZXMgPSBwcm9nTm9kZS0+ZXhlY3V0ZSgm
bmV3RXhlYyk7CiAgICAgfQogICAgIApJbmRleDoga2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBranMvbm9kZXMuY3BwCShyZXZpc2lvbiAyNTgxNSkKKysrIGtqcy9ub2Rlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQCBzdGF0aWMgSGFzaFNldDxOb2RlKj4qIG5ld05v
ZGVzOwogc3RhdGljIEhhc2hDb3VudGVkU2V0PE5vZGUqPiogbm9kZUV4dHJhUmVmQ291bnRzOwog
CiBOb2RlOjpOb2RlKCkKKyAgICA6IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyhmYWxzZSkKIHsKICNp
Zm5kZWYgTkRFQlVHCiAgICAgKytOb2RlQ291bnRlcjo6Y291bnQ7CkBAIC0zMjcsMTAgKzMyOCw2
IEBAIGJvb2wgU3RhdGVtZW50Tm9kZTo6aGl0U3RhdGVtZW50KEV4ZWNTdGEKICAgICByZXR1cm4g
dHJ1ZTsgLy8gY29udGludWUKIH0KIAotdm9pZCBTdGF0ZW1lbnROb2RlOjpwcm9jZXNzRnVuY0Rl
Y2woRXhlY1N0YXRlKikKLXsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IE51bGxOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSlNWYWx1
ZSAqTnVsbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqKQpAQCAtMTU4NSw2ICsxNTgyLDEyIEBA
IEpTVmFsdWUgKkFzc2lnbkV4cHJOb2RlOjpldmFsdWF0ZShFeGVjU3QKIFZhckRlY2xOb2RlOjpW
YXJEZWNsTm9kZShjb25zdCBJZGVudGlmaWVyICZpZCwgQXNzaWduRXhwck5vZGUgKmluLCBUeXBl
IHQpCiAgICAgOiB2YXJUeXBlKHQpLCBpZGVudChpZCksIGluaXQoaW4pCiB7CisgICAgbV9tYXlI
YXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgCit9CisKK3ZvaWQgVmFyRGVjbE5vZGU6OmdldERlY2xh
cmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYgc3RhY2tzKQoreyAKKyAgICBzdGFja3MudmFyU3Rh
Y2suYXBwZW5kKHRoaXMpOyAKIH0KIAogSlNWYWx1ZSogVmFyRGVjbE5vZGU6OmhhbmRsZVNsb3dD
YXNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4sIEpTVmFsdWUqIHZh
bCkKQEAgLTE2NTksNyArMTY2Miw3IEBAIEpTVmFsdWUqIFZhckRlY2xOb2RlOjpldmFsdWF0ZShF
eGVjU3RhdGUKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBWYXJEZWNsTm9kZTo6cHJvY2Vzc1Zh
ckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYykKK3ZvaWQgVmFyRGVjbE5vZGU6OnByb2Nlc3NEZWNsYXJh
dGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgIEpTT2JqZWN0KiB2YXJpYWJsZSA9IGV4ZWMtPmNv
bnRleHQoKS0+dmFyaWFibGVPYmplY3QoKTsKIApAQCAtMTY4NywxMCArMTY5MCwxNCBAQCBKU1Zh
bHVlICpWYXJEZWNsTGlzdE5vZGU6OmV2YWx1YXRlKEV4ZWNTCiAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi12b2lkIFZhckRlY2xMaXN0Tm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0
ZSAqZXhlYykKK3ZvaWQgVmFyRGVjbExpc3ROb2RlOjpnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRp
b25TdGFja3MmIHN0YWNrcykgCiB7Ci0gIGZvciAoVmFyRGVjbExpc3ROb2RlICpuID0gdGhpczsg
bjsgbiA9IG4tPm5leHQuZ2V0KCkpCi0gICAgbi0+dmFyLT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7
CisgICAgaWYgKG5leHQpIHsKKyAgICAgICAgQVNTRVJUKG5leHQtPm1heUhhdmVEZWNsYXJhdGlv
bnMoKSk7CisgICAgICAgIHN0YWNrcy5ub2RlU3RhY2suYXBwZW5kKG5leHQuZ2V0KCkpOyAKKyAg
ICB9CisgICAgQVNTRVJUKHZhci0+bWF5SGF2ZURlY2xhcmF0aW9ucygpKTsKKyAgICBzdGFja3Mu
bm9kZVN0YWNrLmFwcGVuZCh2YXIuZ2V0KCkpOyAKIH0KIAogdm9pZCBWYXJEZWNsTGlzdE5vZGU6
OmJyZWFrQ3ljbGUoKSAKQEAgLTE3MTEsOSArMTcxOCwxMCBAQCBDb21wbGV0aW9uIFZhclN0YXRl
bWVudE5vZGU6OmV4ZWN1dGUoRXhlCiAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCk7CiB9CiAK
LXZvaWQgVmFyU3RhdGVtZW50Tm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYykK
K3ZvaWQgVmFyU3RhdGVtZW50Tm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tz
JiBzdGFja3MpCiB7Ci0gIG5leHQtPnByb2Nlc3NWYXJEZWNscyhleGVjKTsKKyAgICBBU1NFUlQo
bmV4dC0+bWF5SGF2ZURlY2xhcmF0aW9ucygpKTsKKyAgICBzdGFja3Mubm9kZVN0YWNrLmFwcGVu
ZChuZXh0LmdldCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJs
b2NrTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE3MjEsNiAr
MTcyOSw3IEBAIHZvaWQgVmFyU3RhdGVtZW50Tm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEUKIEJsb2Nr
Tm9kZTo6QmxvY2tOb2RlKFNvdXJjZUVsZW1lbnRzTm9kZSAqcykKIHsKICAgaWYgKHMpIHsKKyAg
ICBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyAKICAgICBzb3VyY2UgPSBzLT5uZXh0LnJl
bGVhc2UoKTsKICAgICBQYXJzZXI6OnJlbW92ZU5vZGVDeWNsZShzb3VyY2UuZ2V0KCkpOwogICAg
IHNldExvYyhzLT5maXJzdExpbmUoKSwgcy0+bGFzdExpbmUoKSk7CkBAIC0xNzI5LDIzICsxNzM4
LDIxIEBAIEJsb2NrTm9kZTo6QmxvY2tOb2RlKFNvdXJjZUVsZW1lbnRzTm9kZSAKICAgfQogfQog
Cit2b2lkIEJsb2NrTm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJiBzdGFj
a3MpCit7IAorICAgIEFTU0VSVChzb3VyY2UgJiYgc291cmNlLT5tYXlIYXZlRGVjbGFyYXRpb25z
KCkpOworICAgIHN0YWNrcy5ub2RlU3RhY2suYXBwZW5kKHNvdXJjZS5nZXQoKSk7IAorfQorCiAv
LyBFQ01BIDEyLjEKIENvbXBsZXRpb24gQmxvY2tOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhl
YykKIHsKICAgaWYgKCFzb3VyY2UpCiAgICAgcmV0dXJuIENvbXBsZXRpb24oTm9ybWFsKTsKIAot
ICBzb3VyY2UtPnByb2Nlc3NGdW5jRGVjbChleGVjKTsKLQogICByZXR1cm4gc291cmNlLT5leGVj
dXRlKGV4ZWMpOwogfQogCi12b2lkIEJsb2NrTm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0
ZSAqZXhlYykKLXsKLSAgaWYgKHNvdXJjZSkKLSAgICBzb3VyY2UtPnByb2Nlc3NWYXJEZWNscyhl
eGVjKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVtcHR5U3RhdGVt
ZW50Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNNQSAxMi4zCkBAIC0x
NzkwLDEyICsxNzk3LDEyIEBAIENvbXBsZXRpb24gSWZOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAq
ZXgKICAgcmV0dXJuIHN0YXRlbWVudDItPmV4ZWN1dGUoZXhlYyk7CiB9CiAKLXZvaWQgSWZOb2Rl
Ojpwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKQotewotICBzdGF0ZW1lbnQxLT5wcm9j
ZXNzVmFyRGVjbHMoZXhlYyk7Ci0KLSAgaWYgKHN0YXRlbWVudDIpCi0gICAgc3RhdGVtZW50Mi0+
cHJvY2Vzc1ZhckRlY2xzKGV4ZWMpOwordm9pZCBJZk5vZGU6OmdldERlY2xhcmF0aW9ucyhEZWNs
YXJhdGlvblN0YWNrcyYgc3RhY2tzKQoreyAKKyAgICBpZiAoc3RhdGVtZW50MiAmJiBzdGF0ZW1l
bnQyLT5tYXlIYXZlRGVjbGFyYXRpb25zKCkpIAorICAgICAgICBzdGFja3Mubm9kZVN0YWNrLmFw
cGVuZChzdGF0ZW1lbnQyLmdldCgpKTsgCisgICAgaWYgKHN0YXRlbWVudDEtPm1heUhhdmVEZWNs
YXJhdGlvbnMoKSkgCisgICAgICAgIHN0YWNrcy5ub2RlU3RhY2suYXBwZW5kKHN0YXRlbWVudDEu
Z2V0KCkpOyAKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvV2hpbGVO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE4MzIsOSArMTgzOSwx
MCBAQCBDb21wbGV0aW9uIERvV2hpbGVOb2RlOjpleGVjdXRlKEV4ZWNTdGF0CiAgIHJldHVybiBD
b21wbGV0aW9uKE5vcm1hbCwgMCk7CiB9CiAKLXZvaWQgRG9XaGlsZU5vZGU6OnByb2Nlc3NWYXJE
ZWNscyhFeGVjU3RhdGUgKmV4ZWMpCi17Ci0gIHN0YXRlbWVudC0+cHJvY2Vzc1ZhckRlY2xzKGV4
ZWMpOwordm9pZCBEb1doaWxlTm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tz
JiBzdGFja3MpCit7IAorICAgIGlmIChzdGF0ZW1lbnQtPm1heUhhdmVEZWNsYXJhdGlvbnMoKSkg
CisgICAgICAgIHN0YWNrcy5ub2RlU3RhY2suYXBwZW5kKHN0YXRlbWVudC5nZXQoKSk7IAogfQog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2hpbGVOb2RlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTg4MSw5ICsxODg5LDEwIEBAIENvbXBsZXRp
b24gV2hpbGVOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAKICAgcmV0dXJuIENvbXBsZXRpb24oKTsg
Ly8gd29yayBhcm91bmQgZ2NjIDQuMCBidWcKIH0KIAotdm9pZCBXaGlsZU5vZGU6OnByb2Nlc3NW
YXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpCi17Ci0gIHN0YXRlbWVudC0+cHJvY2Vzc1ZhckRlY2xz
KGV4ZWMpOwordm9pZCBXaGlsZU5vZGU6OmdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNr
cyYgc3RhY2tzKQoreyAKKyAgICBpZiAoc3RhdGVtZW50LT5tYXlIYXZlRGVjbGFyYXRpb25zKCkp
IAorICAgICAgICBzdGFja3Mubm9kZVN0YWNrLmFwcGVuZChzdGF0ZW1lbnQuZ2V0KCkpOyAKIH0K
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZvck5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE5MzEsMTIgKzE5NDAsMTIgQEAgQ29tcGxl
dGlvbiBGb3JOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZQogICByZXR1cm4gQ29tcGxldGlvbigp
OyAvLyB3b3JrIGFyb3VuZCBnY2MgNC4wIGJ1ZwogfQogCi12b2lkIEZvck5vZGU6OnByb2Nlc3NW
YXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpCi17Ci0gIGlmIChleHByMSkKLSAgICBleHByMS0+cHJv
Y2Vzc1ZhckRlY2xzKGV4ZWMpOwotCi0gIHN0YXRlbWVudC0+cHJvY2Vzc1ZhckRlY2xzKGV4ZWMp
Owordm9pZCBGb3JOb2RlOjpnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmIHN0YWNr
cykKK3sgCisgICAgaWYgKHN0YXRlbWVudC0+bWF5SGF2ZURlY2xhcmF0aW9ucygpKSAKKyAgICAg
ICAgc3RhY2tzLm5vZGVTdGFjay5hcHBlbmQoc3RhdGVtZW50LmdldCgpKTsgCisgICAgaWYgKGV4
cHIxICYmIGV4cHIxLT5tYXlIYXZlRGVjbGFyYXRpb25zKCkpIAorICAgICAgICBzdGFja3Mubm9k
ZVN0YWNrLmFwcGVuZChleHByMS5nZXQoKSk7IAogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gRm9ySW5Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQpAQCAtMTk0NCwxNiArMTk1MywyNyBAQCB2b2lkIEZvck5vZGU6OnByb2Nlc3NWYXJEZWNscyhF
eGVjU3RhdGUgCiBGb3JJbk5vZGU6OkZvckluTm9kZShOb2RlICpsLCBOb2RlICplLCBTdGF0ZW1l
bnROb2RlICpzKQogICA6IGluaXQoMEwpLCBsZXhwcihsKSwgZXhwcihlKSwgdmFyRGVjbCgwTCks
IHN0YXRlbWVudChzKQogeworICAgIG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IAogfQog
CiBGb3JJbk5vZGU6OkZvckluTm9kZShjb25zdCBJZGVudGlmaWVyICZpLCBBc3NpZ25FeHByTm9k
ZSAqaW4sIE5vZGUgKmUsIFN0YXRlbWVudE5vZGUgKnMpCiAgIDogaWRlbnQoaSksIGluaXQoaW4p
LCBleHByKGUpLCBzdGF0ZW1lbnQocykKIHsKKyAgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1
ZTsgCisKICAgLy8gZm9yKCB2YXIgZm9vID0gYmFyIGluIGJheiApCiAgIHZhckRlY2wgPSBuZXcg
VmFyRGVjbE5vZGUoaWRlbnQsIGluaXQuZ2V0KCksIFZhckRlY2xOb2RlOjpWYXJpYWJsZSk7CiAg
IGxleHByID0gbmV3IFJlc29sdmVOb2RlKGlkZW50KTsKIH0KIAordm9pZCBGb3JJbk5vZGU6Omdl
dERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYgc3RhY2tzKQoreyAKKyAgICBpZiAoc3Rh
dGVtZW50LT5tYXlIYXZlRGVjbGFyYXRpb25zKCkpIAorICAgICAgICBzdGFja3Mubm9kZVN0YWNr
LmFwcGVuZChzdGF0ZW1lbnQuZ2V0KCkpOyAKKyAgICBpZiAodmFyRGVjbCAmJiB2YXJEZWNsLT5t
YXlIYXZlRGVjbGFyYXRpb25zKCkpIAorICAgICAgICBzdGFja3Mubm9kZVN0YWNrLmFwcGVuZCh2
YXJEZWNsLmdldCgpKTsgCit9CisKIC8vIEVDTUEgMTIuNi40CiBDb21wbGV0aW9uIEZvckluTm9k
ZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0yMDU3LDEzICsyMDc3LDYgQEAgQ29t
cGxldGlvbiBGb3JJbk5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlIAogICByZXR1cm4gQ29tcGxldGlv
bihOb3JtYWwsIHJldHZhbCk7CiB9CiAKLXZvaWQgRm9ySW5Ob2RlOjpwcm9jZXNzVmFyRGVjbHMo
RXhlY1N0YXRlICpleGVjKQotewotICBpZiAodmFyRGVjbCkKLSAgICB2YXJEZWNsLT5wcm9jZXNz
VmFyRGVjbHMoZXhlYyk7Ci0gIHN0YXRlbWVudC0+cHJvY2Vzc1ZhckRlY2xzKGV4ZWMpOwotfQot
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29udGludWVOb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBFQ01BIDEyLjcKQEAgLTIxMTgsNiArMjEz
MSwxMiBAQCBDb21wbGV0aW9uIFJldHVybk5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlCiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXaXRoTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKK3ZvaWQgV2l0aE5vZGU6OmdldERlY2xhcmF0aW9ucyhEZWNs
YXJhdGlvblN0YWNrcyYgc3RhY2tzKQoreyAKKyAgICBpZiAoc3RhdGVtZW50LT5tYXlIYXZlRGVj
bGFyYXRpb25zKCkpIAorICAgICAgICBzdGFja3Mubm9kZVN0YWNrLmFwcGVuZChzdGF0ZW1lbnQu
Z2V0KCkpOyAKK30KKwogLy8gRUNNQSAxMi4xMAogQ29tcGxldGlvbiBXaXRoTm9kZTo6ZXhlY3V0
ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0yMTM0LDEzICsyMTUzLDE0IEBAIENvbXBsZXRpb24g
V2l0aE5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICoKICAgcmV0dXJuIHJlczsKIH0KIAotdm9pZCBX
aXRoTm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYykKLXsKLSAgc3RhdGVtZW50
LT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBDYXNlQ2xhdXNlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
K3ZvaWQgQ2FzZUNsYXVzZU5vZGU6OmdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYg
c3RhY2tzKQoreyAKKyAgICBpZiAoc291cmNlICYmIHNvdXJjZS0+bWF5SGF2ZURlY2xhcmF0aW9u
cygpKSAKKyAgICAgICAgc3RhY2tzLm5vZGVTdGFjay5hcHBlbmQoc291cmNlLmdldCgpKTsgCit9
CisKIC8vIEVDTUEgMTIuMTEKIEpTVmFsdWUgKkNhc2VDbGF1c2VOb2RlOjpldmFsdWF0ZShFeGVj
U3RhdGUgKmV4ZWMpCiB7CkBAIC0yMTU5LDIwICsyMTc5LDE2IEBAIENvbXBsZXRpb24gQ2FzZUNs
YXVzZU5vZGU6OmV2YWxTdGF0ZW1lbnQKICAgICByZXR1cm4gQ29tcGxldGlvbihOb3JtYWwsIGpz
VW5kZWZpbmVkKCkpOwogfQogCi12b2lkIENhc2VDbGF1c2VOb2RlOjpwcm9jZXNzVmFyRGVjbHMo
RXhlY1N0YXRlICpleGVjKQotewotICBpZiAoc291cmNlKQotICAgIHNvdXJjZS0+cHJvY2Vzc1Zh
ckRlY2xzKGV4ZWMpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENsYXVz
ZUxpc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBDYXNlQ2xh
dXNlTm9kZTo6cHJvY2Vzc0Z1bmNEZWNsKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgaWYgKHNvdXJj
ZSkKLSAgICAgIHNvdXJjZS0+cHJvY2Vzc0Z1bmNEZWNsKGV4ZWMpOwordm9pZCBDbGF1c2VMaXN0
Tm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJiBzdGFja3MpCit7IAorICAg
IGlmIChuZXh0ICYmIG5leHQtPm1heUhhdmVEZWNsYXJhdGlvbnMoKSkgCisgICAgICAgIHN0YWNr
cy5ub2RlU3RhY2suYXBwZW5kKG5leHQuZ2V0KCkpOyAKKyAgICBpZiAoY2xhdXNlLT5tYXlIYXZl
RGVjbGFyYXRpb25zKCkpIAorICAgICAgICBzdGFja3Mubm9kZVN0YWNrLmFwcGVuZChjbGF1c2Uu
Z2V0KCkpOyAKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENsYXVzZUxp
c3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogSlNWYWx1ZSAqQ2xhdXNl
TGlzdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqKQogewogICAvLyBzaG91bGQgbmV2ZXIgYmUg
Y2FsbGVkCkBAIC0yMTgwLDIxICsyMTk2LDYgQEAgSlNWYWx1ZSAqQ2xhdXNlTGlzdE5vZGU6OmV2
YWx1YXRlKEV4ZWNTdAogICByZXR1cm4gMDsKIH0KIAotLy8gRUNNQSAxMi4xMQotdm9pZCBDbGF1
c2VMaXN0Tm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYykKLXsKLSAgZm9yIChD
bGF1c2VMaXN0Tm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5uZXh0LmdldCgpKQotICAgIGlmIChu
LT5jbGF1c2UpCi0gICAgICBuLT5jbGF1c2UtPnByb2Nlc3NWYXJEZWNscyhleGVjKTsKLX0KLQot
dm9pZCBDbGF1c2VMaXN0Tm9kZTo6cHJvY2Vzc0Z1bmNEZWNsKEV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgZm9yIChDbGF1c2VMaXN0Tm9kZSogbiA9IHRoaXM7IG47IG4gPSBuLT5uZXh0LmdldCgpKQot
ICAgIGlmIChuLT5jbGF1c2UpCi0gICAgICBuLT5jbGF1c2UtPnByb2Nlc3NGdW5jRGVjbChleGVj
KTsKLX0KLQogdm9pZCBDbGF1c2VMaXN0Tm9kZTo6YnJlYWtDeWNsZSgpIAogeyAKICAgICBuZXh0
ID0gMDsKQEAgLTIyMDUsNiArMjIwNiw3IEBAIHZvaWQgQ2xhdXNlTGlzdE5vZGU6OmJyZWFrQ3lj
bGUoKSAKIENhc2VCbG9ja05vZGU6OkNhc2VCbG9ja05vZGUoQ2xhdXNlTGlzdE5vZGUgKmwxLCBD
YXNlQ2xhdXNlTm9kZSAqZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhdXNlTGlz
dE5vZGUgKmwyKQogeworICBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyAKICAgaWYgKGwx
KSB7CiAgICAgbGlzdDEgPSBsMS0+bmV4dC5yZWxlYXNlKCk7CiAgICAgUGFyc2VyOjpyZW1vdmVO
b2RlQ3ljbGUobGlzdDEuZ2V0KCkpOwpAQCAtMjIyMiw2ICsyMjI0LDE2IEBAIENhc2VCbG9ja05v
ZGU6OkNhc2VCbG9ja05vZGUoQ2xhdXNlTGlzdE4KICAgfQogfQogIAordm9pZCBDYXNlQmxvY2tO
b2RlOjpnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmIHN0YWNrcykgCit7IAorICAg
IGlmIChsaXN0MiAmJiBsaXN0Mi0+bWF5SGF2ZURlY2xhcmF0aW9ucygpKSAKKyAgICAgICAgc3Rh
Y2tzLm5vZGVTdGFjay5hcHBlbmQobGlzdDIuZ2V0KCkpOworICAgIGlmIChkZWYgJiYgZGVmLT5t
YXlIYXZlRGVjbGFyYXRpb25zKCkpIAorICAgICAgICBzdGFja3Mubm9kZVN0YWNrLmFwcGVuZChk
ZWYuZ2V0KCkpOyAKKyAgICBpZiAobGlzdDEgJiYgbGlzdDEtPm1heUhhdmVEZWNsYXJhdGlvbnMo
KSkgCisgICAgICAgIHN0YWNrcy5ub2RlU3RhY2suYXBwZW5kKGxpc3QxLmdldCgpKTsgCit9CisK
IEpTVmFsdWUgKkNhc2VCbG9ja05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqKQogewogICAvLyBz
aG91bGQgbmV2ZXIgYmUgY2FsbGVkCkBAIC0yMjkyLDI4ICsyMzA0LDE0IEBAIENvbXBsZXRpb24g
Q2FzZUJsb2NrTm9kZTo6ZXZhbEJsb2NrKEV4ZWMKICAgcmV0dXJuIENvbXBsZXRpb24oTm9ybWFs
KTsKIH0KIAotdm9pZCBDYXNlQmxvY2tOb2RlOjpwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpl
eGVjKQotewotICBpZiAobGlzdDEpCi0gICAgbGlzdDEtPnByb2Nlc3NWYXJEZWNscyhleGVjKTsK
LSAgaWYgKGRlZikKLSAgICBkZWYtPnByb2Nlc3NWYXJEZWNscyhleGVjKTsKLSAgaWYgKGxpc3Qy
KQotICAgIGxpc3QyLT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7Ci19Ci0KLXZvaWQgQ2FzZUJsb2Nr
Tm9kZTo6cHJvY2Vzc0Z1bmNEZWNsKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgaWYgKGxpc3QxKQot
ICAgbGlzdDEtPnByb2Nlc3NGdW5jRGVjbChleGVjKTsKLSAgaWYgKGRlZikKLSAgICBkZWYtPnBy
b2Nlc3NGdW5jRGVjbChleGVjKTsKLSAgaWYgKGxpc3QyKQotICAgIGxpc3QyLT5wcm9jZXNzRnVu
Y0RlY2woZXhlYyk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTd2l0
Y2hOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3ZvaWQgU3dpdGNo
Tm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJiBzdGFja3MpIAoreyAKKyAg
ICBpZiAoYmxvY2stPm1heUhhdmVEZWNsYXJhdGlvbnMoKSkgCisgICAgICAgIHN0YWNrcy5ub2Rl
U3RhY2suYXBwZW5kKGJsb2NrLmdldCgpKTsgCit9CisKIC8vIEVDTUEgMTIuMTEKIENvbXBsZXRp
b24gU3dpdGNoTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0yMzMxLDE4ICsy
MzI5LDE0IEBAIENvbXBsZXRpb24gU3dpdGNoTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUKICAgcmV0
dXJuIHJlczsKIH0KIAotdm9pZCBTd2l0Y2hOb2RlOjpwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRl
ICpleGVjKQotewotICBibG9jay0+cHJvY2Vzc1ZhckRlY2xzKGV4ZWMpOwotfQorLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExhYmVsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAotdm9pZCBTd2l0Y2hOb2RlOjpwcm9jZXNzRnVuY0RlY2woRXhlY1N0
YXRlKiBleGVjKQotewotICBibG9jay0+cHJvY2Vzc0Z1bmNEZWNsKGV4ZWMpOwordm9pZCBMYWJl
bE5vZGU6OmdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYgc3RhY2tzKSAKK3sgCisg
ICAgaWYgKHN0YXRlbWVudC0+bWF5SGF2ZURlY2xhcmF0aW9ucygpKSAKKyAgICAgICAgc3RhY2tz
Lm5vZGVTdGFjay5hcHBlbmQoc3RhdGVtZW50LmdldCgpKTsgCiB9CiAKLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBMYWJlbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KIC8vIEVDTUEgMTIuMTIKIENvbXBsZXRpb24gTGFiZWxOb2RlOjpleGVjdXRl
KEV4ZWNTdGF0ZSAqZXhlYykKIHsKQEAgLTIzNTYsMTEgKzIzNTAsNiBAQCBDb21wbGV0aW9uIExh
YmVsTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgCiAgIHJldHVybiBlOwogfQogCi12b2lkIExhYmVs
Tm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYykKLXsKLSAgc3RhdGVtZW50LT5w
cm9jZXNzVmFyRGVjbHMoZXhlYyk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBUaHJvd05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8v
IEVDTUEgMTIuMTMKQEAgLTIzNzcsNiArMjM2NiwxNiBAQCBDb21wbGV0aW9uIFRocm93Tm9kZTo6
ZXhlY3V0ZShFeGVjU3RhdGUgCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBU
cnlOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3ZvaWQgVHJ5
Tm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJiBzdGFja3MpIAoreyAKKyAg
ICBpZiAoZmluYWxseUJsb2NrICYmIGZpbmFsbHlCbG9jay0+bWF5SGF2ZURlY2xhcmF0aW9ucygp
KSAKKyAgICAgICAgc3RhY2tzLm5vZGVTdGFjay5hcHBlbmQoZmluYWxseUJsb2NrLmdldCgpKTsg
CisgICAgaWYgKGNhdGNoQmxvY2sgJiYgY2F0Y2hCbG9jay0+bWF5SGF2ZURlY2xhcmF0aW9ucygp
KSAKKyAgICAgICAgc3RhY2tzLm5vZGVTdGFjay5hcHBlbmQoY2F0Y2hCbG9jay5nZXQoKSk7IAor
ICAgIGlmICh0cnlCbG9jay0+bWF5SGF2ZURlY2xhcmF0aW9ucygpKSAKKyAgICAgICAgc3RhY2tz
Lm5vZGVTdGFjay5hcHBlbmQodHJ5QmxvY2suZ2V0KCkpOyAKK30KKwogLy8gRUNNQSAxMi4xNAog
Q29tcGxldGlvbiBUcnlOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKQEAgLTI0MDEs
MTUgKzI0MDAsNiBAQCBDb21wbGV0aW9uIFRyeU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICplCiAg
IHJldHVybiBjOwogfQogCi12b2lkIFRyeU5vZGU6OnByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUg
KmV4ZWMpCi17Ci0gIHRyeUJsb2NrLT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7Ci0gIGlmIChjYXRj
aEJsb2NrKQotICAgIGNhdGNoQmxvY2stPnByb2Nlc3NWYXJEZWNscyhleGVjKTsKLSAgaWYgKGZp
bmFsbHlCbG9jaykKLSAgICBmaW5hbGx5QmxvY2stPnByb2Nlc3NWYXJEZWNscyhleGVjKTsKLX0K
LQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBhcmFtZXRlck5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNNQSAxMwpAQCAtMjQzNCwxMCArMjQy
NCwzNiBAQCBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKFNvdXJjCiAgIHNldExv
YygtMSwgLTEpOwogfQogCi12b2lkIEZ1bmN0aW9uQm9keU5vZGU6OnByb2Nlc3NGdW5jRGVjbChF
eGVjU3RhdGUgKmV4ZWMpCit2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OnByb2Nlc3NEZWNsYXJhdGlv
bnMoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChzb3VyY2UpCi0gICAgICAgIHNvdXJjZS0+
cHJvY2Vzc0Z1bmNEZWNsKGV4ZWMpOworICAgIE5vZGUqIG5vZGUgPSBzb3VyY2UuZ2V0KCk7Cisg
ICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBEZWNsYXJhdGlvblN0YWNrcyBz
dGFja3M7CisgICAgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrID0gc3Rh
Y2tzLm5vZGVTdGFjazsKKyAgICAKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBBU1NFUlQo
bm9kZS0+bWF5SGF2ZURlY2xhcmF0aW9ucygpKTsgLy8gT3RoZXJ3aXNlLCB3ZSB3YXN0ZWQgdGlt
ZSBwdXR0aW5nIGFuIGlycmVsZXZhbnQgbm9kZSBvbiB0aGUgc3RhY2suCisgICAgICAgIG5vZGUt
PmdldERlY2xhcmF0aW9ucyhzdGFja3MpOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHNpemUg
PSBub2RlU3RhY2suc2l6ZSgpOworICAgICAgICBpZiAoIXNpemUpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgLS1zaXplOworICAgICAgICBub2RlID0gbm9kZVN0YWNrW3NpemVdOworICAg
ICAgICBub2RlU3RhY2suc2hyaW5rKHNpemUpOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgaSwg
c2l6ZTsKKworICAgIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0
YWNrID0gc3RhY2tzLmZ1bmN0aW9uU3RhY2s7CisgICAgZm9yIChpID0gMCwgc2l6ZSA9IGZ1bmN0
aW9uU3RhY2suc2l6ZSgpOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICBmdW5jdGlvblN0YWNrW2ld
LT5wcm9jZXNzRGVjbGFyYXRpb24oZXhlYyk7CisKKyAgICBEZWNsYXJhdGlvblN0YWNrczo6VmFy
U3RhY2smIHZhclN0YWNrID0gc3RhY2tzLnZhclN0YWNrOworICAgIGZvciAoaSA9IDAsIHNpemUg
PSB2YXJTdGFjay5zaXplKCk7IGkgPCBzaXplOyBpKyspCisgICAgICAgIHZhclN0YWNrW2ldLT5w
cm9jZXNzRGVjbGFyYXRpb24oZXhlYyk7CiB9CiAKIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6YWRk
UGFyYW0oY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCkBAIC0yNDY3LDggKzI0ODMsMTIgQEAgdm9p
ZCBGdW5jRGVjbE5vZGU6OmFkZFBhcmFtcygpIAogICAgIGJvZHktPmFkZFBhcmFtKHAtPmlkZW50
KCkpOwogfQogCi0vLyBFQ01BIDEzCi12b2lkIEZ1bmNEZWNsTm9kZTo6cHJvY2Vzc0Z1bmNEZWNs
KEV4ZWNTdGF0ZSAqZXhlYykKK3ZvaWQgRnVuY0RlY2xOb2RlOjpnZXREZWNsYXJhdGlvbnMoRGVj
bGFyYXRpb25TdGFja3MmIHN0YWNrcykgCit7CisgICAgc3RhY2tzLmZ1bmN0aW9uU3RhY2suYXBw
ZW5kKHRoaXMpOworfQorCit2b2lkIEZ1bmNEZWNsTm9kZTo6cHJvY2Vzc0RlY2xhcmF0aW9uKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgQ29udGV4dCAqY29udGV4dCA9IGV4ZWMtPmNvbnRleHQoKTsK
IApAQCAtMjU0NCw2ICsyNTUzLDcgQEAgaW50IFNvdXJjZUVsZW1lbnRzTm9kZTo6Y291bnQgPSAw
OwogU291cmNlRWxlbWVudHNOb2RlOjpTb3VyY2VFbGVtZW50c05vZGUoU3RhdGVtZW50Tm9kZSAq
czEpCiAgIDogbm9kZShzMSksIG5leHQodGhpcykKIHsKKyAgICBtX21heUhhdmVEZWNsYXJhdGlv
bnMgPSB0cnVlOyAKICAgICBQYXJzZXI6Om5vdGVOb2RlQ3ljbGUodGhpcyk7CiAgICAgc2V0TG9j
KHMxLT5maXJzdExpbmUoKSwgczEtPmxhc3RMaW5lKCkpOwogfQpAQCAtMjU1MSwxMCArMjU2MSwx
OSBAQCBTb3VyY2VFbGVtZW50c05vZGU6OlNvdXJjZUVsZW1lbnRzTm9kZShTCiBTb3VyY2VFbGVt
ZW50c05vZGU6OlNvdXJjZUVsZW1lbnRzTm9kZShTb3VyY2VFbGVtZW50c05vZGUgKnMxLCBTdGF0
ZW1lbnROb2RlICpzMikKICAgOiBub2RlKHMyKSwgbmV4dChzMS0+bmV4dCkKIHsKKyAgbV9tYXlI
YXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgCiAgIHMxLT5uZXh0ID0gdGhpczsKICAgc2V0TG9jKHMx
LT5maXJzdExpbmUoKSwgczItPmxhc3RMaW5lKCkpOwogfQogCit2b2lkIFNvdXJjZUVsZW1lbnRz
Tm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJiBzdGFja3MpCit7IAorICAg
IGlmIChuZXh0ICYmIG5leHQtPm1heUhhdmVEZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgc3RhY2tz
Lm5vZGVTdGFjay5hcHBlbmQobmV4dC5nZXQoKSk7CisgICAgaWYgKG5vZGUtPm1heUhhdmVEZWNs
YXJhdGlvbnMoKSkKKyAgICAgICAgc3RhY2tzLm5vZGVTdGFjay5hcHBlbmQobm9kZS5nZXQoKSk7
Cit9CisKIC8vIEVDTUEgMTQKIENvbXBsZXRpb24gU291cmNlRWxlbWVudHNOb2RlOjpleGVjdXRl
KEV4ZWNTdGF0ZSAqZXhlYykKIHsKQEAgLTI1NzgsMTkgKzI1OTcsNiBAQCBDb21wbGV0aW9uIFNv
dXJjZUVsZW1lbnRzTm9kZTo6ZXhlY3V0ZShFCiAgIHJldHVybiBjMTsKIH0KIAotLy8gRUNNQSAx
NAotdm9pZCBTb3VyY2VFbGVtZW50c05vZGU6OnByb2Nlc3NGdW5jRGVjbChFeGVjU3RhdGUgKmV4
ZWMpCi17Ci0gIGZvciAoU291cmNlRWxlbWVudHNOb2RlICpuID0gdGhpczsgbjsgbiA9IG4tPm5l
eHQuZ2V0KCkpCi0gICAgbi0+bm9kZS0+cHJvY2Vzc0Z1bmNEZWNsKGV4ZWMpOwotfQotCi12b2lk
IFNvdXJjZUVsZW1lbnRzTm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYykKLXsK
LSAgZm9yIChTb3VyY2VFbGVtZW50c05vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5nZXQo
KSkKLSAgICBuLT5ub2RlLT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7Ci19Ci0KIHZvaWQgU291cmNl
RWxlbWVudHNOb2RlOjpicmVha0N5Y2xlKCkgCiB7IAogICAgIG5leHQgPSAwOwpJbmRleDoga2pz
L25vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL25vZGVzLmgJKHJldmlzaW9uIDI1ODE1KQorKysg
a2pzL25vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEyICs0NCwxNCBAQAogCiBuYW1lc3Bh
Y2UgS0pTIHsKIAorICBjbGFzcyBGdW5jRGVjbE5vZGU7CiAgIGNsYXNzIFByb2dyYW1Ob2RlOwog
ICBjbGFzcyBQcm9wZXJ0eU5hbWVOb2RlOwogICBjbGFzcyBQcm9wZXJ0eUxpc3ROb2RlOwogICBj
bGFzcyBSZWdFeHA7CiAgIGNsYXNzIFNvdXJjZUVsZW1lbnRzTm9kZTsKICAgY2xhc3MgU291cmNl
U3RyZWFtOworICBjbGFzcyBWYXJEZWNsTm9kZTsKIAogICBlbnVtIE9wZXJhdG9yIHsgT3BFcXVh
bCwKICAgICAgICAgICAgICAgICAgIE9wRXFFcSwKQEAgLTgxLDYgKzgzLDE2IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgICAgICAgICAgICAgICAgT3BJbiwKICAgICAgICAgICAgICAgICAgIE9wSW5z
dGFuY2VPZgogICB9OworICAKKyAgc3RydWN0IERlY2xhcmF0aW9uU3RhY2tzIHsKKyAgICAgIHR5
cGVkZWYgVmVjdG9yPE5vZGUqLCAxNj4gTm9kZVN0YWNrOworICAgICAgdHlwZWRlZiBWZWN0b3I8
VmFyRGVjbE5vZGUqLCAxNj4gVmFyU3RhY2s7CisgICAgICB0eXBlZGVmIFZlY3RvcjxGdW5jRGVj
bE5vZGUqLCAxNj4gRnVuY3Rpb25TdGFjazsKKyAgICAgIAorICAgICAgTm9kZVN0YWNrIG5vZGVT
dGFjazsKKyAgICAgIFZhclN0YWNrIHZhclN0YWNrOyAKKyAgICAgIEZ1bmN0aW9uU3RhY2sgZnVu
Y3Rpb25TdGFjazsKKyAgfTsKIAogICBjbGFzcyBOb2RlIHsKICAgcHVibGljOgpAQCAtOTAsOSAr
MTAyLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBKU1ZhbHVlICpldmFsdWF0ZShF
eGVjU3RhdGUgKmV4ZWMpIEtKU19GQVNUX0NBTEwgPSAwOwogICAgIFVTdHJpbmcgdG9TdHJpbmco
KSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vz
c1ZhckRlY2xzKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEwge30KICAgICBpbnQgbGluZU5vKCkg
Y29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBtX2xpbmU7IH0KLQogICAgIHZvaWQgcmVmKCkg
S0pTX0ZBU1RfQ0FMTDsKICAgICB2b2lkIGRlcmVmKCkgS0pTX0ZBU1RfQ0FMTDsKICAgICB1bnNp
Z25lZCByZWZjb3VudCgpIEtKU19GQVNUX0NBTEw7CkBAIC0xMDUsNiArMTE1LDEyIEBAIG5hbWVz
cGFjZSBLSlMgewogICAgIHZpcnR1YWwgYm9vbCBpc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSBjb25z
dCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRG90
QWNjZXNzb3JOb2RlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc0dyb3VwTm9kZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbkRlY2xhcmF0aW9uKCkgY29uc3Qg
S0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1Zhcmlh
YmxlRGVjbGFyYXRpb24oKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CisK
KyAgICAvLyBVc2VkIGZvciBpdGVyYXRpdmUsIGRlcHRoLWZpcnN0IHRyYXZlcnNhbCBvZiB0aGUg
bm9kZSB0cmVlLiBEb2VzIG5vdCBjcm9zcyBmdW5jdGlvbiBjYWxsIGJvdW5kYXJpZXMuCisgICAg
Ym9vbCBtYXlIYXZlRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9tYXlIYXZlRGVjbGFyYXRpb25z
OyB9CisgICAgdmlydHVhbCB2b2lkIGdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYp
IEtKU19GQVNUX0NBTEwgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCiAgICAgdmlydHVhbCB2
b2lkIGJyZWFrQ3ljbGUoKSBLSlNfRkFTVF9DQUxMIHsgfQogCkBAIC0xMjUsNyArMTQxLDggQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgdm9pZCBoYW5kbGVFeGNlcHRpb24oRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2b2lkIGhhbmRsZUV4Y2VwdGlvbihFeGVjU3RhdGUqLCBKU1ZhbHVl
KikgS0pTX0ZBU1RfQ0FMTDsKIAotICAgIGludCBtX2xpbmU7CisgICAgaW50IG1fbGluZSA6IDMx
OworICAgIGJvb2wgbV9tYXlIYXZlRGVjbGFyYXRpb25zIDogMTsKICAgcHJpdmF0ZToKICAgICAv
LyBkaXNhbGxvdyBhc3NpZ25tZW50CiAgICAgTm9kZSYgb3BlcmF0b3I9KGNvbnN0IE5vZGUmKSBL
SlNfRkFTVF9DQUxMOwpAQCAtMTQxLDcgKzE1OCw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGJv
b2wgaGl0U3RhdGVtZW50KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBD
b21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlICpleGVjKSBLSlNfRkFTVF9DQUxMID0gMDsKICAg
ICB2b2lkIHB1c2hMYWJlbChjb25zdCBJZGVudGlmaWVyICZpZCkgS0pTX0ZBU1RfQ0FMTCB7IGxz
LnB1c2goaWQpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NGdW5jRGVjbChFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICBwcm90ZWN0ZWQ6CiAgICAgTGFiZWxTdGFjayBsczsKICAgcHJp
dmF0ZToKQEAgLTUzNSw3ICs1NTEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBUeXBl
T2ZWYWx1ZU5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBUeXBlT2ZWYWx1ZU5v
ZGUoTm9kZSAqZSkgS0pTX0ZBU1RfQ0FMTCA6IG1fZXhwcihlKSB7fQorICAgIFR5cGVPZlZhbHVl
Tm9kZShOb2RlICplKSBLSlNfRkFTVF9DQUxMIDogbV9leHByKGUpIHsgfQogICAgIEpTVmFsdWUq
IGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgIHByaXZhdGU6CkBA
IC03OTQsOCArODEwLDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGVudW0gVHlwZSB7IFZhcmlh
YmxlLCBDb25zdGFudCB9OwogICAgIFZhckRlY2xOb2RlKGNvbnN0IElkZW50aWZpZXIgJmlkLCBB
c3NpZ25FeHByTm9kZSAqaW4sIFR5cGUgdCkgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBl
dmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgdm9pZCBwcm9j
ZXNzVmFyRGVjbHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNWYXJpYWJsZURlY2xhcmF0aW9uKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVy
biB0cnVlOyB9CisgICAgdm9pZCBBTFdBWVNfSU5MSU5FIHByb2Nlc3NEZWNsYXJhdGlvbihFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMo
RGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgIEpTVmFs
dWUqIGhhbmRsZVNsb3dDYXNlKEV4ZWNTdGF0ZSosIGNvbnN0IFNjb3BlQ2hhaW4mLCBKU1ZhbHVl
KikgS0pTX0ZBU1RfQ0FMTCBLSlNfTk9fSU5MSU5FOwogICAgIFR5cGUgdmFyVHlwZTsKQEAgLTgw
NiwxNCArODI0LDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBWYXJEZWNsTGlzdE5vZGUg
OiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKICAgICAvLyBsaXN0IHBvaW50ZXIgaXMgdGFpbCBv
ZiBhIGNpcmN1bGFyIGxpc3QsIGNyYWNrZWQgaW4gdGhlIEZvck5vZGUvVmFyU3RhdGVtZW50Tm9k
ZSBjdG9yCi0gICAgVmFyRGVjbExpc3ROb2RlKFZhckRlY2xOb2RlICp2KSBLSlNfRkFTVF9DQUxM
IDogbmV4dCh0aGlzKSwgdmFyKHYpIHsgUGFyc2VyOjpub3RlTm9kZUN5Y2xlKHRoaXMpOyB9Cisg
ICAgVmFyRGVjbExpc3ROb2RlKFZhckRlY2xOb2RlICp2KSBLSlNfRkFTVF9DQUxMIDogbmV4dCh0
aGlzKSwgdmFyKHYpIHsgUGFyc2VyOjpub3RlTm9kZUN5Y2xlKHRoaXMpOyBtX21heUhhdmVEZWNs
YXJhdGlvbnMgPSB0cnVlOyB9CiAgICAgVmFyRGVjbExpc3ROb2RlKFZhckRlY2xMaXN0Tm9kZSAq
bCwgVmFyRGVjbE5vZGUgKnYpIEtKU19GQVNUX0NBTEwKLSAgICAgIDogbmV4dChsLT5uZXh0KSwg
dmFyKHYpIHsgbC0+bmV4dCA9IHRoaXM7IH0KKyAgICAgIDogbmV4dChsLT5uZXh0KSwgdmFyKHYp
IHsgbC0+bmV4dCA9IHRoaXM7IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IH0KICAgICBK
U1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwg
dm9pZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAg
ICBQYXNzUmVmUHRyPFZhckRlY2xMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSBLSlNfRkFTVF9DQUxM
IHsgcmV0dXJuIG5leHQucmVsZWFzZSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGJyZWFrQ3ljbGUo
KSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFy
YXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBGb3JOb2RlOwogICAgIGZyaWVuZCBjbGFzcyBWYXJTdGF0ZW1lbnROb2RlOwpAQCAtODIzLDEw
ICs4NDEsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgVmFyU3RhdGVtZW50Tm9kZSA6
IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgotICAgIFZhclN0YXRlbWVudE5vZGUo
VmFyRGVjbExpc3ROb2RlICpsKSBLSlNfRkFTVF9DQUxMIDogbmV4dChsLT5uZXh0LnJlbGVhc2Uo
KSkgeyBQYXJzZXI6OnJlbW92ZU5vZGVDeWNsZShuZXh0LmdldCgpKTsgfQorICAgIFZhclN0YXRl
bWVudE5vZGUoVmFyRGVjbExpc3ROb2RlICpsKSBLSlNfRkFTVF9DQUxMIDogbmV4dChsLT5uZXh0
LnJlbGVhc2UoKSkgeyBQYXJzZXI6OnJlbW92ZU5vZGVDeWNsZShuZXh0LmdldCgpKTsgbV9tYXlI
YXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRl
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NWYXJE
ZWNscyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1U
byhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdm9pZCBn
ZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwogICBwcml2
YXRlOgogICAgIFJlZlB0cjxWYXJEZWNsTGlzdE5vZGU+IG5leHQ7CiAgIH07CkBAIC04MzUsOCAr
ODUzLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBCbG9ja05vZGUoU291cmNl
RWxlbWVudHNOb2RlICpzKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBl
eGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nl
c3NWYXJEZWNscyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwg
dm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwog
ICBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPFNvdXJjZUVsZW1lbnRzTm9kZT4gc291cmNlOwogICB9
OwpAQCAtODYwLDEwICs4NzgsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIElmTm9kZSA6
IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgogICAgIElmTm9kZShOb2RlICplLCBT
dGF0ZW1lbnROb2RlICpzMSwgU3RhdGVtZW50Tm9kZSAqczIpIEtKU19GQVNUX0NBTEwKLSAgICAg
IDogZXhwcihlKSwgc3RhdGVtZW50MShzMSksIHN0YXRlbWVudDIoczIpIHt9CisgICAgICA6IGV4
cHIoZSksIHN0YXRlbWVudDEoczEpLCBzdGF0ZW1lbnQyKHMyKSB7IG1fbWF5SGF2ZURlY2xhcmF0
aW9ucyA9IHN0YXRlbWVudDEtPm1heUhhdmVEZWNsYXJhdGlvbnMoKSB8fCAoc3RhdGVtZW50MiAm
JiBzdGF0ZW1lbnQyLT5tYXlIYXZlRGVjbGFyYXRpb25zKCkpOyB9CiAgICAgdmlydHVhbCBDb21w
bGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIHZv
aWQgcHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVh
bCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CisgICAg
dmlydHVhbCB2b2lkIGdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYpIEtKU19GQVNU
X0NBTEw7CiAgIHByaXZhdGU6CiAgICAgUmVmUHRyPE5vZGU+IGV4cHI7CiAgICAgUmVmUHRyPFN0
YXRlbWVudE5vZGU+IHN0YXRlbWVudDE7CkBAIC04NzIsMTAgKzg5MCwxMCBAQCBuYW1lc3BhY2Ug
S0pTIHsKIAogICBjbGFzcyBEb1doaWxlTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAg
cHVibGljOgotICAgIERvV2hpbGVOb2RlKFN0YXRlbWVudE5vZGUgKnMsIE5vZGUgKmUpIEtKU19G
QVNUX0NBTEwgOiBzdGF0ZW1lbnQocyksIGV4cHIoZSkge30KKyAgICBEb1doaWxlTm9kZShTdGF0
ZW1lbnROb2RlICpzLCBOb2RlICplKSBLSlNfRkFTVF9DQUxMIDogc3RhdGVtZW50KHMpLCBleHBy
KGUpIHsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgQ29tcGxl
dGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lk
IHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHZp
cnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9D
QUxMOwogICBwcml2YXRlOgogICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7CiAg
ICAgUmVmUHRyPE5vZGU+IGV4cHI7CkBAIC04ODMsMTAgKzkwMSwxMCBAQCBuYW1lc3BhY2UgS0pT
IHsKIAogICBjbGFzcyBXaGlsZU5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1Ymxp
YzoKLSAgICBXaGlsZU5vZGUoTm9kZSAqZSwgU3RhdGVtZW50Tm9kZSAqcykgS0pTX0ZBU1RfQ0FM
TCA6IGV4cHIoZSksIHN0YXRlbWVudChzKSB7fQorICAgIFdoaWxlTm9kZShOb2RlICplLCBTdGF0
ZW1lbnROb2RlICpzKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSwgc3RhdGVtZW50KHMpIHsgbV9t
YXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVj
dXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NW
YXJEZWNscyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdm9p
ZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwogICBw
cml2YXRlOgogICAgIFJlZlB0cjxOb2RlPiBleHByOwogICAgIFJlZlB0cjxTdGF0ZW1lbnROb2Rl
PiBzdGF0ZW1lbnQ7CkBAIC04OTUsMTIgKzkxMywxMiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xh
c3MgRm9yTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgogICAgIEZvck5v
ZGUoTm9kZSAqZTEsIE5vZGUgKmUyLCBOb2RlICplMywgU3RhdGVtZW50Tm9kZSAqcykgS0pTX0ZB
U1RfQ0FMTCA6Ci0gICAgICBleHByMShlMSksIGV4cHIyKGUyKSwgZXhwcjMoZTMpLCBzdGF0ZW1l
bnQocykge30KKyAgICAgIGV4cHIxKGUxKSwgZXhwcjIoZTIpLCBleHByMyhlMyksIHN0YXRlbWVu
dChzKSB7IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IH0KICAgICBGb3JOb2RlKFZhckRl
Y2xMaXN0Tm9kZSAqZTEsIE5vZGUgKmUyLCBOb2RlICplMywgU3RhdGVtZW50Tm9kZSAqcykgS0pT
X0ZBU1RfQ0FMTCA6Ci0gICAgICBleHByMShlMS0+bmV4dC5yZWxlYXNlKCkpLCBleHByMihlMiks
IGV4cHIzKGUzKSwgc3RhdGVtZW50KHMpIHsgUGFyc2VyOjpyZW1vdmVOb2RlQ3ljbGUoZXhwcjEu
Z2V0KCkpOyB9CisgICAgICBleHByMShlMS0+bmV4dC5yZWxlYXNlKCkpLCBleHByMihlMiksIGV4
cHIzKGUzKSwgc3RhdGVtZW50KHMpIHsgUGFyc2VyOjpyZW1vdmVOb2RlQ3ljbGUoZXhwcjEuZ2V0
KCkpOyBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyB9CiAgICAgdmlydHVhbCBDb21wbGV0
aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIHZvaWQg
cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CisgICAgdmly
dHVhbCB2b2lkIGdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYpIEtKU19GQVNUX0NB
TEw7CiAgIHByaXZhdGU6CiAgICAgUmVmUHRyPE5vZGU+IGV4cHIxOwogICAgIFJlZlB0cjxOb2Rl
PiBleHByMjsKQEAgLTkxMyw4ICs5MzEsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBGb3JJbk5v
ZGUoTm9kZSAqbCwgTm9kZSAqZSwgU3RhdGVtZW50Tm9kZSAqcykgS0pTX0ZBU1RfQ0FMTDsKICAg
ICBGb3JJbk5vZGUoY29uc3QgSWRlbnRpZmllciAmaSwgQXNzaWduRXhwck5vZGUgKmluLCBOb2Rl
ICplLCBTdGF0ZW1lbnROb2RlICpzKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgQ29tcGxl
dGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lk
IHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHZp
cnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9D
QUxMOwogICBwcml2YXRlOgogICAgIElkZW50aWZpZXIgaWRlbnQ7CiAgICAgUmVmUHRyPEFzc2ln
bkV4cHJOb2RlPiBpbml0OwpAQCAtOTU1LDEwICs5NzMsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAK
ICAgY2xhc3MgV2l0aE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoKLSAg
ICBXaXRoTm9kZShOb2RlICplLCBTdGF0ZW1lbnROb2RlICpzKSBLSlNfRkFTVF9DQUxMIDogZXhw
cihlKSwgc3RhdGVtZW50KHMpIHt9CisgICAgV2l0aE5vZGUoTm9kZSAqZSwgU3RhdGVtZW50Tm9k
ZSAqcykgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSksIHN0YXRlbWVudChzKSB7IG1fbWF5SGF2ZURl
Y2xhcmF0aW9ucyA9IHRydWU7IH0KICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzVmFyRGVjbHMo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGVj
bGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJikgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0ZToK
ICAgICBSZWZQdHI8Tm9kZT4gZXhwcjsKICAgICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4gc3RhdGVt
ZW50OwpAQCAtOTY2LDEwICs5ODQsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgTGFi
ZWxOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICBwdWJsaWM6Ci0gICAgTGFiZWxOb2Rl
KGNvbnN0IElkZW50aWZpZXIgJmwsIFN0YXRlbWVudE5vZGUgKnMpIEtKU19GQVNUX0NBTEwgOiBs
YWJlbChsKSwgc3RhdGVtZW50KHMpIHsgfQorICAgIExhYmVsTm9kZShjb25zdCBJZGVudGlmaWVy
ICZsLCBTdGF0ZW1lbnROb2RlICpzKSBLSlNfRkFTVF9DQUxMIDogbGFiZWwobCksIHN0YXRlbWVu
dChzKSB7IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IH0KICAgICB2aXJ0dWFsIENvbXBs
ZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgdm9p
ZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJikgS0pTX0ZBU1Rf
Q0FMTDsKICAgcHJpdmF0ZToKICAgICBJZGVudGlmaWVyIGxhYmVsOwogICAgIFJlZlB0cjxTdGF0
ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7CkBAIC05ODcsMTAgKzEwMDUsMTAgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgIGNsYXNzIFRyeU5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoK
ICAgICBUcnlOb2RlKFN0YXRlbWVudE5vZGUgKmIsIGNvbnN0IElkZW50aWZpZXIgJmUsIFN0YXRl
bWVudE5vZGUgKmMsIFN0YXRlbWVudE5vZGUgKmYpIEtKU19GQVNUX0NBTEwKLSAgICAgIDogdHJ5
QmxvY2soYiksIGV4Y2VwdGlvbklkZW50KGUpLCBjYXRjaEJsb2NrKGMpLCBmaW5hbGx5QmxvY2so
ZikgeyB9CisgICAgICA6IHRyeUJsb2NrKGIpLCBleGNlcHRpb25JZGVudChlKSwgY2F0Y2hCbG9j
ayhjKSwgZmluYWxseUJsb2NrKGYpIHsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOworICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25T
dGFja3MmKSBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgIFJlZlB0cjxTdGF0ZW1lbnRO
b2RlPiB0cnlCbG9jazsKICAgICBJZGVudGlmaWVyIGV4Y2VwdGlvbklkZW50OwpAQCAtMTAyOCw3
ICsxMDQ2LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGUgOiBw
dWJsaWMgQmxvY2tOb2RlIHsKICAgcHVibGljOgogICAgIEZ1bmN0aW9uQm9keU5vZGUoU291cmNl
RWxlbWVudHNOb2RlICopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NG
dW5jRGVjbChFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIGludCBzb3VyY2VJZCgpIEtK
U19GQVNUX0NBTEwgeyByZXR1cm4gbV9zb3VyY2VJZDsgfQogICAgIGNvbnN0IFVTdHJpbmcmIHNv
dXJjZVVSTCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbV9zb3VyY2VVUkw7IH0KIApAQCAtMTAz
Nyw2ICsxMDU0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgSWRlbnRpZmllciBwYXJhbU5hbWUo
c2l6ZV90IHBvcykgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBtX3BhcmFtZXRlcnNbcG9z
XS5uYW1lOyB9CiAgICAgVVN0cmluZyBwYXJhbVN0cmluZygpIGNvbnN0IEtKU19GQVNUX0NBTEw7
CiAgICAgVmVjdG9yPFBhcmFtZXRlcj4mIHBhcmFtZXRlcnMoKSBLSlNfRkFTVF9DQUxMIHsgcmV0
dXJuIG1fcGFyYW1ldGVyczsgfQorICAgIHZvaWQgcHJvY2Vzc0RlY2xhcmF0aW9ucyhFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgIFVTdHJpbmcgbV9zb3VyY2VVUkw7
CiAgICAgaW50IG1fc291cmNlSWQ7CkBAIC0xMDYxLDEyICsxMDc5LDE0IEBAIG5hbWVzcGFjZSBL
SlMgewogICBjbGFzcyBGdW5jRGVjbE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1
YmxpYzoKICAgICBGdW5jRGVjbE5vZGUoY29uc3QgSWRlbnRpZmllciAmaSwgRnVuY3Rpb25Cb2R5
Tm9kZSAqYikgS0pTX0ZBU1RfQ0FMTAotICAgICAgOiBpZGVudChpKSwgYm9keShiKSB7IGFkZFBh
cmFtcygpOyB9CisgICAgICA6IGlkZW50KGkpLCBib2R5KGIpIHsgYWRkUGFyYW1zKCk7IG1fbWF5
SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IH0KICAgICBGdW5jRGVjbE5vZGUoY29uc3QgSWRlbnRp
ZmllciAmaSwgUGFyYW1ldGVyTm9kZSAqcCwgRnVuY3Rpb25Cb2R5Tm9kZSAqYikgS0pTX0ZBU1Rf
Q0FMTAotICAgICAgOiBpZGVudChpKSwgcGFyYW0ocC0+bmV4dC5yZWxlYXNlKCkpLCBib2R5KGIp
IHsgUGFyc2VyOjpyZW1vdmVOb2RlQ3ljbGUocGFyYW0uZ2V0KCkpOyBhZGRQYXJhbXMoKTsgfQor
ICAgICAgOiBpZGVudChpKSwgcGFyYW0ocC0+bmV4dC5yZWxlYXNlKCkpLCBib2R5KGIpIHsgUGFy
c2VyOjpyZW1vdmVOb2RlQ3ljbGUocGFyYW0uZ2V0KCkpOyBhZGRQYXJhbXMoKTsgbV9tYXlIYXZl
RGVjbGFyYXRpb25zID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NGdW5jRGVj
bChFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgYm9vbCBpc0Z1
bmN0aW9uRGVjbGFyYXRpb24oKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJikgS0pT
X0ZBU1RfQ0FMTDsKKyAgICB2b2lkIEFMV0FZU19JTkxJTkUgcHJvY2Vzc0RlY2xhcmF0aW9uKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgIHByaXZhdGU6CiAgICAgdm9pZCBhZGRQYXJhbXMo
KSBLSlNfRkFTVF9DQUxMOwogICAgIElkZW50aWZpZXIgaWRlbnQ7CkBAIC0xMDgzLDExICsxMTAz
LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFNvdXJjZUVsZW1lbnRzTm9kZShTb3VyY2VFbGVt
ZW50c05vZGUgKnMxLCBTdGF0ZW1lbnROb2RlICpzMikgS0pTX0ZBU1RfQ0FMTDsKICAgICAKICAg
ICBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2b2lk
IHByb2Nlc3NGdW5jRGVjbChFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwg
dm9pZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAg
ICBQYXNzUmVmUHRyPFNvdXJjZUVsZW1lbnRzTm9kZT4gcmVsZWFzZU5leHQoKSBLSlNfRkFTVF9D
QUxMIHsgcmV0dXJuIG5leHQucmVsZWFzZSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGJyZWFrQ3lj
bGUoKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVj
bGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBCbG9ja05vZGU7CiAgICAgZnJpZW5kIGNsYXNzIENhc2VDbGF1c2VOb2RlOwpAQCAtMTA5
NywxNCArMTExNiwxMyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBDYXNlQ2xhdXNlTm9k
ZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgotICAgICAgQ2FzZUNsYXVzZU5vZGUoTm9kZSAq
ZSkgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSkgeyB9CisgICAgICBDYXNlQ2xhdXNlTm9kZShOb2Rl
ICplKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSB7IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRy
dWU7IH0KICAgICAgIENhc2VDbGF1c2VOb2RlKE5vZGUgKmUsIFNvdXJjZUVsZW1lbnRzTm9kZSAq
cykgS0pTX0ZBU1RfQ0FMTAotICAgICAgOiBleHByKGUpLCBzb3VyY2Uocy0+bmV4dC5yZWxlYXNl
KCkpIHsgUGFyc2VyOjpyZW1vdmVOb2RlQ3ljbGUoc291cmNlLmdldCgpKTsgfQorICAgICAgOiBl
eHByKGUpLCBzb3VyY2Uocy0+bmV4dC5yZWxlYXNlKCkpIHsgUGFyc2VyOjpyZW1vdmVOb2RlQ3lj
bGUoc291cmNlLmdldCgpKTsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQogICAgICAg
SlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIENvbXBs
ZXRpb24gZXZhbFN0YXRlbWVudHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgIHZv
aWQgcHJvY2Vzc0Z1bmNEZWNsKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICB2aXJ0
dWFsIHZvaWQgcHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKKyAgICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3Mm
KSBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgICAgUmVmUHRyPE5vZGU+IGV4cHI7CiAg
ICAgICBSZWZQdHI8U291cmNlRWxlbWVudHNOb2RlPiBzb3VyY2U7CkBAIC0xMTEzLDE3ICsxMTMx
LDE2IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBDbGF1c2VMaXN0Tm9kZSA6IHB1YmxpYyBO
b2RlIHsKICAgcHVibGljOgogICAgICAgLy8gbGlzdCBwb2ludGVyIGlzIHRhaWwgb2YgYSBjaXJj
dWxhciBsaXN0LCBjcmFja2VkIGluIHRoZSBDYXNlQmxvY2tOb2RlIGN0b3IKLSAgICAgIENsYXVz
ZUxpc3ROb2RlKENhc2VDbGF1c2VOb2RlICpjKSBLSlNfRkFTVF9DQUxMIDogY2xhdXNlKGMpLCBu
ZXh0KHRoaXMpIHsgUGFyc2VyOjpub3RlTm9kZUN5Y2xlKHRoaXMpOyB9CisgICAgICBDbGF1c2VM
aXN0Tm9kZShDYXNlQ2xhdXNlTm9kZSAqYykgS0pTX0ZBU1RfQ0FMTCA6IGNsYXVzZShjKSwgbmV4
dCh0aGlzKSB7IFBhcnNlcjo6bm90ZU5vZGVDeWNsZSh0aGlzKTsgbV9tYXlIYXZlRGVjbGFyYXRp
b25zID0gdHJ1ZTsgfQogICAgICAgQ2xhdXNlTGlzdE5vZGUoQ2xhdXNlTGlzdE5vZGUgKm4sIENh
c2VDbGF1c2VOb2RlICpjKSBLSlNfRkFTVF9DQUxMCi0gICAgICA6IGNsYXVzZShjKSwgbmV4dChu
LT5uZXh0KSB7IG4tPm5leHQgPSB0aGlzOyB9CisgICAgICA6IGNsYXVzZShjKSwgbmV4dChuLT5u
ZXh0KSB7IG4tPm5leHQgPSB0aGlzOyBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyB9CiAg
ICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAg
Q2FzZUNsYXVzZU5vZGUgKmdldENsYXVzZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4g
Y2xhdXNlLmdldCgpOyB9CiAgICAgICBDbGF1c2VMaXN0Tm9kZSAqZ2V0TmV4dCgpIGNvbnN0IEtK
U19GQVNUX0NBTEwgeyByZXR1cm4gbmV4dC5nZXQoKTsgfQotICAgICAgdmlydHVhbCB2b2lkIHBy
b2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgdm9pZCBwcm9j
ZXNzRnVuY0RlY2woRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgUGFz
c1JlZlB0cjxDbGF1c2VMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSBLSlNfRkFTVF9DQUxMIHsgcmV0
dXJuIG5leHQucmVsZWFzZSgpOyB9CiAgICAgICB2aXJ0dWFsIHZvaWQgYnJlYWtDeWNsZSgpIEtK
U19GQVNUX0NBTEw7CisgICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGVjbGFyYXRpb25zKERlY2xhcmF0
aW9uU3RhY2tzJikgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0ZToKICAgICAgIGZyaWVuZCBjbGFz
cyBDYXNlQmxvY2tOb2RlOwogICAgICAgUmVmUHRyPENhc2VDbGF1c2VOb2RlPiBjbGF1c2U7CkBA
IC0xMTM1LDkgKzExNTIsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIENhc2VCbG9ja05vZGUo
Q2xhdXNlTGlzdE5vZGUgKmwxLCBDYXNlQ2xhdXNlTm9kZSAqZCwgQ2xhdXNlTGlzdE5vZGUgKmwy
KSBLSlNfRkFTVF9DQUxMOwogICAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICAgIENvbXBsZXRpb24gZXZhbEJsb2NrKEV4ZWNTdGF0ZSAqZXhlYywg
SlNWYWx1ZSAqaW5wdXQpIEtKU19GQVNUX0NBTEw7Ci0gICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vz
c1ZhckRlY2xzKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICB2b2lkIHByb2Nlc3NG
dW5jRGVjbChFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CisgICAgICB2aXJ0dWFs
IHZvaWQgZ2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJikgS0pTX0ZBU1RfQ0FMTDsK
ICAgcHJpdmF0ZToKICAgICAgIFJlZlB0cjxDbGF1c2VMaXN0Tm9kZT4gbGlzdDE7CiAgICAgICBS
ZWZQdHI8Q2FzZUNsYXVzZU5vZGU+IGRlZjsKQEAgLTExNDYsMTEgKzExNjIsMTAgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgIAogICBjbGFzcyBTd2l0Y2hOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUg
ewogICBwdWJsaWM6Ci0gICAgICBTd2l0Y2hOb2RlKE5vZGUgKmUsIENhc2VCbG9ja05vZGUgKmIp
IEtKU19GQVNUX0NBTEwgOiBleHByKGUpLCBibG9jayhiKSB7IH0KKyAgICAgIFN3aXRjaE5vZGUo
Tm9kZSAqZSwgQ2FzZUJsb2NrTm9kZSAqYikgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSksIGJsb2Nr
KGIpIHsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQogICAgICAgdmlydHVhbCBDb21w
bGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgIHZpcnR1YWwg
dm9pZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgIHZp
cnR1YWwgdm9pZCBwcm9jZXNzRnVuY0RlY2woRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOworICAgICAgdmlydHVhbCB2b2lkIGdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNr
cyYpIEtKU19GQVNUX0NBTEw7CiAgIHByaXZhdGU6CiAgICAgICBSZWZQdHI8Tm9kZT4gZXhwcjsK
ICAgICAgIFJlZlB0cjxDYXNlQmxvY2tOb2RlPiBibG9jazsKSW5kZXg6IHRlc3RzL21vemlsbGEv
ZWNtYV8zL0Z1bmN0aW9uL3Njb3BlLTAwMS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0cy9tb3ppbGxh
L2VjbWFfMy9GdW5jdGlvbi9zY29wZS0wMDEuanMJKHJldmlzaW9uIDI1ODE1KQorKysgdGVzdHMv
bW96aWxsYS9lY21hXzMvRnVuY3Rpb24vc2NvcGUtMDAxLmpzCSh3b3JraW5nIGNvcHkpCkBAIC03
OSw3ICs3OSw4IEBAIHdpdGggKG9iaikKICAgfQogICBhY3R1YWwgPSBmKCk7CiB9Ci1leHBlY3Qg
PSAyOworLy8gTW96aWxsYSByZXN1bHQsIHdoaWNoIGNvbnRyYWRpY3RzIElFIGFuZCB0aGUgRUNN
QSBzcGVjOiBleHBlY3QgPSAyOworZXhwZWN0ID0gMTsKIGFkZFRoaXMoKTsKIAogCkBAIC05OCw3
ICs5OSw4IEBAIHdpdGggKG9iaikKICAgfQogfQogYWN0dWFsID0gZigpOwotZXhwZWN0ID0gMjsK
Ky8vIE1vemlsbGEgcmVzdWx0LCB3aGljaCBjb250cmFkaWN0cyBJRSBhbmQgdGhlIEVDTUEgc3Bl
YzogZXhwZWN0ID0gMjsKK2V4cGVjdCA9IDE7CiBhZGRUaGlzKCk7CiAKIApAQCAtMTE5LDcgKzEy
MSw4IEBAIHdpdGggKG9iaikKICAgfQogfQogYWN0dWFsID0gZigpOwotZXhwZWN0ID0gMzsKKy8v
IE1vemlsbGEgcmVzdWx0LCB3aGljaCBjb250cmFkaWN0cyBJRSBhbmQgdGhlIEVDTUEgc3BlYzog
ZXhwZWN0ID0gMzsKK2V4cGVjdCA9IDE7CiBhZGRUaGlzKCk7CiAKIApAQCAtMTM5LDcgKzE0Miw4
IEBAIHdpdGggKG9iaikKIH0KIGRlbGV0ZSBvYmo7CiBhY3R1YWwgPSBmKCk7Ci1leHBlY3QgPSAy
OworLy8gTW96aWxsYSByZXN1bHQsIHdoaWNoIGNvbnRyYWRpY3RzIElFIGFuZCB0aGUgRUNNQSBz
cGVjOiBleHBlY3QgPSAyOworZXhwZWN0ID0gMTsKIGFkZFRoaXMoKTsKIAogCkBAIC0xNjMsNyAr
MTY3LDggQEAgd2l0aCAob2JqKQogewogICBhY3R1YWwgPSBmKCk7CiB9Ci1leHBlY3QgPSAyOyAg
Ly8gTk9UIDMgISEhCisvLyBNb3ppbGxhIHJlc3VsdCwgd2hpY2ggY29udHJhZGljdHMgSUUgYW5k
IHRoZSBFQ01BIHNwZWM6IGV4cGVjdCA9IDI7ICAvLyBOT1QgMyAhISEKK2V4cGVjdCA9IDE7CiBh
ZGRUaGlzKCk7CiAKIApJbmRleDogdGVzdHMvbW96aWxsYS9qczFfNS9TY29wZS9yZWdyZXNzLTE4
NDEwNy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0cy9tb3ppbGxhL2pzMV81L1Njb3BlL3JlZ3Jlc3Mt
MTg0MTA3LmpzCShyZXZpc2lvbiAyNTgxNSkKKysrIHRlc3RzL21vemlsbGEvanMxXzUvU2NvcGUv
cmVncmVzcy0xODQxMDcuanMJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAgdmFyIGFj
dHVhbHZhbHVlcyA9IFtdOwogdmFyIGV4cGVjdD0gJyc7CiB2YXIgZXhwZWN0ZWR2YWx1ZXMgPSBb
XTsKIAoreSA9IDE7CiB2YXIgb2JqID0ge3k6MTB9Owogd2l0aCAob2JqKQogewpAQCAtNzcsNyAr
NzgsOCBAQCBhZGRUaGlzKCk7CiAKIHN0YXR1cyA9IGluU2VjdGlvbigyKTsKIGFjdHVhbCA9IGYo
KTsKLWV4cGVjdCA9IG9iai55OworLy8gTW96aWxsYSByZXN1bHQsIHdoaWNoIGNvbnRyYWRpY3Rz
IElFIGFuZCB0aGUgRUNNQSBzcGVjOiBleHBlY3QgPSBvYmoueTsKK2V4cGVjdCA9IHk7CiBhZGRU
aGlzKCk7CiAKIHN0YXR1cyA9IGluU2VjdGlvbigzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16643</attachid>
            <date>2007-10-12 13:05:11 -0700</date>
            <delta_ts>2007-10-13 18:30:33 -0700</delta_ts>
            <desc>Patch2</desc>
            <filename>patch-iterative-declaration.txt</filename>
            <type>text/plain</type>
            <size>43351</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gMjU4MTUpCisrKyBK
YXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw2IEBACiAKICNpbmNsdWRlICJpZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiZnVuY3Rpb24u
aCIKLSNpbmNsdWRlICJub2Rlcy5oIgogI2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAi
b2JqZWN0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pz
L2Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjU4MTUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZnVu
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUsNyArMzI1LDcgQEAgQ29tcGxldGlvbiBE
ZWNsYXJlZEZ1bmN0aW9uSW1wOjpleGVjdXRlKAogCiB2b2lkIERlY2xhcmVkRnVuY3Rpb25JbXA6
OnByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIGJvZHktPnByb2Nlc3NWYXJE
ZWNscyhleGVjKTsKKyAgICBib2R5LT5wcm9jZXNzRGVjbGFyYXRpb25zKGV4ZWMpOwogfQogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW5kZXhUb05hbWVNYXAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04MzksNyArODM5LDcgQEAgSlNWYWx1ZSogR2xv
YmFsRnVuY0ltcDo6Y2FsbEFzRnVuY3Rpb24oRQogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICAvLyBleGVjdXRlIHRoZSBjb2RlCi0gICAgICAgIHByb2dOb2RlLT5wcm9jZXNzVmFyRGVjbHMo
Jm5ld0V4ZWMpOworICAgICAgICBwcm9nTm9kZS0+cHJvY2Vzc0RlY2xhcmF0aW9ucygmbmV3RXhl
Yyk7CiAgICAgICAgIENvbXBsZXRpb24gYyA9IHByb2dOb2RlLT5leGVjdXRlKCZuZXdFeGVjKTsK
ICAgICAgICAgICAKICAgICAgICAgaWYgKHN3aXRjaEdsb2JhbCkKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9pbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pz
L2ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjU4MTUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
aW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUsNyArMzY1LDcgQEAgQ29tcGxl
dGlvbiBJbnRlcnByZXRlcjo6ZXZhbHVhdGUoY29uc3QgVQogICAgICAgICBDb250ZXh0IGN0eChn
bG9iYWxPYmosIHRoaXMsIHRoaXNPYmosIHByb2dOb2RlLmdldCgpKTsKICAgICAgICAgRXhlY1N0
YXRlIG5ld0V4ZWModGhpcywgJmN0eCk7CiAgICAgICAgIGN0eC5zZXRFeGVjU3RhdGUoJm5ld0V4
ZWMpOwotICAgICAgICBwcm9nTm9kZS0+cHJvY2Vzc1ZhckRlY2xzKCZuZXdFeGVjKTsKKyAgICAg
ICAgcHJvZ05vZGUtPnByb2Nlc3NEZWNsYXJhdGlvbnMoJm5ld0V4ZWMpOwogICAgICAgICByZXMg
PSBwcm9nTm9kZS0+ZXhlY3V0ZSgmbmV3RXhlYyk7CiAgICAgfQogICAgIApJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
bm9kZXMuY3BwCShyZXZpc2lvbiAyNTgxNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQCBzdGF0aWMgSGFzaFNldDxOb2Rl
Kj4qIG5ld05vZGVzOwogc3RhdGljIEhhc2hDb3VudGVkU2V0PE5vZGUqPiogbm9kZUV4dHJhUmVm
Q291bnRzOwogCiBOb2RlOjpOb2RlKCkKKyAgICA6IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyhmYWxz
ZSkKIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgKytOb2RlQ291bnRlcjo6Y291bnQ7CkBAIC0zMjcs
MTAgKzMyOCw2IEBAIGJvb2wgU3RhdGVtZW50Tm9kZTo6aGl0U3RhdGVtZW50KEV4ZWNTdGEKICAg
ICByZXR1cm4gdHJ1ZTsgLy8gY29udGludWUKIH0KIAotdm9pZCBTdGF0ZW1lbnROb2RlOjpwcm9j
ZXNzRnVuY0RlY2woRXhlY1N0YXRlKikKLXsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIE51bGxOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogSlNWYWx1ZSAqTnVsbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqKQpAQCAtMTU4NSw2ICsx
NTgyLDEyIEBAIEpTVmFsdWUgKkFzc2lnbkV4cHJOb2RlOjpldmFsdWF0ZShFeGVjU3QKIFZhckRl
Y2xOb2RlOjpWYXJEZWNsTm9kZShjb25zdCBJZGVudGlmaWVyICZpZCwgQXNzaWduRXhwck5vZGUg
KmluLCBUeXBlIHQpCiAgICAgOiB2YXJUeXBlKHQpLCBpZGVudChpZCksIGluaXQoaW4pCiB7Cisg
ICAgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgCit9CisKK3ZvaWQgVmFyRGVjbE5vZGU6
OmdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYgc3RhY2tzKQoreyAKKyAgICBzdGFj
a3MudmFyU3RhY2suYXBwZW5kKHRoaXMpOyAKIH0KIAogSlNWYWx1ZSogVmFyRGVjbE5vZGU6Omhh
bmRsZVNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4sIEpT
VmFsdWUqIHZhbCkKQEAgLTE2NTksNyArMTY2Miw3IEBAIEpTVmFsdWUqIFZhckRlY2xOb2RlOjpl
dmFsdWF0ZShFeGVjU3RhdGUKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBWYXJEZWNsTm9kZTo6
cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYykKK3ZvaWQgVmFyRGVjbE5vZGU6OnByb2Nl
c3NEZWNsYXJhdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgIEpTT2JqZWN0KiB2YXJpYWJsZSA9
IGV4ZWMtPmNvbnRleHQoKS0+dmFyaWFibGVPYmplY3QoKTsKIApAQCAtMTY4NywxMCArMTY5MCwx
NCBAQCBKU1ZhbHVlICpWYXJEZWNsTGlzdE5vZGU6OmV2YWx1YXRlKEV4ZWNTCiAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi12b2lkIFZhckRlY2xMaXN0Tm9kZTo6cHJvY2Vzc1ZhckRlY2xz
KEV4ZWNTdGF0ZSAqZXhlYykKK3ZvaWQgVmFyRGVjbExpc3ROb2RlOjpnZXREZWNsYXJhdGlvbnMo
RGVjbGFyYXRpb25TdGFja3MmIHN0YWNrcykgCiB7Ci0gIGZvciAoVmFyRGVjbExpc3ROb2RlICpu
ID0gdGhpczsgbjsgbiA9IG4tPm5leHQuZ2V0KCkpCi0gICAgbi0+dmFyLT5wcm9jZXNzVmFyRGVj
bHMoZXhlYyk7CisgICAgaWYgKG5leHQpIHsKKyAgICAgICAgQVNTRVJUKG5leHQtPm1heUhhdmVE
ZWNsYXJhdGlvbnMoKSk7CisgICAgICAgIHN0YWNrcy5ub2RlU3RhY2suYXBwZW5kKG5leHQuZ2V0
KCkpOyAKKyAgICB9CisgICAgQVNTRVJUKHZhci0+bWF5SGF2ZURlY2xhcmF0aW9ucygpKTsKKyAg
ICBzdGFja3Mubm9kZVN0YWNrLmFwcGVuZCh2YXIuZ2V0KCkpOyAKIH0KIAogdm9pZCBWYXJEZWNs
TGlzdE5vZGU6OmJyZWFrQ3ljbGUoKSAKQEAgLTE3MTEsOSArMTcxOCwxMCBAQCBDb21wbGV0aW9u
IFZhclN0YXRlbWVudE5vZGU6OmV4ZWN1dGUoRXhlCiAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1h
bCk7CiB9CiAKLXZvaWQgVmFyU3RhdGVtZW50Tm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0
ZSAqZXhlYykKK3ZvaWQgVmFyU3RhdGVtZW50Tm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0
aW9uU3RhY2tzJiBzdGFja3MpCiB7Ci0gIG5leHQtPnByb2Nlc3NWYXJEZWNscyhleGVjKTsKKyAg
ICBBU1NFUlQobmV4dC0+bWF5SGF2ZURlY2xhcmF0aW9ucygpKTsKKyAgICBzdGFja3Mubm9kZVN0
YWNrLmFwcGVuZChuZXh0LmdldCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEJsb2NrTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg
LTE3MjEsNiArMTcyOSw3IEBAIHZvaWQgVmFyU3RhdGVtZW50Tm9kZTo6cHJvY2Vzc1ZhckRlY2xz
KEUKIEJsb2NrTm9kZTo6QmxvY2tOb2RlKFNvdXJjZUVsZW1lbnRzTm9kZSAqcykKIHsKICAgaWYg
KHMpIHsKKyAgICBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyAKICAgICBzb3VyY2UgPSBz
LT5uZXh0LnJlbGVhc2UoKTsKICAgICBQYXJzZXI6OnJlbW92ZU5vZGVDeWNsZShzb3VyY2UuZ2V0
KCkpOwogICAgIHNldExvYyhzLT5maXJzdExpbmUoKSwgcy0+bGFzdExpbmUoKSk7CkBAIC0xNzI5
LDIzICsxNzM4LDIxIEBAIEJsb2NrTm9kZTo6QmxvY2tOb2RlKFNvdXJjZUVsZW1lbnRzTm9kZSAK
ICAgfQogfQogCit2b2lkIEJsb2NrTm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3Rh
Y2tzJiBzdGFja3MpCit7IAorICAgIEFTU0VSVChzb3VyY2UgJiYgc291cmNlLT5tYXlIYXZlRGVj
bGFyYXRpb25zKCkpOworICAgIHN0YWNrcy5ub2RlU3RhY2suYXBwZW5kKHNvdXJjZS5nZXQoKSk7
IAorfQorCiAvLyBFQ01BIDEyLjEKIENvbXBsZXRpb24gQmxvY2tOb2RlOjpleGVjdXRlKEV4ZWNT
dGF0ZSAqZXhlYykKIHsKICAgaWYgKCFzb3VyY2UpCiAgICAgcmV0dXJuIENvbXBsZXRpb24oTm9y
bWFsKTsKIAotICBzb3VyY2UtPnByb2Nlc3NGdW5jRGVjbChleGVjKTsKLQogICByZXR1cm4gc291
cmNlLT5leGVjdXRlKGV4ZWMpOwogfQogCi12b2lkIEJsb2NrTm9kZTo6cHJvY2Vzc1ZhckRlY2xz
KEV4ZWNTdGF0ZSAqZXhlYykKLXsKLSAgaWYgKHNvdXJjZSkKLSAgICBzb3VyY2UtPnByb2Nlc3NW
YXJEZWNscyhleGVjKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVt
cHR5U3RhdGVtZW50Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNNQSAx
Mi4zCkBAIC0xNzkwLDEyICsxNzk3LDEyIEBAIENvbXBsZXRpb24gSWZOb2RlOjpleGVjdXRlKEV4
ZWNTdGF0ZSAqZXgKICAgcmV0dXJuIHN0YXRlbWVudDItPmV4ZWN1dGUoZXhlYyk7CiB9CiAKLXZv
aWQgSWZOb2RlOjpwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKQotewotICBzdGF0ZW1l
bnQxLT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7Ci0KLSAgaWYgKHN0YXRlbWVudDIpCi0gICAgc3Rh
dGVtZW50Mi0+cHJvY2Vzc1ZhckRlY2xzKGV4ZWMpOwordm9pZCBJZk5vZGU6OmdldERlY2xhcmF0
aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYgc3RhY2tzKQoreyAKKyAgICBpZiAoc3RhdGVtZW50MiAm
JiBzdGF0ZW1lbnQyLT5tYXlIYXZlRGVjbGFyYXRpb25zKCkpIAorICAgICAgICBzdGFja3Mubm9k
ZVN0YWNrLmFwcGVuZChzdGF0ZW1lbnQyLmdldCgpKTsgCisgICAgaWYgKHN0YXRlbWVudDEtPm1h
eUhhdmVEZWNsYXJhdGlvbnMoKSkgCisgICAgICAgIHN0YWNrcy5ub2RlU3RhY2suYXBwZW5kKHN0
YXRlbWVudDEuZ2V0KCkpOyAKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IERvV2hpbGVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE4MzIs
OSArMTgzOSwxMCBAQCBDb21wbGV0aW9uIERvV2hpbGVOb2RlOjpleGVjdXRlKEV4ZWNTdGF0CiAg
IHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCwgMCk7CiB9CiAKLXZvaWQgRG9XaGlsZU5vZGU6OnBy
b2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpCi17Ci0gIHN0YXRlbWVudC0+cHJvY2Vzc1Zh
ckRlY2xzKGV4ZWMpOwordm9pZCBEb1doaWxlTm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0
aW9uU3RhY2tzJiBzdGFja3MpCit7IAorICAgIGlmIChzdGF0ZW1lbnQtPm1heUhhdmVEZWNsYXJh
dGlvbnMoKSkgCisgICAgICAgIHN0YWNrcy5ub2RlU3RhY2suYXBwZW5kKHN0YXRlbWVudC5nZXQo
KSk7IAogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2hpbGVOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTg4MSw5ICsxODg5LDEwIEBA
IENvbXBsZXRpb24gV2hpbGVOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAKICAgcmV0dXJuIENvbXBs
ZXRpb24oKTsgLy8gd29yayBhcm91bmQgZ2NjIDQuMCBidWcKIH0KIAotdm9pZCBXaGlsZU5vZGU6
OnByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpCi17Ci0gIHN0YXRlbWVudC0+cHJvY2Vz
c1ZhckRlY2xzKGV4ZWMpOwordm9pZCBXaGlsZU5vZGU6OmdldERlY2xhcmF0aW9ucyhEZWNsYXJh
dGlvblN0YWNrcyYgc3RhY2tzKQoreyAKKyAgICBpZiAoc3RhdGVtZW50LT5tYXlIYXZlRGVjbGFy
YXRpb25zKCkpIAorICAgICAgICBzdGFja3Mubm9kZVN0YWNrLmFwcGVuZChzdGF0ZW1lbnQuZ2V0
KCkpOyAKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZvck5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE5MzEsMTIgKzE5NDAsMTIg
QEAgQ29tcGxldGlvbiBGb3JOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZQogICByZXR1cm4gQ29t
cGxldGlvbigpOyAvLyB3b3JrIGFyb3VuZCBnY2MgNC4wIGJ1ZwogfQogCi12b2lkIEZvck5vZGU6
OnByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpCi17Ci0gIGlmIChleHByMSkKLSAgICBl
eHByMS0+cHJvY2Vzc1ZhckRlY2xzKGV4ZWMpOwotCi0gIHN0YXRlbWVudC0+cHJvY2Vzc1ZhckRl
Y2xzKGV4ZWMpOwordm9pZCBGb3JOb2RlOjpnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFj
a3MmIHN0YWNrcykKK3sgCisgICAgaWYgKHN0YXRlbWVudC0+bWF5SGF2ZURlY2xhcmF0aW9ucygp
KSAKKyAgICAgICAgc3RhY2tzLm5vZGVTdGFjay5hcHBlbmQoc3RhdGVtZW50LmdldCgpKTsgCisg
ICAgaWYgKGV4cHIxICYmIGV4cHIxLT5tYXlIYXZlRGVjbGFyYXRpb25zKCkpIAorICAgICAgICBz
dGFja3Mubm9kZVN0YWNrLmFwcGVuZChleHByMS5nZXQoKSk7IAogfQogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gRm9ySW5Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQpAQCAtMTk0NCwxNiArMTk1MywyNyBAQCB2b2lkIEZvck5vZGU6OnByb2Nlc3NW
YXJEZWNscyhFeGVjU3RhdGUgCiBGb3JJbk5vZGU6OkZvckluTm9kZShOb2RlICpsLCBOb2RlICpl
LCBTdGF0ZW1lbnROb2RlICpzKQogICA6IGluaXQoMEwpLCBsZXhwcihsKSwgZXhwcihlKSwgdmFy
RGVjbCgwTCksIHN0YXRlbWVudChzKQogeworICAgIG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRy
dWU7IAogfQogCiBGb3JJbk5vZGU6OkZvckluTm9kZShjb25zdCBJZGVudGlmaWVyICZpLCBBc3Np
Z25FeHByTm9kZSAqaW4sIE5vZGUgKmUsIFN0YXRlbWVudE5vZGUgKnMpCiAgIDogaWRlbnQoaSks
IGluaXQoaW4pLCBleHByKGUpLCBzdGF0ZW1lbnQocykKIHsKKyAgbV9tYXlIYXZlRGVjbGFyYXRp
b25zID0gdHJ1ZTsgCisKICAgLy8gZm9yKCB2YXIgZm9vID0gYmFyIGluIGJheiApCiAgIHZhckRl
Y2wgPSBuZXcgVmFyRGVjbE5vZGUoaWRlbnQsIGluaXQuZ2V0KCksIFZhckRlY2xOb2RlOjpWYXJp
YWJsZSk7CiAgIGxleHByID0gbmV3IFJlc29sdmVOb2RlKGlkZW50KTsKIH0KIAordm9pZCBGb3JJ
bk5vZGU6OmdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYgc3RhY2tzKQoreyAKKyAg
ICBpZiAoc3RhdGVtZW50LT5tYXlIYXZlRGVjbGFyYXRpb25zKCkpIAorICAgICAgICBzdGFja3Mu
bm9kZVN0YWNrLmFwcGVuZChzdGF0ZW1lbnQuZ2V0KCkpOyAKKyAgICBpZiAodmFyRGVjbCAmJiB2
YXJEZWNsLT5tYXlIYXZlRGVjbGFyYXRpb25zKCkpIAorICAgICAgICBzdGFja3Mubm9kZVN0YWNr
LmFwcGVuZCh2YXJEZWNsLmdldCgpKTsgCit9CisKIC8vIEVDTUEgMTIuNi40CiBDb21wbGV0aW9u
IEZvckluTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0yMDU3LDEzICsyMDc3
LDYgQEAgQ29tcGxldGlvbiBGb3JJbk5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlIAogICByZXR1cm4g
Q29tcGxldGlvbihOb3JtYWwsIHJldHZhbCk7CiB9CiAKLXZvaWQgRm9ySW5Ob2RlOjpwcm9jZXNz
VmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKQotewotICBpZiAodmFyRGVjbCkKLSAgICB2YXJEZWNs
LT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7Ci0gIHN0YXRlbWVudC0+cHJvY2Vzc1ZhckRlY2xzKGV4
ZWMpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29udGludWVOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBFQ01BIDEyLjcKQEAgLTIx
MTgsNiArMjEzMSwxMiBAQCBDb21wbGV0aW9uIFJldHVybk5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRl
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXaXRoTm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3ZvaWQgV2l0aE5vZGU6OmdldERlY2xhcmF0
aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYgc3RhY2tzKQoreyAKKyAgICBpZiAoc3RhdGVtZW50LT5t
YXlIYXZlRGVjbGFyYXRpb25zKCkpIAorICAgICAgICBzdGFja3Mubm9kZVN0YWNrLmFwcGVuZChz
dGF0ZW1lbnQuZ2V0KCkpOyAKK30KKwogLy8gRUNNQSAxMi4xMAogQ29tcGxldGlvbiBXaXRoTm9k
ZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0yMTM0LDEzICsyMTUzLDE0IEBAIENv
bXBsZXRpb24gV2l0aE5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICoKICAgcmV0dXJuIHJlczsKIH0K
IAotdm9pZCBXaXRoTm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYykKLXsKLSAg
c3RhdGVtZW50LT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBDYXNlQ2xhdXNlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKK3ZvaWQgQ2FzZUNsYXVzZU5vZGU6OmdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlv
blN0YWNrcyYgc3RhY2tzKQoreyAKKyAgICBpZiAoc291cmNlICYmIHNvdXJjZS0+bWF5SGF2ZURl
Y2xhcmF0aW9ucygpKSAKKyAgICAgICAgc3RhY2tzLm5vZGVTdGFjay5hcHBlbmQoc291cmNlLmdl
dCgpKTsgCit9CisKIC8vIEVDTUEgMTIuMTEKIEpTVmFsdWUgKkNhc2VDbGF1c2VOb2RlOjpldmFs
dWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0yMTU5LDIwICsyMTc5LDE2IEBAIENvbXBsZXRp
b24gQ2FzZUNsYXVzZU5vZGU6OmV2YWxTdGF0ZW1lbnQKICAgICByZXR1cm4gQ29tcGxldGlvbihO
b3JtYWwsIGpzVW5kZWZpbmVkKCkpOwogfQogCi12b2lkIENhc2VDbGF1c2VOb2RlOjpwcm9jZXNz
VmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKQotewotICBpZiAoc291cmNlKQotICAgIHNvdXJjZS0+
cHJvY2Vzc1ZhckRlY2xzKGV4ZWMpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIENsYXVzZUxpc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9p
ZCBDYXNlQ2xhdXNlTm9kZTo6cHJvY2Vzc0Z1bmNEZWNsKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
aWYgKHNvdXJjZSkKLSAgICAgIHNvdXJjZS0+cHJvY2Vzc0Z1bmNEZWNsKGV4ZWMpOwordm9pZCBD
bGF1c2VMaXN0Tm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJiBzdGFja3Mp
Cit7IAorICAgIGlmIChuZXh0ICYmIG5leHQtPm1heUhhdmVEZWNsYXJhdGlvbnMoKSkgCisgICAg
ICAgIHN0YWNrcy5ub2RlU3RhY2suYXBwZW5kKG5leHQuZ2V0KCkpOyAKKyAgICBpZiAoY2xhdXNl
LT5tYXlIYXZlRGVjbGFyYXRpb25zKCkpIAorICAgICAgICBzdGFja3Mubm9kZVN0YWNrLmFwcGVu
ZChjbGF1c2UuZ2V0KCkpOyAKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IENsYXVzZUxpc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogSlNWYWx1
ZSAqQ2xhdXNlTGlzdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqKQogewogICAvLyBzaG91bGQg
bmV2ZXIgYmUgY2FsbGVkCkBAIC0yMTgwLDIxICsyMTk2LDYgQEAgSlNWYWx1ZSAqQ2xhdXNlTGlz
dE5vZGU6OmV2YWx1YXRlKEV4ZWNTdAogICByZXR1cm4gMDsKIH0KIAotLy8gRUNNQSAxMi4xMQot
dm9pZCBDbGF1c2VMaXN0Tm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYykKLXsK
LSAgZm9yIChDbGF1c2VMaXN0Tm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5uZXh0LmdldCgpKQot
ICAgIGlmIChuLT5jbGF1c2UpCi0gICAgICBuLT5jbGF1c2UtPnByb2Nlc3NWYXJEZWNscyhleGVj
KTsKLX0KLQotdm9pZCBDbGF1c2VMaXN0Tm9kZTo6cHJvY2Vzc0Z1bmNEZWNsKEV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgZm9yIChDbGF1c2VMaXN0Tm9kZSogbiA9IHRoaXM7IG47IG4gPSBuLT5uZXh0
LmdldCgpKQotICAgIGlmIChuLT5jbGF1c2UpCi0gICAgICBuLT5jbGF1c2UtPnByb2Nlc3NGdW5j
RGVjbChleGVjKTsKLX0KLQogdm9pZCBDbGF1c2VMaXN0Tm9kZTo6YnJlYWtDeWNsZSgpIAogeyAK
ICAgICBuZXh0ID0gMDsKQEAgLTIyMDUsNiArMjIwNiw3IEBAIHZvaWQgQ2xhdXNlTGlzdE5vZGU6
OmJyZWFrQ3ljbGUoKSAKIENhc2VCbG9ja05vZGU6OkNhc2VCbG9ja05vZGUoQ2xhdXNlTGlzdE5v
ZGUgKmwxLCBDYXNlQ2xhdXNlTm9kZSAqZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q2xhdXNlTGlzdE5vZGUgKmwyKQogeworICBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyAK
ICAgaWYgKGwxKSB7CiAgICAgbGlzdDEgPSBsMS0+bmV4dC5yZWxlYXNlKCk7CiAgICAgUGFyc2Vy
OjpyZW1vdmVOb2RlQ3ljbGUobGlzdDEuZ2V0KCkpOwpAQCAtMjIyMiw2ICsyMjI0LDE2IEBAIENh
c2VCbG9ja05vZGU6OkNhc2VCbG9ja05vZGUoQ2xhdXNlTGlzdE4KICAgfQogfQogIAordm9pZCBD
YXNlQmxvY2tOb2RlOjpnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmIHN0YWNrcykg
Cit7IAorICAgIGlmIChsaXN0MiAmJiBsaXN0Mi0+bWF5SGF2ZURlY2xhcmF0aW9ucygpKSAKKyAg
ICAgICAgc3RhY2tzLm5vZGVTdGFjay5hcHBlbmQobGlzdDIuZ2V0KCkpOworICAgIGlmIChkZWYg
JiYgZGVmLT5tYXlIYXZlRGVjbGFyYXRpb25zKCkpIAorICAgICAgICBzdGFja3Mubm9kZVN0YWNr
LmFwcGVuZChkZWYuZ2V0KCkpOyAKKyAgICBpZiAobGlzdDEgJiYgbGlzdDEtPm1heUhhdmVEZWNs
YXJhdGlvbnMoKSkgCisgICAgICAgIHN0YWNrcy5ub2RlU3RhY2suYXBwZW5kKGxpc3QxLmdldCgp
KTsgCit9CisKIEpTVmFsdWUgKkNhc2VCbG9ja05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqKQog
ewogICAvLyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkCkBAIC0yMjkyLDI4ICsyMzA0LDE0IEBAIENv
bXBsZXRpb24gQ2FzZUJsb2NrTm9kZTo6ZXZhbEJsb2NrKEV4ZWMKICAgcmV0dXJuIENvbXBsZXRp
b24oTm9ybWFsKTsKIH0KIAotdm9pZCBDYXNlQmxvY2tOb2RlOjpwcm9jZXNzVmFyRGVjbHMoRXhl
Y1N0YXRlICpleGVjKQotewotICBpZiAobGlzdDEpCi0gICAgbGlzdDEtPnByb2Nlc3NWYXJEZWNs
cyhleGVjKTsKLSAgaWYgKGRlZikKLSAgICBkZWYtPnByb2Nlc3NWYXJEZWNscyhleGVjKTsKLSAg
aWYgKGxpc3QyKQotICAgIGxpc3QyLT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7Ci19Ci0KLXZvaWQg
Q2FzZUJsb2NrTm9kZTo6cHJvY2Vzc0Z1bmNEZWNsKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgaWYg
KGxpc3QxKQotICAgbGlzdDEtPnByb2Nlc3NGdW5jRGVjbChleGVjKTsKLSAgaWYgKGRlZikKLSAg
ICBkZWYtPnByb2Nlc3NGdW5jRGVjbChleGVjKTsKLSAgaWYgKGxpc3QyKQotICAgIGxpc3QyLT5w
cm9jZXNzRnVuY0RlY2woZXhlYyk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBTd2l0Y2hOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3Zv
aWQgU3dpdGNoTm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJiBzdGFja3Mp
IAoreyAKKyAgICBpZiAoYmxvY2stPm1heUhhdmVEZWNsYXJhdGlvbnMoKSkgCisgICAgICAgIHN0
YWNrcy5ub2RlU3RhY2suYXBwZW5kKGJsb2NrLmdldCgpKTsgCit9CisKIC8vIEVDTUEgMTIuMTEK
IENvbXBsZXRpb24gU3dpdGNoTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CkBAIC0y
MzMxLDE4ICsyMzI5LDE0IEBAIENvbXBsZXRpb24gU3dpdGNoTm9kZTo6ZXhlY3V0ZShFeGVjU3Rh
dGUKICAgcmV0dXJuIHJlczsKIH0KIAotdm9pZCBTd2l0Y2hOb2RlOjpwcm9jZXNzVmFyRGVjbHMo
RXhlY1N0YXRlICpleGVjKQotewotICBibG9jay0+cHJvY2Vzc1ZhckRlY2xzKGV4ZWMpOwotfQor
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExhYmVsTm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBTd2l0Y2hOb2RlOjpwcm9jZXNzRnVuY0Rl
Y2woRXhlY1N0YXRlKiBleGVjKQotewotICBibG9jay0+cHJvY2Vzc0Z1bmNEZWNsKGV4ZWMpOwor
dm9pZCBMYWJlbE5vZGU6OmdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYgc3RhY2tz
KSAKK3sgCisgICAgaWYgKHN0YXRlbWVudC0+bWF5SGF2ZURlY2xhcmF0aW9ucygpKSAKKyAgICAg
ICAgc3RhY2tzLm5vZGVTdGFjay5hcHBlbmQoc3RhdGVtZW50LmdldCgpKTsgCiB9CiAKLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMYWJlbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KIC8vIEVDTUEgMTIuMTIKIENvbXBsZXRpb24gTGFiZWxOb2Rl
OjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKQEAgLTIzNTYsMTEgKzIzNTAsNiBAQCBDb21w
bGV0aW9uIExhYmVsTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgCiAgIHJldHVybiBlOwogfQogCi12
b2lkIExhYmVsTm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYykKLXsKLSAgc3Rh
dGVtZW50LT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBUaHJvd05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIC8vIEVDTUEgMTIuMTMKQEAgLTIzNzcsNiArMjM2NiwxNiBAQCBDb21wbGV0aW9uIFRo
cm93Tm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBUcnlOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
K3ZvaWQgVHJ5Tm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJiBzdGFja3Mp
IAoreyAKKyAgICBpZiAoZmluYWxseUJsb2NrICYmIGZpbmFsbHlCbG9jay0+bWF5SGF2ZURlY2xh
cmF0aW9ucygpKSAKKyAgICAgICAgc3RhY2tzLm5vZGVTdGFjay5hcHBlbmQoZmluYWxseUJsb2Nr
LmdldCgpKTsgCisgICAgaWYgKGNhdGNoQmxvY2sgJiYgY2F0Y2hCbG9jay0+bWF5SGF2ZURlY2xh
cmF0aW9ucygpKSAKKyAgICAgICAgc3RhY2tzLm5vZGVTdGFjay5hcHBlbmQoY2F0Y2hCbG9jay5n
ZXQoKSk7IAorICAgIGlmICh0cnlCbG9jay0+bWF5SGF2ZURlY2xhcmF0aW9ucygpKSAKKyAgICAg
ICAgc3RhY2tzLm5vZGVTdGFjay5hcHBlbmQodHJ5QmxvY2suZ2V0KCkpOyAKK30KKwogLy8gRUNN
QSAxMi4xNAogQ29tcGxldGlvbiBUcnlOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsK
QEAgLTI0MDEsMTUgKzI0MDAsNiBAQCBDb21wbGV0aW9uIFRyeU5vZGU6OmV4ZWN1dGUoRXhlY1N0
YXRlICplCiAgIHJldHVybiBjOwogfQogCi12b2lkIFRyeU5vZGU6OnByb2Nlc3NWYXJEZWNscyhF
eGVjU3RhdGUgKmV4ZWMpCi17Ci0gIHRyeUJsb2NrLT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7Ci0g
IGlmIChjYXRjaEJsb2NrKQotICAgIGNhdGNoQmxvY2stPnByb2Nlc3NWYXJEZWNscyhleGVjKTsK
LSAgaWYgKGZpbmFsbHlCbG9jaykKLSAgICBmaW5hbGx5QmxvY2stPnByb2Nlc3NWYXJEZWNscyhl
eGVjKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBhcmFtZXRlck5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNNQSAxMwpAQCAtMjQz
NCwxMCArMjQyNCwzNiBAQCBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKFNvdXJj
CiAgIHNldExvYygtMSwgLTEpOwogfQogCi12b2lkIEZ1bmN0aW9uQm9keU5vZGU6OnByb2Nlc3NG
dW5jRGVjbChFeGVjU3RhdGUgKmV4ZWMpCit2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OnByb2Nlc3NE
ZWNsYXJhdGlvbnMoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChzb3VyY2UpCi0gICAgICAg
IHNvdXJjZS0+cHJvY2Vzc0Z1bmNEZWNsKGV4ZWMpOworICAgIE5vZGUqIG5vZGUgPSBzb3VyY2Uu
Z2V0KCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBEZWNsYXJhdGlv
blN0YWNrcyBzdGFja3M7CisgICAgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0
YWNrID0gc3RhY2tzLm5vZGVTdGFjazsKKyAgICAKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICBBU1NFUlQobm9kZS0+bWF5SGF2ZURlY2xhcmF0aW9ucygpKTsgLy8gT3RoZXJ3aXNlLCB3ZSB3
YXN0ZWQgdGltZSBwdXR0aW5nIGFuIGlycmVsZXZhbnQgbm9kZSBvbiB0aGUgc3RhY2suCisgICAg
ICAgIG5vZGUtPmdldERlY2xhcmF0aW9ucyhzdGFja3MpOworICAgICAgICAKKyAgICAgICAgc2l6
ZV90IHNpemUgPSBub2RlU3RhY2suc2l6ZSgpOworICAgICAgICBpZiAoIXNpemUpCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgLS1zaXplOworICAgICAgICBub2RlID0gbm9kZVN0YWNrW3Np
emVdOworICAgICAgICBub2RlU3RhY2suc2hyaW5rKHNpemUpOworICAgIH0KKyAgICAKKyAgICBz
aXplX3QgaSwgc2l6ZTsKKworICAgIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiBm
dW5jdGlvblN0YWNrID0gc3RhY2tzLmZ1bmN0aW9uU3RhY2s7CisgICAgZm9yIChpID0gMCwgc2l6
ZSA9IGZ1bmN0aW9uU3RhY2suc2l6ZSgpOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICBmdW5jdGlv
blN0YWNrW2ldLT5wcm9jZXNzRGVjbGFyYXRpb24oZXhlYyk7CisKKyAgICBEZWNsYXJhdGlvblN0
YWNrczo6VmFyU3RhY2smIHZhclN0YWNrID0gc3RhY2tzLnZhclN0YWNrOworICAgIGZvciAoaSA9
IDAsIHNpemUgPSB2YXJTdGFjay5zaXplKCk7IGkgPCBzaXplOyBpKyspCisgICAgICAgIHZhclN0
YWNrW2ldLT5wcm9jZXNzRGVjbGFyYXRpb24oZXhlYyk7CiB9CiAKIHZvaWQgRnVuY3Rpb25Cb2R5
Tm9kZTo6YWRkUGFyYW0oY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCkBAIC0yNDY3LDggKzI0ODMs
MTIgQEAgdm9pZCBGdW5jRGVjbE5vZGU6OmFkZFBhcmFtcygpIAogICAgIGJvZHktPmFkZFBhcmFt
KHAtPmlkZW50KCkpOwogfQogCi0vLyBFQ01BIDEzCi12b2lkIEZ1bmNEZWNsTm9kZTo6cHJvY2Vz
c0Z1bmNEZWNsKEV4ZWNTdGF0ZSAqZXhlYykKK3ZvaWQgRnVuY0RlY2xOb2RlOjpnZXREZWNsYXJh
dGlvbnMoRGVjbGFyYXRpb25TdGFja3MmIHN0YWNrcykgCit7CisgICAgc3RhY2tzLmZ1bmN0aW9u
U3RhY2suYXBwZW5kKHRoaXMpOworfQorCit2b2lkIEZ1bmNEZWNsTm9kZTo6cHJvY2Vzc0RlY2xh
cmF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgQ29udGV4dCAqY29udGV4dCA9IGV4ZWMtPmNv
bnRleHQoKTsKIApAQCAtMjU0NCw2ICsyNTUzLDcgQEAgaW50IFNvdXJjZUVsZW1lbnRzTm9kZTo6
Y291bnQgPSAwOwogU291cmNlRWxlbWVudHNOb2RlOjpTb3VyY2VFbGVtZW50c05vZGUoU3RhdGVt
ZW50Tm9kZSAqczEpCiAgIDogbm9kZShzMSksIG5leHQodGhpcykKIHsKKyAgICBtX21heUhhdmVE
ZWNsYXJhdGlvbnMgPSB0cnVlOyAKICAgICBQYXJzZXI6Om5vdGVOb2RlQ3ljbGUodGhpcyk7CiAg
ICAgc2V0TG9jKHMxLT5maXJzdExpbmUoKSwgczEtPmxhc3RMaW5lKCkpOwogfQpAQCAtMjU1MSwx
MCArMjU2MSwxOSBAQCBTb3VyY2VFbGVtZW50c05vZGU6OlNvdXJjZUVsZW1lbnRzTm9kZShTCiBT
b3VyY2VFbGVtZW50c05vZGU6OlNvdXJjZUVsZW1lbnRzTm9kZShTb3VyY2VFbGVtZW50c05vZGUg
KnMxLCBTdGF0ZW1lbnROb2RlICpzMikKICAgOiBub2RlKHMyKSwgbmV4dChzMS0+bmV4dCkKIHsK
KyAgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgCiAgIHMxLT5uZXh0ID0gdGhpczsKICAg
c2V0TG9jKHMxLT5maXJzdExpbmUoKSwgczItPmxhc3RMaW5lKCkpOwogfQogCit2b2lkIFNvdXJj
ZUVsZW1lbnRzTm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJiBzdGFja3Mp
Cit7IAorICAgIGlmIChuZXh0ICYmIG5leHQtPm1heUhhdmVEZWNsYXJhdGlvbnMoKSkKKyAgICAg
ICAgc3RhY2tzLm5vZGVTdGFjay5hcHBlbmQobmV4dC5nZXQoKSk7CisgICAgaWYgKG5vZGUtPm1h
eUhhdmVEZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgc3RhY2tzLm5vZGVTdGFjay5hcHBlbmQobm9k
ZS5nZXQoKSk7Cit9CisKIC8vIEVDTUEgMTQKIENvbXBsZXRpb24gU291cmNlRWxlbWVudHNOb2Rl
OjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKQEAgLTI1NzgsMTkgKzI1OTcsNiBAQCBDb21w
bGV0aW9uIFNvdXJjZUVsZW1lbnRzTm9kZTo6ZXhlY3V0ZShFCiAgIHJldHVybiBjMTsKIH0KIAot
Ly8gRUNNQSAxNAotdm9pZCBTb3VyY2VFbGVtZW50c05vZGU6OnByb2Nlc3NGdW5jRGVjbChFeGVj
U3RhdGUgKmV4ZWMpCi17Ci0gIGZvciAoU291cmNlRWxlbWVudHNOb2RlICpuID0gdGhpczsgbjsg
biA9IG4tPm5leHQuZ2V0KCkpCi0gICAgbi0+bm9kZS0+cHJvY2Vzc0Z1bmNEZWNsKGV4ZWMpOwot
fQotCi12b2lkIFNvdXJjZUVsZW1lbnRzTm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAq
ZXhlYykKLXsKLSAgZm9yIChTb3VyY2VFbGVtZW50c05vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+
bmV4dC5nZXQoKSkKLSAgICBuLT5ub2RlLT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7Ci19Ci0KIHZv
aWQgU291cmNlRWxlbWVudHNOb2RlOjpicmVha0N5Y2xlKCkgCiB7IAogICAgIG5leHQgPSAwOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL25vZGVzLmgJKHJldmlzaW9uIDI1ODE1KQorKysgSmF2YVNjcmlwdENvcmUva2pz
L25vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEyICs0NCwxNCBAQAogCiBuYW1lc3BhY2Ug
S0pTIHsKIAorICBjbGFzcyBGdW5jRGVjbE5vZGU7CiAgIGNsYXNzIFByb2dyYW1Ob2RlOwogICBj
bGFzcyBQcm9wZXJ0eU5hbWVOb2RlOwogICBjbGFzcyBQcm9wZXJ0eUxpc3ROb2RlOwogICBjbGFz
cyBSZWdFeHA7CiAgIGNsYXNzIFNvdXJjZUVsZW1lbnRzTm9kZTsKICAgY2xhc3MgU291cmNlU3Ry
ZWFtOworICBjbGFzcyBWYXJEZWNsTm9kZTsKIAogICBlbnVtIE9wZXJhdG9yIHsgT3BFcXVhbCwK
ICAgICAgICAgICAgICAgICAgIE9wRXFFcSwKQEAgLTgxLDYgKzgzLDE2IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICAgICAgICAgICAgT3BJbiwKICAgICAgICAgICAgICAgICAgIE9wSW5zdGFu
Y2VPZgogICB9OworICAKKyAgc3RydWN0IERlY2xhcmF0aW9uU3RhY2tzIHsKKyAgICAgIHR5cGVk
ZWYgVmVjdG9yPE5vZGUqLCAxNj4gTm9kZVN0YWNrOworICAgICAgdHlwZWRlZiBWZWN0b3I8VmFy
RGVjbE5vZGUqLCAxNj4gVmFyU3RhY2s7CisgICAgICB0eXBlZGVmIFZlY3RvcjxGdW5jRGVjbE5v
ZGUqLCAxNj4gRnVuY3Rpb25TdGFjazsKKyAgICAgIAorICAgICAgTm9kZVN0YWNrIG5vZGVTdGFj
azsKKyAgICAgIFZhclN0YWNrIHZhclN0YWNrOyAKKyAgICAgIEZ1bmN0aW9uU3RhY2sgZnVuY3Rp
b25TdGFjazsKKyAgfTsKIAogICBjbGFzcyBOb2RlIHsKICAgcHVibGljOgpAQCAtOTAsOSArMTAy
LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBKU1ZhbHVlICpldmFsdWF0ZShFeGVj
U3RhdGUgKmV4ZWMpIEtKU19GQVNUX0NBTEwgPSAwOwogICAgIFVTdHJpbmcgdG9TdHJpbmcoKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1Zh
ckRlY2xzKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEwge30KICAgICBpbnQgbGluZU5vKCkgY29u
c3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBtX2xpbmU7IH0KLQogICAgIHZvaWQgcmVmKCkgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2b2lkIGRlcmVmKCkgS0pTX0ZBU1RfQ0FMTDsKICAgICB1bnNpZ25l
ZCByZWZjb3VudCgpIEtKU19GQVNUX0NBTEw7CkBAIC0xMDUsNiArMTE1LDEyIEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgIHZpcnR1YWwgYm9vbCBpc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSBjb25zdCBL
SlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRG90QWNj
ZXNzb3JOb2RlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc0dyb3VwTm9kZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbkRlY2xhcmF0aW9uKCkgY29uc3QgS0pT
X0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1ZhcmlhYmxl
RGVjbGFyYXRpb24oKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAg
ICAvLyBVc2VkIGZvciBpdGVyYXRpdmUsIGRlcHRoLWZpcnN0IHRyYXZlcnNhbCBvZiB0aGUgbm9k
ZSB0cmVlLiBEb2VzIG5vdCBjcm9zcyBmdW5jdGlvbiBjYWxsIGJvdW5kYXJpZXMuCisgICAgYm9v
bCBtYXlIYXZlRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9tYXlIYXZlRGVjbGFyYXRpb25zOyB9
CisgICAgdmlydHVhbCB2b2lkIGdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYpIEtK
U19GQVNUX0NBTEwgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCiAgICAgdmlydHVhbCB2b2lk
IGJyZWFrQ3ljbGUoKSBLSlNfRkFTVF9DQUxMIHsgfQogCkBAIC0xMjUsNyArMTQxLDggQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgdm9pZCBoYW5kbGVFeGNlcHRpb24oRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2b2lkIGhhbmRsZUV4Y2VwdGlvbihFeGVjU3RhdGUqLCBKU1ZhbHVlKikg
S0pTX0ZBU1RfQ0FMTDsKIAotICAgIGludCBtX2xpbmU7CisgICAgaW50IG1fbGluZSA6IDMxOwor
ICAgIGJvb2wgbV9tYXlIYXZlRGVjbGFyYXRpb25zIDogMTsKICAgcHJpdmF0ZToKICAgICAvLyBk
aXNhbGxvdyBhc3NpZ25tZW50CiAgICAgTm9kZSYgb3BlcmF0b3I9KGNvbnN0IE5vZGUmKSBLSlNf
RkFTVF9DQUxMOwpAQCAtMTQxLDcgKzE1OCw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGJvb2wg
aGl0U3RhdGVtZW50KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBDb21w
bGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlICpleGVjKSBLSlNfRkFTVF9DQUxMID0gMDsKICAgICB2
b2lkIHB1c2hMYWJlbChjb25zdCBJZGVudGlmaWVyICZpZCkgS0pTX0ZBU1RfQ0FMTCB7IGxzLnB1
c2goaWQpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NGdW5jRGVjbChFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICBwcm90ZWN0ZWQ6CiAgICAgTGFiZWxTdGFjayBsczsKICAgcHJpdmF0
ZToKQEAgLTUzNSw3ICs1NTEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBUeXBlT2ZW
YWx1ZU5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBUeXBlT2ZWYWx1ZU5vZGUo
Tm9kZSAqZSkgS0pTX0ZBU1RfQ0FMTCA6IG1fZXhwcihlKSB7fQorICAgIFR5cGVPZlZhbHVlTm9k
ZShOb2RlICplKSBLSlNfRkFTVF9DQUxMIDogbV9leHByKGUpIHsgfQogICAgIEpTVmFsdWUqIGV2
YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgIHByaXZhdGU6CkBAIC03
OTQsOCArODEwLDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGVudW0gVHlwZSB7IFZhcmlhYmxl
LCBDb25zdGFudCB9OwogICAgIFZhckRlY2xOb2RlKGNvbnN0IElkZW50aWZpZXIgJmlkLCBBc3Np
Z25FeHByTm9kZSAqaW4sIFR5cGUgdCkgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBldmFs
dWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNz
VmFyRGVjbHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNWYXJpYWJsZURlY2xhcmF0aW9uKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiB0
cnVlOyB9CisgICAgdm9pZCBBTFdBWVNfSU5MSU5FIHByb2Nlc3NEZWNsYXJhdGlvbihFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVj
bGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgIEpTVmFsdWUq
IGhhbmRsZVNsb3dDYXNlKEV4ZWNTdGF0ZSosIGNvbnN0IFNjb3BlQ2hhaW4mLCBKU1ZhbHVlKikg
S0pTX0ZBU1RfQ0FMTCBLSlNfTk9fSU5MSU5FOwogICAgIFR5cGUgdmFyVHlwZTsKQEAgLTgwNiwx
NCArODI0LDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBWYXJEZWNsTGlzdE5vZGUgOiBw
dWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKICAgICAvLyBsaXN0IHBvaW50ZXIgaXMgdGFpbCBvZiBh
IGNpcmN1bGFyIGxpc3QsIGNyYWNrZWQgaW4gdGhlIEZvck5vZGUvVmFyU3RhdGVtZW50Tm9kZSBj
dG9yCi0gICAgVmFyRGVjbExpc3ROb2RlKFZhckRlY2xOb2RlICp2KSBLSlNfRkFTVF9DQUxMIDog
bmV4dCh0aGlzKSwgdmFyKHYpIHsgUGFyc2VyOjpub3RlTm9kZUN5Y2xlKHRoaXMpOyB9CisgICAg
VmFyRGVjbExpc3ROb2RlKFZhckRlY2xOb2RlICp2KSBLSlNfRkFTVF9DQUxMIDogbmV4dCh0aGlz
KSwgdmFyKHYpIHsgUGFyc2VyOjpub3RlTm9kZUN5Y2xlKHRoaXMpOyBtX21heUhhdmVEZWNsYXJh
dGlvbnMgPSB0cnVlOyB9CiAgICAgVmFyRGVjbExpc3ROb2RlKFZhckRlY2xMaXN0Tm9kZSAqbCwg
VmFyRGVjbE5vZGUgKnYpIEtKU19GQVNUX0NBTEwKLSAgICAgIDogbmV4dChsLT5uZXh0KSwgdmFy
KHYpIHsgbC0+bmV4dCA9IHRoaXM7IH0KKyAgICAgIDogbmV4dChsLT5uZXh0KSwgdmFyKHYpIHsg
bC0+bmV4dCA9IHRoaXM7IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IH0KICAgICBKU1Zh
bHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgdm9p
ZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICBQ
YXNzUmVmUHRyPFZhckRlY2xMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSBLSlNfRkFTVF9DQUxMIHsg
cmV0dXJuIG5leHQucmVsZWFzZSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGJyZWFrQ3ljbGUoKSBL
SlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRp
b25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBG
b3JOb2RlOwogICAgIGZyaWVuZCBjbGFzcyBWYXJTdGF0ZW1lbnROb2RlOwpAQCAtODIzLDEwICs4
NDEsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgVmFyU3RhdGVtZW50Tm9kZSA6IHB1
YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgotICAgIFZhclN0YXRlbWVudE5vZGUoVmFy
RGVjbExpc3ROb2RlICpsKSBLSlNfRkFTVF9DQUxMIDogbmV4dChsLT5uZXh0LnJlbGVhc2UoKSkg
eyBQYXJzZXI6OnJlbW92ZU5vZGVDeWNsZShuZXh0LmdldCgpKTsgfQorICAgIFZhclN0YXRlbWVu
dE5vZGUoVmFyRGVjbExpc3ROb2RlICpsKSBLSlNfRkFTVF9DQUxMIDogbmV4dChsLT5uZXh0LnJl
bGVhc2UoKSkgeyBQYXJzZXI6OnJlbW92ZU5vZGVDeWNsZShuZXh0LmdldCgpKTsgbV9tYXlIYXZl
RGVjbGFyYXRpb25zID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNs
cyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdm9pZCBnZXRE
ZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRl
OgogICAgIFJlZlB0cjxWYXJEZWNsTGlzdE5vZGU+IG5leHQ7CiAgIH07CkBAIC04MzUsOCArODUz
LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBCbG9ja05vZGUoU291cmNlRWxl
bWVudHNOb2RlICpzKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVj
dXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NW
YXJEZWNscyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdm9p
ZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwogICBw
cm90ZWN0ZWQ6CiAgICAgUmVmUHRyPFNvdXJjZUVsZW1lbnRzTm9kZT4gc291cmNlOwogICB9OwpA
QCAtODYwLDEwICs4NzgsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIElmTm9kZSA6IHB1
YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgogICAgIElmTm9kZShOb2RlICplLCBTdGF0
ZW1lbnROb2RlICpzMSwgU3RhdGVtZW50Tm9kZSAqczIpIEtKU19GQVNUX0NBTEwKLSAgICAgIDog
ZXhwcihlKSwgc3RhdGVtZW50MShzMSksIHN0YXRlbWVudDIoczIpIHt9CisgICAgICA6IGV4cHIo
ZSksIHN0YXRlbWVudDEoczEpLCBzdGF0ZW1lbnQyKHMyKSB7IG1fbWF5SGF2ZURlY2xhcmF0aW9u
cyA9IHN0YXRlbWVudDEtPm1heUhhdmVEZWNsYXJhdGlvbnMoKSB8fCAoc3RhdGVtZW50MiAmJiBz
dGF0ZW1lbnQyLT5tYXlIYXZlRGVjbGFyYXRpb25zKCkpOyB9CiAgICAgdmlydHVhbCBDb21wbGV0
aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIHZvaWQg
cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CisgICAgdmly
dHVhbCB2b2lkIGdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYpIEtKU19GQVNUX0NB
TEw7CiAgIHByaXZhdGU6CiAgICAgUmVmUHRyPE5vZGU+IGV4cHI7CiAgICAgUmVmUHRyPFN0YXRl
bWVudE5vZGU+IHN0YXRlbWVudDE7CkBAIC04NzIsMTAgKzg5MCwxMCBAQCBuYW1lc3BhY2UgS0pT
IHsKIAogICBjbGFzcyBEb1doaWxlTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgcHVi
bGljOgotICAgIERvV2hpbGVOb2RlKFN0YXRlbWVudE5vZGUgKnMsIE5vZGUgKmUpIEtKU19GQVNU
X0NBTEwgOiBzdGF0ZW1lbnQocyksIGV4cHIoZSkge30KKyAgICBEb1doaWxlTm9kZShTdGF0ZW1l
bnROb2RlICpzLCBOb2RlICplKSBLSlNfRkFTVF9DQUxMIDogc3RhdGVtZW50KHMpLCBleHByKGUp
IHsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgQ29tcGxldGlv
biBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHBy
b2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1
YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxM
OwogICBwcml2YXRlOgogICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7CiAgICAg
UmVmUHRyPE5vZGU+IGV4cHI7CkBAIC04ODMsMTAgKzkwMSwxMCBAQCBuYW1lc3BhY2UgS0pTIHsK
IAogICBjbGFzcyBXaGlsZU5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoK
LSAgICBXaGlsZU5vZGUoTm9kZSAqZSwgU3RhdGVtZW50Tm9kZSAqcykgS0pTX0ZBU1RfQ0FMTCA6
IGV4cHIoZSksIHN0YXRlbWVudChzKSB7fQorICAgIFdoaWxlTm9kZShOb2RlICplLCBTdGF0ZW1l
bnROb2RlICpzKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSwgc3RhdGVtZW50KHMpIHsgbV9tYXlI
YXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRl
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NWYXJE
ZWNscyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1U
byhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdm9pZCBn
ZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwogICBwcml2
YXRlOgogICAgIFJlZlB0cjxOb2RlPiBleHByOwogICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBz
dGF0ZW1lbnQ7CkBAIC04OTUsMTIgKzkxMywxMiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3Mg
Rm9yTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgogICAgIEZvck5vZGUo
Tm9kZSAqZTEsIE5vZGUgKmUyLCBOb2RlICplMywgU3RhdGVtZW50Tm9kZSAqcykgS0pTX0ZBU1Rf
Q0FMTCA6Ci0gICAgICBleHByMShlMSksIGV4cHIyKGUyKSwgZXhwcjMoZTMpLCBzdGF0ZW1lbnQo
cykge30KKyAgICAgIGV4cHIxKGUxKSwgZXhwcjIoZTIpLCBleHByMyhlMyksIHN0YXRlbWVudChz
KSB7IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IH0KICAgICBGb3JOb2RlKFZhckRlY2xM
aXN0Tm9kZSAqZTEsIE5vZGUgKmUyLCBOb2RlICplMywgU3RhdGVtZW50Tm9kZSAqcykgS0pTX0ZB
U1RfQ0FMTCA6Ci0gICAgICBleHByMShlMS0+bmV4dC5yZWxlYXNlKCkpLCBleHByMihlMiksIGV4
cHIzKGUzKSwgc3RhdGVtZW50KHMpIHsgUGFyc2VyOjpyZW1vdmVOb2RlQ3ljbGUoZXhwcjEuZ2V0
KCkpOyB9CisgICAgICBleHByMShlMS0+bmV4dC5yZWxlYXNlKCkpLCBleHByMihlMiksIGV4cHIz
KGUzKSwgc3RhdGVtZW50KHMpIHsgUGFyc2VyOjpyZW1vdmVOb2RlQ3ljbGUoZXhwcjEuZ2V0KCkp
OyBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyB9CiAgICAgdmlydHVhbCBDb21wbGV0aW9u
IGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIHZvaWQgcHJv
Y2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVh
bCB2b2lkIGdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYpIEtKU19GQVNUX0NBTEw7
CiAgIHByaXZhdGU6CiAgICAgUmVmUHRyPE5vZGU+IGV4cHIxOwogICAgIFJlZlB0cjxOb2RlPiBl
eHByMjsKQEAgLTkxMyw4ICs5MzEsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBGb3JJbk5vZGUo
Tm9kZSAqbCwgTm9kZSAqZSwgU3RhdGVtZW50Tm9kZSAqcykgS0pTX0ZBU1RfQ0FMTDsKICAgICBG
b3JJbk5vZGUoY29uc3QgSWRlbnRpZmllciAmaSwgQXNzaWduRXhwck5vZGUgKmluLCBOb2RlICpl
LCBTdGF0ZW1lbnROb2RlICpzKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgQ29tcGxldGlv
biBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHBy
b2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1
YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxM
OwogICBwcml2YXRlOgogICAgIElkZW50aWZpZXIgaWRlbnQ7CiAgICAgUmVmUHRyPEFzc2lnbkV4
cHJOb2RlPiBpbml0OwpAQCAtOTU1LDEwICs5NzMsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAg
Y2xhc3MgV2l0aE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoKLSAgICBX
aXRoTm9kZShOb2RlICplLCBTdGF0ZW1lbnROb2RlICpzKSBLSlNfRkFTVF9DQUxMIDogZXhwcihl
KSwgc3RhdGVtZW50KHMpIHt9CisgICAgV2l0aE5vZGUoTm9kZSAqZSwgU3RhdGVtZW50Tm9kZSAq
cykgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSksIHN0YXRlbWVudChzKSB7IG1fbWF5SGF2ZURlY2xh
cmF0aW9ucyA9IHRydWU7IH0KICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzVmFyRGVjbHMoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGVjbGFy
YXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJikgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8Tm9kZT4gZXhwcjsKICAgICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4gc3RhdGVtZW50
OwpAQCAtOTY2LDEwICs5ODQsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgTGFiZWxO
b2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICBwdWJsaWM6Ci0gICAgTGFiZWxOb2RlKGNv
bnN0IElkZW50aWZpZXIgJmwsIFN0YXRlbWVudE5vZGUgKnMpIEtKU19GQVNUX0NBTEwgOiBsYWJl
bChsKSwgc3RhdGVtZW50KHMpIHsgfQorICAgIExhYmVsTm9kZShjb25zdCBJZGVudGlmaWVyICZs
LCBTdGF0ZW1lbnROb2RlICpzKSBLSlNfRkFTVF9DQUxMIDogbGFiZWwobCksIHN0YXRlbWVudChz
KSB7IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IH0KICAgICB2aXJ0dWFsIENvbXBsZXRp
b24gZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgdm9pZCBw
cm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJikgS0pTX0ZBU1RfQ0FM
TDsKICAgcHJpdmF0ZToKICAgICBJZGVudGlmaWVyIGxhYmVsOwogICAgIFJlZlB0cjxTdGF0ZW1l
bnROb2RlPiBzdGF0ZW1lbnQ7CkBAIC05ODcsMTAgKzEwMDUsMTAgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgIGNsYXNzIFRyeU5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoKICAg
ICBUcnlOb2RlKFN0YXRlbWVudE5vZGUgKmIsIGNvbnN0IElkZW50aWZpZXIgJmUsIFN0YXRlbWVu
dE5vZGUgKmMsIFN0YXRlbWVudE5vZGUgKmYpIEtKU19GQVNUX0NBTEwKLSAgICAgIDogdHJ5Qmxv
Y2soYiksIGV4Y2VwdGlvbklkZW50KGUpLCBjYXRjaEJsb2NrKGMpLCBmaW5hbGx5QmxvY2soZikg
eyB9CisgICAgICA6IHRyeUJsb2NrKGIpLCBleGNlcHRpb25JZGVudChlKSwgY2F0Y2hCbG9jayhj
KSwgZmluYWxseUJsb2NrKGYpIHsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQogICAg
IHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0g
ICAgdmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOworICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFj
a3MmKSBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgIFJlZlB0cjxTdGF0ZW1lbnROb2Rl
PiB0cnlCbG9jazsKICAgICBJZGVudGlmaWVyIGV4Y2VwdGlvbklkZW50OwpAQCAtMTAyOCw3ICsx
MDQ2LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGUgOiBwdWJs
aWMgQmxvY2tOb2RlIHsKICAgcHVibGljOgogICAgIEZ1bmN0aW9uQm9keU5vZGUoU291cmNlRWxl
bWVudHNOb2RlICopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NGdW5j
RGVjbChFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIGludCBzb3VyY2VJZCgpIEtKU19G
QVNUX0NBTEwgeyByZXR1cm4gbV9zb3VyY2VJZDsgfQogICAgIGNvbnN0IFVTdHJpbmcmIHNvdXJj
ZVVSTCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbV9zb3VyY2VVUkw7IH0KIApAQCAtMTAzNyw2
ICsxMDU0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgSWRlbnRpZmllciBwYXJhbU5hbWUoc2l6
ZV90IHBvcykgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBtX3BhcmFtZXRlcnNbcG9zXS5u
YW1lOyB9CiAgICAgVVN0cmluZyBwYXJhbVN0cmluZygpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAg
ICAgVmVjdG9yPFBhcmFtZXRlcj4mIHBhcmFtZXRlcnMoKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJu
IG1fcGFyYW1ldGVyczsgfQorICAgIHZvaWQgcHJvY2Vzc0RlY2xhcmF0aW9ucyhFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgIFVTdHJpbmcgbV9zb3VyY2VVUkw7CiAg
ICAgaW50IG1fc291cmNlSWQ7CkBAIC0xMDYxLDEyICsxMDc5LDE0IEBAIG5hbWVzcGFjZSBLSlMg
ewogICBjbGFzcyBGdW5jRGVjbE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1Ymxp
YzoKICAgICBGdW5jRGVjbE5vZGUoY29uc3QgSWRlbnRpZmllciAmaSwgRnVuY3Rpb25Cb2R5Tm9k
ZSAqYikgS0pTX0ZBU1RfQ0FMTAotICAgICAgOiBpZGVudChpKSwgYm9keShiKSB7IGFkZFBhcmFt
cygpOyB9CisgICAgICA6IGlkZW50KGkpLCBib2R5KGIpIHsgYWRkUGFyYW1zKCk7IG1fbWF5SGF2
ZURlY2xhcmF0aW9ucyA9IHRydWU7IH0KICAgICBGdW5jRGVjbE5vZGUoY29uc3QgSWRlbnRpZmll
ciAmaSwgUGFyYW1ldGVyTm9kZSAqcCwgRnVuY3Rpb25Cb2R5Tm9kZSAqYikgS0pTX0ZBU1RfQ0FM
TAotICAgICAgOiBpZGVudChpKSwgcGFyYW0ocC0+bmV4dC5yZWxlYXNlKCkpLCBib2R5KGIpIHsg
UGFyc2VyOjpyZW1vdmVOb2RlQ3ljbGUocGFyYW0uZ2V0KCkpOyBhZGRQYXJhbXMoKTsgfQorICAg
ICAgOiBpZGVudChpKSwgcGFyYW0ocC0+bmV4dC5yZWxlYXNlKCkpLCBib2R5KGIpIHsgUGFyc2Vy
OjpyZW1vdmVOb2RlQ3ljbGUocGFyYW0uZ2V0KCkpOyBhZGRQYXJhbXMoKTsgbV9tYXlIYXZlRGVj
bGFyYXRpb25zID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NGdW5jRGVjbChF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0
aW9uRGVjbGFyYXRpb24oKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJikgS0pTX0ZB
U1RfQ0FMTDsKKyAgICB2b2lkIEFMV0FZU19JTkxJTkUgcHJvY2Vzc0RlY2xhcmF0aW9uKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgIHByaXZhdGU6CiAgICAgdm9pZCBhZGRQYXJhbXMoKSBL
SlNfRkFTVF9DQUxMOwogICAgIElkZW50aWZpZXIgaWRlbnQ7CkBAIC0xMDgzLDExICsxMTAzLDEw
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFNvdXJjZUVsZW1lbnRzTm9kZShTb3VyY2VFbGVtZW50
c05vZGUgKnMxLCBTdGF0ZW1lbnROb2RlICpzMikgS0pTX0ZBU1RfQ0FMTDsKICAgICAKICAgICBD
b21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2b2lkIHBy
b2Nlc3NGdW5jRGVjbChFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgdm9p
ZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICBQ
YXNzUmVmUHRyPFNvdXJjZUVsZW1lbnRzTm9kZT4gcmVsZWFzZU5leHQoKSBLSlNfRkFTVF9DQUxM
IHsgcmV0dXJuIG5leHQucmVsZWFzZSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGJyZWFrQ3ljbGUo
KSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFy
YXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBCbG9ja05vZGU7CiAgICAgZnJpZW5kIGNsYXNzIENhc2VDbGF1c2VOb2RlOwpAQCAtMTA5Nywx
NCArMTExNiwxMyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBDYXNlQ2xhdXNlTm9kZSA6
IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgotICAgICAgQ2FzZUNsYXVzZU5vZGUoTm9kZSAqZSkg
S0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSkgeyB9CisgICAgICBDYXNlQ2xhdXNlTm9kZShOb2RlICpl
KSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSB7IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7
IH0KICAgICAgIENhc2VDbGF1c2VOb2RlKE5vZGUgKmUsIFNvdXJjZUVsZW1lbnRzTm9kZSAqcykg
S0pTX0ZBU1RfQ0FMTAotICAgICAgOiBleHByKGUpLCBzb3VyY2Uocy0+bmV4dC5yZWxlYXNlKCkp
IHsgUGFyc2VyOjpyZW1vdmVOb2RlQ3ljbGUoc291cmNlLmdldCgpKTsgfQorICAgICAgOiBleHBy
KGUpLCBzb3VyY2Uocy0+bmV4dC5yZWxlYXNlKCkpIHsgUGFyc2VyOjpyZW1vdmVOb2RlQ3ljbGUo
c291cmNlLmdldCgpKTsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQogICAgICAgSlNW
YWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIENvbXBsZXRp
b24gZXZhbFN0YXRlbWVudHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgIHZvaWQg
cHJvY2Vzc0Z1bmNEZWNsKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICB2aXJ0dWFs
IHZvaWQgcHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsK
KyAgICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBL
SlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgICAgUmVmUHRyPE5vZGU+IGV4cHI7CiAgICAg
ICBSZWZQdHI8U291cmNlRWxlbWVudHNOb2RlPiBzb3VyY2U7CkBAIC0xMTEzLDE3ICsxMTMxLDE2
IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBDbGF1c2VMaXN0Tm9kZSA6IHB1YmxpYyBOb2Rl
IHsKICAgcHVibGljOgogICAgICAgLy8gbGlzdCBwb2ludGVyIGlzIHRhaWwgb2YgYSBjaXJjdWxh
ciBsaXN0LCBjcmFja2VkIGluIHRoZSBDYXNlQmxvY2tOb2RlIGN0b3IKLSAgICAgIENsYXVzZUxp
c3ROb2RlKENhc2VDbGF1c2VOb2RlICpjKSBLSlNfRkFTVF9DQUxMIDogY2xhdXNlKGMpLCBuZXh0
KHRoaXMpIHsgUGFyc2VyOjpub3RlTm9kZUN5Y2xlKHRoaXMpOyB9CisgICAgICBDbGF1c2VMaXN0
Tm9kZShDYXNlQ2xhdXNlTm9kZSAqYykgS0pTX0ZBU1RfQ0FMTCA6IGNsYXVzZShjKSwgbmV4dCh0
aGlzKSB7IFBhcnNlcjo6bm90ZU5vZGVDeWNsZSh0aGlzKTsgbV9tYXlIYXZlRGVjbGFyYXRpb25z
ID0gdHJ1ZTsgfQogICAgICAgQ2xhdXNlTGlzdE5vZGUoQ2xhdXNlTGlzdE5vZGUgKm4sIENhc2VD
bGF1c2VOb2RlICpjKSBLSlNfRkFTVF9DQUxMCi0gICAgICA6IGNsYXVzZShjKSwgbmV4dChuLT5u
ZXh0KSB7IG4tPm5leHQgPSB0aGlzOyB9CisgICAgICA6IGNsYXVzZShjKSwgbmV4dChuLT5uZXh0
KSB7IG4tPm5leHQgPSB0aGlzOyBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyB9CiAgICAg
ICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgQ2Fz
ZUNsYXVzZU5vZGUgKmdldENsYXVzZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gY2xh
dXNlLmdldCgpOyB9CiAgICAgICBDbGF1c2VMaXN0Tm9kZSAqZ2V0TmV4dCgpIGNvbnN0IEtKU19G
QVNUX0NBTEwgeyByZXR1cm4gbmV4dC5nZXQoKTsgfQotICAgICAgdmlydHVhbCB2b2lkIHByb2Nl
c3NWYXJEZWNscyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgdm9pZCBwcm9jZXNz
RnVuY0RlY2woRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgUGFzc1Jl
ZlB0cjxDbGF1c2VMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJu
IG5leHQucmVsZWFzZSgpOyB9CiAgICAgICB2aXJ0dWFsIHZvaWQgYnJlYWtDeWNsZSgpIEtKU19G
QVNUX0NBTEw7CisgICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9u
U3RhY2tzJikgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0ZToKICAgICAgIGZyaWVuZCBjbGFzcyBD
YXNlQmxvY2tOb2RlOwogICAgICAgUmVmUHRyPENhc2VDbGF1c2VOb2RlPiBjbGF1c2U7CkBAIC0x
MTM1LDkgKzExNTIsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIENhc2VCbG9ja05vZGUoQ2xh
dXNlTGlzdE5vZGUgKmwxLCBDYXNlQ2xhdXNlTm9kZSAqZCwgQ2xhdXNlTGlzdE5vZGUgKmwyKSBL
SlNfRkFTVF9DQUxMOwogICAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICAgIENvbXBsZXRpb24gZXZhbEJsb2NrKEV4ZWNTdGF0ZSAqZXhlYywgSlNW
YWx1ZSAqaW5wdXQpIEtKU19GQVNUX0NBTEw7Ci0gICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1Zh
ckRlY2xzKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICB2b2lkIHByb2Nlc3NGdW5j
RGVjbChFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CisgICAgICB2aXJ0dWFsIHZv
aWQgZ2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJikgS0pTX0ZBU1RfQ0FMTDsKICAg
cHJpdmF0ZToKICAgICAgIFJlZlB0cjxDbGF1c2VMaXN0Tm9kZT4gbGlzdDE7CiAgICAgICBSZWZQ
dHI8Q2FzZUNsYXVzZU5vZGU+IGRlZjsKQEAgLTExNDYsMTEgKzExNjIsMTAgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgIAogICBjbGFzcyBTd2l0Y2hOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewog
ICBwdWJsaWM6Ci0gICAgICBTd2l0Y2hOb2RlKE5vZGUgKmUsIENhc2VCbG9ja05vZGUgKmIpIEtK
U19GQVNUX0NBTEwgOiBleHByKGUpLCBibG9jayhiKSB7IH0KKyAgICAgIFN3aXRjaE5vZGUoTm9k
ZSAqZSwgQ2FzZUJsb2NrTm9kZSAqYikgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSksIGJsb2NrKGIp
IHsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQogICAgICAgdmlydHVhbCBDb21wbGV0
aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgIHZpcnR1YWwgdm9p
ZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgIHZpcnR1
YWwgdm9pZCBwcm9jZXNzRnVuY0RlY2woRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxM
OworICAgICAgdmlydHVhbCB2b2lkIGdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYp
IEtKU19GQVNUX0NBTEw7CiAgIHByaXZhdGU6CiAgICAgICBSZWZQdHI8Tm9kZT4gZXhwcjsKICAg
ICAgIFJlZlB0cjxDYXNlQmxvY2tOb2RlPiBibG9jazsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Rl
c3RzL21vemlsbGEvZWNtYV8zL0Z1bmN0aW9uL3Njb3BlLTAwMS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS90ZXN0cy9tb3ppbGxhL2VjbWFfMy9GdW5jdGlvbi9zY29wZS0wMDEuanMJ
KHJldmlzaW9uIDI1ODE1KQorKysgSmF2YVNjcmlwdENvcmUvdGVzdHMvbW96aWxsYS9lY21hXzMv
RnVuY3Rpb24vc2NvcGUtMDAxLmpzCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw4IEBAIHdp
dGggKG9iaikKICAgfQogICBhY3R1YWwgPSBmKCk7CiB9Ci1leHBlY3QgPSAyOworLy8gTW96aWxs
YSByZXN1bHQsIHdoaWNoIGNvbnRyYWRpY3RzIElFIGFuZCB0aGUgRUNNQSBzcGVjOiBleHBlY3Qg
PSAyOworZXhwZWN0ID0gMTsKIGFkZFRoaXMoKTsKIAogCkBAIC05OCw3ICs5OSw4IEBAIHdpdGgg
KG9iaikKICAgfQogfQogYWN0dWFsID0gZigpOwotZXhwZWN0ID0gMjsKKy8vIE1vemlsbGEgcmVz
dWx0LCB3aGljaCBjb250cmFkaWN0cyBJRSBhbmQgdGhlIEVDTUEgc3BlYzogZXhwZWN0ID0gMjsK
K2V4cGVjdCA9IDE7CiBhZGRUaGlzKCk7CiAKIApAQCAtMTE5LDcgKzEyMSw4IEBAIHdpdGggKG9i
aikKICAgfQogfQogYWN0dWFsID0gZigpOwotZXhwZWN0ID0gMzsKKy8vIE1vemlsbGEgcmVzdWx0
LCB3aGljaCBjb250cmFkaWN0cyBJRSBhbmQgdGhlIEVDTUEgc3BlYzogZXhwZWN0ID0gMzsKK2V4
cGVjdCA9IDE7CiBhZGRUaGlzKCk7CiAKIApAQCAtMTM5LDcgKzE0Miw4IEBAIHdpdGggKG9iaikK
IH0KIGRlbGV0ZSBvYmo7CiBhY3R1YWwgPSBmKCk7Ci1leHBlY3QgPSAyOworLy8gTW96aWxsYSBy
ZXN1bHQsIHdoaWNoIGNvbnRyYWRpY3RzIElFIGFuZCB0aGUgRUNNQSBzcGVjOiBleHBlY3QgPSAy
OworZXhwZWN0ID0gMTsKIGFkZFRoaXMoKTsKIAogCkBAIC0xNjMsNyArMTY3LDggQEAgd2l0aCAo
b2JqKQogewogICBhY3R1YWwgPSBmKCk7CiB9Ci1leHBlY3QgPSAyOyAgLy8gTk9UIDMgISEhCisv
LyBNb3ppbGxhIHJlc3VsdCwgd2hpY2ggY29udHJhZGljdHMgSUUgYW5kIHRoZSBFQ01BIHNwZWM6
IGV4cGVjdCA9IDI7ICAvLyBOT1QgMyAhISEKK2V4cGVjdCA9IDE7CiBhZGRUaGlzKCk7CiAKIApJ
bmRleDogSmF2YVNjcmlwdENvcmUvdGVzdHMvbW96aWxsYS9qczFfNS9TY29wZS9yZWdyZXNzLTE4
NDEwNy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS90ZXN0cy9tb3ppbGxhL2pzMV81
L1Njb3BlL3JlZ3Jlc3MtMTg0MTA3LmpzCShyZXZpc2lvbiAyNTgxNSkKKysrIEphdmFTY3JpcHRD
b3JlL3Rlc3RzL21vemlsbGEvanMxXzUvU2NvcGUvcmVncmVzcy0xODQxMDcuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDYgKzU3LDcgQEAgdmFyIGFjdHVhbHZhbHVlcyA9IFtdOwogdmFyIGV4cGVj
dD0gJyc7CiB2YXIgZXhwZWN0ZWR2YWx1ZXMgPSBbXTsKIAoreSA9IDE7CiB2YXIgb2JqID0ge3k6
MTB9Owogd2l0aCAob2JqKQogewpAQCAtNzcsNyArNzgsOCBAQCBhZGRUaGlzKCk7CiAKIHN0YXR1
cyA9IGluU2VjdGlvbigyKTsKIGFjdHVhbCA9IGYoKTsKLWV4cGVjdCA9IG9iai55OworLy8gTW96
aWxsYSByZXN1bHQsIHdoaWNoIGNvbnRyYWRpY3RzIElFIGFuZCB0aGUgRUNNQSBzcGVjOiBleHBl
Y3QgPSBvYmoueTsKK2V4cGVjdCA9IHk7CiBhZGRUaGlzKCk7CiAKIHN0YXR1cyA9IGluU2VjdGlv
bigzKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTQ3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDctMTAtMTIgIEdlb2ZmcmV5IEdh
cmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIExheW91dCB0ZXN0cyBmb3Igc29tZSBiZWhhdmlvciBj
aGFuZ2VzIHRvIGRlY2xhcmF0aW9ucyBpbiBKYXZhU2NyaXB0LgorCisgICAgICAgICogZmFzdC9q
cy9mdW5jdGlvbi1kZWNsYXJhdGlvbnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2pzL2Z1bmN0aW9uLWRlY2xhcmF0aW9ucy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2pzL3Zhci1kZWNsYXJhdGlvbnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2pzL3Zhci1kZWNsYXJhdGlvbnMuaHRtbDogQWRkZWQuCisKIDIwMDctMTAtMTIgIE9saXZlciBI
dW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSUz1BbGV4ZXkKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tZGVjbGFyYXRpb25zLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2Z1bmN0aW9uLWRlY2xhcmF0aW9ucy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2Z1bmN0aW9uLWRlY2xh
cmF0aW9ucy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjYgQEAKK1RoaXMg
cGFnZSB0ZXN0cyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW5zaWRlIHZhcmlvdXMgYmxvY2sgc3Ry
dWN0dXJlcyBhbmQgY29udHJvbCBzdGF0ZW1lbnRzLgorCitCZWZvcmUgZXhlY3V0aW5nIGJsb2Nr
cyBjb250YWluaW5nIGZ1bmN0aW9uIGRlY2xhcmF0aW9uczogCistLS0tLQorUEFTUzogJ2YxJyBp
biB3aW5kb3cgc2hvdWxkIGJlIHRydWUgYW5kIGlzLgorUEFTUzogJ2YyJyBpbiB3aW5kb3cgc2hv
dWxkIGJlIHRydWUgYW5kIGlzLgorUEFTUzogJ2YzJyBpbiB3aW5kb3cgc2hvdWxkIGJlIHRydWUg
YW5kIGlzLgorUEFTUzogJ2Y0JyBpbiB3aW5kb3cgc2hvdWxkIGJlIHRydWUgYW5kIGlzLgorUEFT
UzogJ2Y1JyBpbiB3aW5kb3cgc2hvdWxkIGJlIHRydWUgYW5kIGlzLgorUEFTUzogJ2Y2JyBpbiB3
aW5kb3cgc2hvdWxkIGJlIHRydWUgYW5kIGlzLgorUEFTUzogJ2Y3JyBpbiB3aW5kb3cgc2hvdWxk
IGJlIHRydWUgYW5kIGlzLgorUEFTUzogJ2Y4JyBpbiB3aW5kb3cgc2hvdWxkIGJlIHRydWUgYW5k
IGlzLgorUEFTUzogJ2Y5JyBpbiB3aW5kb3cgc2hvdWxkIGJlIHRydWUgYW5kIGlzLgorCitBZnRl
ciBleGVjdXRpbmcgYmxvY2tzIGNvbnRhaW5pbmcgZnVuY3Rpb24gZGVjbGFyYXRpb25zOiAKKy0t
LS0tCitQQVNTOiAnZjEnIGluIHdpbmRvdyBzaG91bGQgYmUgdHJ1ZSBhbmQgaXMuCitQQVNTOiAn
ZjInIGluIHdpbmRvdyBzaG91bGQgYmUgdHJ1ZSBhbmQgaXMuCitQQVNTOiAnZjMnIGluIHdpbmRv
dyBzaG91bGQgYmUgdHJ1ZSBhbmQgaXMuCitQQVNTOiAnZjQnIGluIHdpbmRvdyBzaG91bGQgYmUg
dHJ1ZSBhbmQgaXMuCitQQVNTOiAnZjUnIGluIHdpbmRvdyBzaG91bGQgYmUgdHJ1ZSBhbmQgaXMu
CitQQVNTOiAnZjYnIGluIHdpbmRvdyBzaG91bGQgYmUgdHJ1ZSBhbmQgaXMuCitQQVNTOiAnZjcn
IGluIHdpbmRvdyBzaG91bGQgYmUgdHJ1ZSBhbmQgaXMuCitQQVNTOiAnZjgnIGluIHdpbmRvdyBz
aG91bGQgYmUgdHJ1ZSBhbmQgaXMuCitQQVNTOiAnZjknIGluIHdpbmRvdyBzaG91bGQgYmUgdHJ1
ZSBhbmQgaXMuCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tZGVjbGFyYXRp
b25zLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9mdW5jdGlvbi1kZWNs
YXJhdGlvbnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rp
b24tZGVjbGFyYXRpb25zLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTMgQEAKKzxwPlRo
aXMgcGFnZSB0ZXN0cyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW5zaWRlIHZhcmlvdXMgYmxvY2sg
c3RydWN0dXJlcyBhbmQgY29udHJvbCBzdGF0ZW1lbnRzLjwvcHJlPgorPHByZSBpZD0iY29uc29s
ZSI+PC9wcmU+CisKKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAKK2Z1bmN0aW9uIGxv
ZyhzKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocyArICJcclxuIikpOworfQorCitmdW5jdGlvbiBz
aG91bGRCZShhLCBiKQoreworICAgIHZhciBldmFsQTsKKyAgICB0cnkgeworICAgICAgICBldmFs
QSA9IGV2YWwoYSk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBldmFsQSA9IGU7CisgICAg
fQorICAgIAorICAgIGlmIChldmFsQSA9PT0gYikgeworICAgICAgICBsb2coIlBBU1M6ICIgKyBh
ICsgIiBzaG91bGQgYmUgIiArIGIgKyAiIGFuZCBpcy4iKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBsb2coIkZBSUw6ICIgKyBhICsgIiBzaG91bGQgYmUgIiArIGIgKyAiIGJ1dCBpbnN0ZWFkIGlz
ICIgKyBldmFsQSArICIuIik7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0RGVjbGFyYXRpb25z
KHRpdGxlKQoreworICAgIHZhciBmdW5jdGlvbnMgPSBbCisgICAgICAgICJmMSIsCisgICAgICAg
ICJmMiIsCisgICAgICAgICJmMyIsCisgICAgICAgICJmNCIsCisgICAgICAgICJmNSIsCisgICAg
ICAgICJmNiIsCisgICAgICAgICJmNyIsCisgICAgICAgICJmOCIsCisgICAgICAgICJmOSIKKyAg
ICBdOworCisgICAgbG9nKHRpdGxlKTsKKyAgICBsb2coIi0tLS0tIik7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBmdW5jdGlvbnMubGVuZ3RoOyBpKyspCisgICAgICAgIHNob3VsZEJlKCInIiAr
IGZ1bmN0aW9uc1tpXSArICInIGluIHdpbmRvdyIsIHRydWUpOworfQorCit0ZXN0RGVjbGFyYXRp
b25zKCJCZWZvcmUgZXhlY3V0aW5nIGJsb2NrcyBjb250YWluaW5nIGZ1bmN0aW9uIGRlY2xhcmF0
aW9uczogIik7CisKK3sKKyAgICBmdW5jdGlvbiBmMSgpIHt9Cit9CisKK2lmIChmYWxzZSkgewor
ICAgIGZ1bmN0aW9uIGYyKCkge30KK30KKworc3dpdGNoICh0cnVlKSB7CisgICAgY2FzZSB0cnVl
OiB7CisgICAgICAgIGZ1bmN0aW9uIGYzKCkge30KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgZmFsc2U6IHsKKyAgICAgICAgZnVuY3Rpb24gZjQoKSB7fQorICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMDsgaSsrKSB7CisgICAgZnVuY3Rpb24g
ZjUoKSB7fQorfQorCitkbyB7CisgICAgZnVuY3Rpb24gZjYoKSB7fQorfSB3aGlsZSgwKTsKKwor
d2hpbGUgKDApIHsKKyAgICBmdW5jdGlvbiBmNygpIHt9Cit9CisKK2ZvciAodmFyIHAgaW4ge30p
IHsKKyAgICBmdW5jdGlvbiBmOCgpIHt9Cit9CisKK3dpdGggKHt9KSB7CisgICAgZnVuY3Rpb24g
ZjkoKSB7fQorfQorCitsb2coIiIpOwordGVzdERlY2xhcmF0aW9ucygiQWZ0ZXIgZXhlY3V0aW5n
IGJsb2NrcyBjb250YWluaW5nIGZ1bmN0aW9uIGRlY2xhcmF0aW9uczogIik7CisKKzwvc2NyaXB0
PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy92YXItZGVjbGFyYXRpb25zLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Zhci1kZWNsYXJhdGlvbnMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy92YXItZGVjbGFy
YXRpb25zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNiBAQAorVGhpcyBw
YWdlIHRlc3RzIHZhciBkZWNsYXJhdGlvbnMgaW5zaWRlIHZhcmlvdXMgYmxvY2sgc3RydWN0dXJl
cyBhbmQgY29udHJvbCBzdGF0ZW1lbnRzLgorCitCZWZvcmUgZXhlY3V0aW5nIGJsb2NrcyBjb250
YWluaW5nIHZhciBkZWNsYXJhdGlvbnM6IAorLS0tLS0KK1BBU1M6ICd2MScgaW4gd2luZG93IHNo
b3VsZCBiZSB0cnVlIGFuZCBpcy4KK1BBU1M6ICd2MicgaW4gd2luZG93IHNob3VsZCBiZSB0cnVl
IGFuZCBpcy4KK1BBU1M6ICd2MycgaW4gd2luZG93IHNob3VsZCBiZSB0cnVlIGFuZCBpcy4KK1BB
U1M6ICd2NCcgaW4gd2luZG93IHNob3VsZCBiZSB0cnVlIGFuZCBpcy4KK1BBU1M6ICd2NScgaW4g
d2luZG93IHNob3VsZCBiZSB0cnVlIGFuZCBpcy4KK1BBU1M6ICd2NicgaW4gd2luZG93IHNob3Vs
ZCBiZSB0cnVlIGFuZCBpcy4KK1BBU1M6ICd2NycgaW4gd2luZG93IHNob3VsZCBiZSB0cnVlIGFu
ZCBpcy4KK1BBU1M6ICd2OCcgaW4gd2luZG93IHNob3VsZCBiZSB0cnVlIGFuZCBpcy4KK1BBU1M6
ICd2OScgaW4gd2luZG93IHNob3VsZCBiZSB0cnVlIGFuZCBpcy4KKworQWZ0ZXIgZXhlY3V0aW5n
IGJsb2NrcyBjb250YWluaW5nIHZhciBkZWNsYXJhdGlvbnM6IAorLS0tLS0KK1BBU1M6ICd2MScg
aW4gd2luZG93IHNob3VsZCBiZSB0cnVlIGFuZCBpcy4KK1BBU1M6ICd2MicgaW4gd2luZG93IHNo
b3VsZCBiZSB0cnVlIGFuZCBpcy4KK1BBU1M6ICd2MycgaW4gd2luZG93IHNob3VsZCBiZSB0cnVl
IGFuZCBpcy4KK1BBU1M6ICd2NCcgaW4gd2luZG93IHNob3VsZCBiZSB0cnVlIGFuZCBpcy4KK1BB
U1M6ICd2NScgaW4gd2luZG93IHNob3VsZCBiZSB0cnVlIGFuZCBpcy4KK1BBU1M6ICd2NicgaW4g
d2luZG93IHNob3VsZCBiZSB0cnVlIGFuZCBpcy4KK1BBU1M6ICd2NycgaW4gd2luZG93IHNob3Vs
ZCBiZSB0cnVlIGFuZCBpcy4KK1BBU1M6ICd2OCcgaW4gd2luZG93IHNob3VsZCBiZSB0cnVlIGFu
ZCBpcy4KK1BBU1M6ICd2OScgaW4gd2luZG93IHNob3VsZCBiZSB0cnVlIGFuZCBpcy4KKwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9qcy92YXItZGVjbGFyYXRpb25zLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9qcy92YXItZGVjbGFyYXRpb25zLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3Zhci1kZWNsYXJhdGlvbnMuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5MyBAQAorPHA+VGhpcyBwYWdlIHRlc3RzIHZhciBkZWNsYXJhdGlvbnMg
aW5zaWRlIHZhcmlvdXMgYmxvY2sgc3RydWN0dXJlcyBhbmQgY29udHJvbCBzdGF0ZW1lbnRzLjwv
cHJlPgorPHByZSBpZD0iY29uc29sZSI+PC9wcmU+CisKKzxzY3JpcHQ+CitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICAKK2Z1bmN0aW9uIGxvZyhzKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocyArICJcclxu
IikpOworfQorCitmdW5jdGlvbiBzaG91bGRCZShhLCBiKQoreworICAgIHZhciBldmFsQTsKKyAg
ICB0cnkgeworICAgICAgICBldmFsQSA9IGV2YWwoYSk7CisgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgICBldmFsQSA9IGU7CisgICAgfQorICAgIAorICAgIGlmIChldmFsQSA9PT0gYikgeworICAg
ICAgICBsb2coIlBBU1M6ICIgKyBhICsgIiBzaG91bGQgYmUgIiArIGIgKyAiIGFuZCBpcy4iKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBsb2coIkZBSUw6ICIgKyBhICsgIiBzaG91bGQgYmUgIiAr
IGIgKyAiIGJ1dCBpbnN0ZWFkIGlzICIgKyBldmFsQSArICIuIik7CisgICAgfQorfQorCitmdW5j
dGlvbiB0ZXN0RGVjbGFyYXRpb25zKHRpdGxlKQoreworICAgIHZhciB2YXJzID0gWworICAgICAg
ICAidjEiLAorICAgICAgICAidjIiLAorICAgICAgICAidjMiLAorICAgICAgICAidjQiLAorICAg
ICAgICAidjUiLAorICAgICAgICAidjYiLAorICAgICAgICAidjciLAorICAgICAgICAidjgiLAor
ICAgICAgICAidjkiCisgICAgXTsKKworICAgIGxvZyh0aXRsZSk7CisgICAgbG9nKCItLS0tLSIp
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFycy5sZW5ndGg7IGkrKykKKyAgICAgICAgc2hv
dWxkQmUoIiciICsgdmFyc1tpXSArICInIGluIHdpbmRvdyIsIHRydWUpOworfQorCit0ZXN0RGVj
bGFyYXRpb25zKCJCZWZvcmUgZXhlY3V0aW5nIGJsb2NrcyBjb250YWluaW5nIHZhciBkZWNsYXJh
dGlvbnM6ICIpOworCit7CisgICAgdmFyIHYxOworfQorCitpZiAoZmFsc2UpIHsKKyAgICB2YXIg
djI7Cit9CisKK3N3aXRjaCAodHJ1ZSkgeworICAgIGNhc2UgdHJ1ZTogeworICAgICAgICB2YXIg
djM7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIGZhbHNlOiB7CisgICAgICAgIHZh
ciB2NDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDA7
IGkrKykgeworICAgIHZhciB2NTsKK30KKworZG8geworICAgIHZhciB2NjsKK30gd2hpbGUoMCk7
CisKK3doaWxlICgwKSB7CisgICAgdmFyIHY3OworfQorCitmb3IgKHZhciBwIGluIHt9KSB7Cisg
ICAgdmFyIHY4OworfQorCit3aXRoICh7fSkgeworICAgIHZhciB2OTsKK30KKworbG9nKCIiKTsK
K3Rlc3REZWNsYXJhdGlvbnMoIkFmdGVyIGV4ZWN1dGluZyBibG9ja3MgY29udGFpbmluZyB2YXIg
ZGVjbGFyYXRpb25zOiAiKTsKKworPC9zY3JpcHQ+Cg==
</data>
<flag name="review"
          id="7037"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>