<?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>32496</bug_id>
          
          <creation_ts>2009-12-13 14:18:18 -0800</creation_ts>
          <short_desc>Switch remaining cases of string construction to use StringBuilder.</short_desc>
          <delta_ts>2009-12-28 23:38:42 -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>PC</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="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>171237</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-12-13 14:18:18 -0800</bug_when>
    <thetext>Builds strings using a vector rather than using string append / addition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171243</commentid>
    <comment_count>1</comment_count>
      <attachid>44765</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-12-13 14:26:15 -0800</bug_when>
    <thetext>Created attachment 44765
The patch

~0% performance impact (possible slight, slight progression)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171244</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-13 14:31:22 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44765 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171247</commentid>
    <comment_count>3</comment_count>
      <attachid>44765</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-12-13 14:44:35 -0800</bug_when>
    <thetext>Comment on attachment 44765
The patch

&gt; Index: JavaScriptCore/runtime/StringBuilder.h
&gt; ===================================================================
&gt; --- JavaScriptCore/runtime/StringBuilder.h	(revision 0)
&gt; +++ JavaScriptCore/runtime/StringBuilder.h	(revision 0)
&gt; @@ -0,0 +1,64 @@
&gt; +/*

...

&gt; +    }
&gt; +};
&gt; +
&gt; +};

This ; is not necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175450</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-28 23:38:42 -0800</bug_when>
    <thetext>Looks like this was landed as r52075.  Closing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44765</attachid>
            <date>2009-12-13 14:26:15 -0800</date>
            <delta_ts>2009-12-13 14:44:35 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>patch.stringbuilder.txt</filename>
            <type>text/plain</type>
            <size>29187</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUyMDY4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMDktMTItMTMgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMjQ5NgorICAgICAgICBTd2l0Y2ggcmVtYWluaW5nIGNhc2VzIG9mIHN0cmlu
ZyBjb25zdHJ1Y3Rpb24gdG8gdXNlIFN0cmluZ0J1aWxkZXIuCisgICAgICAgIEJ1aWxkcyBzdHJp
bmdzIHVzaW5nIGEgdmVjdG9yIHJhdGhlciB0aGFuIHVzaW5nIHN0cmluZyBhcHBlbmQgLyBhZGRp
dGlvbi4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJ1bnRpbWUvRXhl
Y3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1TdHJp
bmcpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdEZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6
ZGVjb2RlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0VzY2FwZSk6CisgICAgICAgIChKU0M6
Omdsb2JhbEZ1bmNVbmVzY2FwZSk6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OnN0cmluZ2lmeSk6CisgICAgICAgIChKU0M6OlN0
cmluZ2lmaWVyOjppbmRlbnQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAg
ICAgKiBydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpMaXRlcmFsUGFy
c2VyOjpMZXhlcjo6bGV4U3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OmludGVnZXJQYXJ0Tm9FeHApOgorICAgICAgICAoSlNDOjpu
dW1iZXJQcm90b0Z1bmNUb0ZpeGVkKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9Q
cmVjaXNpb24pOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAoSlND
Ojpqc1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAg
ICAgICAoSlNDOjpzdWJzdGl0dXRlQmFja3JlZmVyZW5jZXNTbG93KToKKyAgICAgICAgKEpTQzo6
c3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
Q29uY2F0KToKKwogMjAwOS0xMi0wOCAgSmVyZW15IE1vc2tvdmljaCAgPGplcmVteUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiA1MjAyOCkKKysrIEphdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDggKzIzOCw2IEBAIF9fWk4z
SlNDN1VTdHJpbmc0ZnJvbUVkCiBfX1pOM0pTQzdVU3RyaW5nNGZyb21FaQogX19aTjNKU0M3VVN0
cmluZzRmcm9tRWoKIF9fWk4zSlNDN1VTdHJpbmc0ZnJvbUVsCi1fX1pOM0pTQzdVU3RyaW5nNmFw
cGVuZEVQS2MKLV9fWk4zSlNDN1VTdHJpbmc2YXBwZW5kRVJLUzBfCiBfX1pOM0pTQzdVU3RyaW5n
QzFFUEtjCiBfX1pOM0pTQzdVU3RyaW5nQzFFUEt0aQogX19aTjNKU0M3VVN0cmluZ2FTRVBLYwpJ
bmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA1MjAyOCkKKysrIEphdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTIwNCw2ICsyMDQsNyBAQAogCQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NjNCMjNERjBGQzYwRTYyMDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY5MDgz
MTUwRTY1MThENzAwMEQzNkVEIC8qIFdSRUMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODY5MDgzMTMwRTY1MThENzAwMEQzNkVEIC8qIFdSRUMuY3Bw
ICovOyB9OwogCQk4NjkwODMxNjBFNjUxOEQ3MDAwRDM2RUQgLyogV1JFQy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY5MDgzMTQwRTY1MThENzAwMEQz
NkVEIC8qIFdSRUMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk4Njk4Qjg2OTEwRDQ0RDk0MDBEOEQwMUIgLyogU3RyaW5nQnVpbGRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY5OEI4NjgxMEQ0NEQ5
NDAwRDhEMDFCIC8qIFN0cmluZ0J1aWxkZXIuaCAqLzsgfTsKIAkJODY5RUJDQjcwRThDNkQ0QTAw
ODcyMkNDIC8qIFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg2OUVCQ0I2MEU4QzZENEEwMDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZBOTBFRDAw
RUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRobWV0aWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZBOTBFQ0YwRUU3RDUxRjAwQUIzNTBEIC8qIEpJ
VEFyaXRobWV0aWMuY3BwICovOyB9OwogCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJN
djdBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2QUREMTQzMEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oICovOyB9OwpA
QCAtNzI4LDYgKzcyOSw3IEBACiAJCTg2M0IyM0RGMEZDNjBFNjIwMDcwM0FBNCAvKiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2OTA4MzEz
MEU2NTE4RDcwMDBEMzZFRCAvKiBXUkVDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdSRUMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjkwODMx
NDBFNjUxOEQ3MDAwRDM2RUQgLyogV1JFQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXUkVDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2OThCODY4MTBENDRE
OTQwMEQ4RDAxQiAvKiBTdHJpbmdCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0cmluZ0J1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY5
RUJDQjYwRThDNkQ0QTAwODcyMkNDIC8qIFJlc3VsdFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVzdWx0VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NkE5MEVDRjBFRTdENTFGMDBBQjM1MEQgLyogSklUQXJpdGhtZXRpYy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRBcml0aG1ldGljLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZBREQxNDMwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNz
ZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFSTXY3QXNzZW1ibGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjA0LDYgKzE2MDYsNyBAQAogCQkJ
CTE0MjBCRTdBMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggKi8sCiAJCQkJQTdDMjIx
NjgxMEM3NDVFMDAwRjk3OTEzIC8qIEpTWm9tYmllLmggKi8sCiAJCQkJQTdDMjIxNkIxMEM3NDY5
QzAwRjk3OTEzIC8qIEpTWm9tYmllLmNwcCAqLywKKwkJCQk4Njk4Qjg2ODEwRDQ0RDk0MDBEOEQw
MUIgLyogU3RyaW5nQnVpbGRlci5oICovLAogCQkJKTsKIAkJCXBhdGggPSBydW50aW1lOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTIwMTQsNiArMjAxNyw3IEBACiAJCQkJMTQ4Q0Qx
RDgxMDhDRjkwMjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0QTE1NjMyMTA5NjYzNjUwMDZGQTI2MCAvKiBEYXRlSW5zdGFuY2VDYWNoZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQyMEJFN0IxMEFBNkREQjAwRjQ1NUQyIC8qIFdlYWtSYW5kb20u
aCBpbiBIZWFkZXJzICovLAorCQkJCTg2OThCODY5MTBENDREOTQwMEQ4RDAxQiAvKiBTdHJpbmdC
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmNwcAkocmV2aXNpb24gNTIwMjgpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiUGFyc2VyLmgiCisjaW5jbHVk
ZSAiU3RyaW5nQnVpbGRlci5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgogCiBuYW1lc3BhY2UgSlND
IHsKQEAgLTI2NSwxNCArMjY2LDEzIEBAIFBhc3NSZWZQdHI8RnVuY3Rpb25FeGVjdXRhYmxlPiBG
dW5jdGlvbkUKIFVTdHJpbmcgRnVuY3Rpb25FeGVjdXRhYmxlOjpwYXJhbVN0cmluZygpIGNvbnN0
CiB7CiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzID0gKm1fcGFyYW1ldGVyczsK
LSAgICBVU3RyaW5nIHMoIiIpOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBmb3Ig
KHNpemVfdCBwb3MgPSAwOyBwb3MgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytwb3MpIHsKLSAgICAg
ICAgaWYgKCFzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHMgKz0gIiwgIjsKLSAgICAgICAgcyAr
PSBwYXJhbWV0ZXJzW3Bvc10udXN0cmluZygpOworICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0
eSgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgIik7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKHBhcmFtZXRlcnNbcG9zXS51c3RyaW5nKCkpOwogICAgIH0KLQotICAgIHJldHVybiBz
OworICAgIHJldHVybiBidWlsZGVyLnJlbGVhc2UoKTsKIH0KIAogfTsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTIw
MjgpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMSwxNCArMjEsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCiAKKyNpbmNsdWRlICJEZWJ1Z2dlci5oIgog
I2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgog
I2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKLSNpbmNs
dWRlICJQYXJzZXIuaCIKLSNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkxleGVyLmgi
CiAjaW5jbHVkZSAiTm9kZXMuaCIKKyNpbmNsdWRlICJQYXJzZXIuaCIKKyNpbmNsdWRlICJTdHJp
bmdCdWlsZGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC03NiwxMiArNzcsMTkgQEAgSlNP
YmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZQogICAgIGlmIChhcmdzLmlzRW1w
dHkoKSkKICAgICAgICAgcHJvZ3JhbSA9ICIoZnVuY3Rpb24oKSB7IFxufSkiOwogICAgIGVsc2Ug
aWYgKGFyZ3Muc2l6ZSgpID09IDEpCi0gICAgICAgIHByb2dyYW0gPSAiKGZ1bmN0aW9uKCkgeyAi
ICsgYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSArICJcbn0pIjsKKyAgICAgICAgcHJvZ3JhbSA9
IG1ha2VTdHJpbmcoIihmdW5jdGlvbigpIHsgIiwgYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwg
IlxufSkiKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHJvZ3JhbSA9ICIoZnVuY3Rpb24oIiArIGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwg
YXJncy5zaXplKCkgLSAxOyBpKyspCi0gICAgICAgICAgICBwcm9ncmFtICs9ICIsIiArIGFyZ3Mu
YXQoaSkudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgIHByb2dyYW0gKz0gIikgeyAiICsgYXJncy5h
dChhcmdzLnNpemUoKSAtIDEpLnRvU3RyaW5nKGV4ZWMpICsgIlxufSkiOworICAgICAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIoZnVuY3Rpb24oIik7
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGFyZ3Muc2l6ZSgpIC0gMTsgaSsrKSB7CisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCIpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
YXJncy5hdChpKS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIH0KKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoIikgeyAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoYXJncy5hdChhcmdzLnNpemUo
KSAtIDEpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIlxufSkiKTsK
KyAgICAgICAgcHJvZ3JhbSA9IGJ1aWxkZXIucmVsZWFzZSgpOwogICAgIH0KIAogICAgIGludCBl
cnJMaW5lOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDUyMDI4KQorKysgSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE0
ICsyNywxNSBAQAogCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiR2xvYmFsRXZh
bEZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0dsb2Jh
bE9iamVjdC5oIgotI2luY2x1ZGUgIkxpdGVyYWxQYXJzZXIuaCIKICNpbmNsdWRlICJKU1N0cmlu
Zy5oIgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiUGFyc2VyLmgiCi0jaW5j
bHVkZSAiZHRvYS5oIgogI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiTGl0ZXJhbFBhcnNl
ci5oIgogI2luY2x1ZGUgIk5vZGVzLmgiCisjaW5jbHVkZSAiUGFyc2VyLmgiCisjaW5jbHVkZSAi
U3RyaW5nQnVpbGRlci5oIgorI2luY2x1ZGUgImR0b2EuaCIKICNpbmNsdWRlIDxzdGRpby5oPgog
I2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtNTUsMjQgKzU2LDI0
IEBAIHN0YXRpYyBKU1ZhbHVlIGVuY29kZShFeGVjU3RhdGUqIGV4ZWMsIGMKICAgICBpZiAoIWNz
dHIuY19zdHIoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVVJJRXJyb3IsICJT
dHJpbmcgY29udGFpbmVkIGFuIGlsbGVnYWwgVVRGLTE2IHNlcXVlbmNlLiIpOwogCi0gICAgVVN0
cmluZyByZXN1bHQgPSAiIjsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgY29uc3Qg
Y2hhciogcCA9IGNzdHIuY19zdHIoKTsKICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGNzdHIu
c2l6ZSgpOyBrKyssIHArKykgewogICAgICAgICBjaGFyIGMgPSAqcDsKICAgICAgICAgaWYgKGMg
JiYgc3RyY2hyKGRvTm90RXNjYXBlLCBjKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYyk7
CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChjKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBjaGFyIHRtcFs0XTsKLSAgICAgICAgICAgIHNwcmludGYodG1wLCAiJSUlMDJYIiwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYykpOwotICAgICAgICAgICAgcmVzdWx0ICs9IHRtcDsK
KyAgICAgICAgICAgIHNucHJpbnRmKHRtcCwgNCwgIiUlJTAyWCIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KGMpKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKChjb25zdCBjaGFyKil0
bXApOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBqc1N0cmluZyhleGVjLCByZXN1bHQp
OworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBidWlsZGVyLnJlbGVhc2UoKSk7CiB9CiAKIHN0
YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Ms
IGNvbnN0IGNoYXIqIGRvTm90VW5lc2NhcGUsIGJvb2wgc3RyaWN0KQogewotICAgIFVTdHJpbmcg
cmVzdWx0ID0gIiI7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIFVTdHJpbmcgc3Ry
ID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKICAgICBpbnQgayA9IDA7CiAgICAgaW50IGxl
biA9IHN0ci5zaXplKCk7CkBAIC0xMDYsNyArMTA3LDcgQEAgc3RhdGljIEpTVmFsdWUgZGVjb2Rl
KEV4ZWNTdGF0ZSogZXhlYywgYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJMZW4g
PSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyID49IDB4MTAw
MDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRvIHN1cnJvZ2F0
ZSBwYWlyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RhdGlj
X2Nhc3Q8VUNoYXI+KDB4RDgwMCB8ICgoY2hhcmFjdGVyIC0gMHgxMDAwMCkgPj4gMTApKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNo
YXI+KDB4RDgwMCB8ICgoY2hhcmFjdGVyIC0gMHgxMDAwMCkgPj4gMTApKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdSA9IHN0YXRpY19jYXN0PFVDaGFyPigweERDMDAgfCAoKGNoYXJh
Y3RlciAtIDB4MTAwMDApICYgMHgzRkYpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBzdGF0aWNfY2FzdDxVQ2hhcj4oY2hh
cmFjdGVyKTsKQEAgLTEzMSw5ICsxMzIsOSBAQCBzdGF0aWMgSlNWYWx1ZSBkZWNvZGUoRXhlY1N0
YXRlKiBleGVjLCBjCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaysrOwotICAg
ICAgICByZXN1bHQuYXBwZW5kKGMpOworICAgICAgICBidWlsZGVyLmFwcGVuZChjKTsKICAgICB9
Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHJlc3VsdCk7CisgICAgcmV0dXJuIGpzU3RyaW5n
KGV4ZWMsIGJ1aWxkZXIucmVsZWFzZSgpKTsKIH0KIAogYm9vbCBpc1N0cldoaXRlU3BhY2UoVUNo
YXIgYykKQEAgLTM3Niw3ICszNzcsNyBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVu
Y0VzY2FwZShFCiAgICAgICAgICIwMTIzNDU2Nzg5IgogICAgICAgICAiKistLi9AXyI7CiAKLSAg
ICBVU3RyaW5nIHJlc3VsdCA9ICIiOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBV
U3RyaW5nIHM7CiAgICAgVVN0cmluZyBzdHIgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwog
ICAgIGNvbnN0IFVDaGFyKiBjID0gc3RyLmRhdGEoKTsKQEAgLTM5MywxNSArMzk0LDE1IEBAIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXNjYXBlKEUKICAgICAgICAgICAgIHNwcmlu
dGYodG1wLCAiJSUlMDJYIiwgdSk7CiAgICAgICAgICAgICBzID0gVVN0cmluZyh0bXApOwogICAg
ICAgICB9Ci0gICAgICAgIHJlc3VsdCArPSBzOworICAgICAgICBidWlsZGVyLmFwcGVuZChzKTsK
ICAgICB9CiAKLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgcmVzdWx0KTsKKyAgICByZXR1cm4g
anNTdHJpbmcoZXhlYywgYnVpbGRlci5yZWxlYXNlKCkpOwogfQogCiBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIFVTdHJpbmcgcmVzdWx0ID0gIiI7Cisg
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIFVTdHJpbmcgc3RyID0gYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKTsKICAgICBpbnQgayA9IDA7CiAgICAgaW50IGxlbiA9IHN0ci5zaXplKCk7
CkBAIC00MjAsMTAgKzQyMSwxMCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1Vu
ZXNjYXBlCiAgICAgICAgICAgICBrICs9IDI7CiAgICAgICAgIH0KICAgICAgICAgaysrOwotICAg
ICAgICByZXN1bHQuYXBwZW5kKCpjKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoKmMpOwogICAg
IH0KIAotICAgIHJldHVybiBqc1N0cmluZyhleGVjLCByZXN1bHQpOworICAgIHJldHVybiBqc1N0
cmluZyhleGVjLCBidWlsZGVyLnJlbGVhc2UoKSk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDUyMDI4KQorKysg
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJMaXRlcmFsUGFy
c2VyLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKKyNpbmNsdWRlICJTdHJpbmdC
dWlsZGVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CkBAIC03MCwyNCArNzEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrQWdncmVnYXRlKE1hcmtT
dGFjayYpOwogCiBwcml2YXRlOgotICAgIGNsYXNzIFN0cmluZ0J1aWxkZXIgOiBwdWJsaWMgVmVj
dG9yPFVDaGFyPiB7Ci0gICAgcHVibGljOgotICAgICAgICB1c2luZyBWZWN0b3I8VUNoYXI+Ojph
cHBlbmQ7Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIHN0cikKLSAg
ICAgICAgewotICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihzdHIpOwotICAgICAgICAg
ICAgcmVzZXJ2ZUNhcGFjaXR5KHNpemUoKSArIGxlbik7Ci0gICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICAgICAgICAgICAgIFZlY3RvcjxVQ2hhcj46OmFw
cGVuZChzdHJbaV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgYXBwZW5kKGNv
bnN0IFVTdHJpbmcmIHN0cikKLSAgICAgICAgewotICAgICAgICAgICAgYXBwZW5kKHN0ci5kYXRh
KCksIHN0ci5zaXplKCkpOwotICAgICAgICB9Ci0gICAgfTsKLQogICAgIGNsYXNzIEhvbGRlciB7
CiAgICAgcHVibGljOgogICAgICAgICBIb2xkZXIoSlNPYmplY3QqKTsKQEAgLTI4NSw5ICsyNjgs
NyBAQCBKU1ZhbHVlIFN0cmluZ2lmaWVyOjpzdHJpbmdpZnkoSlNWYWx1ZSB2CiAgICAgaWYgKG1f
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIHJl
c3VsdC5zaHJpbmtUb0ZpdCgpOwotICAgIHNpemVfdCBsZW5ndGggPSByZXN1bHQuc2l6ZSgpOwot
ICAgIHJldHVybiBqc1N0cmluZyhtX2V4ZWMsIFVTdHJpbmcocmVzdWx0LnJlbGVhc2VCdWZmZXIo
KSwgbGVuZ3RoLCBmYWxzZSkpOworICAgIHJldHVybiBqc1N0cmluZyhtX2V4ZWMsIHJlc3VsdC5y
ZWxlYXNlKCkpOwogfQogCiB2b2lkIFN0cmluZ2lmaWVyOjphcHBlbmRRdW90ZWRTdHJpbmcoU3Ry
aW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgVVN0cmluZyYgdmFsdWUpCkBAIC00NzcsNyArNDU4
LDcgQEAgaW5saW5lIHZvaWQgU3RyaW5naWZpZXI6OmluZGVudCgpCiAgICAgLy8gVXNlIGEgc2lu
Z2xlIHNoYXJlZCBzdHJpbmcsIG1fcmVwZWF0ZWRHYXAsIHNvIHdlIGRvbid0IGtlZXAgYWxsb2Nh
dGluZyBuZXcgb25lcyBhcyB3ZSBpbmRlbnQgYW5kIHVuaW5kZW50LgogICAgIGludCBuZXdTaXpl
ID0gbV9pbmRlbnQuc2l6ZSgpICsgbV9nYXAuc2l6ZSgpOwogICAgIGlmIChuZXdTaXplID4gbV9y
ZXBlYXRlZEdhcC5zaXplKCkpCi0gICAgICAgIG1fcmVwZWF0ZWRHYXAuYXBwZW5kKG1fZ2FwKTsK
KyAgICAgICAgbV9yZXBlYXRlZEdhcCA9IG1ha2VTdHJpbmcobV9yZXBlYXRlZEdhcCwgbV9nYXAp
OwogICAgIEFTU0VSVChuZXdTaXplIDw9IG1fcmVwZWF0ZWRHYXAuc2l6ZSgpKTsKICAgICBtX2lu
ZGVudCA9IG1fcmVwZWF0ZWRHYXAuc3Vic3RyKDAsIG5ld1NpemUpOwogfQpJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gNTIwMjgpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw2ICszNDUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5kIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBVU3RyaW5nJiB1MSwgSlNTdHJpbmcqIHMyKTsKICAgICAgICAgZnJpZW5kIEpT
VmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogczEsIGNvbnN0IFVTdHJp
bmcmIHUyKTsKICAgICAgICAgZnJpZW5kIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVj
LCBSZWdpc3Rlciogc3RyaW5ncywgdW5zaWduZWQgY291bnQpOworICAgICAgICBmcmllbmQgSlNW
YWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKTsKICAgICB9OwogCiAgICAgSlNTdHJpbmcqIGFzU3RyaW5nKEpTVmFsdWUp
OwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCShyZXZpc2lv
biA1MjAyOCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5j
bHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIlN0cmluZ0J1
aWxkZXIuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9kdG9h
Lmg+CiAKQEAgLTEzNCw0OCArMTM1LDQ4IEBAIHRlbXBsYXRlIDxMaXRlcmFsUGFyc2VyOjpQYXJz
ZXJNb2RlIG1vZGUKIHsKICAgICArK21fcHRyOwogICAgIGNvbnN0IFVDaGFyKiBydW5TdGFydDsK
LSAgICB0b2tlbi5zdHJpbmdUb2tlbiA9IFVTdHJpbmcoKTsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CiAgICAgZG8gewogICAgICAgICBydW5TdGFydCA9IG1fcHRyOwogICAgICAgICB3aGls
ZSAobV9wdHIgPCBtX2VuZCAmJiBpc1NhZmVTdHJpbmdDaGFyYWN0ZXI8bW9kZT4oKm1fcHRyKSkK
ICAgICAgICAgICAgICsrbV9wdHI7CiAgICAgICAgIGlmIChydW5TdGFydCA8IG1fcHRyKQotICAg
ICAgICAgICAgdG9rZW4uc3RyaW5nVG9rZW4uYXBwZW5kKHJ1blN0YXJ0LCBtX3B0ciAtIHJ1blN0
YXJ0KTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHJ1blN0YXJ0LCBtX3B0ciAtIHJ1blN0
YXJ0KTsKICAgICAgICAgaWYgKChtb2RlID09IFN0cmljdEpTT04pICYmIG1fcHRyIDwgbV9lbmQg
JiYgKm1fcHRyID09ICdcXCcpIHsKICAgICAgICAgICAgICsrbV9wdHI7CiAgICAgICAgICAgICBp
ZiAobV9wdHIgPj0gbV9lbmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFRva0Vycm9yOwogICAg
ICAgICAgICAgc3dpdGNoICgqbV9wdHIpIHsKICAgICAgICAgICAgICAgICBjYXNlICciJzoKLSAg
ICAgICAgICAgICAgICAgICAgdG9rZW4uc3RyaW5nVG9rZW4uYXBwZW5kKCciJyk7CisgICAgICAg
ICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCciJyk7CiAgICAgICAgICAgICAgICAgICAgIG1f
cHRyKys7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2Ug
J1xcJzoKLSAgICAgICAgICAgICAgICAgICAgdG9rZW4uc3RyaW5nVG9rZW4uYXBwZW5kKCdcXCcp
OworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKICAgICAgICAgICAg
ICAgICAgICAgbV9wdHIrKzsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgY2FzZSAnLyc6Ci0gICAgICAgICAgICAgICAgICAgIHRva2VuLnN0cmluZ1Rva2VuLmFw
cGVuZCgnLycpOworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnLycpOwogICAg
ICAgICAgICAgICAgICAgICBtX3B0cisrOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICBjYXNlICdiJzoKLSAgICAgICAgICAgICAgICAgICAgdG9rZW4uc3RyaW5n
VG9rZW4uYXBwZW5kKCdcYicpOworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgn
XGInKTsKICAgICAgICAgICAgICAgICAgICAgbV9wdHIrKzsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSAnZic6Ci0gICAgICAgICAgICAgICAgICAgIHRv
a2VuLnN0cmluZ1Rva2VuLmFwcGVuZCgnXGYnKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJ1xmJyk7CiAgICAgICAgICAgICAgICAgICAgIG1fcHRyKys7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgJ24nOgotICAgICAgICAgICAg
ICAgICAgICB0b2tlbi5zdHJpbmdUb2tlbi5hcHBlbmQoJ1xuJyk7CisgICAgICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgICAgICAgICAgICAgICAgICBtX3B0cisrOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlICdyJzoKLSAg
ICAgICAgICAgICAgICAgICAgdG9rZW4uc3RyaW5nVG9rZW4uYXBwZW5kKCdccicpOworICAgICAg
ICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXHInKTsKICAgICAgICAgICAgICAgICAgICAg
bV9wdHIrKzsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2Fz
ZSAndCc6Ci0gICAgICAgICAgICAgICAgICAgIHRva2VuLnN0cmluZ1Rva2VuLmFwcGVuZCgnXHQn
KTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1x0Jyk7CiAgICAgICAgICAg
ICAgICAgICAgIG1fcHRyKys7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0xODYs
NyArMTg3LDcgQEAgdGVtcGxhdGUgPExpdGVyYWxQYXJzZXI6OlBhcnNlck1vZGUgbW9kZQogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQobV9wdHJbaV0pKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb2tFcnJvcjsKICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0b2tlbi5zdHJpbmdUb2tlbi5hcHBlbmQoSlND
OjpMZXhlcjo6Y29udmVydFVuaWNvZGUobV9wdHJbMV0sIG1fcHRyWzJdLCBtX3B0clszXSwgbV9w
dHJbNF0pKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoSlNDOjpMZXhlcjo6
Y29udmVydFVuaWNvZGUobV9wdHJbMV0sIG1fcHRyWzJdLCBtX3B0clszXSwgbV9wdHJbNF0pKTsK
ICAgICAgICAgICAgICAgICAgICAgbV9wdHIgKz0gNTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKQEAgLTE5OSw2ICsyMDAsNyBAQCB0ZW1wbGF0ZSA8TGl0ZXJhbFBhcnNlcjo6UGFyc2Vy
TW9kZSBtb2RlCiAgICAgaWYgKG1fcHRyID49IG1fZW5kIHx8ICptX3B0ciAhPSAnIicpCiAgICAg
ICAgIHJldHVybiBUb2tFcnJvcjsKIAorICAgIHRva2VuLnN0cmluZ1Rva2VuID0gYnVpbGRlci5y
ZWxlYXNlKCk7CiAgICAgdG9rZW4udHlwZSA9IFRva1N0cmluZzsKICAgICB0b2tlbi5lbmQgPSAr
K21fcHRyOwogICAgIHJldHVybiBUb2tTdHJpbmc7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL051bWJlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA1MjAyOCkKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOSAr
MjUsMTAgQEAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQ
cm90b3R5cGVGdW5jdGlvbi5oIgorI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKICNpbmNsdWRl
ICJkdG9hLmgiCi0jaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CkBAIC03MywxMSArNzQsMTIgQEAgc3RhdGljIFVTdHJpbmcgaW50ZWdlclBhcnROb0V4cChk
b3VibGUgZAogICAgIGJvb2wgcmVzdWx0SXNJbmZPck5hbiA9IChkZWNpbWFsUG9pbnQgPT0gOTk5
OSk7CiAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihyZXN1bHQpOwogCi0gICAgVVN0cmluZyBz
dHIgPSBzaWduID8gIi0iIDogIiI7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1
aWxkZXIuYXBwZW5kKHNpZ24gPyAiLSIgOiAiIik7CiAgICAgaWYgKHJlc3VsdElzSW5mT3JOYW4p
Ci0gICAgICAgIHN0ciArPSByZXN1bHQ7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKChjb25zdCBj
aGFyKilyZXN1bHQpOwogICAgIGVsc2UgaWYgKGRlY2ltYWxQb2ludCA8PSAwKQotICAgICAgICBz
dHIgKz0gIjAiOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiMCIpOwogICAgIGVsc2UgewogICAg
ICAgICBWZWN0b3I8Y2hhciwgMTAyND4gYnVmKGRlY2ltYWxQb2ludCArIDEpOwogCkBAIC04OSwx
MCArOTEsMTAgQEAgc3RhdGljIFVTdHJpbmcgaW50ZWdlclBhcnROb0V4cChkb3VibGUgZAogICAg
ICAgICAgICAgc3RybmNweShidWYuZGF0YSgpLCByZXN1bHQsIGRlY2ltYWxQb2ludCk7CiAgICAg
ICAgIGJ1ZltkZWNpbWFsUG9pbnRdID0gJ1wwJzsKIAotICAgICAgICBzdHIuYXBwZW5kKGJ1Zi5k
YXRhKCkpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgoY29uc3QgY2hhciopKGJ1Zi5kYXRhKCkp
KTsKICAgICB9CiAKLSAgICByZXR1cm4gc3RyOworICAgIHJldHVybiBidWlsZGVyLnJlbGVhc2Uo
KTsKIH0KIAogc3RhdGljIFVTdHJpbmcgY2hhclNlcXVlbmNlKGNoYXIgYywgaW50IGNvdW50KQpA
QCAtMjM2LDEzICsyMzgsMTYgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVu
Y1RvRgogCiAgICAgVVN0cmluZyBzOwogICAgIGlmICh4IDwgMCkgewotICAgICAgICBzLmFwcGVu
ZCgnLScpOworICAgICAgICBzID0gIi0iOwogICAgICAgICB4ID0gLXg7Ci0gICAgfSBlbHNlIGlm
ICh4ID09IC0wLjApCi0gICAgICAgIHggPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHMgPSAi
IjsKKyAgICAgICAgaWYgKHggPT0gLTAuMCkKKyAgICAgICAgICAgIHggPSAwOworICAgIH0KIAog
ICAgIGlmICh4ID49IHBvdygxMC4wLCAyMS4wKSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsIHMgKyBVU3RyaW5nOjpmcm9tKHgpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
IG1ha2VTdHJpbmcocywgVVN0cmluZzo6ZnJvbSh4KSkpOwogCiAgICAgY29uc3QgZG91YmxlIHRl
blRvVGhlRiA9IHBvdygxMC4wLCBmKTsKICAgICBkb3VibGUgbiA9IGZsb29yKHggKiB0ZW5Ub1Ro
ZUYpOwpAQCAtMjUzLDE3ICsyNTgsMTkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclBy
b3RvRnVuY1RvRgogCiAgICAgaW50IGsgPSBtLnNpemUoKTsKICAgICBpZiAoayA8PSBmKSB7Ci0g
ICAgICAgIFVTdHJpbmcgejsKKyAgICAgICAgU3RyaW5nQnVpbGRlciB6OwogICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGYgKyAxIC0gazsgaSsrKQogICAgICAgICAgICAgei5hcHBlbmQoJzAn
KTsKLSAgICAgICAgbSA9IHogKyBtOworICAgICAgICB6LmFwcGVuZChtKTsKKyAgICAgICAgbSA9
IHoucmVsZWFzZSgpOwogICAgICAgICBrID0gZiArIDE7CiAgICAgICAgIEFTU0VSVChrID09IG0u
c2l6ZSgpKTsKICAgICB9CiAgICAgaW50IGtNaW51c2YgPSBrIC0gZjsKKwogICAgIGlmIChrTWlu
dXNmIDwgbS5zaXplKCkpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzICsgbS5zdWJz
dHIoMCwga01pbnVzZikgKyAiLiIgKyBtLnN1YnN0cihrTWludXNmKSk7Ci0gICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsIHMgKyBtLnN1YnN0cigwLCBrTWludXNmKSk7CisgICAgICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCBtYWtlU3RyaW5nKHMsIG0uc3Vic3RyKDAsIGtNaW51c2YpLCAiLiIsIG0u
c3Vic3RyKGtNaW51c2YpKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIG1ha2VTdHJpbmco
cywgbS5zdWJzdHIoMCwga01pbnVzZikpKTsKIH0KIAogc3RhdGljIHZvaWQgZnJhY3Rpb25hbFBh
cnRUb1N0cmluZyhjaGFyKiBidWYsIGludCYgaSwgY29uc3QgY2hhciogcmVzdWx0LCBpbnQgcmVz
dWx0TGVuZ3RoLCBpbnQgZnJhY3Rpb25hbERpZ2l0cykKQEAgLTM5MSw3ICszOTgsOCBAQCBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9QCiAgICAgaWYgKHggPCAwKSB7CiAg
ICAgICAgIHMgPSAiLSI7CiAgICAgICAgIHggPSAteDsKLSAgICB9CisgICAgfSBlbHNlCisgICAg
ICAgIHMgPSAiIjsKIAogICAgIGlmICghKGRvdWJsZVByZWNpc2lvbiA+PSAxICYmIGRvdWJsZVBy
ZWNpc2lvbiA8PSAyMSkpIC8vIHRydWUgZm9yIE5hTgogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBSYW5nZUVycm9yLCAidG9QcmVjaXNpb24oKSBhcmd1bWVudCBtdXN0IGJlIGJldHdl
ZW4gMSBhbmQgMjEiKTsKQEAgLTQyMiwxMCArNDMwLDEwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBudW1iZXJQcm90b0Z1bmNUb1AKICAgICAgICAgbSA9IGludGVnZXJQYXJ0Tm9FeHAobik7CiAg
ICAgICAgIGlmIChlIDwgLTYgfHwgZSA+PSBwcmVjaXNpb24pIHsKICAgICAgICAgICAgIGlmICht
LnNpemUoKSA+IDEpCi0gICAgICAgICAgICAgICAgbSA9IG0uc3Vic3RyKDAsIDEpICsgIi4iICsg
bS5zdWJzdHIoMSk7CisgICAgICAgICAgICAgICAgbSA9IG1ha2VTdHJpbmcobS5zdWJzdHIoMCwg
MSksICIuIiwgbS5zdWJzdHIoMSkpOwogICAgICAgICAgICAgaWYgKGUgPj0gMCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIHMgKyBtICsgImUrIiArIFVT
dHJpbmc6OmZyb20oZSkpOwotICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhl
eGVjLCBzICsgbSArICJlLSIgKyBVU3RyaW5nOjpmcm9tKC1lKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBtYWtlU3RyaW5nKHMsIG0sICJlKyIsIFVT
dHJpbmc6OmZyb20oZSkpKTsKKyAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmco
ZXhlYywgbWFrZVN0cmluZyhzLCBtLCAiZS0iLCBVU3RyaW5nOjpmcm9tKC1lKSkpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgbSA9IGNoYXJTZXF1ZW5jZSgnMCcsIHByZWNpc2lv
bik7CkBAIC00MzMsMTMgKzQ0MSwxMyBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJv
dG9GdW5jVG9QCiAgICAgfQogCiAgICAgaWYgKGUgPT0gcHJlY2lzaW9uIC0gMSkKLSAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHMgKyBtKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsIG1ha2VTdHJpbmcocywgbSkpOwogICAgIGlmIChlID49IDApIHsKICAgICAgICAgaWYgKGUg
KyAxIDwgbS5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgcyArIG0u
c3Vic3RyKDAsIGUgKyAxKSArICIuIiArIG0uc3Vic3RyKGUgKyAxKSk7Ci0gICAgICAgIHJldHVy
biBqc1N0cmluZyhleGVjLCBzICsgbSk7CisgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhl
YywgbWFrZVN0cmluZyhzLCBtLnN1YnN0cigwLCBlICsgMSksICIuIiwgbS5zdWJzdHIoZSArIDEp
KSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBtYWtlU3RyaW5nKHMsIG0pKTsKICAg
ICB9Ci0gICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBzICsgIjAuIiArIGNoYXJT
ZXF1ZW5jZSgnMCcsIC0oZSArIDEpKSArIG0pOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcoZXhlYywgbWFrZVN0cmluZyhzLCAiMC4iLCBjaGFyU2VxdWVuY2UoJzAnLCAtKGUgKyAxKSks
IG0pKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
ZXJhdGlvbnMuaAkocmV2aXNpb24gNTIwMjgpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
ZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDYgKzEyOCw0MyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0
YSwgcm9wZS5yZWxlYXNlKCkpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBq
c1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcm9wZUxlbmd0aCA9IDA7CisgICAgICAg
IGlmIChMSUtFTFkodGhpc1ZhbHVlLmlzU3RyaW5nKCkpKQorICAgICAgICAgICAgcm9wZUxlbmd0
aCArPSBhc1N0cmluZyh0aGlzVmFsdWUpLT5yb3BlTGVuZ3RoKCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICsrcm9wZUxlbmd0aDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IGFyZ3MuYXQoaSk7
CisgICAgICAgICAgICBpZiAoTElLRUxZKHYuaXNTdHJpbmcoKSkpCisgICAgICAgICAgICAgICAg
cm9wZUxlbmd0aCArPSBhc1N0cmluZyh2KS0+cm9wZUxlbmd0aCgpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICsrcm9wZUxlbmd0aDsKKyAgICAgICAgfQorCisgICAgICAgIFJl
ZlB0cjxKU1N0cmluZzo6Um9wZT4gcm9wZSA9IEpTU3RyaW5nOjpSb3BlOjpjcmVhdGVPck51bGwo
cm9wZUxlbmd0aCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghcm9wZSkpCisgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworCisgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gMDsKKyAgICAgICAgaWYgKExJS0VMWSh0aGlzVmFsdWUuaXNTdHJpbmcoKSkpCisgICAg
ICAgICAgICByb3BlLT5hcHBlbmQoaW5kZXgsIGFzU3RyaW5nKHRoaXNWYWx1ZSkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICByb3BlLT5hcHBlbmQoaW5kZXgsIHRoaXNWYWx1ZS50b1N0cmlu
ZyhleGVjKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBhcmdzLmF0KGkpOworICAgICAgICAgICAg
aWYgKExJS0VMWSh2LmlzU3RyaW5nKCkpKQorICAgICAgICAgICAgICAgIHJvcGUtPmFwcGVuZChp
bmRleCwgYXNTdHJpbmcodikpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJv
cGUtPmFwcGVuZChpbmRleCwgdi50b1N0cmluZyhleGVjKSk7CisgICAgICAgIH0KKyAgICAgICAg
QVNTRVJUKGluZGV4ID09IHJvcGVMZW5ndGgpOworCisgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIHJldHVybiBuZXcgKGdsb2Jh
bERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHJvcGUucmVsZWFzZSgpKTsKKyAgICB9CisKICAg
ICAvLyBFQ01BIDExLjkuMwogICAgIGlubGluZSBib29sIEpTVmFsdWU6OmVxdWFsKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKICAgICB7CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ0J1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ0J1aWxkZXIuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nQnVpbGRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3Ry
aW5nQnVpbGRlcl9oCisjZGVmaW5lIFN0cmluZ0J1aWxkZXJfaAorCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU3RyaW5nQnVpbGRlciA6IHB1Ymxp
YyBWZWN0b3I8VUNoYXIsIDY0PiB7CitwdWJsaWM6CisgICAgdXNpbmcgVmVjdG9yPFVDaGFyLCA2
ND46OmFwcGVuZDsKKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIHN0cikKKyAgICB7Cisg
ICAgICAgIGFwcGVuZChzdHIsIHN0cmxlbihzdHIpKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVu
ZChjb25zdCBjaGFyKiBzdHIsIHNpemVfdCBsZW4pCisgICAgeworICAgICAgICByZXNlcnZlQ2Fw
YWNpdHkoc2l6ZSgpICsgbGVuKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW47
IGkrKykKKyAgICAgICAgICAgIFZlY3RvcjxVQ2hhciwgNjQ+OjphcHBlbmQoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oc3RyW2ldKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmQoY29uc3Qg
VVN0cmluZyYgc3RyKQorICAgIHsKKyAgICAgICAgYXBwZW5kKHN0ci5kYXRhKCksIHN0ci5zaXpl
KCkpOworICAgIH0KKworICAgIFVTdHJpbmcgcmVsZWFzZSgpCisgICAgeworICAgICAgICBzaHJp
bmtUb0ZpdCgpOworICAgICAgICBzaXplX3QgbGVuZ3RoID0gc2l6ZSgpOworICAgICAgICByZXR1
cm4gVVN0cmluZyhyZWxlYXNlQnVmZmVyKCksIGxlbmd0aCwgZmFsc2UpOworICAgIH0KK307CisK
K307CisKKyNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gNTIwMjgpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk9iamVjdFBy
b3RvdHlwZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5h
bWVBcnJheS5oIgogI2luY2x1ZGUgIlJlZ0V4cENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiUmVn
RXhwT2JqZWN0LmgiCkBAIC0xNDgsMTIgKzE0OSwxMSBAQCBib29sIFN0cmluZ1Byb3RvdHlwZTo6
Z2V0T3duUHJvcGVydHlEZXNjCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBG
dW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIGlubGluZSBVU3Ry
aW5nIHN1YnN0aXR1dGVCYWNrcmVmZXJlbmNlcyhjb25zdCBVU3RyaW5nJiByZXBsYWNlbWVudCwg
Y29uc3QgVVN0cmluZyYgc291cmNlLCBjb25zdCBpbnQqIG92ZWN0b3IsIFJlZ0V4cCogcmVnKQor
c3RhdGljIE5FVkVSX0lOTElORSBVU3RyaW5nIHN1YnN0aXR1dGVCYWNrcmVmZXJlbmNlc1Nsb3co
Y29uc3QgVVN0cmluZyYgcmVwbGFjZW1lbnQsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZSwgY29uc3Qg
aW50KiBvdmVjdG9yLCBSZWdFeHAqIHJlZywgaW50IGkpCiB7Ci0gICAgVVN0cmluZyBzdWJzdGl0
dXRlZFJlcGxhY2VtZW50OworICAgIFZlY3RvcjxVQ2hhcj4gc3Vic3RpdHV0ZWRSZXBsYWNlbWVu
dDsKICAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBpbnQgaSA9IC0xOwotICAgIHdoaWxlICgoaSA9
IHJlcGxhY2VtZW50LmZpbmQoJyQnLCBpICsgMSkpICE9IC0xKSB7CisgICAgZG8gewogICAgICAg
ICBpZiAoaSArIDEgPT0gcmVwbGFjZW1lbnQuc2l6ZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAK
QEAgLTIwNSwxNSArMjA1LDIyIEBAIHN0YXRpYyBpbmxpbmUgVVN0cmluZyBzdWJzdGl0dXRlQmFj
a3JlZmUKICAgICAgICAgaSArPSAxICsgYWR2YW5jZTsKICAgICAgICAgb2Zmc2V0ID0gaSArIDE7
CiAgICAgICAgIHN1YnN0aXR1dGVkUmVwbGFjZW1lbnQuYXBwZW5kKHNvdXJjZS5kYXRhKCkgKyBi
YWNrcmVmU3RhcnQsIGJhY2tyZWZMZW5ndGgpOwotICAgIH0KLQotICAgIGlmICghb2Zmc2V0KQot
ICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgfSB3aGlsZSAoKGkgPSByZXBsYWNlbWVu
dC5maW5kKCckJywgaSArIDEpKSAhPSAtMSk7CiAKICAgICBpZiAocmVwbGFjZW1lbnQuc2l6ZSgp
IC0gb2Zmc2V0KQogICAgICAgICBzdWJzdGl0dXRlZFJlcGxhY2VtZW50LmFwcGVuZChyZXBsYWNl
bWVudC5kYXRhKCkgKyBvZmZzZXQsIHJlcGxhY2VtZW50LnNpemUoKSAtIG9mZnNldCk7CiAKLSAg
ICByZXR1cm4gc3Vic3RpdHV0ZWRSZXBsYWNlbWVudDsKKyAgICBzdWJzdGl0dXRlZFJlcGxhY2Vt
ZW50LnNocmlua1RvRml0KCk7CisgICAgdW5zaWduZWQgc2l6ZSA9IHN1YnN0aXR1dGVkUmVwbGFj
ZW1lbnQuc2l6ZSgpOworICAgIHJldHVybiBVU3RyaW5nKHN1YnN0aXR1dGVkUmVwbGFjZW1lbnQu
cmVsZWFzZUJ1ZmZlcigpLCBzaXplLCBmYWxzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgVVN0cmlu
ZyBzdWJzdGl0dXRlQmFja3JlZmVyZW5jZXMoY29uc3QgVVN0cmluZyYgcmVwbGFjZW1lbnQsIGNv
bnN0IFVTdHJpbmcmIHNvdXJjZSwgY29uc3QgaW50KiBvdmVjdG9yLCBSZWdFeHAqIHJlZykKK3sK
KyAgICBpbnQgaSA9IHJlcGxhY2VtZW50LmZpbmQoJyQnLCAwKTsKKyAgICBpZiAoVU5MSUtFTFko
aSAhPSAtMSkpCisgICAgICAgIHJldHVybiBzdWJzdGl0dXRlQmFja3JlZmVyZW5jZXNTbG93KHJl
cGxhY2VtZW50LCBzb3VyY2UsIG92ZWN0b3IsIHJlZywgaSk7CisgICAgcmV0dXJuIHJlcGxhY2Vt
ZW50OwogfQogCiBzdGF0aWMgaW5saW5lIGludCBsb2NhbGVDb21wYXJlKGNvbnN0IFVTdHJpbmcm
IGEsIGNvbnN0IFVTdHJpbmcmIGIpCkBAIC00MjMsMTIgKzQzMCwxNCBAQCBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhCiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1
ZS50b1RoaXNTdHJpbmcoZXhlYyk7CisgICAgaWYgKHRoaXNWYWx1ZS5pc1N0cmluZygpICYmIChh
cmdzLnNpemUoKSA9PSAxKSkgeworICAgICAgICBKU1ZhbHVlIHYgPSBhcmdzLmF0KDApOworICAg
ICAgICByZXR1cm4gdi5pc1N0cmluZygpCisgICAgICAgICAgICA/IGpzU3RyaW5nKGV4ZWMsIGFz
U3RyaW5nKHRoaXNWYWx1ZSksIGFzU3RyaW5nKHYpKQorICAgICAgICAgICAgOiBqc1N0cmluZyhl
eGVjLCBhc1N0cmluZyh0aGlzVmFsdWUpLCB2LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICB9CiAKLSAg
ICBBcmdMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBhcmdzLmVuZCgpOwotICAgIGZvciAoQXJn
TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgcyArPSAoKml0KS50b1N0cmluZyhleGVjKTsKLSAgICByZXR1cm4ganNTdHJpbmco
ZXhlYywgcyk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncyk7CiB9
CiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykK
</data>
<flag name="review"
          id="26669"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>