<?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>95291</bug_id>
          
          <creation_ts>2012-08-28 23:07:24 -0700</creation_ts>
          <short_desc>Deploy ASCIILiteral and StringBuilder in more places in WebCore</short_desc>
          <delta_ts>2012-08-29 00:32:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>707116</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-28 23:07:24 -0700</bug_when>
    <thetext>Deploy ASCIILiteral and StringBuilder in more places in WebCore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707117</commentid>
    <comment_count>1</comment_count>
      <attachid>161140</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-28 23:08:32 -0700</bug_when>
    <thetext>Created attachment 161140
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707127</commentid>
    <comment_count>2</comment_count>
      <attachid>161140</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-28 23:24:34 -0700</bug_when>
    <thetext>Comment on attachment 161140
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=161140&amp;action=review

Looks great!

How did you fix all the string? Manually or you have made a smart script?

I have a few comments but they are nitpicking.

&gt; Source/WebCore/css/CSSCanvasValue.cpp:47
&gt; +    result.appendLiteral(&quot;)&quot;);

append(&apos;)&apos;) is faster (it is mostly inline IIRC)

You can also use the string operators (operator+). If you do not have a branch, they do a better job than StringBuilder.

&gt; Source/WebCore/css/CSSCrossfadeValue.cpp:96
&gt; +    result.appendLiteral(&quot;)&quot;);

append(&apos;)&apos;)

&gt; Source/WebCore/css/CSSPageRule.cpp:64
&gt; +            text.appendLiteral(&quot; &quot;);

append(&apos; &apos;)

&gt; Source/WebCore/css/CSSSelector.cpp:527
&gt; +            str.append(prefix.string());

This is unfortunate. If that is useful elsewhere, we add StringBuilder::append(AtomicString).

&gt; Source/WebCore/css/CSSSelector.cpp:631
&gt; +            return tagHistoryText + &quot; &quot; + str.toString();

&apos; &apos;

&gt; Source/WebCore/html/HTMLTitleElement.cpp:79
&gt;      for (Node *n = firstChild(); n; n = n-&gt;nextSibling()) {
&gt;          if (n-&gt;isTextNode())
&gt; -            val += toText(n)-&gt;data();
&gt; +            result.append(toText(n)-&gt;data());
&gt;      }

Wow, that was pretty bad.

&gt; Source/WebCore/platform/sql/SQLiteDatabase.cpp:96
&gt; +    if (!SQLiteStatement(*this, ASCIILiteral(&quot;PRAGMA temp_store = MEMORY;&quot;)).executeCommand())

I have looked at our use of SQLiteStatement and I think we could make a malloc-free version for many operations.
But that would be stupid not to use ASCIILiteral in the meantime. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707129</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-28 23:28:48 -0700</bug_when>
    <thetext>&gt; How did you fix all the string? Manually or you have made a smart script?

This isn&apos;t all of them.  I&apos;m just greping around and fixing obvious stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707176</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-29 00:32:00 -0700</bug_when>
    <thetext>Committed r126967: &lt;http://trac.webkit.org/changeset/126967&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707177</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-29 00:32:31 -0700</bug_when>
    <thetext>I fixed all the above before landing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161140</attachid>
            <date>2012-08-28 23:08:32 -0700</date>
            <delta_ts>2012-08-29 00:32:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95291-20120828230822.patch</filename>
            <type>text/plain</type>
            <size>34515</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2OTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZiMjBiNTU3ZTYwZTgw
ZjY3YTc1ZmFjZGIyZjQyZjU3NmQ0ODkyNS4uMjIxNDYzMTNjZTBiYTYxZjdjYWM5OTRkYmI1Njky
YzBjNzJiNGY0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDcwIEBACiAyMDEyLTA4LTI4ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKKyAgICAgICAgRGVwbG95IEFTQ0lJTGl0ZXJh
bCBhbmQgU3RyaW5nQnVpbGRlciBpbiBtb3JlIHBsYWNlcyBpbiBXZWJDb3JlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTI5MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEkgd2FudGVkIHRvIGRlcGxveSBB
U0NJSUxpdGVyYWwgaW4gbW9yZSBwbGFjZXMgaW4gV2ViQ29yZSwgYnV0IHRoZXJlJ3MKKyAgICAg
ICAgYSBidW5jaCBvZiBjb2RlIHRoYXQgc2hvdWxkIGJlIHVzaW5nIFN0cmluZ0J1aWxkZXIsIHdo
aWNoIEkgY291bGRuJ3QKKyAgICAgICAgcmVzaXN0IGRlcGxveWluZyBhcyB3ZWxsLgorCisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbjAwLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uMDA6OmNyZWF0ZUljZU9wdGlvbnMpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Jsb2JD
b25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNCbG9iKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOExh
enlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2ZW50TGlzdGVu
ZXI6OnByZXBhcmVMaXN0ZW5lck9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4QmxvYkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEJsb2I6OmNvbnN0cnVjdG9y
Q2FsbGJhY2spOgorICAgICAgICAqIGNzcy9DU1NDYW52YXNWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6Y3VzdG9tQ3NzVGV4dCk6CisgICAgICAgICogY3NzL0NT
U0Nyb3NzZmFkZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Nyb3NzZmFkZVZhbHVl
OjpjdXN0b21Dc3NUZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTUGFnZVJ1bGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFnZVJ1bGU6OnNlbGVjdG9yVGV4dCk6CisgICAgICAgICogY3NzL0NT
U1NlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpzZWxlY3RvclRl
eHQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpleGVjdXRlVG9nZ2xlU3R5bGVJbkxpc3QpOgorICAgICAgICAqIGVkaXRpbmcvU21hcnRS
ZXBsYWNlSUNVLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFNtYXJ0U2V0KToKKyAgICAgICAg
KiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaWxsQ29udGFpbmVyRnJv
bVN0cmluZyk6CisgICAgICAgICogaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUaXRsZUVsZW1lbnQ6OnRleHQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
c29sZUFnZW50OjpkaWRGYWlsTG9hZGluZyk6CisgICAgICAgICogcGFnZS9FdmVudFNvdXJjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5L0xvY2FsaXplZFN0cmluZ3NCbGFja0JlcnJ5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtTGFuZ3VhZ2UpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllcjo6YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTQXRvbVBhcnNlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSU1NBdG9tUGFyc2VyOjpwYXJzZUNvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L3NxbC9TUUxpdGVEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFz
ZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6c2V0RnVsbHN5bmMp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6Om1heGltdW1TaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpwYWdlU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVEYXRhYmFzZTo6ZnJlZVNwYWNlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVEYXRhYmFzZTo6dG90YWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNl
Ojp0YWJsZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6Y2xlYXJB
bGxUYWJsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnJ1blZhY3V1bUNv
bW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnJ1bkluY3JlbWVudGFs
VmFjdXVtQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6dHVybk9u
SW5jcmVtZW50YWxBdXRvVmFjdXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRmlsZVN5c3Rl
bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidW5kbGVOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OnN0b3JhZ2VEaXJlY3RvcnkpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luU3RyZWFtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6c3RhcnRTdHJlYW0pOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNZW51TGlzdDo6c2V0VGV4dEZyb21PcHRpb24pOgorCisyMDEyLTA4LTI4ICBBZGFtIEJhcnRo
ICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKICAgICAgICAgRGVwbG95IEFTQ0lJTGl0ZXJhbCBob3Ru
ZXNzIHRocm91Z2hvdXQgV2ViQ29yZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTUyODIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbjAwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24wMC5jcHAKaW5kZXggOWE2MWZjMzQyYTQ3Mzc3
ZWY0NzA1NGI2MmZmZGM4OGQ5MWZhMDFhYy4uODU1NmQwOGMxZmI5ZTkwMmU4N2NhNDM1NTU4ZmQ2
NTJlY2NkNjM4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9QZWVyQ29ubmVjdGlvbjAwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1BlZXJDb25uZWN0aW9uMDAuY3BwCkBAIC0yMjksNyArMjI5LDcgQEAgUGFzc1JlZlB0
cjxTZXNzaW9uRGVzY3JpcHRpb24+IFBlZXJDb25uZWN0aW9uMDA6OnJlbW90ZURlc2NyaXB0aW9u
KCkKIAogUGFzc1JlZlB0cjxJY2VPcHRpb25zPiBQZWVyQ29ubmVjdGlvbjAwOjpjcmVhdGVJY2VP
cHRpb25zKGNvbnN0IERpY3Rpb25hcnkmIGRpY3Rpb25hcnksIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewotICAgIFN0cmluZyB1c2VDYW5kaWRhdGVzID0gIiI7CisgICAgU3RyaW5nIHVzZUNhbmRpZGF0
ZXMgPSBlbXB0eVN0cmluZygpOwogICAgIGRpY3Rpb25hcnkuZ2V0KCJ1c2VfY2FuZGlkYXRlcyIs
IHVzZUNhbmRpZGF0ZXMpOwogCiAgICAgSWNlT3B0aW9uczo6VXNlQ2FuZGlkYXRlc09wdGlvbiBv
cHRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAppbmRl
eCA2YTkxMjJjMmUzMzM1ZDY2ZDM2NmIzNTY1YjM2ODUwMWM5ODc4ZDNjLi40OWNhMjk2NGM1NjRm
Zjg2MWNhY2I4ZjczYWIzZjY2MDNlNDlmZGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQmxvYkN1c3RvbS5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBKU0Jsb2JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNCbG9iKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgIkZpcnN0IGFyZ3VtZW50IG9mIHRoZSBjb25zdHJ1Y3RvciBpcyBub3Qgb2YgdHlwZSBB
cnJheSIpKTsKIAogICAgIFN0cmluZyB0eXBlOwotICAgIFN0cmluZyBlbmRpbmdzID0gInRyYW5z
cGFyZW50IjsKKyAgICBTdHJpbmcgZW5kaW5ncyA9IEFTQ0lJTGl0ZXJhbCgidHJhbnNwYXJlbnQi
KTsKIAogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSB7CiAgICAgICAgIEpTVmFs
dWUgYmxvYlByb3BlcnR5QmFnVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggZDU0
OGIxNjA3NmU2YWQyY2I2MThjOTY0OTU5NmI4MWZhMDI0ZWE0Mi4uYzFiYmRiZjc3NTZlOGIwNzU3
YThhZDA0YjkyNDQ0MTFhMWE4YWUzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTE0NSwxMCArMTQ1LDEwIEBAIHZvaWQg
VjhMYXp5RXZlbnRMaXN0ZW5lcjo6cHJlcGFyZUxpc3RlbmVyT2JqZWN0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpCiAgICAgLy8gQ2FsbCB3aXRoIDQgYXJndW1lbnRzIGluc3RlYWQg
b2YgMywgcGFzcyBhZGRpdGlvbmFsIG51bGwgYXMgdGhlIGxhc3QgcGFyYW1ldGVyLgogICAgIC8v
IEJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIHdpdGggNCBhcmd1bWVudHMsIHdlIGNyZWF0ZSBhIHNl
dHRlciBvbiBhcmd1bWVudHMgb2JqZWN0CiAgICAgLy8gd2hpY2ggd291bGQgc2hhZG93IHByb3Bl
cnR5ICIzIiBvbiB0aGUgcHJvdG90eXBlLgotICAgIFN0cmluZyBjb2RlID0gIihmdW5jdGlvbigp
IHsiIFwKKyAgICBTdHJpbmcgY29kZSA9IEFTQ0lJTGl0ZXJhbCgiKGZ1bmN0aW9uKCkgeyIgXAog
ICAgICAgICAid2l0aCAodGhpc1syXSkgeyIgXAogICAgICAgICAid2l0aCAodGhpc1sxXSkgeyIg
XAotICAgICAgICAid2l0aCAodGhpc1swXSkgeyI7CisgICAgICAgICJ3aXRoICh0aGlzWzBdKSB7
Iik7CiAgICAgY29kZS5hcHBlbmQoInJldHVybiBmdW5jdGlvbigiKTsKICAgICBjb2RlLmFwcGVu
ZChtX2V2ZW50UGFyYW1ldGVyTmFtZSk7CiAgICAgY29kZS5hcHBlbmQoIikgeyIpOwpAQCAtMjE5
LDcgKzIxOSw3IEBAIHZvaWQgVjhMYXp5RXZlbnRMaXN0ZW5lcjo6cHJlcGFyZUxpc3RlbmVyT2Jq
ZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgaWYgKCF0b1N0cmluZ1Rl
bXBsYXRlLklzRW1wdHkoKSkKICAgICAgICAgdG9TdHJpbmdGdW5jdGlvbiA9IHRvU3RyaW5nVGVt
cGxhdGUtPkdldEZ1bmN0aW9uKCk7CiAgICAgaWYgKCF0b1N0cmluZ0Z1bmN0aW9uLklzRW1wdHko
KSkgewotICAgICAgICBTdHJpbmcgdG9TdHJpbmdSZXN1bHQgPSAiZnVuY3Rpb24gIjsKKyAgICAg
ICAgU3RyaW5nIHRvU3RyaW5nUmVzdWx0ID0gQVNDSUlMaXRlcmFsKCJmdW5jdGlvbiAiKTsKICAg
ICAgICAgdG9TdHJpbmdSZXN1bHQuYXBwZW5kKG1fZnVuY3Rpb25OYW1lKTsKICAgICAgICAgdG9T
dHJpbmdSZXN1bHQuYXBwZW5kKCIoIik7CiAgICAgICAgIHRvU3RyaW5nUmVzdWx0LmFwcGVuZCht
X2V2ZW50UGFyYW1ldGVyTmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhCbG9iQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwCmluZGV4IDExMTJlNTQwNjA1ZTdjOTc3ODIyYjIxMWMx
NjhiYTA1ZThmNDc4NzkuLmMyNGY0ZDM0OWRmNWY1YTk3Y2M5MDM5ZjJkMzg0NTAyYzg2ODYxMWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0
b20uY3BwCkBAIC03OSw3ICs3OSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEJsb2I6OmNv
bnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICAgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBvZiB0aGUgY29uc3RydWN0b3IgaXMg
bm90IG9mIHR5cGUgQXJyYXkiLCBhcmdzLkdldElzb2xhdGUoKSk7CiAKICAgICBTdHJpbmcgdHlw
ZTsKLSAgICBTdHJpbmcgZW5kaW5ncyA9ICJ0cmFuc3BhcmVudCI7CisgICAgU3RyaW5nIGVuZGlu
Z3MgPSBBU0NJSUxpdGVyYWwoInRyYW5zcGFyZW50Iik7CiAKICAgICBpZiAoYXJncy5MZW5ndGgo
KSA+IDEpIHsKICAgICAgICAgaWYgKCFhcmdzWzFdLT5Jc09iamVjdCgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDYW52YXNWYWx1ZS5jcHAKaW5kZXggNjM3NzdiYjRkZGRkYTA5NzYxNmY4ZmEwYWJjMWJh
NWM3N2ZiOTQ1NS4uMTk1MTdlMWJmN2U3OTU4NzFlMDc2YTFjMjM0YjU0M2YzMTU5MDUzYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIK
ICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsOSArNDEsMTEgQEAgQ1NTQ2Fu
dmFzVmFsdWU6On5DU1NDYW52YXNWYWx1ZSgpCiAKIFN0cmluZyBDU1NDYW52YXNWYWx1ZTo6Y3Vz
dG9tQ3NzVGV4dCgpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9ICItd2Via2l0LWNhbnZh
cygiOwotICAgIHJlc3VsdCArPSBtX25hbWUgICsgIikiOwotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIi13ZWJr
aXQtY2FudmFzKCIpOworICAgIHJlc3VsdC5hcHBlbmQobV9uYW1lKTsKKyAgICByZXN1bHQuYXBw
ZW5kTGl0ZXJhbCgiKSIpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogdm9p
ZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCosIGNvbnN0
IEZsb2F0UmVjdCYgY2hhbmdlZFJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ3Jvc3NmYWRlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZh
bHVlLmNwcAppbmRleCA1ZWQ3ZGExOGQzY2I5ZTlhZDgwYzJiZTc4MTgyNjJlYzM4MmI0ZTI5Li40
MjZhNTAyOGQ2ZDU2MGNmMWI4NTRjOGEwYWE2MTViOGM2YzUxMTI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAi
U3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04NSwxMiArODYsMTUgQEAgQ1NTQ3Jvc3Nm
YWRlVmFsdWU6On5DU1NDcm9zc2ZhZGVWYWx1ZSgpCiAKIFN0cmluZyBDU1NDcm9zc2ZhZGVWYWx1
ZTo6Y3VzdG9tQ3NzVGV4dCgpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9ICItd2Via2l0
LWNyb3NzLWZhZGUoIjsKLSAgICByZXN1bHQgKz0gbV9mcm9tVmFsdWUtPmNzc1RleHQoKSArICIs
ICI7Ci0gICAgcmVzdWx0ICs9IG1fdG9WYWx1ZS0+Y3NzVGV4dCgpICsgIiwgIjsKLSAgICByZXN1
bHQgKz0gbV9wZXJjZW50YWdlVmFsdWUtPmNzc1RleHQoKTsKLSAgICByZXN1bHQgKz0gIikiOwot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0
LmFwcGVuZExpdGVyYWwoIi13ZWJraXQtY3Jvc3MtZmFkZSgiKTsKKyAgICByZXN1bHQuYXBwZW5k
KG1fZnJvbVZhbHVlLT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIp
OworICAgIHJlc3VsdC5hcHBlbmQobV90b1ZhbHVlLT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5h
cHBlbmRMaXRlcmFsKCIsICIpOworICAgIHJlc3VsdC5hcHBlbmQobV9wZXJjZW50YWdlVmFsdWUt
PmNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIikiKTsKKyAgICByZXR1cm4g
cmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIEludFNpemUgQ1NTQ3Jvc3NmYWRlVmFsdWU6OmZpeGVk
U2l6ZShjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWdlUnVs
ZS5jcHAKaW5kZXggMGEwNWY1ZTNmNDIxYWE3Njk1MWU5NzRlOTFmZjRiOGVkN2U4NDgyYS4uNDNl
YjE0YjBhNTdiNDczZTFjMjQ3NTgzMDRlMGQ1YmY0YTg2MDgxMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFnZVJ1bGUuY3BwCkBAIC01NSwxNCArNTUsMTcgQEAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogQ1NT
UGFnZVJ1bGU6OnN0eWxlKCkgY29uc3QKIAogU3RyaW5nIENTU1BhZ2VSdWxlOjpzZWxlY3RvclRl
eHQoKSBjb25zdAogewotICAgIFN0cmluZyB0ZXh0ID0gIkBwYWdlIjsKKyAgICBTdHJpbmdCdWls
ZGVyIHRleHQ7CisgICAgdGV4dC5hcHBlbmRMaXRlcmFsKCJAcGFnZSIpOwogICAgIGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvciA9IG1fcGFnZVJ1bGUtPnNlbGVjdG9yKCk7CiAgICAgaWYgKHNl
bGVjdG9yKSB7CiAgICAgICAgIFN0cmluZyBwYWdlU3BlY2lmaWNhdGlvbiA9IHNlbGVjdG9yLT5z
ZWxlY3RvclRleHQoKTsKLSAgICAgICAgaWYgKCFwYWdlU3BlY2lmaWNhdGlvbi5pc0VtcHR5KCkg
JiYgcGFnZVNwZWNpZmljYXRpb24gIT0gc3RhckF0b20pCi0gICAgICAgICAgICB0ZXh0ICs9ICIg
IiArIHBhZ2VTcGVjaWZpY2F0aW9uOworICAgICAgICBpZiAoIXBhZ2VTcGVjaWZpY2F0aW9uLmlz
RW1wdHkoKSAmJiBwYWdlU3BlY2lmaWNhdGlvbiAhPSBzdGFyQXRvbSkgeworICAgICAgICAgICAg
dGV4dC5hcHBlbmRMaXRlcmFsKCIgIik7CisgICAgICAgICAgICB0ZXh0LmFwcGVuZChwYWdlU3Bl
Y2lmaWNhdGlvbik7CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHRleHQ7CisgICAgcmV0
dXJuIHRleHQudG9TdHJpbmcoKTsKIH0KIAogdm9pZCBDU1NQYWdlUnVsZTo6c2V0U2VsZWN0b3JU
ZXh0KGNvbnN0IFN0cmluZyYgc2VsZWN0b3JUZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5j
cHAKaW5kZXggZWFiZWU0OTNhNDFhYjdlNDQyN2NmMjhmZDcwMzQ4MWIwYWQwODc5YS4uNWMyNjI1
NmE4YTY4YzA2NTM3MDgzMzExZTY4NGYxNjEwYjRhYTNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2Vs
ZWN0b3IuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC01MTUsMTYgKzUxNiwxNiBAQCBib29sIENTU1NlbGVjdG9yOjpvcGVyYXRvcj09KGNvbnN0
IENTU1NlbGVjdG9yJiBvdGhlcikKIAogU3RyaW5nIENTU1NlbGVjdG9yOjpzZWxlY3RvclRleHQo
KSBjb25zdAogewotICAgIFN0cmluZyBzdHIgPSAiIjsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cjsK
IAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4ID0gbV90YWcucHJlZml4KCk7CiAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBtX3RhZy5sb2NhbE5hbWUoKTsKICAgICBp
ZiAobV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Tm9uZSB8fCAhcHJlZml4LmlzTnVsbCgpIHx8IGxv
Y2FsTmFtZSAhPSBzdGFyQXRvbSkgewogICAgICAgICBpZiAocHJlZml4LmlzTnVsbCgpKQotICAg
ICAgICAgICAgc3RyID0gbG9jYWxOYW1lOworICAgICAgICAgICAgc3RyLmFwcGVuZChsb2NhbE5h
bWUpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN0ciA9IHByZWZpeC5zdHJpbmcoKTsK
LSAgICAgICAgICAgIHN0ci5hcHBlbmQoInwiKTsKKyAgICAgICAgICAgIHN0ci5hcHBlbmQocHJl
Zml4LnN0cmluZygpKTsKKyAgICAgICAgICAgIHN0ci5hcHBlbmQoJ3wnKTsKICAgICAgICAgICAg
IHN0ci5hcHBlbmQobG9jYWxOYW1lKTsKICAgICAgICAgfQogICAgIH0KQEAgLTUzMiw4MiArNTMz
LDgyIEBAIFN0cmluZyBDU1NTZWxlY3Rvcjo6c2VsZWN0b3JUZXh0KCkgY29uc3QKICAgICBjb25z
dCBDU1NTZWxlY3RvciogY3MgPSB0aGlzOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGlm
IChjcy0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsKLSAgICAgICAgICAgIHN0ciArPSAi
IyI7CisgICAgICAgICAgICBzdHIuYXBwZW5kKCcjJyk7CiAgICAgICAgICAgICBzZXJpYWxpemVJ
ZGVudGlmaWVyKGNzLT52YWx1ZSgpLCBzdHIpOwogICAgICAgICB9IGVsc2UgaWYgKGNzLT5tX21h
dGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykgewotICAgICAgICAgICAgc3RyICs9ICIuIjsKKyAg
ICAgICAgICAgIHN0ci5hcHBlbmQoJy4nKTsKICAgICAgICAgICAgIHNlcmlhbGl6ZUlkZW50aWZp
ZXIoY3MtPnZhbHVlKCksIHN0cik7CiAgICAgICAgIH0gZWxzZSBpZiAoY3MtPm1fbWF0Y2ggPT0g
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzIHx8IGNzLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQ
YWdlUHNldWRvQ2xhc3MpIHsKLSAgICAgICAgICAgIHN0ciArPSAiOiI7Ci0gICAgICAgICAgICBz
dHIgKz0gY3MtPnZhbHVlKCk7CisgICAgICAgICAgICBzdHIuYXBwZW5kKCc6Jyk7CisgICAgICAg
ICAgICBzdHIuYXBwZW5kKGNzLT52YWx1ZSgpKTsKIAogICAgICAgICAgICAgc3dpdGNoIChjcy0+
cHNldWRvVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIFBzZXVkb05vdDoKICAgICAgICAgICAg
ICAgICBpZiAoQ1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBjcy0+c2VsZWN0b3JMaXN0
KCkpCi0gICAgICAgICAgICAgICAgICAgIHN0ciArPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCktPnNl
bGVjdG9yVGV4dCgpOwotICAgICAgICAgICAgICAgIHN0ciArPSAiKSI7CisgICAgICAgICAgICAg
ICAgICAgIHN0ci5hcHBlbmQoc2VsZWN0b3JMaXN0LT5maXJzdCgpLT5zZWxlY3RvclRleHQoKSk7
CisgICAgICAgICAgICAgICAgc3RyLmFwcGVuZCgnKScpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBQc2V1ZG9MYW5nOgogICAgICAgICAgICAgY2FzZSBQc2V1ZG9O
dGhDaGlsZDoKICAgICAgICAgICAgIGNhc2UgUHNldWRvTnRoTGFzdENoaWxkOgogICAgICAgICAg
ICAgY2FzZSBQc2V1ZG9OdGhPZlR5cGU6CiAgICAgICAgICAgICBjYXNlIFBzZXVkb050aExhc3RP
ZlR5cGU6Ci0gICAgICAgICAgICAgICAgc3RyICs9IGNzLT5hcmd1bWVudCgpOwotICAgICAgICAg
ICAgICAgIHN0ciArPSAiKSI7CisgICAgICAgICAgICAgICAgc3RyLmFwcGVuZChjcy0+YXJndW1l
bnQoKSk7CisgICAgICAgICAgICAgICAgc3RyLmFwcGVuZCgnKScpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBQc2V1ZG9Bbnk6IHsKICAgICAgICAgICAgICAgICBD
U1NTZWxlY3RvciogZmlyc3RTdWJTZWxlY3RvciA9IGNzLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3Qo
KTsKICAgICAgICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzdWJTZWxlY3RvciA9IGZpcnN0
U3ViU2VsZWN0b3I7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6
bmV4dChzdWJTZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YlNlbGVjdG9y
ICE9IGZpcnN0U3ViU2VsZWN0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gIiwi
OwotICAgICAgICAgICAgICAgICAgICBzdHIgKz0gc3ViU2VsZWN0b3ItPnNlbGVjdG9yVGV4dCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgc3RyLmFwcGVuZCgnLCcpOworICAgICAgICAgICAg
ICAgICAgICBzdHIuYXBwZW5kKHN1YlNlbGVjdG9yLT5zZWxlY3RvclRleHQoKSk7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHN0ciArPSAiKSI7CisgICAgICAgICAgICAgICAg
c3RyLmFwcGVuZCgnKScpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIGlmIChjcy0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRv
RWxlbWVudCkgewotICAgICAgICAgICAgc3RyICs9ICI6OiI7Ci0gICAgICAgICAgICBzdHIgKz0g
Y3MtPnZhbHVlKCk7CisgICAgICAgICAgICBzdHIuYXBwZW5kTGl0ZXJhbCgiOjoiKTsKKyAgICAg
ICAgICAgIHN0ci5hcHBlbmQoY3MtPnZhbHVlKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGNzLT5p
c0F0dHJpYnV0ZVNlbGVjdG9yKCkpIHsKLSAgICAgICAgICAgIHN0ciArPSAiWyI7CisgICAgICAg
ICAgICBzdHIuYXBwZW5kKCdbJyk7CiAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCA9IGNzLT5hdHRyaWJ1dGUoKS5wcmVmaXgoKTsKICAgICAgICAgICAgIGlmICghcHJlZml4
LmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgc3RyLmFwcGVuZChwcmVmaXgpOwogICAgICAg
ICAgICAgICAgIHN0ci5hcHBlbmQoInwiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0
ciArPSBjcy0+YXR0cmlidXRlKCkubG9jYWxOYW1lKCk7CisgICAgICAgICAgICBzdHIuYXBwZW5k
KGNzLT5hdHRyaWJ1dGUoKS5sb2NhbE5hbWUoKSk7CiAgICAgICAgICAgICBzd2l0Y2ggKGNzLT5t
X21hdGNoKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RXhhY3Q6Ci0gICAg
ICAgICAgICAgICAgICAgIHN0ciArPSAiPSI7CisgICAgICAgICAgICAgICAgICAgIHN0ci5hcHBl
bmQoJz0nKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6U2V0OgogICAgICAgICAgICAgICAgICAgICAvLyBzZXQgaGFzIG5vIG9w
ZXJhdG9yIG9yIHZhbHVlLCBqdXN0IHRoZSBhdHRyTmFtZQotICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gIl0iOworICAgICAgICAgICAgICAgICAgICBzdHIuYXBwZW5kKCddJyk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6Okxp
c3Q6Ci0gICAgICAgICAgICAgICAgICAgIHN0ciArPSAifj0iOworICAgICAgICAgICAgICAgICAg
ICBzdHIuYXBwZW5kTGl0ZXJhbCgifj0iKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SHlwaGVuOgotICAgICAgICAgICAgICAg
ICAgICBzdHIgKz0gInw9IjsKKyAgICAgICAgICAgICAgICAgICAgc3RyLmFwcGVuZExpdGVyYWwo
Inw9Iik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OkJlZ2luOgotICAgICAgICAgICAgICAgICAgICBzdHIgKz0gIl49IjsKKyAg
ICAgICAgICAgICAgICAgICAgc3RyLmFwcGVuZExpdGVyYWwoIl49Iik7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkVuZDoKLSAg
ICAgICAgICAgICAgICAgICAgc3RyICs9ICIkPSI7CisgICAgICAgICAgICAgICAgICAgIHN0ci5h
cHBlbmRMaXRlcmFsKCIkPSIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpDb250YWluOgotICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gIio9IjsKKyAgICAgICAgICAgICAgICAgICAgc3RyLmFwcGVuZExpdGVyYWwoIio9Iik7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYg
KGNzLT5tX21hdGNoICE9IENTU1NlbGVjdG9yOjpTZXQpIHsKICAgICAgICAgICAgICAgICBzZXJp
YWxpemVTdHJpbmcoY3MtPnZhbHVlKCksIHN0cik7Ci0gICAgICAgICAgICAgICAgc3RyICs9ICJd
IjsKKyAgICAgICAgICAgICAgICBzdHIuYXBwZW5kKCddJyk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKGNzLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxl
Y3RvciB8fCAhY3MtPnRhZ0hpc3RvcnkoKSkKQEAgLTYxOCwxOSArNjE5LDIwIEBAIFN0cmluZyBD
U1NTZWxlY3Rvcjo6c2VsZWN0b3JUZXh0KCkgY29uc3QKICAgICBpZiAoQ1NTU2VsZWN0b3IqIHRh
Z0hpc3RvcnkgPSBjcy0+dGFnSGlzdG9yeSgpKSB7CiAgICAgICAgIFN0cmluZyB0YWdIaXN0b3J5
VGV4dCA9IHRhZ0hpc3RvcnktPnNlbGVjdG9yVGV4dCgpOwogICAgICAgICBpZiAoY3MtPnJlbGF0
aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFjZW50KQotICAgICAgICAgICAgc3RyID0g
dGFnSGlzdG9yeVRleHQgKyAiICsgIiArIHN0cjsKKyAgICAgICAgICAgIHJldHVybiB0YWdIaXN0
b3J5VGV4dCArICIgKyAiICsgc3RyLnRvU3RyaW5nKCk7CiAgICAgICAgIGVsc2UgaWYgKGNzLT5y
ZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50KQotICAgICAgICAgICAg
c3RyID0gdGFnSGlzdG9yeVRleHQgKyAiIH4gIiArIHN0cjsKKyAgICAgICAgICAgIHJldHVybiB0
YWdIaXN0b3J5VGV4dCArICIgfiAiICsgc3RyLnRvU3RyaW5nKCk7CiAgICAgICAgIGVsc2UgaWYg
KGNzLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpDaGlsZCkKLSAgICAgICAgICAgIHN0ciA9
IHRhZ0hpc3RvcnlUZXh0ICsgIiA+ICIgKyBzdHI7CisgICAgICAgICAgICByZXR1cm4gdGFnSGlz
dG9yeVRleHQgKyAiID4gIiArIHN0ci50b1N0cmluZygpOwogICAgICAgICBlbHNlIGlmIChjcy0+
cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudCkKLSAgICAgICAgICAg
IHN0ciA9IHRhZ0hpc3RvcnlUZXh0ICsgc3RyOwotICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXR1cm4gdGFnSGlzdG9yeVRleHQgKyBzdHIudG9TdHJpbmcoKTsKKyAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAvLyBEZXNjZW5kYW50Ci0gICAgICAgICAgICBzdHIgPSB0YWdIaXN0b3J5VGV4
dCArICIgIiArIHN0cjsKKyAgICAgICAgICAgIHJldHVybiB0YWdIaXN0b3J5VGV4dCArICIgIiAr
IHN0ci50b1N0cmluZygpOworICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHN0cjsKKyAg
ICByZXR1cm4gc3RyLnRvU3RyaW5nKCk7CiB9CiAKIHZvaWQgQ1NTU2VsZWN0b3I6OnNldEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvckNvbW1hbmQuY3BwCmluZGV4IDQ3OGFiNmM1YWEwN2IxOTc0YmEwYWVkY2U1MmRkNGRlNDQ5
OTk3MTMuLjQyZTE1ZWJiMmI0Zjg4NjA0Y2Q1NzZiMmM4MTNkZjViYjE3M2NhYzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcApAQCAtMTM5LDcgKzEzOSw3IEBAIHN0
YXRpYyBib29sIGV4ZWN1dGVUb2dnbGVTdHlsZUluTGlzdChGcmFtZSogZnJhbWUsIEVkaXRvckNv
bW1hbmRTb3VyY2Ugc291cmNlLCBFCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJlZlB0
cjxDU1NWYWx1ZT4gc2VsZWN0ZWRDU1NWYWx1ZSA9IHNlbGVjdGlvblN0eWxlLT5zdHlsZSgpLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwotICAgIFN0cmluZyBuZXdTdHlsZSA9ICJu
b25lIjsKKyAgICBTdHJpbmcgbmV3U3R5bGUgPSBBU0NJSUxpdGVyYWwoIm5vbmUiKTsKICAgICBp
ZiAoc2VsZWN0ZWRDU1NWYWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewogICAgICAgICBSZWZQdHI8Q1NT
VmFsdWVMaXN0PiBzZWxlY3RlZENTU1ZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlz
dCo+KHNlbGVjdGVkQ1NTVmFsdWUuZ2V0KCkpOwogICAgICAgICBpZiAoIXNlbGVjdGVkQ1NTVmFs
dWVMaXN0LT5yZW1vdmVBbGwodmFsdWUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TbWFydFJlcGxhY2VJQ1UuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TbWFydFJl
cGxhY2VJQ1UuY3BwCmluZGV4IGMzNTA3YWQwYzFjM2U3ODhkNDk4NDUzYTdiZTQ5MGM1OWVlMjVj
MzYuLjI0ZWMzZDVlNmFkODQ2ZmU4OTk4NDE4NzUwN2FlMmFiZjhmNTY2NjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgc3Rh
dGljIFVTZXQqIGdldFNtYXJ0U2V0KGJvb2wgaXNQcmV2aW91c0NoYXJhY3RlcikKICAgICBpZiAo
IXNtYXJ0U2V0KSB7CiAgICAgICAgIC8vIFdoaXRlc3BhY2UgYW5kIG5ld2xpbmUgKGtDRkNoYXJh
Y3RlclNldFdoaXRlc3BhY2VBbmROZXdsaW5lKQogICAgICAgICBVRXJyb3JDb2RlIGVjID0gVV9a
RVJPX0VSUk9SOwotICAgICAgICBTdHJpbmcgd2hpdGVzcGFjZUFuZE5ld2xpbmUgPSAiW1s6V1Nw
YWNlOl0gW1xcdTAwMEFcXHUwMDBCXFx1MDAwQ1xcdTAwMERcXHUwMDg1XV0iOworICAgICAgICBT
dHJpbmcgd2hpdGVzcGFjZUFuZE5ld2xpbmUgPSBBU0NJSUxpdGVyYWwoIltbOldTcGFjZTpdIFtc
XHUwMDBBXFx1MDAwQlxcdTAwMENcXHUwMDBEXFx1MDA4NV1dIik7CiAgICAgICAgIHNtYXJ0U2V0
ID0gdXNldF9vcGVuUGF0dGVybih3aGl0ZXNwYWNlQW5kTmV3bGluZS5jaGFyYWN0ZXJzKCksIHdo
aXRlc3BhY2VBbmROZXdsaW5lLmxlbmd0aCgpLCAmZWMpOwogICAgICAgICBBU1NFUlQoVV9TVUND
RVNTKGVjKSk7CiAKQEAgLTcxLDE0ICs3MSwxNCBAQCBzdGF0aWMgVVNldCogZ2V0U21hcnRTZXQo
Ym9vbCBpc1ByZXZpb3VzQ2hhcmFjdGVyKQogICAgICAgICB1c2V0X2FkZFJhbmdlKHNtYXJ0U2V0
LCAweDJGODAwLCAweDJGODAwICsgMHgwMjFFKTsgLy8gQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dy
YXBocyAoMHgyRjgwMCAtIDB4MkZBMUQpCiAKICAgICAgICAgaWYgKGlzUHJldmlvdXNDaGFyYWN0
ZXIpIHsKLSAgICAgICAgICAgIGFkZEFsbENvZGVQb2ludHMoc21hcnRTZXQsICIoW1wiXCcjJC8t
YHsiKTsKKyAgICAgICAgICAgIGFkZEFsbENvZGVQb2ludHMoc21hcnRTZXQsIEFTQ0lJTGl0ZXJh
bCgiKFtcIlwnIyQvLWB7IikpOwogICAgICAgICAgICAgcHJlU21hcnRTZXQgPSBzbWFydFNldDsK
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFkZEFsbENvZGVQb2ludHMoc21hcnRTZXQs
ICIpXS4sOzo/XCchXCIlKi0vfSIpOworICAgICAgICAgICAgYWRkQWxsQ29kZVBvaW50cyhzbWFy
dFNldCwgQVNDSUlMaXRlcmFsKCIpXS4sOzo/XCchXCIlKi0vfSIpKTsKIAogICAgICAgICAgICAg
Ly8gUHVuY3R1YXRpb24gKGtDRkNoYXJhY3RlclNldFB1bmN0dWF0aW9uKQogICAgICAgICAgICAg
VUVycm9yQ29kZSBlYyA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgICAgIFN0cmluZyBwdW5jdHVh
dGlvbkNsYXNzID0gIls6UDpdIjsKKyAgICAgICAgICAgIFN0cmluZyBwdW5jdHVhdGlvbkNsYXNz
ID0gQVNDSUlMaXRlcmFsKCJbOlA6XSIpOwogICAgICAgICAgICAgVVNldCogaWN1UHVuY3QgPSB1
c2V0X29wZW5QYXR0ZXJuKHB1bmN0dWF0aW9uQ2xhc3MuY2hhcmFjdGVycygpLCBwdW5jdHVhdGlv
bkNsYXNzLmxlbmd0aCgpLCAmZWMpOwogICAgICAgICAgICAgQVNTRVJUKFVfU1VDQ0VTUyhlYykp
OwogICAgICAgICAgICAgdXNldF9hZGRBbGwoc21hcnRTZXQsIGljdVB1bmN0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcAppbmRleCA1ZDliYTJkZWU2MDJkZDAyZWIwOTgyZDYyOTUxM2JmYTk3
NjlmMjg4Li45YWYxODgzZjc3NDNkNWMzMDJkMjJiY2M1MTRjNTVjMThkMTI3MWE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCkBAIC03OTQsNyArNzk0LDcgQEAgc3RhdGljIHZvaWQgZmls
bENvbnRhaW5lckZyb21TdHJpbmcoQ29udGFpbmVyTm9kZSogcGFyYWdyYXBoLCBjb25zdCBTdHJp
bmcmIHN0cmkKIAogICAgIFZlY3RvcjxTdHJpbmc+IHRhYkxpc3Q7CiAgICAgc3RyaW5nLnNwbGl0
KCdcdCcsIHRydWUsIHRhYkxpc3QpOwotICAgIFN0cmluZyB0YWJUZXh0ID0gIiI7CisgICAgU3Ry
aW5nIHRhYlRleHQgPSBlbXB0eVN0cmluZygpOwogICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAg
IHNpemVfdCBudW1FbnRyaWVzID0gdGFiTGlzdC5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1FbnRyaWVzOyArK2kpIHsKQEAgLTgwNSw3ICs4MDUsNyBAQCBzdGF0aWMgdm9p
ZCBmaWxsQ29udGFpbmVyRnJvbVN0cmluZyhDb250YWluZXJOb2RlKiBwYXJhZ3JhcGgsIGNvbnN0
IFN0cmluZyYgc3RyaQogICAgICAgICAgICAgaWYgKCF0YWJUZXh0LmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgICAgIHBhcmFncmFwaC0+YXBwZW5kQ2hpbGQoY3JlYXRlVGFiU3BhbkVsZW1lbnQo
ZG9jdW1lbnQsIHRhYlRleHQpLCBlYyk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFlYyk7Ci0g
ICAgICAgICAgICAgICAgdGFiVGV4dCA9ICIiOworICAgICAgICAgICAgICAgIHRhYlRleHQgPSBl
bXB0eVN0cmluZygpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgUmVmUHRyPE5vZGU+IHRl
eHROb2RlID0gZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKHN0cmluZ1dpdGhSZWJhbGFuY2VkV2hp
dGVzcGFjZShzLCBmaXJzdCwgaSArIDEgPT0gbnVtRW50cmllcykpOwogICAgICAgICAgICAgcGFy
YWdyYXBoLT5hcHBlbmRDaGlsZCh0ZXh0Tm9kZS5yZWxlYXNlKCksIGVjKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCmluZGV4IDI0MTgxNmZmMzA5YzQ0YWE2NGQyN2U4
YzBmNzI5ODU0ZTIyYWVjNTYuLjc1NmMwYmIxY2YwMzZiNDg1ZDBiM2Y1ZDNmZThiMmM2YTQ0MzQ4
ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcApAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU3R5bGVJbmhlcml0
ZWREYXRhLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03MCwxNCArNzEsMTQgQEAgdm9p
ZCBIVE1MVGl0bGVFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIs
IE5vZGUqIGJlZm9yZUNoYW5nZSwKIAogU3RyaW5nIEhUTUxUaXRsZUVsZW1lbnQ6OnRleHQoKSBj
b25zdAogewotICAgIFN0cmluZyB2YWwgPSAiIjsKLSAgICAKKyAgICBTdHJpbmdCdWlsZGVyIHJl
c3VsdDsKKwogICAgIGZvciAoTm9kZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRT
aWJsaW5nKCkpIHsKICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgICAgIHZh
bCArPSB0b1RleHQobiktPmRhdGEoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodG9UZXh0
KG4pLT5kYXRhKCkpOwogICAgIH0KIAotICAgIHJldHVybiB2YWw7CisgICAgcmV0dXJuIHJlc3Vs
dC50b1N0cmluZygpOwogfQogCiBTdHJpbmdXaXRoRGlyZWN0aW9uIEhUTUxUaXRsZUVsZW1lbnQ6
OnRleHRXaXRoRGlyZWN0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKaW5kZXggYzEyYTU2YjBkMGYyMWQwYzQ4YTc4YWVkNTgw
ZGQxZGJlOTdkYWYxNC4uYWM1OTAxODFmYzJjNzBiNTU1OTliOGVhODAyMWIzZTUyOTRiNjZlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2Vu
dC5jcHAKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlk
RmFpbExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdQogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKGVycm9yLmlzQ2FuY2VsbGF0aW9uKCkpIC8vIFJlcG9ydCBmYWls
dXJlcyBvbmx5LgogICAgICAgICByZXR1cm47Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSAiRmFpbGVk
IHRvIGxvYWQgcmVzb3VyY2UiOworICAgIFN0cmluZyBtZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gbG9hZCByZXNvdXJjZSIpOwogICAgIGlmICghZXJyb3IubG9jYWxpemVkRGVzY3Jp
cHRpb24oKS5pc0VtcHR5KCkpCiAgICAgICAgIG1lc3NhZ2UgKz0gIjogIiArIGVycm9yLmxvY2Fs
aXplZERlc2NyaXB0aW9uKCk7CiAgICAgU3RyaW5nIHJlcXVlc3RJZCA9IElkZW50aWZpZXJzRmFj
dG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNw
cAppbmRleCAwM2Y3OGU5ODg4YzExYzJhMDQyZTA1MDEwNDY0NTljMDcxZTY1MzJiLi44MDc5OTk3
Y2FjODdiYWNhZGUzNjE0YmEwM2NkM2ZhMWZhNTU3OTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
U291cmNlLmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJUaHJl
YWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTIxMCwyMCArMjExLDIyIEBAIHZvaWQgRXZlbnRTb3Vy
Y2U6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwCiAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBjaGFyc2V0LCB0aGUgb25seSBhbGxv
d2VkIHZhbHVlIGlzIFVURi04IChjYXNlLWluc2Vuc2l0aXZlKS4KICAgICAgICAgcmVzcG9uc2VJ
c1ZhbGlkID0gY2hhcnNldC5pc0VtcHR5KCkgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoY2hhcnNldCwg
IlVURi04Iik7CiAgICAgICAgIGlmICghcmVzcG9uc2VJc1ZhbGlkKSB7Ci0gICAgICAgICAgICBT
dHJpbmcgbWVzc2FnZSA9ICJFdmVudFNvdXJjZSdzIHJlc3BvbnNlIGhhcyBhIGNoYXJzZXQgKFwi
IjsKLSAgICAgICAgICAgIG1lc3NhZ2UgKz0gY2hhcnNldDsKLSAgICAgICAgICAgIG1lc3NhZ2Ug
Kz0gIlwiKSB0aGF0IGlzIG5vdCBVVEYtOC4gQWJvcnRpbmcgdGhlIGNvbm5lY3Rpb24uIjsKKyAg
ICAgICAgICAgIFN0cmluZ0J1aWxkZXIgbWVzc2FnZTsKKyAgICAgICAgICAgIG1lc3NhZ2UuYXBw
ZW5kTGl0ZXJhbCgiRXZlbnRTb3VyY2UncyByZXNwb25zZSBoYXMgYSBjaGFyc2V0IChcIiIpOwor
ICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoY2hhcnNldCk7CisgICAgICAgICAgICBtZXNzYWdl
LmFwcGVuZExpdGVyYWwoIlwiKSB0aGF0IGlzIG5vdCBVVEYtOC4gQWJvcnRpbmcgdGhlIGNvbm5l
Y3Rpb24uIik7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2UgYXJlIG1pc3NpbmcgdGhlIHNvdXJj
ZSBsaW5lLgotICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRDb25zb2xl
TWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZl
bCwgbWVzc2FnZSk7CisgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENv
bnNvbGVNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2Fn
ZUxldmVsLCBtZXNzYWdlLnRvU3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgLy8gVG8ga2VlcCB0aGUgc2lnbmFsLXRvLW5vaXNlIHJhdGlvIGxvdywgd2Ugb25seSBs
b2cgMjAwLXJlc3BvbnNlIHdpdGggYW4gaW52YWxpZCBNSU1FIHR5cGUuCiAgICAgICAgIGlmIChz
dGF0dXNDb2RlID09IDIwMCAmJiAhbWltZVR5cGVJc1ZhbGlkKSB7Ci0gICAgICAgICAgICBTdHJp
bmcgbWVzc2FnZSA9ICJFdmVudFNvdXJjZSdzIHJlc3BvbnNlIGhhcyBhIE1JTUUgdHlwZSAoXCIi
OwotICAgICAgICAgICAgbWVzc2FnZSArPSByZXNwb25zZS5taW1lVHlwZSgpOwotICAgICAgICAg
ICAgbWVzc2FnZSArPSAiXCIpIHRoYXQgaXMgbm90IFwidGV4dC9ldmVudC1zdHJlYW1cIi4gQWJv
cnRpbmcgdGhlIGNvbm5lY3Rpb24uIjsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgbWVzc2Fn
ZTsKKyAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgiRXZlbnRTb3VyY2UncyByZXNw
b25zZSBoYXMgYSBNSU1FIHR5cGUgKFwiIik7CisgICAgICAgICAgICBtZXNzYWdlLmFwcGVuZChy
ZXNwb25zZS5taW1lVHlwZSgpKTsKKyAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgi
XCIpIHRoYXQgaXMgbm90IFwidGV4dC9ldmVudC1zdHJlYW1cIi4gQWJvcnRpbmcgdGhlIGNvbm5l
Y3Rpb24uIik7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2UgYXJlIG1pc3NpbmcgdGhlIHNvdXJj
ZSBsaW5lLgotICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRDb25zb2xl
TWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZl
bCwgbWVzc2FnZSk7CisgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENv
bnNvbGVNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2Fn
ZUxldmVsLCBtZXNzYWdlLnRvU3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0xvY2FsaXplZFN0cmluZ3NC
bGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvTG9jYWxp
emVkU3RyaW5nc0JsYWNrQmVycnkuY3BwCmluZGV4IDczMmM0ZGY3M2I2OGEyMTE5YjUzNDI0ZjZk
Y2I1MGNlZjhiNGMyY2EuLjg3MmJiZDcxODE2NGFiM2E4NDUyYzM0MDdmY2RiOTYwOGU4Y2NmMmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvTG9jYWxpemVk
U3RyaW5nc0JsYWNrQmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNr
YmVycnkvTG9jYWxpemVkU3RyaW5nc0JsYWNrQmVycnkuY3BwCkBAIC02Niw3ICs2Niw3IEBAIHN0
YXRpYyBTdHJpbmcgcGxhdGZvcm1MYW5ndWFnZSgpCiAgICAgLy8gZ2V0TG9jYWxlKCkgcmV0dXJu
cyBhIFBPU0lYIGxvY2FsZSB3aGljaCB1c2VzICdfJyB0byBzZXBhcmF0ZSBsYW5ndWFnZSBhbmQg
Y291bnRyeS4KICAgICAvLyBIb3dldmVyLCB3ZSB1c2UgJy0nIGluc3RlYWQgb2YgJ18nIGluIFdl
YkNvcmUgKGUuZy4gZW5fdXMgc2hvdWxkIHJlYWQgZW4tdXMpCiAgICAgc2l6ZV90IHVuZGVyc2Nv
cmVQb3NpdGlvbiA9IGxhbmcuZmluZCgnXycpOwotICAgIFN0cmluZyByZXBsYWNlV2l0aCA9ICIt
IjsKKyAgICBTdHJpbmcgcmVwbGFjZVdpdGggPSBBU0NJSUxpdGVyYWwoIi0iKTsKICAgICBpZiAo
dW5kZXJzY29yZVBvc2l0aW9uICE9IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gbGFuZy5yZXBs
YWNlKHVuZGVyc2NvcmVQb3NpdGlvbiwgcmVwbGFjZVdpdGgubGVuZ3RoKCksIHJlcGxhY2VXaXRo
KTsKICAgICByZXR1cm4gbGFuZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5jcHAKaW5kZXggMDgzZTg4MmU5OTE3Y2YwMzYyNTZlOGViMWRi
Mjk4MzM3NzAyMjA0Zi4uMmFlM2ZlNzg3MGFlNDcyMmQ0MzFmMDA1MDllMDc2ODk2ZmMwOWM3ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRp
b24uaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmbmRlZiBOREVCVUcKQEAgLTMyMywxMCArMzI0LDExIEBA
IHZvaWQgR3JhcGhpY3NMYXllcjo6cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJCiBTdHJpbmcgR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9u
TmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KQogewogICAgIC8v
IHwgaXMgbm90IGEgdmFsaWQgaWRlbnRpZmllciBjaGFyYWN0ZXIgaW4gQ1NTLCBzbyB0aGlzIGNh
biBuZXZlciBjb25mbGljdCB3aXRoIGEga2V5ZnJhbWUgaWRlbnRpZmllci4KLSAgICBTdHJpbmcg
aWQgPSAiLXx0cmFuc2l0aW9uIjsKKyAgICBTdHJpbmdCdWlsZGVyIGlkOworICAgIGlkLmFwcGVu
ZExpdGVyYWwoIi18dHJhbnNpdGlvbiIpOwogICAgIGlkLmFwcGVuZChzdGF0aWNfY2FzdDxjaGFy
Pihwcm9wZXJ0eSkpOwogICAgIGlkLmFwcGVuZCgnLScpOwotICAgIHJldHVybiBpZDsKKyAgICBy
ZXR1cm4gaWQudG9TdHJpbmcoKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyOjpzdXNwZW5kQW5p
bWF0aW9ucyhkb3VibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2JsYWNrYmVycnkvcnNzL1JTU0F0b21QYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NBdG9tUGFyc2VyLmNwcAppbmRleCA2YWY2
YmM0MjE1NGE5Mjc4MDA2ZWE5OTcwYzAwODg5ZGQ0NmMwMDEwLi5kYmFiOTY5ZThkOGI3YzM5NzVl
NmQ2N2Q4Y2YwM2E3MmRkMDZlOGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTU0F0b21QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTQXRvbVBhcnNlci5jcHAK
QEAgLTIzMCw2ICsyMzAsOCBAQCBTdHJpbmcgUlNTQXRvbVBhcnNlcjo6cGFyc2VDb250ZW50KGNv
bnN0IFN0cmluZyYgYmFzZSwgeG1sTm9kZSogbm9kZSkKICAgICAvLyBTZWU6IGh0dHA6Ly90b29s
cy5pZXRmLm9yZy9odG1sL3JmYzQyODcjcGFnZS0xNgogCiAgICAgQkxBQ0tCRVJSWV9BU1NFUlQo
bm9kZSk7CisgICAgLy8gV2h5IGRvZXMgQmxhY2tiZXJyeSBoYXZlIGl0cyBvd24gUlNTIHBhcnNl
cj8KKyAgICAvLyBGSVhNRTogY29udGVudCBzaG91bGQgYmUgYSBTdHJpbmdCdWlsZGVyLgogICAg
IFN0cmluZyBjb250ZW50OwogICAgIFN0cmluZyB0eXBlID0gImRlZmF1bHQiOwogICAgIFN0cmlu
ZyBzcmM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0
YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNw
cAppbmRleCAzZmQzZDAyM2QwOTRlMmIxYzY1ZDI3NzZmYjJjYTg5Y2U4OGYwZjU0Li44YWI2MjZi
MTJhZmFjZjY5MjJkN2Q3YmZiMjg4MmYzNjVkMjRkMGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgYm9vbCBT
UUxpdGVEYXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIGZvcldlYlNR
TERhdGFiYXNlKQogICAgIGVsc2UKICAgICAgICAgbV9vcGVuRXJyb3JNZXNzYWdlID0gInNxbGl0
ZV9vcGVuIHJldHVybmVkIG51bGwiOwogCi0gICAgaWYgKCFTUUxpdGVTdGF0ZW1lbnQoKnRoaXMs
ICJQUkFHTUEgdGVtcF9zdG9yZSA9IE1FTU9SWTsiKS5leGVjdXRlQ29tbWFuZCgpKQorICAgIGlm
ICghU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBBU0NJSUxpdGVyYWwoIlBSQUdNQSB0ZW1wX3N0b3Jl
ID0gTUVNT1JZOyIpKS5leGVjdXRlQ29tbWFuZCgpKQogICAgICAgICBMT0dfRVJST1IoIlNRTGl0
ZSBkYXRhYmFzZSBjb3VsZCBub3Qgc2V0IHRlbXBfc3RvcmUgdG8gbWVtb3J5Iik7CiAKICAgICBy
ZXR1cm4gaXNPcGVuKCk7CkBAIC0xNDAsOSArMTQwLDkgQEAgYm9vbCBTUUxpdGVEYXRhYmFzZTo6
aXNJbnRlcnJ1cHRlZCgpCiB2b2lkIFNRTGl0ZURhdGFiYXNlOjpzZXRGdWxsc3luYyhib29sIGZz
eW5jKSAKIHsKICAgICBpZiAoZnN5bmMpIAotICAgICAgICBleGVjdXRlQ29tbWFuZCgiUFJBR01B
IGZ1bGxmc3luYyA9IDE7Iik7CisgICAgICAgIGV4ZWN1dGVDb21tYW5kKEFTQ0lJTGl0ZXJhbCgi
UFJBR01BIGZ1bGxmc3luYyA9IDE7IikpOwogICAgIGVsc2UKLSAgICAgICAgZXhlY3V0ZUNvbW1h
bmQoIlBSQUdNQSBmdWxsZnN5bmMgPSAwOyIpOworICAgICAgICBleGVjdXRlQ29tbWFuZChBU0NJ
SUxpdGVyYWwoIlBSQUdNQSBmdWxsZnN5bmMgPSAwOyIpKTsKIH0KIAogaW50NjRfdCBTUUxpdGVE
YXRhYmFzZTo6bWF4aW11bVNpemUoKQpAQCAtMTUyLDcgKzE1Miw3IEBAIGludDY0X3QgU1FMaXRl
RGF0YWJhc2U6Om1heGltdW1TaXplKCkKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7Ci0g
ICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgbWF4X3BhZ2Vf
Y291bnQiKTsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgQVNDSUlM
aXRlcmFsKCJQUkFHTUEgbWF4X3BhZ2VfY291bnQiKSk7CiAgICAgICAgIG1heFBhZ2VDb3VudCA9
IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcih0
cnVlKTsKICAgICB9CkBAIC0xOTQsNyArMTk0LDcgQEAgaW50IFNRTGl0ZURhdGFiYXNlOjpwYWdl
U2l6ZSgpCiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAg
ICAgICAgZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7CiAgICAgICAgIAotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIHBhZ2Vfc2l6ZSIpOworICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCBBU0NJSUxpdGVyYWwoIlBSQUdNQSBwYWdl
X3NpemUiKSk7CiAgICAgICAgIG1fcGFnZVNpemUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDAp
OwogICAgICAgICAKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsKQEAgLTIxMSw3ICsy
MTEsNyBAQCBpbnQ2NF90IFNRTGl0ZURhdGFiYXNlOjpmcmVlU3BhY2VTaXplKCkKICAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgICAgICBlbmFibGVBdXRo
b3JpemVyKGZhbHNlKTsKICAgICAgICAgLy8gTm90ZTogZnJlZWxpc3RfY291bnQgd2FzIGFkZGVk
IGluIFNRTGl0ZSAzLjQuMS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhp
cywgIlBSQUdNQSBmcmVlbGlzdF9jb3VudCIpOworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KCp0aGlzLCBBU0NJSUxpdGVyYWwoIlBSQUdNQSBmcmVlbGlzdF9jb3VudCIpKTsKICAg
ICAgICAgZnJlZWxpc3RDb3VudCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKICAgICAg
ICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsKICAgICB9CkBAIC0yMjYsNyArMjI2LDcgQEAgaW50
NjRfdCBTUUxpdGVEYXRhYmFzZTo6dG90YWxTaXplKCkKICAgICB7CiAgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcihm
YWxzZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEg
cGFnZV9jb3VudCIpOworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCBB
U0NJSUxpdGVyYWwoIlBSQUdNQSBwYWdlX2NvdW50IikpOwogICAgICAgICBwYWdlQ291bnQgPSBz
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1
ZSk7CiAgICAgfQpAQCAtMjY5LDkgKzI2OSw5IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6OnRhYmxl
RXhpc3RzKGNvbnN0IFN0cmluZyYgdGFibGVuYW1lKQogewogICAgIGlmICghaXNPcGVuKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICBTdHJpbmcgc3RhdGVtZW50ID0g
IlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ3RhYmxlJyBBTkQg
bmFtZSA9ICciICsgdGFibGVuYW1lICsgIic7IjsKLSAgICAKKwogICAgIFNRTGl0ZVN0YXRlbWVu
dCBzcWwoKnRoaXMsIHN0YXRlbWVudCk7CiAgICAgc3FsLnByZXBhcmUoKTsKICAgICByZXR1cm4g
c3FsLnN0ZXAoKSA9PSBTUUxJVEVfUk9XOwpAQCAtMjc5LDcgKzI3OSw3IEBAIGJvb2wgU1FMaXRl
RGF0YWJhc2U6OnRhYmxlRXhpc3RzKGNvbnN0IFN0cmluZyYgdGFibGVuYW1lKQogCiB2b2lkIFNR
TGl0ZURhdGFiYXNlOjpjbGVhckFsbFRhYmxlcygpCiB7Ci0gICAgU3RyaW5nIHF1ZXJ5ID0gIlNF
TEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZSc7IjsKKyAgICBT
dHJpbmcgcXVlcnkgPSBBU0NJSUxpdGVyYWwoIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3Rl
ciBXSEVSRSB0eXBlPSd0YWJsZSc7Iik7CiAgICAgVmVjdG9yPFN0cmluZz4gdGFibGVzOwogICAg
IGlmICghU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBxdWVyeSkucmV0dXJuVGV4dFJlc3VsdHMoMCwg
dGFibGVzKSkgewogICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJVbmFibGUgdG8gcmV0cmlldmUg
bGlzdCBvZiB0YWJsZXMgZnJvbSBkYXRhYmFzZSIpOwpAQCAtMjk2LDcgKzI5Niw3IEBAIHZvaWQg
U1FMaXRlRGF0YWJhc2U6OmNsZWFyQWxsVGFibGVzKCkKIAogaW50IFNRTGl0ZURhdGFiYXNlOjpy
dW5WYWN1dW1Db21tYW5kKCkKIHsKLSAgICBpZiAoIWV4ZWN1dGVDb21tYW5kKCJWQUNVVU07Iikp
CisgICAgaWYgKCFleGVjdXRlQ29tbWFuZChBU0NJSUxpdGVyYWwoIlZBQ1VVTTsiKSkpCiAgICAg
ICAgIExPRyhTUUxEYXRhYmFzZSwgIlVuYWJsZSB0byB2YWN1dW0gZGF0YWJhc2UgLSAlcyIsIGxh
c3RFcnJvck1zZygpKTsKICAgICByZXR1cm4gbGFzdEVycm9yKCk7CiB9CkBAIC0zMDYsNyArMzA2
LDcgQEAgaW50IFNRTGl0ZURhdGFiYXNlOjpydW5JbmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQoKQog
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICBlbmFibGVBdXRo
b3JpemVyKGZhbHNlKTsKIAotICAgIGlmICghZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSBpbmNyZW1l
bnRhbF92YWN1dW0iKSkKKyAgICBpZiAoIWV4ZWN1dGVDb21tYW5kKEFTQ0lJTGl0ZXJhbCgiUFJB
R01BIGluY3JlbWVudGFsX3ZhY3V1bSIpKSkKICAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiVW5h
YmxlIHRvIHJ1biBpbmNyZW1lbnRhbCB2YWN1dW0gLSAlcyIsIGxhc3RFcnJvck1zZygpKTsKIAog
ICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CkBAIC00NTcsNyArNDU3LDcgQEAgYm9vbCBTUUxp
dGVEYXRhYmFzZTo6aXNBdXRvQ29tbWl0T24oKSBjb25zdAogCiBib29sIFNRTGl0ZURhdGFiYXNl
Ojp0dXJuT25JbmNyZW1lbnRhbEF1dG9WYWN1dW0oKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgYXV0b192YWN1dW0iKTsKKyAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KCp0aGlzLCBBU0NJSUxpdGVyYWwoIlBSQUdNQSBhdXRvX3ZhY3V1bSIpKTsK
ICAgICBpbnQgYXV0b1ZhY3V1bU1vZGUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOwogICAg
IGludCBlcnJvciA9IGxhc3RFcnJvcigpOwogCkBAIC00NzQsMTAgKzQ3NCwxMCBAQCBib29sIFNR
TGl0ZURhdGFiYXNlOjp0dXJuT25JbmNyZW1lbnRhbEF1dG9WYWN1dW0oKQogICAgIGNhc2UgQXV0
b1ZhY3V1bUluY3JlbWVudGFsOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIEF1dG9W
YWN1dW1GdWxsOgotICAgICAgICByZXR1cm4gZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSBhdXRvX3Zh
Y3V1bSA9IDIiKTsKKyAgICAgICAgcmV0dXJuIGV4ZWN1dGVDb21tYW5kKEFTQ0lJTGl0ZXJhbCgi
UFJBR01BIGF1dG9fdmFjdXVtID0gMiIpKTsKICAgICBjYXNlIEF1dG9WYWN1dW1Ob25lOgogICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGlmICghZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSBhdXRvX3ZhY3V1
bSA9IDIiKSkKKyAgICAgICAgaWYgKCFleGVjdXRlQ29tbWFuZChBU0NJSUxpdGVyYWwoIlBSQUdN
QSBhdXRvX3ZhY3V1bSA9IDIiKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IHJ1blZhY3V1bUNvbW1hbmQoKTsKICAgICAgICAgZXJyb3IgPSBsYXN0RXJyb3IoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAppbmRleCBlZTAyNTVl
MTI4NThlYTM5YjFiYzk0NjY1MTI5MDczYzRkY2ExOTRkLi4wYWIwZDcyODMyZjQ4NmI3NGRkYjk4
MGUxYzliNGQ2ZWM2MTJlYWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0Zp
bGVTeXN0ZW1XaW4uY3BwCkBAIC0xOTgsNyArMTk4LDcgQEAgU3RyaW5nIGRpcmVjdG9yeU5hbWUo
Y29uc3QgU3RyaW5nJiBwYXRoKQogCiBzdGF0aWMgU3RyaW5nIGJ1bmRsZU5hbWUoKQogewotICAg
IHN0YXRpYyBTdHJpbmcgbmFtZSA9ICJXZWJLaXQiOworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBuYW1lLCAoQVNDSUlMaXRlcmFsKCJXZWJLaXQiKSkpOwogCiAjaWYgVVNFKENGKQog
ICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkOwpAQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyBT
dHJpbmcgc3RvcmFnZURpcmVjdG9yeShEV09SRCBwYXRoSWRlbnRpZmllcikKICAgICBidWZmZXIu
cmVzaXplKHdjc2xlbihidWZmZXIuZGF0YSgpKSk7CiAgICAgU3RyaW5nIGRpcmVjdG9yeSA9IFN0
cmluZzo6YWRvcHQoYnVmZmVyKTsKIAotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcgY29tcGFueU5h
bWVEaXJlY3RvcnkgPSAiQXBwbGUgQ29tcHV0ZXJcXCI7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChTdHJpbmcsIGNvbXBhbnlOYW1lRGlyZWN0b3J5LCAoQVNDSUlMaXRlcmFsKCJBcHBsZSBDb21w
dXRlclxcIikpKTsKICAgICBkaXJlY3RvcnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGly
ZWN0b3J5LCBjb21wYW55TmFtZURpcmVjdG9yeSArIGJ1bmRsZU5hbWUoKSk7CiAgICAgaWYgKCFt
YWtlQWxsRGlyZWN0b3JpZXMoZGlyZWN0b3J5KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCmluZGV4IDAwMjM4MGY1Zjk1M2Y5
YmVlMmM1NjVlOWNhNWMxMzJhZDRjMGFmNGEuLjA4NWEzMThiNDIxYTdhZDhmZGZjNjcwYjYzZDMx
YWY4MmUyNjZlNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3Ry
ZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKQEAg
LTE0MCw3ICsxNDAsNyBAQCB2b2lkIFBsdWdpblN0cmVhbTo6c3RhcnRTdHJlYW0oKQogCiAgICAg
aWYgKG1fcmVzb3VyY2VSZXNwb25zZS5pc0hUVFAoKSkgewogICAgICAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIFN0cmluZyBzZXBhcmF0b3IoIjogIik7CisgICAgICAg
IFN0cmluZyBzZXBhcmF0b3IgPSBBU0NJSUxpdGVyYWwoIjogIik7CiAKICAgICAgICAgU3RyaW5n
IHN0YXR1c0xpbmUgPSAiSFRUUCAiICsgU3RyaW5nOjpudW1iZXIobV9yZXNvdXJjZVJlc3BvbnNl
Lmh0dHBTdGF0dXNDb2RlKCkpICsgIiBPS1xuIjsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoc3RhdHVzTGluZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmNwcAppbmRleCA1Yjc5ZDZjOTBjYjYzNzUzNjBiMTJlMzEyZmQzNzdhYzNkNDM4YjQwLi4wNjM2
N2M3MjY4ZGY0NDU3OThlNDEwMDc3MTVkYjM3MzAzNmYyYWMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKQEAgLTIxMiw3ICsyMTIsNyBAQCB2b2lkIFJl
bmRlck1lbnVMaXN0OjpzZXRUZXh0RnJvbU9wdGlvbihpbnQgb3B0aW9uSW5kZXgpCiAgICAgaW50
IHNpemUgPSBsaXN0SXRlbXMuc2l6ZSgpOwogCiAgICAgaW50IGkgPSBzZWxlY3QtPm9wdGlvblRv
TGlzdEluZGV4KG9wdGlvbkluZGV4KTsKLSAgICBTdHJpbmcgdGV4dCA9ICIiOworICAgIFN0cmlu
ZyB0ZXh0ID0gZW1wdHlTdHJpbmcoKTsKICAgICBpZiAoaSA+PSAwICYmIGkgPCBzaXplKSB7CiAg
ICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07CiAgICAgICAgIGlmIChlbGVt
ZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZykpIHsK
</data>
<flag name="review"
          id="171845"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>