<?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>22583</bug_id>
          
          <creation_ts>2008-12-01 18:32:56 -0800</creation_ts>
          <short_desc>Refactored regular expression parsing to parse sequences of characters as a single unit</short_desc>
          <delta_ts>2008-12-01 19:36:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>100933</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-12-01 18:32:56 -0800</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100934</commentid>
    <comment_count>1</comment_count>
      <attachid>25650</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-12-01 18:33:39 -0800</bug_when>
    <thetext>Created attachment 25650
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100942</commentid>
    <comment_count>2</comment_count>
      <attachid>25653</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-12-01 19:06:00 -0800</bug_when>
    <thetext>Created attachment 25653
patch - updated after gavin&apos;s review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100944</commentid>
    <comment_count>3</comment_count>
      <attachid>25653</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-12-01 19:36:10 -0800</bug_when>
    <thetext>Comment on attachment 25653
patch - updated after gavin&apos;s review

Cameron reviewed this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100945</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-12-01 19:36:24 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/38891</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25650</attachid>
            <date>2008-12-01 18:33:39 -0800</date>
            <delta_ts>2008-12-01 19:06:00 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch-2char.txt</filename>
            <type>text/plain</type>
            <size>33751</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4ODg3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMDgtMTIt
MDEgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFJlZmFjdG9yZWQgcmVndWxh
ciBleHByZXNzaW9uIHBhcnNpbmcgdG8gcGFyc2Ugc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnMKKyAg
ICAgICAgYXMgYSBzaW5nbGUgdW5pdCwgaW4gcHJlcGFyYXRpb24gZm9yIG9wdGltaXppbmcgc2Vx
dWVuY2VzIG9mIGNoYXJhY3RlcnMuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdyZWMvRXNjYXBlcy5oOiBBZGRlZC4gU2V0
IG9mIGNsYXNzZXMgZm9yIHJlcHJlc2VudGluZyBhbiBlc2NhcGVkCisgICAgICAgIHRva2VuIGlu
IGEgcGF0dGVybi4KKworICAgICAgICAqIHdyZWMvUXVhbnRpZmllci5oOgorICAgICAgICAoSlND
OjpXUkVDOjpRdWFudGlmaWVyOjpRdWFudGlmaWVyKTogU2ltcGxpZmllZCB0aGlzIGNvbnN0cnVj
dG9yIHNsaWdodGx5LAorICAgICAgICB0byBtYXRjaCB0aGUgbmV3IEVzY2FwZSBjb25zdHJ1Y3Rv
ci4KKworICAgICAgICAqIHdyZWMvV1JFQ0dlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OldS
RUM6OkdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyU2VxdWVuY2UpOgorICAgICAg
ICAqIHdyZWMvV1JFQ0dlbmVyYXRvci5oOiBBZGRlZCBhbiBpbnRlcmZhY2UgZm9yIGdlbmVyYXRp
bmcgYSBzZXF1ZW5jZQorICAgICAgICBvZiBjaGFyYWN0ZXJzIGluIGEgcGF0dGVybiBhdCBhIHRp
bWUuIEl0IGRvZXNuJ3QgZG8gYW55dGhpbmcgc3BlY2lhbCB5ZXQuCisKKyAgICAgICAgKiB3cmVj
L1dSRUNQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXUkVDOjpQYXJzZXI6OmNvbnN1bWVHcmVl
ZHlRdWFudGlmaWVyKToKKyAgICAgICAgKEpTQzo6V1JFQzo6UGFyc2VyOjpjb25zdW1lUXVhbnRp
Zmllcik6IFJlbmFtZWQgInBhcnNlIiB0byAiY29uc3VtZSIgaW4KKyAgICAgICAgdGhlc2UgZnVu
Y3Rpb25zLCB0byBtYXRjaCAiY29uc3VtZUVzY2FwZS4iCisKKyAgICAgICAgKEpTQzo6V1JFQzo6
UGFyc2VyOjpwYXJzZVBhdHRlcm5DaGFyYWN0ZXJTZXF1ZW5jZSk6IE5ldyBmdW5jdGlvbiBmb3IK
KyAgICAgICAgaXRlcmF0aXZlbHkgYWdncmVnYXRpbmcgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJz
IGluIHRoZSBwYXR0ZXJuLgorCisgICAgICAgIChKU0M6OldSRUM6OlBhcnNlcjo6cGFyc2VDaGFy
YWN0ZXJDbGFzc1F1YW50aWZpZXIpOgorICAgICAgICAoSlNDOjpXUkVDOjpQYXJzZXI6OnBhcnNl
QmFja3JlZmVyZW5jZVF1YW50aWZpZXIpOiBSZW5hbWVkICJwYXJzZSIgdG8KKyAgICAgICAgImNv
bnN1bWUsIiBpbiB0aGVzZSBmdW5jdGlvbnMsIHRvIG1hdGNoICJjb25zdW1lRXNjYXBlLiIKKwor
ICAgICAgICAoSlNDOjpXUkVDOjpQYXJzZXI6OnBhcnNlQ2hhcmFjdGVyQ2xhc3MpOiBSZWZhY3Rv
cmVkIHRvIHVzZSB0aGUgY29tbW9uCisgICAgICAgIGVzY2FwZSBwcm9jZXNzaW5nIGNvZGUgaW4g
Y29uc3VtZUVzY2FwZS4KKworICAgICAgICAoSlNDOjpXUkVDOjpQYXJzZXI6OnBhcnNlRXNjYXBl
KTogUmVmYWN0b3JlZCB0byB1c2UgdGhlIGNvbW1vbgorICAgICAgICBlc2NhcGUgcHJvY2Vzc2lu
ZyBjb2RlIGluIGNvbnN1bWVFc2NhcGUuCisKKyAgICAgICAgKEpTQzo6V1JFQzo6UGFyc2VyOjpj
b25zdW1lRXNjYXBlKTogRmFjdG9yZWQgZXNjYXBlZCB0b2tlbiBwcm9jZXNzaW5nCisgICAgICAg
IGludG8gYSBjb21tb24gZnVuY3Rpb24sIHNpbmNlIHdlIHdlcmUgZG9pbmcgdGhpcyBpbiBhIGZl
dyBwbGFjZXMuCisKKyAgICAgICAgKEpTQzo6V1JFQzo6UGFyc2VyOjpwYXJzZVRlcm0pOiBSZWZh
Y3RvcmVkIHRvIHVzZSB0aGUgY29tbW9uCisgICAgICAgIGVzY2FwZSBwcm9jZXNzaW5nIGNvZGUg
aW4gY29uc3VtZUVzY2FwZS4KKworICAgICAgICAqIHdyZWMvV1JFQ1BhcnNlci5oOgorICAgICAg
ICAoSlNDOjpXUkVDOjpQYXJzZXI6OmNvbnN1bWVPY3RhbCk6IFJlZmFjdG9yZWQgdG8gdXNlIGEg
aGVscGVyIGZ1bmN0aW9uCisgICAgICAgIGZvciByZWFkaW5nIGEgZGlnaXQuCisKIDIwMDgtMTIt
MDEgIENhbWVyb24gWndhcmljaCAgPHp3YXJpY2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAzODg4NSkKKysrIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw2ICsxNDQsNyBAQAogCQk5NjlB
MDc5OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2OUEwNzkzMEVEMUQzQUUwMEYxRjY4MSAvKiBJ
bnN0cnVjdGlvbi5oICovOyB9OwogCQk5NjlBMDc5QTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2Rl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2OUEw
Nzk0MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuY3BwICovOyB9OwogCQk5NjlBMDc5QjBFRDFE
M0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NjlBMDc5NTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTZBNzQ2NDEwRURE
RjcwNjAwOTA0Nzc5IC8qIEVzY2FwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk2QTc0NjNGMEVEREY3MDYwMDkwNDc3OSAvKiBFc2NhcGVzLmggKi87
IH07CiAJCUE3MjcwMDkwMERBQzZCQkMwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MjcwMDc4MERBQzYw
NTYwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCAqLzsgfTsKIAkJQTcyNzAxQjkwREFERTk0
OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MjcwMUIzMERBREU5NDkwMEU1NDhENyAvKiBFeGNlcHRp
b25IZWxwZXJzLmggKi87IH07CiAJCUE3MjdGRjZCMERBMzA5MjIwMEU1NDhENyAvKiBKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3MjdGRjY2MERBMzA1M0IwMEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmNwcCAqLzsgfTsKQEAgLTYxNCw2ICs2MTUsNyBAQAogCQk5NjlBMDc5NDBFRDFEM0FFMDBG
MUY2ODEgLyogT3Bjb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE9wY29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk2OUEwNzk1MEVEMUQz
QUUwMEYxRjY4MSAvKiBPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
T3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk2OUEwOTIyMEVEMUUwOUMw
MEYxRjY4MSAvKiBDb21wbGV0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENvbXBsZXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NkE3
NDYzRjBFRERGNzA2MDA5MDQ3NzkgLyogRXNjYXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFc2NhcGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Mjcw
MDc3MERBQzYwNTYwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTTm90QW5PYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTcyNzAwNzgwREFDNjA1NjAwRTU0OEQ3IC8qIEpTTm90QW5PYmplY3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNOb3RBbk9iamVjdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MjcwMUIzMERBREU5NDkwMEU1NDhENyAvKiBFeGNl
cHRpb25IZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlv
bkhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMTQsNiArMTMxNiw3
IEBACiAJCQkJMTQyOURBREUwRUQyNjQ1QjAwQjg5NjE5IC8qIFdSRUNHZW5lcmF0b3IuaCAqLywK
IAkJCQkxNDI5REFCRTBFRDI2M0U3MDBCODk2MTkgLyogV1JFQ1BhcnNlci5jcHAgKi8sCiAJCQkJ
MTQyOURBQkQwRUQyNjNFNzAwQjg5NjE5IC8qIFdSRUNQYXJzZXIuaCAqLywKKwkJCQk5NkE3NDYz
RjBFRERGNzA2MDA5MDQ3NzkgLyogRXNjYXBlcy5oICovLAogCQkJKTsKIAkJCXBhdGggPSB3cmVj
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE2MTksNiArMTYyMiw3IEBACiAJCQkJ
MTQyOURBODMwRUQyNDgyOTAwQjg5NjE5IC8qIFdSRUNGdW5jdG9ycy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQyOURBQkYwRUQyNjNFNzAwQjg5NjE5IC8qIFdSRUNQYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0MjlEQUUwMEVEMjY0NUIwMEI4OTYxOSAvKiBXUkVDR2VuZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKKwkJCQk5NkE3NDY0MTBFRERGNzA2MDA5MDQ3NzkgLyogRXNjYXBlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZDMzZFRUEwRUUxMjg5RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1i
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKSW5kZXg6IHdyZWMvRXNjYXBlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdyZWMv
RXNjYXBlcy5oCShyZXZpc2lvbiAwKQorKysgd3JlYy9Fc2NhcGVzLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRXNjYXBlc19oCisjZGVmaW5lIEVzY2FwZXNfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoV1JFQykKKworI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV1JFQyB7CisKKyAgICBjbGFz
cyBDaGFyYWN0ZXJDbGFzczsKKworICAgIGNsYXNzIEVzY2FwZSB7CisgICAgcHVibGljOgorICAg
ICAgICBlbnVtIFR5cGUgeworICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIFBhdHRlcm5D
aGFyYWN0ZXIsCisgICAgICAgICAgICBDaGFyYWN0ZXJDbGFzcywKKyAgICAgICAgICAgIEJhY2ty
ZWZlcmVuY2UsCisgICAgICAgICAgICBXb3JkQm91bmRhcnlBc3NlcnRpb24sCisgICAgICAgICAg
ICBFcnJvciwKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIEVzY2FwZShUeXBlIHR5cGUg
PSBOb25lKQorICAgICAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICBUeXBlIG1fdHlwZTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgor
ICAgICAgICAvLyBVc2VkIGJ5IHN1YmNsYXNzZXMgdG8gc3RvcmUgZGF0YS4KKyAgICAgICAgdW5p
b24geworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBjb25zdCBXUkVDOjpDaGFyYWN0
ZXJDbGFzcyogYzsKKyAgICAgICAgfSB3b3JkMTsKKyAgICAgICAgYm9vbCB3b3JkMjsKKyAgICB9
OworCisgICAgY2xhc3MgUGF0dGVybkNoYXJhY3RlckVzY2FwZSA6IHB1YmxpYyBFc2NhcGUgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGNvbnN0IFBhdHRlcm5DaGFyYWN0ZXJFc2NhcGUm
IGNhc3QoY29uc3QgRXNjYXBlJiBlc2NhcGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VChlc2NhcGUudHlwZSgpID09IFBhdHRlcm5DaGFyYWN0ZXIpOworICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGNvbnN0IFBhdHRlcm5DaGFyYWN0ZXJFc2NhcGUmPihlc2NhcGUpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBQYXR0ZXJuQ2hhcmFjdGVyRXNjYXBlKGludCBjaGFy
YWN0ZXIpCisgICAgICAgICAgICA6IEVzY2FwZShQYXR0ZXJuQ2hhcmFjdGVyKQorICAgICAgICB7
CisgICAgICAgICAgICB3b3JkMS5pID0gY2hhcmFjdGVyOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBvcGVyYXRvciBFc2NhcGUoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAgICAg
ICAKKyAgICAgICAgaW50IGNoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJuIHdvcmQxLmk7IH0KKyAg
ICB9OworCisgICAgY2xhc3MgQ2hhcmFjdGVyQ2xhc3NFc2NhcGUgOiBwdWJsaWMgRXNjYXBlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBjb25zdCBDaGFyYWN0ZXJDbGFzc0VzY2FwZSYg
Y2FzdChjb25zdCBFc2NhcGUmIGVzY2FwZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KGVzY2FwZS50eXBlKCkgPT0gQ2hhcmFjdGVyQ2xhc3MpOworICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IENoYXJhY3RlckNsYXNzRXNjYXBlJj4oZXNjYXBlKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgQ2hhcmFjdGVyQ2xhc3NFc2NhcGUoY29uc3QgV1JFQzo6Q2hh
cmFjdGVyQ2xhc3MmIGNoYXJhY3RlckNsYXNzLCBib29sIGludmVydCkKKyAgICAgICAgICAgIDog
RXNjYXBlKENoYXJhY3RlckNsYXNzKQorICAgICAgICB7CisgICAgICAgICAgICB3b3JkMS5jID0g
JmNoYXJhY3RlckNsYXNzOworICAgICAgICAgICAgd29yZDIgPSBpbnZlcnQ7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIG9wZXJhdG9yIEVzY2FwZSgpIHsgcmV0dXJuICp0aGlzOyB9Cisg
ICAgICAgIAorICAgICAgICBjb25zdCBXUkVDOjpDaGFyYWN0ZXJDbGFzcyYgY2hhcmFjdGVyQ2xh
c3MoKSBjb25zdCB7IHJldHVybiAqd29yZDEuYzsgfQorICAgICAgICBib29sIGludmVydCgpIGNv
bnN0IHsgcmV0dXJuIHdvcmQyOyB9CisgICAgfTsKKworICAgIGNsYXNzIEJhY2tyZWZlcmVuY2VF
c2NhcGUgOiBwdWJsaWMgRXNjYXBlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBjb25z
dCBCYWNrcmVmZXJlbmNlRXNjYXBlJiBjYXN0KGNvbnN0IEVzY2FwZSYgZXNjYXBlKQorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlQoZXNjYXBlLnR5cGUoKSA9PSBCYWNrcmVmZXJlbmNlKTsK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBCYWNrcmVmZXJlbmNlRXNjYXBl
Jj4oZXNjYXBlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQmFja3JlZmVyZW5jZUVz
Y2FwZShpbnQgc3VicGF0dGVybklkKQorICAgICAgICAgICAgOiBFc2NhcGUoQmFja3JlZmVyZW5j
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgd29yZDEuaSA9IHN1YnBhdHRlcm5JZDsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgb3BlcmF0b3IgRXNjYXBlKCkgY29uc3QgeyByZXR1cm4g
KnRoaXM7IH0KKyAgICAgICAgCisgICAgICAgIGludCBzdWJwYXR0ZXJuSWQoKSBjb25zdCB7IHJl
dHVybiB3b3JkMS5pOyB9CisgICAgfTsKKworICAgIGNsYXNzIFdvcmRCb3VuZGFyeUFzc2VydGlv
bkVzY2FwZSA6IHB1YmxpYyBFc2NhcGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGNv
bnN0IFdvcmRCb3VuZGFyeUFzc2VydGlvbkVzY2FwZSYgY2FzdChjb25zdCBFc2NhcGUmIGVzY2Fw
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGVzY2FwZS50eXBlKCkgPT0gV29yZEJv
dW5kYXJ5QXNzZXJ0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBX
b3JkQm91bmRhcnlBc3NlcnRpb25Fc2NhcGUmPihlc2NhcGUpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBXb3JkQm91bmRhcnlBc3NlcnRpb25Fc2NhcGUoYm9vbCBpbnZlcnQpCisgICAg
ICAgICAgICA6IEVzY2FwZShXb3JkQm91bmRhcnlBc3NlcnRpb24pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHdvcmQxLmkgPSBpbnZlcnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9w
ZXJhdG9yIEVzY2FwZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgICAgIAorICAgICAg
ICBib29sIGludmVydCgpIGNvbnN0IHsgcmV0dXJuIHdvcmQxLmk7IH0KKyAgICB9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V1JFQworCisjZW5kaWYgLy8gRU5BQkxFKFdSRUMpCisKKyNlbmRp
ZiAvLyBFc2NhcGVzX2gKSW5kZXg6IHdyZWMvUXVhbnRpZmllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdy
ZWMvUXVhbnRpZmllci5oCShyZXZpc2lvbiAzODg4NSkKKysrIHdyZWMvUXVhbnRpZmllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxMiArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdSRUMgewogICAgICAgICAgICAgRXJyb3IsCiAgICAgICAgIH07CiAKLSAgICAgICAgUXVhbnRp
ZmllcigpCi0gICAgICAgICAgICA6IHR5cGUoTm9uZSkKLSAgICAgICAgewotICAgICAgICB9Ci0K
LSAgICAgICAgUXVhbnRpZmllcihUeXBlIHR5cGUsIHVuc2lnbmVkIG1pbiA9IDAsIHVuc2lnbmVk
IG1heCA9IG5vTWF4U3BlY2lmaWVkKQorICAgICAgICBRdWFudGlmaWVyKFR5cGUgdHlwZSA9IE5v
bmUsIHVuc2lnbmVkIG1pbiA9IDAsIHVuc2lnbmVkIG1heCA9IG5vTWF4U3BlY2lmaWVkKQogICAg
ICAgICAgICAgOiB0eXBlKHR5cGUpCiAgICAgICAgICAgICAsIG1pbihtaW4pCiAgICAgICAgICAg
ICAsIG1heChtYXgpCkluZGV4OiB3cmVjL1dSRUNHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHdyZWMvV1JFQ0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDM4ODg1KQorKysgd3JlYy9XUkVDR2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDYgKzI5MCwxMiBAQCB2b2lkIEdlbmVy
YXRvcjo6Z2VuZXJhdGVHcmVlZHlRdWFudGlmaWVyCiAgICAgbmV3RmFpbHVyZXMubGlua1RvKGJh
Y2t0cmFjayk7CiB9CiAKK3ZvaWQgR2VuZXJhdG9yOjpnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJT
ZXF1ZW5jZShKdW1wTGlzdCYgZmFpbHVyZXMsIGludCogc2VxdWVuY2UsIHNpemVfdCBjb3VudCkK
K3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIGdlbmVy
YXRlUGF0dGVybkNoYXJhY3RlcihmYWlsdXJlcywgc2VxdWVuY2VbaV0pOworfQorCiB2b2lkIEdl
bmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyKEp1bXBMaXN0JiBmYWlsdXJlcywgaW50
IGNoKQogewogICAgIGdlbmVyYXRlTG9hZENoYXJhY3RlcihmYWlsdXJlcyk7CkluZGV4OiB3cmVj
L1dSRUNHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3cmVjL1dSRUNHZW5lcmF0b3IuaAkocmV2
aXNpb24gMzg4ODUpCisrKyB3cmVjL1dSRUNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
ODEsNiArODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdSRUMgewogICAgICAgICB2
b2lkIGdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NJbnZlcnRlZChKdW1wTGlzdCYgZmFpbHVyZXMsIGNv
bnN0IENoYXJhY3RlckNsYXNzJiBjaGFyQ2xhc3MpOwogICAgICAgICB2b2lkIGdlbmVyYXRlQ2hh
cmFjdGVyQ2xhc3NJbnZlcnRlZFJhbmdlKEp1bXBMaXN0JiBmYWlsdXJlcywgSnVtcExpc3QmIG1h
dGNoRGVzdCwgY29uc3QgQ2hhcmFjdGVyUmFuZ2UqIHJhbmdlcywgdW5zaWduZWQgY291bnQsIHVu
c2lnbmVkKiBtYXRjaEluZGV4LCBjb25zdCBVQ2hhciogbWF0Y2hlcywgdW5zaWduZWQgbWF0Y2hD
b3VudCk7CiAgICAgICAgIHZvaWQgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyKEp1bXBMaXN0JiBm
YWlsdXJlcywgaW50IGNoKTsKKyAgICAgICAgdm9pZCBnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJT
ZXF1ZW5jZShKdW1wTGlzdCYgZmFpbHVyZXMsIGludCogc2VxdWVuY2UsIHNpemVfdCBjb3VudCk7
CiAgICAgICAgIHZvaWQgZ2VuZXJhdGVBc3NlcnRpb25Xb3JkQm91bmRhcnkoSnVtcExpc3QmIGZh
aWx1cmVzLCBib29sIGludmVydCk7CiAgICAgICAgIHZvaWQgZ2VuZXJhdGVBc3NlcnRpb25CT0wo
SnVtcExpc3QmIGZhaWx1cmVzKTsKICAgICAgICAgdm9pZCBnZW5lcmF0ZUFzc2VydGlvbkVPTChK
dW1wTGlzdCYgZmFpbHVyZXMpOwpJbmRleDogd3JlYy9XUkVDUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSB3cmVjL1dSRUNQYXJzZXIuY3BwCShyZXZpc2lvbiAzODg4NSkKKysrIHdyZWMvV1JFQ1Bh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgdXNpbmcgbmFtZXNwYWNl
IFdURjsKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXUkVDIHsKIAotQUxXQVlTX0lOTElO
RSBRdWFudGlmaWVyIFBhcnNlcjo6cGFyc2VHcmVlZHlRdWFudGlmaWVyKCkKK0FMV0FZU19JTkxJ
TkUgUXVhbnRpZmllciBQYXJzZXI6OmNvbnN1bWVHcmVlZHlRdWFudGlmaWVyKCkKIHsKICAgICBz
d2l0Y2ggKHBlZWsoKSkgewogICAgICAgICBjYXNlICc/JzoKQEAgLTExMiw5ICsxMTIsOSBAQCBB
TFdBWVNfSU5MSU5FIFF1YW50aWZpZXIgUGFyc2VyOjpwYXJzZUdyCiAgICAgfQogfQogCi1RdWFu
dGlmaWVyIFBhcnNlcjo6cGFyc2VRdWFudGlmaWVyKCkKK1F1YW50aWZpZXIgUGFyc2VyOjpjb25z
dW1lUXVhbnRpZmllcigpCiB7Ci0gICAgUXVhbnRpZmllciBxID0gcGFyc2VHcmVlZHlRdWFudGlm
aWVyKCk7CisgICAgUXVhbnRpZmllciBxID0gY29uc3VtZUdyZWVkeVF1YW50aWZpZXIoKTsKICAg
ICAKICAgICBpZiAoKHEudHlwZSA9PSBRdWFudGlmaWVyOjpHcmVlZHkpICYmIChwZWVrKCkgPT0g
Jz8nKSkgewogICAgICAgICBjb25zdW1lKCk7CkBAIC0xMjQsMzggKzEyNCw5MSBAQCBRdWFudGlm
aWVyIFBhcnNlcjo6cGFyc2VRdWFudGlmaWVyKCkKICAgICByZXR1cm4gcTsKIH0KIAotYm9vbCBQ
YXJzZXI6OnBhcnNlUGF0dGVybkNoYXJhY3RlclF1YWxpZmllcihKdW1wTGlzdCYgZmFpbHVyZXMs
IGludCBjaCkKK2Jvb2wgUGFyc2VyOjpwYXJzZVBhdHRlcm5DaGFyYWN0ZXJTZXF1ZW5jZShKdW1w
TGlzdCYgZmFpbHVyZXMsIGludCBjaCkKIHsKLSAgICBRdWFudGlmaWVyIHEgPSBwYXJzZVF1YW50
aWZpZXIoKTsKKyAgICBWZWN0b3I8aW50LCA4PiBzZXF1ZW5jZTsKKyAgICBzZXF1ZW5jZS5hcHBl
bmQoY2gpOworICAgIFF1YW50aWZpZXIgcXVhbnRpZmllcjsKKyAgICBFc2NhcGUgZXNjYXBlOwor
CisgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgd2hpbGUgKCFkb25lKSB7CisgICAgICAgIHN3
aXRjaCAocGVlaygpKSB7CisgICAgICAgICAgICBjYXNlIEVuZE9mUGF0dGVybjoKKyAgICAgICAg
ICAgIGNhc2UgJ14nOgorICAgICAgICAgICAgY2FzZSAnJCc6CisgICAgICAgICAgICBjYXNlICcu
JzoKKyAgICAgICAgICAgIGNhc2UgJygnOgorICAgICAgICAgICAgY2FzZSAnKSc6CisgICAgICAg
ICAgICBjYXNlICdbJzoKKyAgICAgICAgICAgIGNhc2UgJ10nOgorICAgICAgICAgICAgY2FzZSAn
fSc6CisgICAgICAgICAgICBjYXNlICd8JzogeworICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVl
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Y2FzZSAnKic6IAorICAgICAgICAgICAgY2FzZSAnKyc6IAorICAgICAgICAgICAgY2FzZSAnPyc6
IAorICAgICAgICAgICAgY2FzZSAneyc6IHsKKyAgICAgICAgICAgICAgICBxdWFudGlmaWVyID0g
Y29uc3VtZVF1YW50aWZpZXIoKTsKKyAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgJ1xc
JzogeworICAgICAgICAgICAgICAgIGNvbnN1bWUoKTsKKyAgICAgICAgICAgICAgICBlc2NhcGUg
PSBjb25zdW1lRXNjYXBlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpZiAoZXNjYXBlLnR5cGUo
KSA9PSBFc2NhcGU6OlBhdHRlcm5DaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgc2Vx
dWVuY2UuYXBwZW5kKFBhdHRlcm5DaGFyYWN0ZXJFc2NhcGU6OmNhc3QoZXNjYXBlKS5jaGFyYWN0
ZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
IAotICAgIHN3aXRjaCAocS50eXBlKSB7Ci0gICAgY2FzZSBRdWFudGlmaWVyOjpOb25lOiB7Ci0g
ICAgICAgIG1fZ2VuZXJhdG9yLmdlbmVyYXRlUGF0dGVybkNoYXJhY3RlcihmYWlsdXJlcywgY2gp
OwotICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6IHsK
KyAgICAgICAgICAgICAgICAvLyBBbnl0aGluZyBlbHNlIGlzIGEgUGF0dGVybkNoYXJhY3Rlci4K
KyAgICAgICAgICAgICAgICBzZXF1ZW5jZS5hcHBlbmQoY29uc3VtZSgpKTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAotICAgIGNh
c2UgUXVhbnRpZmllcjo6R3JlZWR5OiB7Ci0gICAgICAgIEdlbmVyYXRlUGF0dGVybkNoYXJhY3Rl
ckZ1bmN0b3IgZnVuY3RvcihjaCk7Ci0gICAgICAgIG1fZ2VuZXJhdG9yLmdlbmVyYXRlR3JlZWR5
UXVhbnRpZmllcihmYWlsdXJlcywgZnVuY3RvciwgcS5taW4sIHEubWF4KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQorICAgIC8vIEdlbmVyYXRlIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UuIElmIHRo
ZSBsYXN0IGNoYXJhY3RlciB3YXMgcXVhbnRpZmllZCwKKyAgICAvLyBpdCBuZWVkcyB0byBiZSBw
YXJzZWQgc2VwYXJhdGVseSwgaW4gdGhlIGNvbnRleHQgb2YgaXRzIHF1YW50aWZpZXIuCisgICAg
c2l6ZV90IGNvdW50ID0gcXVhbnRpZmllci50eXBlID09IFF1YW50aWZpZXI6Ok5vbmUgPyBzZXF1
ZW5jZS5zaXplKCkgOiBzZXF1ZW5jZS5zaXplKCkgLSAxOworICAgIG1fZ2VuZXJhdG9yLmdlbmVy
YXRlUGF0dGVybkNoYXJhY3RlclNlcXVlbmNlKGZhaWx1cmVzLCBzZXF1ZW5jZS5iZWdpbigpLCBj
b3VudCk7CiAKLSAgICBjYXNlIFF1YW50aWZpZXI6Ok5vbkdyZWVkeTogewotICAgICAgICBHZW5l
cmF0ZVBhdHRlcm5DaGFyYWN0ZXJGdW5jdG9yIGZ1bmN0b3IoY2gpOwotICAgICAgICBtX2dlbmVy
YXRvci5nZW5lcmF0ZU5vbkdyZWVkeVF1YW50aWZpZXIoZmFpbHVyZXMsIGZ1bmN0b3IsIHEubWlu
LCBxLm1heCk7Ci0gICAgICAgIGJyZWFrOworICAgIHN3aXRjaCAocXVhbnRpZmllci50eXBlKSB7
CisgICAgICAgIGNhc2UgUXVhbnRpZmllcjo6Tm9uZTogeworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBRdWFudGlmaWVyOjpFcnJvcjogeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGNhc2UgUXVhbnRpZmllcjo6R3JlZWR5
OiB7CisgICAgICAgICAgICBHZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJGdW5jdG9yIGZ1bmN0b3Io
c2VxdWVuY2UubGFzdCgpKTsKKyAgICAgICAgICAgIG1fZ2VuZXJhdG9yLmdlbmVyYXRlR3JlZWR5
UXVhbnRpZmllcihmYWlsdXJlcywgZnVuY3RvciwgcXVhbnRpZmllci5taW4sIHF1YW50aWZpZXIu
bWF4KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
UXVhbnRpZmllcjo6Tm9uR3JlZWR5OiB7CisgICAgICAgICAgICBHZW5lcmF0ZVBhdHRlcm5DaGFy
YWN0ZXJGdW5jdG9yIGZ1bmN0b3Ioc2VxdWVuY2UubGFzdCgpKTsKKyAgICAgICAgICAgIG1fZ2Vu
ZXJhdG9yLmdlbmVyYXRlTm9uR3JlZWR5UXVhbnRpZmllcihmYWlsdXJlcywgZnVuY3RvciwgcXVh
bnRpZmllci5taW4sIHF1YW50aWZpZXIubWF4KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CiAgICAgfQogCi0gICAgY2FzZSBRdWFudGlmaWVyOjpFcnJvcjoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKKyAgICAvLyBJZiB0aGUgbGFzdCB0b2tlbiB3YXMg
bm90IGEgcXVhbnRpZmllciwgaXQgbWlnaHQgaGF2ZSBiZWVuIGEgbm9uLWNoYXJhY3RlcgorICAg
IC8vIGVzY2FwZS4gV2UgbmVlZCB0byBwYXJzZSBpdCBub3csIHNpbmNlIHdlJ3ZlIGNvbnN1bWVk
IGl0LgorICAgIGlmIChlc2NhcGUudHlwZSgpICE9IEVzY2FwZTo6Tm9uZSAmJiBlc2NhcGUudHlw
ZSgpICE9IEVzY2FwZTo6UGF0dGVybkNoYXJhY3RlcikKKyAgICAgICAgcmV0dXJuIHBhcnNlRXNj
YXBlKGZhaWx1cmVzLCBlc2NhcGUpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgUGFy
c2VyOjpwYXJzZUNoYXJhY3RlckNsYXNzUXVhbnRpZmllcihKdW1wTGlzdCYgZmFpbHVyZXMsIGNv
bnN0IENoYXJhY3RlckNsYXNzJiBjaGFyQ2xhc3MsIGJvb2wgaW52ZXJ0KQogewotICAgIFF1YW50
aWZpZXIgcSA9IHBhcnNlUXVhbnRpZmllcigpOworICAgIFF1YW50aWZpZXIgcSA9IGNvbnN1bWVR
dWFudGlmaWVyKCk7CiAKICAgICBzd2l0Y2ggKHEudHlwZSkgewogICAgIGNhc2UgUXVhbnRpZmll
cjo6Tm9uZTogewpAQCAtMTg0LDcgKzIzNyw3IEBAIGJvb2wgUGFyc2VyOjpwYXJzZUNoYXJhY3Rl
ckNsYXNzUXVhbnRpZmkKIAogYm9vbCBQYXJzZXI6OnBhcnNlQmFja3JlZmVyZW5jZVF1YW50aWZp
ZXIoSnVtcExpc3QmIGZhaWx1cmVzLCB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQpCiB7Ci0gICAgUXVh
bnRpZmllciBxID0gcGFyc2VRdWFudGlmaWVyKCk7CisgICAgUXVhbnRpZmllciBxID0gY29uc3Vt
ZVF1YW50aWZpZXIoKTsKIAogICAgIHN3aXRjaCAocS50eXBlKSB7CiAgICAgY2FzZSBRdWFudGlm
aWVyOjpOb25lOiB7CkBAIC0yMjEsNyArMjc0LDcgQEAgYm9vbCBQYXJzZXI6OnBhcnNlQ2hhcmFj
dGVyQ2xhc3MoSnVtcExpcwogICAgICAgICBpbnZlcnQgPSB0cnVlOwogICAgIH0KIAotICAgIENo
YXJhY3RlckNsYXNzQ29uc3RydWN0b3IgY2hhckNsYXNzQ29uc3RydWN0b3IobV9pZ25vcmVDYXNl
KTsKKyAgICBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yIGNvbnN0cnVjdG9yKG1faWdub3JlQ2Fz
ZSk7CiAKICAgICBVQ2hhciBjaDsKICAgICB3aGlsZSAoKGNoID0gcGVlaygpKSAhPSAnXScpIHsK
QEAgLTIyOSwxNzcgKzI4MiwxMjkgQEAgYm9vbCBQYXJzZXI6OnBhcnNlQ2hhcmFjdGVyQ2xhc3Mo
SnVtcExpcwogICAgICAgICBjYXNlIEVuZE9mUGF0dGVybjoKICAgICAgICAgICAgIG1fZXJyb3Ig
PSBNYWxmb3JtZWRDaGFyYWN0ZXJDbGFzczsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlICdcXCc6Ci0gICAgICAgICAgICBjb25zdW1lKCk7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKGNoID0gcGVlaygpKSB7Ci0gICAgICAgICAgICBjYXNlIEVuZE9m
UGF0dGVybjoKLSAgICAgICAgICAgICAgICBtX2Vycm9yID0gTWFsZm9ybWVkRXNjYXBlOwotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNhc2UgJzAnOgotICAgICAg
ICAgICAgY2FzZSAnMSc6Ci0gICAgICAgICAgICBjYXNlICcyJzoKLSAgICAgICAgICAgIGNhc2Ug
JzMnOgotICAgICAgICAgICAgY2FzZSAnNCc6Ci0gICAgICAgICAgICBjYXNlICc1JzoKLSAgICAg
ICAgICAgIGNhc2UgJzYnOgotICAgICAgICAgICAgY2FzZSAnNyc6Ci0gICAgICAgICAgICAgICAg
Y2hhckNsYXNzQ29uc3RydWN0b3IucHV0KGNvbnN1bWVPY3RhbCgpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgLy8gQ29udHJvbEVzY2FwZQotICAgICAgICAgICAgY2Fz
ZSAnYic6Ci0gICAgICAgICAgICAgICAgY29uc3VtZSgpOwotICAgICAgICAgICAgICAgIGNoYXJD
bGFzc0NvbnN0cnVjdG9yLnB1dCgnXGInKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgICAgIGNvbnN1bWUoKTsKLSAgICAgICAgICAg
ICAgICBjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5wdXQoJ1xmJyk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlICduJzoKLSAgICAgICAgICAgICAgICBjb25zdW1lKCk7Ci0g
ICAgICAgICAgICAgICAgY2hhckNsYXNzQ29uc3RydWN0b3IucHV0KCdcbicpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAncic6Ci0gICAgICAgICAgICAgICAgY29u
c3VtZSgpOwotICAgICAgICAgICAgICAgIGNoYXJDbGFzc0NvbnN0cnVjdG9yLnB1dCgnXHInKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3QnOgotICAgICAgICAg
ICAgICAgIGNvbnN1bWUoKTsKLSAgICAgICAgICAgICAgICBjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5w
dXQoJ1x0Jyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICd2JzoK
LSAgICAgICAgICAgICAgICBjb25zdW1lKCk7Ci0gICAgICAgICAgICAgICAgY2hhckNsYXNzQ29u
c3RydWN0b3IucHV0KCdcdicpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICdcXCc6IHsKKyAgICAgICAgICAgIGNvbnN1bWUoKTsKKyAgICAgICAgICAgIEVzY2FwZSBlc2Nh
cGUgPSBjb25zdW1lRXNjYXBlKHRydWUpOwogCi0gICAgICAgICAgICAvLyBDb250cm9sTGV0dGVy
Ci0gICAgICAgICAgICBjYXNlICdjJzogewotICAgICAgICAgICAgICAgIGNvbnN1bWUoKTsKLSAg
ICAgICAgICAgICAgICBpbnQgY29udHJvbCA9IGNvbnN1bWUoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWlzQVNDSUlBbHBoYShjb250cm9sKSkgewotICAgICAgICAgICAgICAgICAgICBtX2Vycm9y
ID0gTWFsZm9ybWVkRXNjYXBlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGVzY2FwZS50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNl
IEVzY2FwZTo6UGF0dGVybkNoYXJhY3RlcjogeworICAgICAgICAgICAgICAgICAgICBpbnQgY2hh
cmFjdGVyID0gUGF0dGVybkNoYXJhY3RlckVzY2FwZTo6Y2FzdChlc2NhcGUpLmNoYXJhY3Rlcigp
OworICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID09ICctJykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0cnVjdG9yLmZsdXNoQmVmb3JlRXNjYXBlZEh5cGhlbigpOworICAg
ICAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvci5wdXQoY2hhcmFjdGVyKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNoYXJD
bGFzc0NvbnN0cnVjdG9yLnB1dChjb250cm9sJjMxKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSGV4RXNjYXBlCi0gICAgICAgICAgICBj
YXNlICd4JzogewotICAgICAgICAgICAgICAgIGNvbnN1bWUoKTsKLSAgICAgICAgICAgICAgICBp
bnQgeCA9IGNvbnN1bWVIZXgoMik7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gLTEpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV9lcnJvciA9IE1hbGZvcm1lZEVzY2FwZTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGNhc2UgRXNjYXBlOjpDaGFy
YWN0ZXJDbGFzczogeworICAgICAgICAgICAgICAgICAgICBjb25zdCBDaGFyYWN0ZXJDbGFzc0Vz
Y2FwZSYgY2hhcmFjdGVyQ2xhc3NFc2NhcGUgPSBDaGFyYWN0ZXJDbGFzc0VzY2FwZTo6Y2FzdChl
c2NhcGUpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWNoYXJhY3RlckNsYXNzRXNjYXBl
LmludmVydCgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IuYXBwZW5kKGNoYXJh
Y3RlckNsYXNzRXNjYXBlLmNoYXJhY3RlckNsYXNzKCkpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2hhckNsYXNzQ29uc3Ry
dWN0b3IucHV0KHgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBVbmljb2RlRXNjYXBlCi0gICAgICAgICAgICBjYXNlICd1JzogewotICAg
ICAgICAgICAgICAgIGNvbnN1bWUoKTsKLSAgICAgICAgICAgICAgICBpbnQgeCA9IGNvbnN1bWVI
ZXgoNCk7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIEVzY2FwZTo6RXJyb3I6IHsKICAgICAgICAgICAgICAgICAgICAgbV9lcnJvciA9IE1hbGZv
cm1lZEVzY2FwZTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5wdXQoeCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIENoYXJhY3RlckNsYXNzRXNjYXBlCi0gICAgICAgICAgICBjYXNlICdkJzoKLSAg
ICAgICAgICAgICAgICBjb25zdW1lKCk7Ci0gICAgICAgICAgICAgICAgY2hhckNsYXNzQ29uc3Ry
dWN0b3IuYXBwZW5kKENoYXJhY3RlckNsYXNzOjpkaWdpdHMoKSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdzJzoKLSAgICAgICAgICAgICAgICBjb25zdW1lKCk7
Ci0gICAgICAgICAgICAgICAgY2hhckNsYXNzQ29uc3RydWN0b3IuYXBwZW5kKENoYXJhY3RlckNs
YXNzOjpzcGFjZXMoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
ICd3JzoKLSAgICAgICAgICAgICAgICBjb25zdW1lKCk7Ci0gICAgICAgICAgICAgICAgY2hhckNs
YXNzQ29uc3RydWN0b3IuYXBwZW5kKENoYXJhY3RlckNsYXNzOjp3b3JkY2hhcigpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ0QnOgotICAgICAgICAgICAgICAg
IGNvbnN1bWUoKTsKLSAgICAgICAgICAgICAgICBjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5hcHBlbmQo
Q2hhcmFjdGVyQ2xhc3M6Om5vbmRpZ2l0cygpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgJ1MnOgotICAgICAgICAgICAgICAgIGNvbnN1bWUoKTsKLSAgICAgICAg
ICAgICAgICBjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5hcHBlbmQoQ2hhcmFjdGVyQ2xhc3M6Om5vbnNw
YWNlcygpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ1cnOgot
ICAgICAgICAgICAgICAgIGNvbnN1bWUoKTsKLSAgICAgICAgICAgICAgICBjaGFyQ2xhc3NDb25z
dHJ1Y3Rvci5hcHBlbmQoQ2hhcmFjdGVyQ2xhc3M6Om5vbndvcmRjaGFyKCkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlICctJzoKLSAgICAgICAgICAgICAgICBj
b25zdW1lKCk7Ci0gICAgICAgICAgICAgICAgY2hhckNsYXNzQ29uc3RydWN0b3IuZmx1c2hCZWZv
cmVFc2NhcGVkSHlwaGVuKCk7Ci0gICAgICAgICAgICAgICAgY2hhckNsYXNzQ29uc3RydWN0b3Iu
cHV0KGNoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLy8gSWRlbnRp
dHlFc2NhcGUKLSAgICAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgICAgICAvLyBUT0RP
OiBjaGVjayB0aGlzIHRlc3QgZm9yIElkZW50aWZpZXJQYXJ0LgotICAgICAgICAgICAgICAgIGlu
dCBjaCA9IGNvbnN1bWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSUFscGhhbnVtZXJp
YyhjaCkgfHwgKGNoID09ICdfJykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9lcnJvciA9IE1h
bGZvcm1lZEVzY2FwZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIGNhc2UgRXNjYXBlOjpOb25lOgorICAgICAgICAgICAgICAgIGNhc2UgRXNjYXBl
OjpCYWNrcmVmZXJlbmNlOgorICAgICAgICAgICAgICAgIGNhc2UgRXNjYXBlOjpXb3JkQm91bmRh
cnlBc3NlcnRpb246IHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5wdXQoY2gpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAKKyAgICAgICAgfQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBj
b25zdW1lKCk7Ci0gICAgICAgICAgICBjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5wdXQoY2gpOworICAg
ICAgICAgICAgY29uc3RydWN0b3IucHV0KGNoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjb25z
dW1lKCk7CiAKICAgICAvLyBsYXppbHkgY2F0Y2ggcmV2ZXJzZWQgcmFuZ2VzIChbei1hXSlpbiBj
aGFyYWN0ZXIgY2xhc3NlcwotICAgIGlmIChjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5pc1Vwc2lkZURv
d24oKSkgeworICAgIGlmIChjb25zdHJ1Y3Rvci5pc1Vwc2lkZURvd24oKSkgewogICAgICAgICBt
X2Vycm9yID0gTWFsZm9ybWVkQ2hhcmFjdGVyQ2xhc3M7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5mbHVzaCgpOwotICAgIENoYXJhY3Rl
ckNsYXNzIGNoYXJDbGFzcyA9IGNoYXJDbGFzc0NvbnN0cnVjdG9yLmNoYXJDbGFzcygpOworICAg
IGNvbnN0cnVjdG9yLmZsdXNoKCk7CisgICAgQ2hhcmFjdGVyQ2xhc3MgY2hhckNsYXNzID0gY29u
c3RydWN0b3IuY2hhckNsYXNzKCk7CiAgICAgcmV0dXJuIHBhcnNlQ2hhcmFjdGVyQ2xhc3NRdWFu
dGlmaWVyKGZhaWx1cmVzLCBjaGFyQ2xhc3MsIGludmVydCk7CiB9CiAKLWJvb2wgUGFyc2VyOjpw
YXJzZU9jdGFsRXNjYXBlKEp1bXBMaXN0JiBmYWlsdXJlcykKK2Jvb2wgUGFyc2VyOjpwYXJzZUVz
Y2FwZShKdW1wTGlzdCYgZmFpbHVyZXMsIGNvbnN0IEVzY2FwZSYgZXNjYXBlKQogewotICAgIHJl
dHVybiBwYXJzZVBhdHRlcm5DaGFyYWN0ZXJRdWFsaWZpZXIoZmFpbHVyZXMsIGNvbnN1bWVPY3Rh
bCgpKTsKKyAgICBzd2l0Y2ggKGVzY2FwZS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBFc2NhcGU6
OlBhdHRlcm5DaGFyYWN0ZXI6IHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZVBhdHRlcm5DaGFy
YWN0ZXJTZXF1ZW5jZShmYWlsdXJlcywgUGF0dGVybkNoYXJhY3RlckVzY2FwZTo6Y2FzdChlc2Nh
cGUpLmNoYXJhY3RlcigpKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVzY2FwZTo6Q2hhcmFj
dGVyQ2xhc3M6IHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUNoYXJhY3RlckNsYXNzUXVhbnRp
ZmllcihmYWlsdXJlcywgQ2hhcmFjdGVyQ2xhc3NFc2NhcGU6OmNhc3QoZXNjYXBlKS5jaGFyYWN0
ZXJDbGFzcygpLCBDaGFyYWN0ZXJDbGFzc0VzY2FwZTo6Y2FzdChlc2NhcGUpLmludmVydCgpKTsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEVzY2FwZTo6QmFja3JlZmVyZW5jZTogeworICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlQmFja3JlZmVyZW5jZVF1YW50aWZpZXIoZmFpbHVyZXMsIEJhY2ty
ZWZlcmVuY2VFc2NhcGU6OmNhc3QoZXNjYXBlKS5zdWJwYXR0ZXJuSWQoKSk7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBFc2NhcGU6OldvcmRCb3VuZGFyeUFzc2VydGlvbjogeworICAgICAgICAg
ICAgbV9nZW5lcmF0b3IuZ2VuZXJhdGVBc3NlcnRpb25Xb3JkQm91bmRhcnkoZmFpbHVyZXMsIFdv
cmRCb3VuZGFyeUFzc2VydGlvbkVzY2FwZTo6Y2FzdChlc2NhcGUpLmludmVydCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGNhc2UgRXNjYXBlOjpFcnJv
cjogeworICAgICAgICAgICAgbV9lcnJvciA9IE1hbGZvcm1lZEVzY2FwZTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVzY2FwZTo6Tm9uZTogewor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBQYXJzZXI6
OnBhcnNlRXNjYXBlKEp1bXBMaXN0JiBmYWlsdXJlcykKK0VzY2FwZSBQYXJzZXI6OmNvbnN1bWVF
c2NhcGUoYm9vbCBpbkNoYXJhY3RlckNsYXNzKQogewogICAgIHN3aXRjaCAocGVlaygpKSB7CiAg
ICAgY2FzZSBFbmRPZlBhdHRlcm46Ci0gICAgICAgIG1fZXJyb3IgPSBNYWxmb3JtZWRFc2NhcGU7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIEVzY2FwZShFc2NhcGU6OkVy
cm9yKTsKIAogICAgIC8vIEFzc2VydGlvbnMKICAgICBjYXNlICdiJzoKICAgICAgICAgY29uc3Vt
ZSgpOwotICAgICAgICBtX2dlbmVyYXRvci5nZW5lcmF0ZUFzc2VydGlvbldvcmRCb3VuZGFyeShm
YWlsdXJlcywgZmFsc2UpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQorICAgICAgICBpZiAoaW5D
aGFyYWN0ZXJDbGFzcykKKyAgICAgICAgICAgIHJldHVybiBQYXR0ZXJuQ2hhcmFjdGVyRXNjYXBl
KCdcYicpOworICAgICAgICByZXR1cm4gV29yZEJvdW5kYXJ5QXNzZXJ0aW9uRXNjYXBlKGZhbHNl
KTsgLy8gZG8gbm90IGludmVydAogICAgIGNhc2UgJ0InOgogICAgICAgICBjb25zdW1lKCk7Ci0g
ICAgICAgIG1fZ2VuZXJhdG9yLmdlbmVyYXRlQXNzZXJ0aW9uV29yZEJvdW5kYXJ5KGZhaWx1cmVz
LCB0cnVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChpbkNoYXJhY3RlckNs
YXNzKQorICAgICAgICAgICAgcmV0dXJuIEVzY2FwZShFc2NhcGU6OkVycm9yKTsKKyAgICAgICAg
cmV0dXJuIFdvcmRCb3VuZGFyeUFzc2VydGlvbkVzY2FwZSh0cnVlKTsgLy8gaW52ZXJ0CiAKLSAg
ICAvLyBPY3RhbCBlc2NhcGUKLSAgICBjYXNlICcwJzoKKyAgICAvLyBDaGFyYWN0ZXJDbGFzc0Vz
Y2FwZQorICAgIGNhc2UgJ2QnOgorICAgICAgICBjb25zdW1lKCk7CisgICAgICAgIHJldHVybiBD
aGFyYWN0ZXJDbGFzc0VzY2FwZShDaGFyYWN0ZXJDbGFzczo6ZGlnaXRzKCksIGZhbHNlKTsKKyAg
ICBjYXNlICdzJzoKKyAgICAgICAgY29uc3VtZSgpOworICAgICAgICByZXR1cm4gQ2hhcmFjdGVy
Q2xhc3NFc2NhcGUoQ2hhcmFjdGVyQ2xhc3M6OnNwYWNlcygpLCBmYWxzZSk7CisgICAgY2FzZSAn
dyc6CisgICAgICAgIGNvbnN1bWUoKTsKKyAgICAgICAgcmV0dXJuIENoYXJhY3RlckNsYXNzRXNj
YXBlKENoYXJhY3RlckNsYXNzOjp3b3JkY2hhcigpLCBmYWxzZSk7CisgICAgY2FzZSAnRCc6Cisg
ICAgICAgIGNvbnN1bWUoKTsKKyAgICAgICAgcmV0dXJuIGluQ2hhcmFjdGVyQ2xhc3MKKyAgICAg
ICAgICAgID8gQ2hhcmFjdGVyQ2xhc3NFc2NhcGUoQ2hhcmFjdGVyQ2xhc3M6Om5vbmRpZ2l0cygp
LCBmYWxzZSkKKyAgICAgICAgICAgIDogQ2hhcmFjdGVyQ2xhc3NFc2NhcGUoQ2hhcmFjdGVyQ2xh
c3M6OmRpZ2l0cygpLCB0cnVlKTsKKyAgICBjYXNlICdTJzoKKyAgICAgICAgY29uc3VtZSgpOwor
ICAgICAgICByZXR1cm4gaW5DaGFyYWN0ZXJDbGFzcworICAgICAgICAgICAgPyBDaGFyYWN0ZXJD
bGFzc0VzY2FwZShDaGFyYWN0ZXJDbGFzczo6bm9uc3BhY2VzKCksIGZhbHNlKQorICAgICAgICAg
ICAgOiBDaGFyYWN0ZXJDbGFzc0VzY2FwZShDaGFyYWN0ZXJDbGFzczo6c3BhY2VzKCksIHRydWUp
OworICAgIGNhc2UgJ1cnOgogICAgICAgICBjb25zdW1lKCk7Ci0gICAgICAgIHJldHVybiBwYXJz
ZU9jdGFsRXNjYXBlKGZhaWx1cmVzKTsKKyAgICAgICAgcmV0dXJuIGluQ2hhcmFjdGVyQ2xhc3MK
KyAgICAgICAgICAgID8gQ2hhcmFjdGVyQ2xhc3NFc2NhcGUoQ2hhcmFjdGVyQ2xhc3M6Om5vbndv
cmRjaGFyKCksIGZhbHNlKQorICAgICAgICAgICAgOiBDaGFyYWN0ZXJDbGFzc0VzY2FwZShDaGFy
YWN0ZXJDbGFzczo6d29yZGNoYXIoKSwgdHJ1ZSk7CiAKICAgICAvLyBEZWNpbWFsRXNjYXBlCiAg
ICAgY2FzZSAnMSc6CkBAIC00MDgsMTE0ICs0MTMsODMgQEAgYm9vbCBQYXJzZXI6OnBhcnNlRXNj
YXBlKEp1bXBMaXN0JiBmYWlsdQogICAgIGNhc2UgJzQnOgogICAgIGNhc2UgJzUnOgogICAgIGNh
c2UgJzYnOgotICAgIGNhc2UgJzcnOiB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90
IHN1cHBvcnQgZm9yd2FyZCByZWZlcmVuY2VzLiBJdCdzIG5vdCBjbGVhciB3aGV0aGVyIHRoZXkK
LSAgICAgICAgLy8gc2hvdWxkIGJlIHZhbGlkLgotICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHBl
ZWtEaWdpdCgpOwotICAgICAgICBpZiAodmFsdWUgPiBtX251bVN1YnBhdHRlcm5zKQotICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlT2N0YWxFc2NhcGUoZmFpbHVyZXMpOwotICAgIH0KKyAgICBjYXNl
ICc3JzoKICAgICBjYXNlICc4JzoKICAgICBjYXNlICc5JzogewotICAgICAgICB1bnNpZ25lZCB2
YWx1ZSA9IHBlZWtEaWdpdCgpOwotICAgICAgICBpZiAodmFsdWUgPiBtX251bVN1YnBhdHRlcm5z
KSB7Ci0gICAgICAgICAgICBjb25zdW1lKCk7Ci0gICAgICAgICAgICBtX2Vycm9yID0gTWFsZm9y
bWVkRXNjYXBlOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAocGVla0Rp
Z2l0KCkgPiBtX251bVN1YnBhdHRlcm5zIHx8IGluQ2hhcmFjdGVyQ2xhc3MpIHsKKyAgICAgICAg
ICAgIC8vIFRvIG1hdGNoIEZpcmVmb3gsIHdlIHBhcnNlIGFuIGludmFsaWQgYmFja3JlZmVyZW5j
ZSBpbiB0aGUgcmFuZ2UgWzEtN10KKyAgICAgICAgICAgIC8vIGFzIGFuIG9jdGFsIGVzY2FwZS4K
KyAgICAgICAgICAgIHJldHVybiBwZWVrRGlnaXQoKSA+IDcgPyBFc2NhcGUoRXNjYXBlOjpFcnJv
cikgOiBQYXR0ZXJuQ2hhcmFjdGVyRXNjYXBlKGNvbnN1bWVPY3RhbCgpKTsKICAgICAgICAgfQot
ICAgICAgICBjb25zdW1lKCk7CiAKLSAgICAgICAgd2hpbGUgKHBlZWtJc0RpZ2l0KCkpIHsKKyAg
ICAgICAgaW50IHZhbHVlID0gMDsKKyAgICAgICAgZG8gewogICAgICAgICAgICAgdW5zaWduZWQg
bmV3VmFsdWUgPSB2YWx1ZSAqIDEwICsgcGVla0RpZ2l0KCk7CiAgICAgICAgICAgICBpZiAobmV3
VmFsdWUgPiBtX251bVN1YnBhdHRlcm5zKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgdmFsdWUgPSBuZXdWYWx1ZTsKICAgICAgICAgICAgIGNvbnN1bWUoKTsKLSAgICAgICAg
fQorICAgICAgICB9IHdoaWxlIChwZWVrSXNEaWdpdCgpKTsKIAotICAgICAgICBwYXJzZUJhY2ty
ZWZlcmVuY2VRdWFudGlmaWVyKGZhaWx1cmVzLCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICByZXR1cm4gQmFja3JlZmVyZW5jZUVzY2FwZSh2YWx1ZSk7CiAgICAgfQotICAg
IAorCisgICAgLy8gT2N0YWwgZXNjYXBlCisgICAgY2FzZSAnMCc6CisgICAgICAgIGNvbnN1bWUo
KTsKKyAgICAgICAgcmV0dXJuIFBhdHRlcm5DaGFyYWN0ZXJFc2NhcGUoY29uc3VtZU9jdGFsKCkp
OworCiAgICAgLy8gQ29udHJvbEVzY2FwZQogICAgIGNhc2UgJ2YnOgogICAgICAgICBjb25zdW1l
KCk7Ci0gICAgICAgIHJldHVybiBwYXJzZVBhdHRlcm5DaGFyYWN0ZXJRdWFsaWZpZXIoZmFpbHVy
ZXMsICdcZicpOworICAgICAgICByZXR1cm4gUGF0dGVybkNoYXJhY3RlckVzY2FwZSgnXGYnKTsK
ICAgICBjYXNlICduJzoKICAgICAgICAgY29uc3VtZSgpOwotICAgICAgICByZXR1cm4gcGFyc2VQ
YXR0ZXJuQ2hhcmFjdGVyUXVhbGlmaWVyKGZhaWx1cmVzLCAnXG4nKTsKKyAgICAgICAgcmV0dXJu
IFBhdHRlcm5DaGFyYWN0ZXJFc2NhcGUoJ1xuJyk7CiAgICAgY2FzZSAncic6CiAgICAgICAgIGNv
bnN1bWUoKTsKLSAgICAgICAgcmV0dXJuIHBhcnNlUGF0dGVybkNoYXJhY3RlclF1YWxpZmllcihm
YWlsdXJlcywgJ1xyJyk7CisgICAgICAgIHJldHVybiBQYXR0ZXJuQ2hhcmFjdGVyRXNjYXBlKCdc
cicpOwogICAgIGNhc2UgJ3QnOgogICAgICAgICBjb25zdW1lKCk7Ci0gICAgICAgIHJldHVybiBw
YXJzZVBhdHRlcm5DaGFyYWN0ZXJRdWFsaWZpZXIoZmFpbHVyZXMsICdcdCcpOworICAgICAgICBy
ZXR1cm4gUGF0dGVybkNoYXJhY3RlckVzY2FwZSgnXHQnKTsKICAgICBjYXNlICd2JzoKICAgICAg
ICAgY29uc3VtZSgpOwotICAgICAgICByZXR1cm4gcGFyc2VQYXR0ZXJuQ2hhcmFjdGVyUXVhbGlm
aWVyKGZhaWx1cmVzLCAnXHYnKTsKKyAgICAgICAgcmV0dXJuIFBhdHRlcm5DaGFyYWN0ZXJFc2Nh
cGUoJ1x2Jyk7CiAKICAgICAvLyBDb250cm9sTGV0dGVyCiAgICAgY2FzZSAnYyc6IHsKICAgICAg
ICAgY29uc3VtZSgpOwogICAgICAgICBpbnQgY29udHJvbCA9IGNvbnN1bWUoKTsKLSAgICAgICAg
aWYgKCFpc0FTQ0lJQWxwaGEoY29udHJvbCkpIHsKLSAgICAgICAgICAgIG1fZXJyb3IgPSBNYWxm
b3JtZWRFc2NhcGU7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHBhcnNlUGF0dGVybkNoYXJhY3RlclF1YWxpZmllcihmYWlsdXJlcywgY29udHJv
bCYzMSk7CisgICAgICAgIGlmICghaXNBU0NJSUFscGhhKGNvbnRyb2wpKQorICAgICAgICAgICAg
cmV0dXJuIEVzY2FwZShFc2NhcGU6OkVycm9yKTsKKyAgICAgICAgcmV0dXJuIFBhdHRlcm5DaGFy
YWN0ZXJFc2NhcGUoY29udHJvbCAmIDMxKTsKICAgICB9CiAKICAgICAvLyBIZXhFc2NhcGUKICAg
ICBjYXNlICd4JzogewogICAgICAgICBjb25zdW1lKCk7CiAgICAgICAgIGludCB4ID0gY29uc3Vt
ZUhleCgyKTsKLSAgICAgICAgaWYgKHggPT0gLTEpIHsKLSAgICAgICAgICAgIG1fZXJyb3IgPSBN
YWxmb3JtZWRFc2NhcGU7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHBhcnNlUGF0dGVybkNoYXJhY3RlclF1YWxpZmllcihmYWlsdXJlcywgeCk7
CisgICAgICAgIGlmICh4ID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIEVzY2FwZShFc2NhcGU6
OkVycm9yKTsKKyAgICAgICAgcmV0dXJuIFBhdHRlcm5DaGFyYWN0ZXJFc2NhcGUoeCk7CiAgICAg
fQogCiAgICAgLy8gVW5pY29kZUVzY2FwZQogICAgIGNhc2UgJ3UnOiB7CiAgICAgICAgIGNvbnN1
bWUoKTsKICAgICAgICAgaW50IHggPSBjb25zdW1lSGV4KDQpOwotICAgICAgICBpZiAoeCA9PSAt
MSkgewotICAgICAgICAgICAgbV9lcnJvciA9IE1hbGZvcm1lZEVzY2FwZTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcGFyc2VQYXR0ZXJuQ2hh
cmFjdGVyUXVhbGlmaWVyKGZhaWx1cmVzLCB4KTsKKyAgICAgICAgaWYgKHggPT0gLTEpCisgICAg
ICAgICAgICByZXR1cm4gRXNjYXBlKEVzY2FwZTo6RXJyb3IpOworICAgICAgICByZXR1cm4gUGF0
dGVybkNoYXJhY3RlckVzY2FwZSh4KTsKICAgICB9CiAKLSAgICAvLyBDaGFyYWN0ZXJDbGFzc0Vz
Y2FwZQotICAgIGNhc2UgJ2QnOgotICAgICAgICBjb25zdW1lKCk7Ci0gICAgICAgIHJldHVybiBw
YXJzZUNoYXJhY3RlckNsYXNzUXVhbnRpZmllcihmYWlsdXJlcywgQ2hhcmFjdGVyQ2xhc3M6OmRp
Z2l0cygpLCBmYWxzZSk7Ci0gICAgY2FzZSAncyc6Ci0gICAgICAgIGNvbnN1bWUoKTsKLSAgICAg
ICAgcmV0dXJuIHBhcnNlQ2hhcmFjdGVyQ2xhc3NRdWFudGlmaWVyKGZhaWx1cmVzLCBDaGFyYWN0
ZXJDbGFzczo6c3BhY2VzKCksIGZhbHNlKTsKLSAgICBjYXNlICd3JzoKLSAgICAgICAgY29uc3Vt
ZSgpOwotICAgICAgICByZXR1cm4gcGFyc2VDaGFyYWN0ZXJDbGFzc1F1YW50aWZpZXIoZmFpbHVy
ZXMsIENoYXJhY3RlckNsYXNzOjp3b3JkY2hhcigpLCBmYWxzZSk7Ci0gICAgY2FzZSAnRCc6Ci0g
ICAgICAgIGNvbnN1bWUoKTsKLSAgICAgICAgcmV0dXJuIHBhcnNlQ2hhcmFjdGVyQ2xhc3NRdWFu
dGlmaWVyKGZhaWx1cmVzLCBDaGFyYWN0ZXJDbGFzczo6ZGlnaXRzKCksIHRydWUpOwotICAgIGNh
c2UgJ1MnOgotICAgICAgICBjb25zdW1lKCk7Ci0gICAgICAgIHJldHVybiBwYXJzZUNoYXJhY3Rl
ckNsYXNzUXVhbnRpZmllcihmYWlsdXJlcywgQ2hhcmFjdGVyQ2xhc3M6OnNwYWNlcygpLCB0cnVl
KTsKLSAgICBjYXNlICdXJzoKLSAgICAgICAgY29uc3VtZSgpOwotICAgICAgICByZXR1cm4gcGFy
c2VDaGFyYWN0ZXJDbGFzc1F1YW50aWZpZXIoZmFpbHVyZXMsIENoYXJhY3RlckNsYXNzOjp3b3Jk
Y2hhcigpLCB0cnVlKTsKLQogICAgIC8vIElkZW50aXR5RXNjYXBlCiAgICAgZGVmYXVsdDogewog
ICAgICAgICAvLyBUT0RPOiBjaGVjayB0aGlzIHRlc3QgZm9yIElkZW50aWZpZXJQYXJ0LgogICAg
ICAgICBpbnQgY2ggPSBjb25zdW1lKCk7Ci0gICAgICAgIGlmIChpc0FTQ0lJQWxwaGFudW1lcmlj
KGNoKSB8fCAoY2ggPT0gJ18nKSkgewotICAgICAgICAgICAgbV9lcnJvciA9IE1hbGZvcm1lZEVz
Y2FwZTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gcGFyc2VQYXR0ZXJuQ2hhcmFjdGVyUXVhbGlmaWVyKGZhaWx1cmVzLCBjaCk7CisgICAgICAg
IGlmIChpc0FTQ0lJQWxwaGFudW1lcmljKGNoKSB8fCAoY2ggPT0gJ18nKSkKKyAgICAgICAgICAg
IHJldHVybiBFc2NhcGUoRXNjYXBlOjpFcnJvcik7CisgICAgICAgIHJldHVybiBQYXR0ZXJuQ2hh
cmFjdGVyRXNjYXBlKGNoKTsKICAgICB9CiAgICAgfQogfQpAQCAtNTMyLDcgKzUwNiw2IEBAIGJv
b2wgUGFyc2VyOjpwYXJzZVRlcm0oSnVtcExpc3QmIGZhaWx1cmUKICAgICBjYXNlICd7JzoKICAg
ICBjYXNlICd9JzoKICAgICBjYXNlICd8JzoKLSAgICAgICAgLy8gTm90IGFsbG93ZWQgaW4gYSBU
ZXJtIQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgIGNhc2UgJ14nOgpAQCAt
NTQ2LDE2ICs1MTksMTQgQEAgYm9vbCBQYXJzZXI6OnBhcnNlVGVybShKdW1wTGlzdCYgZmFpbHVy
ZQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgLy8gYiAm
IEIgYXJlIGFsc28gYXNzZXJ0aW9ucy4uLgogICAgICAgICBjb25zdW1lKCk7Ci0gICAgICAgIHJl
dHVybiBwYXJzZUVzY2FwZShmYWlsdXJlcyk7CisgICAgICAgIHJldHVybiBwYXJzZUVzY2FwZShm
YWlsdXJlcywgY29uc3VtZUVzY2FwZShmYWxzZSkpOwogCiAgICAgY2FzZSAnLic6CiAgICAgICAg
IGNvbnN1bWUoKTsKICAgICAgICAgcmV0dXJuIHBhcnNlQ2hhcmFjdGVyQ2xhc3NRdWFudGlmaWVy
KGZhaWx1cmVzLCBDaGFyYWN0ZXJDbGFzczo6bmV3bGluZSgpLCB0cnVlKTsKIAogICAgIGNhc2Ug
J1snOgotICAgICAgICAvLyBDaGFyYWN0ZXJDbGFzcwogICAgICAgICBjb25zdW1lKCk7CiAgICAg
ICAgIHJldHVybiBwYXJzZUNoYXJhY3RlckNsYXNzKGZhaWx1cmVzKTsKIApAQCAtNTY0LDggKzUz
NSw4IEBAIGJvb2wgUGFyc2VyOjpwYXJzZVRlcm0oSnVtcExpc3QmIGZhaWx1cmUKICAgICAgICAg
cmV0dXJuIHBhcnNlUGFyZW50aGVzZXMoZmFpbHVyZXMpOwogCiAgICAgZGVmYXVsdDoKLSAgICAg
ICAgLy8gQW55dGhpbmcgZWxzZSBpcyBhIFBhdHRlcm5DaGFyYWN0ZXIKLSAgICAgICAgcmV0dXJu
IHBhcnNlUGF0dGVybkNoYXJhY3RlclF1YWxpZmllcihmYWlsdXJlcywgY29uc3VtZSgpKTsKKyAg
ICAgICAgLy8gQW55dGhpbmcgZWxzZSBpcyBhIFBhdHRlcm5DaGFyYWN0ZXIuCisgICAgICAgIHJl
dHVybiBwYXJzZVBhdHRlcm5DaGFyYWN0ZXJTZXF1ZW5jZShmYWlsdXJlcywgY29uc3VtZSgpKTsK
ICAgICB9CiB9CiAKSW5kZXg6IHdyZWMvV1JFQ1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdyZWMv
V1JFQ1BhcnNlci5oCShyZXZpc2lvbiAzODg4NSkKKysrIHdyZWMvV1JFQ1BhcnNlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpZiBFTkFCTEUoV1JFQykKIAorI2luY2x1
ZGUgIkVzY2FwZXMuaCIKICNpbmNsdWRlICJRdWFudGlmaWVyLmgiCiAjaW5jbHVkZSAiVVN0cmlu
Zy5oIgogI2luY2x1ZGUgIldSRUNHZW5lcmF0b3IuaCIKQEAgLTkxLDE1ICs5MiwxMiBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdSRUMgewogCiAgICAgICAgIHZvaWQgcGFyc2VEaXNqdW5j
dGlvbihKdW1wTGlzdCYgZmFpbHVyZXMpOwogICAgICAgICBib29sIHBhcnNlVGVybShKdW1wTGlz
dCYgZmFpbHVyZXMpOwotICAgICAgICBib29sIHBhcnNlRXNjYXBlKEp1bXBMaXN0JiBmYWlsdXJl
cyk7Ci0gICAgICAgIGJvb2wgcGFyc2VPY3RhbEVzY2FwZShKdW1wTGlzdCYgZmFpbHVyZXMpOwor
ICAgICAgICBib29sIHBhcnNlRXNjYXBlKEp1bXBMaXN0JiBmYWlsdXJlcywgY29uc3QgRXNjYXBl
Jik7CiAgICAgICAgIGJvb2wgcGFyc2VQYXJlbnRoZXNlcyhKdW1wTGlzdCYgZmFpbHVyZXMpOwog
ICAgICAgICBib29sIHBhcnNlQ2hhcmFjdGVyQ2xhc3MoSnVtcExpc3QmIGZhaWx1cmVzKTsKICAg
ICAgICAgYm9vbCBwYXJzZUNoYXJhY3RlckNsYXNzUXVhbnRpZmllcihKdW1wTGlzdCYgZmFpbHVy
ZXMsIGNvbnN0IENoYXJhY3RlckNsYXNzJiBjaGFyQ2xhc3MsIGJvb2wgaW52ZXJ0KTsKLSAgICAg
ICAgYm9vbCBwYXJzZVBhdHRlcm5DaGFyYWN0ZXJRdWFsaWZpZXIoSnVtcExpc3QmIGZhaWx1cmVz
LCBpbnQgY2gpOworICAgICAgICBib29sIHBhcnNlUGF0dGVybkNoYXJhY3RlclNlcXVlbmNlKEp1
bXBMaXN0JiBmYWlsdXJlcywgaW50IGNoKTsKICAgICAgICAgYm9vbCBwYXJzZUJhY2tyZWZlcmVu
Y2VRdWFudGlmaWVyKEp1bXBMaXN0JiBmYWlsdXJlcywgdW5zaWduZWQgc3VicGF0dGVybklkKTsK
LSAgICAgICAgQUxXQVlTX0lOTElORSBRdWFudGlmaWVyIHBhcnNlR3JlZWR5UXVhbnRpZmllcigp
OwotICAgICAgICBRdWFudGlmaWVyIHBhcnNlUXVhbnRpZmllcigpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdm9pZCByZXNldCgpCkBAIC0xNjUsOSArMTYzLDEzIEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV1JFQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG4gPSAw
OwogICAgICAgICAgICAgd2hpbGUgKG4gPCAzMiAmJiBXVEY6OmlzQVNDSUlPY3RhbERpZ2l0KHBl
ZWsoKSkpCi0gICAgICAgICAgICAgICAgbiA9IG4gKiA4ICsgKGNvbnN1bWUoKSAtICcwJyk7Cisg
ICAgICAgICAgICAgICAgbiA9IG4gKiA4ICsgY29uc3VtZURpZ2l0KCk7CiAgICAgICAgICAgICBy
ZXR1cm4gbjsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQUxXQVlTX0lOTElORSBRdWFu
dGlmaWVyIGNvbnN1bWVHcmVlZHlRdWFudGlmaWVyKCk7CisgICAgICAgIFF1YW50aWZpZXIgY29u
c3VtZVF1YW50aWZpZXIoKTsKKyAgICAgICAgRXNjYXBlIGNvbnN1bWVFc2NhcGUoYm9vbCBpbkNo
YXJhY3RlckNsYXNzKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgaW50IEVuZE9mUGF0dGVybiA9
IC0xOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25653</attachid>
            <date>2008-12-01 19:06:00 -0800</date>
            <delta_ts>2008-12-01 19:36:10 -0800</delta_ts>
            <desc>patch - updated after gavin&apos;s review</desc>
            <filename>patch-2char.txt</filename>
            <type>text/plain</type>
            <size>33837</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4ODg4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTMgQEAKKzIwMDgtMTIt
MDEgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEZpeGVkIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4My4KKworICAgICAgICBSZWZhY3RvcmVk
IHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXJzaW5nIHRvIHBhcnNlIHNlcXVlbmNlcyBvZiBjaGFyYWN0
ZXJzCisgICAgICAgIGFzIGEgc2luZ2xlIHVuaXQsIGluIHByZXBhcmF0aW9uIGZvciBvcHRpbWl6
aW5nIHNlcXVlbmNlcyBvZiBjaGFyYWN0ZXJzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3cmVjL0VzY2FwZXMuaDogQWRk
ZWQuIFNldCBvZiBjbGFzc2VzIGZvciByZXByZXNlbnRpbmcgYW4gZXNjYXBlZAorICAgICAgICB0
b2tlbiBpbiBhIHBhdHRlcm4uCisKKyAgICAgICAgKiB3cmVjL1F1YW50aWZpZXIuaDoKKyAgICAg
ICAgKEpTQzo6V1JFQzo6UXVhbnRpZmllcjo6UXVhbnRpZmllcik6IFNpbXBsaWZpZWQgdGhpcyBj
b25zdHJ1Y3RvciBzbGlnaHRseSwKKyAgICAgICAgdG8gbWF0Y2ggdGhlIG5ldyBFc2NhcGUgY29u
c3RydWN0b3IuCisKKyAgICAgICAgKiB3cmVjL1dSRUNHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpXUkVDOjpHZW5lcmF0b3I6OmdlbmVyYXRlUGF0dGVybkNoYXJhY3RlclNlcXVlbmNlKToK
KyAgICAgICAgKiB3cmVjL1dSRUNHZW5lcmF0b3IuaDogQWRkZWQgYW4gaW50ZXJmYWNlIGZvciBn
ZW5lcmF0aW5nIGEgc2VxdWVuY2UKKyAgICAgICAgb2YgY2hhcmFjdGVycyBpbiBhIHBhdHRlcm4g
YXQgYSB0aW1lLiBJdCBkb2Vzbid0IGRvIGFueXRoaW5nIHNwZWNpYWwgeWV0LgorCisgICAgICAg
ICogd3JlYy9XUkVDUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6V1JFQzo6UGFyc2VyOjpjb25z
dW1lR3JlZWR5UXVhbnRpZmllcik6CisgICAgICAgIChKU0M6OldSRUM6OlBhcnNlcjo6Y29uc3Vt
ZVF1YW50aWZpZXIpOiBSZW5hbWVkICJwYXJzZSIgdG8gImNvbnN1bWUiIGluCisgICAgICAgIHRo
ZXNlIGZ1bmN0aW9ucywgdG8gbWF0Y2ggImNvbnN1bWVFc2NhcGUuIgorCisgICAgICAgIChKU0M6
OldSRUM6OlBhcnNlcjo6cGFyc2VQYXR0ZXJuQ2hhcmFjdGVyU2VxdWVuY2UpOiBOZXcgZnVuY3Rp
b24gZm9yCisgICAgICAgIGl0ZXJhdGl2ZWx5IGFnZ3JlZ2F0aW5nIGEgc2VxdWVuY2Ugb2YgY2hh
cmFjdGVycyBpbiBhIHBhdHRlcm4uCisKKyAgICAgICAgKEpTQzo6V1JFQzo6UGFyc2VyOjpwYXJz
ZUNoYXJhY3RlckNsYXNzUXVhbnRpZmllcik6CisgICAgICAgIChKU0M6OldSRUM6OlBhcnNlcjo6
cGFyc2VCYWNrcmVmZXJlbmNlUXVhbnRpZmllcik6IFJlbmFtZWQgInBhcnNlIiB0bworICAgICAg
ICAiY29uc3VtZSIgaW4gdGhlc2UgZnVuY3Rpb25zLCB0byBtYXRjaCAiY29uc3VtZUVzY2FwZS4i
CisKKyAgICAgICAgKEpTQzo6V1JFQzo6UGFyc2VyOjpwYXJzZUNoYXJhY3RlckNsYXNzKTogUmVm
YWN0b3JlZCB0byB1c2UgdGhlIGNvbW1vbgorICAgICAgICBlc2NhcGUgcHJvY2Vzc2luZyBjb2Rl
IGluIGNvbnN1bWVFc2NhcGUuCisKKyAgICAgICAgKEpTQzo6V1JFQzo6UGFyc2VyOjpwYXJzZUVz
Y2FwZSk6IFJlZmFjdG9yZWQgdG8gdXNlIHRoZSBjb21tb24KKyAgICAgICAgZXNjYXBlIHByb2Nl
c3NpbmcgY29kZSBpbiBjb25zdW1lRXNjYXBlLgorCisgICAgICAgIChKU0M6OldSRUM6OlBhcnNl
cjo6Y29uc3VtZUVzY2FwZSk6IEZhY3RvcmVkIGVzY2FwZWQgdG9rZW4gcHJvY2Vzc2luZworICAg
ICAgICBpbnRvIGEgY29tbW9uIGZ1bmN0aW9uLCBzaW5jZSB3ZSB3ZXJlIGRvaW5nIHRoaXMgaW4g
YSBmZXcgcGxhY2VzLgorCisgICAgICAgIChKU0M6OldSRUM6OlBhcnNlcjo6cGFyc2VUZXJtKTog
UmVmYWN0b3JlZCB0byB1c2UgdGhlIGNvbW1vbgorICAgICAgICBlc2NhcGUgcHJvY2Vzc2luZyBj
b2RlIGluIGNvbnN1bWVFc2NhcGUuCisKKyAgICAgICAgKiB3cmVjL1dSRUNQYXJzZXIuaDoKKyAg
ICAgICAgKEpTQzo6V1JFQzo6UGFyc2VyOjpjb25zdW1lT2N0YWwpOiBSZWZhY3RvcmVkIHRvIHVz
ZSBhIGhlbHBlciBmdW5jdGlvbgorICAgICAgICBmb3IgcmVhZGluZyBhIGRpZ2l0LgorCiAyMDA4
LTEyLTAxICBDYW1lcm9uIFp3YXJpY2ggIDx6d2FyaWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMzg4ODgpCisrKyBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNiArMTQ0LDcgQEAKIAkJ
OTY5QTA3OTkwRUQxRDNBRTAwRjFGNjgxIC8qIEluc3RydWN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDc5MzBFRDFEM0FFMDBGMUY2ODEg
LyogSW5zdHJ1Y3Rpb24uaCAqLzsgfTsKIAkJOTY5QTA3OUEwRUQxRDNBRTAwRjFGNjgxIC8qIE9w
Y29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NjlBMDc5NDBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmNwcCAqLzsgfTsKIAkJOTY5QTA3OUIw
RUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTUwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTk2QTc0NjQx
MEVEREY3MDYwMDkwNDc3OSAvKiBFc2NhcGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NkE3NDYzRjBFRERGNzA2MDA5MDQ3NzkgLyogRXNjYXBlcy5o
ICovOyB9OwogCQlBNzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzI3MDA3ODBE
QUM2MDU2MDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgKi87IH07CiAJCUE3MjcwMUI5MERB
REU5NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzI3MDFCMzBEQURFOTQ5MDBFNTQ4RDcgLyogRXhj
ZXB0aW9uSGVscGVycy5oICovOyB9OwogCQlBNzI3RkY2QjBEQTMwOTIyMDBFNTQ4RDcgLyogSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNzI3RkY2NjBEQTMwNTNCMDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvci5jcHAgKi87IH07CkBAIC02MTQsNiArNjE1LDcgQEAKIAkJOTY5QTA3OTQwRUQxRDNB
RTAwRjFGNjgxIC8qIE9wY29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPcGNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NjlBMDc5NTBF
RDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE9wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NjlBMDkyMjBFRDFF
MDlDMDBGMUY2ODEgLyogQ29tcGxldGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDb21wbGV0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTZBNzQ2M0YwRURERjcwNjAwOTA0Nzc5IC8qIEVzY2FwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRXNjYXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NzI3MDA3NzBEQUM2MDU2MDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU05vdEFuT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE3MjcwMDc4MERBQzYwNTYwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTm90QW5PYmplY3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzI3MDFCMzBEQURFOTQ5MDBFNTQ4RDcgLyog
RXhjZXB0aW9uSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNl
cHRpb25IZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzE0LDYgKzEz
MTYsNyBAQAogCQkJCTE0MjlEQURFMEVEMjY0NUIwMEI4OTYxOSAvKiBXUkVDR2VuZXJhdG9yLmgg
Ki8sCiAJCQkJMTQyOURBQkUwRUQyNjNFNzAwQjg5NjE5IC8qIFdSRUNQYXJzZXIuY3BwICovLAog
CQkJCTE0MjlEQUJEMEVEMjYzRTcwMEI4OTYxOSAvKiBXUkVDUGFyc2VyLmggKi8sCisJCQkJOTZB
NzQ2M0YwRURERjcwNjAwOTA0Nzc5IC8qIEVzY2FwZXMuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0g
d3JlYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xNjE5LDYgKzE2MjIsNyBAQAog
CQkJCTE0MjlEQTgzMEVEMjQ4MjkwMEI4OTYxOSAvKiBXUkVDRnVuY3RvcnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0MjlEQUJGMEVEMjYzRTcwMEI4OTYxOSAvKiBXUkVDUGFyc2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDI5REFFMDBFRDI2NDVCMDBCODk2MTkgLyogV1JFQ0dlbmVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJOTZBNzQ2NDEwRURERjcwNjAwOTA0Nzc5IC8qIEVzY2FwZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2QzM2RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CkluZGV4OiB3cmVjL0VzY2FwZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3
cmVjL0VzY2FwZXMuaAkocmV2aXNpb24gMCkKKysrIHdyZWMvRXNjYXBlcy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEVzY2FwZXNfaAorI2RlZmluZSBFc2NhcGVzX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKFdSRUMpCisKKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdSRUMgeworCisgICAg
Y2xhc3MgQ2hhcmFjdGVyQ2xhc3M7CisKKyAgICBjbGFzcyBFc2NhcGUgeworICAgIHB1YmxpYzoK
KyAgICAgICAgZW51bSBUeXBlIHsKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICBQYXR0
ZXJuQ2hhcmFjdGVyLAorICAgICAgICAgICAgQ2hhcmFjdGVyQ2xhc3MsCisgICAgICAgICAgICBC
YWNrcmVmZXJlbmNlLAorICAgICAgICAgICAgV29yZEJvdW5kYXJ5QXNzZXJ0aW9uLAorICAgICAg
ICAgICAgRXJyb3IsCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBFc2NhcGUoVHlwZSB0
eXBlID0gTm9uZSkKKyAgICAgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgVHlwZSBtX3R5cGU7CisgICAgICAgIAorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgLy8gVXNlZCBieSBzdWJjbGFzc2VzIHRvIHN0b3JlIGRhdGEuCisgICAgICAg
IHVuaW9uIHsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgY29uc3QgV1JFQzo6Q2hh
cmFjdGVyQ2xhc3MqIGM7CisgICAgICAgIH0gbV93b3JkMTsKKyAgICAgICAgYm9vbCBtX2ludmVy
dDsKKyAgICB9OworCisgICAgY2xhc3MgUGF0dGVybkNoYXJhY3RlckVzY2FwZSA6IHB1YmxpYyBF
c2NhcGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGNvbnN0IFBhdHRlcm5DaGFyYWN0
ZXJFc2NhcGUmIGNhc3QoY29uc3QgRXNjYXBlJiBlc2NhcGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChlc2NhcGUudHlwZSgpID09IFBhdHRlcm5DaGFyYWN0ZXIpOworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFBhdHRlcm5DaGFyYWN0ZXJFc2NhcGUmPihlc2Nh
cGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBQYXR0ZXJuQ2hhcmFjdGVyRXNjYXBl
KGludCBjaGFyYWN0ZXIpCisgICAgICAgICAgICA6IEVzY2FwZShQYXR0ZXJuQ2hhcmFjdGVyKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX3dvcmQxLmkgPSBjaGFyYWN0ZXI7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIG9wZXJhdG9yIEVzY2FwZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlz
OyB9CisgICAgICAgIAorICAgICAgICBpbnQgY2hhcmFjdGVyKCkgY29uc3QgeyByZXR1cm4gbV93
b3JkMS5pOyB9CisgICAgfTsKKworICAgIGNsYXNzIENoYXJhY3RlckNsYXNzRXNjYXBlIDogcHVi
bGljIEVzY2FwZSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgY29uc3QgQ2hhcmFjdGVy
Q2xhc3NFc2NhcGUmIGNhc3QoY29uc3QgRXNjYXBlJiBlc2NhcGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVChlc2NhcGUudHlwZSgpID09IENoYXJhY3RlckNsYXNzKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDaGFyYWN0ZXJDbGFzc0VzY2FwZSY+KGVzY2Fw
ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENoYXJhY3RlckNsYXNzRXNjYXBlKGNv
bnN0IFdSRUM6OkNoYXJhY3RlckNsYXNzJiBjaGFyYWN0ZXJDbGFzcywgYm9vbCBpbnZlcnQpCisg
ICAgICAgICAgICA6IEVzY2FwZShDaGFyYWN0ZXJDbGFzcykKKyAgICAgICAgeworICAgICAgICAg
ICAgbV93b3JkMS5jID0gJmNoYXJhY3RlckNsYXNzOworICAgICAgICAgICAgbV9pbnZlcnQgPSBp
bnZlcnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9wZXJhdG9yIEVzY2FwZSgpIHsg
cmV0dXJuICp0aGlzOyB9CisgICAgICAgIAorICAgICAgICBjb25zdCBXUkVDOjpDaGFyYWN0ZXJD
bGFzcyYgY2hhcmFjdGVyQ2xhc3MoKSBjb25zdCB7IHJldHVybiAqbV93b3JkMS5jOyB9CisgICAg
ICAgIGJvb2wgaW52ZXJ0KCkgY29uc3QgeyByZXR1cm4gbV9pbnZlcnQ7IH0KKyAgICB9OworCisg
ICAgY2xhc3MgQmFja3JlZmVyZW5jZUVzY2FwZSA6IHB1YmxpYyBFc2NhcGUgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIGNvbnN0IEJhY2tyZWZlcmVuY2VFc2NhcGUmIGNhc3QoY29uc3Qg
RXNjYXBlJiBlc2NhcGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChlc2NhcGUudHlw
ZSgpID09IEJhY2tyZWZlcmVuY2UpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IEJhY2tyZWZlcmVuY2VFc2NhcGUmPihlc2NhcGUpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBCYWNrcmVmZXJlbmNlRXNjYXBlKGludCBzdWJwYXR0ZXJuSWQpCisgICAgICAgICAg
ICA6IEVzY2FwZShCYWNrcmVmZXJlbmNlKQorICAgICAgICB7CisgICAgICAgICAgICBtX3dvcmQx
LmkgPSBzdWJwYXR0ZXJuSWQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9wZXJhdG9y
IEVzY2FwZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgICAgIAorICAgICAgICBpbnQg
c3VicGF0dGVybklkKCkgY29uc3QgeyByZXR1cm4gbV93b3JkMS5pOyB9CisgICAgfTsKKworICAg
IGNsYXNzIFdvcmRCb3VuZGFyeUFzc2VydGlvbkVzY2FwZSA6IHB1YmxpYyBFc2NhcGUgeworICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGNvbnN0IFdvcmRCb3VuZGFyeUFzc2VydGlvbkVzY2Fw
ZSYgY2FzdChjb25zdCBFc2NhcGUmIGVzY2FwZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKGVzY2FwZS50eXBlKCkgPT0gV29yZEJvdW5kYXJ5QXNzZXJ0aW9uKTsKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXb3JkQm91bmRhcnlBc3NlcnRpb25Fc2NhcGUmPihl
c2NhcGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBXb3JkQm91bmRhcnlBc3NlcnRp
b25Fc2NhcGUoYm9vbCBpbnZlcnQpCisgICAgICAgICAgICA6IEVzY2FwZShXb3JkQm91bmRhcnlB
c3NlcnRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW52ZXJ0ID0gaW52ZXJ0OworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBvcGVyYXRvciBFc2NhcGUoKSBjb25zdCB7IHJldHVy
biAqdGhpczsgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBpbnZlcnQoKSBjb25zdCB7IHJldHVy
biBtX2ludmVydDsgfQorICAgIH07CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXUkVDCisKKyNl
bmRpZiAvLyBFTkFCTEUoV1JFQykKKworI2VuZGlmIC8vIEVzY2FwZXNfaApJbmRleDogd3JlYy9R
dWFudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gd3JlYy9RdWFudGlmaWVyLmgJKHJldmlzaW9uIDM4
ODg4KQorKysgd3JlYy9RdWFudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEyICs0Miw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV1JFQyB7CiAgICAgICAgICAgICBFcnJvciwK
ICAgICAgICAgfTsKIAotICAgICAgICBRdWFudGlmaWVyKCkKLSAgICAgICAgICAgIDogdHlwZShO
b25lKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBRdWFudGlmaWVyKFR5cGUgdHlw
ZSwgdW5zaWduZWQgbWluID0gMCwgdW5zaWduZWQgbWF4ID0gbm9NYXhTcGVjaWZpZWQpCisgICAg
ICAgIFF1YW50aWZpZXIoVHlwZSB0eXBlID0gTm9uZSwgdW5zaWduZWQgbWluID0gMCwgdW5zaWdu
ZWQgbWF4ID0gbm9NYXhTcGVjaWZpZWQpCiAgICAgICAgICAgICA6IHR5cGUodHlwZSkKICAgICAg
ICAgICAgICwgbWluKG1pbikKICAgICAgICAgICAgICwgbWF4KG1heCkKSW5kZXg6IHdyZWMvV1JF
Q0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd3JlYy9XUkVDR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gMzg4ODgpCisrKyB3cmVjL1dSRUNHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTAsNiArMjkwLDEyIEBAIHZvaWQgR2VuZXJhdG9yOjpnZW5lcmF0ZUdyZWVkeVF1YW50aWZp
ZXIKICAgICBuZXdGYWlsdXJlcy5saW5rVG8oYmFja3RyYWNrKTsKIH0KIAordm9pZCBHZW5lcmF0
b3I6OmdlbmVyYXRlUGF0dGVybkNoYXJhY3RlclNlcXVlbmNlKEp1bXBMaXN0JiBmYWlsdXJlcywg
aW50KiBzZXF1ZW5jZSwgc2l6ZV90IGNvdW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkKKyAgICAgICAgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyKGZhaWx1cmVz
LCBzZXF1ZW5jZVtpXSk7Cit9CisKIHZvaWQgR2VuZXJhdG9yOjpnZW5lcmF0ZVBhdHRlcm5DaGFy
YWN0ZXIoSnVtcExpc3QmIGZhaWx1cmVzLCBpbnQgY2gpCiB7CiAgICAgZ2VuZXJhdGVMb2FkQ2hh
cmFjdGVyKGZhaWx1cmVzKTsKSW5kZXg6IHdyZWMvV1JFQ0dlbmVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHdyZWMvV1JFQ0dlbmVyYXRvci5oCShyZXZpc2lvbiAzODg4OCkKKysrIHdyZWMvV1JFQ0dl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw2ICs4MSw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV1JFQyB7CiAgICAgICAgIHZvaWQgZ2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0lu
dmVydGVkKEp1bXBMaXN0JiBmYWlsdXJlcywgY29uc3QgQ2hhcmFjdGVyQ2xhc3MmIGNoYXJDbGFz
cyk7CiAgICAgICAgIHZvaWQgZ2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0ludmVydGVkUmFuZ2UoSnVt
cExpc3QmIGZhaWx1cmVzLCBKdW1wTGlzdCYgbWF0Y2hEZXN0LCBjb25zdCBDaGFyYWN0ZXJSYW5n
ZSogcmFuZ2VzLCB1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQqIG1hdGNoSW5kZXgsIGNvbnN0IFVD
aGFyKiBtYXRjaGVzLCB1bnNpZ25lZCBtYXRjaENvdW50KTsKICAgICAgICAgdm9pZCBnZW5lcmF0
ZVBhdHRlcm5DaGFyYWN0ZXIoSnVtcExpc3QmIGZhaWx1cmVzLCBpbnQgY2gpOworICAgICAgICB2
b2lkIGdlbmVyYXRlUGF0dGVybkNoYXJhY3RlclNlcXVlbmNlKEp1bXBMaXN0JiBmYWlsdXJlcywg
aW50KiBzZXF1ZW5jZSwgc2l6ZV90IGNvdW50KTsKICAgICAgICAgdm9pZCBnZW5lcmF0ZUFzc2Vy
dGlvbldvcmRCb3VuZGFyeShKdW1wTGlzdCYgZmFpbHVyZXMsIGJvb2wgaW52ZXJ0KTsKICAgICAg
ICAgdm9pZCBnZW5lcmF0ZUFzc2VydGlvbkJPTChKdW1wTGlzdCYgZmFpbHVyZXMpOwogICAgICAg
ICB2b2lkIGdlbmVyYXRlQXNzZXJ0aW9uRU9MKEp1bXBMaXN0JiBmYWlsdXJlcyk7CkluZGV4OiB3
cmVjL1dSRUNQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdyZWMvV1JFQ1BhcnNlci5jcHAJKHJl
dmlzaW9uIDM4ODg4KQorKysgd3JlYy9XUkVDUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNyArMzUsNyBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdSRUMgewogCi1BTFdBWVNfSU5MSU5FIFF1YW50aWZpZXIgUGFyc2VyOjpwYXJzZUdy
ZWVkeVF1YW50aWZpZXIoKQorQUxXQVlTX0lOTElORSBRdWFudGlmaWVyIFBhcnNlcjo6Y29uc3Vt
ZUdyZWVkeVF1YW50aWZpZXIoKQogewogICAgIHN3aXRjaCAocGVlaygpKSB7CiAgICAgICAgIGNh
c2UgJz8nOgpAQCAtMTEyLDkgKzExMiw5IEBAIEFMV0FZU19JTkxJTkUgUXVhbnRpZmllciBQYXJz
ZXI6OnBhcnNlR3IKICAgICB9CiB9CiAKLVF1YW50aWZpZXIgUGFyc2VyOjpwYXJzZVF1YW50aWZp
ZXIoKQorUXVhbnRpZmllciBQYXJzZXI6OmNvbnN1bWVRdWFudGlmaWVyKCkKIHsKLSAgICBRdWFu
dGlmaWVyIHEgPSBwYXJzZUdyZWVkeVF1YW50aWZpZXIoKTsKKyAgICBRdWFudGlmaWVyIHEgPSBj
b25zdW1lR3JlZWR5UXVhbnRpZmllcigpOwogICAgIAogICAgIGlmICgocS50eXBlID09IFF1YW50
aWZpZXI6OkdyZWVkeSkgJiYgKHBlZWsoKSA9PSAnPycpKSB7CiAgICAgICAgIGNvbnN1bWUoKTsK
QEAgLTEyNCwzOCArMTI0LDkxIEBAIFF1YW50aWZpZXIgUGFyc2VyOjpwYXJzZVF1YW50aWZpZXIo
KQogICAgIHJldHVybiBxOwogfQogCi1ib29sIFBhcnNlcjo6cGFyc2VQYXR0ZXJuQ2hhcmFjdGVy
UXVhbGlmaWVyKEp1bXBMaXN0JiBmYWlsdXJlcywgaW50IGNoKQorYm9vbCBQYXJzZXI6OnBhcnNl
UGF0dGVybkNoYXJhY3RlclNlcXVlbmNlKEp1bXBMaXN0JiBmYWlsdXJlcywgaW50IGNoKQogewot
ICAgIFF1YW50aWZpZXIgcSA9IHBhcnNlUXVhbnRpZmllcigpOworICAgIFZlY3RvcjxpbnQsIDg+
IHNlcXVlbmNlOworICAgIHNlcXVlbmNlLmFwcGVuZChjaCk7CisgICAgUXVhbnRpZmllciBxdWFu
dGlmaWVyOworICAgIEVzY2FwZSBlc2NhcGU7CisKKyAgICBib29sIGRvbmUgPSBmYWxzZTsKKyAg
ICB3aGlsZSAoIWRvbmUpIHsKKyAgICAgICAgc3dpdGNoIChwZWVrKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgRW5kT2ZQYXR0ZXJuOgorICAgICAgICAgICAgY2FzZSAnXic6CisgICAgICAgICAgICBj
YXNlICckJzoKKyAgICAgICAgICAgIGNhc2UgJy4nOgorICAgICAgICAgICAgY2FzZSAnKCc6Cisg
ICAgICAgICAgICBjYXNlICcpJzoKKyAgICAgICAgICAgIGNhc2UgJ1snOgorICAgICAgICAgICAg
Y2FzZSAnXSc6CisgICAgICAgICAgICBjYXNlICd9JzoKKyAgICAgICAgICAgIGNhc2UgJ3wnOiB7
CisgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlICcqJzogCisgICAgICAgICAgICBjYXNl
ICcrJzogCisgICAgICAgICAgICBjYXNlICc/JzogCisgICAgICAgICAgICBjYXNlICd7Jzogewor
ICAgICAgICAgICAgICAgIHF1YW50aWZpZXIgPSBjb25zdW1lUXVhbnRpZmllcigpOworICAgICAg
ICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2FzZSAnXFwnOiB7CisgICAgICAgICAgICAgICAgY29uc3Vt
ZSgpOworICAgICAgICAgICAgICAgIGVzY2FwZSA9IGNvbnN1bWVFc2NhcGUoZmFsc2UpOworICAg
ICAgICAgICAgICAgIGlmIChlc2NhcGUudHlwZSgpID09IEVzY2FwZTo6UGF0dGVybkNoYXJhY3Rl
cikgeworICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZS5hcHBlbmQoUGF0dGVybkNoYXJhY3Rl
ckVzY2FwZTo6Y2FzdChlc2NhcGUpLmNoYXJhY3RlcigpKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgfQogCi0gICAgc3dpdGNoIChxLnR5cGUpIHsKLSAg
ICBjYXNlIFF1YW50aWZpZXI6Ok5vbmU6IHsKLSAgICAgICAgbV9nZW5lcmF0b3IuZ2VuZXJhdGVQ
YXR0ZXJuQ2hhcmFjdGVyKGZhaWx1cmVzLCBjaCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIC8vIEFueXRoaW5n
IGVsc2UgaXMgYSBQYXR0ZXJuQ2hhcmFjdGVyLgorICAgICAgICAgICAgICAgIHNlcXVlbmNlLmFw
cGVuZChjb25zdW1lKCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CiAgICAgfQogCi0gICAgY2FzZSBRdWFudGlmaWVyOjpHcmVlZHk6IHsKLSAg
ICAgICAgR2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyRnVuY3RvciBmdW5jdG9yKGNoKTsKLSAgICAg
ICAgbV9nZW5lcmF0b3IuZ2VuZXJhdGVHcmVlZHlRdWFudGlmaWVyKGZhaWx1cmVzLCBmdW5jdG9y
LCBxLm1pbiwgcS5tYXgpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgLy8gR2VuZXJhdGUg
dGhlIGNoYXJhY3RlciBzZXF1ZW5jZS4gSWYgdGhlIGxhc3QgY2hhcmFjdGVyIHdhcyBxdWFudGlm
aWVkLAorICAgIC8vIGl0IG5lZWRzIHRvIGJlIHBhcnNlZCBzZXBhcmF0ZWx5LCBpbiB0aGUgY29u
dGV4dCBvZiBpdHMgcXVhbnRpZmllci4KKyAgICBzaXplX3QgY291bnQgPSBxdWFudGlmaWVyLnR5
cGUgPT0gUXVhbnRpZmllcjo6Tm9uZSA/IHNlcXVlbmNlLnNpemUoKSA6IHNlcXVlbmNlLnNpemUo
KSAtIDE7CisgICAgbV9nZW5lcmF0b3IuZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyU2VxdWVuY2Uo
ZmFpbHVyZXMsIHNlcXVlbmNlLmJlZ2luKCksIGNvdW50KTsKIAotICAgIGNhc2UgUXVhbnRpZmll
cjo6Tm9uR3JlZWR5OiB7Ci0gICAgICAgIEdlbmVyYXRlUGF0dGVybkNoYXJhY3RlckZ1bmN0b3Ig
ZnVuY3RvcihjaCk7Ci0gICAgICAgIG1fZ2VuZXJhdG9yLmdlbmVyYXRlTm9uR3JlZWR5UXVhbnRp
ZmllcihmYWlsdXJlcywgZnVuY3RvciwgcS5taW4sIHEubWF4KTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgc3dpdGNoIChxdWFudGlmaWVyLnR5cGUpIHsKKyAgICAgICAgY2FzZSBRdWFudGlmaWVyOjpO
b25lOiB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFF1YW50
aWZpZXI6OkVycm9yOiB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBRdWFudGlmaWVyOjpHcmVlZHk6IHsKKyAgICAgICAgICAgIEdlbmVyYXRlUGF0
dGVybkNoYXJhY3RlckZ1bmN0b3IgZnVuY3RvcihzZXF1ZW5jZS5sYXN0KCkpOworICAgICAgICAg
ICAgbV9nZW5lcmF0b3IuZ2VuZXJhdGVHcmVlZHlRdWFudGlmaWVyKGZhaWx1cmVzLCBmdW5jdG9y
LCBxdWFudGlmaWVyLm1pbiwgcXVhbnRpZmllci5tYXgpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBRdWFudGlmaWVyOjpOb25HcmVlZHk6IHsKKyAg
ICAgICAgICAgIEdlbmVyYXRlUGF0dGVybkNoYXJhY3RlckZ1bmN0b3IgZnVuY3RvcihzZXF1ZW5j
ZS5sYXN0KCkpOworICAgICAgICAgICAgbV9nZW5lcmF0b3IuZ2VuZXJhdGVOb25HcmVlZHlRdWFu
dGlmaWVyKGZhaWx1cmVzLCBmdW5jdG9yLCBxdWFudGlmaWVyLm1pbiwgcXVhbnRpZmllci5tYXgp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBjYXNl
IFF1YW50aWZpZXI6OkVycm9yOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAor
ICAgIC8vIElmIHRoZSBsYXN0IHRva2VuIHdhcyBub3QgYSBxdWFudGlmaWVyLCBpdCBtaWdodCBo
YXZlIGJlZW4gYSBub24tY2hhcmFjdGVyCisgICAgLy8gZXNjYXBlLiBXZSBuZWVkIHRvIHBhcnNl
IGl0IG5vdywgc2luY2Ugd2UndmUgY29uc3VtZWQgaXQuCisgICAgaWYgKGVzY2FwZS50eXBlKCkg
IT0gRXNjYXBlOjpOb25lICYmIGVzY2FwZS50eXBlKCkgIT0gRXNjYXBlOjpQYXR0ZXJuQ2hhcmFj
dGVyKQorICAgICAgICByZXR1cm4gcGFyc2VFc2NhcGUoZmFpbHVyZXMsIGVzY2FwZSk7CisKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBQYXJzZXI6OnBhcnNlQ2hhcmFjdGVyQ2xhc3NRdWFu
dGlmaWVyKEp1bXBMaXN0JiBmYWlsdXJlcywgY29uc3QgQ2hhcmFjdGVyQ2xhc3MmIGNoYXJDbGFz
cywgYm9vbCBpbnZlcnQpCiB7Ci0gICAgUXVhbnRpZmllciBxID0gcGFyc2VRdWFudGlmaWVyKCk7
CisgICAgUXVhbnRpZmllciBxID0gY29uc3VtZVF1YW50aWZpZXIoKTsKIAogICAgIHN3aXRjaCAo
cS50eXBlKSB7CiAgICAgY2FzZSBRdWFudGlmaWVyOjpOb25lOiB7CkBAIC0xODQsNyArMjM3LDcg
QEAgYm9vbCBQYXJzZXI6OnBhcnNlQ2hhcmFjdGVyQ2xhc3NRdWFudGlmaQogCiBib29sIFBhcnNl
cjo6cGFyc2VCYWNrcmVmZXJlbmNlUXVhbnRpZmllcihKdW1wTGlzdCYgZmFpbHVyZXMsIHVuc2ln
bmVkIHN1YnBhdHRlcm5JZCkKIHsKLSAgICBRdWFudGlmaWVyIHEgPSBwYXJzZVF1YW50aWZpZXIo
KTsKKyAgICBRdWFudGlmaWVyIHEgPSBjb25zdW1lUXVhbnRpZmllcigpOwogCiAgICAgc3dpdGNo
IChxLnR5cGUpIHsKICAgICBjYXNlIFF1YW50aWZpZXI6Ok5vbmU6IHsKQEAgLTIyMSw3ICsyNzQs
NyBAQCBib29sIFBhcnNlcjo6cGFyc2VDaGFyYWN0ZXJDbGFzcyhKdW1wTGlzCiAgICAgICAgIGlu
dmVydCA9IHRydWU7CiAgICAgfQogCi0gICAgQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3RvciBjaGFy
Q2xhc3NDb25zdHJ1Y3RvcihtX2lnbm9yZUNhc2UpOworICAgIENoYXJhY3RlckNsYXNzQ29uc3Ry
dWN0b3IgY29uc3RydWN0b3IobV9pZ25vcmVDYXNlKTsKIAogICAgIFVDaGFyIGNoOwogICAgIHdo
aWxlICgoY2ggPSBwZWVrKCkpICE9ICddJykgewpAQCAtMjI5LDE3NyArMjgyLDEyOSBAQCBib29s
IFBhcnNlcjo6cGFyc2VDaGFyYWN0ZXJDbGFzcyhKdW1wTGlzCiAgICAgICAgIGNhc2UgRW5kT2ZQ
YXR0ZXJuOgogICAgICAgICAgICAgbV9lcnJvciA9IE1hbGZvcm1lZENoYXJhY3RlckNsYXNzOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgJ1xc
JzoKLSAgICAgICAgICAgIGNvbnN1bWUoKTsKLSAgICAgICAgICAgIHN3aXRjaCAoY2ggPSBwZWVr
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgRW5kT2ZQYXR0ZXJuOgotICAgICAgICAgICAgICAgIG1f
ZXJyb3IgPSBNYWxmb3JtZWRFc2NhcGU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgY2FzZSAnMCc6Ci0gICAgICAgICAgICBjYXNlICcxJzoKLSAgICAgICAgICAg
IGNhc2UgJzInOgotICAgICAgICAgICAgY2FzZSAnMyc6Ci0gICAgICAgICAgICBjYXNlICc0JzoK
LSAgICAgICAgICAgIGNhc2UgJzUnOgotICAgICAgICAgICAgY2FzZSAnNic6Ci0gICAgICAgICAg
ICBjYXNlICc3JzoKLSAgICAgICAgICAgICAgICBjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5wdXQoY29u
c3VtZU9jdGFsKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAvLyBD
b250cm9sRXNjYXBlCi0gICAgICAgICAgICBjYXNlICdiJzoKLSAgICAgICAgICAgICAgICBjb25z
dW1lKCk7Ci0gICAgICAgICAgICAgICAgY2hhckNsYXNzQ29uc3RydWN0b3IucHV0KCdcYicpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnZic6Ci0gICAgICAgICAg
ICAgICAgY29uc3VtZSgpOwotICAgICAgICAgICAgICAgIGNoYXJDbGFzc0NvbnN0cnVjdG9yLnB1
dCgnXGYnKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ24nOgot
ICAgICAgICAgICAgICAgIGNvbnN1bWUoKTsKLSAgICAgICAgICAgICAgICBjaGFyQ2xhc3NDb25z
dHJ1Y3Rvci5wdXQoJ1xuJyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlICdyJzoKLSAgICAgICAgICAgICAgICBjb25zdW1lKCk7Ci0gICAgICAgICAgICAgICAgY2hh
ckNsYXNzQ29uc3RydWN0b3IucHV0KCdccicpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSAndCc6Ci0gICAgICAgICAgICAgICAgY29uc3VtZSgpOwotICAgICAgICAg
ICAgICAgIGNoYXJDbGFzc0NvbnN0cnVjdG9yLnB1dCgnXHQnKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3YnOgotICAgICAgICAgICAgICAgIGNvbnN1bWUoKTsK
LSAgICAgICAgICAgICAgICBjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5wdXQoJ1x2Jyk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1xcJzogeworICAgICAgICAgICAgY29uc3Vt
ZSgpOworICAgICAgICAgICAgRXNjYXBlIGVzY2FwZSA9IGNvbnN1bWVFc2NhcGUodHJ1ZSk7CiAK
LSAgICAgICAgICAgIC8vIENvbnRyb2xMZXR0ZXIKLSAgICAgICAgICAgIGNhc2UgJ2MnOiB7Ci0g
ICAgICAgICAgICAgICAgY29uc3VtZSgpOwotICAgICAgICAgICAgICAgIGludCBjb250cm9sID0g
Y29uc3VtZSgpOwotICAgICAgICAgICAgICAgIGlmICghaXNBU0NJSUFscGhhKGNvbnRyb2wpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1fZXJyb3IgPSBNYWxmb3JtZWRFc2NhcGU7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHN3aXRjaCAoZXNjYXBlLnR5
cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRXNjYXBlOjpQYXR0ZXJuQ2hhcmFjdGVyOiB7
CisgICAgICAgICAgICAgICAgICAgIGludCBjaGFyYWN0ZXIgPSBQYXR0ZXJuQ2hhcmFjdGVyRXNj
YXBlOjpjYXN0KGVzY2FwZSkuY2hhcmFjdGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChj
aGFyYWN0ZXIgPT0gJy0nKQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IuZmx1
c2hCZWZvcmVFc2NhcGVkSHlwaGVuKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9y
LnB1dChjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgY2hhckNsYXNzQ29uc3RydWN0b3IucHV0KGNvbnRyb2wm
MzEpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBIZXhFc2NhcGUKLSAgICAgICAgICAgIGNhc2UgJ3gnOiB7Ci0gICAgICAgICAgICAgICAg
Y29uc3VtZSgpOwotICAgICAgICAgICAgICAgIGludCB4ID0gY29uc3VtZUhleCgyKTsKLSAgICAg
ICAgICAgICAgICBpZiAoeCA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBtX2Vycm9yID0g
TWFsZm9ybWVkRXNjYXBlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgY2FzZSBFc2NhcGU6OkNoYXJhY3RlckNsYXNzOiB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IENoYXJhY3RlckNsYXNzRXNjYXBlJiBjaGFyYWN0ZXJDbGFzc0VzY2FwZSA9
IENoYXJhY3RlckNsYXNzRXNjYXBlOjpjYXN0KGVzY2FwZSk7CisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghY2hhcmFjdGVyQ2xhc3NFc2NhcGUuaW52ZXJ0KCkpOworICAgICAgICAgICAgICAg
ICAgICBjb25zdHJ1Y3Rvci5hcHBlbmQoY2hhcmFjdGVyQ2xhc3NFc2NhcGUuY2hhcmFjdGVyQ2xh
c3MoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5wdXQoeCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFVuaWNvZGVFc2NhcGUK
LSAgICAgICAgICAgIGNhc2UgJ3UnOiB7Ci0gICAgICAgICAgICAgICAgY29uc3VtZSgpOwotICAg
ICAgICAgICAgICAgIGludCB4ID0gY29uc3VtZUhleCg0KTsKLSAgICAgICAgICAgICAgICBpZiAo
eCA9PSAtMSkgeworICAgICAgICAgICAgICAgIGNhc2UgRXNjYXBlOjpFcnJvcjogewogICAgICAg
ICAgICAgICAgICAgICBtX2Vycm9yID0gTWFsZm9ybWVkRXNjYXBlOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNo
YXJDbGFzc0NvbnN0cnVjdG9yLnB1dCh4KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2hhcmFjdGVyQ2xhc3NFc2Nh
cGUKLSAgICAgICAgICAgIGNhc2UgJ2QnOgotICAgICAgICAgICAgICAgIGNvbnN1bWUoKTsKLSAg
ICAgICAgICAgICAgICBjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5hcHBlbmQoQ2hhcmFjdGVyQ2xhc3M6
OmRpZ2l0cygpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3Mn
OgotICAgICAgICAgICAgICAgIGNvbnN1bWUoKTsKLSAgICAgICAgICAgICAgICBjaGFyQ2xhc3ND
b25zdHJ1Y3Rvci5hcHBlbmQoQ2hhcmFjdGVyQ2xhc3M6OnNwYWNlcygpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3cnOgotICAgICAgICAgICAgICAgIGNvbnN1
bWUoKTsKLSAgICAgICAgICAgICAgICBjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5hcHBlbmQoQ2hhcmFj
dGVyQ2xhc3M6OndvcmRjaGFyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSAnRCc6Ci0gICAgICAgICAgICAgICAgY29uc3VtZSgpOwotICAgICAgICAgICAgICAg
IGNoYXJDbGFzc0NvbnN0cnVjdG9yLmFwcGVuZChDaGFyYWN0ZXJDbGFzczo6bm9uZGlnaXRzKCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnUyc6Ci0gICAgICAg
ICAgICAgICAgY29uc3VtZSgpOwotICAgICAgICAgICAgICAgIGNoYXJDbGFzc0NvbnN0cnVjdG9y
LmFwcGVuZChDaGFyYWN0ZXJDbGFzczo6bm9uc3BhY2VzKCkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSAnVyc6Ci0gICAgICAgICAgICAgICAgY29uc3VtZSgpOwot
ICAgICAgICAgICAgICAgIGNoYXJDbGFzc0NvbnN0cnVjdG9yLmFwcGVuZChDaGFyYWN0ZXJDbGFz
czo6bm9ud29yZGNoYXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IGNhc2UgJy0nOgotICAgICAgICAgICAgICAgIGNvbnN1bWUoKTsKLSAgICAgICAgICAgICAgICBj
aGFyQ2xhc3NDb25zdHJ1Y3Rvci5mbHVzaEJlZm9yZUVzY2FwZWRIeXBoZW4oKTsKLSAgICAgICAg
ICAgICAgICBjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5wdXQoY2gpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgICAvLyBJZGVudGl0eUVzY2FwZQotICAgICAgICAgICAgZGVmYXVs
dDogewotICAgICAgICAgICAgICAgIC8vIFRPRE86IGNoZWNrIHRoaXMgdGVzdCBmb3IgSWRlbnRp
ZmllclBhcnQuCi0gICAgICAgICAgICAgICAgaW50IGNoID0gY29uc3VtZSgpOwotICAgICAgICAg
ICAgICAgIGlmIChpc0FTQ0lJQWxwaGFudW1lcmljKGNoKSB8fCAoY2ggPT0gJ18nKSkgewotICAg
ICAgICAgICAgICAgICAgICBtX2Vycm9yID0gTWFsZm9ybWVkRXNjYXBlOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgY2FzZSBFc2NhcGU6Ok5vbmU6
CisgICAgICAgICAgICAgICAgY2FzZSBFc2NhcGU6OkJhY2tyZWZlcmVuY2U6CisgICAgICAgICAg
ICAgICAgY2FzZSBFc2NhcGU6OldvcmRCb3VuZGFyeUFzc2VydGlvbjogeworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNoYXJDbGFzc0NvbnN0cnVjdG9y
LnB1dChjaCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAorICAgICAgICB9CisKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGNvbnN1bWUoKTsKLSAgICAgICAgICAgIGNoYXJD
bGFzc0NvbnN0cnVjdG9yLnB1dChjaCk7CisgICAgICAgICAgICBjb25zdHJ1Y3Rvci5wdXQoY2gp
OwogICAgICAgICB9CiAgICAgfQogICAgIGNvbnN1bWUoKTsKIAogICAgIC8vIGxhemlseSBjYXRj
aCByZXZlcnNlZCByYW5nZXMgKFt6LWFdKWluIGNoYXJhY3RlciBjbGFzc2VzCi0gICAgaWYgKGNo
YXJDbGFzc0NvbnN0cnVjdG9yLmlzVXBzaWRlRG93bigpKSB7CisgICAgaWYgKGNvbnN0cnVjdG9y
LmlzVXBzaWRlRG93bigpKSB7CiAgICAgICAgIG1fZXJyb3IgPSBNYWxmb3JtZWRDaGFyYWN0ZXJD
bGFzczsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGNoYXJDbGFzc0NvbnN0
cnVjdG9yLmZsdXNoKCk7Ci0gICAgQ2hhcmFjdGVyQ2xhc3MgY2hhckNsYXNzID0gY2hhckNsYXNz
Q29uc3RydWN0b3IuY2hhckNsYXNzKCk7CisgICAgY29uc3RydWN0b3IuZmx1c2goKTsKKyAgICBD
aGFyYWN0ZXJDbGFzcyBjaGFyQ2xhc3MgPSBjb25zdHJ1Y3Rvci5jaGFyQ2xhc3MoKTsKICAgICBy
ZXR1cm4gcGFyc2VDaGFyYWN0ZXJDbGFzc1F1YW50aWZpZXIoZmFpbHVyZXMsIGNoYXJDbGFzcywg
aW52ZXJ0KTsKIH0KIAotYm9vbCBQYXJzZXI6OnBhcnNlT2N0YWxFc2NhcGUoSnVtcExpc3QmIGZh
aWx1cmVzKQorYm9vbCBQYXJzZXI6OnBhcnNlRXNjYXBlKEp1bXBMaXN0JiBmYWlsdXJlcywgY29u
c3QgRXNjYXBlJiBlc2NhcGUpCiB7Ci0gICAgcmV0dXJuIHBhcnNlUGF0dGVybkNoYXJhY3RlclF1
YWxpZmllcihmYWlsdXJlcywgY29uc3VtZU9jdGFsKCkpOworICAgIHN3aXRjaCAoZXNjYXBlLnR5
cGUoKSkgeworICAgICAgICBjYXNlIEVzY2FwZTo6UGF0dGVybkNoYXJhY3RlcjogeworICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlUGF0dGVybkNoYXJhY3RlclNlcXVlbmNlKGZhaWx1cmVzLCBQYXR0
ZXJuQ2hhcmFjdGVyRXNjYXBlOjpjYXN0KGVzY2FwZSkuY2hhcmFjdGVyKCkpOworICAgICAgICB9
CisgICAgICAgIGNhc2UgRXNjYXBlOjpDaGFyYWN0ZXJDbGFzczogeworICAgICAgICAgICAgcmV0
dXJuIHBhcnNlQ2hhcmFjdGVyQ2xhc3NRdWFudGlmaWVyKGZhaWx1cmVzLCBDaGFyYWN0ZXJDbGFz
c0VzY2FwZTo6Y2FzdChlc2NhcGUpLmNoYXJhY3RlckNsYXNzKCksIENoYXJhY3RlckNsYXNzRXNj
YXBlOjpjYXN0KGVzY2FwZSkuaW52ZXJ0KCkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgRXNj
YXBlOjpCYWNrcmVmZXJlbmNlOiB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VCYWNrcmVmZXJl
bmNlUXVhbnRpZmllcihmYWlsdXJlcywgQmFja3JlZmVyZW5jZUVzY2FwZTo6Y2FzdChlc2NhcGUp
LnN1YnBhdHRlcm5JZCgpKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVzY2FwZTo6V29yZEJv
dW5kYXJ5QXNzZXJ0aW9uOiB7CisgICAgICAgICAgICBtX2dlbmVyYXRvci5nZW5lcmF0ZUFzc2Vy
dGlvbldvcmRCb3VuZGFyeShmYWlsdXJlcywgV29yZEJvdW5kYXJ5QXNzZXJ0aW9uRXNjYXBlOjpj
YXN0KGVzY2FwZSkuaW52ZXJ0KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBFc2NhcGU6OkVycm9yOiB7CisgICAgICAgICAgICBtX2Vycm9yID0g
TWFsZm9ybWVkRXNjYXBlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgRXNjYXBlOjpOb25lOiB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIFBhcnNlcjo6cGFyc2VFc2NhcGUoSnVtcExpc3QmIGZhaWx1
cmVzKQorRXNjYXBlIFBhcnNlcjo6Y29uc3VtZUVzY2FwZShib29sIGluQ2hhcmFjdGVyQ2xhc3Mp
CiB7CiAgICAgc3dpdGNoIChwZWVrKCkpIHsKICAgICBjYXNlIEVuZE9mUGF0dGVybjoKLSAgICAg
ICAgbV9lcnJvciA9IE1hbGZvcm1lZEVzY2FwZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gRXNjYXBlKEVzY2FwZTo6RXJyb3IpOwogCiAgICAgLy8gQXNzZXJ0aW9ucwog
ICAgIGNhc2UgJ2InOgogICAgICAgICBjb25zdW1lKCk7Ci0gICAgICAgIG1fZ2VuZXJhdG9yLmdl
bmVyYXRlQXNzZXJ0aW9uV29yZEJvdW5kYXJ5KGZhaWx1cmVzLCBmYWxzZSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotCisgICAgICAgIGlmIChpbkNoYXJhY3RlckNsYXNzKQorICAgICAgICAgICAg
cmV0dXJuIFBhdHRlcm5DaGFyYWN0ZXJFc2NhcGUoJ1xiJyk7CisgICAgICAgIHJldHVybiBXb3Jk
Qm91bmRhcnlBc3NlcnRpb25Fc2NhcGUoZmFsc2UpOyAvLyBkbyBub3QgaW52ZXJ0CiAgICAgY2Fz
ZSAnQic6CiAgICAgICAgIGNvbnN1bWUoKTsKLSAgICAgICAgbV9nZW5lcmF0b3IuZ2VuZXJhdGVB
c3NlcnRpb25Xb3JkQm91bmRhcnkoZmFpbHVyZXMsIHRydWUpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKGluQ2hhcmFjdGVyQ2xhc3MpCisgICAgICAgICAgICByZXR1cm4gRXNj
YXBlKEVzY2FwZTo6RXJyb3IpOworICAgICAgICByZXR1cm4gV29yZEJvdW5kYXJ5QXNzZXJ0aW9u
RXNjYXBlKHRydWUpOyAvLyBpbnZlcnQKIAotICAgIC8vIE9jdGFsIGVzY2FwZQotICAgIGNhc2Ug
JzAnOgorICAgIC8vIENoYXJhY3RlckNsYXNzRXNjYXBlCisgICAgY2FzZSAnZCc6CisgICAgICAg
IGNvbnN1bWUoKTsKKyAgICAgICAgcmV0dXJuIENoYXJhY3RlckNsYXNzRXNjYXBlKENoYXJhY3Rl
ckNsYXNzOjpkaWdpdHMoKSwgZmFsc2UpOworICAgIGNhc2UgJ3MnOgorICAgICAgICBjb25zdW1l
KCk7CisgICAgICAgIHJldHVybiBDaGFyYWN0ZXJDbGFzc0VzY2FwZShDaGFyYWN0ZXJDbGFzczo6
c3BhY2VzKCksIGZhbHNlKTsKKyAgICBjYXNlICd3JzoKKyAgICAgICAgY29uc3VtZSgpOworICAg
ICAgICByZXR1cm4gQ2hhcmFjdGVyQ2xhc3NFc2NhcGUoQ2hhcmFjdGVyQ2xhc3M6OndvcmRjaGFy
KCksIGZhbHNlKTsKKyAgICBjYXNlICdEJzoKKyAgICAgICAgY29uc3VtZSgpOworICAgICAgICBy
ZXR1cm4gaW5DaGFyYWN0ZXJDbGFzcworICAgICAgICAgICAgPyBDaGFyYWN0ZXJDbGFzc0VzY2Fw
ZShDaGFyYWN0ZXJDbGFzczo6bm9uZGlnaXRzKCksIGZhbHNlKQorICAgICAgICAgICAgOiBDaGFy
YWN0ZXJDbGFzc0VzY2FwZShDaGFyYWN0ZXJDbGFzczo6ZGlnaXRzKCksIHRydWUpOworICAgIGNh
c2UgJ1MnOgorICAgICAgICBjb25zdW1lKCk7CisgICAgICAgIHJldHVybiBpbkNoYXJhY3RlckNs
YXNzCisgICAgICAgICAgICA/IENoYXJhY3RlckNsYXNzRXNjYXBlKENoYXJhY3RlckNsYXNzOjpu
b25zcGFjZXMoKSwgZmFsc2UpCisgICAgICAgICAgICA6IENoYXJhY3RlckNsYXNzRXNjYXBlKENo
YXJhY3RlckNsYXNzOjpzcGFjZXMoKSwgdHJ1ZSk7CisgICAgY2FzZSAnVyc6CiAgICAgICAgIGNv
bnN1bWUoKTsKLSAgICAgICAgcmV0dXJuIHBhcnNlT2N0YWxFc2NhcGUoZmFpbHVyZXMpOworICAg
ICAgICByZXR1cm4gaW5DaGFyYWN0ZXJDbGFzcworICAgICAgICAgICAgPyBDaGFyYWN0ZXJDbGFz
c0VzY2FwZShDaGFyYWN0ZXJDbGFzczo6bm9ud29yZGNoYXIoKSwgZmFsc2UpCisgICAgICAgICAg
ICA6IENoYXJhY3RlckNsYXNzRXNjYXBlKENoYXJhY3RlckNsYXNzOjp3b3JkY2hhcigpLCB0cnVl
KTsKIAogICAgIC8vIERlY2ltYWxFc2NhcGUKICAgICBjYXNlICcxJzoKQEAgLTQwOCwxMTQgKzQx
Myw4MyBAQCBib29sIFBhcnNlcjo6cGFyc2VFc2NhcGUoSnVtcExpc3QmIGZhaWx1CiAgICAgY2Fz
ZSAnNCc6CiAgICAgY2FzZSAnNSc6CiAgICAgY2FzZSAnNic6Ci0gICAgY2FzZSAnNyc6IHsKLSAg
ICAgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3Qgc3VwcG9ydCBmb3J3YXJkIHJlZmVyZW5jZXMu
IEl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgdGhleQotICAgICAgICAvLyBzaG91bGQgYmUgdmFsaWQu
Ci0gICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcGVla0RpZ2l0KCk7Ci0gICAgICAgIGlmICh2YWx1
ZSA+IG1fbnVtU3VicGF0dGVybnMpCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VPY3RhbEVzY2Fw
ZShmYWlsdXJlcyk7Ci0gICAgfQorICAgIGNhc2UgJzcnOgogICAgIGNhc2UgJzgnOgogICAgIGNh
c2UgJzknOiB7Ci0gICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcGVla0RpZ2l0KCk7Ci0gICAgICAg
IGlmICh2YWx1ZSA+IG1fbnVtU3VicGF0dGVybnMpIHsKLSAgICAgICAgICAgIGNvbnN1bWUoKTsK
LSAgICAgICAgICAgIG1fZXJyb3IgPSBNYWxmb3JtZWRFc2NhcGU7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChwZWVrRGlnaXQoKSA+IG1fbnVtU3VicGF0dGVybnMgfHwg
aW5DaGFyYWN0ZXJDbGFzcykgeworICAgICAgICAgICAgLy8gVG8gbWF0Y2ggRmlyZWZveCwgd2Ug
cGFyc2UgYW4gaW52YWxpZCBiYWNrcmVmZXJlbmNlIGluIHRoZSByYW5nZSBbMS03XQorICAgICAg
ICAgICAgLy8gYXMgYW4gb2N0YWwgZXNjYXBlLgorICAgICAgICAgICAgcmV0dXJuIHBlZWtEaWdp
dCgpID4gNyA/IEVzY2FwZShFc2NhcGU6OkVycm9yKSA6IFBhdHRlcm5DaGFyYWN0ZXJFc2NhcGUo
Y29uc3VtZU9jdGFsKCkpOwogICAgICAgICB9Ci0gICAgICAgIGNvbnN1bWUoKTsKIAotICAgICAg
ICB3aGlsZSAocGVla0lzRGlnaXQoKSkgeworICAgICAgICBpbnQgdmFsdWUgPSAwOworICAgICAg
ICBkbyB7CiAgICAgICAgICAgICB1bnNpZ25lZCBuZXdWYWx1ZSA9IHZhbHVlICogMTAgKyBwZWVr
RGlnaXQoKTsKICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA+IG1fbnVtU3VicGF0dGVybnMpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB2YWx1ZSA9IG5ld1ZhbHVlOwogICAg
ICAgICAgICAgY29uc3VtZSgpOwotICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKHBlZWtJc0Rp
Z2l0KCkpOwogCi0gICAgICAgIHBhcnNlQmFja3JlZmVyZW5jZVF1YW50aWZpZXIoZmFpbHVyZXMs
IHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBCYWNrcmVmZXJl
bmNlRXNjYXBlKHZhbHVlKTsKICAgICB9Ci0gICAgCisKKyAgICAvLyBPY3RhbCBlc2NhcGUKKyAg
ICBjYXNlICcwJzoKKyAgICAgICAgY29uc3VtZSgpOworICAgICAgICByZXR1cm4gUGF0dGVybkNo
YXJhY3RlckVzY2FwZShjb25zdW1lT2N0YWwoKSk7CisKICAgICAvLyBDb250cm9sRXNjYXBlCiAg
ICAgY2FzZSAnZic6CiAgICAgICAgIGNvbnN1bWUoKTsKLSAgICAgICAgcmV0dXJuIHBhcnNlUGF0
dGVybkNoYXJhY3RlclF1YWxpZmllcihmYWlsdXJlcywgJ1xmJyk7CisgICAgICAgIHJldHVybiBQ
YXR0ZXJuQ2hhcmFjdGVyRXNjYXBlKCdcZicpOwogICAgIGNhc2UgJ24nOgogICAgICAgICBjb25z
dW1lKCk7Ci0gICAgICAgIHJldHVybiBwYXJzZVBhdHRlcm5DaGFyYWN0ZXJRdWFsaWZpZXIoZmFp
bHVyZXMsICdcbicpOworICAgICAgICByZXR1cm4gUGF0dGVybkNoYXJhY3RlckVzY2FwZSgnXG4n
KTsKICAgICBjYXNlICdyJzoKICAgICAgICAgY29uc3VtZSgpOwotICAgICAgICByZXR1cm4gcGFy
c2VQYXR0ZXJuQ2hhcmFjdGVyUXVhbGlmaWVyKGZhaWx1cmVzLCAnXHInKTsKKyAgICAgICAgcmV0
dXJuIFBhdHRlcm5DaGFyYWN0ZXJFc2NhcGUoJ1xyJyk7CiAgICAgY2FzZSAndCc6CiAgICAgICAg
IGNvbnN1bWUoKTsKLSAgICAgICAgcmV0dXJuIHBhcnNlUGF0dGVybkNoYXJhY3RlclF1YWxpZmll
cihmYWlsdXJlcywgJ1x0Jyk7CisgICAgICAgIHJldHVybiBQYXR0ZXJuQ2hhcmFjdGVyRXNjYXBl
KCdcdCcpOwogICAgIGNhc2UgJ3YnOgogICAgICAgICBjb25zdW1lKCk7Ci0gICAgICAgIHJldHVy
biBwYXJzZVBhdHRlcm5DaGFyYWN0ZXJRdWFsaWZpZXIoZmFpbHVyZXMsICdcdicpOworICAgICAg
ICByZXR1cm4gUGF0dGVybkNoYXJhY3RlckVzY2FwZSgnXHYnKTsKIAogICAgIC8vIENvbnRyb2xM
ZXR0ZXIKICAgICBjYXNlICdjJzogewogICAgICAgICBjb25zdW1lKCk7CiAgICAgICAgIGludCBj
b250cm9sID0gY29uc3VtZSgpOwotICAgICAgICBpZiAoIWlzQVNDSUlBbHBoYShjb250cm9sKSkg
ewotICAgICAgICAgICAgbV9lcnJvciA9IE1hbGZvcm1lZEVzY2FwZTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcGFyc2VQYXR0ZXJuQ2hhcmFj
dGVyUXVhbGlmaWVyKGZhaWx1cmVzLCBjb250cm9sJjMxKTsKKyAgICAgICAgaWYgKCFpc0FTQ0lJ
QWxwaGEoY29udHJvbCkpCisgICAgICAgICAgICByZXR1cm4gRXNjYXBlKEVzY2FwZTo6RXJyb3Ip
OworICAgICAgICByZXR1cm4gUGF0dGVybkNoYXJhY3RlckVzY2FwZShjb250cm9sICYgMzEpOwog
ICAgIH0KIAogICAgIC8vIEhleEVzY2FwZQogICAgIGNhc2UgJ3gnOiB7CiAgICAgICAgIGNvbnN1
bWUoKTsKICAgICAgICAgaW50IHggPSBjb25zdW1lSGV4KDIpOwotICAgICAgICBpZiAoeCA9PSAt
MSkgewotICAgICAgICAgICAgbV9lcnJvciA9IE1hbGZvcm1lZEVzY2FwZTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcGFyc2VQYXR0ZXJuQ2hh
cmFjdGVyUXVhbGlmaWVyKGZhaWx1cmVzLCB4KTsKKyAgICAgICAgaWYgKHggPT0gLTEpCisgICAg
ICAgICAgICByZXR1cm4gRXNjYXBlKEVzY2FwZTo6RXJyb3IpOworICAgICAgICByZXR1cm4gUGF0
dGVybkNoYXJhY3RlckVzY2FwZSh4KTsKICAgICB9CiAKICAgICAvLyBVbmljb2RlRXNjYXBlCiAg
ICAgY2FzZSAndSc6IHsKICAgICAgICAgY29uc3VtZSgpOwogICAgICAgICBpbnQgeCA9IGNvbnN1
bWVIZXgoNCk7Ci0gICAgICAgIGlmICh4ID09IC0xKSB7Ci0gICAgICAgICAgICBtX2Vycm9yID0g
TWFsZm9ybWVkRXNjYXBlOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBwYXJzZVBhdHRlcm5DaGFyYWN0ZXJRdWFsaWZpZXIoZmFpbHVyZXMsIHgp
OworICAgICAgICBpZiAoeCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBFc2NhcGUoRXNjYXBl
OjpFcnJvcik7CisgICAgICAgIHJldHVybiBQYXR0ZXJuQ2hhcmFjdGVyRXNjYXBlKHgpOwogICAg
IH0KIAotICAgIC8vIENoYXJhY3RlckNsYXNzRXNjYXBlCi0gICAgY2FzZSAnZCc6Ci0gICAgICAg
IGNvbnN1bWUoKTsKLSAgICAgICAgcmV0dXJuIHBhcnNlQ2hhcmFjdGVyQ2xhc3NRdWFudGlmaWVy
KGZhaWx1cmVzLCBDaGFyYWN0ZXJDbGFzczo6ZGlnaXRzKCksIGZhbHNlKTsKLSAgICBjYXNlICdz
JzoKLSAgICAgICAgY29uc3VtZSgpOwotICAgICAgICByZXR1cm4gcGFyc2VDaGFyYWN0ZXJDbGFz
c1F1YW50aWZpZXIoZmFpbHVyZXMsIENoYXJhY3RlckNsYXNzOjpzcGFjZXMoKSwgZmFsc2UpOwot
ICAgIGNhc2UgJ3cnOgotICAgICAgICBjb25zdW1lKCk7Ci0gICAgICAgIHJldHVybiBwYXJzZUNo
YXJhY3RlckNsYXNzUXVhbnRpZmllcihmYWlsdXJlcywgQ2hhcmFjdGVyQ2xhc3M6OndvcmRjaGFy
KCksIGZhbHNlKTsKLSAgICBjYXNlICdEJzoKLSAgICAgICAgY29uc3VtZSgpOwotICAgICAgICBy
ZXR1cm4gcGFyc2VDaGFyYWN0ZXJDbGFzc1F1YW50aWZpZXIoZmFpbHVyZXMsIENoYXJhY3RlckNs
YXNzOjpkaWdpdHMoKSwgdHJ1ZSk7Ci0gICAgY2FzZSAnUyc6Ci0gICAgICAgIGNvbnN1bWUoKTsK
LSAgICAgICAgcmV0dXJuIHBhcnNlQ2hhcmFjdGVyQ2xhc3NRdWFudGlmaWVyKGZhaWx1cmVzLCBD
aGFyYWN0ZXJDbGFzczo6c3BhY2VzKCksIHRydWUpOwotICAgIGNhc2UgJ1cnOgotICAgICAgICBj
b25zdW1lKCk7Ci0gICAgICAgIHJldHVybiBwYXJzZUNoYXJhY3RlckNsYXNzUXVhbnRpZmllcihm
YWlsdXJlcywgQ2hhcmFjdGVyQ2xhc3M6OndvcmRjaGFyKCksIHRydWUpOwotCiAgICAgLy8gSWRl
bnRpdHlFc2NhcGUKICAgICBkZWZhdWx0OiB7CiAgICAgICAgIC8vIFRPRE86IGNoZWNrIHRoaXMg
dGVzdCBmb3IgSWRlbnRpZmllclBhcnQuCiAgICAgICAgIGludCBjaCA9IGNvbnN1bWUoKTsKLSAg
ICAgICAgaWYgKGlzQVNDSUlBbHBoYW51bWVyaWMoY2gpIHx8IChjaCA9PSAnXycpKSB7Ci0gICAg
ICAgICAgICBtX2Vycm9yID0gTWFsZm9ybWVkRXNjYXBlOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwYXJzZVBhdHRlcm5DaGFyYWN0ZXJRdWFs
aWZpZXIoZmFpbHVyZXMsIGNoKTsKKyAgICAgICAgaWYgKGlzQVNDSUlBbHBoYW51bWVyaWMoY2gp
IHx8IChjaCA9PSAnXycpKQorICAgICAgICAgICAgcmV0dXJuIEVzY2FwZShFc2NhcGU6OkVycm9y
KTsKKyAgICAgICAgcmV0dXJuIFBhdHRlcm5DaGFyYWN0ZXJFc2NhcGUoY2gpOwogICAgIH0KICAg
ICB9CiB9CkBAIC01MzIsNyArNTA2LDYgQEAgYm9vbCBQYXJzZXI6OnBhcnNlVGVybShKdW1wTGlz
dCYgZmFpbHVyZQogICAgIGNhc2UgJ3snOgogICAgIGNhc2UgJ30nOgogICAgIGNhc2UgJ3wnOgot
ICAgICAgICAvLyBOb3QgYWxsb3dlZCBpbiBhIFRlcm0hCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCiAgICAgY2FzZSAnXic6CkBAIC01NDYsMTYgKzUxOSwxNCBAQCBib29sIFBhcnNl
cjo6cGFyc2VUZXJtKEp1bXBMaXN0JiBmYWlsdXJlCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgY2FzZSAnXFwnOgotICAgICAgICAvLyBiICYgQiBhcmUgYWxzbyBhc3NlcnRpb25zLi4uCiAg
ICAgICAgIGNvbnN1bWUoKTsKLSAgICAgICAgcmV0dXJuIHBhcnNlRXNjYXBlKGZhaWx1cmVzKTsK
KyAgICAgICAgcmV0dXJuIHBhcnNlRXNjYXBlKGZhaWx1cmVzLCBjb25zdW1lRXNjYXBlKGZhbHNl
KSk7CiAKICAgICBjYXNlICcuJzoKICAgICAgICAgY29uc3VtZSgpOwogICAgICAgICByZXR1cm4g
cGFyc2VDaGFyYWN0ZXJDbGFzc1F1YW50aWZpZXIoZmFpbHVyZXMsIENoYXJhY3RlckNsYXNzOjpu
ZXdsaW5lKCksIHRydWUpOwogCiAgICAgY2FzZSAnWyc6Ci0gICAgICAgIC8vIENoYXJhY3RlckNs
YXNzCiAgICAgICAgIGNvbnN1bWUoKTsKICAgICAgICAgcmV0dXJuIHBhcnNlQ2hhcmFjdGVyQ2xh
c3MoZmFpbHVyZXMpOwogCkBAIC01NjQsOCArNTM1LDggQEAgYm9vbCBQYXJzZXI6OnBhcnNlVGVy
bShKdW1wTGlzdCYgZmFpbHVyZQogICAgICAgICByZXR1cm4gcGFyc2VQYXJlbnRoZXNlcyhmYWls
dXJlcyk7CiAKICAgICBkZWZhdWx0OgotICAgICAgICAvLyBBbnl0aGluZyBlbHNlIGlzIGEgUGF0
dGVybkNoYXJhY3RlcgotICAgICAgICByZXR1cm4gcGFyc2VQYXR0ZXJuQ2hhcmFjdGVyUXVhbGlm
aWVyKGZhaWx1cmVzLCBjb25zdW1lKCkpOworICAgICAgICAvLyBBbnl0aGluZyBlbHNlIGlzIGEg
UGF0dGVybkNoYXJhY3Rlci4KKyAgICAgICAgcmV0dXJuIHBhcnNlUGF0dGVybkNoYXJhY3RlclNl
cXVlbmNlKGZhaWx1cmVzLCBjb25zdW1lKCkpOwogICAgIH0KIH0KIApJbmRleDogd3JlYy9XUkVD
UGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gd3JlYy9XUkVDUGFyc2VyLmgJKHJldmlzaW9uIDM4ODg4
KQorKysgd3JlYy9XUkVDUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAK
IAogI2lmIEVOQUJMRShXUkVDKQogCisjaW5jbHVkZSAiRXNjYXBlcy5oIgogI2luY2x1ZGUgIlF1
YW50aWZpZXIuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCiAjaW5jbHVkZSAiV1JFQ0dlbmVyYXRv
ci5oIgpAQCAtOTEsMTUgKzkyLDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV1JFQyB7
CiAKICAgICAgICAgdm9pZCBwYXJzZURpc2p1bmN0aW9uKEp1bXBMaXN0JiBmYWlsdXJlcyk7CiAg
ICAgICAgIGJvb2wgcGFyc2VUZXJtKEp1bXBMaXN0JiBmYWlsdXJlcyk7Ci0gICAgICAgIGJvb2wg
cGFyc2VFc2NhcGUoSnVtcExpc3QmIGZhaWx1cmVzKTsKLSAgICAgICAgYm9vbCBwYXJzZU9jdGFs
RXNjYXBlKEp1bXBMaXN0JiBmYWlsdXJlcyk7CisgICAgICAgIGJvb2wgcGFyc2VFc2NhcGUoSnVt
cExpc3QmIGZhaWx1cmVzLCBjb25zdCBFc2NhcGUmKTsKICAgICAgICAgYm9vbCBwYXJzZVBhcmVu
dGhlc2VzKEp1bXBMaXN0JiBmYWlsdXJlcyk7CiAgICAgICAgIGJvb2wgcGFyc2VDaGFyYWN0ZXJD
bGFzcyhKdW1wTGlzdCYgZmFpbHVyZXMpOwogICAgICAgICBib29sIHBhcnNlQ2hhcmFjdGVyQ2xh
c3NRdWFudGlmaWVyKEp1bXBMaXN0JiBmYWlsdXJlcywgY29uc3QgQ2hhcmFjdGVyQ2xhc3MmIGNo
YXJDbGFzcywgYm9vbCBpbnZlcnQpOwotICAgICAgICBib29sIHBhcnNlUGF0dGVybkNoYXJhY3Rl
clF1YWxpZmllcihKdW1wTGlzdCYgZmFpbHVyZXMsIGludCBjaCk7CisgICAgICAgIGJvb2wgcGFy
c2VQYXR0ZXJuQ2hhcmFjdGVyU2VxdWVuY2UoSnVtcExpc3QmIGZhaWx1cmVzLCBpbnQgY2gpOwog
ICAgICAgICBib29sIHBhcnNlQmFja3JlZmVyZW5jZVF1YW50aWZpZXIoSnVtcExpc3QmIGZhaWx1
cmVzLCB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIFF1YW50
aWZpZXIgcGFyc2VHcmVlZHlRdWFudGlmaWVyKCk7Ci0gICAgICAgIFF1YW50aWZpZXIgcGFyc2VR
dWFudGlmaWVyKCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHJlc2V0KCkKQEAgLTE2
NSw5ICsxNjMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXUkVDIHsKICAgICAgICAg
ewogICAgICAgICAgICAgdW5zaWduZWQgbiA9IDA7CiAgICAgICAgICAgICB3aGlsZSAobiA8IDMy
ICYmIFdURjo6aXNBU0NJSU9jdGFsRGlnaXQocGVlaygpKSkKLSAgICAgICAgICAgICAgICBuID0g
biAqIDggKyAoY29uc3VtZSgpIC0gJzAnKTsKKyAgICAgICAgICAgICAgICBuID0gbiAqIDggKyBj
b25zdW1lRGlnaXQoKTsKICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBBTFdBWVNfSU5MSU5FIFF1YW50aWZpZXIgY29uc3VtZUdyZWVkeVF1YW50aWZp
ZXIoKTsKKyAgICAgICAgUXVhbnRpZmllciBjb25zdW1lUXVhbnRpZmllcigpOworICAgICAgICBF
c2NhcGUgY29uc3VtZUVzY2FwZShib29sIGluQ2hhcmFjdGVyQ2xhc3MpOwogCiAgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgRW5kT2ZQYXR0ZXJuID0gLTE7CiAK
</data>
<flag name="review"
          id="11963"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>