<?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>95502</bug_id>
          
          <creation_ts>2012-08-30 14:55:13 -0700</creation_ts>
          <short_desc>Replace more instances of += with StringBuilder</short_desc>
          <delta_ts>2012-08-31 11:12:05 -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</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>709054</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 14:55:13 -0700</bug_when>
    <thetext>Replace more instances of += with StringBuilder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709063</commentid>
    <comment_count>1</comment_count>
      <attachid>161566</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 14:57:51 -0700</bug_when>
    <thetext>Created attachment 161566
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709066</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-30 14:59:51 -0700</bug_when>
    <thetext>Attachment 161566 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/css/CSSGradientValue.cpp:491:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/css/CSSGradientValue.cpp:666:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 2 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709075</commentid>
    <comment_count>3</comment_count>
      <attachid>161566</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-08-30 15:09:22 -0700</bug_when>
    <thetext>Comment on attachment 161566
Patch

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

I suspect the InspectorFileSystemAgent.cpp change is technically incorrect although unlikely to be a practical problem. Should be easy enough to fix.

&gt; Source/WebCore/css/CSSTimingFunctionValue.cpp:50
&gt; +    return &quot;cubic-bezier(&quot; +
&gt; +        String::number(m_x1) + &quot;, &quot; +
&gt; +        String::number(m_y1) + &quot;, &quot; +
&gt; +        String::number(m_x2) + &quot;, &quot; +
&gt; +        String::number(m_y2) + &quot;)&quot;;

Our style is to put the + characters at the starts of the lines rather than the ends.

&gt; Source/WebCore/inspector/InspectorFileSystemAgent.cpp:584
&gt; +    String result = decoder-&gt;decode(static_cast&lt;char*&gt;(buffer-&gt;data()), buffer-&gt;byteLength()) + decoder-&gt;flush();

Please don’t make this change. I believe C++ does not guarantee order of evaluation of arguments. So there is a chance that flush can be called here before decode.

&gt; Source/WebCore/inspector/InspectorStyleSheet.cpp:811
&gt; +    styleSheetText.append(text);

Would be be better to construct styleSheetText with an initial value rather than using append here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709090</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 15:15:55 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/inspector/InspectorStyleSheet.cpp:811
&gt; &gt; +    styleSheetText.append(text);
&gt; 
&gt; Would be be better to construct styleSheetText with an initial value rather than using append here?

I don&apos;t think StringBuilder allows that:
http://trac.webkit.org/browser/trunk/Source/WTF/wtf/text/StringBuilder.h#L40

However, I&apos;ve moved the declaration closer to the first append so it looks less goofy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709092</commentid>
    <comment_count>5</comment_count>
      <attachid>161572</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 15:16:24 -0700</bug_when>
    <thetext>Created attachment 161572
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709095</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 15:16:59 -0700</bug_when>
    <thetext>I fixed the other two things.  Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709111</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-30 15:45:49 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=161566&amp;action=review

A few comments in addition to Darin&apos;s:

&gt; Source/WebCore/ChangeLog:11
&gt; +        replace these inefficient patterns with StringBuilder.

replace -&gt; replaced.

&gt; Source/WebCore/css/CSSFunctionValue.cpp:50
&gt; -        result += m_args-&gt;cssText();
&gt; -    result += &quot;)&quot;;
&gt; -    return result;
&gt; +        result.append(cssText());

You change from m_args-&gt;cssText() to cssText().

&gt; Source/WebCore/css/CSSPrimitiveValue.cpp:951
&gt; +            text = &quot;counter(&quot; + String(m_value.string) + &quot;)&quot;;

We should fix that in WTF. Having an adapter for StringImpl.

&quot;)&quot; -&gt; &apos;)&apos;

&gt; Source/WebCore/css/CSSTimingFunctionValue.cpp:50
&gt; +    return &quot;cubic-bezier(&quot; +
&gt; +        String::number(m_x1) + &quot;, &quot; +
&gt; +        String::number(m_y1) + &quot;, &quot; +
&gt; +        String::number(m_x2) + &quot;, &quot; +
&gt; +        String::number(m_y2) + &quot;)&quot;;

The ident is a little weird.

If this is a hot spot, we can do faster with appendNumber() on a Vector&lt;char&gt;. I doubt that&apos;s a hotspot though :)

&gt; Source/WebCore/css/CSSTimingFunctionValue.cpp:60
&gt; +    return &quot;steps(&quot; + String::number(m_steps) + &quot;, &quot; + (m_stepAtStart ? &quot;start&quot; : &quot;end&quot;) + &quot;)&quot;;

&quot;)&quot; -&gt; &apos;)&apos;

&gt; Source/WebCore/fileapi/BlobURL.cpp:75
&gt; +    String urlString = &quot;blob:&quot; + encodeWithURLEscapeSequences(originString) + &quot;/&quot; + createCanonicalUUIDString();

&quot;/&quot; -&gt; &apos;/&apos;

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:329
&gt; -            m_oldText += &quot;;&quot;;
&gt; +            m_oldText.append(&quot;;&quot;);

Note that those lines are equivalent.

You can chance &quot;;&quot; -&gt; &apos;;&apos; to avoid strlen().

&gt; Source/WebCore/inspector/InspectorConsoleAgent.cpp:258
&gt; -    String message = ASCIILiteral(&quot;Failed to load resource&quot;);
&gt; -    if (!error.localizedDescription().isEmpty())
&gt; -        message += &quot;: &quot; + error.localizedDescription();
&gt; +    StringBuilder message;
&gt; +    message.appendLiteral(&quot;Failed to load resource&quot;);
&gt; +    if (!error.localizedDescription().isEmpty()) {
&gt; +        message.append(&apos; &apos;);
&gt; +        message.append(error.localizedDescription());
&gt; +    }

The &apos;:&apos; disappeared (&quot;: &quot; -&gt; &apos; &apos;).

&gt; Source/WebCore/inspector/InspectorStyleSheet.cpp:804
&gt; +    StringBuilder styleSheetText;

You could move this after the if() for clarity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709134</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 16:25:38 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:329
&gt; &gt; -            m_oldText += &quot;;&quot;;
&gt; &gt; +            m_oldText.append(&quot;;&quot;);
&gt; 
&gt; Note that those lines are equivalent.

Yes.  However, changing this to call append rather than operator+= will let me remove operator+= from WTFString.h.  :)

(I&apos;ll address the other comments before landing.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709153</commentid>
    <comment_count>9</comment_count>
      <attachid>161572</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-30 16:44:52 -0700</bug_when>
    <thetext>Comment on attachment 161572
Patch for landing

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

&gt; Source/WebCore/inspector/InspectorFileSystemAgent.cpp:585
&gt;      String result = decoder-&gt;decode(static_cast&lt;char*&gt;(buffer-&gt;data()), buffer-&gt;byteLength());
&gt; -    result += decoder-&gt;flush();
&gt; +    result.append(decoder-&gt;flush());

Couldn&apos;t we just change this to be String result = decoder-&gt;decode() + decoder-&gt;flush()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709154</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-30 16:45:14 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 161572 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161572&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorFileSystemAgent.cpp:585
&gt; &gt;      String result = decoder-&gt;decode(static_cast&lt;char*&gt;(buffer-&gt;data()), buffer-&gt;byteLength());
&gt; &gt; -    result += decoder-&gt;flush();
&gt; &gt; +    result.append(decoder-&gt;flush());
&gt; 
&gt; Couldn&apos;t we just change this to be String result = decoder-&gt;decode() + decoder-&gt;flush()?

I guess that&apos;s no fewer mallocs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709162</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 16:49:41 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 161572 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161572&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorFileSystemAgent.cpp:585
&gt; &gt;      String result = decoder-&gt;decode(static_cast&lt;char*&gt;(buffer-&gt;data()), buffer-&gt;byteLength());
&gt; &gt; -    result += decoder-&gt;flush();
&gt; &gt; +    result.append(decoder-&gt;flush());
&gt; 
&gt; Couldn&apos;t we just change this to be String result = decoder-&gt;decode() + decoder-&gt;flush()?

I used that idiom in a previous patch and Darin Adler commented that the order of evaluation is undefined, which could cause problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709165</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 16:50:49 -0700</bug_when>
    <thetext>&gt; We should fix that in WTF. Having an adapter for StringImpl.

I&apos;m going to leave that for a future patch because I don&apos;t want to screw up the StringAdaptor implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709178</commentid>
    <comment_count>13</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-30 17:04:20 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; We should fix that in WTF. Having an adapter for StringImpl.
&gt; 
&gt; I&apos;m going to leave that for a future patch because I don&apos;t want to screw up the StringAdaptor implementation.

That was just a note. I also think that should be in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709180</commentid>
    <comment_count>14</comment_count>
      <attachid>161592</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 17:07:53 -0700</bug_when>
    <thetext>Created attachment 161592
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709216</commentid>
    <comment_count>15</comment_count>
      <attachid>161592</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 18:15:16 -0700</bug_when>
    <thetext>Comment on attachment 161592
Patch for landing

Looks like I might have broken fast/css/remove-shorthand.html and fast/backgrounds/repeat/parsing-background-repeat.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709217</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 18:23:42 -0700</bug_when>
    <thetext>I undid the changes to Source/WebCore/css/StylePropertySet.cpp and it fixed the issue.  I&apos;m going to land the rest of the patch and return to that file in another bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709218</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 18:25:11 -0700</bug_when>
    <thetext>Committed r127224: &lt;http://trac.webkit.org/changeset/127224&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709224</commentid>
    <comment_count>18</comment_count>
      <attachid>161592</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-30 18:37:58 -0700</bug_when>
    <thetext>Comment on attachment 161592
Patch for landing

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

&gt; Source/WebCore/css/StylePropertySet.cpp:421
&gt; -    return res;
&gt; +    return result.toString();

I think this could be the problem, it should be:
    return res.isEmpty() ? String() : res.toString();

StringBuilder::toString() return an emptyString if empty. The previous code would return a null string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709793</commentid>
    <comment_count>19</comment_count>
      <attachid>161592</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-08-31 10:46:11 -0700</bug_when>
    <thetext>Comment on attachment 161592
Patch for landing

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

&gt; Source/WebCore/ChangeLog:18
&gt; +        We can make cssText() more efficient by passing a single StringBuilder
&gt; +        instance along to the recursive calls, but I&apos;ve left that for a later
&gt; +        patch.

I think the way to go here is to make a new function appendCSSText(StringBuilder&amp;) const, and then have cssText functions all just be wrappers that call appendCSSText.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709820</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-31 11:12:05 -0700</bug_when>
    <thetext>Yes, makes sense.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161566</attachid>
            <date>2012-08-30 14:57:51 -0700</date>
            <delta_ts>2012-08-30 15:16:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95502-20120830145737.patch</filename>
            <type>text/plain</type>
            <size>38095</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjI4M2U0YjY4ZDZlNDcw
MmFiMjFlMzVkZjNmZjFhYWM4MjZlNWEyZC4uMDc1MWUyNTQ3MTAwMDY4NDY2ODhjMTU0Y2QzMTg4
NWQxZWM5Y2YxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTA4LTMwICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBtb3JlIGluc3Rh
bmNlcyBvZiArPSB3aXRoIFN0cmluZ0J1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZW1vdmVzIG1hbnkgdXNlcyBvZiBXVEY6
OlN0cmluZzo6b3BlcmF0b3IrPSBpbiBXZWJDb3JlLgorICAgICAgICBNYW55IG9mIHRoZXNlIHVz
ZXMgYXJlIGluZWZmaWNpZW50IGJlY2F1c2UgdGhleSBjYXVzZSB1cyB0byBhbGxvY2F0ZQorICAg
ICAgICBhbmQgbWVtY3B5IHN0cmluZ3MgbW9yZSB0aW1lcyB0aGFuIG5lY2Vzc2FyeS4gSW4gbW9z
dCBjYXNlcywgSSd2ZQorICAgICAgICByZXBsYWNlIHRoZXNlIGluZWZmaWNpZW50IHBhdHRlcm5z
IHdpdGggU3RyaW5nQnVpbGRlci4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIHByb2dyZXNz
IHRvd2FyZHMgcmVtb3ZpbmcgV1RGOjpTdHJpbmc6Om9wZXJhdG9yKz0gZnJvbQorICAgICAgICB0
aGUgcHJvamVjdC4KKworICAgICAgICBXZSBjYW4gbWFrZSBjc3NUZXh0KCkgbW9yZSBlZmZpY2ll
bnQgYnkgcGFzc2luZyBhIHNpbmdsZSBTdHJpbmdCdWlsZGVyCisgICAgICAgIGluc3RhbmNlIGFs
b25nIHRvIHRoZSByZWN1cnNpdmUgY2FsbHMsIGJ1dCBJJ3ZlIGxlZnQgdGhhdCBmb3IgYSBsYXRl
cgorICAgICAgICBwYXRjaC4KKworICAgICAgICAqIGNzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFs
dWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlOjpjdXN0
b21Dc3NUZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNyY1ZhbHVlOjpjdXN0b21Dc3NUZXh0KToKKyAgICAg
ICAgKiBjc3MvQ1NTRnVuY3Rpb25WYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGdW5j
dGlvblZhbHVlOjpjdXN0b21Dc3NUZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjdXN0b21D
c3NUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmN1c3Rv
bUNzc1RleHQpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZSk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2
ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpjdXN0b21D
c3NUZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTUmVmbGVjdFZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1JlZmxlY3RWYWx1ZTo6Y3VzdG9tQ3NzVGV4dCk6CisgICAgICAgICogY3NzL0NT
U1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvblZhbHVlOjpjdXN0b21Dc3NUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3VzdG9tQ3NzVGV4dCk6CisgICAgICAgICog
Y3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0
eVNldDo6Z2V0NFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0Ojpn
ZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0
eVNldDo6Z2V0U2hvcnRoYW5kVmFsdWUpOgorICAgICAgICAqIGZpbGVhcGkvQmxvYlVSTC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCbG9iVVJMOjpjcmVhdGVCbG9iVVJMKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ1NTQWdlbnQ6OlNldFByb3BlcnR5VGV4dEFjdGlvbjo6cmVkbyk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
bGllbnQ6OmRvRGlzcGF0Y2hNZXNzYWdlT25Gcm9udGVuZFBhZ2UpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29uc29sZUFnZW50OjpkaWRGYWlsTG9hZGluZyk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5
bGVTaGVldDo6YWRkUnVsZSk6CisKIDIwMTItMDgtMzAgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBNYWtlIFJlbmRlckJveDo6Y29tcHV0ZUlubGluZURpcmVjdGlv
bk1hcmdpbnMgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJ
bWFnZVNsaWNlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlU2xp
Y2VWYWx1ZS5jcHAKaW5kZXggNTUxZGYxZjYwNDExZTliZGNkODEwY2NmMGU0ZTQwY2U0MjI0NDBh
Zi4uMzk0Y2MyODk0YTQxZTQwMTNhNWYzNDI2ZjhiZGRlOWMxMTgxMWY3ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHAKQEAgLTQ2LDcgKzQ2
LDcgQEAgU3RyaW5nIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgpIGNv
bnN0CiAKICAgICAvLyBOb3cgdGhlIGZpbGwga2V5d29yZHMgaWYgaXQgaXMgcHJlc2VudC4KICAg
ICBpZiAobV9maWxsKQotICAgICAgICB0ZXh0ICs9ICIgZmlsbCI7CisgICAgICAgIHJldHVybiB0
ZXh0ICsgIiBmaWxsIjsKICAgICByZXR1cm4gdGV4dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwCmluZGV4IGRiNGViOWIzNjQ3ZGQ1NjNhY2YwN2VkOTA5
NTllZTYyMDE0NjhhNzQuLjhjYTJjMWQxYzRhOGU3NWYxOTRhOTU5NTg1M2NlZjdiNjNjMzA0MWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHAKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYzLDE2ICs2NCwx
OSBAQCBib29sIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmlzU3VwcG9ydGVkRm9ybWF0KCkgY29uc3QK
IAogU3RyaW5nIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmN1c3RvbUNzc1RleHQoKSBjb25zdAogewot
ICAgIFN0cmluZyByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgaWYgKGlz
TG9jYWwoKSkKLSAgICAgICAgcmVzdWx0ICs9ICJsb2NhbCgiOworICAgICAgICByZXN1bHQuYXBw
ZW5kTGl0ZXJhbCgibG9jYWwoIik7CiAgICAgZWxzZQotICAgICAgICByZXN1bHQgKz0gInVybCgi
OwotICAgIHJlc3VsdCArPSBtX3Jlc291cmNlOwotICAgIHJlc3VsdCArPSAiKSI7Ci0gICAgaWYg
KCFtX2Zvcm1hdC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdCArPSAiIGZvcm1hdCgiICsgbV9m
b3JtYXQgKyAiKSI7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LmFwcGVuZExp
dGVyYWwoInVybCgiKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fcmVzb3VyY2UpOworICAgIHJlc3Vs
dC5hcHBlbmQoJyknKTsKKyAgICBpZiAoIW1fZm9ybWF0LmlzRW1wdHkoKSkgeworICAgICAgICBy
ZXN1bHQuYXBwZW5kTGl0ZXJhbCgiIGZvcm1hdCgiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCht
X2Zvcm1hdCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdC50b1N0cmluZygpOwogfQogCiB2b2lkIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmFkZFN1
YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNo
ZWV0Q29udGVudHMqIHN0eWxlU2hlZXQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRnVuY3Rpb25WYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRnVuY3Rp
b25WYWx1ZS5jcHAKaW5kZXggOWY4ZjI0ZjMwMzBlMWNmZmQ4YmZlMjM2NWYyMGU4ZTM1MWI3Y2Yz
Ni4uMzY2ODc3ZjJmMmVmMWUyZDc2ZTBmZGRmY2VlYzhiODQzNDdkNjExNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGdW5jdGlvblZhbHVlLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg
IkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIk1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDExICs0NCwxMiBAQCBDU1NGdW5j
dGlvblZhbHVlOjpDU1NGdW5jdGlvblZhbHVlKENTU1BhcnNlckZ1bmN0aW9uKiBmdW5jdGlvbikK
IAogU3RyaW5nIENTU0Z1bmN0aW9uVmFsdWU6OmN1c3RvbUNzc1RleHQoKSBjb25zdAogewotICAg
IFN0cmluZyByZXN1bHQgPSBtX25hbWU7IC8vIEluY2x1ZGVzIHRoZSAnKCcKKyAgICBTdHJpbmdC
dWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKG1fbmFtZSk7IC8vIEluY2x1ZGVzIHRo
ZSAnKCcKICAgICBpZiAobV9hcmdzKQotICAgICAgICByZXN1bHQgKz0gbV9hcmdzLT5jc3NUZXh0
KCk7Ci0gICAgcmVzdWx0ICs9ICIpIjsKLSAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXN1
bHQuYXBwZW5kKGNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZCgnKScpOworICAgIHJldHVy
biByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogdm9pZCBDU1NGdW5jdGlvblZhbHVlOjpyZXBvcnRE
ZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCBjN2RhYWNj
ODdiY2M4MDNmMTc0NjRlNDU5MTlhYTk2NjU2MjVmZmFkLi44NTUxNGY1OTJlYjI2MjFkMjkzMGY5
MDMxNjc1MmFhNTFmYTg2OTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUu
Y3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBA
IC00NzMsNTEgKzQ3NCw3MSBAQCB2b2lkIENTU0dyYWRpZW50VmFsdWU6OnJlcG9ydEJhc2VDbGFz
c01lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdAogCiBTdHJpbmcgQ1NT
TGluZWFyR3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgpIGNvbnN0CiB7Ci0gICAgU3RyaW5n
IHJlc3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICBpZiAobV9kZXByZWNhdGVk
VHlwZSkgewotICAgICAgICByZXN1bHQgPSAiLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsICI7Ci0g
ICAgICAgIHJlc3VsdCArPSBtX2ZpcnN0WC0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICByZXN1
bHQgKz0gbV9maXJzdFktPmNzc1RleHQoKSArICIsICI7Ci0gICAgICAgIHJlc3VsdCArPSBtX3Nl
Y29uZFgtPmNzc1RleHQoKSArICIgIjsKLSAgICAgICAgcmVzdWx0ICs9IG1fc2Vjb25kWS0+Y3Nz
VGV4dCgpOworICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLXdlYmtpdC1ncmFkaWVudChs
aW5lYXIsICIpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RYLT5jc3NUZXh0KCkpOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJz
dFktPmNzc1RleHQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOworICAg
ICAgICByZXN1bHQuYXBwZW5kKG1fc2Vjb25kWC0+Y3NzVGV4dCgpKTsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZCgnICcpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fc2Vjb25kWS0+Y3NzVGV4dCgp
KTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7IGkr
KykgewogICAgICAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3AgPSBtX3N0
b3BzW2ldOwotICAgICAgICAgICAgcmVzdWx0ICs9ICIsICI7Ci0gICAgICAgICAgICBpZiAoc3Rv
cC5tX3Bvc2l0aW9uLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
UikgPT0gMCkKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gImZyb20oIiArIHN0b3AubV9jb2xv
ci0+Y3NzVGV4dCgpICsgIikiOwotICAgICAgICAgICAgZWxzZSBpZiAoc3RvcC5tX3Bvc2l0aW9u
LT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikgPT0gMSkKLSAg
ICAgICAgICAgICAgICByZXN1bHQgKz0gInRvKCIgKyBzdG9wLm1fY29sb3ItPmNzc1RleHQoKSAr
ICIpIjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gImNvbG9y
LXN0b3AoIiArIFN0cmluZzo6bnVtYmVyKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUo
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKSArICIsICIgKyBzdG9wLm1fY29sb3ItPmNz
c1RleHQoKSArICIpIjsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOwor
ICAgICAgICAgICAgaWYgKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpID09IDApIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kTGl0ZXJhbCgiZnJvbSgiKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0b3Au
bV9jb2xvci0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcpJyk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUo
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpID09IDEpIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kTGl0ZXJhbCgidG8oIik7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChzdG9wLm1fY29sb3ItPmNzc1RleHQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnKScpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kTGl0ZXJhbCgiY29sb3Itc3RvcCgiKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KFN0cmluZzo6bnVtYmVyKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExp
dGVyYWwoIiwgIik7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdG9wLm1fY29sb3It
PmNzc1RleHQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScpOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gbV9yZXBl
YXRpbmcgPyAiLXdlYmtpdC1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KCIgOiAiLXdlYmtpdC1s
aW5lYXItZ3JhZGllbnQoIjsKKyAgICAgICAgaWYgKG1fcmVwZWF0aW5nKQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZExpdGVyYWwoIi13ZWJraXQtcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgi
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIi13ZWJr
aXQtbGluZWFyLWdyYWRpZW50KCIpOworCiAgICAgICAgIGlmIChtX2FuZ2xlKQotICAgICAgICAg
ICAgcmVzdWx0ICs9IG1fYW5nbGUtPmNzc1RleHQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQobV9hbmdsZS0+Y3NzVGV4dCgpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAo
bV9maXJzdFggJiYgbV9maXJzdFkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IG1fZmlyc3RY
LT5jc3NUZXh0KCkgKyAiICIgKyBtX2ZpcnN0WS0+Y3NzVGV4dCgpOwotICAgICAgICAgICAgZWxz
ZSBpZiAobV9maXJzdFggfHwgbV9maXJzdFkpIHsKKyAgICAgICAgICAgIGlmIChtX2ZpcnN0WCAm
JiBtX2ZpcnN0WSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFgtPmNz
c1RleHQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOworICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFktPmNzc1RleHQoKSk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKG1fZmlyc3RYIHx8IG1fZmlyc3RZKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1f
Zmlyc3RYKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gbV9maXJzdFgtPmNzc1RleHQo
KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgp
KTsKIAogICAgICAgICAgICAgICAgIGlmIChtX2ZpcnN0WSkKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ICs9IG1fZmlyc3RZLT5jc3NUZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQobV9maXJzdFktPmNzc1RleHQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7IGkrKykg
ewogICAgICAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3AgPSBtX3N0b3Bz
W2ldOwotICAgICAgICAgICAgcmVzdWx0ICs9ICIsICI7Ci0gICAgICAgICAgICByZXN1bHQgKz0g
c3RvcC5tX2NvbG9yLT5jc3NUZXh0KCk7Ci0gICAgICAgICAgICBpZiAoc3RvcC5tX3Bvc2l0aW9u
KQotICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiICIgKyBzdG9wLm1fcG9zaXRpb24tPmNzc1Rl
eHQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChzdG9wLm1fY29sb3ItPmNzc1RleHQoKSk7CisgICAgICAgICAgICBp
ZiAoc3RvcC5tX3Bvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcp
OworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RvcC5tX3Bvc2l0aW9uLT5jc3NUZXh0
KCkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgcmVzdWx0ICs9ICIp
IjsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKKyAgICByZXR1
cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIC8vIENvbXB1dGUgdGhlIGVuZHBvaW50cyBzbyB0
aGF0IGEgZ3JhZGllbnQgb2YgdGhlIGdpdmVuIGFuZ2xlIGNvdmVycyBhIGJveCBvZiB0aGUgZ2l2
ZW4gc2l6ZS4KQEAgLTYyMiw3MSArNjQzLDkyIEBAIHZvaWQgQ1NTTGluZWFyR3JhZGllbnRWYWx1
ZTo6cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yCiAK
IFN0cmluZyBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjdXN0b21Dc3NUZXh0KCkgY29uc3QKIHsK
LSAgICBTdHJpbmcgcmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogCiAgICAgaWYg
KG1fZGVwcmVjYXRlZFR5cGUpIHsKLSAgICAgICAgcmVzdWx0ID0gIi13ZWJraXQtZ3JhZGllbnQo
cmFkaWFsLCAiOwotCi0gICAgICAgIHJlc3VsdCArPSBtX2ZpcnN0WC0+Y3NzVGV4dCgpICsgIiAi
OwotICAgICAgICByZXN1bHQgKz0gbV9maXJzdFktPmNzc1RleHQoKSArICIsICI7Ci0gICAgICAg
IHJlc3VsdCArPSBtX2ZpcnN0UmFkaXVzLT5jc3NUZXh0KCkgKyAiLCAiOwotICAgICAgICByZXN1
bHQgKz0gbV9zZWNvbmRYLT5jc3NUZXh0KCkgKyAiICI7Ci0gICAgICAgIHJlc3VsdCArPSBtX3Nl
Y29uZFktPmNzc1RleHQoKTsKLSAgICAgICAgcmVzdWx0ICs9ICIsICI7Ci0gICAgICAgIHJlc3Vs
dCArPSBtX3NlY29uZFJhZGl1cy0+Y3NzVGV4dCgpOworICAgICAgICByZXN1bHQuYXBwZW5kTGl0
ZXJhbCgiLXdlYmtpdC1ncmFkaWVudChyYWRpYWwsICIpOworICAgICAgICByZXN1bHQuYXBwZW5k
KG1fZmlyc3RYLT5jc3NUZXh0KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAg
ICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFktPmNzc1RleHQoKSk7CisgICAgICAgIHJlc3VsdC5h
cHBlbmRMaXRlcmFsKCIsICIpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RSYWRpdXMt
PmNzc1RleHQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAg
ICByZXN1bHQuYXBwZW5kKG1fc2Vjb25kWC0+Y3NzVGV4dCgpKTsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICcpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fc2Vjb25kWS0+Y3NzVGV4dCgpKTsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQobV9zZWNvbmRSYWRpdXMtPmNzc1RleHQoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IHNoYXJl
PwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7IGkrKykg
ewogICAgICAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3AgPSBtX3N0b3Bz
W2ldOwotICAgICAgICAgICAgcmVzdWx0ICs9ICIsICI7Ci0gICAgICAgICAgICBpZiAoc3RvcC5t
X3Bvc2l0aW9uLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikg
PT0gMCkKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gImZyb20oIiArIHN0b3AubV9jb2xvci0+
Y3NzVGV4dCgpICsgIikiOwotICAgICAgICAgICAgZWxzZSBpZiAoc3RvcC5tX3Bvc2l0aW9uLT5n
ZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikgPT0gMSkKLSAgICAg
ICAgICAgICAgICByZXN1bHQgKz0gInRvKCIgKyBzdG9wLm1fY29sb3ItPmNzc1RleHQoKSArICIp
IjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gImNvbG9yLXN0
b3AoIiArIFN0cmluZzo6bnVtYmVyKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUoQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKSArICIsICIgKyBzdG9wLm1fY29sb3ItPmNzc1Rl
eHQoKSArICIpIjsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOworICAg
ICAgICAgICAgaWYgKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpID09IDApIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
TGl0ZXJhbCgiZnJvbSgiKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0b3AubV9j
b2xvci0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcpJyk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUoQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kTGl0ZXJhbCgidG8oIik7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChz
dG9wLm1fY29sb3ItPmNzc1RleHQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
KScpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
TGl0ZXJhbCgiY29sb3Itc3RvcCgiKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFN0
cmluZzo6bnVtYmVyKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVy
YWwoIiwgIik7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdG9wLm1fY29sb3ItPmNz
c1RleHQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fcmVwZWF0aW5nKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIi13ZWJraXQtcmVwZWF0aW5nLXJhZGlh
bC1ncmFkaWVudCgiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExp
dGVyYWwoIi13ZWJraXQtcmFkaWFsLWdyYWRpZW50KCIpOwogCi0gICAgICAgIHJlc3VsdCA9IG1f
cmVwZWF0aW5nID8gIi13ZWJraXQtcmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVudCgiIDogIi13ZWJr
aXQtcmFkaWFsLWdyYWRpZW50KCI7CiAgICAgICAgIGlmIChtX2ZpcnN0WCAmJiBtX2ZpcnN0WSkg
ewotICAgICAgICAgICAgcmVzdWx0ICs9IG1fZmlyc3RYLT5jc3NUZXh0KCkgKyAiICIgKyBtX2Zp
cnN0WS0+Y3NzVGV4dCgpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3Nz
VGV4dCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQobV9maXJzdFktPmNzc1RleHQoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAobV9m
aXJzdFgpCi0gICAgICAgICAgICByZXN1bHQgKz0gbV9maXJzdFgtPmNzc1RleHQoKTsKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFgtPmNzc1RleHQoKSk7CiAgICAgICAgICBlbHNl
IGlmIChtX2ZpcnN0WSkKLSAgICAgICAgICAgIHJlc3VsdCArPSBtX2ZpcnN0WS0+Y3NzVGV4dCgp
OworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WS0+Y3NzVGV4dCgpKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ICs9ICJjZW50ZXIiOwotCisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kTGl0ZXJhbCgiY2VudGVyIik7CiAKICAgICAgICAgaWYgKG1fc2hhcGUgfHwg
bV9zaXppbmdCZWhhdmlvcikgewotICAgICAgICAgICAgcmVzdWx0ICs9ICIsICI7Ci0gICAgICAg
ICAgICBpZiAobV9zaGFwZSkKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gbV9zaGFwZS0+Y3Nz
VGV4dCgpICsgIiAiOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSAiZWxsaXBzZSAiOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiwgIik7Cisg
ICAgICAgICAgICBpZiAobV9zaGFwZSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
bV9zaGFwZS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJh
bCgiZWxsaXBzZSAiKTsKIAogICAgICAgICAgICAgaWYgKG1fc2l6aW5nQmVoYXZpb3IpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0ICs9IG1fc2l6aW5nQmVoYXZpb3ItPmNzc1RleHQoKTsKKyAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fc2l6aW5nQmVoYXZpb3ItPmNzc1RleHQoKSk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICJjb3ZlciI7CisgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoImNvdmVyIik7CiAKICAgICAgICAgfSBl
bHNlIGlmIChtX2VuZEhvcml6b250YWxTaXplICYmIG1fZW5kVmVydGljYWxTaXplKSB7Ci0gICAg
ICAgICAgICByZXN1bHQgKz0gIiwgIjsKLSAgICAgICAgICAgIHJlc3VsdCArPSBtX2VuZEhvcml6
b250YWxTaXplLT5jc3NUZXh0KCkgKyAiICIgKyBtX2VuZFZlcnRpY2FsU2l6ZS0+Y3NzVGV4dCgp
OworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKG1fZW5kSG9yaXpvbnRhbFNpemUtPmNzc1RleHQoKSk7CisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZW5kVmVy
dGljYWxTaXplLT5jc3NUZXh0KCkpOwogICAgICAgICB9CiAKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fc3RvcHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIGNvbnN0IENT
U0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wID0gbV9zdG9wc1tpXTsKLSAgICAgICAgICAgIHJlc3Vs
dCArPSAiLCAiOwotICAgICAgICAgICAgcmVzdWx0ICs9IHN0b3AubV9jb2xvci0+Y3NzVGV4dCgp
OwotICAgICAgICAgICAgaWYgKHN0b3AubV9wb3NpdGlvbikKLSAgICAgICAgICAgICAgICByZXN1
bHQgKz0gIiAiICsgc3RvcC5tX3Bvc2l0aW9uLT5jc3NUZXh0KCk7CisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RvcC5t
X2NvbG9yLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgaWYgKHN0b3AubV9wb3NpdGlvbikgewor
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHN0b3AubV9wb3NpdGlvbi0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KIAotICAgIHJlc3VsdCArPSAiKSI7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
KyAgICByZXN1bHQuYXBwZW5kKCcpJyk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwog
fQogCiBmbG9hdCBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpyZXNvbHZlUmFkaXVzKENTU1ByaW1p
dGl2ZVZhbHVlKiByYWRpdXMsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RT
dHlsZSwgZmxvYXQqIHdpZHRoT3JIZWlnaHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4
IGZiMzhhNzgxZmVjNmRhNzVlMTMwMjBhNGMyNzU3ZmNiM2Y0NWQ5OTkuLjg1YWQ0YjMzMDJhZDJj
ZTlkNzdiMDVkOWQ3ODIyMjI2YmZkNjQ4MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBA
IC05OTQ4LDE3ICs5OTQ4LDE3IEBAIHZvaWQgQ1NTUGFyc2VyOjpkZWxldGVGb250RmFjZU9ubHlW
YWx1ZXMoKQogU3R5bGVLZXlmcmFtZSogQ1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZShDU1NQYXJz
ZXJWYWx1ZUxpc3QqIGtleXMpCiB7CiAgICAgLy8gQ3JlYXRlIGEga2V5IHN0cmluZyBmcm9tIHRo
ZSBwYXNzZWQga2V5cwotICAgIFN0cmluZyBrZXlTdHJpbmc7CisgICAgU3RyaW5nQnVpbGRlciBr
ZXlTdHJpbmc7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleXMtPnNpemUoKTsgKytp
KSB7CiAgICAgICAgIGZsb2F0IGtleSA9IHN0YXRpY19jYXN0PGZsb2F0PihrZXlzLT52YWx1ZUF0
KGkpLT5mVmFsdWUpOwogICAgICAgICBpZiAoaSAhPSAwKQotICAgICAgICAgICAga2V5U3RyaW5n
ICs9ICIsIjsKLSAgICAgICAga2V5U3RyaW5nICs9IFN0cmluZzo6bnVtYmVyKGtleSk7Ci0gICAg
ICAgIGtleVN0cmluZyArPSAiJSI7CisgICAgICAgICAgICBrZXlTdHJpbmcuYXBwZW5kKCcsJyk7
CisgICAgICAgIGtleVN0cmluZy5hcHBlbmQoU3RyaW5nOjpudW1iZXIoa2V5KSk7CisgICAgICAg
IGtleVN0cmluZy5hcHBlbmQoJyUnKTsKICAgICB9CiAKICAgICBSZWZQdHI8U3R5bGVLZXlmcmFt
ZT4ga2V5ZnJhbWUgPSBTdHlsZUtleWZyYW1lOjpjcmVhdGUoKTsKLSAgICBrZXlmcmFtZS0+c2V0
S2V5VGV4dChrZXlTdHJpbmcpOworICAgIGtleWZyYW1lLT5zZXRLZXlUZXh0KGtleVN0cmluZy50
b1N0cmluZygpKTsKICAgICBrZXlmcmFtZS0+c2V0UHJvcGVydGllcyhjcmVhdGVTdHlsZVByb3Bl
cnR5U2V0KCkpOwogCiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ByaW1pdGl2ZVZhbHVlLmNwcAppbmRleCA1YjJkN2M3NDczYTcwNzNjNTg2N2UzNWJjMjE1YTY4
NTQ0NzAyMTVjLi4xYTEyNTlmMTk3NTgwYzVjMmYyMjNhYzM3NDQ0YjBjYTljNDE0MWRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKQEAgLTk0OCw5ICs5NDgsNyBA
QCBTdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmN1c3RvbUNzc1RleHQoKSBjb25zdAogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NfQ09VTlRFUl9OQU1FOgot
ICAgICAgICAgICAgdGV4dCA9ICJjb3VudGVyKCI7Ci0gICAgICAgICAgICB0ZXh0ICs9IG1fdmFs
dWUuc3RyaW5nOwotICAgICAgICAgICAgdGV4dCArPSAiKSI7CisgICAgICAgICAgICB0ZXh0ID0g
ImNvdW50ZXIoIiArIFN0cmluZyhtX3ZhbHVlLnN0cmluZykgKyAiKSI7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBDU1NfQ09VTlRFUjogewogICAgICAgICAgICAgU3RyaW5nQnVp
bGRlciByZXN1bHQ7CkBAIC0xMDM0LDMwICsxMDMyLDM0IEBAIFN0cmluZyBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3VzdG9tQ3NzVGV4dCgpIGNvbnN0CiAgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjph
ZG9wdChyZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBDU1NfUEFJUjoKLSAgICAgICAgICAgIHRleHQgPSBtX3ZhbHVlLnBhaXItPmZpcnN0KCktPmNz
c1RleHQoKTsKKyAgICAgICAgY2FzZSBDU1NfUEFJUjogeworICAgICAgICAgICAgU3RyaW5nQnVp
bGRlciByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fdmFsdWUucGFpci0+Zmly
c3QoKS0+Y3NzVGV4dCgpKTsKICAgICAgICAgICAgIGlmIChtX3ZhbHVlLnBhaXItPnNlY29uZCgp
ICE9IG1fdmFsdWUucGFpci0+Zmlyc3QoKSkgewotICAgICAgICAgICAgICAgIHRleHQgKz0gIiAi
OwotICAgICAgICAgICAgICAgIHRleHQgKz0gbV92YWx1ZS5wYWlyLT5zZWNvbmQoKS0+Y3NzVGV4
dCgpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKG1fdmFsdWUucGFpci0+c2Vjb25kKCktPmNzc1RleHQoKSk7CiAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0ZXh0ID0gcmVzdWx0LnRvU3RyaW5nKCk7CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkgfHwg
RU5BQkxFKFdJREdFVF9SRUdJT04pCi0gICAgICAgIGNhc2UgQ1NTX0RBU0hCT0FSRF9SRUdJT046
CisgICAgICAgIGNhc2UgQ1NTX0RBU0hCT0FSRF9SRUdJT046IHsKKyAgICAgICAgICAgIFN0cmlu
Z0J1aWxkZXIgcmVzdWx0OwogICAgICAgICAgICAgZm9yIChEYXNoYm9hcmRSZWdpb24qIHJlZ2lv
biA9IGdldERhc2hib2FyZFJlZ2lvblZhbHVlKCk7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5t
X25leHQuZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgICAgICB0ZXh0LmFwcGVuZCgnICcpOworICAgICAgICAgICAgICAgIGlmICgh
cmVzdWx0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcp
OwogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkgJiYgRU5BQkxFKFdJREdFVF9SRUdJT04p
Ci0gICAgICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPm1fY3NzRnVuY3Rpb25OYW1lOworICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVnaW9uLT5tX2Nzc0Z1bmN0aW9uTmFtZSk7CiAj
ZWxpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCi0gICAgICAgICAgICAgICAgdGV4dCArPSAi
ZGFzaGJvYXJkLXJlZ2lvbigiOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFs
KCJkYXNoYm9hcmQtcmVnaW9uKCIpOwogI2Vsc2UKLSAgICAgICAgICAgICAgICB0ZXh0ICs9ICJy
ZWdpb24oIjsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgicmVnaW9uKCIp
OwogI2VuZGlmCi0gICAgICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPm1fbGFiZWw7CisgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZWdpb24tPm1fbGFiZWwpOwogICAgICAgICAgICAg
ICAgIGlmIChyZWdpb24tPm1faXNDaXJjbGUpCi0gICAgICAgICAgICAgICAgICAgIHRleHQgKz0g
IiBjaXJjbGUiOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiIGNp
cmNsZSIpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbi0+bV9pc1JlY3RhbmdsZSkK
LSAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiIHJlY3RhbmdsZSI7CisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIgcmVjdGFuZ2xlIik7CiAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAo
cmVnaW9uLT50b3AoKS0+bV9wcmltaXRpdmVVbml0VHlwZSA9PSBDU1NfSURFTlQgJiYgcmVnaW9u
LT50b3AoKS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUludmFsaWQpIHsKQEAgLTEwNjgsMTUgKzEw
NzAsMjAgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjdXN0b21Dc3NUZXh0KCkgY29uc3QK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lvbi0+Ym90dG9tKCktPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVJbnZhbGlkKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lvbi0+
bGVmdCgpLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW52YWxpZCk7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dC5hcHBlbmQoJyAnKTsKLSAgICAgICAg
ICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPnRvcCgpLT5jc3NUZXh0KCkgKyAiICI7Ci0gICAg
ICAgICAgICAgICAgICAgIHRleHQgKz0gcmVnaW9uLT5yaWdodCgpLT5jc3NUZXh0KCkgKyAiICI7
Ci0gICAgICAgICAgICAgICAgICAgIHRleHQgKz0gcmVnaW9uLT5ib3R0b20oKS0+Y3NzVGV4dCgp
ICsgIiAiOwotICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9IHJlZ2lvbi0+bGVmdCgpLT5jc3NU
ZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZWdpb24tPnRvcCgpLT5jc3NUZXh0KCkpOworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQocmVnaW9uLT5yaWdodCgpLT5jc3NUZXh0KCkpOworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQocmVnaW9uLT5ib3R0b20oKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICcpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJl
Z2lvbi0+bGVmdCgpLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB0ZXh0ICs9ICIpIjsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcpJyk7CiAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0ZXh0ID0gcmVzdWx0LnRvU3RyaW5nKCk7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGNhc2UgQ1NTX1BBUlNF
Ul9PUEVSQVRPUjogewogICAgICAgICAgICAgY2hhciBjID0gc3RhdGljX2Nhc3Q8Y2hhcj4obV92
YWx1ZS5pZGVudCk7CkBAIC0xMTAzLDkgKzExMTAsNyBAQCBTdHJpbmcgQ1NTUHJpbWl0aXZlVmFs
dWU6OmN1c3RvbUNzc1RleHQoKSBjb25zdAogICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxF
KENTU19WQVJJQUJMRVMpCiAgICAgICAgIGNhc2UgQ1NTX1ZBUklBQkxFX05BTUU6Ci0gICAgICAg
ICAgICB0ZXh0ID0gIi13ZWJraXQtdmFyKCI7Ci0gICAgICAgICAgICB0ZXh0ICs9IG1fdmFsdWUu
c3RyaW5nOwotICAgICAgICAgICAgdGV4dCArPSAiKSI7CisgICAgICAgICAgICB0ZXh0ID0gIi13
ZWJraXQtdmFyKCIgKyBTdHJpbmcobV92YWx1ZS5zdHJpbmcpICsgIikiOwogICAgICAgICAgICAg
YnJlYWs7CiAjZW5kaWYKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UmVmbGVjdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3Bw
CmluZGV4IGVkZTNjOWExZjY1OThjMGYzNDdkNjI1MDJkZjQyMTkwZWYzOGE4OGUuLjEwZWM4YzA0
NTVhMDMzMWZiZWY2NzZiMzAxMDU0NjM3NjE1Y2IyY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NS
ZWZsZWN0VmFsdWUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZl
VmFsdWUuaCIKICNpbmNsdWRlICJNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtMzYsMjggKzM3LDI5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogU3RyaW5nIENTU1JlZmxlY3RWYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgpIGNvbnN0CiB7
Ci0gICAgU3RyaW5nIHJlc3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICBzd2l0
Y2ggKG1fZGlyZWN0aW9uKSB7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvbkJlbG93OgotICAgICAg
ICAgICAgcmVzdWx0ICs9ICJiZWxvdyAiOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVy
YWwoImJlbG93ICIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlv
bkFib3ZlOgotICAgICAgICAgICAgcmVzdWx0ICs9ICJhYm92ZSAiOworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZExpdGVyYWwoImFib3ZlICIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgUmVmbGVjdGlvbkxlZnQ6Ci0gICAgICAgICAgICByZXN1bHQgKz0gImxlZnQgIjsKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJsZWZ0ICIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvblJpZ2h0OgotICAgICAgICAgICAgcmVzdWx0ICs9
ICJyaWdodCAiOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoInJpZ2h0ICIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsK
ICAgICB9CiAKLSAgICByZXN1bHQgKz0gbV9vZmZzZXQtPmNzc1RleHQoKSArICIgIjsKKyAgICBy
ZXN1bHQuYXBwZW5kKG1fb2Zmc2V0LT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmQoJyAn
KTsKICAgICBpZiAobV9tYXNrKQotICAgICAgICByZXN1bHQgKz0gbV9tYXNrLT5jc3NUZXh0KCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtX21hc2stPmNzc1Rl
eHQoKSk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiB2b2lkIENTU1JlZmxl
Y3RWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMs
IGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyogc3R5bGVTaGVldCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcAppbmRleCA5YWJiMTllNjlhNGFh
NmJlMGIzZGY5MmE1YTAyZTMwOGYzYmNmM2M1Li43Zjk2NDg5YWZlZDE0ZDM2MjE3NzdjNzBjNjMw
ZTc3NWViMDBlODIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVGltaW5nRnVu
Y3Rpb25WYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9u
VmFsdWUuY3BwCkBAIC00MywxNiArNDMsMTEgQEAgdm9pZCBDU1NMaW5lYXJUaW1pbmdGdW5jdGlv
blZhbHVlOjpyZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyoKIAog
U3RyaW5nIENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgp
IGNvbnN0CiB7Ci0gICAgU3RyaW5nIHRleHQoImN1YmljLWJlemllcigiKTsKLSAgICB0ZXh0ICs9
IFN0cmluZzo6bnVtYmVyKG1feDEpOwotICAgIHRleHQgKz0gIiwgIjsKLSAgICB0ZXh0ICs9IFN0
cmluZzo6bnVtYmVyKG1feTEpOwotICAgIHRleHQgKz0gIiwgIjsKLSAgICB0ZXh0ICs9IFN0cmlu
Zzo6bnVtYmVyKG1feDIpOwotICAgIHRleHQgKz0gIiwgIjsKLSAgICB0ZXh0ICs9IFN0cmluZzo6
bnVtYmVyKG1feTIpOwotICAgIHRleHQgKz0gIikiOwotICAgIHJldHVybiB0ZXh0OworICAgIHJl
dHVybiAiY3ViaWMtYmV6aWVyKCIgKworICAgICAgICBTdHJpbmc6Om51bWJlcihtX3gxKSArICIs
ICIgKworICAgICAgICBTdHJpbmc6Om51bWJlcihtX3kxKSArICIsICIgKworICAgICAgICBTdHJp
bmc6Om51bWJlcihtX3gyKSArICIsICIgKworICAgICAgICBTdHJpbmc6Om51bWJlcihtX3kyKSAr
ICIpIjsKIH0KIAogdm9pZCBDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWU6OnJlcG9y
dERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZv
KSBjb25zdApAQCAtNjIsMTIgKzU3LDcgQEAgdm9pZCBDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uVmFsdWU6OnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3QKIAogU3Ry
aW5nIENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgpIGNvbnN0CiB7
Ci0gICAgU3RyaW5nIHRleHQoInN0ZXBzKCIpOwotICAgIHRleHQgKz0gU3RyaW5nOjpudW1iZXIo
bV9zdGVwcyk7Ci0gICAgdGV4dCArPSAiLCAiOwotICAgIHRleHQgKz0gbV9zdGVwQXRTdGFydCA/
ICJzdGFydCIgOiAiZW5kIjsKLSAgICB0ZXh0ICs9ICIpIjsKLSAgICByZXR1cm4gdGV4dDsKKyAg
ICByZXR1cm4gInN0ZXBzKCIgKyBTdHJpbmc6Om51bWJlcihtX3N0ZXBzKSArICIsICIgKyAobV9z
dGVwQXRTdGFydCA/ICJzdGFydCIgOiAiZW5kIikgKyAiKSI7CiB9CiAKIHZvaWQgQ1NTU3RlcHNU
aW1pbmdGdW5jdGlvblZhbHVlOjpyZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2Jq
ZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVBy
b3BlcnR5U2V0LmNwcAppbmRleCAxOTY4OWI5MTMzYjcxNzIyMTlhNWYzZTJlZGE5NGYxZWU4MzRi
YjljLi40MTcxZjYyNThmMTYyNDU1NjY2ODFiZDk0NTRlNGJkODI4Nzc3ZDRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCkBAIC0yOTMsMjAgKzI5MywyNiBAQCBTdHJp
bmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0NFZhbHVlcyhjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRo
YW5kJiBzaG9ydGhhbmQpIGNvbgogICAgIGJvb2wgc2hvd0JvdHRvbSA9ICh0b3AtPnZhbHVlKCkt
PmNzc1RleHQoKSAhPSBib3R0b20tPnZhbHVlKCktPmNzc1RleHQoKSkgfHwgc2hvd0xlZnQ7CiAg
ICAgYm9vbCBzaG93UmlnaHQgPSAodG9wLT52YWx1ZSgpLT5jc3NUZXh0KCkgIT0gcmlnaHQtPnZh
bHVlKCktPmNzc1RleHQoKSkgfHwgc2hvd0JvdHRvbTsKIAotICAgIFN0cmluZyByZXMgPSB0b3At
PnZhbHVlKCktPmNzc1RleHQoKTsKLSAgICBpZiAoc2hvd1JpZ2h0KQotICAgICAgICByZXMgKz0g
IiAiICsgcmlnaHQtPnZhbHVlKCktPmNzc1RleHQoKTsKLSAgICBpZiAoc2hvd0JvdHRvbSkKLSAg
ICAgICAgcmVzICs9ICIgIiArIGJvdHRvbS0+dmFsdWUoKS0+Y3NzVGV4dCgpOwotICAgIGlmIChz
aG93TGVmdCkKLSAgICAgICAgcmVzICs9ICIgIiArIGxlZnQtPnZhbHVlKCktPmNzc1RleHQoKTsK
LQotICAgIHJldHVybiByZXM7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0
LmFwcGVuZCh0b3AtPnZhbHVlKCktPmNzc1RleHQoKSk7CisgICAgaWYgKHNob3dSaWdodCkgewor
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocmlnaHQt
PnZhbHVlKCktPmNzc1RleHQoKSk7CisgICAgfQorICAgIGlmIChzaG93Qm90dG9tKSB7CisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChib3R0b20tPnZh
bHVlKCktPmNzc1RleHQoKSk7CisgICAgfQorICAgIGlmIChzaG93TGVmdCkgeworICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobGVmdC0+dmFsdWUoKS0+
Y3NzVGV4dCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBT
dHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IFN0
eWxlUHJvcGVydHlTaG9ydGhhbmQmIHNob3J0aGFuZCkgY29uc3QKIHsKLSAgICBTdHJpbmcgcmVz
OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogCiAgICAgY29uc3QgdW5zaWduZWQgc2l6ZSA9
IHNob3J0aGFuZC5sZW5ndGgoKTsKICAgICAvLyBCZWdpbiBieSBjb2xsZWN0aW5nIHRoZSBwcm9w
ZXJ0aWVzIGludG8gYW4gYXJyYXkuCkBAIC0zMjcsNyArMzMzLDggQEAgU3RyaW5nIFN0eWxlUHJv
cGVydHlTZXQ6OmdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hv
cnRoYW5kJgogICAgIC8vIE5vdyBzdGl0Y2ggdGhlIHByb3BlcnRpZXMgdG9nZXRoZXIuICBJbXBs
aWNpdCBpbml0aWFsIHZhbHVlcyBhcmUgZmxhZ2dlZCBhcyBzdWNoIGFuZAogICAgIC8vIGNhbiBz
YWZlbHkgYmUgb21pdHRlZC4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUxheWVyczsg
aSsrKSB7Ci0gICAgICAgIFN0cmluZyBsYXllclJlczsKKyAgICAgICAgLy8gRklYTUU6IElzIHRo
ZXJlIHNvbWUgd2F5IG9mIGF2b2lkaW5nIGhhdmluZyBhIHNlY29uZCBTdHJpbmdCdWlsZGVyPwor
ICAgICAgICBTdHJpbmdCdWlsZGVyIGxheWVyUmVzdWx0OwogICAgICAgICBib29sIHVzZVJlcGVh
dFhTaG9ydGhhbmQgPSBmYWxzZTsKICAgICAgICAgYm9vbCB1c2VSZXBlYXRZU2hvcnRoYW5kID0g
ZmFsc2U7CiAgICAgICAgIGJvb2wgdXNlU2luZ2xlV29yZFNob3J0aGFuZCA9IGZhbHNlOwpAQCAt
MzgxLDQyICszODgsNDIgQEAgU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldExheWVyZWRTaG9y
dGhhbmRWYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJgogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlLT5pc0ltcGxpY2l0SW5pdGlhbFZhbHVl
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWxheWVyUmVzLmlzTnVsbCgpKQotICAgICAgICAg
ICAgICAgICAgICBsYXllclJlcyArPSAiICI7CisgICAgICAgICAgICAgICAgaWYgKCFsYXllclJl
c3VsdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGxheWVyUmVzdWx0LmFwcGVuZCgn
ICcpOwogICAgICAgICAgICAgICAgIGlmIChmb3VuZEJhY2tncm91bmRQb3NpdGlvbllDU1NQcm9w
ZXJ0eSAmJiBzaG9ydGhhbmQucHJvcGVydGllcygpW2pdID09IENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFNpemUpIAotICAgICAgICAgICAgICAgICAgICBsYXllclJlcyArPSAiLyAiOworICAgICAgICAg
ICAgICAgICAgICBsYXllclJlc3VsdC5hcHBlbmRMaXRlcmFsKCIvICIpOwogICAgICAgICAgICAg
ICAgIGlmICghZm91bmRCYWNrZ3JvdW5kUG9zaXRpb25ZQ1NTUHJvcGVydHkgJiYgc2hvcnRoYW5k
LnByb3BlcnRpZXMoKVtqXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplKSAKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICBpZiAodXNlUmVwZWF0WFNo
b3J0aGFuZCkgewogICAgICAgICAgICAgICAgICAgICB1c2VSZXBlYXRYU2hvcnRoYW5kID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IGdldFZhbHVlTmFtZShDU1NWYWx1
ZVJlcGVhdFgpOworICAgICAgICAgICAgICAgICAgICBsYXllclJlc3VsdC5hcHBlbmQoZ2V0VmFs
dWVOYW1lKENTU1ZhbHVlUmVwZWF0WCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXNl
UmVwZWF0WVNob3J0aGFuZCkgewogICAgICAgICAgICAgICAgICAgICB1c2VSZXBlYXRZU2hvcnRo
YW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IGdldFZhbHVlTmFt
ZShDU1NWYWx1ZVJlcGVhdFkpOworICAgICAgICAgICAgICAgICAgICBsYXllclJlc3VsdC5hcHBl
bmQoZ2V0VmFsdWVOYW1lKENTU1ZhbHVlUmVwZWF0WSkpOwogICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAodXNlU2luZ2xlV29yZFNob3J0aGFuZCkgewogICAgICAgICAgICAgICAgICAgICB1c2VT
aW5nbGVXb3JkU2hvcnRoYW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyUmVz
ICs9IHZhbHVlLT5jc3NUZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGxheWVyUmVzdWx0LmFw
cGVuZCh2YWx1ZS0+Y3NzVGV4dCgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgbGF5ZXJSZXMgKz0gdmFsdWUtPmNzc1RleHQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgbGF5ZXJSZXN1bHQuYXBwZW5kKHZhbHVlLT5jc3NUZXh0KCkpOwogCiAgICAgICAgICAg
ICAgICAgaWYgKHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbal0gPT0gQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kUG9zaXRpb25ZKQogICAgICAgICAgICAgICAgICAgICBmb3VuZEJhY2tncm91bmRQb3NpdGlv
bllDU1NQcm9wZXJ0eSA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoIWxheWVyUmVzLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoIXJlcy5pc051bGwo
KSkKLSAgICAgICAgICAgICAgICByZXMgKz0gIiwgIjsKLSAgICAgICAgICAgIHJlcyArPSBsYXll
clJlczsKKyAgICAgICAgaWYgKCFsYXllclJlc3VsdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGlmICghcmVzdWx0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0
ZXJhbCgiLCAiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobGF5ZXJSZXN1bHQpOwogICAg
ICAgICB9CiAgICAgfQotICAgIHJldHVybiByZXM7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmlu
ZygpOwogfQogCiBTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0U2hvcnRoYW5kVmFsdWUoY29u
c3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5kKSBjb25zdAogewotICAgIFN0cmlu
ZyByZXM7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNob3J0aGFuZC5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIGlmICghaXNQcm9wZXJ0
eUltcGxpY2l0KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbaV0pKSB7CiAgICAgICAgICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShzaG9ydGhhbmQucHJvcGVy
dGllcygpW2ldKTsKQEAgLTQyNCwxMiArNDMxLDEyIEBAIFN0cmluZyBTdHlsZVByb3BlcnR5U2V0
OjpnZXRTaG9ydGhhbmRWYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzaG9ydGhh
CiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgICAgICAgICAgaWYgKHZhbHVl
LT5pc0luaXRpYWxWYWx1ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgaWYgKCFyZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmVzICs9ICIgIjsKLSAgICAg
ICAgICAgIHJlcyArPSB2YWx1ZS0+Y3NzVGV4dCgpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQu
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQodmFsdWUtPmNzc1RleHQoKSk7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgcmV0dXJuIHJlczsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIC8vIG9u
bHkgcmV0dXJucyBhIG5vbi1udWxsIHZhbHVlIGlmIGFsbCBwcm9wZXJ0aWVzIGhhdmUgdGhlIHNh
bWUsIG5vbi1udWxsIHZhbHVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Js
b2JVUkwuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmNwcAppbmRleCBmNzQ3
ODUzNGM3NzVhOGE5NGM3NThkZmUzZTg1ZTBkN2VkMTk4NTBmLi43NGQxNmU0Y2E4MDFkYjgzMWI5
YjM3M2NiMjY3NzQ4YWU1YTdlMjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0Jsb2JVUkwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAKQEAg
LTcyLDExICs3Miw3IEBAIFN0cmluZyBCbG9iVVJMOjpnZXRJZGVudGlmaWVyKGNvbnN0IEtVUkwm
IHVybCkKIEtVUkwgQmxvYlVSTDo6Y3JlYXRlQmxvYlVSTChjb25zdCBTdHJpbmcmIG9yaWdpblN0
cmluZykKIHsKICAgICBBU1NFUlQoIW9yaWdpblN0cmluZy5pc0VtcHR5KCkpOwotICAgIFN0cmlu
ZyB1cmxTdHJpbmcgPSBrQmxvYlByb3RvY29sOwotICAgIHVybFN0cmluZyArPSAiOiI7Ci0gICAg
dXJsU3RyaW5nICs9IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMob3JpZ2luU3RyaW5nKTsK
LSAgICB1cmxTdHJpbmcgKz0gIi8iOwotICAgIHVybFN0cmluZyArPSBjcmVhdGVDYW5vbmljYWxV
VUlEU3RyaW5nKCk7CisgICAgU3RyaW5nIHVybFN0cmluZyA9ICJibG9iOiIgKyBlbmNvZGVXaXRo
VVJMRXNjYXBlU2VxdWVuY2VzKG9yaWdpblN0cmluZykgKyAiLyIgKyBjcmVhdGVDYW5vbmljYWxV
VUlEU3RyaW5nKCk7CiAgICAgcmV0dXJuIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNw
cAppbmRleCBjYTBhNGM1NWYwNzFmNTYyMWE3Y2Y5YTIzZGRiZDY0NjY0MmE5NjU3Li5mN2E2ZjU3
NGNkOTAzNzdkM2Q3YjcwNDljMWU3ZGJhNzEyZjBlZDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTMyNiw3ICszMjYsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fb2xkVGV4dCA9IG9sZFRleHQuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAg
ICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBvbmNlIHRoZSBtb2RlbCBoYW5kbGVzIHRoaXMgY2Fz
ZS4KICAgICAgICAgaWYgKCFtX29sZFRleHQuZW5kc1dpdGgoJzsnKSkKLSAgICAgICAgICAgIG1f
b2xkVGV4dCArPSAiOyI7CisgICAgICAgICAgICBtX29sZFRleHQuYXBwZW5kKCI7Iik7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDbGllbnQuY3BwCmluZGV4IDM3YzdiYzJkY2Y2MDA3Njc1YTM2YjUwYTlkZTA4Yjhh
YTg1ZmFhZTMuLjg2N2UwYmJkMzhiZDVjNDllMjkzMDQ2OTczOWFjZGM3ODU4NjUyZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwCkBAIC01NSw5ICs1
NSw3IEBAIGJvb2wgSW5zcGVjdG9yQ2xpZW50Ojpkb0Rpc3BhdGNoTWVzc2FnZU9uRnJvbnRlbmRQ
YWdlKFBhZ2UqIGZyb250ZW5kUGFnZSwgY29uc3QKICAgICBpZiAoIXNjcmlwdENvbnRyb2xsZXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBkaXNwYXRjaFRvRnJvbnRlbmQo
IldlYkluc3BlY3Rvci5kaXNwYXRjaE1lc3NhZ2VGcm9tQmFja2VuZCgiKTsKLSAgICBkaXNwYXRj
aFRvRnJvbnRlbmQgKz0gbWVzc2FnZTsKLSAgICBkaXNwYXRjaFRvRnJvbnRlbmQgKz0gIik7IjsK
KyAgICBTdHJpbmcgZGlzcGF0Y2hUb0Zyb250ZW5kID0gIldlYkluc3BlY3Rvci5kaXNwYXRjaE1l
c3NhZ2VGcm9tQmFja2VuZCgiICsgbWVzc2FnZSArICIpOyI7CiAKICAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgZXhlY3V0ZSB0aGUgc2NyaXB0IGluIHRoZSBhcHByb3ByaWF0ZSB3b3JsZC4KICAg
ICBzY3JpcHRDb250cm9sbGVyLT5ldmFsdWF0ZShTY3JpcHRTb3VyY2VDb2RlKGRpc3BhdGNoVG9G
cm9udGVuZCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnNvbGVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcAppbmRleCBhYzU5MDE4MWZjMmM3MGI1NTU5OWI4ZWE4MDIxYjNlNTI5NGI2
NmU1Li4wZTU0ZTY4YzgzY2NiNWU5ZmZjYTY1MWVjMmNlNDEzZWU5MGYwMjc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcApAQCAt
NDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjQ5LDExICsyNTAsMTQgQEAgdm9pZCBJbnNwZWN0b3JD
b25zb2xlQWdlbnQ6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29u
c3QgUmVzb3UKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChlcnJvci5pc0NhbmNlbGxhdGlvbigp
KSAvLyBSZXBvcnQgZmFpbHVyZXMgb25seS4KICAgICAgICAgcmV0dXJuOwotICAgIFN0cmluZyBt
ZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gbG9hZCByZXNvdXJjZSIpOwotICAgIGlm
ICghZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS5pc0VtcHR5KCkpCi0gICAgICAgIG1lc3Nh
Z2UgKz0gIjogIiArIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCk7CisgICAgU3RyaW5nQnVp
bGRlciBtZXNzYWdlOworICAgIG1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgiRmFpbGVkIHRvIGxvYWQg
cmVzb3VyY2UiKTsKKyAgICBpZiAoIWVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkuaXNFbXB0
eSgpKSB7CisgICAgICAgIG1lc3NhZ2UuYXBwZW5kKCcgJyk7CisgICAgICAgIG1lc3NhZ2UuYXBw
ZW5kKGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkpOworICAgIH0KICAgICBTdHJpbmcgcmVx
dWVzdElkID0gSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllcik7Ci0gICAg
YWRkQ29uc29sZU1lc3NhZ2UoYWRvcHRQdHIobmV3IENvbnNvbGVNZXNzYWdlKE5ldHdvcmtNZXNz
YWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGVy
cm9yLmZhaWxpbmdVUkwoKSwgcmVxdWVzdElkKSkpOworICAgIGFkZENvbnNvbGVNZXNzYWdlKGFk
b3B0UHRyKG5ldyBDb25zb2xlTWVzc2FnZShOZXR3b3JrTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2Fn
ZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCBtZXNzYWdlLnRvU3RyaW5nKCksIGVycm9yLmZhaWxp
bmdVUkwoKSwgcmVxdWVzdElkKSkpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6
c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoRXJyb3JTdHJpbmcqLCBib29sIGVuYWJsZWQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQu
Y3BwCmluZGV4IGZiNDBlZDQzZmU2ZTZlZWZjNWEwMjk2NzFiMDg3YzRlZmQ3MTgzNDEuLjJjY2Jj
NjE5NjY1OTgzMTE1YjgxZDAwMDg1NzdhMjQ3NjQ2OWVlM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuY3BwCkBAIC01ODEs
OCArNTgxLDcgQEAgdm9pZCBGaWxlQ29udGVudFJlcXVlc3Q6OmRpZFJlYWQoKQogICAgIH0KIAog
ICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVj
b2Rlcjo6Y3JlYXRlKG1fbWltZVR5cGUsIG1fY2hhcnNldCwgdHJ1ZSk7Ci0gICAgU3RyaW5nIHJl
c3VsdCA9IGRlY29kZXItPmRlY29kZShzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyLT5kYXRhKCkp
LCBidWZmZXItPmJ5dGVMZW5ndGgoKSk7Ci0gICAgcmVzdWx0ICs9IGRlY29kZXItPmZsdXNoKCk7
CisgICAgU3RyaW5nIHJlc3VsdCA9IGRlY29kZXItPmRlY29kZShzdGF0aWNfY2FzdDxjaGFyKj4o
YnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSkgKyBkZWNvZGVyLT5mbHVzaCgp
OwogICAgIG1fY2hhcnNldCA9IGRlY29kZXItPmVuY29kaW5nKCkuZG9tTmFtZSgpOwogICAgIHJl
cG9ydFJlc3VsdChzdGF0aWNfY2FzdDxGaWxlRXJyb3I6OkVycm9yQ29kZT4oMCksICZyZXN1bHQs
ICZtX2NoYXJzZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcAppbmRleCBiNjg0OWZhODkyNGZkMWQ1YTBkNjU3YzJkYTg0ZDIzMzFhZDA0
MzhmLi45OWNhMmY4NzQ5NTdhYjUwODNhODQ1NDI3MDRkNGU0NTFiZjI1N2Y1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtNzQsMTEg
Kzc0LDExIEBACiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291
cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9yLmgiCi0KICNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CkBAIC0xOTcsOCArMTk3LDcgQEAgYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291
cmNlQ29udGVudChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UsIFMKICAgICAgICAgICAg
IGlmICghZGVjb2RlcikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICBTdHJpbmcgY29udGVudCA9IGRlY29kZXItPmRlY29kZShidWZmZXItPmRhdGEoKSwgYnVmZmVy
LT5zaXplKCkpOwotICAgICAgICAgICAgY29udGVudCArPSBkZWNvZGVyLT5mbHVzaCgpOwotICAg
ICAgICAgICAgKnJlc3VsdCA9IGNvbnRlbnQ7CisgICAgICAgICAgICAqcmVzdWx0ID0gY29udGVu
dCArIGRlY29kZXItPmZsdXNoKCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgICAgICBkZWZhdWx0OgpAQCAtNTAzLDcgKzUwMiw3IEBAIHZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJh
eTxUeXBlCiAgICAgTGlzdEhhc2hTZXQ8Q29va2llPiByYXdDb29raWVzTGlzdDsKIAogICAgIC8v
IElmIHdlIGNhbid0IGdldCByYXcgY29va2llcyAtIGZhbGwgYmFjayB0byBTdHJpbmcgcmVwcmVz
ZW50YXRpb24KLSAgICBTdHJpbmcgc3RyaW5nQ29va2llc0xpc3Q7CisgICAgU3RyaW5nQnVpbGRl
ciBzdHJpbmdDb29raWVzTGlzdDsKIAogICAgIC8vIFJldHVybiB2YWx1ZSB0byBnZXRSYXdDb29r
aWVzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgZXZlcnkgY2FsbCBiZWNhdXNlCiAgICAgLy8gdGhl
IHJldHVybiB2YWx1ZSBpcyBwbGF0Zm9ybS9uZXR3b3JrIGJhY2tlbmQgc3BlY2lmaWMsIGFuZCB0
aGUgY2FsbCB3aWxsCkBAIC01MTksNyArNTE4LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmdldENvb2tpZXMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGUK
ICAgICAgICAgICAgIGlmICghcmF3Q29va2llc0ltcGxlbWVudGVkKSB7CiAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIG5lZWQgZHVwbGljYXRpb24gY2hlY2tpbmcgZm9yIHRoZSBTdHJpbmcg
cmVwcmVzZW50YXRpb24gb2YgY29va2llcy4KICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICAgICAgICAgICAgICBzdHJpbmdDb29raWVzTGlzdCArPSBkb2N1bWVudC0+
Y29va2llKGVjKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdDb29raWVzTGlzdC5hcHBlbmQoZG9j
dW1lbnQtPmNvb2tpZShlYykpOwogICAgICAgICAgICAgICAgIC8vIEV4Y2VwdGlvbnMgYXJlIHRo
cm93biBieSBjb29raWUoKSBpbiBzYW5kYm94ZWQgZnJhbWVzLiBUaGF0IHdvbid0IGhhcHBlbiBo
ZXJlCiAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSAiZG9jdW1lbnQiIGlzIHRoZSBkb2N1bWVu
dCBvZiB0aGUgbWFpbiBmcmFtZSBvZiB0aGUgcGFnZS4KICAgICAgICAgICAgICAgICBBU1NFUlQo
IWVjKTsKQEAgLTUzOSw3ICs1MzgsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29v
a2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZQogICAgICAg
ICAqY29va2llc1N0cmluZyA9ICIiOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvb2tpZXMgPSBU
eXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OkNvb2tpZT46OmNyZWF0ZSgpOwot
ICAgICAgICAqY29va2llc1N0cmluZyA9IHN0cmluZ0Nvb2tpZXNMaXN0OworICAgICAgICAqY29v
a2llc1N0cmluZyA9IHN0cmluZ0Nvb2tpZXNMaXN0LnRvU3RyaW5nKCk7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5k
ZXggMGUxZWUwODQ2M2I0YWEyYjY3N2E1NGRjZDRiZDViYWRhOTdmZTE5Zi4uZjU1YjJhMDVhMTY5
OGQ5YmJjMGIyYTMwNDdmMDU1MWRkMWQ2NTc4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAtODAxLDEyICs4MDEsMTQgQEAgYm9v
bCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRSdWxlU2VsZWN0b3IoY29uc3QgSW5zcGVjdG9yQ1NT
SWQmIGlkLCBjb25zdCBTdHJpbmcKIAogQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JTdHlsZVNoZWV0
OjphZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewot
ICAgIFN0cmluZyBzdHlsZVNoZWV0VGV4dDsKLSAgICBib29sIHN1Y2Nlc3MgPSBnZXRUZXh0KCZz
dHlsZVNoZWV0VGV4dCk7CisgICAgU3RyaW5nQnVpbGRlciBzdHlsZVNoZWV0VGV4dDsKKyAgICBT
dHJpbmcgdGV4dDsKKyAgICBib29sIHN1Y2Nlc3MgPSBnZXRUZXh0KCZ0ZXh0KTsKICAgICBpZiAo
IXN1Y2Nlc3MpIHsKICAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CisgICAgc3R5bGVTaGVldFRleHQuYXBwZW5kKHRleHQpOwogCiAgICAgbV9wYWdl
U3R5bGVTaGVldC0+YWRkUnVsZShzZWxlY3RvciwgIiIsIGVjKTsKICAgICBpZiAoZWMpCkBAIC04
MTUsMTMgKzgxNywxMyBAQCBDU1NTdHlsZVJ1bGUqIEluc3BlY3RvclN0eWxlU2hlZXQ6OmFkZFJ1
bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgRXhjZXB0aW9uQ29kZQogICAgIENTU1N0eWxlUnVs
ZSogcnVsZSA9IEluc3BlY3RvckNTU0FnZW50Ojphc0NTU1N0eWxlUnVsZShtX3BhZ2VTdHlsZVNo
ZWV0LT5pdGVtKG1fcGFnZVN0eWxlU2hlZXQtPmxlbmd0aCgpIC0gMSkpOwogICAgIEFTU0VSVChy
dWxlKTsKIAotICAgIGlmIChzdHlsZVNoZWV0VGV4dC5sZW5ndGgoKSkKLSAgICAgICAgc3R5bGVT
aGVldFRleHQgKz0gIlxuIjsKKyAgICBpZiAoIXN0eWxlU2hlZXRUZXh0LmlzRW1wdHkoKSkKKyAg
ICAgICAgc3R5bGVTaGVldFRleHQuYXBwZW5kKCdcbicpOwogCi0gICAgc3R5bGVTaGVldFRleHQg
Kz0gc2VsZWN0b3I7Ci0gICAgc3R5bGVTaGVldFRleHQgKz0gIiB7fSI7CisgICAgc3R5bGVTaGVl
dFRleHQuYXBwZW5kKHNlbGVjdG9yKTsKKyAgICBzdHlsZVNoZWV0VGV4dC5hcHBlbmRMaXRlcmFs
KCIge30iKTsKICAgICAvLyBVc2luZyBzZXRUZXh0KCkgYXMgdGhpcyBvcGVyYXRpb24gY2hhbmdl
cyB0aGUgc3R5bGUgc2hlZXQgcnVsZSBzZXQuCi0gICAgc2V0VGV4dChzdHlsZVNoZWV0VGV4dCk7
CisgICAgc2V0VGV4dChzdHlsZVNoZWV0VGV4dC50b1N0cmluZygpKTsKIAogICAgIGZpcmVTdHls
ZVNoZWV0Q2hhbmdlZCgpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161572</attachid>
            <date>2012-08-30 15:16:24 -0700</date>
            <delta_ts>2012-08-30 17:07:49 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-95502-20120830151610.patch</filename>
            <type>text/plain</type>
            <size>38008</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjI4M2U0YjY4ZDZlNDcw
MmFiMjFlMzVkZjNmZjFhYWM4MjZlNWEyZC4uZjJiZjBjZGNlNWFmZTdmYzVkNWY0MzczMzVkMDY1
Y2YwZGUwMWVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTA4LTMwICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBtb3JlIGluc3Rh
bmNlcyBvZiArPSB3aXRoIFN0cmluZ0J1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZW1vdmVzIG1hbnkgdXNlcyBvZiBXVEY6OlN0
cmluZzo6b3BlcmF0b3IrPSBpbiBXZWJDb3JlLgorICAgICAgICBNYW55IG9mIHRoZXNlIHVzZXMg
YXJlIGluZWZmaWNpZW50IGJlY2F1c2UgdGhleSBjYXVzZSB1cyB0byBhbGxvY2F0ZQorICAgICAg
ICBhbmQgbWVtY3B5IHN0cmluZ3MgbW9yZSB0aW1lcyB0aGFuIG5lY2Vzc2FyeS4gSW4gbW9zdCBj
YXNlcywgSSd2ZQorICAgICAgICByZXBsYWNlIHRoZXNlIGluZWZmaWNpZW50IHBhdHRlcm5zIHdp
dGggU3RyaW5nQnVpbGRlci4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIHByb2dyZXNzIHRv
d2FyZHMgcmVtb3ZpbmcgV1RGOjpTdHJpbmc6Om9wZXJhdG9yKz0gZnJvbQorICAgICAgICB0aGUg
cHJvamVjdC4KKworICAgICAgICBXZSBjYW4gbWFrZSBjc3NUZXh0KCkgbW9yZSBlZmZpY2llbnQg
YnkgcGFzc2luZyBhIHNpbmdsZSBTdHJpbmdCdWlsZGVyCisgICAgICAgIGluc3RhbmNlIGFsb25n
IHRvIHRoZSByZWN1cnNpdmUgY2FsbHMsIGJ1dCBJJ3ZlIGxlZnQgdGhhdCBmb3IgYSBsYXRlcgor
ICAgICAgICBwYXRjaC4KKworICAgICAgICAqIGNzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlOjpjdXN0b21D
c3NUZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGb250RmFjZVNyY1ZhbHVlOjpjdXN0b21Dc3NUZXh0KToKKyAgICAgICAg
KiBjc3MvQ1NTRnVuY3Rpb25WYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGdW5jdGlv
blZhbHVlOjpjdXN0b21Dc3NUZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjdXN0b21Dc3NU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmN1c3RvbUNz
c1RleHQpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZSk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpjdXN0b21Dc3NU
ZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTUmVmbGVjdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1JlZmxlY3RWYWx1ZTo6Y3VzdG9tQ3NzVGV4dCk6CisgICAgICAgICogY3NzL0NTU1Rp
bWluZ0Z1bmN0aW9uVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvblZhbHVlOjpjdXN0b21Dc3NUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3VzdG9tQ3NzVGV4dCk6CisgICAgICAgICogY3Nz
L1N0eWxlUHJvcGVydHlTZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNl
dDo6Z2V0NFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0OjpnZXRM
YXllcmVkU2hvcnRoYW5kVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNl
dDo6Z2V0U2hvcnRoYW5kVmFsdWUpOgorICAgICAgICAqIGZpbGVhcGkvQmxvYlVSTC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpCbG9iVVJMOjpjcmVhdGVCbG9iVVJMKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q1NTQWdlbnQ6OlNldFByb3BlcnR5VGV4dEFjdGlvbjo6cmVkbyk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDbGll
bnQ6OmRvRGlzcGF0Y2hNZXNzYWdlT25Gcm9udGVuZFBhZ2UpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29uc29sZUFnZW50OjpkaWRGYWlsTG9hZGluZyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckZpbGVTeXN0ZW1BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVT
aGVldDo6YWRkUnVsZSk6CisKIDIwMTItMDgtMzAgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBNYWtlIFJlbmRlckJveDo6Y29tcHV0ZUlubGluZURpcmVjdGlvbk1h
cmdpbnMgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFn
ZVNsaWNlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlU2xpY2VW
YWx1ZS5jcHAKaW5kZXggNTUxZGYxZjYwNDExZTliZGNkODEwY2NmMGU0ZTQwY2U0MjI0NDBhZi4u
Mzk0Y2MyODk0YTQxZTQwMTNhNWYzNDI2ZjhiZGRlOWMxMTgxMWY3ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHAKQEAgLTQ2LDcgKzQ2LDcg
QEAgU3RyaW5nIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgpIGNvbnN0
CiAKICAgICAvLyBOb3cgdGhlIGZpbGwga2V5d29yZHMgaWYgaXQgaXMgcHJlc2VudC4KICAgICBp
ZiAobV9maWxsKQotICAgICAgICB0ZXh0ICs9ICIgZmlsbCI7CisgICAgICAgIHJldHVybiB0ZXh0
ICsgIiBmaWxsIjsKICAgICByZXR1cm4gdGV4dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlU3JjVmFsdWUuY3BwCmluZGV4IGRiNGViOWIzNjQ3ZGQ1NjNhY2YwN2VkOTA5NTll
ZTYyMDE0NjhhNzQuLjhjYTJjMWQxYzRhOGU3NWYxOTRhOTU5NTg1M2NlZjdiNjNjMzA0MWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHAKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYzLDE2ICs2NCwxOSBA
QCBib29sIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmlzU3VwcG9ydGVkRm9ybWF0KCkgY29uc3QKIAog
U3RyaW5nIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmN1c3RvbUNzc1RleHQoKSBjb25zdAogewotICAg
IFN0cmluZyByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgaWYgKGlzTG9j
YWwoKSkKLSAgICAgICAgcmVzdWx0ICs9ICJsb2NhbCgiOworICAgICAgICByZXN1bHQuYXBwZW5k
TGl0ZXJhbCgibG9jYWwoIik7CiAgICAgZWxzZQotICAgICAgICByZXN1bHQgKz0gInVybCgiOwot
ICAgIHJlc3VsdCArPSBtX3Jlc291cmNlOwotICAgIHJlc3VsdCArPSAiKSI7Ci0gICAgaWYgKCFt
X2Zvcm1hdC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdCArPSAiIGZvcm1hdCgiICsgbV9mb3Jt
YXQgKyAiKSI7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVy
YWwoInVybCgiKTsKKyAgICByZXN1bHQuYXBwZW5kKG1fcmVzb3VyY2UpOworICAgIHJlc3VsdC5h
cHBlbmQoJyknKTsKKyAgICBpZiAoIW1fZm9ybWF0LmlzRW1wdHkoKSkgeworICAgICAgICByZXN1
bHQuYXBwZW5kTGl0ZXJhbCgiIGZvcm1hdCgiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtX2Zv
cm1hdCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdC50b1N0cmluZygpOwogfQogCiB2b2lkIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmFkZFN1YnJl
c291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0
Q29udGVudHMqIHN0eWxlU2hlZXQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRnVuY3Rpb25WYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRnVuY3Rpb25W
YWx1ZS5jcHAKaW5kZXggOWY4ZjI0ZjMwMzBlMWNmZmQ4YmZlMjM2NWYyMGU4ZTM1MWI3Y2YzNi4u
MzY2ODc3ZjJmMmVmMWUyZDc2ZTBmZGRmY2VlYzhiODQzNDdkNjExNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGdW5jdGlvblZhbHVlLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNT
U1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIk1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDExICs0NCwxMiBAQCBDU1NGdW5jdGlv
blZhbHVlOjpDU1NGdW5jdGlvblZhbHVlKENTU1BhcnNlckZ1bmN0aW9uKiBmdW5jdGlvbikKIAog
U3RyaW5nIENTU0Z1bmN0aW9uVmFsdWU6OmN1c3RvbUNzc1RleHQoKSBjb25zdAogewotICAgIFN0
cmluZyByZXN1bHQgPSBtX25hbWU7IC8vIEluY2x1ZGVzIHRoZSAnKCcKKyAgICBTdHJpbmdCdWls
ZGVyIHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKG1fbmFtZSk7IC8vIEluY2x1ZGVzIHRoZSAn
KCcKICAgICBpZiAobV9hcmdzKQotICAgICAgICByZXN1bHQgKz0gbV9hcmdzLT5jc3NUZXh0KCk7
Ci0gICAgcmVzdWx0ICs9ICIpIjsKLSAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXN1bHQu
YXBwZW5kKGNzc1RleHQoKSk7CisgICAgcmVzdWx0LmFwcGVuZCgnKScpOworICAgIHJldHVybiBy
ZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogdm9pZCBDU1NGdW5jdGlvblZhbHVlOjpyZXBvcnREZXNj
ZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCBjN2RhYWNjODdi
Y2M4MDNmMTc0NjRlNDU5MTlhYTk2NjU2MjVmZmFkLi44NTUxNGY1OTJlYjI2MjFkMjkzMGY5MDMx
Njc1MmFhNTFmYTg2OTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGll
bnRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3Bw
CkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRl
ICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC00
NzMsNTEgKzQ3NCw3MSBAQCB2b2lkIENTU0dyYWRpZW50VmFsdWU6OnJlcG9ydEJhc2VDbGFzc01l
bW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdAogCiBTdHJpbmcgQ1NTTGlu
ZWFyR3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIHJl
c3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICBpZiAobV9kZXByZWNhdGVkVHlw
ZSkgewotICAgICAgICByZXN1bHQgPSAiLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsICI7Ci0gICAg
ICAgIHJlc3VsdCArPSBtX2ZpcnN0WC0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICByZXN1bHQg
Kz0gbV9maXJzdFktPmNzc1RleHQoKSArICIsICI7Ci0gICAgICAgIHJlc3VsdCArPSBtX3NlY29u
ZFgtPmNzc1RleHQoKSArICIgIjsKLSAgICAgICAgcmVzdWx0ICs9IG1fc2Vjb25kWS0+Y3NzVGV4
dCgpOworICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLXdlYmtpdC1ncmFkaWVudChsaW5l
YXIsICIpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RYLT5jc3NUZXh0KCkpOworICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFkt
PmNzc1RleHQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAg
ICByZXN1bHQuYXBwZW5kKG1fc2Vjb25kWC0+Y3NzVGV4dCgpKTsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICcpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fc2Vjb25kWS0+Y3NzVGV4dCgpKTsK
IAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7IGkrKykg
ewogICAgICAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3AgPSBtX3N0b3Bz
W2ldOwotICAgICAgICAgICAgcmVzdWx0ICs9ICIsICI7Ci0gICAgICAgICAgICBpZiAoc3RvcC5t
X3Bvc2l0aW9uLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikg
PT0gMCkKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gImZyb20oIiArIHN0b3AubV9jb2xvci0+
Y3NzVGV4dCgpICsgIikiOwotICAgICAgICAgICAgZWxzZSBpZiAoc3RvcC5tX3Bvc2l0aW9uLT5n
ZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikgPT0gMSkKLSAgICAg
ICAgICAgICAgICByZXN1bHQgKz0gInRvKCIgKyBzdG9wLm1fY29sb3ItPmNzc1RleHQoKSArICIp
IjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gImNvbG9yLXN0
b3AoIiArIFN0cmluZzo6bnVtYmVyKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUoQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKSArICIsICIgKyBzdG9wLm1fY29sb3ItPmNzc1Rl
eHQoKSArICIpIjsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOworICAg
ICAgICAgICAgaWYgKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpID09IDApIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
TGl0ZXJhbCgiZnJvbSgiKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0b3AubV9j
b2xvci0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcpJyk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUoQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kTGl0ZXJhbCgidG8oIik7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChz
dG9wLm1fY29sb3ItPmNzc1RleHQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
KScpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
TGl0ZXJhbCgiY29sb3Itc3RvcCgiKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFN0
cmluZzo6bnVtYmVyKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVy
YWwoIiwgIik7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdG9wLm1fY29sb3ItPmNz
c1RleHQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gbV9yZXBlYXRp
bmcgPyAiLXdlYmtpdC1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KCIgOiAiLXdlYmtpdC1saW5l
YXItZ3JhZGllbnQoIjsKKyAgICAgICAgaWYgKG1fcmVwZWF0aW5nKQorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZExpdGVyYWwoIi13ZWJraXQtcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgiKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIi13ZWJraXQt
bGluZWFyLWdyYWRpZW50KCIpOworCiAgICAgICAgIGlmIChtX2FuZ2xlKQotICAgICAgICAgICAg
cmVzdWx0ICs9IG1fYW5nbGUtPmNzc1RleHQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
bV9hbmdsZS0+Y3NzVGV4dCgpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9m
aXJzdFggJiYgbV9maXJzdFkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IG1fZmlyc3RYLT5j
c3NUZXh0KCkgKyAiICIgKyBtX2ZpcnN0WS0+Y3NzVGV4dCgpOwotICAgICAgICAgICAgZWxzZSBp
ZiAobV9maXJzdFggfHwgbV9maXJzdFkpIHsKKyAgICAgICAgICAgIGlmIChtX2ZpcnN0WCAmJiBt
X2ZpcnN0WSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFgtPmNzc1Rl
eHQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFktPmNzc1RleHQoKSk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKG1fZmlyc3RYIHx8IG1fZmlyc3RZKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fZmly
c3RYKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gbV9maXJzdFgtPmNzc1RleHQoKTsK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgpKTsK
IAogICAgICAgICAgICAgICAgIGlmIChtX2ZpcnN0WSkKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ICs9IG1fZmlyc3RZLT5jc3NUZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQobV9maXJzdFktPmNzc1RleHQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7IGkrKykgewog
ICAgICAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3AgPSBtX3N0b3BzW2ld
OwotICAgICAgICAgICAgcmVzdWx0ICs9ICIsICI7Ci0gICAgICAgICAgICByZXN1bHQgKz0gc3Rv
cC5tX2NvbG9yLT5jc3NUZXh0KCk7Ci0gICAgICAgICAgICBpZiAoc3RvcC5tX3Bvc2l0aW9uKQot
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiICIgKyBzdG9wLm1fcG9zaXRpb24tPmNzc1RleHQo
KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChzdG9wLm1fY29sb3ItPmNzc1RleHQoKSk7CisgICAgICAgICAgICBpZiAo
c3RvcC5tX3Bvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwor
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RvcC5tX3Bvc2l0aW9uLT5jc3NUZXh0KCkp
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgcmVzdWx0ICs9ICIpIjsK
LSAgICByZXR1cm4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKKyAgICByZXR1cm4g
cmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIC8vIENvbXB1dGUgdGhlIGVuZHBvaW50cyBzbyB0aGF0
IGEgZ3JhZGllbnQgb2YgdGhlIGdpdmVuIGFuZ2xlIGNvdmVycyBhIGJveCBvZiB0aGUgZ2l2ZW4g
c2l6ZS4KQEAgLTYyMiw3MSArNjQzLDkyIEBAIHZvaWQgQ1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6
cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yCiAKIFN0
cmluZyBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjdXN0b21Dc3NUZXh0KCkgY29uc3QKIHsKLSAg
ICBTdHJpbmcgcmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogCiAgICAgaWYgKG1f
ZGVwcmVjYXRlZFR5cGUpIHsKLSAgICAgICAgcmVzdWx0ID0gIi13ZWJraXQtZ3JhZGllbnQocmFk
aWFsLCAiOwotCi0gICAgICAgIHJlc3VsdCArPSBtX2ZpcnN0WC0+Y3NzVGV4dCgpICsgIiAiOwot
ICAgICAgICByZXN1bHQgKz0gbV9maXJzdFktPmNzc1RleHQoKSArICIsICI7Ci0gICAgICAgIHJl
c3VsdCArPSBtX2ZpcnN0UmFkaXVzLT5jc3NUZXh0KCkgKyAiLCAiOwotICAgICAgICByZXN1bHQg
Kz0gbV9zZWNvbmRYLT5jc3NUZXh0KCkgKyAiICI7Ci0gICAgICAgIHJlc3VsdCArPSBtX3NlY29u
ZFktPmNzc1RleHQoKTsKLSAgICAgICAgcmVzdWx0ICs9ICIsICI7Ci0gICAgICAgIHJlc3VsdCAr
PSBtX3NlY29uZFJhZGl1cy0+Y3NzVGV4dCgpOworICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJh
bCgiLXdlYmtpdC1ncmFkaWVudChyYWRpYWwsICIpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1f
Zmlyc3RYLT5jc3NUZXh0KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAg
IHJlc3VsdC5hcHBlbmQobV9maXJzdFktPmNzc1RleHQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBl
bmRMaXRlcmFsKCIsICIpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RSYWRpdXMtPmNz
c1RleHQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKG1fc2Vjb25kWC0+Y3NzVGV4dCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICcpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fc2Vjb25kWS0+Y3NzVGV4dCgpKTsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
bV9zZWNvbmRSYWRpdXMtPmNzc1RleHQoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IHNoYXJlPwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7IGkrKykgewog
ICAgICAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3AgPSBtX3N0b3BzW2ld
OwotICAgICAgICAgICAgcmVzdWx0ICs9ICIsICI7Ci0gICAgICAgICAgICBpZiAoc3RvcC5tX3Bv
c2l0aW9uLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikgPT0g
MCkKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gImZyb20oIiArIHN0b3AubV9jb2xvci0+Y3Nz
VGV4dCgpICsgIikiOwotICAgICAgICAgICAgZWxzZSBpZiAoc3RvcC5tX3Bvc2l0aW9uLT5nZXRE
b3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikgPT0gMSkKLSAgICAgICAg
ICAgICAgICByZXN1bHQgKz0gInRvKCIgKyBzdG9wLm1fY29sb3ItPmNzc1RleHQoKSArICIpIjsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gImNvbG9yLXN0b3Ao
IiArIFN0cmluZzo6bnVtYmVyKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKSArICIsICIgKyBzdG9wLm1fY29sb3ItPmNzc1RleHQo
KSArICIpIjsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAg
ICAgICAgaWYgKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpID09IDApIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0
ZXJhbCgiZnJvbSgiKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0b3AubV9jb2xv
ci0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcpJyk7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kTGl0ZXJhbCgidG8oIik7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdG9w
Lm1fY29sb3ItPmNzc1RleHQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0
ZXJhbCgiY29sb3Itc3RvcCgiKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFN0cmlu
Zzo6bnVtYmVyKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwo
IiwgIik7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdG9wLm1fY29sb3ItPmNzc1Rl
eHQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScpOworICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fcmVwZWF0aW5nKQorICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIi13ZWJraXQtcmVwZWF0aW5nLXJhZGlhbC1n
cmFkaWVudCgiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVy
YWwoIi13ZWJraXQtcmFkaWFsLWdyYWRpZW50KCIpOwogCi0gICAgICAgIHJlc3VsdCA9IG1fcmVw
ZWF0aW5nID8gIi13ZWJraXQtcmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVudCgiIDogIi13ZWJraXQt
cmFkaWFsLWdyYWRpZW50KCI7CiAgICAgICAgIGlmIChtX2ZpcnN0WCAmJiBtX2ZpcnN0WSkgewot
ICAgICAgICAgICAgcmVzdWx0ICs9IG1fZmlyc3RYLT5jc3NUZXh0KCkgKyAiICIgKyBtX2ZpcnN0
WS0+Y3NzVGV4dCgpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4
dCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQobV9maXJzdFktPmNzc1RleHQoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAobV9maXJz
dFgpCi0gICAgICAgICAgICByZXN1bHQgKz0gbV9maXJzdFgtPmNzc1RleHQoKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFgtPmNzc1RleHQoKSk7CiAgICAgICAgICBlbHNlIGlm
IChtX2ZpcnN0WSkKLSAgICAgICAgICAgIHJlc3VsdCArPSBtX2ZpcnN0WS0+Y3NzVGV4dCgpOwor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WS0+Y3NzVGV4dCgpKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcmVzdWx0ICs9ICJjZW50ZXIiOwotCisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kTGl0ZXJhbCgiY2VudGVyIik7CiAKICAgICAgICAgaWYgKG1fc2hhcGUgfHwgbV9z
aXppbmdCZWhhdmlvcikgewotICAgICAgICAgICAgcmVzdWx0ICs9ICIsICI7Ci0gICAgICAgICAg
ICBpZiAobV9zaGFwZSkKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gbV9zaGFwZS0+Y3NzVGV4
dCgpICsgIiAiOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCArPSAi
ZWxsaXBzZSAiOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAg
ICAgICAgICBpZiAobV9zaGFwZSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9z
aGFwZS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgi
ZWxsaXBzZSAiKTsKIAogICAgICAgICAgICAgaWYgKG1fc2l6aW5nQmVoYXZpb3IpCi0gICAgICAg
ICAgICAgICAgcmVzdWx0ICs9IG1fc2l6aW5nQmVoYXZpb3ItPmNzc1RleHQoKTsKKyAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKG1fc2l6aW5nQmVoYXZpb3ItPmNzc1RleHQoKSk7CiAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICJjb3ZlciI7CisgICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoImNvdmVyIik7CiAKICAgICAgICAgfSBlbHNl
IGlmIChtX2VuZEhvcml6b250YWxTaXplICYmIG1fZW5kVmVydGljYWxTaXplKSB7Ci0gICAgICAg
ICAgICByZXN1bHQgKz0gIiwgIjsKLSAgICAgICAgICAgIHJlc3VsdCArPSBtX2VuZEhvcml6b250
YWxTaXplLT5jc3NUZXh0KCkgKyAiICIgKyBtX2VuZFZlcnRpY2FsU2l6ZS0+Y3NzVGV4dCgpOwor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKG1fZW5kSG9yaXpvbnRhbFNpemUtPmNzc1RleHQoKSk7CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZW5kVmVydGlj
YWxTaXplLT5jc3NUZXh0KCkpOwogICAgICAgICB9CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fc3RvcHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIGNvbnN0IENTU0dy
YWRpZW50Q29sb3JTdG9wJiBzdG9wID0gbV9zdG9wc1tpXTsKLSAgICAgICAgICAgIHJlc3VsdCAr
PSAiLCAiOwotICAgICAgICAgICAgcmVzdWx0ICs9IHN0b3AubV9jb2xvci0+Y3NzVGV4dCgpOwot
ICAgICAgICAgICAgaWYgKHN0b3AubV9wb3NpdGlvbikKLSAgICAgICAgICAgICAgICByZXN1bHQg
Kz0gIiAiICsgc3RvcC5tX3Bvc2l0aW9uLT5jc3NUZXh0KCk7CisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RvcC5tX2Nv
bG9yLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgaWYgKHN0b3AubV9wb3NpdGlvbikgeworICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHN0b3AubV9wb3NpdGlvbi0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KIAotICAgIHJlc3VsdCArPSAiKSI7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXN1bHQuYXBwZW5kKCcpJyk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQog
CiBmbG9hdCBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpyZXNvbHZlUmFkaXVzKENTU1ByaW1pdGl2
ZVZhbHVlKiByYWRpdXMsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHls
ZSwgZmxvYXQqIHdpZHRoT3JIZWlnaHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IGZi
MzhhNzgxZmVjNmRhNzVlMTMwMjBhNGMyNzU3ZmNiM2Y0NWQ5OTkuLjg1YWQ0YjMzMDJhZDJjZTlk
NzdiMDVkOWQ3ODIyMjI2YmZkNjQ4MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC05
OTQ4LDE3ICs5OTQ4LDE3IEBAIHZvaWQgQ1NTUGFyc2VyOjpkZWxldGVGb250RmFjZU9ubHlWYWx1
ZXMoKQogU3R5bGVLZXlmcmFtZSogQ1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZShDU1NQYXJzZXJW
YWx1ZUxpc3QqIGtleXMpCiB7CiAgICAgLy8gQ3JlYXRlIGEga2V5IHN0cmluZyBmcm9tIHRoZSBw
YXNzZWQga2V5cwotICAgIFN0cmluZyBrZXlTdHJpbmc7CisgICAgU3RyaW5nQnVpbGRlciBrZXlT
dHJpbmc7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleXMtPnNpemUoKTsgKytpKSB7
CiAgICAgICAgIGZsb2F0IGtleSA9IHN0YXRpY19jYXN0PGZsb2F0PihrZXlzLT52YWx1ZUF0KGkp
LT5mVmFsdWUpOwogICAgICAgICBpZiAoaSAhPSAwKQotICAgICAgICAgICAga2V5U3RyaW5nICs9
ICIsIjsKLSAgICAgICAga2V5U3RyaW5nICs9IFN0cmluZzo6bnVtYmVyKGtleSk7Ci0gICAgICAg
IGtleVN0cmluZyArPSAiJSI7CisgICAgICAgICAgICBrZXlTdHJpbmcuYXBwZW5kKCcsJyk7Cisg
ICAgICAgIGtleVN0cmluZy5hcHBlbmQoU3RyaW5nOjpudW1iZXIoa2V5KSk7CisgICAgICAgIGtl
eVN0cmluZy5hcHBlbmQoJyUnKTsKICAgICB9CiAKICAgICBSZWZQdHI8U3R5bGVLZXlmcmFtZT4g
a2V5ZnJhbWUgPSBTdHlsZUtleWZyYW1lOjpjcmVhdGUoKTsKLSAgICBrZXlmcmFtZS0+c2V0S2V5
VGV4dChrZXlTdHJpbmcpOworICAgIGtleWZyYW1lLT5zZXRLZXlUZXh0KGtleVN0cmluZy50b1N0
cmluZygpKTsKICAgICBrZXlmcmFtZS0+c2V0UHJvcGVydGllcyhjcmVhdGVTdHlsZVByb3BlcnR5
U2V0KCkpOwogCiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1By
aW1pdGl2ZVZhbHVlLmNwcAppbmRleCA1YjJkN2M3NDczYTcwNzNjNTg2N2UzNWJjMjE1YTY4NTQ0
NzAyMTVjLi4xYTEyNTlmMTk3NTgwYzVjMmYyMjNhYzM3NDQ0YjBjYTljNDE0MWRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKQEAgLTk0OCw5ICs5NDgsNyBAQCBT
dHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmN1c3RvbUNzc1RleHQoKSBjb25zdAogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NfQ09VTlRFUl9OQU1FOgotICAg
ICAgICAgICAgdGV4dCA9ICJjb3VudGVyKCI7Ci0gICAgICAgICAgICB0ZXh0ICs9IG1fdmFsdWUu
c3RyaW5nOwotICAgICAgICAgICAgdGV4dCArPSAiKSI7CisgICAgICAgICAgICB0ZXh0ID0gImNv
dW50ZXIoIiArIFN0cmluZyhtX3ZhbHVlLnN0cmluZykgKyAiKSI7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBDU1NfQ09VTlRFUjogewogICAgICAgICAgICAgU3RyaW5nQnVpbGRl
ciByZXN1bHQ7CkBAIC0xMDM0LDMwICsxMDMyLDM0IEBAIFN0cmluZyBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3VzdG9tQ3NzVGV4dCgpIGNvbnN0CiAgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjphZG9w
dChyZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBD
U1NfUEFJUjoKLSAgICAgICAgICAgIHRleHQgPSBtX3ZhbHVlLnBhaXItPmZpcnN0KCktPmNzc1Rl
eHQoKTsKKyAgICAgICAgY2FzZSBDU1NfUEFJUjogeworICAgICAgICAgICAgU3RyaW5nQnVpbGRl
ciByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fdmFsdWUucGFpci0+Zmlyc3Qo
KS0+Y3NzVGV4dCgpKTsKICAgICAgICAgICAgIGlmIChtX3ZhbHVlLnBhaXItPnNlY29uZCgpICE9
IG1fdmFsdWUucGFpci0+Zmlyc3QoKSkgewotICAgICAgICAgICAgICAgIHRleHQgKz0gIiAiOwot
ICAgICAgICAgICAgICAgIHRleHQgKz0gbV92YWx1ZS5wYWlyLT5zZWNvbmQoKS0+Y3NzVGV4dCgp
OworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKG1fdmFsdWUucGFpci0+c2Vjb25kKCktPmNzc1RleHQoKSk7CiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0ZXh0ID0gcmVzdWx0LnRvU3RyaW5nKCk7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkgfHwgRU5B
QkxFKFdJREdFVF9SRUdJT04pCi0gICAgICAgIGNhc2UgQ1NTX0RBU0hCT0FSRF9SRUdJT046Cisg
ICAgICAgIGNhc2UgQ1NTX0RBU0hCT0FSRF9SRUdJT046IHsKKyAgICAgICAgICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OwogICAgICAgICAgICAgZm9yIChEYXNoYm9hcmRSZWdpb24qIHJlZ2lvbiA9
IGdldERhc2hib2FyZFJlZ2lvblZhbHVlKCk7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25l
eHQuZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgICAgICAgICB0ZXh0LmFwcGVuZCgnICcpOworICAgICAgICAgICAgICAgIGlmICghcmVz
dWx0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwog
I2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkgJiYgRU5BQkxFKFdJREdFVF9SRUdJT04pCi0g
ICAgICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPm1fY3NzRnVuY3Rpb25OYW1lOworICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVnaW9uLT5tX2Nzc0Z1bmN0aW9uTmFtZSk7CiAjZWxp
ZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCi0gICAgICAgICAgICAgICAgdGV4dCArPSAiZGFz
aGJvYXJkLXJlZ2lvbigiOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJk
YXNoYm9hcmQtcmVnaW9uKCIpOwogI2Vsc2UKLSAgICAgICAgICAgICAgICB0ZXh0ICs9ICJyZWdp
b24oIjsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgicmVnaW9uKCIpOwog
I2VuZGlmCi0gICAgICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPm1fbGFiZWw7CisgICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChyZWdpb24tPm1fbGFiZWwpOwogICAgICAgICAgICAgICAg
IGlmIChyZWdpb24tPm1faXNDaXJjbGUpCi0gICAgICAgICAgICAgICAgICAgIHRleHQgKz0gIiBj
aXJjbGUiOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiIGNpcmNs
ZSIpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbi0+bV9pc1JlY3RhbmdsZSkKLSAg
ICAgICAgICAgICAgICAgICAgdGV4dCArPSAiIHJlY3RhbmdsZSI7CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIgcmVjdGFuZ2xlIik7CiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAocmVn
aW9uLT50b3AoKS0+bV9wcmltaXRpdmVVbml0VHlwZSA9PSBDU1NfSURFTlQgJiYgcmVnaW9uLT50
b3AoKS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUludmFsaWQpIHsKQEAgLTEwNjgsMTUgKzEwNzAs
MjAgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjdXN0b21Dc3NUZXh0KCkgY29uc3QKICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lvbi0+Ym90dG9tKCktPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVJbnZhbGlkKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lvbi0+bGVm
dCgpLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW52YWxpZCk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dC5hcHBlbmQoJyAnKTsKLSAgICAgICAgICAg
ICAgICAgICAgdGV4dCArPSByZWdpb24tPnRvcCgpLT5jc3NUZXh0KCkgKyAiICI7Ci0gICAgICAg
ICAgICAgICAgICAgIHRleHQgKz0gcmVnaW9uLT5yaWdodCgpLT5jc3NUZXh0KCkgKyAiICI7Ci0g
ICAgICAgICAgICAgICAgICAgIHRleHQgKz0gcmVnaW9uLT5ib3R0b20oKS0+Y3NzVGV4dCgpICsg
IiAiOwotICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9IHJlZ2lvbi0+bGVmdCgpLT5jc3NUZXh0
KCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChyZWdpb24tPnRvcCgpLT5jc3NUZXh0KCkpOworICAgICAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQocmVnaW9uLT5yaWdodCgpLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQocmVnaW9uLT5ib3R0b20oKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnICcpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlZ2lv
bi0+bGVmdCgpLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB0ZXh0ICs9ICIpIjsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcpJyk7CiAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0ZXh0ID0gcmVzdWx0LnRvU3RyaW5nKCk7CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGNhc2UgQ1NTX1BBUlNFUl9P
UEVSQVRPUjogewogICAgICAgICAgICAgY2hhciBjID0gc3RhdGljX2Nhc3Q8Y2hhcj4obV92YWx1
ZS5pZGVudCk7CkBAIC0xMTAzLDkgKzExMTAsNyBAQCBTdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6
OmN1c3RvbUNzc1RleHQoKSBjb25zdAogICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKENT
U19WQVJJQUJMRVMpCiAgICAgICAgIGNhc2UgQ1NTX1ZBUklBQkxFX05BTUU6Ci0gICAgICAgICAg
ICB0ZXh0ID0gIi13ZWJraXQtdmFyKCI7Ci0gICAgICAgICAgICB0ZXh0ICs9IG1fdmFsdWUuc3Ry
aW5nOwotICAgICAgICAgICAgdGV4dCArPSAiKSI7CisgICAgICAgICAgICB0ZXh0ID0gIi13ZWJr
aXQtdmFyKCIgKyBTdHJpbmcobV92YWx1ZS5zdHJpbmcpICsgIikiOwogICAgICAgICAgICAgYnJl
YWs7CiAjZW5kaWYKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVm
bGVjdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3BwCmlu
ZGV4IGVkZTNjOWExZjY1OThjMGYzNDdkNjI1MDJkZjQyMTkwZWYzOGE4OGUuLjEwZWM4YzA0NTVh
MDMzMWZiZWY2NzZiMzAxMDU0NjM3NjE1Y2IyY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZs
ZWN0VmFsdWUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFs
dWUuaCIKICNpbmNsdWRlICJNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtMzYsMjggKzM3LDI5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogU3RyaW5nIENTU1JlZmxlY3RWYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgpIGNvbnN0CiB7Ci0g
ICAgU3RyaW5nIHJlc3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICBzd2l0Y2gg
KG1fZGlyZWN0aW9uKSB7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvbkJlbG93OgotICAgICAgICAg
ICAgcmVzdWx0ICs9ICJiZWxvdyAiOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwo
ImJlbG93ICIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvbkFi
b3ZlOgotICAgICAgICAgICAgcmVzdWx0ICs9ICJhYm92ZSAiOworICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZExpdGVyYWwoImFib3ZlICIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgUmVmbGVjdGlvbkxlZnQ6Ci0gICAgICAgICAgICByZXN1bHQgKz0gImxlZnQgIjsKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJsZWZ0ICIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvblJpZ2h0OgotICAgICAgICAgICAgcmVzdWx0ICs9ICJy
aWdodCAiOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoInJpZ2h0ICIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICByZXN1bHQgKz0gbV9vZmZzZXQtPmNzc1RleHQoKSArICIgIjsKKyAgICByZXN1
bHQuYXBwZW5kKG1fb2Zmc2V0LT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsK
ICAgICBpZiAobV9tYXNrKQotICAgICAgICByZXN1bHQgKz0gbV9tYXNrLT5jc3NUZXh0KCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtX21hc2stPmNzc1RleHQo
KSk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiB2b2lkIENTU1JlZmxlY3RW
YWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNv
bnN0IFN0eWxlU2hlZXRDb250ZW50cyogc3R5bGVTaGVldCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcAppbmRleCA5YWJiMTllNjlhNGFhNmJl
MGIzZGY5MmE1YTAyZTMwOGYzYmNmM2M1Li40NDVmMTg1M2M2MzMzYTAwYzMwZGM3ZjcwNmJmNWVl
ZmRkNWFlNGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVGltaW5nRnVuY3Rp
b25WYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFs
dWUuY3BwCkBAIC00MywxNiArNDMsMTEgQEAgdm9pZCBDU1NMaW5lYXJUaW1pbmdGdW5jdGlvblZh
bHVlOjpyZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyoKIAogU3Ry
aW5nIENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgpIGNv
bnN0CiB7Ci0gICAgU3RyaW5nIHRleHQoImN1YmljLWJlemllcigiKTsKLSAgICB0ZXh0ICs9IFN0
cmluZzo6bnVtYmVyKG1feDEpOwotICAgIHRleHQgKz0gIiwgIjsKLSAgICB0ZXh0ICs9IFN0cmlu
Zzo6bnVtYmVyKG1feTEpOwotICAgIHRleHQgKz0gIiwgIjsKLSAgICB0ZXh0ICs9IFN0cmluZzo6
bnVtYmVyKG1feDIpOwotICAgIHRleHQgKz0gIiwgIjsKLSAgICB0ZXh0ICs9IFN0cmluZzo6bnVt
YmVyKG1feTIpOwotICAgIHRleHQgKz0gIikiOwotICAgIHJldHVybiB0ZXh0OworICAgIHJldHVy
biAiY3ViaWMtYmV6aWVyKCIKKyAgICAgICAgKyBTdHJpbmc6Om51bWJlcihtX3gxKSArICIsICIK
KyAgICAgICAgKyBTdHJpbmc6Om51bWJlcihtX3kxKSArICIsICIKKyAgICAgICAgKyBTdHJpbmc6
Om51bWJlcihtX3gyKSArICIsICIKKyAgICAgICAgKyBTdHJpbmc6Om51bWJlcihtX3kyKSArICIp
IjsKIH0KIAogdm9pZCBDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWU6OnJlcG9ydERl
c2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBj
b25zdApAQCAtNjIsMTIgKzU3LDcgQEAgdm9pZCBDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9u
VmFsdWU6OnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3QKIAogU3RyaW5n
IENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgpIGNvbnN0CiB7Ci0g
ICAgU3RyaW5nIHRleHQoInN0ZXBzKCIpOwotICAgIHRleHQgKz0gU3RyaW5nOjpudW1iZXIobV9z
dGVwcyk7Ci0gICAgdGV4dCArPSAiLCAiOwotICAgIHRleHQgKz0gbV9zdGVwQXRTdGFydCA/ICJz
dGFydCIgOiAiZW5kIjsKLSAgICB0ZXh0ICs9ICIpIjsKLSAgICByZXR1cm4gdGV4dDsKKyAgICBy
ZXR1cm4gInN0ZXBzKCIgKyBTdHJpbmc6Om51bWJlcihtX3N0ZXBzKSArICIsICIgKyAobV9zdGVw
QXRTdGFydCA/ICJzdGFydCIgOiAiZW5kIikgKyAiKSI7CiB9CiAKIHZvaWQgQ1NTU3RlcHNUaW1p
bmdGdW5jdGlvblZhbHVlOjpyZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0
SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3Bl
cnR5U2V0LmNwcAppbmRleCAxOTY4OWI5MTMzYjcxNzIyMTlhNWYzZTJlZGE5NGYxZWU4MzRiYjlj
Li40MTcxZjYyNThmMTYyNDU1NjY2ODFiZDk0NTRlNGJkODI4Nzc3ZDRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCkBAIC0yOTMsMjAgKzI5MywyNiBAQCBTdHJpbmcg
U3R5bGVQcm9wZXJ0eVNldDo6Z2V0NFZhbHVlcyhjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5k
JiBzaG9ydGhhbmQpIGNvbgogICAgIGJvb2wgc2hvd0JvdHRvbSA9ICh0b3AtPnZhbHVlKCktPmNz
c1RleHQoKSAhPSBib3R0b20tPnZhbHVlKCktPmNzc1RleHQoKSkgfHwgc2hvd0xlZnQ7CiAgICAg
Ym9vbCBzaG93UmlnaHQgPSAodG9wLT52YWx1ZSgpLT5jc3NUZXh0KCkgIT0gcmlnaHQtPnZhbHVl
KCktPmNzc1RleHQoKSkgfHwgc2hvd0JvdHRvbTsKIAotICAgIFN0cmluZyByZXMgPSB0b3AtPnZh
bHVlKCktPmNzc1RleHQoKTsKLSAgICBpZiAoc2hvd1JpZ2h0KQotICAgICAgICByZXMgKz0gIiAi
ICsgcmlnaHQtPnZhbHVlKCktPmNzc1RleHQoKTsKLSAgICBpZiAoc2hvd0JvdHRvbSkKLSAgICAg
ICAgcmVzICs9ICIgIiArIGJvdHRvbS0+dmFsdWUoKS0+Y3NzVGV4dCgpOwotICAgIGlmIChzaG93
TGVmdCkKLSAgICAgICAgcmVzICs9ICIgIiArIGxlZnQtPnZhbHVlKCktPmNzc1RleHQoKTsKLQot
ICAgIHJldHVybiByZXM7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LmFw
cGVuZCh0b3AtPnZhbHVlKCktPmNzc1RleHQoKSk7CisgICAgaWYgKHNob3dSaWdodCkgeworICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocmlnaHQtPnZh
bHVlKCktPmNzc1RleHQoKSk7CisgICAgfQorICAgIGlmIChzaG93Qm90dG9tKSB7CisgICAgICAg
IHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChib3R0b20tPnZhbHVl
KCktPmNzc1RleHQoKSk7CisgICAgfQorICAgIGlmIChzaG93TGVmdCkgeworICAgICAgICByZXN1
bHQuYXBwZW5kKCcgJyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobGVmdC0+dmFsdWUoKS0+Y3Nz
VGV4dCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBTdHJp
bmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IFN0eWxl
UHJvcGVydHlTaG9ydGhhbmQmIHNob3J0aGFuZCkgY29uc3QKIHsKLSAgICBTdHJpbmcgcmVzOwor
ICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogCiAgICAgY29uc3QgdW5zaWduZWQgc2l6ZSA9IHNo
b3J0aGFuZC5sZW5ndGgoKTsKICAgICAvLyBCZWdpbiBieSBjb2xsZWN0aW5nIHRoZSBwcm9wZXJ0
aWVzIGludG8gYW4gYXJyYXkuCkBAIC0zMjcsNyArMzMzLDggQEAgU3RyaW5nIFN0eWxlUHJvcGVy
dHlTZXQ6OmdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRo
YW5kJgogICAgIC8vIE5vdyBzdGl0Y2ggdGhlIHByb3BlcnRpZXMgdG9nZXRoZXIuICBJbXBsaWNp
dCBpbml0aWFsIHZhbHVlcyBhcmUgZmxhZ2dlZCBhcyBzdWNoIGFuZAogICAgIC8vIGNhbiBzYWZl
bHkgYmUgb21pdHRlZC4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUxheWVyczsgaSsr
KSB7Ci0gICAgICAgIFN0cmluZyBsYXllclJlczsKKyAgICAgICAgLy8gRklYTUU6IElzIHRoZXJl
IHNvbWUgd2F5IG9mIGF2b2lkaW5nIGhhdmluZyBhIHNlY29uZCBTdHJpbmdCdWlsZGVyPworICAg
ICAgICBTdHJpbmdCdWlsZGVyIGxheWVyUmVzdWx0OwogICAgICAgICBib29sIHVzZVJlcGVhdFhT
aG9ydGhhbmQgPSBmYWxzZTsKICAgICAgICAgYm9vbCB1c2VSZXBlYXRZU2hvcnRoYW5kID0gZmFs
c2U7CiAgICAgICAgIGJvb2wgdXNlU2luZ2xlV29yZFNob3J0aGFuZCA9IGZhbHNlOwpAQCAtMzgx
LDQyICszODgsNDIgQEAgU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldExheWVyZWRTaG9ydGhh
bmRWYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJgogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlLT5pc0ltcGxpY2l0SW5pdGlhbFZhbHVlKCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIWxheWVyUmVzLmlzTnVsbCgpKQotICAgICAgICAgICAg
ICAgICAgICBsYXllclJlcyArPSAiICI7CisgICAgICAgICAgICAgICAgaWYgKCFsYXllclJlc3Vs
dC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGxheWVyUmVzdWx0LmFwcGVuZCgnICcp
OwogICAgICAgICAgICAgICAgIGlmIChmb3VuZEJhY2tncm91bmRQb3NpdGlvbllDU1NQcm9wZXJ0
eSAmJiBzaG9ydGhhbmQucHJvcGVydGllcygpW2pdID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFNp
emUpIAotICAgICAgICAgICAgICAgICAgICBsYXllclJlcyArPSAiLyAiOworICAgICAgICAgICAg
ICAgICAgICBsYXllclJlc3VsdC5hcHBlbmRMaXRlcmFsKCIvICIpOwogICAgICAgICAgICAgICAg
IGlmICghZm91bmRCYWNrZ3JvdW5kUG9zaXRpb25ZQ1NTUHJvcGVydHkgJiYgc2hvcnRoYW5kLnBy
b3BlcnRpZXMoKVtqXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplKSAKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICBpZiAodXNlUmVwZWF0WFNob3J0
aGFuZCkgewogICAgICAgICAgICAgICAgICAgICB1c2VSZXBlYXRYU2hvcnRoYW5kID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IGdldFZhbHVlTmFtZShDU1NWYWx1ZVJl
cGVhdFgpOworICAgICAgICAgICAgICAgICAgICBsYXllclJlc3VsdC5hcHBlbmQoZ2V0VmFsdWVO
YW1lKENTU1ZhbHVlUmVwZWF0WCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlUmVw
ZWF0WVNob3J0aGFuZCkgewogICAgICAgICAgICAgICAgICAgICB1c2VSZXBlYXRZU2hvcnRoYW5k
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IGdldFZhbHVlTmFtZShD
U1NWYWx1ZVJlcGVhdFkpOworICAgICAgICAgICAgICAgICAgICBsYXllclJlc3VsdC5hcHBlbmQo
Z2V0VmFsdWVOYW1lKENTU1ZhbHVlUmVwZWF0WSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAodXNlU2luZ2xlV29yZFNob3J0aGFuZCkgewogICAgICAgICAgICAgICAgICAgICB1c2VTaW5n
bGVXb3JkU2hvcnRoYW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9
IHZhbHVlLT5jc3NUZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGxheWVyUmVzdWx0LmFwcGVu
ZCh2YWx1ZS0+Y3NzVGV4dCgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgbGF5ZXJSZXMgKz0gdmFsdWUtPmNzc1RleHQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbGF5ZXJSZXN1bHQuYXBwZW5kKHZhbHVlLT5jc3NUZXh0KCkpOwogCiAgICAgICAgICAgICAg
ICAgaWYgKHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbal0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
UG9zaXRpb25ZKQogICAgICAgICAgICAgICAgICAgICBmb3VuZEJhY2tncm91bmRQb3NpdGlvbllD
U1NQcm9wZXJ0eSA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoIWxheWVyUmVzLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoIXJlcy5pc051bGwoKSkK
LSAgICAgICAgICAgICAgICByZXMgKz0gIiwgIjsKLSAgICAgICAgICAgIHJlcyArPSBsYXllclJl
czsKKyAgICAgICAgaWYgKCFsYXllclJlc3VsdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlm
ICghcmVzdWx0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJh
bCgiLCAiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobGF5ZXJSZXN1bHQpOwogICAgICAg
ICB9CiAgICAgfQotICAgIHJldHVybiByZXM7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygp
OwogfQogCiBTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0U2hvcnRoYW5kVmFsdWUoY29uc3Qg
U3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5kKSBjb25zdAogewotICAgIFN0cmluZyBy
ZXM7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNob3J0aGFuZC5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIGlmICghaXNQcm9wZXJ0eUlt
cGxpY2l0KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbaV0pKSB7CiAgICAgICAgICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShzaG9ydGhhbmQucHJvcGVydGll
cygpW2ldKTsKQEAgLTQyNCwxMiArNDMxLDEyIEBAIFN0cmluZyBTdHlsZVByb3BlcnR5U2V0Ojpn
ZXRTaG9ydGhhbmRWYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzaG9ydGhhCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5p
c0luaXRpYWxWYWx1ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
aWYgKCFyZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmVzICs9ICIgIjsKLSAgICAgICAg
ICAgIHJlcyArPSB2YWx1ZS0+Y3NzVGV4dCgpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQodmFsdWUtPmNzc1RleHQoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAg
cmV0dXJuIHJlczsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIC8vIG9ubHkg
cmV0dXJucyBhIG5vbi1udWxsIHZhbHVlIGlmIGFsbCBwcm9wZXJ0aWVzIGhhdmUgdGhlIHNhbWUs
IG5vbi1udWxsIHZhbHVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JV
UkwuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmNwcAppbmRleCBmNzQ3ODUz
NGM3NzVhOGE5NGM3NThkZmUzZTg1ZTBkN2VkMTk4NTBmLi43NGQxNmU0Y2E4MDFkYjgzMWI5YjM3
M2NiMjY3NzQ4YWU1YTdlMjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Js
b2JVUkwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAKQEAgLTcy
LDExICs3Miw3IEBAIFN0cmluZyBCbG9iVVJMOjpnZXRJZGVudGlmaWVyKGNvbnN0IEtVUkwmIHVy
bCkKIEtVUkwgQmxvYlVSTDo6Y3JlYXRlQmxvYlVSTChjb25zdCBTdHJpbmcmIG9yaWdpblN0cmlu
ZykKIHsKICAgICBBU1NFUlQoIW9yaWdpblN0cmluZy5pc0VtcHR5KCkpOwotICAgIFN0cmluZyB1
cmxTdHJpbmcgPSBrQmxvYlByb3RvY29sOwotICAgIHVybFN0cmluZyArPSAiOiI7Ci0gICAgdXJs
U3RyaW5nICs9IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMob3JpZ2luU3RyaW5nKTsKLSAg
ICB1cmxTdHJpbmcgKz0gIi8iOwotICAgIHVybFN0cmluZyArPSBjcmVhdGVDYW5vbmljYWxVVUlE
U3RyaW5nKCk7CisgICAgU3RyaW5nIHVybFN0cmluZyA9ICJibG9iOiIgKyBlbmNvZGVXaXRoVVJM
RXNjYXBlU2VxdWVuY2VzKG9yaWdpblN0cmluZykgKyAiLyIgKyBjcmVhdGVDYW5vbmljYWxVVUlE
U3RyaW5nKCk7CiAgICAgcmV0dXJuIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApp
bmRleCBjYTBhNGM1NWYwNzFmNTYyMWE3Y2Y5YTIzZGRiZDY0NjY0MmE5NjU3Li5mN2E2ZjU3NGNk
OTAzNzdkM2Q3YjcwNDljMWU3ZGJhNzEyZjBlZDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTMyNiw3ICszMjYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIG1fb2xkVGV4dCA9IG9sZFRleHQuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAg
IC8vIEZJWE1FOiByZW1vdmUgdGhpcyBvbmNlIHRoZSBtb2RlbCBoYW5kbGVzIHRoaXMgY2FzZS4K
ICAgICAgICAgaWYgKCFtX29sZFRleHQuZW5kc1dpdGgoJzsnKSkKLSAgICAgICAgICAgIG1fb2xk
VGV4dCArPSAiOyI7CisgICAgICAgICAgICBtX29sZFRleHQuYXBwZW5kKCI7Iik7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDbGllbnQuY3BwCmluZGV4IDM3YzdiYzJkY2Y2MDA3Njc1YTM2YjUwYTlkZTA4YjhhYTg1
ZmFhZTMuLjg2N2UwYmJkMzhiZDVjNDllMjkzMDQ2OTczOWFjZGM3ODU4NjUyZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwCkBAIC01NSw5ICs1NSw3
IEBAIGJvb2wgSW5zcGVjdG9yQ2xpZW50Ojpkb0Rpc3BhdGNoTWVzc2FnZU9uRnJvbnRlbmRQYWdl
KFBhZ2UqIGZyb250ZW5kUGFnZSwgY29uc3QKICAgICBpZiAoIXNjcmlwdENvbnRyb2xsZXIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBkaXNwYXRjaFRvRnJvbnRlbmQoIldl
Ykluc3BlY3Rvci5kaXNwYXRjaE1lc3NhZ2VGcm9tQmFja2VuZCgiKTsKLSAgICBkaXNwYXRjaFRv
RnJvbnRlbmQgKz0gbWVzc2FnZTsKLSAgICBkaXNwYXRjaFRvRnJvbnRlbmQgKz0gIik7IjsKKyAg
ICBTdHJpbmcgZGlzcGF0Y2hUb0Zyb250ZW5kID0gIldlYkluc3BlY3Rvci5kaXNwYXRjaE1lc3Nh
Z2VGcm9tQmFja2VuZCgiICsgbWVzc2FnZSArICIpOyI7CiAKICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgZXhlY3V0ZSB0aGUgc2NyaXB0IGluIHRoZSBhcHByb3ByaWF0ZSB3b3JsZC4KICAgICBz
Y3JpcHRDb250cm9sbGVyLT5ldmFsdWF0ZShTY3JpcHRTb3VyY2VDb2RlKGRpc3BhdGNoVG9Gcm9u
dGVuZCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnNvbGVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29s
ZUFnZW50LmNwcAppbmRleCBhYzU5MDE4MWZjMmM3MGI1NTU5OWI4ZWE4MDIxYjNlNTI5NGI2NmU1
Li4wZTU0ZTY4YzgzY2NiNWU5ZmZjYTY1MWVjMmNlNDEzZWU5MGYwMjc1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcApAQCAtNDcs
NiArNDcsNyBAQAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMjQ5LDExICsyNTAsMTQgQEAgdm9pZCBJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
UmVzb3UKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChlcnJvci5pc0NhbmNlbGxhdGlvbigpKSAv
LyBSZXBvcnQgZmFpbHVyZXMgb25seS4KICAgICAgICAgcmV0dXJuOwotICAgIFN0cmluZyBtZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gbG9hZCByZXNvdXJjZSIpOwotICAgIGlmICgh
ZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS5pc0VtcHR5KCkpCi0gICAgICAgIG1lc3NhZ2Ug
Kz0gIjogIiArIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCk7CisgICAgU3RyaW5nQnVpbGRl
ciBtZXNzYWdlOworICAgIG1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgiRmFpbGVkIHRvIGxvYWQgcmVz
b3VyY2UiKTsKKyAgICBpZiAoIWVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkuaXNFbXB0eSgp
KSB7CisgICAgICAgIG1lc3NhZ2UuYXBwZW5kKCcgJyk7CisgICAgICAgIG1lc3NhZ2UuYXBwZW5k
KGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkpOworICAgIH0KICAgICBTdHJpbmcgcmVxdWVz
dElkID0gSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllcik7Ci0gICAgYWRk
Q29uc29sZU1lc3NhZ2UoYWRvcHRQdHIobmV3IENvbnNvbGVNZXNzYWdlKE5ldHdvcmtNZXNzYWdl
U291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGVycm9y
LmZhaWxpbmdVUkwoKSwgcmVxdWVzdElkKSkpOworICAgIGFkZENvbnNvbGVNZXNzYWdlKGFkb3B0
UHRyKG5ldyBDb25zb2xlTWVzc2FnZShOZXR3b3JrTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5
cGUsIEVycm9yTWVzc2FnZUxldmVsLCBtZXNzYWdlLnRvU3RyaW5nKCksIGVycm9yLmZhaWxpbmdV
UkwoKSwgcmVxdWVzdElkKSkpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6c2V0
TW9uaXRvcmluZ1hIUkVuYWJsZWQoRXJyb3JTdHJpbmcqLCBib29sIGVuYWJsZWQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuY3Bw
CmluZGV4IGZiNDBlZDQzZmU2ZTZlZWZjNWEwMjk2NzFiMDg3YzRlZmQ3MTgzNDEuLjljNjU1MjZi
NGQxOWRiNmJhMWVmZGFlN2U0ZTQ1YTI1ZWU1MmEzMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuY3BwCkBAIC01ODIsNyAr
NTgyLDcgQEAgdm9pZCBGaWxlQ29udGVudFJlcXVlc3Q6OmRpZFJlYWQoKQogCiAgICAgUmVmUHRy
PFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVh
dGUobV9taW1lVHlwZSwgbV9jaGFyc2V0LCB0cnVlKTsKICAgICBTdHJpbmcgcmVzdWx0ID0gZGVj
b2Rlci0+ZGVjb2RlKHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+
Ynl0ZUxlbmd0aCgpKTsKLSAgICByZXN1bHQgKz0gZGVjb2Rlci0+Zmx1c2goKTsKKyAgICByZXN1
bHQuYXBwZW5kKGRlY29kZXItPmZsdXNoKCkpOwogICAgIG1fY2hhcnNldCA9IGRlY29kZXItPmVu
Y29kaW5nKCkuZG9tTmFtZSgpOwogICAgIHJlcG9ydFJlc3VsdChzdGF0aWNfY2FzdDxGaWxlRXJy
b3I6OkVycm9yQ29kZT4oMCksICZyZXN1bHQsICZtX2NoYXJzZXQpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRleCBiNjg0OWZhODky
NGZkMWQ1YTBkNjU3YzJkYTg0ZDIzMzFhZDA0MzhmLi45OWNhMmY4NzQ5NTdhYjUwODNhODQ1NDI3
MDRkNGU0NTFiZjI1N2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUGFnZUFnZW50LmNwcApAQCAtNzQsMTEgKzc0LDExIEBACiAjaW5jbHVkZSAiVGV4dEVuY29k
aW5nLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlVzZXJH
ZXN0dXJlSW5kaWNhdG9yLmgiCi0KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNs
dWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC0xOTcsOCArMTk3LDcgQEAgYm9vbCBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudChDYWNoZWRSZXNvdXJjZSogY2Fj
aGVkUmVzb3VyY2UsIFMKICAgICAgICAgICAgIGlmICghZGVjb2RlcikKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBTdHJpbmcgY29udGVudCA9IGRlY29kZXItPmRl
Y29kZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwotICAgICAgICAgICAgY29udGVu
dCArPSBkZWNvZGVyLT5mbHVzaCgpOwotICAgICAgICAgICAgKnJlc3VsdCA9IGNvbnRlbnQ7Cisg
ICAgICAgICAgICAqcmVzdWx0ID0gY29udGVudCArIGRlY29kZXItPmZsdXNoKCk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgpAQCAtNTAzLDcg
KzUwMiw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5n
KiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlCiAgICAgTGlzdEhhc2hTZXQ8Q29va2ll
PiByYXdDb29raWVzTGlzdDsKIAogICAgIC8vIElmIHdlIGNhbid0IGdldCByYXcgY29va2llcyAt
IGZhbGwgYmFjayB0byBTdHJpbmcgcmVwcmVzZW50YXRpb24KLSAgICBTdHJpbmcgc3RyaW5nQ29v
a2llc0xpc3Q7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdDb29raWVzTGlzdDsKIAogICAgIC8v
IFJldHVybiB2YWx1ZSB0byBnZXRSYXdDb29raWVzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgZXZl
cnkgY2FsbCBiZWNhdXNlCiAgICAgLy8gdGhlIHJldHVybiB2YWx1ZSBpcyBwbGF0Zm9ybS9uZXR3
b3JrIGJhY2tlbmQgc3BlY2lmaWMsIGFuZCB0aGUgY2FsbCB3aWxsCkBAIC01MTksNyArNTE4LDcg
QEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJyb3JTdHJpbmcqLCBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGUKICAgICAgICAgICAgIGlmICghcmF3Q29va2llc0lt
cGxlbWVudGVkKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgZHVwbGljYXRp
b24gY2hlY2tpbmcgZm9yIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY29va2llcy4KICAg
ICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgICAgICBzdHJp
bmdDb29raWVzTGlzdCArPSBkb2N1bWVudC0+Y29va2llKGVjKTsKKyAgICAgICAgICAgICAgICBz
dHJpbmdDb29raWVzTGlzdC5hcHBlbmQoZG9jdW1lbnQtPmNvb2tpZShlYykpOwogICAgICAgICAg
ICAgICAgIC8vIEV4Y2VwdGlvbnMgYXJlIHRocm93biBieSBjb29raWUoKSBpbiBzYW5kYm94ZWQg
ZnJhbWVzLiBUaGF0IHdvbid0IGhhcHBlbiBoZXJlCiAgICAgICAgICAgICAgICAgLy8gYmVjYXVz
ZSAiZG9jdW1lbnQiIGlzIHRoZSBkb2N1bWVudCBvZiB0aGUgbWFpbiBmcmFtZSBvZiB0aGUgcGFn
ZS4KICAgICAgICAgICAgICAgICBBU1NFUlQoIWVjKTsKQEAgLTUzOSw3ICs1MzgsNyBAQCB2b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxUeXBl
QnVpbGRlcjo6QXJyYXk8VHlwZQogICAgICAgICAqY29va2llc1N0cmluZyA9ICIiOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIGNvb2tpZXMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6
OlBhZ2U6OkNvb2tpZT46OmNyZWF0ZSgpOwotICAgICAgICAqY29va2llc1N0cmluZyA9IHN0cmlu
Z0Nvb2tpZXNMaXN0OworICAgICAgICAqY29va2llc1N0cmluZyA9IHN0cmluZ0Nvb2tpZXNMaXN0
LnRvU3RyaW5nKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggMGUxZWUwODQ2M2I0YWEyYjY3N2E1NGRjZDRi
ZDViYWRhOTdmZTE5Zi4uM2NmNGQ0ODljZDU2ZjhkNmU5NmIyYzk4NjNlYTRmNGFlNjkzOTA5NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cApAQCAtODAxLDEyICs4MDEsMTQgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRSdWxl
U2VsZWN0b3IoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCBjb25zdCBTdHJpbmcKIAogQ1NTU3R5
bGVSdWxlKiBJbnNwZWN0b3JTdHlsZVNoZWV0OjphZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFN0cmluZyBzdHlsZVNoZWV0VGV4dDsKLSAg
ICBib29sIHN1Y2Nlc3MgPSBnZXRUZXh0KCZzdHlsZVNoZWV0VGV4dCk7CisgICAgU3RyaW5nIHRl
eHQ7CisgICAgYm9vbCBzdWNjZXNzID0gZ2V0VGV4dCgmdGV4dCk7CiAgICAgaWYgKCFzdWNjZXNz
KSB7CiAgICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQorICAgIFN0cmluZ0J1aWxkZXIgc3R5bGVTaGVldFRleHQ7CisgICAgc3R5bGVTaGVldFRleHQu
YXBwZW5kKHRleHQpOwogCiAgICAgbV9wYWdlU3R5bGVTaGVldC0+YWRkUnVsZShzZWxlY3Rvciwg
IiIsIGVjKTsKICAgICBpZiAoZWMpCkBAIC04MTUsMTMgKzgxNywxMyBAQCBDU1NTdHlsZVJ1bGUq
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgRXhj
ZXB0aW9uQ29kZQogICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IEluc3BlY3RvckNTU0FnZW50Ojph
c0NTU1N0eWxlUnVsZShtX3BhZ2VTdHlsZVNoZWV0LT5pdGVtKG1fcGFnZVN0eWxlU2hlZXQtPmxl
bmd0aCgpIC0gMSkpOwogICAgIEFTU0VSVChydWxlKTsKIAotICAgIGlmIChzdHlsZVNoZWV0VGV4
dC5sZW5ndGgoKSkKLSAgICAgICAgc3R5bGVTaGVldFRleHQgKz0gIlxuIjsKKyAgICBpZiAoIXN0
eWxlU2hlZXRUZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgc3R5bGVTaGVldFRleHQuYXBwZW5kKCdc
bicpOwogCi0gICAgc3R5bGVTaGVldFRleHQgKz0gc2VsZWN0b3I7Ci0gICAgc3R5bGVTaGVldFRl
eHQgKz0gIiB7fSI7CisgICAgc3R5bGVTaGVldFRleHQuYXBwZW5kKHNlbGVjdG9yKTsKKyAgICBz
dHlsZVNoZWV0VGV4dC5hcHBlbmRMaXRlcmFsKCIge30iKTsKICAgICAvLyBVc2luZyBzZXRUZXh0
KCkgYXMgdGhpcyBvcGVyYXRpb24gY2hhbmdlcyB0aGUgc3R5bGUgc2hlZXQgcnVsZSBzZXQuCi0g
ICAgc2V0VGV4dChzdHlsZVNoZWV0VGV4dCk7CisgICAgc2V0VGV4dChzdHlsZVNoZWV0VGV4dC50
b1N0cmluZygpKTsKIAogICAgIGZpcmVTdHlsZVNoZWV0Q2hhbmdlZCgpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161592</attachid>
            <date>2012-08-30 17:07:53 -0700</date>
            <delta_ts>2012-08-31 10:46:11 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-95502-20120830170741.patch</filename>
            <type>text/plain</type>
            <size>36427</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNzIxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBACisyMDEyLTA4LTMwICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBtb3JlIGluc3RhbmNl
cyBvZiArPSB3aXRoIFN0cmluZ0J1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk1NTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZW1vdmVzIG1hbnkgdXNlcyBvZiBXVEY6OlN0cmlu
Zzo6b3BlcmF0b3IrPSBpbiBXZWJDb3JlLgorICAgICAgICBNYW55IG9mIHRoZXNlIHVzZXMgYXJl
IGluZWZmaWNpZW50IGJlY2F1c2UgdGhleSBjYXVzZSB1cyB0byBhbGxvY2F0ZQorICAgICAgICBh
bmQgbWVtY3B5IHN0cmluZ3MgbW9yZSB0aW1lcyB0aGFuIG5lY2Vzc2FyeS4gSW4gbW9zdCBjYXNl
cywgSSd2ZQorICAgICAgICByZXBsYWNlZCB0aGVzZSBpbmVmZmljaWVudCBwYXR0ZXJucyB3aXRo
IFN0cmluZ0J1aWxkZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBwcm9ncmVzcyB0b3dh
cmRzIHJlbW92aW5nIFdURjo6U3RyaW5nOjpvcGVyYXRvcis9IGZyb20KKyAgICAgICAgdGhlIHBy
b2plY3QuCisKKyAgICAgICAgV2UgY2FuIG1ha2UgY3NzVGV4dCgpIG1vcmUgZWZmaWNpZW50IGJ5
IHBhc3NpbmcgYSBzaW5nbGUgU3RyaW5nQnVpbGRlcgorICAgICAgICBpbnN0YW5jZSBhbG9uZyB0
byB0aGUgcmVjdXJzaXZlIGNhbGxzLCBidXQgSSd2ZSBsZWZ0IHRoYXQgZm9yIGEgbGF0ZXIKKyAg
ICAgICAgcGF0Y2guCisKKyAgICAgICAgKiBjc3MvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0JvcmRlckltYWdlU2xpY2VWYWx1ZTo6Y3VzdG9tQ3Nz
VGV4dCk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3VzdG9tQ3NzVGV4dCk6CisgICAgICAgICog
Y3NzL0NTU0Z1bmN0aW9uVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRnVuY3Rpb25W
YWx1ZTo6Y3VzdG9tQ3NzVGV4dCk6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ3NzVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjdXN0b21Dc3NU
ZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWUpOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Y3VzdG9tQ3NzVGV4
dCk6CisgICAgICAgICogY3NzL0NTU1JlZmxlY3RWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NSZWZsZWN0VmFsdWU6OmN1c3RvbUNzc1RleHQpOgorICAgICAgICAqIGNzcy9DU1NUaW1p
bmdGdW5jdGlvblZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0N1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb25WYWx1ZTo6Y3VzdG9tQ3NzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWU6OmN1c3RvbUNzc1RleHQpOgorICAgICAgICAqIGNzcy9T
dHlsZVByb3BlcnR5U2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6
OmdldDRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6Z2V0TGF5
ZXJlZFNob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6
OmdldFNob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2JVUkwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6Y3JlYXRlQmxvYlVSTCk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNT
U0FnZW50OjpTZXRQcm9wZXJ0eVRleHRBY3Rpb246OnJlZG8pOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50
Ojpkb0Rpc3BhdGNoTWVzc2FnZU9uRnJvbnRlbmRQYWdlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnNvbGVBZ2VudDo6ZGlkRmFpbExvYWRpbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JGaWxlU3lzdGVtQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hl
ZXQ6OmFkZFJ1bGUpOgorCiAyMDEyLTA4LTMwICBKdWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFp
eEB3ZWJraXQub3JnPgogCiAgICAgICAgIENyYXNoIGluIFJlbmRlclRhYmxlOjpjYWxjQm9yZGVy
RW5kCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VTbGljZVZh
bHVlLmNwcAkocmV2aXNpb24gMTI3MjExKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRl
ckltYWdlU2xpY2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgU3Ry
aW5nIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZTo6Y3VzdG9tQwogCiAgICAgLy8gTm93IHRoZSBm
aWxsIGtleXdvcmRzIGlmIGl0IGlzIHByZXNlbnQuCiAgICAgaWYgKG1fZmlsbCkKLSAgICAgICAg
dGV4dCArPSAiIGZpbGwiOworICAgICAgICByZXR1cm4gdGV4dCArICIgZmlsbCI7CiAgICAgcmV0
dXJuIHRleHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1Zh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNW
YWx1ZS5jcHAJKHJldmlzaW9uIDEyNzIxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
RmFjZVNyY1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1
ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKICNpbmNsdWRlICJT
dHlsZVNoZWV0Q29udGVudHMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjMsMTYgKzY0LDE5IEBAIGJvb2wgQ1NTRm9u
dEZhY2VTcmNWYWx1ZTo6aXNTdXBwb3J0ZWRGb3IKIAogU3RyaW5nIENTU0ZvbnRGYWNlU3JjVmFs
dWU6OmN1c3RvbUNzc1RleHQoKSBjb25zdAogewotICAgIFN0cmluZyByZXN1bHQ7CisgICAgU3Ry
aW5nQnVpbGRlciByZXN1bHQ7CiAgICAgaWYgKGlzTG9jYWwoKSkKLSAgICAgICAgcmVzdWx0ICs9
ICJsb2NhbCgiOworICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgibG9jYWwoIik7CiAgICAg
ZWxzZQotICAgICAgICByZXN1bHQgKz0gInVybCgiOwotICAgIHJlc3VsdCArPSBtX3Jlc291cmNl
OwotICAgIHJlc3VsdCArPSAiKSI7Ci0gICAgaWYgKCFtX2Zvcm1hdC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJlc3VsdCArPSAiIGZvcm1hdCgiICsgbV9mb3JtYXQgKyAiKSI7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoInVybCgiKTsKKyAgICByZXN1bHQu
YXBwZW5kKG1fcmVzb3VyY2UpOworICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKKyAgICBpZiAoIW1f
Zm9ybWF0LmlzRW1wdHkoKSkgeworICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiIGZvcm1h
dCgiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtX2Zvcm1hdCk7CisgICAgICAgIHJlc3VsdC5h
cHBlbmQoJyknKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiB2
b2lkIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNo
U2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0Q29udGVudHMqIHN0eWxlU2hlZXQpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRnVuY3Rpb25WYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuY3BwCShyZXZpc2lv
biAxMjcyMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRnVuY3Rpb25WYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIK
ICNpbmNsdWRlICJNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00MywxMSArNDQsMTIgQEAgQ1NTRnVuY3Rpb25WYWx1ZTo6Q1NTRnVu
Y3Rpb25WYWx1ZShDU1NQYQogCiBTdHJpbmcgQ1NTRnVuY3Rpb25WYWx1ZTo6Y3VzdG9tQ3NzVGV4
dCgpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG1fbmFtZTsgLy8gSW5jbHVkZXMgdGhl
ICcoJworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQobV9uYW1l
KTsgLy8gSW5jbHVkZXMgdGhlICcoJwogICAgIGlmIChtX2FyZ3MpCi0gICAgICAgIHJlc3VsdCAr
PSBtX2FyZ3MtPmNzc1RleHQoKTsKLSAgICByZXN1bHQgKz0gIikiOwotICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobV9hcmdzLT5jc3NUZXh0KCkpOworICAgIHJlc3Vs
dC5hcHBlbmQoJyknKTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIHZvaWQg
Q1NTRnVuY3Rpb25WYWx1ZTo6cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTR3JhZGllbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYWRpZW50VmFsdWUuY3BwCShyZXZpc2lvbiAxMjcyMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgog
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTQ3Myw1MSArNDc0LDcxIEBAIHZv
aWQgQ1NTR3JhZGllbnRWYWx1ZTo6cmVwb3J0QmFzZUNsYXNzTWUKIAogU3RyaW5nIENTU0xpbmVh
ckdyYWRpZW50VmFsdWU6OmN1c3RvbUNzc1RleHQoKSBjb25zdAogewotICAgIFN0cmluZyByZXN1
bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgaWYgKG1fZGVwcmVjYXRlZFR5cGUp
IHsKLSAgICAgICAgcmVzdWx0ID0gIi13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAiOwotICAgICAg
ICByZXN1bHQgKz0gbV9maXJzdFgtPmNzc1RleHQoKSArICIgIjsKLSAgICAgICAgcmVzdWx0ICs9
IG1fZmlyc3RZLT5jc3NUZXh0KCkgKyAiLCAiOwotICAgICAgICByZXN1bHQgKz0gbV9zZWNvbmRY
LT5jc3NUZXh0KCkgKyAiICI7Ci0gICAgICAgIHJlc3VsdCArPSBtX3NlY29uZFktPmNzc1RleHQo
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIi13ZWJraXQtZ3JhZGllbnQobGluZWFy
LCAiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgpKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICcpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RZLT5j
c3NUZXh0KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChtX3NlY29uZFgtPmNzc1RleHQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyAnKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtX3NlY29uZFktPmNzc1RleHQoKSk7CiAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RvcHMuc2l6ZSgpOyBpKyspIHsK
ICAgICAgICAgICAgIGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wID0gbV9zdG9wc1tp
XTsKLSAgICAgICAgICAgIHJlc3VsdCArPSAiLCAiOwotICAgICAgICAgICAgaWYgKHN0b3AubV9w
b3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpID09
IDApCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICJmcm9tKCIgKyBzdG9wLm1fY29sb3ItPmNz
c1RleHQoKSArICIpIjsKLSAgICAgICAgICAgIGVsc2UgaWYgKHN0b3AubV9wb3NpdGlvbi0+Z2V0
RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpID09IDEpCi0gICAgICAg
ICAgICAgICAgcmVzdWx0ICs9ICJ0bygiICsgc3RvcC5tX2NvbG9yLT5jc3NUZXh0KCkgKyAiKSI7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICJjb2xvci1zdG9w
KCIgKyBTdHJpbmc6Om51bWJlcihzdG9wLm1fcG9zaXRpb24tPmdldERvdWJsZVZhbHVlKENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSkgKyAiLCAiICsgc3RvcC5tX2NvbG9yLT5jc3NUZXh0
KCkgKyAiKSI7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAg
ICAgICAgIGlmIChzdG9wLm1fcG9zaXRpb24tPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTlVNQkVSKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExp
dGVyYWwoImZyb20oIik7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdG9wLm1fY29s
b3ItPmNzc1RleHQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScpOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChzdG9wLm1fcG9zaXRpb24tPmdldERvdWJsZVZhbHVlKENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZExpdGVyYWwoInRvKCIpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3Rv
cC5tX2NvbG9yLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJykn
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExp
dGVyYWwoImNvbG9yLXN0b3AoIik7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJp
bmc6Om51bWJlcihzdG9wLm1fcG9zaXRpb24tPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTlVNQkVSKSkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFs
KCIsICIpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RvcC5tX2NvbG9yLT5jc3NU
ZXh0KCkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IG1fcmVwZWF0aW5n
ID8gIi13ZWJraXQtcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgiIDogIi13ZWJraXQtbGluZWFy
LWdyYWRpZW50KCI7CisgICAgICAgIGlmIChtX3JlcGVhdGluZykKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmRMaXRlcmFsKCItd2Via2l0LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoIik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCItd2Via2l0LWxp
bmVhci1ncmFkaWVudCgiKTsKKwogICAgICAgICBpZiAobV9hbmdsZSkKLSAgICAgICAgICAgIHJl
c3VsdCArPSBtX2FuZ2xlLT5jc3NUZXh0KCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1f
YW5nbGUtPmNzc1RleHQoKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKG1fZmly
c3RYICYmIG1fZmlyc3RZKQotICAgICAgICAgICAgICAgIHJlc3VsdCArPSBtX2ZpcnN0WC0+Y3Nz
VGV4dCgpICsgIiAiICsgbV9maXJzdFktPmNzc1RleHQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KG1fZmlyc3RYIHx8IG1fZmlyc3RZKSB7CisgICAgICAgICAgICBpZiAobV9maXJzdFggJiYgbV9m
aXJzdFkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RYLT5jc3NUZXh0
KCkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKG1fZmlyc3RZLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgfSBlbHNl
IGlmIChtX2ZpcnN0WCB8fCBtX2ZpcnN0WSkgewogICAgICAgICAgICAgICAgIGlmIChtX2ZpcnN0
WCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG1fZmlyc3RYLT5jc3NUZXh0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFgtPmNzc1RleHQoKSk7CiAK
ICAgICAgICAgICAgICAgICBpZiAobV9maXJzdFkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCArPSBtX2ZpcnN0WS0+Y3NzVGV4dCgpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKG1fZmlyc3RZLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RvcHMuc2l6ZSgpOyBpKyspIHsKICAg
ICAgICAgICAgIGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wID0gbV9zdG9wc1tpXTsK
LSAgICAgICAgICAgIHJlc3VsdCArPSAiLCAiOwotICAgICAgICAgICAgcmVzdWx0ICs9IHN0b3Au
bV9jb2xvci0+Y3NzVGV4dCgpOwotICAgICAgICAgICAgaWYgKHN0b3AubV9wb3NpdGlvbikKLSAg
ICAgICAgICAgICAgICByZXN1bHQgKz0gIiAiICsgc3RvcC5tX3Bvc2l0aW9uLT5jc3NUZXh0KCk7
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoc3RvcC5tX2NvbG9yLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgaWYgKHN0
b3AubV9wb3NpdGlvbikgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0b3AubV9wb3NpdGlvbi0+Y3NzVGV4dCgpKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIHJlc3VsdCArPSAiKSI7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKCcpJyk7CisgICAgcmV0dXJuIHJl
c3VsdC50b1N0cmluZygpOwogfQogCiAvLyBDb21wdXRlIHRoZSBlbmRwb2ludHMgc28gdGhhdCBh
IGdyYWRpZW50IG9mIHRoZSBnaXZlbiBhbmdsZSBjb3ZlcnMgYSBib3ggb2YgdGhlIGdpdmVuIHNp
emUuCkBAIC02MjIsNzEgKzY0Myw5MiBAQCB2b2lkIENTU0xpbmVhckdyYWRpZW50VmFsdWU6OnJl
cG9ydERlc2NlCiAKIFN0cmluZyBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjdXN0b21Dc3NUZXh0
KCkgY29uc3QKIHsKLSAgICBTdHJpbmcgcmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0
OwogCiAgICAgaWYgKG1fZGVwcmVjYXRlZFR5cGUpIHsKLSAgICAgICAgcmVzdWx0ID0gIi13ZWJr
aXQtZ3JhZGllbnQocmFkaWFsLCAiOwotCi0gICAgICAgIHJlc3VsdCArPSBtX2ZpcnN0WC0+Y3Nz
VGV4dCgpICsgIiAiOwotICAgICAgICByZXN1bHQgKz0gbV9maXJzdFktPmNzc1RleHQoKSArICIs
ICI7Ci0gICAgICAgIHJlc3VsdCArPSBtX2ZpcnN0UmFkaXVzLT5jc3NUZXh0KCkgKyAiLCAiOwot
ICAgICAgICByZXN1bHQgKz0gbV9zZWNvbmRYLT5jc3NUZXh0KCkgKyAiICI7Ci0gICAgICAgIHJl
c3VsdCArPSBtX3NlY29uZFktPmNzc1RleHQoKTsKLSAgICAgICAgcmVzdWx0ICs9ICIsICI7Ci0g
ICAgICAgIHJlc3VsdCArPSBtX3NlY29uZFJhZGl1cy0+Y3NzVGV4dCgpOworICAgICAgICByZXN1
bHQuYXBwZW5kTGl0ZXJhbCgiLXdlYmtpdC1ncmFkaWVudChyYWRpYWwsICIpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKG1fZmlyc3RYLT5jc3NUZXh0KCkpOworICAgICAgICByZXN1bHQuYXBwZW5k
KCcgJyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFktPmNzc1RleHQoKSk7CisgICAg
ICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1f
Zmlyc3RSYWRpdXMtPmNzc1RleHQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIs
ICIpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fc2Vjb25kWC0+Y3NzVGV4dCgpKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICcpOworICAgICAgICByZXN1bHQuYXBwZW5kKG1fc2Vjb25kWS0+
Y3NzVGV4dCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgICAg
IHJlc3VsdC5hcHBlbmQobV9zZWNvbmRSYWRpdXMtPmNzc1RleHQoKSk7CiAKICAgICAgICAgLy8g
RklYTUU6IHNoYXJlPwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5z
aXplKCk7IGkrKykgewogICAgICAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0
b3AgPSBtX3N0b3BzW2ldOwotICAgICAgICAgICAgcmVzdWx0ICs9ICIsICI7Ci0gICAgICAgICAg
ICBpZiAoc3RvcC5tX3Bvc2l0aW9uLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUikgPT0gMCkKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gImZyb20oIiArIHN0
b3AubV9jb2xvci0+Y3NzVGV4dCgpICsgIikiOwotICAgICAgICAgICAgZWxzZSBpZiAoc3RvcC5t
X3Bvc2l0aW9uLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikg
PT0gMSkKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gInRvKCIgKyBzdG9wLm1fY29sb3ItPmNz
c1RleHQoKSArICIpIjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQg
Kz0gImNvbG9yLXN0b3AoIiArIFN0cmluZzo6bnVtYmVyKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91
YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKSArICIsICIgKyBzdG9wLm1f
Y29sb3ItPmNzc1RleHQoKSArICIpIjsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFs
KCIsICIpOworICAgICAgICAgICAgaWYgKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUo
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpID09IDApIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kTGl0ZXJhbCgiZnJvbSgiKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKHN0b3AubV9jb2xvci0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcpJyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91
YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpID09IDEpIHsKKyAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgidG8oIik7CisgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChzdG9wLm1fY29sb3ItPmNzc1RleHQoKSk7CisgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnKScpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kTGl0ZXJhbCgiY29sb3Itc3RvcCgiKTsKKyAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHN0b3AubV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUo
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdG9w
Lm1fY29sb3ItPmNzc1RleHQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScp
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1f
cmVwZWF0aW5nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIi13ZWJraXQtcmVw
ZWF0aW5nLXJhZGlhbC1ncmFkaWVudCgiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZExpdGVyYWwoIi13ZWJraXQtcmFkaWFsLWdyYWRpZW50KCIpOwogCi0gICAgICAg
IHJlc3VsdCA9IG1fcmVwZWF0aW5nID8gIi13ZWJraXQtcmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVu
dCgiIDogIi13ZWJraXQtcmFkaWFsLWdyYWRpZW50KCI7CiAgICAgICAgIGlmIChtX2ZpcnN0WCAm
JiBtX2ZpcnN0WSkgewotICAgICAgICAgICAgcmVzdWx0ICs9IG1fZmlyc3RYLT5jc3NUZXh0KCkg
KyAiICIgKyBtX2ZpcnN0WS0+Y3NzVGV4dCgpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCht
X2ZpcnN0WC0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFktPmNzc1RleHQoKSk7CiAgICAgICAgIH0g
ZWxzZSBpZiAobV9maXJzdFgpCi0gICAgICAgICAgICByZXN1bHQgKz0gbV9maXJzdFgtPmNzc1Rl
eHQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFgtPmNzc1RleHQoKSk7CiAg
ICAgICAgICBlbHNlIGlmIChtX2ZpcnN0WSkKLSAgICAgICAgICAgIHJlc3VsdCArPSBtX2ZpcnN0
WS0+Y3NzVGV4dCgpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WS0+Y3NzVGV4
dCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ICs9ICJjZW50ZXIiOwotCisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiY2VudGVyIik7CiAKICAgICAgICAgaWYg
KG1fc2hhcGUgfHwgbV9zaXppbmdCZWhhdmlvcikgewotICAgICAgICAgICAgcmVzdWx0ICs9ICIs
ICI7Ci0gICAgICAgICAgICBpZiAobV9zaGFwZSkKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0g
bV9zaGFwZS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSAiZWxsaXBzZSAiOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVy
YWwoIiwgIik7CisgICAgICAgICAgICBpZiAobV9zaGFwZSkgeworICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQobV9zaGFwZS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCcgJyk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kTGl0ZXJhbCgiZWxsaXBzZSAiKTsKIAogICAgICAgICAgICAgaWYgKG1fc2l6aW5nQmVo
YXZpb3IpCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IG1fc2l6aW5nQmVoYXZpb3ItPmNzc1Rl
eHQoKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fc2l6aW5nQmVoYXZpb3ItPmNz
c1RleHQoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICJj
b3ZlciI7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoImNvdmVyIik7CiAK
ICAgICAgICAgfSBlbHNlIGlmIChtX2VuZEhvcml6b250YWxTaXplICYmIG1fZW5kVmVydGljYWxT
aXplKSB7Ci0gICAgICAgICAgICByZXN1bHQgKz0gIiwgIjsKLSAgICAgICAgICAgIHJlc3VsdCAr
PSBtX2VuZEhvcml6b250YWxTaXplLT5jc3NUZXh0KCkgKyAiICIgKyBtX2VuZFZlcnRpY2FsU2l6
ZS0+Y3NzVGV4dCgpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiwgIik7Cisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZW5kSG9yaXpvbnRhbFNpemUtPmNzc1RleHQoKSk7
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKG1fZW5kVmVydGljYWxTaXplLT5jc3NUZXh0KCkpOwogICAgICAgICB9CiAKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RvcHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAg
ICAgIGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wID0gbV9zdG9wc1tpXTsKLSAgICAg
ICAgICAgIHJlc3VsdCArPSAiLCAiOwotICAgICAgICAgICAgcmVzdWx0ICs9IHN0b3AubV9jb2xv
ci0+Y3NzVGV4dCgpOwotICAgICAgICAgICAgaWYgKHN0b3AubV9wb3NpdGlvbikKLSAgICAgICAg
ICAgICAgICByZXN1bHQgKz0gIiAiICsgc3RvcC5tX3Bvc2l0aW9uLT5jc3NUZXh0KCk7CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoc3RvcC5tX2NvbG9yLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgaWYgKHN0b3AubV9w
b3NpdGlvbikgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0b3AubV9wb3NpdGlvbi0+Y3NzVGV4dCgpKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIHJlc3VsdCArPSAiKSI7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKCcpJyk7CisgICAgcmV0dXJuIHJlc3VsdC50
b1N0cmluZygpOwogfQogCiBmbG9hdCBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpyZXNvbHZlUmFk
aXVzKENTU1ByaW1pdGl2ZVZhbHVlKiByYWRpdXMsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVy
U3R5bGUqIHJvb3RTdHlsZSwgZmxvYXQqIHdpZHRoT3JIZWlnaHQpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMTI3MjExKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5NDgsMTcgKzk5NDgsMTcgQEAgdm9pZCBD
U1NQYXJzZXI6OmRlbGV0ZUZvbnRGYWNlT25seVZhbHVlcwogU3R5bGVLZXlmcmFtZSogQ1NTUGFy
c2VyOjpjcmVhdGVLZXlmcmFtZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGtleXMpCiB7CiAgICAgLy8g
Q3JlYXRlIGEga2V5IHN0cmluZyBmcm9tIHRoZSBwYXNzZWQga2V5cwotICAgIFN0cmluZyBrZXlT
dHJpbmc7CisgICAgU3RyaW5nQnVpbGRlciBrZXlTdHJpbmc7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGtleXMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIGZsb2F0IGtleSA9IHN0YXRp
Y19jYXN0PGZsb2F0PihrZXlzLT52YWx1ZUF0KGkpLT5mVmFsdWUpOwogICAgICAgICBpZiAoaSAh
PSAwKQotICAgICAgICAgICAga2V5U3RyaW5nICs9ICIsIjsKLSAgICAgICAga2V5U3RyaW5nICs9
IFN0cmluZzo6bnVtYmVyKGtleSk7Ci0gICAgICAgIGtleVN0cmluZyArPSAiJSI7CisgICAgICAg
ICAgICBrZXlTdHJpbmcuYXBwZW5kKCcsJyk7CisgICAgICAgIGtleVN0cmluZy5hcHBlbmQoU3Ry
aW5nOjpudW1iZXIoa2V5KSk7CisgICAgICAgIGtleVN0cmluZy5hcHBlbmQoJyUnKTsKICAgICB9
CiAKICAgICBSZWZQdHI8U3R5bGVLZXlmcmFtZT4ga2V5ZnJhbWUgPSBTdHlsZUtleWZyYW1lOjpj
cmVhdGUoKTsKLSAgICBrZXlmcmFtZS0+c2V0S2V5VGV4dChrZXlTdHJpbmcpOworICAgIGtleWZy
YW1lLT5zZXRLZXlUZXh0KGtleVN0cmluZy50b1N0cmluZygpKTsKICAgICBrZXlmcmFtZS0+c2V0
UHJvcGVydGllcyhjcmVhdGVTdHlsZVByb3BlcnR5U2V0KCkpOwogCiAgICAgY2xlYXJQcm9wZXJ0
aWVzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHJl
dmlzaW9uIDEyNzIxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk0OCw5ICs5NDgsNyBAQCBTdHJpbmcgQ1NTUHJpbWl0aXZl
VmFsdWU6OmN1c3RvbUNzc1RleHQoCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENTU19DT1VOVEVSX05BTUU6Ci0gICAgICAgICAgICB0ZXh0ID0gImNvdW50ZXIo
IjsKLSAgICAgICAgICAgIHRleHQgKz0gbV92YWx1ZS5zdHJpbmc7Ci0gICAgICAgICAgICB0ZXh0
ICs9ICIpIjsKKyAgICAgICAgICAgIHRleHQgPSAiY291bnRlcigiICsgU3RyaW5nKG1fdmFsdWUu
c3RyaW5nKSArICcpJzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19DT1VO
VEVSOiB7CiAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKQEAgLTEwMzQsMzAgKzEw
MzIsMzQgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjdXN0b21Dc3NUZXh0KAogICAgICAg
ICAgICAgdGV4dCA9IFN0cmluZzo6YWRvcHQocmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTX1BBSVI6Ci0gICAgICAgICAgICB0ZXh0ID0gbV92
YWx1ZS5wYWlyLT5maXJzdCgpLT5jc3NUZXh0KCk7CisgICAgICAgIGNhc2UgQ1NTX1BBSVI6IHsK
KyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChtX3ZhbHVlLnBhaXItPmZpcnN0KCktPmNzc1RleHQoKSk7CiAgICAgICAgICAgICBpZiAo
bV92YWx1ZS5wYWlyLT5zZWNvbmQoKSAhPSBtX3ZhbHVlLnBhaXItPmZpcnN0KCkpIHsKLSAgICAg
ICAgICAgICAgICB0ZXh0ICs9ICIgIjsKLSAgICAgICAgICAgICAgICB0ZXh0ICs9IG1fdmFsdWUu
cGFpci0+c2Vjb25kKCktPmNzc1RleHQoKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCcgJyk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX3ZhbHVlLnBhaXItPnNlY29u
ZCgpLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgdGV4dCA9IHJlc3Vs
dC50b1N0cmluZygpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICNpZiBFTkFCTEUo
REFTSEJPQVJEX1NVUFBPUlQpIHx8IEVOQUJMRShXSURHRVRfUkVHSU9OKQotICAgICAgICBjYXNl
IENTU19EQVNIQk9BUkRfUkVHSU9OOgorICAgICAgICBjYXNlIENTU19EQVNIQk9BUkRfUkVHSU9O
OiB7CisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICAgICAgICAgIGZvciAo
RGFzaGJvYXJkUmVnaW9uKiByZWdpb24gPSBnZXREYXNoYm9hcmRSZWdpb25WYWx1ZSgpOyByZWdp
b247IHJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0LmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCF0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgdGV4dC5hcHBlbmQoJyAnKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpICYm
IEVOQUJMRShXSURHRVRfUkVHSU9OKQotICAgICAgICAgICAgICAgIHRleHQgKz0gcmVnaW9uLT5t
X2Nzc0Z1bmN0aW9uTmFtZTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlZ2lvbi0+
bV9jc3NGdW5jdGlvbk5hbWUpOwogI2VsaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAg
ICAgICAgICAgICAgIHRleHQgKz0gImRhc2hib2FyZC1yZWdpb24oIjsKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiZGFzaGJvYXJkLXJlZ2lvbigiKTsKICNlbHNlCi0gICAg
ICAgICAgICAgICAgdGV4dCArPSAicmVnaW9uKCI7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZExpdGVyYWwoInJlZ2lvbigiKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIHRleHQgKz0g
cmVnaW9uLT5tX2xhYmVsOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVnaW9uLT5t
X2xhYmVsKTsKICAgICAgICAgICAgICAgICBpZiAocmVnaW9uLT5tX2lzQ2lyY2xlKQotICAgICAg
ICAgICAgICAgICAgICB0ZXh0ICs9ICIgY2lyY2xlIjsKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZExpdGVyYWwoIiBjaXJjbGUiKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChy
ZWdpb24tPm1faXNSZWN0YW5nbGUpCi0gICAgICAgICAgICAgICAgICAgIHRleHQgKz0gIiByZWN0
YW5nbGUiOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiIHJlY3Rh
bmdsZSIpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgaWYgKHJlZ2lvbi0+dG9wKCktPm1fcHJpbWl0aXZlVW5pdFR5cGUg
PT0gQ1NTX0lERU5UICYmIHJlZ2lvbi0+dG9wKCktPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnZh
bGlkKSB7CkBAIC0xMDY4LDE1ICsxMDcwLDIwIEBAIFN0cmluZyBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3VzdG9tQ3NzVGV4dCgKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lvbi0+Ym90dG9t
KCktPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnZhbGlkKTsKICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHJlZ2lvbi0+bGVmdCgpLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW52YWxpZCk7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dC5hcHBlbmQo
JyAnKTsKLSAgICAgICAgICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPnRvcCgpLT5jc3NUZXh0
KCkgKyAiICI7Ci0gICAgICAgICAgICAgICAgICAgIHRleHQgKz0gcmVnaW9uLT5yaWdodCgpLT5j
c3NUZXh0KCkgKyAiICI7Ci0gICAgICAgICAgICAgICAgICAgIHRleHQgKz0gcmVnaW9uLT5ib3R0
b20oKS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9IHJlZ2lv
bi0+bGVmdCgpLT5jc3NUZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyAnKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZWdpb24tPnRvcCgpLT5j
c3NUZXh0KCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVnaW9uLT5yaWdodCgpLT5jc3NUZXh0KCkp
OworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQocmVnaW9uLT5ib3R0b20oKS0+Y3NzVGV4dCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHJlZ2lvbi0+bGVmdCgpLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB0ZXh0ICs9ICIpIjsKKyAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCcpJyk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZXh0ID0gcmVzdWx0LnRv
U3RyaW5nKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogI2VuZGlmCiAgICAgICAg
IGNhc2UgQ1NTX1BBUlNFUl9PUEVSQVRPUjogewogICAgICAgICAgICAgY2hhciBjID0gc3RhdGlj
X2Nhc3Q8Y2hhcj4obV92YWx1ZS5pZGVudCk7CkBAIC0xMTAzLDkgKzExMTAsNyBAQCBTdHJpbmcg
Q1NTUHJpbWl0aXZlVmFsdWU6OmN1c3RvbUNzc1RleHQoCiAgICAgICAgICAgICBicmVhazsKICNp
ZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKICAgICAgICAgY2FzZSBDU1NfVkFSSUFCTEVfTkFNRToK
LSAgICAgICAgICAgIHRleHQgPSAiLXdlYmtpdC12YXIoIjsKLSAgICAgICAgICAgIHRleHQgKz0g
bV92YWx1ZS5zdHJpbmc7Ci0gICAgICAgICAgICB0ZXh0ICs9ICIpIjsKKyAgICAgICAgICAgIHRl
eHQgPSAiLXdlYmtpdC12YXIoIiArIFN0cmluZyhtX3ZhbHVlLnN0cmluZykgKyAiKSI7CiAgICAg
ICAgICAgICBicmVhazsKICNlbmRpZgogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NSZWZsZWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NS
ZWZsZWN0VmFsdWUuY3BwCShyZXZpc2lvbiAxMjcyMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUmVmbGVjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lu
Y2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiTWVtb3J5SW5zdHJ1bWVudGF0
aW9uLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTM2LDI4ICszNywy
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFN0cmluZyBDU1NSZWZsZWN0VmFsdWU6OmN1c3Rv
bUNzc1RleHQoKSBjb25zdAogewotICAgIFN0cmluZyByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRl
ciByZXN1bHQ7CiAgICAgc3dpdGNoIChtX2RpcmVjdGlvbikgewogICAgICAgICBjYXNlIFJlZmxl
Y3Rpb25CZWxvdzoKLSAgICAgICAgICAgIHJlc3VsdCArPSAiYmVsb3cgIjsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJiZWxvdyAiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIFJlZmxlY3Rpb25BYm92ZToKLSAgICAgICAgICAgIHJlc3VsdCArPSAiYWJvdmUg
IjsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJhYm92ZSAiKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlZmxlY3Rpb25MZWZ0OgotICAgICAgICAgICAgcmVz
dWx0ICs9ICJsZWZ0ICI7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgibGVmdCAi
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlZmxlY3Rpb25SaWdodDoKLSAg
ICAgICAgICAgIHJlc3VsdCArPSAicmlnaHQgIjsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRM
aXRlcmFsKCJyaWdodCAiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmVzdWx0ICs9IG1fb2Zmc2V0LT5jc3NU
ZXh0KCkgKyAiICI7CisgICAgcmVzdWx0LmFwcGVuZChtX29mZnNldC0+Y3NzVGV4dCgpKTsKKyAg
ICByZXN1bHQuYXBwZW5kKCcgJyk7CiAgICAgaWYgKG1fbWFzaykKLSAgICAgICAgcmVzdWx0ICs9
IG1fbWFzay0+Y3NzVGV4dCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5h
cHBlbmQobV9tYXNrLT5jc3NUZXh0KCkpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsK
IH0KIAogdm9pZCBDU1NSZWZsZWN0VmFsdWU6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RI
YXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0Q29udGVudHMqIHN0eWxlU2hlZXQp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFs
dWUuY3BwCShyZXZpc2lvbiAxMjcyMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVGltaW5n
RnVuY3Rpb25WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0MywxMSBAQCB2b2lk
IENTU0xpbmVhclRpbWluZ0Z1bmN0aW9uVmFsdWU6OnJlcG9yCiAKIFN0cmluZyBDU1NDdWJpY0Jl
emllclRpbWluZ0Z1bmN0aW9uVmFsdWU6OmN1c3RvbUNzc1RleHQoKSBjb25zdAogewotICAgIFN0
cmluZyB0ZXh0KCJjdWJpYy1iZXppZXIoIik7Ci0gICAgdGV4dCArPSBTdHJpbmc6Om51bWJlciht
X3gxKTsKLSAgICB0ZXh0ICs9ICIsICI7Ci0gICAgdGV4dCArPSBTdHJpbmc6Om51bWJlcihtX3kx
KTsKLSAgICB0ZXh0ICs9ICIsICI7Ci0gICAgdGV4dCArPSBTdHJpbmc6Om51bWJlcihtX3gyKTsK
LSAgICB0ZXh0ICs9ICIsICI7Ci0gICAgdGV4dCArPSBTdHJpbmc6Om51bWJlcihtX3kyKTsKLSAg
ICB0ZXh0ICs9ICIpIjsKLSAgICByZXR1cm4gdGV4dDsKKyAgICByZXR1cm4gImN1YmljLWJlemll
cigiCisgICAgICAgICsgU3RyaW5nOjpudW1iZXIobV94MSkgKyAiLCAiCisgICAgICAgICsgU3Ry
aW5nOjpudW1iZXIobV95MSkgKyAiLCAiCisgICAgICAgICsgU3RyaW5nOjpudW1iZXIobV94Mikg
KyAiLCAiCisgICAgICAgICsgU3RyaW5nOjpudW1iZXIobV95MikgKyAiKSI7CiB9CiAKIHZvaWQg
Q1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlOjpyZXBvcnREZXNjZW5kYW50TWVtb3J5
VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKQEAgLTYyLDEy
ICs1Nyw3IEBAIHZvaWQgQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlOjoKIAogU3Ry
aW5nIENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgpIGNvbnN0CiB7
Ci0gICAgU3RyaW5nIHRleHQoInN0ZXBzKCIpOwotICAgIHRleHQgKz0gU3RyaW5nOjpudW1iZXIo
bV9zdGVwcyk7Ci0gICAgdGV4dCArPSAiLCAiOwotICAgIHRleHQgKz0gbV9zdGVwQXRTdGFydCA/
ICJzdGFydCIgOiAiZW5kIjsKLSAgICB0ZXh0ICs9ICIpIjsKLSAgICByZXR1cm4gdGV4dDsKKyAg
ICByZXR1cm4gInN0ZXBzKCIgKyBTdHJpbmc6Om51bWJlcihtX3N0ZXBzKSArICIsICIgKyAobV9z
dGVwQXRTdGFydCA/ICJzdGFydCIgOiAiZW5kIikgKyAnKSc7CiB9CiAKIHZvaWQgQ1NTU3RlcHNU
aW1pbmdGdW5jdGlvblZhbHVlOjpyZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2Jq
ZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVByb3BlcnR5U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVQcm9wZXJ0eVNldC5jcHAJKHJldmlzaW9uIDEyNzIxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkzLDIwICsyOTMs
MjYgQEAgU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldDRWYWx1ZXMoY29ucwogICAgIGJvb2wg
c2hvd0JvdHRvbSA9ICh0b3AtPnZhbHVlKCktPmNzc1RleHQoKSAhPSBib3R0b20tPnZhbHVlKCkt
PmNzc1RleHQoKSkgfHwgc2hvd0xlZnQ7CiAgICAgYm9vbCBzaG93UmlnaHQgPSAodG9wLT52YWx1
ZSgpLT5jc3NUZXh0KCkgIT0gcmlnaHQtPnZhbHVlKCktPmNzc1RleHQoKSkgfHwgc2hvd0JvdHRv
bTsKIAotICAgIFN0cmluZyByZXMgPSB0b3AtPnZhbHVlKCktPmNzc1RleHQoKTsKLSAgICBpZiAo
c2hvd1JpZ2h0KQotICAgICAgICByZXMgKz0gIiAiICsgcmlnaHQtPnZhbHVlKCktPmNzc1RleHQo
KTsKLSAgICBpZiAoc2hvd0JvdHRvbSkKLSAgICAgICAgcmVzICs9ICIgIiArIGJvdHRvbS0+dmFs
dWUoKS0+Y3NzVGV4dCgpOwotICAgIGlmIChzaG93TGVmdCkKLSAgICAgICAgcmVzICs9ICIgIiAr
IGxlZnQtPnZhbHVlKCktPmNzc1RleHQoKTsKLQotICAgIHJldHVybiByZXM7CisgICAgU3RyaW5n
QnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZCh0b3AtPnZhbHVlKCktPmNzc1RleHQo
KSk7CisgICAgaWYgKHNob3dSaWdodCkgeworICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQocmlnaHQtPnZhbHVlKCktPmNzc1RleHQoKSk7CisgICAgfQor
ICAgIGlmIChzaG93Qm90dG9tKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChib3R0b20tPnZhbHVlKCktPmNzc1RleHQoKSk7CisgICAgfQorICAg
IGlmIChzaG93TGVmdCkgeworICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQobGVmdC0+dmFsdWUoKS0+Y3NzVGV4dCgpKTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdC50b1N0cmluZygpOwogfQogCiBTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0TGF5
ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHNob3J0aGFu
ZCkgY29uc3QKIHsKLSAgICBTdHJpbmcgcmVzOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0Owog
CiAgICAgY29uc3QgdW5zaWduZWQgc2l6ZSA9IHNob3J0aGFuZC5sZW5ndGgoKTsKICAgICAvLyBC
ZWdpbiBieSBjb2xsZWN0aW5nIHRoZSBwcm9wZXJ0aWVzIGludG8gYW4gYXJyYXkuCkBAIC0zMjcs
NyArMzMzLDggQEAgU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldExheWVyZWRTaG9ydAogICAg
IC8vIE5vdyBzdGl0Y2ggdGhlIHByb3BlcnRpZXMgdG9nZXRoZXIuICBJbXBsaWNpdCBpbml0aWFs
IHZhbHVlcyBhcmUgZmxhZ2dlZCBhcyBzdWNoIGFuZAogICAgIC8vIGNhbiBzYWZlbHkgYmUgb21p
dHRlZC4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUxheWVyczsgaSsrKSB7Ci0gICAg
ICAgIFN0cmluZyBsYXllclJlczsKKyAgICAgICAgLy8gRklYTUU6IElzIHRoZXJlIHNvbWUgd2F5
IG9mIGF2b2lkaW5nIGhhdmluZyBhIHNlY29uZCBTdHJpbmdCdWlsZGVyPworICAgICAgICBTdHJp
bmdCdWlsZGVyIGxheWVyUmVzdWx0OwogICAgICAgICBib29sIHVzZVJlcGVhdFhTaG9ydGhhbmQg
PSBmYWxzZTsKICAgICAgICAgYm9vbCB1c2VSZXBlYXRZU2hvcnRoYW5kID0gZmFsc2U7CiAgICAg
ICAgIGJvb2wgdXNlU2luZ2xlV29yZFNob3J0aGFuZCA9IGZhbHNlOwpAQCAtMzgxLDQyICszODgs
NDIgQEAgU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldExheWVyZWRTaG9ydAogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlLT5pc0ltcGxpY2l0SW5pdGlh
bFZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWxheWVyUmVzLmlzTnVsbCgpKQotICAg
ICAgICAgICAgICAgICAgICBsYXllclJlcyArPSAiICI7CisgICAgICAgICAgICAgICAgaWYgKCFs
YXllclJlc3VsdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGxheWVyUmVzdWx0LmFw
cGVuZCgnICcpOwogICAgICAgICAgICAgICAgIGlmIChmb3VuZEJhY2tncm91bmRQb3NpdGlvbllD
U1NQcm9wZXJ0eSAmJiBzaG9ydGhhbmQucHJvcGVydGllcygpW2pdID09IENTU1Byb3BlcnR5QmFj
a2dyb3VuZFNpemUpIAotICAgICAgICAgICAgICAgICAgICBsYXllclJlcyArPSAiLyAiOworICAg
ICAgICAgICAgICAgICAgICBsYXllclJlc3VsdC5hcHBlbmRMaXRlcmFsKCIvICIpOwogICAgICAg
ICAgICAgICAgIGlmICghZm91bmRCYWNrZ3JvdW5kUG9zaXRpb25ZQ1NTUHJvcGVydHkgJiYgc2hv
cnRoYW5kLnByb3BlcnRpZXMoKVtqXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplKSAKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICBpZiAodXNlUmVw
ZWF0WFNob3J0aGFuZCkgewogICAgICAgICAgICAgICAgICAgICB1c2VSZXBlYXRYU2hvcnRoYW5k
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IGdldFZhbHVlTmFtZShD
U1NWYWx1ZVJlcGVhdFgpOworICAgICAgICAgICAgICAgICAgICBsYXllclJlc3VsdC5hcHBlbmQo
Z2V0VmFsdWVOYW1lKENTU1ZhbHVlUmVwZWF0WCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAodXNlUmVwZWF0WVNob3J0aGFuZCkgewogICAgICAgICAgICAgICAgICAgICB1c2VSZXBlYXRZ
U2hvcnRoYW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IGdldFZh
bHVlTmFtZShDU1NWYWx1ZVJlcGVhdFkpOworICAgICAgICAgICAgICAgICAgICBsYXllclJlc3Vs
dC5hcHBlbmQoZ2V0VmFsdWVOYW1lKENTU1ZhbHVlUmVwZWF0WSkpOwogICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAodXNlU2luZ2xlV29yZFNob3J0aGFuZCkgewogICAgICAgICAgICAgICAgICAg
ICB1c2VTaW5nbGVXb3JkU2hvcnRoYW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGxh
eWVyUmVzICs9IHZhbHVlLT5jc3NUZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGxheWVyUmVz
dWx0LmFwcGVuZCh2YWx1ZS0+Y3NzVGV4dCgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgbGF5ZXJSZXMgKz0gdmFsdWUtPmNzc1RleHQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbGF5ZXJSZXN1bHQuYXBwZW5kKHZhbHVlLT5jc3NUZXh0KCkpOwogCiAgICAg
ICAgICAgICAgICAgaWYgKHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbal0gPT0gQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUG9zaXRpb25ZKQogICAgICAgICAgICAgICAgICAgICBmb3VuZEJhY2tncm91bmRQ
b3NpdGlvbllDU1NQcm9wZXJ0eSA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoIWxheWVyUmVzLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoIXJlcy5p
c051bGwoKSkKLSAgICAgICAgICAgICAgICByZXMgKz0gIiwgIjsKLSAgICAgICAgICAgIHJlcyAr
PSBsYXllclJlczsKKyAgICAgICAgaWYgKCFsYXllclJlc3VsdC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobGF5ZXJSZXN1bHQp
OwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiByZXM7CisgICAgcmV0dXJuIHJlc3VsdC50
b1N0cmluZygpOwogfQogCiBTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0U2hvcnRoYW5kVmFs
dWUoY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5kKSBjb25zdAogewotICAg
IFN0cmluZyByZXM7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNob3J0aGFuZC5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIGlmICghaXNQ
cm9wZXJ0eUltcGxpY2l0KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbaV0pKSB7CiAgICAgICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShzaG9ydGhhbmQu
cHJvcGVydGllcygpW2ldKTsKQEAgLTQyNCwxMiArNDMxLDEyIEBAIFN0cmluZyBTdHlsZVByb3Bl
cnR5U2V0OjpnZXRTaG9ydGhhbmRWYWwKICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIXJlcy5pc051bGwoKSkKLSAgICAgICAgICAg
ICAgICByZXMgKz0gIiAiOwotICAgICAgICAgICAgcmVzICs9IHZhbHVlLT5jc3NUZXh0KCk7Cisg
ICAgICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnICcpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh2YWx1ZS0+Y3NzVGV4dCgp
KTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gcmVzOworICAgIHJldHVybiByZXN1bHQu
dG9TdHJpbmcoKTsKIH0KIAogLy8gb25seSByZXR1cm5zIGEgbm9uLW51bGwgdmFsdWUgaWYgYWxs
IHByb3BlcnRpZXMgaGF2ZSB0aGUgc2FtZSwgbm9uLW51bGwgdmFsdWUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9CbG9iVVJMLmNwcAkocmV2aXNpb24gMTI3MjExKQorKysgU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9CbG9iVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTEgKzcyLDcgQEAgU3Ry
aW5nIEJsb2JVUkw6OmdldElkZW50aWZpZXIoY29uc3QgS1VSTAogS1VSTCBCbG9iVVJMOjpjcmVh
dGVCbG9iVVJMKGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nKQogewogICAgIEFTU0VSVCghb3Jp
Z2luU3RyaW5nLmlzRW1wdHkoKSk7Ci0gICAgU3RyaW5nIHVybFN0cmluZyA9IGtCbG9iUHJvdG9j
b2w7Ci0gICAgdXJsU3RyaW5nICs9ICI6IjsKLSAgICB1cmxTdHJpbmcgKz0gZW5jb2RlV2l0aFVS
TEVzY2FwZVNlcXVlbmNlcyhvcmlnaW5TdHJpbmcpOwotICAgIHVybFN0cmluZyArPSAiLyI7Ci0g
ICAgdXJsU3RyaW5nICs9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKyAgICBTdHJpbmcg
dXJsU3RyaW5nID0gImJsb2I6IiArIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMob3JpZ2lu
U3RyaW5nKSArICcvJyArIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKICAgICByZXR1cm4g
S1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybFN0cmluZyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAkocmV2aXNpb24gMTI3MjEx
KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzI2LDcgKzMyNiw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9vbGRUZXh0
ID0gb2xkVGV4dC5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0
aGlzIG9uY2UgdGhlIG1vZGVsIGhhbmRsZXMgdGhpcyBjYXNlLgogICAgICAgICBpZiAoIW1fb2xk
VGV4dC5lbmRzV2l0aCgnOycpKQotICAgICAgICAgICAgbV9vbGRUZXh0ICs9ICI7IjsKKyAgICAg
ICAgICAgIG1fb2xkVGV4dC5hcHBlbmQoJzsnKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQu
Y3BwCShyZXZpc2lvbiAxMjcyMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsOSArNTUsNyBAQCBib29sIEluc3Bl
Y3RvckNsaWVudDo6ZG9EaXNwYXRjaE1lc3NhZ2VPCiAgICAgaWYgKCFzY3JpcHRDb250cm9sbGVy
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcgZGlzcGF0Y2hUb0Zyb250ZW5k
KCJXZWJJbnNwZWN0b3IuZGlzcGF0Y2hNZXNzYWdlRnJvbUJhY2tlbmQoIik7Ci0gICAgZGlzcGF0
Y2hUb0Zyb250ZW5kICs9IG1lc3NhZ2U7Ci0gICAgZGlzcGF0Y2hUb0Zyb250ZW5kICs9ICIpOyI7
CisgICAgU3RyaW5nIGRpc3BhdGNoVG9Gcm9udGVuZCA9ICJXZWJJbnNwZWN0b3IuZGlzcGF0Y2hN
ZXNzYWdlRnJvbUJhY2tlbmQoIiArIG1lc3NhZ2UgKyAiKTsiOwogCiAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGV4ZWN1dGUgdGhlIHNjcmlwdCBpbiB0aGUgYXBwcm9wcmlhdGUgd29ybGQuCiAg
ICAgc2NyaXB0Q29udHJvbGxlci0+ZXZhbHVhdGUoU2NyaXB0U291cmNlQ29kZShkaXNwYXRjaFRv
RnJvbnRlbmQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25z
b2xlQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb25zb2xlQWdlbnQuY3BwCShyZXZpc2lvbiAxMjcyMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjQ5LDExICsyNTAsMTQgQEAgdm9pZCBJbnNwZWN0b3JD
b25zb2xlQWdlbnQ6OmRpZEZhaWxMb2FkaQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGVycm9y
LmlzQ2FuY2VsbGF0aW9uKCkpIC8vIFJlcG9ydCBmYWlsdXJlcyBvbmx5LgogICAgICAgICByZXR1
cm47Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBsb2FkIHJl
c291cmNlIik7Ci0gICAgaWYgKCFlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLmlzRW1wdHko
KSkKLSAgICAgICAgbWVzc2FnZSArPSAiOiAiICsgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24o
KTsKKyAgICBTdHJpbmdCdWlsZGVyIG1lc3NhZ2U7CisgICAgbWVzc2FnZS5hcHBlbmRMaXRlcmFs
KCJGYWlsZWQgdG8gbG9hZCByZXNvdXJjZSIpOworICAgIGlmICghZXJyb3IubG9jYWxpemVkRGVz
Y3JpcHRpb24oKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbWVzc2FnZS5hcHBlbmRMaXRlcmFsKCI6
ICIpOworICAgICAgICBtZXNzYWdlLmFwcGVuZChlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigp
KTsKKyAgICB9CiAgICAgU3RyaW5nIHJlcXVlc3RJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6cmVx
dWVzdElkKGlkZW50aWZpZXIpOwotICAgIGFkZENvbnNvbGVNZXNzYWdlKGFkb3B0UHRyKG5ldyBD
b25zb2xlTWVzc2FnZShOZXR3b3JrTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9y
TWVzc2FnZUxldmVsLCBtZXNzYWdlLCBlcnJvci5mYWlsaW5nVVJMKCksIHJlcXVlc3RJZCkpKTsK
KyAgICBhZGRDb25zb2xlTWVzc2FnZShhZG9wdFB0cihuZXcgQ29uc29sZU1lc3NhZ2UoTmV0d29y
a01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgbWVzc2Fn
ZS50b1N0cmluZygpLCBlcnJvci5mYWlsaW5nVVJMKCksIHJlcXVlc3RJZCkpKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldE1vbml0b3JpbmdYSFJFbmFibGVkKEVycm9yU3Ry
aW5nKiwgYm9vbCBlbmFibGVkKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZpbGVTeXN0ZW1BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5jcHAJKHJldmlzaW9uIDEyNzIxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01ODIsNyArNTgyLDcgQEAgdm9pZCBGaWxlQ29udGVudFJlcXVlc3Q6
OmRpZFJlYWQoKQogCiAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIgPSBU
ZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUobV9taW1lVHlwZSwgbV9jaGFyc2V0LCB0cnVlKTsK
ICAgICBTdHJpbmcgcmVzdWx0ID0gZGVjb2Rlci0+ZGVjb2RlKHN0YXRpY19jYXN0PGNoYXIqPihi
dWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLSAgICByZXN1bHQgKz0gZGVj
b2Rlci0+Zmx1c2goKTsKKyAgICByZXN1bHQuYXBwZW5kKGRlY29kZXItPmZsdXNoKCkpOwogICAg
IG1fY2hhcnNldCA9IGRlY29kZXItPmVuY29kaW5nKCkuZG9tTmFtZSgpOwogICAgIHJlcG9ydFJl
c3VsdChzdGF0aWNfY2FzdDxGaWxlRXJyb3I6OkVycm9yQ29kZT4oMCksICZyZXN1bHQsICZtX2No
YXJzZXQpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDEyNzIxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxMSArNzQs
MTEgQEAKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VE
ZWNvZGVyLmgiCiAjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKLQogI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAg
LTE5Nyw4ICsxOTcsNyBAQCBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VD
CiAgICAgICAgICAgICBpZiAoIWRlY29kZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBkZWNvZGVyLT5kZWNvZGUoYnVmZmVyLT5k
YXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKLSAgICAgICAgICAgIGNvbnRlbnQgKz0gZGVjb2Rlci0+
Zmx1c2goKTsKLSAgICAgICAgICAgICpyZXN1bHQgPSBjb250ZW50OworICAgICAgICAgICAgKnJl
c3VsdCA9IGNvbnRlbnQgKyBkZWNvZGVyLT5mbHVzaCgpOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKQEAgLTUwMyw3ICs1MDIsNyBAQCB2b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvCiAgICAgTGlzdEhhc2hTZXQ8Q29v
a2llPiByYXdDb29raWVzTGlzdDsKIAogICAgIC8vIElmIHdlIGNhbid0IGdldCByYXcgY29va2ll
cyAtIGZhbGwgYmFjayB0byBTdHJpbmcgcmVwcmVzZW50YXRpb24KLSAgICBTdHJpbmcgc3RyaW5n
Q29va2llc0xpc3Q7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdDb29raWVzTGlzdDsKIAogICAg
IC8vIFJldHVybiB2YWx1ZSB0byBnZXRSYXdDb29raWVzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3Ig
ZXZlcnkgY2FsbCBiZWNhdXNlCiAgICAgLy8gdGhlIHJldHVybiB2YWx1ZSBpcyBwbGF0Zm9ybS9u
ZXR3b3JrIGJhY2tlbmQgc3BlY2lmaWMsIGFuZCB0aGUgY2FsbCB3aWxsCkBAIC01MTksNyArNTE4
LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJybwogICAgICAgICAg
ICAgaWYgKCFyYXdDb29raWVzSW1wbGVtZW50ZWQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogV2UgbmVlZCBkdXBsaWNhdGlvbiBjaGVja2luZyBmb3IgdGhlIFN0cmluZyByZXByZXNlbnRh
dGlvbiBvZiBjb29raWVzLgogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgICAgICAgICAgICAgIHN0cmluZ0Nvb2tpZXNMaXN0ICs9IGRvY3VtZW50LT5jb29raWUoZWMp
OworICAgICAgICAgICAgICAgIHN0cmluZ0Nvb2tpZXNMaXN0LmFwcGVuZChkb2N1bWVudC0+Y29v
a2llKGVjKSk7CiAgICAgICAgICAgICAgICAgLy8gRXhjZXB0aW9ucyBhcmUgdGhyb3duIGJ5IGNv
b2tpZSgpIGluIHNhbmRib3hlZCBmcmFtZXMuIFRoYXQgd29uJ3QgaGFwcGVuIGhlcmUKICAgICAg
ICAgICAgICAgICAvLyBiZWNhdXNlICJkb2N1bWVudCIgaXMgdGhlIGRvY3VtZW50IG9mIHRoZSBt
YWluIGZyYW1lIG9mIHRoZSBwYWdlLgogICAgICAgICAgICAgICAgIEFTU0VSVCghZWMpOwpAQCAt
NTM5LDcgKzUzOCw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm8K
ICAgICAgICAgKmNvb2tpZXNTdHJpbmcgPSAiIjsKICAgICB9IGVsc2UgewogICAgICAgICBjb29r
aWVzID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpDb29raWU+OjpjcmVh
dGUoKTsKLSAgICAgICAgKmNvb2tpZXNTdHJpbmcgPSBzdHJpbmdDb29raWVzTGlzdDsKKyAgICAg
ICAgKmNvb2tpZXNTdHJpbmcgPSBzdHJpbmdDb29raWVzTGlzdC50b1N0cmluZygpOwogICAgIH0K
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcAkocmV2aXNpb24gMTI3MjExKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDEsMTIgKzgwMSwx
NCBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFJ1bGVTZWxlY3RvCiAKIENTU1N0eWxl
UnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9y
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBTdHJpbmcgc3R5bGVTaGVldFRleHQ7Ci0gICAg
Ym9vbCBzdWNjZXNzID0gZ2V0VGV4dCgmc3R5bGVTaGVldFRleHQpOworICAgIFN0cmluZyB0ZXh0
OworICAgIGJvb2wgc3VjY2VzcyA9IGdldFRleHQoJnRleHQpOwogICAgIGlmICghc3VjY2Vzcykg
ewogICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
KyAgICBTdHJpbmdCdWlsZGVyIHN0eWxlU2hlZXRUZXh0OworICAgIHN0eWxlU2hlZXRUZXh0LmFw
cGVuZCh0ZXh0KTsKIAogICAgIG1fcGFnZVN0eWxlU2hlZXQtPmFkZFJ1bGUoc2VsZWN0b3IsICIi
LCBlYyk7CiAgICAgaWYgKGVjKQpAQCAtODE1LDEzICs4MTcsMTMgQEAgQ1NTU3R5bGVSdWxlKiBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjphZGRSdQogICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IEluc3Bl
Y3RvckNTU0FnZW50Ojphc0NTU1N0eWxlUnVsZShtX3BhZ2VTdHlsZVNoZWV0LT5pdGVtKG1fcGFn
ZVN0eWxlU2hlZXQtPmxlbmd0aCgpIC0gMSkpOwogICAgIEFTU0VSVChydWxlKTsKIAotICAgIGlm
IChzdHlsZVNoZWV0VGV4dC5sZW5ndGgoKSkKLSAgICAgICAgc3R5bGVTaGVldFRleHQgKz0gIlxu
IjsKKyAgICBpZiAoIXN0eWxlU2hlZXRUZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgc3R5bGVTaGVl
dFRleHQuYXBwZW5kKCdcbicpOwogCi0gICAgc3R5bGVTaGVldFRleHQgKz0gc2VsZWN0b3I7Ci0g
ICAgc3R5bGVTaGVldFRleHQgKz0gIiB7fSI7CisgICAgc3R5bGVTaGVldFRleHQuYXBwZW5kKHNl
bGVjdG9yKTsKKyAgICBzdHlsZVNoZWV0VGV4dC5hcHBlbmRMaXRlcmFsKCIge30iKTsKICAgICAv
LyBVc2luZyBzZXRUZXh0KCkgYXMgdGhpcyBvcGVyYXRpb24gY2hhbmdlcyB0aGUgc3R5bGUgc2hl
ZXQgcnVsZSBzZXQuCi0gICAgc2V0VGV4dChzdHlsZVNoZWV0VGV4dCk7CisgICAgc2V0VGV4dChz
dHlsZVNoZWV0VGV4dC50b1N0cmluZygpKTsKIAogICAgIGZpcmVTdHlsZVNoZWV0Q2hhbmdlZCgp
OwogCg==
</data>
<flag name="commit-queue"
          id="172449"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>