<?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>156792</bug_id>
          
          <creation_ts>2016-04-20 04:44:03 -0700</creation_ts>
          <short_desc>Create a MathMLLength struct to handle the parsing of MathML length</short_desc>
          <delta_ts>2016-07-22 20:56:26 -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>MathML</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=160111</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>118900</blocked>
    
    <blocked>156536</blocked>
    
    <blocked>156537</blocked>
    
    <blocked>156795</blocked>
    
    <blocked>159620</blocked>
    
    <blocked>159622</blocked>
    
    <blocked>159624</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Frédéric Wang Nélar">fred.wang</reporter>
          <assigned_to name="Frédéric Wang Nélar">fred.wang</assigned_to>
          <cc>alex</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbarton</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rego</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1185393</commentid>
    <comment_count>0</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-20 04:44:03 -0700</bug_when>
    <thetext>This is a first step for bug 156536. For now, we will just move the MathML length parsing to a separate MathMLLength class and make parseMathMLLength call that function.

Later, MathMLLength should really be used as members of MathMLElement classes that are updated each time the attributes change (i.e. have similar role as SVGLength).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185394</commentid>
    <comment_count>1</comment_count>
      <attachid>276817</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-20 04:46:12 -0700</bug_when>
    <thetext>Created attachment 276817
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185422</commentid>
    <comment_count>2</comment_count>
      <attachid>276817</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-20 09:08:05 -0700</bug_when>
    <thetext>Comment on attachment 276817
Patch

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

I don’t think this is the right abstraction here; we should not be adding a header that defines a class for this. I am saying review+ because there is nothing wrong with this change, except there are tons of things I would do differently.

&gt; Source/WebCore/mathml/MathMLLength.cpp:70
&gt; +    : m_valueInSpecifiedUnits(0)
&gt; +    , m_unit(MathMLLength::Unknown)

These values should be specified when defining the data members, not in the constructor.

&gt; Source/WebCore/mathml/MathMLLength.cpp:79
&gt; +    case MathMLLength::Unknown:

No need for the MathMLLength prefix inside a member of the class.

&gt; Source/WebCore/mathml/MathMLLength.cpp:128
&gt; +    const UChar firstChar = string[0];

No need for const here.

&gt; Source/WebCore/mathml/MathMLLength.cpp:136
&gt; +    const UChar secondChar = string[1];

No need for const here.

&gt; Source/WebCore/mathml/MathMLLength.cpp:194
&gt; +    String s = string.simplifyWhiteSpace();

I know this is existing code, but this is a bad idea. Should make this function work without the memory allocation of a new string just to turn runs of spaces into single spaces. Also, this function handles types of white space that should not be ignored, but the code should instead follow the HTML rule of what whitespace is from HTMLParserIdioms.h. Generally, this function should never be used in WebKit code.

&gt; Source/WebCore/mathml/MathMLLength.cpp:205
&gt; +    StringBuilder number;

Using a StringBuilder for this is an inefficient way to do it. A much more efficient way to do it is to use a Vector&lt;LChar, xxx&gt; where xxx is a size large enough to hold all normal numbers.

&gt; Source/WebCore/mathml/MathMLLength.cpp:206
&gt; +    String unit;

This should be a StringView, not a new String.

&gt; Source/WebCore/mathml/MathMLLength.cpp:242
&gt; +    if (type == MathMLLength::Unknown)
&gt; +        return;

This if statement isn’t needed. The code already handles this case correctly even if we store a number in m_valueInSpecifiedUnits in this case and store the type. Thus the local variable isn’t needed.

&gt; Source/WebCore/mathml/MathMLLength.h:23
&gt; +#include &lt;wtf/text/WTFString.h&gt;

Should just include &lt;wtf/Forward.h&gt; instead of WTFString.h.

&gt; Source/WebCore/mathml/MathMLLength.h:30
&gt; +class MathMLLength {

We don’t gain anything by making this a class. Instead, the function should be moved into a separate file, but be left a function. If you want to have a class, that’s fine, but the class would be private and inside the .cpp file.

&gt; Source/WebCore/mathml/MathMLLength.h:33
&gt; +    MathMLLength(const String&amp; valueAsString);

This should be marked explicit.

And in the long term should take a StringView rather than a String.

&gt; Source/WebCore/mathml/MathMLLength.h:38
&gt; +        Unknown,

I think the correct name for this would be ParseFailed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185439</commentid>
    <comment_count>3</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-20 09:43:07 -0700</bug_when>
    <thetext>Thanks for the review. Just to clarify the goal: The long term goal is to move the parsing of MathML attributes from the MathML renderer classes to the MathML element classes (bug 156536).

For MathML length attributes, the MathML element class will then store MathMLLength members (with their setValueAsString parsing function called when the attribute is set). Then the renderer classes can just call toUserUnits to quickly retrieve the length value. I just tried a first patch in bug 156795.

That seems closer to what SVG does with SVGLength but maybe that&apos;s overkill for MathML. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185813</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-21 09:14:19 -0700</bug_when>
    <thetext>If we want to add a type for storing parsed MathML lengths I suggest we not build parsing and value resolution into that same class.

It seems to me that there are three separate issues here:

1) A clean type for storing a MathML length including the value and the units. I would suggest a struct, but a class might be OK too. For clarity, I think type should probably not have a null value. We could use Optional when the length is optional. The default value could be some kind of valid zero length instead of a a null.

2) A parsing function that correctly parses a string into one of these lengths.

3) A rendering function that knows how to convert such a length into a LayoutUnit.

I would *not* build all three of these things into a single class. In fact, it seems that (1) and (2) should be part of DOM and (3) should be part of rendering.

I am not sure sure that storing the parsed values in the DOM is the right tradeoff, though. It means that we do parsing at the time an attribute is set, even if the attribute is set over and over again before we finally render. It might be more efficient to be lazy about the parsing if the result of the parsing is only exposed as a side effect of rendering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185819</commentid>
    <comment_count>5</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-21 09:33:37 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; If we want to add a type for storing parsed MathML lengths I suggest we not
&gt; build parsing and value resolution into that same class.
&gt; 
&gt; It seems to me that there are three separate issues here:
&gt; 
&gt; 1) A clean type for storing a MathML length including the value and the
&gt; units. I would suggest a struct, but a class might be OK too. For clarity, I
&gt; think type should probably not have a null value. We could use Optional when
&gt; the length is optional. The default value could be some kind of valid zero
&gt; length instead of a a null.
&gt; 
&gt; 2) A parsing function that correctly parses a string into one of these
&gt; lengths.
&gt; 
&gt; 3) A rendering function that knows how to convert such a length into a
&gt; LayoutUnit.
&gt; 
&gt; I would *not* build all three of these things into a single class. In fact,
&gt; it seems that (1) and (2) should be part of DOM and (3) should be part of
&gt; rendering.

OK using a struct + two functions makes sense to me. I&apos;m not attached to the class, I just tried to copy what SVG does but as I said that&apos;s probably overkill for MathML.

&gt; I am not sure sure that storing the parsed values in the DOM is the right
&gt; tradeoff, though. It means that we do parsing at the time an attribute is
&gt; set, even if the attribute is set over and over again before we finally
&gt; render. It might be more efficient to be lazy about the parsing if the
&gt; result of the parsing is only exposed as a side effect of rendering.

So what do you suggest? IIUC (besides suggestions by other reviewers to do parsing in the DOM for consistency with the rest of the code), MathML renderers currently have to parse all its attributes very often e.g. when their style change or when one of its attribute change... which does not seem optimal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185827</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-21 09:46:41 -0700</bug_when>
    <thetext>We could cache the parsed results in the DOM, but compute them only when the rendering code asks for them. When the DOM attribute changes we would invalidate, but not recompute, the values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185829</commentid>
    <comment_count>7</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-21 09:56:15 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; We could cache the parsed results in the DOM, but compute them only when the
&gt; rendering code asks for them. When the DOM attribute changes we would
&gt; invalidate, but not recompute, the values.

So IIUC, by &quot;parsed&quot; you mean passed to setValueAsString and by &quot;computed&quot; you mean calculated with toUserUnits? If so, that was my intention.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185908</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-21 13:34:52 -0700</bug_when>
    <thetext>Here’s what I mean, using your function names:

When the DOM attribute changes we would *not* call setValueAsString; we’d just invalidate the cached value if there was one. Later, when the the rendering code called the DOM to ask the the length, the DOM code would call setValueAsString and cache that value. Basically the &quot;memoize&quot; pattern.

The rendering code would call toUserUnits on the value it got from the DOM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186126</commentid>
    <comment_count>9</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-21 22:53:42 -0700</bug_when>
    <thetext>OK, now I see how to refactor the code to do this kind of lazy parsing. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193379</commentid>
    <comment_count>10</comment_count>
      <attachid>279018</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-05-16 08:17:56 -0700</bug_when>
    <thetext>Created attachment 279018
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193780</commentid>
    <comment_count>11</comment_count>
      <attachid>279110</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-05-17 04:08:18 -0700</bug_when>
    <thetext>Created attachment 279110
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193783</commentid>
    <comment_count>12</comment_count>
      <attachid>279112</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-05-17 05:10:12 -0700</bug_when>
    <thetext>Created attachment 279112
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208194</commentid>
    <comment_count>13</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-07-06 06:26:51 -0700</bug_when>
    <thetext>@Darin: Since you did the review of the initial attempt, can you please take a look at the latest version of this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208729</commentid>
    <comment_count>14</comment_count>
      <attachid>279112</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-07-07 12:38:28 -0700</bug_when>
    <thetext>Comment on attachment 279112
Patch

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

I think this change looks good, but could be cleaner by partitioning some of the parsing logic into utility functions to reduce complexity and reduce the need for comments.

&gt; Source/WebCore/mathml/MathMLElement.cpp:307
&gt; +    if (string == &quot;veryverythinmathspace&quot;)

Do these comparisons need to be case-sensitive?

&gt; Source/WebCore/mathml/MathMLElement.cpp:342
&gt; +        stringLength--;

I suggest the above be moved to a helper function called something like &quot;skipLeadingAndTrailingWhitespace&quot; that takes start and stringLength as references.

Also, could you just use string.stripWhiteSpace(isHTMLSpace) to do this work?

&gt; Source/WebCore/mathml/MathMLElement.cpp:346
&gt; +    // We consider the most typical case: a number followed by an optional unit.

Again, I think this would be more legible as a stand-alone function called &quot;parseTypicalLengthStyle&quot; that could also serve as this comment. It could return &apos;true&apos; if we should return when it completes.

&gt; Source/WebCore/mathml/MathMLElement.cpp:371
&gt; +                lengthType = LengthType::Px;

It&apos;s a shame we can&apos;t share this code with the SVGLength class, or the logic in the CSSParser that does similar things.

&gt; Source/WebCore/mathml/MathMLElement.h:64
&gt; +        LengthType type = LengthType::ParsingFailed;

LengthType type { LengthType::ParsingFailed };
float value { 0 };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209071</commentid>
    <comment_count>15</comment_count>
      <attachid>279112</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-07-08 06:00:24 -0700</bug_when>
    <thetext>Comment on attachment 279112
Patch

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

&gt;&gt; Source/WebCore/mathml/MathMLElement.cpp:307
&gt;&gt; +    if (string == &quot;veryverythinmathspace&quot;)
&gt; 
&gt; Do these comparisons need to be case-sensitive?

Yes, MathML attribute values are case-sensitive. I&apos;ll add a comment.

&gt;&gt; Source/WebCore/mathml/MathMLElement.cpp:342
&gt;&gt; +        stringLength--;
&gt; 
&gt; I suggest the above be moved to a helper function called something like &quot;skipLeadingAndTrailingWhitespace&quot; that takes start and stringLength as references.
&gt; 
&gt; Also, could you just use string.stripWhiteSpace(isHTMLSpace) to do this work?

The old code used to rely on stripWhiteSpace, but Darin said above that we should try avoiding allocating new String and use StringView instead.

&gt;&gt; Source/WebCore/mathml/MathMLElement.cpp:371
&gt;&gt; +                lengthType = LengthType::Px;
&gt; 
&gt; It&apos;s a shame we can&apos;t share this code with the SVGLength class, or the logic in the CSSParser that does similar things.

Yes, indeed :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209079</commentid>
    <comment_count>16</comment_count>
      <attachid>283147</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-07-08 06:45:06 -0700</bug_when>
    <thetext>Created attachment 283147
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209782</commentid>
    <comment_count>17</comment_count>
      <attachid>283147</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-07-11 13:40:24 -0700</bug_when>
    <thetext>Comment on attachment 283147
Patch

A very nice cleanup! Thanks for incorporating all of those comments. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209930</commentid>
    <comment_count>18</comment_count>
      <attachid>283147</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-07-11 21:23:39 -0700</bug_when>
    <thetext>Comment on attachment 283147
Patch

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

&gt; Source/WebCore/mathml/MathMLElement.h:61
&gt; +    // Unitless values are intepreted as a multiple of a reference value.

interpreted</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209939</commentid>
    <comment_count>19</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-07-11 21:47:52 -0700</bug_when>
    <thetext>Committed r203106: &lt;http://trac.webkit.org/changeset/203106&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276817</attachid>
            <date>2016-04-20 04:46:12 -0700</date>
            <delta_ts>2016-05-16 08:17:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156792-20160420134631.patch</filename>
            <type>text/plain</type>
            <size>24196</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5NzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzU1ZmYwYmNhNjJhNGE1
ZmE3YmY3ODAxZDA1YTc5YTI1YWZlMjRhZC4uMjhmMjlmNDFhODc2ZTQ4YjExODYzNDNhOTM1OGNh
NTQwZmViNzUwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE2LTA0LTIwICBGcmVk
ZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KKworICAgICAgICBDcmVhdGUgYSBNYXRoTUxM
ZW5ndGggY2xhc3MgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIG9mIE1hdGhNTCBsZW5ndGguCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY3OTIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IGFscmVhZHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OiBBZGQgTWF0aE1MZW5ndGggZmlsZXMuCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAgICAgKiBtYXRobWwvTWF0aE1MTGVuZ3Ro
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxMZW5ndGg6Ok1hdGhNTExlbmd0
aCk6IENvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE1MTGVuZ3RoOjp0b1VzZXJV
bml0cyk6IFRoaXMgY29udmVydHMgdGhlIE1hdGhNTExlbmd0aCB0byB1c2VyIHVuaXRzIHVzaW5n
IHRoZSBjdXJyZW50IHN0eWxlIGNvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxMZW5n
dGg6OnN0cmluZ1RvTGVuZ3RoVHlwZSk6IFRoaXMgbWFwcyBhIHVuaXQgc3RyaW5nIHRvIGEgTWF0
aE1MTGVuZ3RoVHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTmFtZWRTcGFjZSk6IFRoaXMg
aXMgdGhlIGhlbHBlciBmdW5jdGlvbiB0byBwYXJzZSBuYW1lZCBzcGFjZXMgdGhhdCB1c2VkIHRv
IGJlIGluIHBhcnNlTWF0aE1MTmFtZWRTcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTExl
bmd0aDo6c2V0VmFsdWVBc1N0cmluZyk6IFRoaXMgaXMgdGhlIGdlbmVyYWwgcGFyc2luZyBjb2Rl
IHRoYXQgdXNlZCB0byBiZSBpbiBwYXJzZU1hdGhNTExlbmd0aC4KKyAgICAgICAgKiBtYXRobWwv
TWF0aE1MTGVuZ3RoLmg6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VNYXRoTUxMZW5ndGgpOiBX
ZSBkbyB0aGUgcGFyc2luZyB3aXRoIHRoZSBoZWxwIG9mIHRoZSBNYXRoTUxlbmd0aCBjbGFzcy4K
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTWF0aE1MTmFtZWRTcGFjZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oOgorCiAyMDE2LTA0LTE4
ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBNb2Rlcm4gSURC
IChCbG9iIHN1cHBvcnQpOiBXaGVuIHJlYWRpbmcgQmxvYnMgZnJvbSB0aGUgZGF0YWJhc2UsIGdy
YW50IHRoZSBOZXR3b3JraW5nIHByb2Nlc3Mgc2FuZGJveCBhY2Nlc3MgdG8gdGhlIGZpbGVzLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCBlY2YyMDk2Y2M0ZGNhYjAxNDk4MDJiZjM0OGIzMDMwODc0
ZGI1NzZkLi40YjM0ZDY0NGZlZGQ4ODM3Yjc2MGE1YTM2MzU5YjA3NTU5OTFkNDY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtMTk3OSw2ICsxOTc5LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwog
CiAgICAgbWF0aG1sL01hdGhNTEVsZW1lbnQuY3BwCiAgICAgbWF0aG1sL01hdGhNTElubGluZUNv
bnRhaW5lckVsZW1lbnQuY3BwCisgICAgbWF0aG1sL01hdGhNTExlbmd0aC5jcHAKICAgICBtYXRo
bWwvTWF0aE1MTWF0aEVsZW1lbnQuY3BwCiAgICAgbWF0aG1sL01hdGhNTE1lbmNsb3NlRWxlbWVu
dC5jcHAKICAgICBtYXRobWwvTWF0aE1MU2VsZWN0RWxlbWVudC5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwOGQ4Y2IxZmRl
NGQ2MWE3MGE4MDc0NzdkMTNhMWRkMjZkYjNhMTE4Li4yM2IyMzQwNmEyYTRjYTZjMDc3MDJkNDMw
NDk5ZjQzZWE0Zjc4YWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC02ODI1LDYgKzY4MjUsOCBAQAogCQlGQUJFNzJGNTEwNTlD
MUVCMDBEOTk5REQgLyogTWF0aE1MRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkFCRTcyRUUxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTEVs
ZW1lbnQuaCAqLzsgfTsKIAkJRkFCRTcyRjYxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTElubGlu
ZUNvbnRhaW5lckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkFCRTcyRUYxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTElubGluZUNvbnRh
aW5lckVsZW1lbnQuY3BwICovOyB9OwogCQlGQUJFNzJGNzEwNTlDMUVCMDBEOTk5REQgLyogTWF0
aE1MSW5saW5lQ29udGFpbmVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkFCRTcyRjAxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTElubGlu
ZUNvbnRhaW5lckVsZW1lbnQuaCAqLzsgfTsKKwkJRkFCRTcyRjgxMDU5QzFFQjAwQTlCODQgLyog
TWF0aE1MTGVuZ3RoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZBQkU3MkYxMTA1OUMxRUIwMEE5Qjg0IC8qIE1hdGhNTExlbmd0aC5jcHAgKi87IH07
CisJCUZBQkU3MkY5MTA1OUMxRUIwMEE5Qjg0IC8qIE1hdGhNTExlbmd0aC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkFCRTcyRjIxMDU5QzFFQjAwQTlC
ODQgLyogTWF0aE1MTGVuZ3RoLmggKi87IH07CiAJCUZBQkU3MkY4MTA1OUMxRUIwMEQ5OTlERCAv
KiBNYXRoTUxNYXRoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGQUJFNzJGMTEwNTlDMUVCMDBEOTk5REQgLyogTWF0aE1MTWF0aEVsZW1l
bnQuY3BwICovOyB9OwogCQlGQUJFNzJGOTEwNTlDMUVCMDBEOTk5REQgLyogTWF0aE1MTWF0aEVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZB
QkU3MkYyMTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxNYXRoRWxlbWVudC5oICovOyB9OwogCQlG
QUJFNzJGRDEwNTlDMjExMDBEOTk5REQgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkFCRTcyRkIxMDU5QzIx
MTAwRDk5OUREIC8qIE1hdGhNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLzsgfTsKQEAgLTE0OTA3LDYg
KzE0OTA5LDggQEAKIAkJRkFCRTcyRUUxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTEVsZW1lbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWF0aE1MRWxlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQUJFNzJFRjEwNTlDMUVCMDBEOTk5REQgLyogTWF0
aE1MSW5saW5lQ29udGFpbmVyRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNYXRoTUxJbmxpbmVDb250YWluZXJFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkFCRTcyRjAxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTElubGlu
ZUNvbnRhaW5lckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWF0
aE1MSW5saW5lQ29udGFpbmVyRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGQUJFNzJGMTEwNTlDMUVCMDBBOUI4NCAvKiBNYXRoTUxMZW5ndGguY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0aE1MTGVuZ3RoLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkFCRTcyRjIxMDU5QzFFQjAwQTlCODQgLyogTWF0aE1MTGVuZ3Ro
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hdGhNTExlbmd0aC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQUJFNzJGMTEwNTlDMUVCMDBEOTk5REQgLyogTWF0
aE1MTWF0aEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TWF0aE1MTWF0aEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQUJF
NzJGMjEwNTlDMUVCMDBEOTk5REQgLyogTWF0aE1MTWF0aEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWF0aE1MTWF0aEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkFCRTcyRjMxMDU5QzFFQjAwRDk5OUREIC8qIG1hdGh0YWdzLmluICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IG1hdGh0YWdzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjQ2MDIsNiArMjQ2MDYsOCBAQAogCQkJCUZBQkU3MkVFMTA1OUMxRUIwMEQ5OTlE
RCAvKiBNYXRoTUxFbGVtZW50LmggKi8sCiAJCQkJRkFCRTcyRUYxMDU5QzFFQjAwRDk5OUREIC8q
IE1hdGhNTElubGluZUNvbnRhaW5lckVsZW1lbnQuY3BwICovLAogCQkJCUZBQkU3MkYwMTA1OUMx
RUIwMEQ5OTlERCAvKiBNYXRoTUxJbmxpbmVDb250YWluZXJFbGVtZW50LmggKi8sCisJCQkJRkFC
RTcyRjExMDU5QzFFQjAwQTlCODQgLyogTWF0aE1MTGVuZ3RoLmNwcCAqLywKKwkJCQlGQUJFNzJG
MjEwNTlDMUVCMDBBOUI4NCAvKiBNYXRoTUxMZW5ndGguaCAqLywKIAkJCQlGQUJFNzJGMTEwNTlD
MUVCMDBEOTk5REQgLyogTWF0aE1MTWF0aEVsZW1lbnQuY3BwICovLAogCQkJCUZBQkU3MkYyMTA1
OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxNYXRoRWxlbWVudC5oICovLAogCQkJCUMzRTYxQzY1M0E2
NDgwN0E4M0U3NkZCOCAvKiBNYXRoTUxNZW5jbG9zZUVsZW1lbnQuY3BwICovLApAQCAtMjcxMjks
NiArMjcxMzUsNyBAQAogCQkJCUZBQkU3MkY1MTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0NEEyOEFBQzEyREZCOEFDMDBBRTkyM0IgLyogTWF0
aE1MRWxlbWVudEZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUZBQkU3MkY3MTA1OUMxRUIw
MEQ5OTlERCAvKiBNYXRoTUxJbmxpbmVDb250YWluZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQlGQUJFNzJGOTEwNTlDMUVCMDBBOUI4NCAvKiBNYXRoTUxMZW5ndGguaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZBQkU3MkY5MTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxNYXRoRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDRBMjhBQUYxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5h
bWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzkwNDZFMDEyREEyNUUxN0JBRjgwQTIgLyogTWF0
aE1MT3BlcmF0b3JEaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAqLywKQEAgLTMwOTAxLDYgKzMwOTA4
LDcgQEAKIAkJCQlGQUJFNzJGNDEwNTlDMUVCMDBEOTk5REQgLyogTWF0aE1MRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGQUJFNzJGRDEwNTlDMjExMDBEOTk5REQgLyogTWF0aE1MRWxl
bWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkFCRTcyRjYxMDU5QzFFQjAwRDk5
OUREIC8qIE1hdGhNTElubGluZUNvbnRhaW5lckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkFCRTcyRjgxMDU5QzFFQjAwQTlCODQgLyogTWF0aE1MTGVuZ3RoLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZBQkU3MkY4MTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxNYXRoRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwNUQ5MTNDRUVBQjJBNjA1MzQyMThBQ0YgLyogTWF0aE1M
TWVuY2xvc2VFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZBQkU3MkZFMTA1OUMyMTEw
MEQ5OTlERCAvKiBNYXRoTUxOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxMZW5ndGguY3BwIGIvU291cmNlL1dlYkNvcmUvbWF0
aG1sL01hdGhNTExlbmd0aC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDdjNTVhY2UxMzlmMTZmZWJhNzQ1N2Zj
MmFmYjI5MDYwMjRmZjc2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL21hdGht
bC9NYXRoTUxMZW5ndGguY3BwCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJNYXRoTUxMZW5ndGguaCIKKworI2luY2x1ZGUgIkNTU0hlbHBlci5oIgor
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ly8KKy8vIE1hdGhNTCBsZW5ndGhzIGFyZSBkZXNjcmliZWQgaW4gdGhlIE1hdGhNTCBzcGVjaWZp
Y2F0aW9uIGFzIGZvbGxvd3M6CisvLyAoaHR0cDovL3d3dy53My5vcmcvVFIvTWF0aE1ML2NoYXB0
ZXIyLmh0bWwjZnVuZC51bml0cykKKy8vCisvLyAiTW9zdCBwcmVzZW50YXRpb24gZWxlbWVudHMg
aGF2ZSBhdHRyaWJ1dGVzIHRoYXQgYWNjZXB0IHZhbHVlcyByZXByZXNlbnRpbmcKKy8vIGxlbmd0
aHMgdG8gYmUgdXNlZCBmb3Igc2l6ZSwgc3BhY2luZyBvciBzaW1pbGFyIHByb3BlcnRpZXMuIFRo
ZSBzeW50YXggb2YgYQorLy8gbGVuZ3RoIGlzIHNwZWNpZmllZCBhcworLy8KKy8vIG51bWJlciB8
IG51bWJlciB1bml0IHwgbmFtZWRzcGFjZQorLy8KKy8vIFRoZXJlIHNob3VsZCBiZSBubyBzcGFj
ZSBiZXR3ZWVuIHRoZSBudW1iZXIgYW5kIHRoZSB1bml0IG9mIGEgbGVuZ3RoLiIKKy8vCisvLyAi
QSB0cmFpbGluZyAnJScgcmVwcmVzZW50cyBhIHBlcmNlbnQgb2YgdGhlIGRlZmF1bHQgdmFsdWUu
IFRoZSBkZWZhdWx0CisvLyB2YWx1ZSwgb3IgaG93IGl0IGlzIG9idGFpbmVkLCBpcyBsaXN0ZWQg
aW4gdGhlIHRhYmxlIG9mIGF0dHJpYnV0ZXMgZm9yIGVhY2gKKy8vIGVsZW1lbnQuIFsuLi5dIEEg
bnVtYmVyIHdpdGhvdXQgYSB1bml0IGlzIGludGVwcmV0ZWQgYXMgYSBtdWx0aXBsZSBvZiB0aGUK
Ky8vIGRlZmF1bHQgdmFsdWUuIgorLy8KKy8vICJUaGUgcG9zc2libGUgdW5pdHMgaW4gTWF0aE1M
IGFyZToKKy8vCisvLyBVbml0IERlc2NyaXB0aW9uCisvLyBlbSAgIGFuIGVtIChmb250LXJlbGF0
aXZlIHVuaXQgdHJhZGl0aW9uYWxseSB1c2VkIGZvciBob3Jpem9udGFsIGxlbmd0aHMpCisvLyBl
eCAgIGFuIGV4IChmb250LXJlbGF0aXZlIHVuaXQgdHJhZGl0aW9uYWxseSB1c2VkIGZvciB2ZXJ0
aWNhbCBsZW5ndGhzKQorLy8gcHggICBwaXhlbHMsIG9yIHNpemUgb2YgYSBwaXhlbCBpbiB0aGUg
Y3VycmVudCBkaXNwbGF5CisvLyBpbiAgIGluY2hlcyAoMSBpbmNoID0gMi41NCBjZW50aW1ldGVy
cykKKy8vIGNtICAgY2VudGltZXRlcnMKKy8vIG1tICAgbWlsbGltZXRlcnMKKy8vIHB0ICAgcG9p
bnRzICgxIHBvaW50ID0gMS83MiBpbmNoKQorLy8gcGMgICBwaWNhcyAoMSBwaWNhID0gMTIgcG9p
bnRzKQorLy8gJSAgICBwZXJjZW50YWdlIG9mIGRlZmF1bHQgdmFsdWUiCisvLworLy8gVGhlIG51
bWJlcnMgYXJlIGRlZmluZWQgdGhhdCB3YXk6CisvLyAtIHVuc2lnbmVkLW51bWJlcjogImEgc3Ry
aW5nIG9mIGRlY2ltYWwgZGlnaXRzIHdpdGggdXAgdG8gb25lIGRlY2ltYWwgcG9pbnQKKy8vICAg
KFUrMDAyRSksIHJlcHJlc2VudGluZyBhIG5vbi1uZWdhdGl2ZSB0ZXJtaW5hdGluZyBkZWNpbWFs
IG51bWJlciAoYSB0eXBlIG9mCisvLyAgIHJhdGlvbmFsIG51bWJlcikiCisvLyAtIG51bWJlcjog
ImFuIG9wdGlvbmFsIHByZWZpeCBvZiAnLScgKFUrMDAyRCksIGZvbGxvd2VkIGJ5IGFuIHVuc2ln
bmVkCisvLyAgIG51bWJlciwgcmVwcmVzZW50aW5nIGEgdGVybWluYXRpbmcgZGVjaW1hbCBudW1i
ZXIgKGEgdHlwZSBvZiByYXRpb25hbAorLy8gICBudW1iZXIpIgorLy8KK01hdGhNTExlbmd0aDo6
TWF0aE1MTGVuZ3RoKGNvbnN0IFN0cmluZyYgdmFsdWVBc1N0cmluZykKKyAgICA6IG1fdmFsdWVJ
blNwZWNpZmllZFVuaXRzKDApCisgICAgLCBtX3VuaXQoTWF0aE1MTGVuZ3RoOjpVbmtub3duKQor
eworICAgIHNldFZhbHVlQXNTdHJpbmcodmFsdWVBc1N0cmluZyk7Cit9CisKK2Jvb2wgTWF0aE1M
TGVuZ3RoOjp0b1VzZXJVbml0cyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIExheW91dFVuaXQm
IGxlbmd0aFZhbHVlLCBib29sIGFsbG93TmVnYXRpdmVWYWx1ZXMpIGNvbnN0Cit7CisgICAgTGF5
b3V0VW5pdCB2YWx1ZSA9IGxlbmd0aFZhbHVlOworICAgIHN3aXRjaCAobV91bml0KSB7CisgICAg
Y2FzZSBNYXRoTUxMZW5ndGg6OlVua25vd246CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBj
YXNlIE1hdGhNTExlbmd0aDo6VW5pdExlc3M6CisgICAgICAgIHZhbHVlICo9IG1fdmFsdWVJblNw
ZWNpZmllZFVuaXRzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1hdGhNTExlbmd0aDo6UHg6
CisgICAgICAgIHZhbHVlID0gbV92YWx1ZUluU3BlY2lmaWVkVW5pdHM7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgTWF0aE1MTGVuZ3RoOjpQZXJjZW50YWdlOgorICAgICAgICB2YWx1ZSAqPSBt
X3ZhbHVlSW5TcGVjaWZpZWRVbml0cyAvIDEwMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBN
YXRoTUxMZW5ndGg6OkVtOgorICAgICAgICB2YWx1ZSA9IG1fdmFsdWVJblNwZWNpZmllZFVuaXRz
ICogc3R5bGUuZm9udENhc2NhZGUoKS5zaXplKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
TWF0aE1MTGVuZ3RoOjpFeDoKKyAgICAgICAgdmFsdWUgPSBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0
cyAqIHN0eWxlLmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIE1hdGhNTExlbmd0aDo6Q206CisgICAgICAgIHZhbHVlID0gbV92YWx1ZUluU3BlY2lmaWVk
VW5pdHMgKiBjc3NQaXhlbHNQZXJJbmNoIC8gMi41NGY7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTWF0aE1MTGVuZ3RoOjpNbToKKyAgICAgICAgdmFsdWUgPSBtX3ZhbHVlSW5TcGVjaWZpZWRV
bml0cyAqIGNzc1BpeGVsc1BlckluY2ggLyAyNS40ZjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBNYXRoTUxMZW5ndGg6OkluOgorICAgICAgICB2YWx1ZSA9IG1fdmFsdWVJblNwZWNpZmllZFVu
aXRzICogY3NzUGl4ZWxzUGVySW5jaDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNYXRoTUxM
ZW5ndGg6OlB0OgorICAgICAgICB2YWx1ZSA9IG1fdmFsdWVJblNwZWNpZmllZFVuaXRzICogY3Nz
UGl4ZWxzUGVySW5jaCAvIDcyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1hdGhNTExlbmd0
aDo6UGM6CisgICAgICAgIHZhbHVlID0gbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgKiBjc3NQaXhl
bHNQZXJJbmNoIC8gNjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNYXRoTUxMZW5ndGg6Ok11
OgorICAgICAgICB2YWx1ZSA9IG1fdmFsdWVJblNwZWNpZmllZFVuaXRzICogc3R5bGUuZm9udENh
c2NhZGUoKS5zaXplKCkgLyAxODsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFh
bGxvd05lZ2F0aXZlVmFsdWVzICYmIHZhbHVlIDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgbGVuZ3RoVmFsdWUgPSB2YWx1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworTWF0aE1M
TGVuZ3RoOjpNYXRoTUxMZW5ndGhUeXBlIE1hdGhNTExlbmd0aDo6c3RyaW5nVG9MZW5ndGhUeXBl
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gTWF0aE1MTGVuZ3RoOjpVbml0TGVzczsKKworICAgIGNvbnN0IFVDaGFyIGZp
cnN0Q2hhciA9IHN0cmluZ1swXTsKKworICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgPT0gMSkKKyAg
ICAgICAgcmV0dXJuIGZpcnN0Q2hhciA9PSAnJScgPyBNYXRoTUxMZW5ndGg6OlBlcmNlbnRhZ2Ug
OiBNYXRoTUxMZW5ndGg6OlVua25vd247CisKKyAgICBpZiAoc3RyaW5nLmxlbmd0aCgpICE9IDIp
CisgICAgICAgIHJldHVybiBNYXRoTUxMZW5ndGg6OlVua25vd247CisKKyAgICBjb25zdCBVQ2hh
ciBzZWNvbmRDaGFyID0gc3RyaW5nWzFdOworCisgICAgaWYgKGZpcnN0Q2hhciA9PSAnZScgJiYg
c2Vjb25kQ2hhciA9PSAnbScpCisgICAgICAgIHJldHVybiBNYXRoTUxMZW5ndGg6OkVtOworICAg
IGlmIChmaXJzdENoYXIgPT0gJ2UnICYmIHNlY29uZENoYXIgPT0gJ3gnKQorICAgICAgICByZXR1
cm4gTWF0aE1MTGVuZ3RoOjpFeDsKKyAgICBpZiAoZmlyc3RDaGFyID09ICdwJyAmJiBzZWNvbmRD
aGFyID09ICd4JykKKyAgICAgICAgcmV0dXJuIE1hdGhNTExlbmd0aDo6UHg7CisgICAgaWYgKGZp
cnN0Q2hhciA9PSAnYycgJiYgc2Vjb25kQ2hhciA9PSAnbScpCisgICAgICAgIHJldHVybiBNYXRo
TUxMZW5ndGg6OkNtOworICAgIGlmIChmaXJzdENoYXIgPT0gJ20nICYmIHNlY29uZENoYXIgPT0g
J20nKQorICAgICAgICByZXR1cm4gTWF0aE1MTGVuZ3RoOjpNbTsKKyAgICBpZiAoZmlyc3RDaGFy
ID09ICdpJyAmJiBzZWNvbmRDaGFyID09ICduJykKKyAgICAgICAgcmV0dXJuIE1hdGhNTExlbmd0
aDo6SW47CisgICAgaWYgKGZpcnN0Q2hhciA9PSAncCcgJiYgc2Vjb25kQ2hhciA9PSAndCcpCisg
ICAgICAgIHJldHVybiBNYXRoTUxMZW5ndGg6OlB0OworICAgIGlmIChmaXJzdENoYXIgPT0gJ3An
ICYmIHNlY29uZENoYXIgPT0gJ2MnKQorICAgICAgICByZXR1cm4gTWF0aE1MTGVuZ3RoOjpQYzsK
KyAgICAvLyBNYXRoTUxMZW5ndGg6Ok11IGlzIG9ubHkgdXNlZCBpbnRlcm5hbGx5LCBpdCBpcyBu
b3QgYSBNYXRoTUwgdW5pdC4KKworICAgIHJldHVybiBNYXRoTUxMZW5ndGg6OlVua25vd247Cit9
CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcGFyc2VOYW1lZFNwYWNlKGNvbnN0IFN0cmluZyYg
c3RyaW5nKQoreworICAgIGlmIChzdHJpbmcgPT0gInZlcnl2ZXJ5dGhpbm1hdGhzcGFjZSIpCisg
ICAgICAgIHJldHVybiAxOworICAgIGlmIChzdHJpbmcgPT0gInZlcnl0aGlubWF0aHNwYWNlIikK
KyAgICAgICAgcmV0dXJuIDI7CisgICAgaWYgKHN0cmluZyA9PSAidGhpbm1hdGhzcGFjZSIpCisg
ICAgICAgIHJldHVybiAzOworICAgIGlmIChzdHJpbmcgPT0gIm1lZGl1bW1hdGhzcGFjZSIpCisg
ICAgICAgIHJldHVybiA0OworICAgIGlmIChzdHJpbmcgPT0gInRoaWNrbWF0aHNwYWNlIikKKyAg
ICAgICAgcmV0dXJuIDU7CisgICAgaWYgKHN0cmluZyA9PSAidmVyeXRoaWNrbWF0aHNwYWNlIikK
KyAgICAgICAgcmV0dXJuIDY7CisgICAgaWYgKHN0cmluZyA9PSAidmVyeXZlcnl0aGlja21hdGhz
cGFjZSIpCisgICAgICAgIHJldHVybiA3OworICAgIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZldmVy
eXZlcnl0aGlubWF0aHNwYWNlIikKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChzdHJpbmcg
PT0gIm5lZ2F0aXZldmVyeXRoaW5tYXRoc3BhY2UiKQorICAgICAgICByZXR1cm4gLTI7CisgICAg
aWYgKHN0cmluZyA9PSAibmVnYXRpdmV0aGlubWF0aHNwYWNlIikKKyAgICAgICAgcmV0dXJuIC0z
OworICAgIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZlbWVkaXVtbWF0aHNwYWNlIikKKyAgICAgICAg
cmV0dXJuIC00OworICAgIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZldGhpY2ttYXRoc3BhY2UiKQor
ICAgICAgICByZXR1cm4gLTU7CisgICAgaWYgKHN0cmluZyA9PSAibmVnYXRpdmV2ZXJ5dGhpY2tt
YXRoc3BhY2UiKQorICAgICAgICByZXR1cm4gLTY7CisgICAgaWYgKHN0cmluZyA9PSAibmVnYXRp
dmV2ZXJ5dmVyeXRoaWNrbWF0aHNwYWNlIikKKyAgICAgICAgcmV0dXJuIC03OworICAgIHJldHVy
biAwOworfQorCit2b2lkIE1hdGhNTExlbmd0aDo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJp
bmcmIHN0cmluZykKK3sKKyAgICBTdHJpbmcgcyA9IHN0cmluZy5zaW1wbGlmeVdoaXRlU3BhY2Uo
KTsKKworICAgIGlmIChzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHVu
c2lnbmVkIHZhbHVlID0gcGFyc2VOYW1lZFNwYWNlKHMpKSB7CisgICAgICAgIG1fdmFsdWVJblNw
ZWNpZmllZFVuaXRzID0gdmFsdWU7CisgICAgICAgIG1fdW5pdCA9IE1hdGhNTExlbmd0aDo6TXU7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTdHJpbmdCdWlsZGVyIG51bWJlcjsKKyAg
ICBTdHJpbmcgdW5pdDsKKworICAgIC8vIFRoaXMgdmVyaWZpZXMgd2hldGhlciB0aGUgbmVnYXRp
dmUgc2lnbiBpcyB0aGVyZS4KKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBVQ2hhciBjID0gc1sw
XTsKKyAgICBpZiAoYyA9PSAnLScpIHsKKyAgICAgICAgbnVtYmVyLmFwcGVuZChjKTsKKyAgICAg
ICAgaSsrOworICAgIH0KKworICAgIC8vIFRoaXMgZ2F0aGVycyB1cCBjaGFyYWN0ZXJzIHRoYXQg
bWFrZSB1cCB0aGUgbnVtYmVyLgorICAgIGJvb2wgZ290RG90ID0gZmFsc2U7CisgICAgZm9yICgg
OyBpIDwgcy5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGMgPSBzW2ldOworICAgICAgICAvLyBU
aGUgc3RyaW5nIGlzIGludmFsaWQgaWYgaXQgY29udGFpbnMgdHdvIGRvdHMuCisgICAgICAgIGlm
IChnb3REb3QgJiYgYyA9PSAnLicpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChj
ID09ICcuJykKKyAgICAgICAgICAgIGdvdERvdCA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKCFp
c0FTQ0lJRGlnaXQoYykpIHsKKyAgICAgICAgICAgIHVuaXQgPSBzLnN1YnN0cmluZyhpLCBzLmxl
bmd0aCgpIC0gaSk7CisgICAgICAgICAgICAvLyBTb21lIGF1dGhvcnMgbGVhdmUgYmxhbmtzIGJl
Zm9yZSB0aGUgdW5pdCwgYnV0IHRoYXQgc2hvdWxkbid0CisgICAgICAgICAgICAvLyBiZSBhbGxv
d2VkLCBzbyBkb24ndCBzaW1wbGlmeVdoaXRlc3BhY2Ugb24gJ3VuaXQnLgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbnVtYmVyLmFwcGVuZChjKTsKKyAgICB9CisKKyAg
ICAvLyBDb252ZXJ0IG51bWJlciB0byBmbG9hdGluZyBwb2ludAorICAgIGJvb2wgb2s7CisgICAg
ZmxvYXQgY29udmVydGVkTnVtYmVyID0gbnVtYmVyLnRvU3RyaW5nKCkudG9GbG9hdCgmb2spOwor
ICAgIGlmICghb2spCisgICAgICAgIHJldHVybjsKKworICAgIE1hdGhNTExlbmd0aFR5cGUgdHlw
ZSA9IHN0cmluZ1RvTGVuZ3RoVHlwZSh1bml0KTsKKyAgICBpZiAodHlwZSA9PSBNYXRoTUxMZW5n
dGg6OlVua25vd24pCisgICAgICAgIHJldHVybjsKKyAgICBtX3VuaXQgPSB0eXBlOworICAgIG1f
dmFsdWVJblNwZWNpZmllZFVuaXRzID0gY29udmVydGVkTnVtYmVyOworICAgIHJldHVybjsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTExlbmd0aC5oIGIv
U291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTExlbmd0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmYTFkYmIy
N2Y1NjE4OTllZmMyMDk0MTQzNjc4Y2UwMDhiOTM3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MTGVuZ3RoLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIE1hdGhNTExlbmd0aF9oCisjZGVmaW5lIE1hdGhNTExlbmd0aF9oCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMYXlv
dXRVbml0OworY2xhc3MgUmVuZGVyU3R5bGU7CisKK2NsYXNzIE1hdGhNTExlbmd0aCB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTWF0aE1MTGVuZ3RoKGNvbnN0
IFN0cmluZyYgdmFsdWVBc1N0cmluZyk7CisgICAgYm9vbCB0b1VzZXJVbml0cyhjb25zdCBSZW5k
ZXJTdHlsZSYsIExheW91dFVuaXQmIGxlbmd0aFZhbHVlLCBib29sIGFsbG93TmVnYXRpdmVWYWx1
ZXMgPSB0cnVlKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBlbnVtIE1hdGhNTExlbmd0aFR5cGUg
eworICAgICAgICBVbmtub3duLAorICAgICAgICBVbml0TGVzcywKKyAgICAgICAgUGVyY2VudGFn
ZSwKKyAgICAgICAgRW0sCisgICAgICAgIEV4LAorICAgICAgICBQeCwKKyAgICAgICAgQ20sCisg
ICAgICAgIE1tLAorICAgICAgICBJbiwKKyAgICAgICAgUHQsCisgICAgICAgIFBjLAorICAgICAg
ICBNdSAvLyBUaGlzIGlzIFRlWCdzIE1hdGggVW5pdCAoMSBtdSA9IDEvMTggZW0pLgorICAgIH07
CisgICAgTWF0aE1MTGVuZ3RoVHlwZSBzdHJpbmdUb0xlbmd0aFR5cGUoY29uc3QgU3RyaW5nJik7
CisgICAgdm9pZCBzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisgICAgZmxvYXQg
bV92YWx1ZUluU3BlY2lmaWVkVW5pdHM7CisgICAgTWF0aE1MTGVuZ3RoVHlwZSBtX3VuaXQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBNYXRoTUxMZW5ndGhfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxC
bG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJs
b2NrLmNwcAppbmRleCBlMzc1YzlhMmI1MGNkM2ZjNGFhNmYzNzI0NjIyYmJmOTM0YTBjYTc4Li5m
ZTc1ZDJmYzhiMjY1YzFmNmZhODg1ZGY1ODIzYjVlNmZjMzJiOWIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcApAQCAt
MzEsOSArMzEsOSBAQAogI2luY2x1ZGUgIlJlbmRlck1hdGhNTEJsb2NrLmgiCiAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJNYXRoTUxMZW5ndGguaCIKICNpbmNsdWRl
ICJNYXRoTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBFTkFCTEUoREVCVUdfTUFUSF9MQVlPVVQpCiAj
aW5jbHVkZSAiUGFpbnRJbmZvLmgiCkBAIC0xMzQsMTc3ICsxMzQsOSBAQCB2b2lkIFJlbmRlck1h
dGhNTEJsb2NrOjpwYWludChQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCkKIH0KICNlbmRpZiAvLyBFTkFCTEUoREVCVUdfTUFUSF9MQVlPVVQpCiAKLS8vCi0v
LyBUaGUgTWF0aE1MIHNwZWNpZmljYXRpb24gc2F5czoKLS8vIChodHRwOi8vd3d3LnczLm9yZy9U
Ui9NYXRoTUwvY2hhcHRlcjIuaHRtbCNmdW5kLnVuaXRzKQotLy8KLS8vICJNb3N0IHByZXNlbnRh
dGlvbiBlbGVtZW50cyBoYXZlIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgdmFsdWVzIHJlcHJlc2Vu
dGluZwotLy8gbGVuZ3RocyB0byBiZSB1c2VkIGZvciBzaXplLCBzcGFjaW5nIG9yIHNpbWlsYXIg
cHJvcGVydGllcy4gVGhlIHN5bnRheCBvZiBhCi0vLyBsZW5ndGggaXMgc3BlY2lmaWVkIGFzCi0v
LwotLy8gbnVtYmVyIHwgbnVtYmVyIHVuaXQgfCBuYW1lZHNwYWNlCi0vLwotLy8gVGhlcmUgc2hv
dWxkIGJlIG5vIHNwYWNlIGJldHdlZW4gdGhlIG51bWJlciBhbmQgdGhlIHVuaXQgb2YgYSBsZW5n
dGguIgotLy8gCi0vLyAiQSB0cmFpbGluZyAnJScgcmVwcmVzZW50cyBhIHBlcmNlbnQgb2YgdGhl
IGRlZmF1bHQgdmFsdWUuIFRoZSBkZWZhdWx0Ci0vLyB2YWx1ZSwgb3IgaG93IGl0IGlzIG9idGFp
bmVkLCBpcyBsaXN0ZWQgaW4gdGhlIHRhYmxlIG9mIGF0dHJpYnV0ZXMgZm9yIGVhY2gKLS8vIGVs
ZW1lbnQuIFsuLi5dIEEgbnVtYmVyIHdpdGhvdXQgYSB1bml0IGlzIGludGVwcmV0ZWQgYXMgYSBt
dWx0aXBsZSBvZiB0aGUKLS8vIGRlZmF1bHQgdmFsdWUuIgotLy8KLS8vICJUaGUgcG9zc2libGUg
dW5pdHMgaW4gTWF0aE1MIGFyZToKLS8vICAKLS8vIFVuaXQgRGVzY3JpcHRpb24KLS8vIGVtICAg
YW4gZW0gKGZvbnQtcmVsYXRpdmUgdW5pdCB0cmFkaXRpb25hbGx5IHVzZWQgZm9yIGhvcml6b250
YWwgbGVuZ3RocykKLS8vIGV4ICAgYW4gZXggKGZvbnQtcmVsYXRpdmUgdW5pdCB0cmFkaXRpb25h
bGx5IHVzZWQgZm9yIHZlcnRpY2FsIGxlbmd0aHMpCi0vLyBweCAgIHBpeGVscywgb3Igc2l6ZSBv
ZiBhIHBpeGVsIGluIHRoZSBjdXJyZW50IGRpc3BsYXkKLS8vIGluICAgaW5jaGVzICgxIGluY2gg
PSAyLjU0IGNlbnRpbWV0ZXJzKQotLy8gY20gICBjZW50aW1ldGVycwotLy8gbW0gICBtaWxsaW1l
dGVycwotLy8gcHQgICBwb2ludHMgKDEgcG9pbnQgPSAxLzcyIGluY2gpCi0vLyBwYyAgIHBpY2Fz
ICgxIHBpY2EgPSAxMiBwb2ludHMpCi0vLyAlICAgIHBlcmNlbnRhZ2Ugb2YgZGVmYXVsdCB2YWx1
ZSIKLS8vCi0vLyBUaGUgbnVtYmVycyBhcmUgZGVmaW5lZCB0aGF0IHdheToKLS8vIC0gdW5zaWdu
ZWQtbnVtYmVyOiAiYSBzdHJpbmcgb2YgZGVjaW1hbCBkaWdpdHMgd2l0aCB1cCB0byBvbmUgZGVj
aW1hbCBwb2ludAotLy8gICAoVSswMDJFKSwgcmVwcmVzZW50aW5nIGEgbm9uLW5lZ2F0aXZlIHRl
cm1pbmF0aW5nIGRlY2ltYWwgbnVtYmVyIChhIHR5cGUgb2YKLS8vICAgcmF0aW9uYWwgbnVtYmVy
KSIKLS8vIC0gbnVtYmVyOiAiYW4gb3B0aW9uYWwgcHJlZml4IG9mICctJyAoVSswMDJEKSwgZm9s
bG93ZWQgYnkgYW4gdW5zaWduZWQKLS8vICAgbnVtYmVyLCByZXByZXNlbnRpbmcgYSB0ZXJtaW5h
dGluZyBkZWNpbWFsIG51bWJlciAoYSB0eXBlIG9mIHJhdGlvbmFsCi0vLyAgIG51bWJlcikiCi0v
LwogYm9vbCBwYXJzZU1hdGhNTExlbmd0aChjb25zdCBTdHJpbmcmIHN0cmluZywgTGF5b3V0VW5p
dCYgbGVuZ3RoVmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBhbGxvd05lZ2F0
aXZlKQogewotICAgIFN0cmluZyBzID0gc3RyaW5nLnNpbXBsaWZ5V2hpdGVTcGFjZSgpOwotCi0g
ICAgaW50IHN0cmluZ0xlbmd0aCA9IHMubGVuZ3RoKCk7Ci0gICAgaWYgKCFzdHJpbmdMZW5ndGgp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChwYXJzZU1hdGhNTE5hbWVkU3BhY2Uo
cywgbGVuZ3RoVmFsdWUsIHN0eWxlLCBhbGxvd05lZ2F0aXZlKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIG51bWJlcjsKLSAgICBTdHJpbmcgdW5pdDsKLQotICAg
IC8vIFRoaXMgdmVyaWZpZXMgd2hldGhlciB0aGUgbmVnYXRpdmUgc2lnbiBpcyB0aGVyZS4KLSAg
ICBpbnQgaSA9IDA7Ci0gICAgVUNoYXIgYyA9IHNbMF07Ci0gICAgaWYgKGMgPT0gJy0nKSB7Ci0g
ICAgICAgIG51bWJlci5hcHBlbmQoYyk7Ci0gICAgICAgIGkrKzsKLSAgICB9Ci0KLSAgICAvLyBU
aGlzIGdhdGhlcnMgdXAgY2hhcmFjdGVycyB0aGF0IG1ha2UgdXAgdGhlIG51bWJlci4KLSAgICBi
b29sIGdvdERvdCA9IGZhbHNlOwotICAgIGZvciAoIDsgaSA8IHN0cmluZ0xlbmd0aDsgaSsrKSB7
Ci0gICAgICAgIGMgPSBzW2ldOwotICAgICAgICAvLyBUaGUgc3RyaW5nIGlzIGludmFsaWQgaWYg
aXQgY29udGFpbnMgdHdvIGRvdHMuCi0gICAgICAgIGlmIChnb3REb3QgJiYgYyA9PSAnLicpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChjID09ICcuJykKLSAgICAgICAg
ICAgIGdvdERvdCA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKCFpc0FTQ0lJRGlnaXQoYykpIHsK
LSAgICAgICAgICAgIHVuaXQgPSBzLnN1YnN0cmluZyhpLCBzdHJpbmdMZW5ndGggLSBpKTsKLSAg
ICAgICAgICAgIC8vIFNvbWUgYXV0aG9ycyBsZWF2ZSBibGFua3MgYmVmb3JlIHRoZSB1bml0LCBi
dXQgdGhhdCBzaG91bGRuJ3QKLSAgICAgICAgICAgIC8vIGJlIGFsbG93ZWQsIHNvIGRvbid0IHNp
bXBsaWZ5V2hpdGVzcGFjZSBvbiAndW5pdCcuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBudW1iZXIuYXBwZW5kKGMpOwotICAgIH0KLQotICAgIC8vIENvbnZlcnQgbnVt
YmVyIHRvIGZsb2F0aW5nIHBvaW50Ci0gICAgYm9vbCBvazsKLSAgICBmbG9hdCBmbG9hdFZhbHVl
ID0gbnVtYmVyLnRvU3RyaW5nKCkudG9GbG9hdCgmb2spOwotICAgIGlmICghb2spCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoZmxvYXRWYWx1ZSA8IDAgJiYgIWFsbG93TmVnYXRpdmUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh1bml0LmlzRW1wdHkoKSkgewotICAg
ICAgICAvLyBubyBleHBsaWNpdCB1bml0LCB0aGlzIGlzIGEgbnVtYmVyIHRoYXQgd2lsbCBhY3Qg
YXMgYSBtdWx0aXBsaWVyCi0gICAgICAgIGxlbmd0aFZhbHVlICo9IGZsb2F0VmFsdWU7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAodW5pdCA9PSAiJSIpIHsKLSAgICAgICAg
bGVuZ3RoVmFsdWUgKj0gZmxvYXRWYWx1ZSAvIDEwMDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIGlmICh1bml0ID09ICJlbSIpIHsKLSAgICAgICAgbGVuZ3RoVmFsdWUgPSBmbG9h
dFZhbHVlICogc3R5bGUtPmZvbnRDYXNjYWRlKCkuc2l6ZSgpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgaWYgKHVuaXQgPT0gImV4IikgewotICAgICAgICBsZW5ndGhWYWx1ZSA9
IGZsb2F0VmFsdWUgKiBzdHlsZS0+Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAodW5pdCA9PSAicHgiKSB7Ci0gICAgICAgIGxlbmd0
aFZhbHVlID0gZmxvYXRWYWx1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlm
ICh1bml0ID09ICJwdCIpIHsKLSAgICAgICAgbGVuZ3RoVmFsdWUgPSA0ICogKGZsb2F0VmFsdWUg
LyAzKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICh1bml0ID09ICJwYyIp
IHsKLSAgICAgICAgbGVuZ3RoVmFsdWUgPSAxNiAqIGZsb2F0VmFsdWU7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICBpZiAodW5pdCA9PSAiaW4iKSB7Ci0gICAgICAgIGxlbmd0aFZh
bHVlID0gOTYgKiBmbG9hdFZhbHVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
aWYgKHVuaXQgPT0gImNtIikgewotICAgICAgICBsZW5ndGhWYWx1ZSA9IDk2ICogKGZsb2F0VmFs
dWUgLyAyLjU0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICh1bml0ID09
ICJtbSIpIHsKLSAgICAgICAgbGVuZ3RoVmFsdWUgPSA5NiAqIChmbG9hdFZhbHVlIC8gMjUuNCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIHVuZXhwZWN0ZWQgdW5pdAot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBwYXJzZU1hdGhNTE5hbWVkU3BhY2UoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIExheW91dFVuaXQmIGxlbmd0aFZhbHVlLCBjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUsIGJvb2wgYWxsb3dOZWdhdGl2ZSkKLXsKLSAgICBmbG9hdCBsZW5ndGggPSAwOwot
ICAgIC8vIFNlZSBpZiBpdCBpcyBvbmUgb2YgdGhlIG5hbWVkc3BhY2VzIChyYW5naW5nIC03LzE4
ZW0sIC02LzE4LCAuLi4gNy8xOGVtKQotICAgIGlmIChzdHJpbmcgPT0gInZlcnl2ZXJ5dGhpbm1h
dGhzcGFjZSIpCi0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgZWxzZSBpZiAoc3RyaW5nID09ICJ2
ZXJ5dGhpbm1hdGhzcGFjZSIpCi0gICAgICAgIGxlbmd0aCA9IDI7Ci0gICAgZWxzZSBpZiAoc3Ry
aW5nID09ICJ0aGlubWF0aHNwYWNlIikKLSAgICAgICAgbGVuZ3RoID0gMzsKLSAgICBlbHNlIGlm
IChzdHJpbmcgPT0gIm1lZGl1bW1hdGhzcGFjZSIpCi0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAg
ZWxzZSBpZiAoc3RyaW5nID09ICJ0aGlja21hdGhzcGFjZSIpCi0gICAgICAgIGxlbmd0aCA9IDU7
Ci0gICAgZWxzZSBpZiAoc3RyaW5nID09ICJ2ZXJ5dGhpY2ttYXRoc3BhY2UiKQotICAgICAgICBs
ZW5ndGggPSA2OwotICAgIGVsc2UgaWYgKHN0cmluZyA9PSAidmVyeXZlcnl0aGlja21hdGhzcGFj
ZSIpCi0gICAgICAgIGxlbmd0aCA9IDc7Ci0gICAgZWxzZSBpZiAoYWxsb3dOZWdhdGl2ZSkgewot
ICAgICAgICBpZiAoc3RyaW5nID09ICJuZWdhdGl2ZXZlcnl2ZXJ5dGhpbm1hdGhzcGFjZSIpCi0g
ICAgICAgICAgICBsZW5ndGggPSAtMTsKLSAgICAgICAgZWxzZSBpZiAoc3RyaW5nID09ICJuZWdh
dGl2ZXZlcnl0aGlubWF0aHNwYWNlIikKLSAgICAgICAgICAgIGxlbmd0aCA9IC0yOwotICAgICAg
ICBlbHNlIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZldGhpbm1hdGhzcGFjZSIpCi0gICAgICAgICAg
ICBsZW5ndGggPSAtMzsKLSAgICAgICAgZWxzZSBpZiAoc3RyaW5nID09ICJuZWdhdGl2ZW1lZGl1
bW1hdGhzcGFjZSIpCi0gICAgICAgICAgICBsZW5ndGggPSAtNDsKLSAgICAgICAgZWxzZSBpZiAo
c3RyaW5nID09ICJuZWdhdGl2ZXRoaWNrbWF0aHNwYWNlIikKLSAgICAgICAgICAgIGxlbmd0aCA9
IC01OwotICAgICAgICBlbHNlIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZldmVyeXRoaWNrbWF0aHNw
YWNlIikKLSAgICAgICAgICAgIGxlbmd0aCA9IC02OwotICAgICAgICBlbHNlIGlmIChzdHJpbmcg
PT0gIm5lZ2F0aXZldmVyeXZlcnl0aGlja21hdGhzcGFjZSIpCi0gICAgICAgICAgICBsZW5ndGgg
PSAtNzsgICAgICAgIAotICAgIH0KLSAgICBpZiAobGVuZ3RoKSB7Ci0gICAgICAgIGxlbmd0aFZh
bHVlID0gbGVuZ3RoICogc3R5bGUtPmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIE1hdGhN
TExlbmd0aChzdHJpbmcpLnRvVXNlclVuaXRzKCpzdHlsZSwgbGVuZ3RoVmFsdWUsIGFsbG93TmVn
YXRpdmUpOwogfQogCiBPcHRpb25hbDxpbnQ+IFJlbmRlck1hdGhNTFRhYmxlOjpmaXJzdExpbmVC
YXNlbGluZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTEJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEJsb2NrLmgKaW5kZXggMWYyZThhMzc2ODNhMWRiNWFhZGZkZmIzOGEzNzQz
NThhNWVkMmY4My4uZDUxNWVkMTlhNGI2NTA2NjVmODQ0Y2I3NWQxZDEzNTFjOTc0NjM4NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9j
ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxv
Y2suaApAQCAtOTQsNyArOTQsNiBAQCBwcml2YXRlOgogCiAvLyBQYXJzaW5nIGZ1bmN0aW9ucyBm
b3IgTWF0aE1MIExlbmd0aCB2YWx1ZXMKIGJvb2wgcGFyc2VNYXRoTUxMZW5ndGgoY29uc3QgU3Ry
aW5nJiwgTGF5b3V0VW5pdCYsIGNvbnN0IFJlbmRlclN0eWxlKiwgYm9vbCBhbGxvd05lZ2F0aXZl
ID0gdHJ1ZSk7Ci1ib29sIHBhcnNlTWF0aE1MTmFtZWRTcGFjZShjb25zdCBTdHJpbmcmLCBMYXlv
dXRVbml0JiwgY29uc3QgUmVuZGVyU3R5bGUqLCBib29sIGFsbG93TmVnYXRpdmUgPSB0cnVlKTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279018</attachid>
            <date>2016-05-16 08:17:56 -0700</date>
            <delta_ts>2016-05-17 04:08:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156792-20160516171850.patch</filename>
            <type>text/plain</type>
            <size>15252</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwOTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFjYjY3MmJkNDNkYjYy
Y2RjOTk3NTY1MDFjNTA2NmQ1MDhlNmY3YS4uMzFkZWUzZWRkNjg1ODFhN2FmOTQ4ZGM4MWI4MGRh
NzMyNTZmZDJmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE2LTA1LTE2ICBGcmVk
ZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLm9yZz4KKworICAgICAgICBDcmVhdGUgYSBNYXRoTUxM
ZW5ndGggc3RydWN0IHRvIGhhbmRsZSB0aGUgcGFyc2luZyBvZiBNYXRoTUwgbGVuZ3RoLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NzkyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgaW50cm9kdWNl
IGEgc3RydWN0dXJlIGZvciBNYXRoTUwgbGVuZ3RocyB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUg
ZnV0dXJlIHRvIHN0b3JlIHRoZQorICAgICAgICBwYXJzZWQgdmFsdWVzIGluIHRoZSBNYXRoRWxl
bWVudCBjbGFzcy4gV2UgYWxzbyByZXdyaXRlIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIGZvciBNYXRo
TUwKKyAgICAgICAgbGVuZ3RocyBpbiBvcmRlciB0byBpbXByb3ZlIGVmZmljaWVuY3kgYW5kIGNv
ZGUgcmV1c2UuIFRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgaW50byB0aGUKKyAgICAgICAgTWF0aEVs
ZW1lbnQgY2xhc3MgYW5kIG9ubHkgdGhlIGNvbnZlcnNpb24gdG8gTGF5b3V0VW5pdCByZW1haW5z
IGluIHRoZSByZW5kZXJlciBjbGFzc2VzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYWxyZWFk
eSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogbWF0aG1sL01hdGhNTEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VOYW1lZFNwYWNlKTogSGVscGVyIGZ1
bmN0aW9uIHRvIHBhcnNlIGEgbmFtZWQgc3BhY2UuCisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxF
bGVtZW50OjpwYXJzZU1hdGhNTExlbmd0aCk6IFBhcnNpbmcgZnVuY3Rpb24gZm9yIE1hdGhNTCBs
ZW5ndGhzLgorICAgICAgICAqIG1hdGhtbC9NYXRoTUxFbGVtZW50Lmg6IERlY2xhcmUgbmV3IGZ1
bmN0aW9uIGFuZCBzdHJ1Y3R1cmUgdG8gaGFuZGxlIE1hdGhNTCBsZW5ndGhzLgorICAgICAgICAq
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VNYXRoTUxMZW5ndGgpOiBSZW1vdmUgdGhlIG9sZCBwYXJzaW5nIGNvZGUgYW5kIHVz
ZSBNYXRoTUxFbGVtZW50OjpwYXJzZU1hdGhNTExlbmd0aCBpbnN0ZWFkLgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VNYXRoTUxOYW1lZFNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmg6IFJlbW92ZSB1bnVzZWQgZnVuY3Rpb24uCisK
IDIwMTYtMDUtMTYgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFtDYWlyb10gR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIHNob3VsZCB1c2Ug
dGhlIGNvcnJlY3Qgc2l6ZSBmb3IgY29weWluZyBub24taW1hZ2Ugc3VyZmFjZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmNwcAppbmRleCAzMWJhYmMzOWExYzZkYjZhNjk1Y2Iw
MGVlMTEwMDM1MTEyMDgwY2ZmLi4wY2I5MmZkMGZlOTY1MDBkZTRlMjg4ZDJkZDJlYjBjYmM1OWY1
YzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuY3BwCkBAIC0zMDIsNiAr
MzAyLDEwMCBAQCB2b2lkIE1hdGhNTEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaQogICAgIFN0eWxlZEVsZW1lbnQ6OmF0
dHJpYnV0ZUNoYW5nZWQobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCByZWFzb24pOwogfQogCitz
dGF0aWMgaW5saW5lIHVuc2lnbmVkIHBhcnNlTmFtZWRTcGFjZShjb25zdCBTdHJpbmdWaWV3JiBz
dHJpbmcpCit7CisgICAgaWYgKHN0cmluZyA9PSAidmVyeXZlcnl0aGlubWF0aHNwYWNlIikKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgaWYgKHN0cmluZyA9PSAidmVyeXRoaW5tYXRoc3BhY2UiKQor
ICAgICAgICByZXR1cm4gMjsKKyAgICBpZiAoc3RyaW5nID09ICJ0aGlubWF0aHNwYWNlIikKKyAg
ICAgICAgcmV0dXJuIDM7CisgICAgaWYgKHN0cmluZyA9PSAibWVkaXVtbWF0aHNwYWNlIikKKyAg
ICAgICAgcmV0dXJuIDQ7CisgICAgaWYgKHN0cmluZyA9PSAidGhpY2ttYXRoc3BhY2UiKQorICAg
ICAgICByZXR1cm4gNTsKKyAgICBpZiAoc3RyaW5nID09ICJ2ZXJ5dGhpY2ttYXRoc3BhY2UiKQor
ICAgICAgICByZXR1cm4gNjsKKyAgICBpZiAoc3RyaW5nID09ICJ2ZXJ5dmVyeXRoaWNrbWF0aHNw
YWNlIikKKyAgICAgICAgcmV0dXJuIDc7CisgICAgcmV0dXJuIDA7Cit9CisKK01hdGhNTEVsZW1l
bnQ6Okxlbmd0aCBNYXRoTUxFbGVtZW50OjpwYXJzZU1hdGhNTExlbmd0aChjb25zdCBTdHJpbmcm
IHN0cmluZykKK3sKKyAgICBMZW5ndGggbGVuZ3RoOworCisgICAgLy8gVGhlIHJlZ3VsYXIgZXhw
cmVzc2lvbiBmcm9tIHRoZSBNYXRoTUwgUmVsYXggTkcgc2NoZW1hIGlzIGFzIGZvbGxvd3M6Cisg
ICAgLy8KKyAgICAvLyAgIHBhdHRlcm4gPSAnXHMqKCgtP1swLTldKihbMC05XVwuP3xcLlswLTld
KVswLTldKihlW214XXxpbnxjbXxtbXxwW3h0Y118JSk/KXwobmVnYXRpdmUpPygodmVyeSl7MCwy
fXRoaShufGNrKXxtZWRpdW0pbWF0aHNwYWNlKVxzKicKKyAgICAvLworICAgIC8vIFdlIGRvIG5v
dCBwZXJmb3JtIGEgc3RyaWN0IHZlcmlmaWNhdGlvbiBvZiB0aGUgc3ludGF4IG9mIHdoaXRlc3Bh
Y2VzIGFuZCBudW1iZXIuCisgICAgLy8gSW5zdGVhZCwgd2UganVzdCB1c2UgaXNIVE1MU3BhY2Ug
YW5kIHRvRmxvYXQgdG8gcGFyc2UgdGhlc2UgcGFydHMuCisKKyAgICAvLyBXZSBmaXJzdCBza2lw
IHdoaXRlc3BhY2UgZnJvbSBib3RoIGVuZHMgb2YgdGhlIHN0cmluZy4KKyAgICB1bnNpZ25lZCBz
dGFydCA9IDAsIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICB3aGlsZSAoc3Ry
aW5nTGVuZ3RoID4gMCAmJiBpc0hUTUxTcGFjZShzdHJpbmdbc3RhcnRdKSkgeworICAgICAgICBz
dGFydCsrOworICAgICAgICBzdHJpbmdMZW5ndGgtLTsKKyAgICB9CisgICAgd2hpbGUgKHN0cmlu
Z0xlbmd0aCA+IDAgJiYgaXNIVE1MU3BhY2Uoc3RyaW5nW3N0YXJ0ICsgc3RyaW5nTGVuZ3RoIC0g
MV0pKQorICAgICAgICBzdHJpbmdMZW5ndGgtLTsKKyAgICBpZiAoIXN0cmluZ0xlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIGxlbmd0aDsKKworICAgIC8vIFdlIGNvbnNpZGVyIHRoZSBtb3N0IHR5cGlj
YWwgY2FzZTogYSBudW1iZXIgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgdW5pdC4KKyAgICBVQ2hh
ciBmaXJzdENoYXIgPSBzdHJpbmdbc3RhcnRdOworICAgIGlmIChpc0FTQ0lJRGlnaXQoZmlyc3RD
aGFyKSB8fCBmaXJzdENoYXIgPT0gJy0nIHx8IGZpcnN0Q2hhciA9PSAnLicpIHsKKyAgICAgICAg
TGVuZ3RoVHlwZSBsZW5ndGhUeXBlID0gTGVuZ3RoVHlwZTo6VW5pdExlc3M7CisgICAgICAgIFVD
aGFyIGxhc3RDaGFyID0gc3RyaW5nW3N0YXJ0ICsgc3RyaW5nTGVuZ3RoIC0gMV07CisgICAgICAg
IGlmIChsYXN0Q2hhciA9PSAnJScpIHsKKyAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5ndGhU
eXBlOjpQZXJjZW50YWdlOworICAgICAgICAgICAgc3RyaW5nTGVuZ3RoLS07CisgICAgICAgIH0g
ZWxzZSBpZiAoc3RyaW5nTGVuZ3RoID49IDIpIHsKKyAgICAgICAgICAgIFVDaGFyIHBlbnVsdGlt
YXRlQ2hhciA9IHN0cmluZ1tzdGFydCArIHN0cmluZ0xlbmd0aCAtIDJdOworICAgICAgICAgICAg
aWYgKHBlbnVsdGltYXRlQ2hhciA9PSAnYycgJiYgbGFzdENoYXIgPT0gJ20nKQorICAgICAgICAg
ICAgICAgIGxlbmd0aFR5cGUgPSBMZW5ndGhUeXBlOjpDbTsKKyAgICAgICAgICAgIGlmIChwZW51
bHRpbWF0ZUNoYXIgPT0gJ2UnICYmIGxhc3RDaGFyID09ICdtJykKKyAgICAgICAgICAgICAgICBs
ZW5ndGhUeXBlID0gTGVuZ3RoVHlwZTo6RW07CisgICAgICAgICAgICBlbHNlIGlmIChwZW51bHRp
bWF0ZUNoYXIgPT0gJ2UnICYmIGxhc3RDaGFyID09ICd4JykKKyAgICAgICAgICAgICAgICBsZW5n
dGhUeXBlID0gTGVuZ3RoVHlwZTo6RXg7CisgICAgICAgICAgICBlbHNlIGlmIChwZW51bHRpbWF0
ZUNoYXIgPT0gJ2knICYmIGxhc3RDaGFyID09ICduJykKKyAgICAgICAgICAgICAgICBsZW5ndGhU
eXBlID0gTGVuZ3RoVHlwZTo6SW47CisgICAgICAgICAgICBlbHNlIGlmIChwZW51bHRpbWF0ZUNo
YXIgPT0gJ20nICYmIGxhc3RDaGFyID09ICdtJykKKyAgICAgICAgICAgICAgICBsZW5ndGhUeXBl
ID0gTGVuZ3RoVHlwZTo6TW07CisgICAgICAgICAgICBlbHNlIGlmIChwZW51bHRpbWF0ZUNoYXIg
PT0gJ3AnICYmIGxhc3RDaGFyID09ICdjJykKKyAgICAgICAgICAgICAgICBsZW5ndGhUeXBlID0g
TGVuZ3RoVHlwZTo6UGM7CisgICAgICAgICAgICBlbHNlIGlmIChwZW51bHRpbWF0ZUNoYXIgPT0g
J3AnICYmIGxhc3RDaGFyID09ICd0JykKKyAgICAgICAgICAgICAgICBsZW5ndGhUeXBlID0gTGVu
Z3RoVHlwZTo6UHQ7CisgICAgICAgICAgICBlbHNlIGlmIChwZW51bHRpbWF0ZUNoYXIgPT0gJ3An
ICYmIGxhc3RDaGFyID09ICd4JykKKyAgICAgICAgICAgICAgICBsZW5ndGhUeXBlID0gTGVuZ3Ro
VHlwZTo6UHg7CisKKyAgICAgICAgICAgIGlmIChsZW5ndGhUeXBlICE9IExlbmd0aFR5cGU6OlVu
aXRMZXNzKQorICAgICAgICAgICAgICAgIHN0cmluZ0xlbmd0aCAtPSAyOworICAgICAgICB9Cisg
ICAgICAgIGJvb2wgb2s7CisgICAgICAgIGZsb2F0IGxlbmd0aFZhbHVlID0gc3RyaW5nLnN1YnN0
cmluZyhzdGFydCwgc3RyaW5nTGVuZ3RoKS50b0Zsb2F0KCZvayk7CisgICAgICAgIGlmIChvaykg
eworICAgICAgICAgICAgbGVuZ3RoLnR5cGUgPSBsZW5ndGhUeXBlOworICAgICAgICAgICAgbGVu
Z3RoLnZhbHVlID0gbGVuZ3RoVmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxlbmd0
aDsKKyAgICB9CisKKyAgICAvLyBPdGhlcndpc2UsIHdlIHRyeSBhbmQgcGFyc2UgYSBuYW1lZCBz
cGFjZS4KKyAgICBib29sIG5lZ2F0aXZlID0gc3RyaW5nLnN0YXJ0c1dpdGgoIm5lZ2F0aXZlIik7
CisgICAgaWYgKG5lZ2F0aXZlKSB7CisgICAgICAgIHN0YXJ0ICs9IDg7CisgICAgICAgIHN0cmlu
Z0xlbmd0aCAtPSA4OworICAgIH0KKyAgICB1bnNpZ25lZCBuYW1lZFNwYWNlVmFsdWUgPSBwYXJz
ZU5hbWVkU3BhY2Uoc3RyaW5nLnN1YnN0cmluZyhzdGFydCwgc3RyaW5nTGVuZ3RoKSk7CisgICAg
aWYgKG5hbWVkU3BhY2VWYWx1ZSkgeworICAgICAgICBsZW5ndGgudHlwZSA9IExlbmd0aFR5cGU6
Ok1hdGhVbml0OworICAgICAgICBsZW5ndGgudmFsdWUgPSBuYW1lZFNwYWNlVmFsdWUgKiAobmVn
YXRpdmUgPyAtMSA6IDEpOworICAgIH0KKyAgICByZXR1cm4gbGVuZ3RoOworfQorCiB9CiAKICNl
bmRpZiAvLyBFTkFCTEUoTUFUSE1MKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWF0aG1s
L01hdGhNTEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmgK
aW5kZXggMmE1YjNlZTA5YjhkNDE4ZDUzZGY2OTVlYTUzNjg4ZDFhNDA0MGUzMS4uOTNmNGNiMGJk
MTU1MjZiNTEyYmMxNTg4MDE4YjYxNjI0MWNmMDNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0
aE1MRWxlbWVudC5oCkBAIC01Niw2ICs1NiwxNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc1Rh
Z05hbWUoY29uc3QgTWF0aE1MUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QgeyByZXR1cm4gaGFz
TG9jYWxOYW1lKG5hbWUubG9jYWxOYW1lKCkpOyB9CiAKKyAgICAvLyBNYXRoTUwgbGVuZ3RocyAo
aHR0cHM6Ly93d3cudzMub3JnL1RSL01hdGhNTDMvY2hhcHRlcjIuaHRtbCNmdW5kLnVuaXRzKQor
ICAgIC8vIFRlWCdzIE1hdGggVW5pdCBpcyB1c2VkIGludGVybmFsbHkgZm9yIG5hbWVkIHNwYWNl
cyAoMSBtdSA9IDEvMTggZW0pLgorICAgIC8vIFVuaXRsZXNzIHZhbHVlcyBhcmUgaW50ZXByZXRl
ZCBhcyBhIG11bHRpcGxlIG9mIGEgcmVmZXJlbmNlIHZhbHVlLgorICAgIGVudW0gY2xhc3MgTGVu
Z3RoVHlwZSB7IENtLCBFbSwgRXgsIEluLCBNYXRoVW5pdCwgTW0sIFBhcnNpbmdGYWlsZWQsIFBj
LCBQZXJjZW50YWdlLCBQdCwgUHgsIFVuaXRMZXNzIH07CisgICAgc3RydWN0IExlbmd0aCB7Cisg
ICAgICAgIExlbmd0aFR5cGUgdHlwZSA9IExlbmd0aFR5cGU6OlBhcnNpbmdGYWlsZWQ7CisgICAg
ICAgIGZsb2F0IHZhbHVlID0gMDsKKyAgICB9OworICAgIHN0YXRpYyBMZW5ndGggcGFyc2VNYXRo
TUxMZW5ndGgoY29uc3QgU3RyaW5nJik7CisKIHByb3RlY3RlZDoKICAgICBNYXRoTUxFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Jik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKaW5k
ZXggZGQ4Nzg0YmQ4M2JjMTc3YWQyZTlmZTlkMzM3MzNmYWFiMzg2NzgzZS4uNTE2NGU3NmE3YmRk
NDMwMjVjMmVlOTNlOTk3NzZkZjg1Mjg1YTcwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKQEAgLTMwLDEwICszMCwx
MSBAQAogCiAjaW5jbHVkZSAiUmVuZGVyTWF0aE1MQmxvY2suaCIKIAorI2luY2x1ZGUgIkNTU0hl
bHBlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk1hdGhNTEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBFTkFCTEUoREVC
VUdfTUFUSF9MQVlPVVQpCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCkBAIC0xMzQsMTc3ICsxMzUs
NTQgQEAgdm9pZCBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERFQlVHX01B
VEhfTEFZT1VUKQogCi0vLwotLy8gVGhlIE1hdGhNTCBzcGVjaWZpY2F0aW9uIHNheXM6Ci0vLyAo
aHR0cDovL3d3dy53My5vcmcvVFIvTWF0aE1ML2NoYXB0ZXIyLmh0bWwjZnVuZC51bml0cykKLS8v
Ci0vLyAiTW9zdCBwcmVzZW50YXRpb24gZWxlbWVudHMgaGF2ZSBhdHRyaWJ1dGVzIHRoYXQgYWNj
ZXB0IHZhbHVlcyByZXByZXNlbnRpbmcKLS8vIGxlbmd0aHMgdG8gYmUgdXNlZCBmb3Igc2l6ZSwg
c3BhY2luZyBvciBzaW1pbGFyIHByb3BlcnRpZXMuIFRoZSBzeW50YXggb2YgYQotLy8gbGVuZ3Ro
IGlzIHNwZWNpZmllZCBhcwotLy8KLS8vIG51bWJlciB8IG51bWJlciB1bml0IHwgbmFtZWRzcGFj
ZQotLy8KLS8vIFRoZXJlIHNob3VsZCBiZSBubyBzcGFjZSBiZXR3ZWVuIHRoZSBudW1iZXIgYW5k
IHRoZSB1bml0IG9mIGEgbGVuZ3RoLiIKLS8vIAotLy8gIkEgdHJhaWxpbmcgJyUnIHJlcHJlc2Vu
dHMgYSBwZXJjZW50IG9mIHRoZSBkZWZhdWx0IHZhbHVlLiBUaGUgZGVmYXVsdAotLy8gdmFsdWUs
IG9yIGhvdyBpdCBpcyBvYnRhaW5lZCwgaXMgbGlzdGVkIGluIHRoZSB0YWJsZSBvZiBhdHRyaWJ1
dGVzIGZvciBlYWNoCi0vLyBlbGVtZW50LiBbLi4uXSBBIG51bWJlciB3aXRob3V0IGEgdW5pdCBp
cyBpbnRlcHJldGVkIGFzIGEgbXVsdGlwbGUgb2YgdGhlCi0vLyBkZWZhdWx0IHZhbHVlLiIKLS8v
Ci0vLyAiVGhlIHBvc3NpYmxlIHVuaXRzIGluIE1hdGhNTCBhcmU6Ci0vLyAgCi0vLyBVbml0IERl
c2NyaXB0aW9uCi0vLyBlbSAgIGFuIGVtIChmb250LXJlbGF0aXZlIHVuaXQgdHJhZGl0aW9uYWxs
eSB1c2VkIGZvciBob3Jpem9udGFsIGxlbmd0aHMpCi0vLyBleCAgIGFuIGV4IChmb250LXJlbGF0
aXZlIHVuaXQgdHJhZGl0aW9uYWxseSB1c2VkIGZvciB2ZXJ0aWNhbCBsZW5ndGhzKQotLy8gcHgg
ICBwaXhlbHMsIG9yIHNpemUgb2YgYSBwaXhlbCBpbiB0aGUgY3VycmVudCBkaXNwbGF5Ci0vLyBp
biAgIGluY2hlcyAoMSBpbmNoID0gMi41NCBjZW50aW1ldGVycykKLS8vIGNtICAgY2VudGltZXRl
cnMKLS8vIG1tICAgbWlsbGltZXRlcnMKLS8vIHB0ICAgcG9pbnRzICgxIHBvaW50ID0gMS83MiBp
bmNoKQotLy8gcGMgICBwaWNhcyAoMSBwaWNhID0gMTIgcG9pbnRzKQotLy8gJSAgICBwZXJjZW50
YWdlIG9mIGRlZmF1bHQgdmFsdWUiCi0vLwotLy8gVGhlIG51bWJlcnMgYXJlIGRlZmluZWQgdGhh
dCB3YXk6Ci0vLyAtIHVuc2lnbmVkLW51bWJlcjogImEgc3RyaW5nIG9mIGRlY2ltYWwgZGlnaXRz
IHdpdGggdXAgdG8gb25lIGRlY2ltYWwgcG9pbnQKLS8vICAgKFUrMDAyRSksIHJlcHJlc2VudGlu
ZyBhIG5vbi1uZWdhdGl2ZSB0ZXJtaW5hdGluZyBkZWNpbWFsIG51bWJlciAoYSB0eXBlIG9mCi0v
LyAgIHJhdGlvbmFsIG51bWJlcikiCi0vLyAtIG51bWJlcjogImFuIG9wdGlvbmFsIHByZWZpeCBv
ZiAnLScgKFUrMDAyRCksIGZvbGxvd2VkIGJ5IGFuIHVuc2lnbmVkCi0vLyAgIG51bWJlciwgcmVw
cmVzZW50aW5nIGEgdGVybWluYXRpbmcgZGVjaW1hbCBudW1iZXIgKGEgdHlwZSBvZiByYXRpb25h
bAotLy8gICBudW1iZXIpIgotLy8KIGJvb2wgcGFyc2VNYXRoTUxMZW5ndGgoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIExheW91dFVuaXQmIGxlbmd0aFZhbHVlLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5
bGUsIGJvb2wgYWxsb3dOZWdhdGl2ZSkKIHsKLSAgICBTdHJpbmcgcyA9IHN0cmluZy5zaW1wbGlm
eVdoaXRlU3BhY2UoKTsKLQotICAgIGludCBzdHJpbmdMZW5ndGggPSBzLmxlbmd0aCgpOwotICAg
IGlmICghc3RyaW5nTGVuZ3RoKQorICAgIE1hdGhNTEVsZW1lbnQ6Okxlbmd0aCBsZW5ndGggPSBN
YXRoTUxFbGVtZW50OjpwYXJzZU1hdGhNTExlbmd0aChzdHJpbmcpOworCisgICAgTGF5b3V0VW5p
dCB2YWx1ZSA9IGxlbmd0aFZhbHVlOworICAgIHN3aXRjaCAobGVuZ3RoLnR5cGUpIHsKKyAgICBj
YXNlIE1hdGhNTEVsZW1lbnQ6Okxlbmd0aFR5cGU6OkNtOgorICAgICAgICB2YWx1ZSA9IGxlbmd0
aC52YWx1ZSAqIGNzc1BpeGVsc1BlckluY2ggLyAyLjU0ZjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBNYXRoTUxFbGVtZW50OjpMZW5ndGhUeXBlOjpFbToKKyAgICAgICAgdmFsdWUgPSBsZW5n
dGgudmFsdWUgKiBzdHlsZS0+Zm9udENhc2NhZGUoKS5zaXplKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6RXg6CisgICAgICAgIHZhbHVlID0g
bGVuZ3RoLnZhbHVlICogc3R5bGUtPmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIE1hdGhNTEVsZW1lbnQ6Okxlbmd0aFR5cGU6OkluOgorICAgICAgICB2
YWx1ZSA9IGxlbmd0aC52YWx1ZSAqIGNzc1BpeGVsc1BlckluY2g7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6TWF0aFVuaXQ6CisgICAgICAgIHZh
bHVlID0gbGVuZ3RoLnZhbHVlICogc3R5bGUtPmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6TW06Cisg
ICAgICAgIHZhbHVlID0gbGVuZ3RoLnZhbHVlICogY3NzUGl4ZWxzUGVySW5jaCAvIDI1LjRmOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIE1hdGhNTEVsZW1lbnQ6Okxlbmd0aFR5cGU6OlBjOgor
ICAgICAgICB2YWx1ZSA9IGxlbmd0aC52YWx1ZSAqIGNzc1BpeGVsc1BlckluY2ggLyA2OworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIE1hdGhNTEVsZW1lbnQ6Okxlbmd0aFR5cGU6OlBlcmNlbnRh
Z2U6CisgICAgICAgIHZhbHVlICo9IGxlbmd0aC52YWx1ZSAvIDEwMDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBNYXRoTUxFbGVtZW50OjpMZW5ndGhUeXBlOjpQdDoKKyAgICAgICAgdmFsdWUg
PSBsZW5ndGgudmFsdWUgKiBjc3NQaXhlbHNQZXJJbmNoIC8gNzI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6UHg6CisgICAgICAgIHZhbHVlID0g
bGVuZ3RoLnZhbHVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1hdGhNTEVsZW1lbnQ6Okxl
bmd0aFR5cGU6OlVuaXRMZXNzOgorICAgICAgICB2YWx1ZSAqPSBsZW5ndGgudmFsdWU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6UGFyc2luZ0Zh
aWxlZDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHBhcnNlTWF0aE1MTmFtZWRT
cGFjZShzLCBsZW5ndGhWYWx1ZSwgc3R5bGUsIGFsbG93TmVnYXRpdmUpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIFN0cmluZ0J1aWxkZXIgbnVtYmVyOwotICAgIFN0cmluZyB1bml0Owot
Ci0gICAgLy8gVGhpcyB2ZXJpZmllcyB3aGV0aGVyIHRoZSBuZWdhdGl2ZSBzaWduIGlzIHRoZXJl
LgotICAgIGludCBpID0gMDsKLSAgICBVQ2hhciBjID0gc1swXTsKLSAgICBpZiAoYyA9PSAnLScp
IHsKLSAgICAgICAgbnVtYmVyLmFwcGVuZChjKTsKLSAgICAgICAgaSsrOwotICAgIH0KLQotICAg
IC8vIFRoaXMgZ2F0aGVycyB1cCBjaGFyYWN0ZXJzIHRoYXQgbWFrZSB1cCB0aGUgbnVtYmVyLgot
ICAgIGJvb2wgZ290RG90ID0gZmFsc2U7Ci0gICAgZm9yICggOyBpIDwgc3RyaW5nTGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgYyA9IHNbaV07Ci0gICAgICAgIC8vIFRoZSBzdHJpbmcgaXMgaW52YWxp
ZCBpZiBpdCBjb250YWlucyB0d28gZG90cy4KLSAgICAgICAgaWYgKGdvdERvdCAmJiBjID09ICcu
JykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGMgPT0gJy4nKQotICAg
ICAgICAgICAgZ290RG90ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIWlzQVNDSUlEaWdpdChj
KSkgewotICAgICAgICAgICAgdW5pdCA9IHMuc3Vic3RyaW5nKGksIHN0cmluZ0xlbmd0aCAtIGkp
OwotICAgICAgICAgICAgLy8gU29tZSBhdXRob3JzIGxlYXZlIGJsYW5rcyBiZWZvcmUgdGhlIHVu
aXQsIGJ1dCB0aGF0IHNob3VsZG4ndAotICAgICAgICAgICAgLy8gYmUgYWxsb3dlZCwgc28gZG9u
J3Qgc2ltcGxpZnlXaGl0ZXNwYWNlIG9uICd1bml0Jy4KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIG51bWJlci5hcHBlbmQoYyk7CiAgICAgfQogCi0gICAgLy8gQ29udmVy
dCBudW1iZXIgdG8gZmxvYXRpbmcgcG9pbnQKLSAgICBib29sIG9rOwotICAgIGZsb2F0IGZsb2F0
VmFsdWUgPSBudW1iZXIudG9TdHJpbmcoKS50b0Zsb2F0KCZvayk7Ci0gICAgaWYgKCFvaykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChmbG9hdFZhbHVlIDwgMCAmJiAhYWxsb3dOZWdh
dGl2ZSkKKyAgICBpZiAoIWFsbG93TmVnYXRpdmUgJiYgdmFsdWUgPCAwKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAodW5pdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gbm8gZXhw
bGljaXQgdW5pdCwgdGhpcyBpcyBhIG51bWJlciB0aGF0IHdpbGwgYWN0IGFzIGEgbXVsdGlwbGll
cgotICAgICAgICBsZW5ndGhWYWx1ZSAqPSBmbG9hdFZhbHVlOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgaWYgKHVuaXQgPT0gIiUiKSB7Ci0gICAgICAgIGxlbmd0aFZhbHVlICo9
IGZsb2F0VmFsdWUgLyAxMDA7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAo
dW5pdCA9PSAiZW0iKSB7Ci0gICAgICAgIGxlbmd0aFZhbHVlID0gZmxvYXRWYWx1ZSAqIHN0eWxl
LT5mb250Q2FzY2FkZSgpLnNpemUoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IGlmICh1bml0ID09ICJleCIpIHsKLSAgICAgICAgbGVuZ3RoVmFsdWUgPSBmbG9hdFZhbHVlICog
c3R5bGUtPmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgaWYgKHVuaXQgPT0gInB4IikgewotICAgICAgICBsZW5ndGhWYWx1ZSA9IGZsb2F0
VmFsdWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAodW5pdCA9PSAicHQi
KSB7Ci0gICAgICAgIGxlbmd0aFZhbHVlID0gNCAqIChmbG9hdFZhbHVlIC8gMyk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAodW5pdCA9PSAicGMiKSB7Ci0gICAgICAgIGxl
bmd0aFZhbHVlID0gMTYgKiBmbG9hdFZhbHVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgaWYgKHVuaXQgPT0gImluIikgewotICAgICAgICBsZW5ndGhWYWx1ZSA9IDk2ICogZmxv
YXRWYWx1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICh1bml0ID09ICJj
bSIpIHsKLSAgICAgICAgbGVuZ3RoVmFsdWUgPSA5NiAqIChmbG9hdFZhbHVlIC8gMi41NCk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAodW5pdCA9PSAibW0iKSB7Ci0gICAg
ICAgIGxlbmd0aFZhbHVlID0gOTYgKiAoZmxvYXRWYWx1ZSAvIDI1LjQpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyB1bmV4cGVjdGVkIHVuaXQKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgcGFyc2VNYXRoTUxOYW1lZFNwYWNlKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBMYXlvdXRVbml0JiBsZW5ndGhWYWx1ZSwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBib29s
IGFsbG93TmVnYXRpdmUpCi17Ci0gICAgZmxvYXQgbGVuZ3RoID0gMDsKLSAgICAvLyBTZWUgaWYg
aXQgaXMgb25lIG9mIHRoZSBuYW1lZHNwYWNlcyAocmFuZ2luZyAtNy8xOGVtLCAtNi8xOCwgLi4u
IDcvMThlbSkKLSAgICBpZiAoc3RyaW5nID09ICJ2ZXJ5dmVyeXRoaW5tYXRoc3BhY2UiKQotICAg
ICAgICBsZW5ndGggPSAxOwotICAgIGVsc2UgaWYgKHN0cmluZyA9PSAidmVyeXRoaW5tYXRoc3Bh
Y2UiKQotICAgICAgICBsZW5ndGggPSAyOwotICAgIGVsc2UgaWYgKHN0cmluZyA9PSAidGhpbm1h
dGhzcGFjZSIpCi0gICAgICAgIGxlbmd0aCA9IDM7Ci0gICAgZWxzZSBpZiAoc3RyaW5nID09ICJt
ZWRpdW1tYXRoc3BhY2UiKQotICAgICAgICBsZW5ndGggPSA0OwotICAgIGVsc2UgaWYgKHN0cmlu
ZyA9PSAidGhpY2ttYXRoc3BhY2UiKQotICAgICAgICBsZW5ndGggPSA1OwotICAgIGVsc2UgaWYg
KHN0cmluZyA9PSAidmVyeXRoaWNrbWF0aHNwYWNlIikKLSAgICAgICAgbGVuZ3RoID0gNjsKLSAg
ICBlbHNlIGlmIChzdHJpbmcgPT0gInZlcnl2ZXJ5dGhpY2ttYXRoc3BhY2UiKQotICAgICAgICBs
ZW5ndGggPSA3OwotICAgIGVsc2UgaWYgKGFsbG93TmVnYXRpdmUpIHsKLSAgICAgICAgaWYgKHN0
cmluZyA9PSAibmVnYXRpdmV2ZXJ5dmVyeXRoaW5tYXRoc3BhY2UiKQotICAgICAgICAgICAgbGVu
Z3RoID0gLTE7Ci0gICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PSAibmVnYXRpdmV2ZXJ5dGhpbm1h
dGhzcGFjZSIpCi0gICAgICAgICAgICBsZW5ndGggPSAtMjsKLSAgICAgICAgZWxzZSBpZiAoc3Ry
aW5nID09ICJuZWdhdGl2ZXRoaW5tYXRoc3BhY2UiKQotICAgICAgICAgICAgbGVuZ3RoID0gLTM7
Ci0gICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PSAibmVnYXRpdmVtZWRpdW1tYXRoc3BhY2UiKQot
ICAgICAgICAgICAgbGVuZ3RoID0gLTQ7Ci0gICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PSAibmVn
YXRpdmV0aGlja21hdGhzcGFjZSIpCi0gICAgICAgICAgICBsZW5ndGggPSAtNTsKLSAgICAgICAg
ZWxzZSBpZiAoc3RyaW5nID09ICJuZWdhdGl2ZXZlcnl0aGlja21hdGhzcGFjZSIpCi0gICAgICAg
ICAgICBsZW5ndGggPSAtNjsKLSAgICAgICAgZWxzZSBpZiAoc3RyaW5nID09ICJuZWdhdGl2ZXZl
cnl2ZXJ5dGhpY2ttYXRoc3BhY2UiKQotICAgICAgICAgICAgbGVuZ3RoID0gLTc7ICAgICAgICAK
LSAgICB9Ci0gICAgaWYgKGxlbmd0aCkgewotICAgICAgICBsZW5ndGhWYWx1ZSA9IGxlbmd0aCAq
IHN0eWxlLT5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGxlbmd0aFZhbHVlID0gdmFsdWU7CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIE9wdGlvbmFsPGludD4gUmVuZGVyTWF0aE1MVGFibGU6OmZpcnN0
TGluZUJhc2VsaW5lKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaAppbmRleCA0OTlhOTQ0OWZkMWMxNWVlMWZmMjE4YWRh
OTY0ZmRmODc5MWU3N2MwLi40Zjk2YjRmZjI4MjU0YmI3YmU1OTA5ZDJlYTFlZTBkNTEwNTdkYmRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxCbG9jay5oCkBAIC05NCw3ICs5NCw2IEBAIHByaXZhdGU6CiAKIC8vIFBhcnNpbmcgZnVuY3Rp
b25zIGZvciBNYXRoTUwgTGVuZ3RoIHZhbHVlcwogYm9vbCBwYXJzZU1hdGhNTExlbmd0aChjb25z
dCBTdHJpbmcmLCBMYXlvdXRVbml0JiwgY29uc3QgUmVuZGVyU3R5bGUqLCBib29sIGFsbG93TmVn
YXRpdmUgPSB0cnVlKTsKLWJvb2wgcGFyc2VNYXRoTUxOYW1lZFNwYWNlKGNvbnN0IFN0cmluZyYs
IExheW91dFVuaXQmLCBjb25zdCBSZW5kZXJTdHlsZSosIGJvb2wgYWxsb3dOZWdhdGl2ZSA9IHRy
dWUpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279110</attachid>
            <date>2016-05-17 04:08:18 -0700</date>
            <delta_ts>2016-05-17 05:10:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156792-20160517130913.patch</filename>
            <type>text/plain</type>
            <size>15854</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwOTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFjYjY3MmJkNDNkYjYy
Y2RjOTk3NTY1MDFjNTA2NmQ1MDhlNmY3YS4uOWNmMDZiODNkNTZkZWY5ZDQ2MzNjMjgyYTk0Njhm
YzNkNWYwYTY4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE2LTA1LTE2ICBGcmVk
ZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLm9yZz4KKworICAgICAgICBDcmVhdGUgYSBNYXRoTUxM
ZW5ndGggc3RydWN0IHRvIGhhbmRsZSB0aGUgcGFyc2luZyBvZiBNYXRoTUwgbGVuZ3RoLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NzkyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgaW50cm9kdWNl
IGEgc3RydWN0dXJlIGZvciBNYXRoTUwgbGVuZ3RocyB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUg
ZnV0dXJlIHRvIHN0b3JlIHRoZQorICAgICAgICBwYXJzZWQgdmFsdWVzIGluIHRoZSBNYXRoRWxl
bWVudCBjbGFzcy4gV2UgYWxzbyByZXdyaXRlIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIGZvciBNYXRo
TUwKKyAgICAgICAgbGVuZ3RocyBpbiBvcmRlciB0byBpbXByb3ZlIGVmZmljaWVuY3kgYW5kIGNv
ZGUgcmV1c2UuIFRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgaW50byB0aGUKKyAgICAgICAgTWF0aEVs
ZW1lbnQgY2xhc3MgYW5kIG9ubHkgdGhlIGNvbnZlcnNpb24gdG8gTGF5b3V0VW5pdCByZW1haW5z
IGluIHRoZSByZW5kZXJlciBjbGFzc2VzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYWxyZWFk
eSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogbWF0aG1sL01hdGhNTEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VOYW1lZFNwYWNlKTogSGVscGVyIGZ1
bmN0aW9uIHRvIHBhcnNlIGEgbmFtZWQgc3BhY2UuCisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxF
bGVtZW50OjpwYXJzZU1hdGhNTExlbmd0aCk6IFBhcnNpbmcgZnVuY3Rpb24gZm9yIE1hdGhNTCBs
ZW5ndGhzLgorICAgICAgICAqIG1hdGhtbC9NYXRoTUxFbGVtZW50Lmg6IERlY2xhcmUgbmV3IGZ1
bmN0aW9uIGFuZCBzdHJ1Y3R1cmUgdG8gaGFuZGxlIE1hdGhNTCBsZW5ndGhzLgorICAgICAgICAq
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6dG9Vc2VyVW5pdHMpOiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzb2x2ZSBhIE1hdGhNTCBsZW5n
dGguCisgICAgICAgIChXZWJDb3JlOjpwYXJzZU1hdGhNTExlbmd0aCk6IFJlbW92ZSB0aGUgb2xk
IHBhcnNpbmcgY29kZSBhbmQganVzdCB1c2UgTWF0aE1MRWxlbWVudDo6cGFyc2VNYXRoTUxMZW5n
dGggYW5kIHRvVXNlclVuaXRzIGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZU1hdGhN
TE5hbWVkU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MQmxvY2suaDogUmVtb3ZlIHVudXNlZCBmdW5jdGlvbi4KKwogMjAxNi0wNS0xNiAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0NhaXJvXSBHcmFw
aGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3Igc2hvdWxkIHVzZSB0aGUgY29ycmVjdCBzaXpl
IGZvciBjb3B5aW5nIG5vbi1pbWFnZSBzdXJmYWNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhN
TEVsZW1lbnQuY3BwCmluZGV4IDMxYmFiYzM5YTFjNmRiNmE2OTVjYjAwZWUxMTAwMzUxMTIwODBj
ZmYuLjBjYjkyZmQwZmU5NjUwMGRlNGUyODhkMmRkMmViMGNiYzU5ZjVjN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5jcHAKQEAgLTMwMiw2ICszMDIsMTAwIEBAIHZvaWQg
TWF0aE1MRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
LCBjb25zdCBBdG9taWNTdHJpCiAgICAgU3R5bGVkRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChu
YW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHJlYXNvbik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5z
aWduZWQgcGFyc2VOYW1lZFNwYWNlKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKK3sKKyAgICBp
ZiAoc3RyaW5nID09ICJ2ZXJ5dmVyeXRoaW5tYXRoc3BhY2UiKQorICAgICAgICByZXR1cm4gMTsK
KyAgICBpZiAoc3RyaW5nID09ICJ2ZXJ5dGhpbm1hdGhzcGFjZSIpCisgICAgICAgIHJldHVybiAy
OworICAgIGlmIChzdHJpbmcgPT0gInRoaW5tYXRoc3BhY2UiKQorICAgICAgICByZXR1cm4gMzsK
KyAgICBpZiAoc3RyaW5nID09ICJtZWRpdW1tYXRoc3BhY2UiKQorICAgICAgICByZXR1cm4gNDsK
KyAgICBpZiAoc3RyaW5nID09ICJ0aGlja21hdGhzcGFjZSIpCisgICAgICAgIHJldHVybiA1Owor
ICAgIGlmIChzdHJpbmcgPT0gInZlcnl0aGlja21hdGhzcGFjZSIpCisgICAgICAgIHJldHVybiA2
OworICAgIGlmIChzdHJpbmcgPT0gInZlcnl2ZXJ5dGhpY2ttYXRoc3BhY2UiKQorICAgICAgICBy
ZXR1cm4gNzsKKyAgICByZXR1cm4gMDsKK30KKworTWF0aE1MRWxlbWVudDo6TGVuZ3RoIE1hdGhN
TEVsZW1lbnQ6OnBhcnNlTWF0aE1MTGVuZ3RoKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAg
IExlbmd0aCBsZW5ndGg7CisKKyAgICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGZyb20gdGhl
IE1hdGhNTCBSZWxheCBORyBzY2hlbWEgaXMgYXMgZm9sbG93czoKKyAgICAvLworICAgIC8vICAg
cGF0dGVybiA9ICdccyooKC0/WzAtOV0qKFswLTldXC4/fFwuWzAtOV0pWzAtOV0qKGVbbXhdfGlu
fGNtfG1tfHBbeHRjXXwlKT8pfChuZWdhdGl2ZSk/KCh2ZXJ5KXswLDJ9dGhpKG58Y2spfG1lZGl1
bSltYXRoc3BhY2UpXHMqJworICAgIC8vCisgICAgLy8gV2UgZG8gbm90IHBlcmZvcm0gYSBzdHJp
Y3QgdmVyaWZpY2F0aW9uIG9mIHRoZSBzeW50YXggb2Ygd2hpdGVzcGFjZXMgYW5kIG51bWJlci4K
KyAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IHVzZSBpc0hUTUxTcGFjZSBhbmQgdG9GbG9hdCB0byBw
YXJzZSB0aGVzZSBwYXJ0cy4KKworICAgIC8vIFdlIGZpcnN0IHNraXAgd2hpdGVzcGFjZSBmcm9t
IGJvdGggZW5kcyBvZiB0aGUgc3RyaW5nLgorICAgIHVuc2lnbmVkIHN0YXJ0ID0gMCwgc3RyaW5n
TGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIHdoaWxlIChzdHJpbmdMZW5ndGggPiAwICYm
IGlzSFRNTFNwYWNlKHN0cmluZ1tzdGFydF0pKSB7CisgICAgICAgIHN0YXJ0Kys7CisgICAgICAg
IHN0cmluZ0xlbmd0aC0tOworICAgIH0KKyAgICB3aGlsZSAoc3RyaW5nTGVuZ3RoID4gMCAmJiBp
c0hUTUxTcGFjZShzdHJpbmdbc3RhcnQgKyBzdHJpbmdMZW5ndGggLSAxXSkpCisgICAgICAgIHN0
cmluZ0xlbmd0aC0tOworICAgIGlmICghc3RyaW5nTGVuZ3RoKQorICAgICAgICByZXR1cm4gbGVu
Z3RoOworCisgICAgLy8gV2UgY29uc2lkZXIgdGhlIG1vc3QgdHlwaWNhbCBjYXNlOiBhIG51bWJl
ciBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCB1bml0LgorICAgIFVDaGFyIGZpcnN0Q2hhciA9IHN0
cmluZ1tzdGFydF07CisgICAgaWYgKGlzQVNDSUlEaWdpdChmaXJzdENoYXIpIHx8IGZpcnN0Q2hh
ciA9PSAnLScgfHwgZmlyc3RDaGFyID09ICcuJykgeworICAgICAgICBMZW5ndGhUeXBlIGxlbmd0
aFR5cGUgPSBMZW5ndGhUeXBlOjpVbml0TGVzczsKKyAgICAgICAgVUNoYXIgbGFzdENoYXIgPSBz
dHJpbmdbc3RhcnQgKyBzdHJpbmdMZW5ndGggLSAxXTsKKyAgICAgICAgaWYgKGxhc3RDaGFyID09
ICclJykgeworICAgICAgICAgICAgbGVuZ3RoVHlwZSA9IExlbmd0aFR5cGU6OlBlcmNlbnRhZ2U7
CisgICAgICAgICAgICBzdHJpbmdMZW5ndGgtLTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJpbmdM
ZW5ndGggPj0gMikgeworICAgICAgICAgICAgVUNoYXIgcGVudWx0aW1hdGVDaGFyID0gc3RyaW5n
W3N0YXJ0ICsgc3RyaW5nTGVuZ3RoIC0gMl07CisgICAgICAgICAgICBpZiAocGVudWx0aW1hdGVD
aGFyID09ICdjJyAmJiBsYXN0Q2hhciA9PSAnbScpCisgICAgICAgICAgICAgICAgbGVuZ3RoVHlw
ZSA9IExlbmd0aFR5cGU6OkNtOworICAgICAgICAgICAgaWYgKHBlbnVsdGltYXRlQ2hhciA9PSAn
ZScgJiYgbGFzdENoYXIgPT0gJ20nKQorICAgICAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5n
dGhUeXBlOjpFbTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBlbnVsdGltYXRlQ2hhciA9PSAnZScg
JiYgbGFzdENoYXIgPT0gJ3gnKQorICAgICAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5ndGhU
eXBlOjpFeDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBlbnVsdGltYXRlQ2hhciA9PSAnaScgJiYg
bGFzdENoYXIgPT0gJ24nKQorICAgICAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5ndGhUeXBl
OjpJbjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBlbnVsdGltYXRlQ2hhciA9PSAnbScgJiYgbGFz
dENoYXIgPT0gJ20nKQorICAgICAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5ndGhUeXBlOjpN
bTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBlbnVsdGltYXRlQ2hhciA9PSAncCcgJiYgbGFzdENo
YXIgPT0gJ2MnKQorICAgICAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5ndGhUeXBlOjpQYzsK
KyAgICAgICAgICAgIGVsc2UgaWYgKHBlbnVsdGltYXRlQ2hhciA9PSAncCcgJiYgbGFzdENoYXIg
PT0gJ3QnKQorICAgICAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5ndGhUeXBlOjpQdDsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKHBlbnVsdGltYXRlQ2hhciA9PSAncCcgJiYgbGFzdENoYXIgPT0g
J3gnKQorICAgICAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5ndGhUeXBlOjpQeDsKKworICAg
ICAgICAgICAgaWYgKGxlbmd0aFR5cGUgIT0gTGVuZ3RoVHlwZTo6VW5pdExlc3MpCisgICAgICAg
ICAgICAgICAgc3RyaW5nTGVuZ3RoIC09IDI7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBvazsK
KyAgICAgICAgZmxvYXQgbGVuZ3RoVmFsdWUgPSBzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBzdHJp
bmdMZW5ndGgpLnRvRmxvYXQoJm9rKTsKKyAgICAgICAgaWYgKG9rKSB7CisgICAgICAgICAgICBs
ZW5ndGgudHlwZSA9IGxlbmd0aFR5cGU7CisgICAgICAgICAgICBsZW5ndGgudmFsdWUgPSBsZW5n
dGhWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0KKworICAg
IC8vIE90aGVyd2lzZSwgd2UgdHJ5IGFuZCBwYXJzZSBhIG5hbWVkIHNwYWNlLgorICAgIGJvb2wg
bmVnYXRpdmUgPSBzdHJpbmcuc3RhcnRzV2l0aCgibmVnYXRpdmUiKTsKKyAgICBpZiAobmVnYXRp
dmUpIHsKKyAgICAgICAgc3RhcnQgKz0gODsKKyAgICAgICAgc3RyaW5nTGVuZ3RoIC09IDg7Cisg
ICAgfQorICAgIHVuc2lnbmVkIG5hbWVkU3BhY2VWYWx1ZSA9IHBhcnNlTmFtZWRTcGFjZShzdHJp
bmcuc3Vic3RyaW5nKHN0YXJ0LCBzdHJpbmdMZW5ndGgpKTsKKyAgICBpZiAobmFtZWRTcGFjZVZh
bHVlKSB7CisgICAgICAgIGxlbmd0aC50eXBlID0gTGVuZ3RoVHlwZTo6TWF0aFVuaXQ7CisgICAg
ICAgIGxlbmd0aC52YWx1ZSA9IG5hbWVkU3BhY2VWYWx1ZSAqIChuZWdhdGl2ZSA/IC0xIDogMSk7
CisgICAgfQorICAgIHJldHVybiBsZW5ndGg7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShN
QVRITUwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuaAppbmRleCAyYTViM2VlMDli
OGQ0MThkNTNkZjY5NWVhNTM2ODhkMWE0MDQwZTMxLi45M2Y0Y2IwYmQxNTUyNmI1MTJiYzE1ODgw
MThiNjE2MjQxY2YwM2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1M
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmgKQEAg
LTU2LDYgKzU2LDE2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzVGFnTmFtZShjb25zdCBNYXRo
TUxRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdCB7IHJldHVybiBoYXNMb2NhbE5hbWUobmFtZS5s
b2NhbE5hbWUoKSk7IH0KIAorICAgIC8vIE1hdGhNTCBsZW5ndGhzIChodHRwczovL3d3dy53My5v
cmcvVFIvTWF0aE1MMy9jaGFwdGVyMi5odG1sI2Z1bmQudW5pdHMpCisgICAgLy8gVGVYJ3MgTWF0
aCBVbml0IGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgbmFtZWQgc3BhY2VzICgxIG11ID0gMS8xOCBl
bSkuCisgICAgLy8gVW5pdGxlc3MgdmFsdWVzIGFyZSBpbnRlcHJldGVkIGFzIGEgbXVsdGlwbGUg
b2YgYSByZWZlcmVuY2UgdmFsdWUuCisgICAgZW51bSBjbGFzcyBMZW5ndGhUeXBlIHsgQ20sIEVt
LCBFeCwgSW4sIE1hdGhVbml0LCBNbSwgUGFyc2luZ0ZhaWxlZCwgUGMsIFBlcmNlbnRhZ2UsIFB0
LCBQeCwgVW5pdExlc3MgfTsKKyAgICBzdHJ1Y3QgTGVuZ3RoIHsKKyAgICAgICAgTGVuZ3RoVHlw
ZSB0eXBlID0gTGVuZ3RoVHlwZTo6UGFyc2luZ0ZhaWxlZDsKKyAgICAgICAgZmxvYXQgdmFsdWUg
PSAwOworICAgIH07CisgICAgc3RhdGljIExlbmd0aCBwYXJzZU1hdGhNTExlbmd0aChjb25zdCBT
dHJpbmcmKTsKKwogcHJvdGVjdGVkOgogICAgIE1hdGhNTEVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAppbmRleCBkZDg3ODRiZDgzYmMx
NzdhZDJlOWZlOWQzMzczM2ZhYWIzODY3ODNlLi4yNDI4M2VjMzQ1ZWUxZjZlZmE5ZTE1OWQ5OThi
OTkxNjZkZGI0ODVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcApAQCAtMzAsMTAgKzMwLDExIEBACiAKICNpbmNsdWRl
ICJSZW5kZXJNYXRoTUxCbG9jay5oIgogCisjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTWF0aE1MRWxlbWVudC5oIgogI2luY2x1
ZGUgIk1hdGhNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIEVOQUJMRShERUJVR19NQVRIX0xBWU9VVCkK
ICNpbmNsdWRlICJQYWludEluZm8uaCIKQEAgLTEzNCwxNzcgKzEzNSw0OSBAQCB2b2lkIFJlbmRl
ck1hdGhNTEJsb2NrOjpwYWludChQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBw
YWludE9mZnNldCkKIH0KICNlbmRpZiAvLyBFTkFCTEUoREVCVUdfTUFUSF9MQVlPVVQpCiAKLS8v
Ci0vLyBUaGUgTWF0aE1MIHNwZWNpZmljYXRpb24gc2F5czoKLS8vIChodHRwOi8vd3d3LnczLm9y
Zy9UUi9NYXRoTUwvY2hhcHRlcjIuaHRtbCNmdW5kLnVuaXRzKQotLy8KLS8vICJNb3N0IHByZXNl
bnRhdGlvbiBlbGVtZW50cyBoYXZlIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgdmFsdWVzIHJlcHJl
c2VudGluZwotLy8gbGVuZ3RocyB0byBiZSB1c2VkIGZvciBzaXplLCBzcGFjaW5nIG9yIHNpbWls
YXIgcHJvcGVydGllcy4gVGhlIHN5bnRheCBvZiBhCi0vLyBsZW5ndGggaXMgc3BlY2lmaWVkIGFz
Ci0vLwotLy8gbnVtYmVyIHwgbnVtYmVyIHVuaXQgfCBuYW1lZHNwYWNlCi0vLwotLy8gVGhlcmUg
c2hvdWxkIGJlIG5vIHNwYWNlIGJldHdlZW4gdGhlIG51bWJlciBhbmQgdGhlIHVuaXQgb2YgYSBs
ZW5ndGguIgotLy8gCi0vLyAiQSB0cmFpbGluZyAnJScgcmVwcmVzZW50cyBhIHBlcmNlbnQgb2Yg
dGhlIGRlZmF1bHQgdmFsdWUuIFRoZSBkZWZhdWx0Ci0vLyB2YWx1ZSwgb3IgaG93IGl0IGlzIG9i
dGFpbmVkLCBpcyBsaXN0ZWQgaW4gdGhlIHRhYmxlIG9mIGF0dHJpYnV0ZXMgZm9yIGVhY2gKLS8v
IGVsZW1lbnQuIFsuLi5dIEEgbnVtYmVyIHdpdGhvdXQgYSB1bml0IGlzIGludGVwcmV0ZWQgYXMg
YSBtdWx0aXBsZSBvZiB0aGUKLS8vIGRlZmF1bHQgdmFsdWUuIgotLy8KLS8vICJUaGUgcG9zc2li
bGUgdW5pdHMgaW4gTWF0aE1MIGFyZToKLS8vICAKLS8vIFVuaXQgRGVzY3JpcHRpb24KLS8vIGVt
ICAgYW4gZW0gKGZvbnQtcmVsYXRpdmUgdW5pdCB0cmFkaXRpb25hbGx5IHVzZWQgZm9yIGhvcml6
b250YWwgbGVuZ3RocykKLS8vIGV4ICAgYW4gZXggKGZvbnQtcmVsYXRpdmUgdW5pdCB0cmFkaXRp
b25hbGx5IHVzZWQgZm9yIHZlcnRpY2FsIGxlbmd0aHMpCi0vLyBweCAgIHBpeGVscywgb3Igc2l6
ZSBvZiBhIHBpeGVsIGluIHRoZSBjdXJyZW50IGRpc3BsYXkKLS8vIGluICAgaW5jaGVzICgxIGlu
Y2ggPSAyLjU0IGNlbnRpbWV0ZXJzKQotLy8gY20gICBjZW50aW1ldGVycwotLy8gbW0gICBtaWxs
aW1ldGVycwotLy8gcHQgICBwb2ludHMgKDEgcG9pbnQgPSAxLzcyIGluY2gpCi0vLyBwYyAgIHBp
Y2FzICgxIHBpY2EgPSAxMiBwb2ludHMpCi0vLyAlICAgIHBlcmNlbnRhZ2Ugb2YgZGVmYXVsdCB2
YWx1ZSIKLS8vCi0vLyBUaGUgbnVtYmVycyBhcmUgZGVmaW5lZCB0aGF0IHdheToKLS8vIC0gdW5z
aWduZWQtbnVtYmVyOiAiYSBzdHJpbmcgb2YgZGVjaW1hbCBkaWdpdHMgd2l0aCB1cCB0byBvbmUg
ZGVjaW1hbCBwb2ludAotLy8gICAoVSswMDJFKSwgcmVwcmVzZW50aW5nIGEgbm9uLW5lZ2F0aXZl
IHRlcm1pbmF0aW5nIGRlY2ltYWwgbnVtYmVyIChhIHR5cGUgb2YKLS8vICAgcmF0aW9uYWwgbnVt
YmVyKSIKLS8vIC0gbnVtYmVyOiAiYW4gb3B0aW9uYWwgcHJlZml4IG9mICctJyAoVSswMDJEKSwg
Zm9sbG93ZWQgYnkgYW4gdW5zaWduZWQKLS8vICAgbnVtYmVyLCByZXByZXNlbnRpbmcgYSB0ZXJt
aW5hdGluZyBkZWNpbWFsIG51bWJlciAoYSB0eXBlIG9mIHJhdGlvbmFsCi0vLyAgIG51bWJlciki
Ci0vLwotYm9vbCBwYXJzZU1hdGhNTExlbmd0aChjb25zdCBTdHJpbmcmIHN0cmluZywgTGF5b3V0
VW5pdCYgbGVuZ3RoVmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBhbGxvd05l
Z2F0aXZlKQorTGF5b3V0VW5pdCB0b1VzZXJVbml0cyhjb25zdCBNYXRoTUxFbGVtZW50OjpMZW5n
dGgmIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBMYXlvdXRVbml0JiBy
ZWZlcmVuY2VWYWx1ZSkKIHsKLSAgICBTdHJpbmcgcyA9IHN0cmluZy5zaW1wbGlmeVdoaXRlU3Bh
Y2UoKTsKLQotICAgIGludCBzdHJpbmdMZW5ndGggPSBzLmxlbmd0aCgpOwotICAgIGlmICghc3Ry
aW5nTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAocGFyc2VNYXRoTUxO
YW1lZFNwYWNlKHMsIGxlbmd0aFZhbHVlLCBzdHlsZSwgYWxsb3dOZWdhdGl2ZSkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgU3RyaW5nQnVpbGRlciBudW1iZXI7Ci0gICAgU3RyaW5nIHVu
aXQ7Ci0KLSAgICAvLyBUaGlzIHZlcmlmaWVzIHdoZXRoZXIgdGhlIG5lZ2F0aXZlIHNpZ24gaXMg
dGhlcmUuCi0gICAgaW50IGkgPSAwOwotICAgIFVDaGFyIGMgPSBzWzBdOwotICAgIGlmIChjID09
ICctJykgewotICAgICAgICBudW1iZXIuYXBwZW5kKGMpOwotICAgICAgICBpKys7Ci0gICAgfQot
Ci0gICAgLy8gVGhpcyBnYXRoZXJzIHVwIGNoYXJhY3RlcnMgdGhhdCBtYWtlIHVwIHRoZSBudW1i
ZXIuCi0gICAgYm9vbCBnb3REb3QgPSBmYWxzZTsKLSAgICBmb3IgKCA7IGkgPCBzdHJpbmdMZW5n
dGg7IGkrKykgewotICAgICAgICBjID0gc1tpXTsKLSAgICAgICAgLy8gVGhlIHN0cmluZyBpcyBp
bnZhbGlkIGlmIGl0IGNvbnRhaW5zIHR3byBkb3RzLgotICAgICAgICBpZiAoZ290RG90ICYmIGMg
PT0gJy4nKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoYyA9PSAnLicp
Ci0gICAgICAgICAgICBnb3REb3QgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghaXNBU0NJSURp
Z2l0KGMpKSB7Ci0gICAgICAgICAgICB1bml0ID0gcy5zdWJzdHJpbmcoaSwgc3RyaW5nTGVuZ3Ro
IC0gaSk7Ci0gICAgICAgICAgICAvLyBTb21lIGF1dGhvcnMgbGVhdmUgYmxhbmtzIGJlZm9yZSB0
aGUgdW5pdCwgYnV0IHRoYXQgc2hvdWxkbid0Ci0gICAgICAgICAgICAvLyBiZSBhbGxvd2VkLCBz
byBkb24ndCBzaW1wbGlmeVdoaXRlc3BhY2Ugb24gJ3VuaXQnLgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgbnVtYmVyLmFwcGVuZChjKTsKKyAgICBzd2l0Y2ggKGxlbmd0
aC50eXBlKSB7CisgICAgY2FzZSBNYXRoTUxFbGVtZW50OjpMZW5ndGhUeXBlOjpDbToKKyAgICAg
ICAgcmV0dXJuIGxlbmd0aC52YWx1ZSAqIGNzc1BpeGVsc1BlckluY2ggLyAyLjU0ZjsKKyAgICBj
YXNlIE1hdGhNTEVsZW1lbnQ6Okxlbmd0aFR5cGU6OkVtOgorICAgICAgICByZXR1cm4gbGVuZ3Ro
LnZhbHVlICogc3R5bGUuZm9udENhc2NhZGUoKS5zaXplKCk7CisgICAgY2FzZSBNYXRoTUxFbGVt
ZW50OjpMZW5ndGhUeXBlOjpFeDoKKyAgICAgICAgcmV0dXJuIGxlbmd0aC52YWx1ZSAqIHN0eWxl
LmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOworICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3Ro
VHlwZTo6SW46CisgICAgICAgIHJldHVybiBsZW5ndGgudmFsdWUgKiBjc3NQaXhlbHNQZXJJbmNo
OworICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6TWF0aFVuaXQ6CisgICAgICAg
IHJldHVybiBsZW5ndGgudmFsdWUgKiBzdHlsZS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4Owor
ICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6TW06CisgICAgICAgIHJldHVybiBs
ZW5ndGgudmFsdWUgKiBjc3NQaXhlbHNQZXJJbmNoIC8gMjUuNGY7CisgICAgY2FzZSBNYXRoTUxF
bGVtZW50OjpMZW5ndGhUeXBlOjpQYzoKKyAgICAgICAgcmV0dXJuIGxlbmd0aC52YWx1ZSAqIGNz
c1BpeGVsc1BlckluY2ggLyA2OworICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6
UGVyY2VudGFnZToKKyAgICAgICAgcmV0dXJuIHJlZmVyZW5jZVZhbHVlICogbGVuZ3RoLnZhbHVl
IC8gMTAwOworICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6UHQ6CisgICAgICAg
IHJldHVybiBsZW5ndGgudmFsdWUgKiBjc3NQaXhlbHNQZXJJbmNoIC8gNzI7CisgICAgY2FzZSBN
YXRoTUxFbGVtZW50OjpMZW5ndGhUeXBlOjpQeDoKKyAgICAgICAgcmV0dXJuIGxlbmd0aC52YWx1
ZTsKKyAgICBjYXNlIE1hdGhNTEVsZW1lbnQ6Okxlbmd0aFR5cGU6OlVuaXRMZXNzOgorICAgICAg
ICByZXR1cm4gcmVmZXJlbmNlVmFsdWUgKiBsZW5ndGgudmFsdWU7CisgICAgY2FzZSBNYXRoTUxF
bGVtZW50OjpMZW5ndGhUeXBlOjpQYXJzaW5nRmFpbGVkOgorICAgICAgICByZXR1cm4gcmVmZXJl
bmNlVmFsdWU7CiAgICAgfQorfQogCi0gICAgLy8gQ29udmVydCBudW1iZXIgdG8gZmxvYXRpbmcg
cG9pbnQKLSAgICBib29sIG9rOwotICAgIGZsb2F0IGZsb2F0VmFsdWUgPSBudW1iZXIudG9TdHJp
bmcoKS50b0Zsb2F0KCZvayk7Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChmbG9hdFZhbHVlIDwgMCAmJiAhYWxsb3dOZWdhdGl2ZSkKK2Jvb2wgcGFyc2VNYXRo
TUxMZW5ndGgoY29uc3QgU3RyaW5nJiBzdHJpbmcsIExheW91dFVuaXQmIGxlbmd0aFZhbHVlLCBj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgYWxsb3dOZWdhdGl2ZSkKK3sKKyAgICBNYXRo
TUxFbGVtZW50OjpMZW5ndGggbGVuZ3RoID0gTWF0aE1MRWxlbWVudDo6cGFyc2VNYXRoTUxMZW5n
dGgoc3RyaW5nKTsKKyAgICBpZiAobGVuZ3RoLnR5cGUgPT0gTWF0aE1MRWxlbWVudDo6TGVuZ3Ro
VHlwZTo6UGFyc2luZ0ZhaWxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHVu
aXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIG5vIGV4cGxpY2l0IHVuaXQsIHRoaXMgaXMgYSBu
dW1iZXIgdGhhdCB3aWxsIGFjdCBhcyBhIG11bHRpcGxpZXIKLSAgICAgICAgbGVuZ3RoVmFsdWUg
Kj0gZmxvYXRWYWx1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICh1bml0
ID09ICIlIikgewotICAgICAgICBsZW5ndGhWYWx1ZSAqPSBmbG9hdFZhbHVlIC8gMTAwOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHVuaXQgPT0gImVtIikgewotICAgICAg
ICBsZW5ndGhWYWx1ZSA9IGZsb2F0VmFsdWUgKiBzdHlsZS0+Zm9udENhc2NhZGUoKS5zaXplKCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAodW5pdCA9PSAiZXgiKSB7Ci0g
ICAgICAgIGxlbmd0aFZhbHVlID0gZmxvYXRWYWx1ZSAqIHN0eWxlLT5mb250TWV0cmljcygpLnhI
ZWlnaHQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICh1bml0ID09ICJw
eCIpIHsKLSAgICAgICAgbGVuZ3RoVmFsdWUgPSBmbG9hdFZhbHVlOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHVuaXQgPT0gInB0IikgewotICAgICAgICBsZW5ndGhWYWx1
ZSA9IDQgKiAoZmxvYXRWYWx1ZSAvIDMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgaWYgKHVuaXQgPT0gInBjIikgewotICAgICAgICBsZW5ndGhWYWx1ZSA9IDE2ICogZmxvYXRW
YWx1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICh1bml0ID09ICJpbiIp
IHsKLSAgICAgICAgbGVuZ3RoVmFsdWUgPSA5NiAqIGZsb2F0VmFsdWU7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICBpZiAodW5pdCA9PSAiY20iKSB7Ci0gICAgICAgIGxlbmd0aFZh
bHVlID0gOTYgKiAoZmxvYXRWYWx1ZSAvIDIuNTQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgaWYgKHVuaXQgPT0gIm1tIikgewotICAgICAgICBsZW5ndGhWYWx1ZSA9IDk2ICog
KGZsb2F0VmFsdWUgLyAyNS40KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIExh
eW91dFVuaXQgdmFsdWUgPSB0b1VzZXJVbml0cyhsZW5ndGgsICpzdHlsZSwgbGVuZ3RoVmFsdWUp
OwogCi0gICAgLy8gdW5leHBlY3RlZCB1bml0Ci0gICAgcmV0dXJuIGZhbHNlOwotfQorICAgIGlm
ICghYWxsb3dOZWdhdGl2ZSAmJiB2YWx1ZSA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKIAot
Ym9vbCBwYXJzZU1hdGhNTE5hbWVkU3BhY2UoY29uc3QgU3RyaW5nJiBzdHJpbmcsIExheW91dFVu
aXQmIGxlbmd0aFZhbHVlLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgYWxsb3dOZWdh
dGl2ZSkKLXsKLSAgICBmbG9hdCBsZW5ndGggPSAwOwotICAgIC8vIFNlZSBpZiBpdCBpcyBvbmUg
b2YgdGhlIG5hbWVkc3BhY2VzIChyYW5naW5nIC03LzE4ZW0sIC02LzE4LCAuLi4gNy8xOGVtKQot
ICAgIGlmIChzdHJpbmcgPT0gInZlcnl2ZXJ5dGhpbm1hdGhzcGFjZSIpCi0gICAgICAgIGxlbmd0
aCA9IDE7Ci0gICAgZWxzZSBpZiAoc3RyaW5nID09ICJ2ZXJ5dGhpbm1hdGhzcGFjZSIpCi0gICAg
ICAgIGxlbmd0aCA9IDI7Ci0gICAgZWxzZSBpZiAoc3RyaW5nID09ICJ0aGlubWF0aHNwYWNlIikK
LSAgICAgICAgbGVuZ3RoID0gMzsKLSAgICBlbHNlIGlmIChzdHJpbmcgPT0gIm1lZGl1bW1hdGhz
cGFjZSIpCi0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAgZWxzZSBpZiAoc3RyaW5nID09ICJ0aGlj
a21hdGhzcGFjZSIpCi0gICAgICAgIGxlbmd0aCA9IDU7Ci0gICAgZWxzZSBpZiAoc3RyaW5nID09
ICJ2ZXJ5dGhpY2ttYXRoc3BhY2UiKQotICAgICAgICBsZW5ndGggPSA2OwotICAgIGVsc2UgaWYg
KHN0cmluZyA9PSAidmVyeXZlcnl0aGlja21hdGhzcGFjZSIpCi0gICAgICAgIGxlbmd0aCA9IDc7
Ci0gICAgZWxzZSBpZiAoYWxsb3dOZWdhdGl2ZSkgewotICAgICAgICBpZiAoc3RyaW5nID09ICJu
ZWdhdGl2ZXZlcnl2ZXJ5dGhpbm1hdGhzcGFjZSIpCi0gICAgICAgICAgICBsZW5ndGggPSAtMTsK
LSAgICAgICAgZWxzZSBpZiAoc3RyaW5nID09ICJuZWdhdGl2ZXZlcnl0aGlubWF0aHNwYWNlIikK
LSAgICAgICAgICAgIGxlbmd0aCA9IC0yOwotICAgICAgICBlbHNlIGlmIChzdHJpbmcgPT0gIm5l
Z2F0aXZldGhpbm1hdGhzcGFjZSIpCi0gICAgICAgICAgICBsZW5ndGggPSAtMzsKLSAgICAgICAg
ZWxzZSBpZiAoc3RyaW5nID09ICJuZWdhdGl2ZW1lZGl1bW1hdGhzcGFjZSIpCi0gICAgICAgICAg
ICBsZW5ndGggPSAtNDsKLSAgICAgICAgZWxzZSBpZiAoc3RyaW5nID09ICJuZWdhdGl2ZXRoaWNr
bWF0aHNwYWNlIikKLSAgICAgICAgICAgIGxlbmd0aCA9IC01OwotICAgICAgICBlbHNlIGlmIChz
dHJpbmcgPT0gIm5lZ2F0aXZldmVyeXRoaWNrbWF0aHNwYWNlIikKLSAgICAgICAgICAgIGxlbmd0
aCA9IC02OwotICAgICAgICBlbHNlIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZldmVyeXZlcnl0aGlj
a21hdGhzcGFjZSIpCi0gICAgICAgICAgICBsZW5ndGggPSAtNzsgICAgICAgIAotICAgIH0KLSAg
ICBpZiAobGVuZ3RoKSB7Ci0gICAgICAgIGxlbmd0aFZhbHVlID0gbGVuZ3RoICogc3R5bGUtPmZv
bnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgbGVuZ3RoVmFsdWUgPSB2YWx1ZTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogT3B0aW9uYWw8aW50PiBSZW5kZXJNYXRoTUxUYWJsZTo6Zmlyc3RMaW5lQmFzZWxp
bmUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxCbG9jay5oCmluZGV4IDQ5OWE5NDQ5ZmQxYzE1ZWUxZmYyMThhZGE5NjRmZGY4Nzkx
ZTc3YzAuLjZkYjZiYjRiNzgzNWU4ZTM3NWI2ZjY2NmY1YWEzZmVmMmQzMjY4ZTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmgK
QEAgLTI5LDYgKzI5LDcgQEAKIAogI2lmIEVOQUJMRShNQVRITUwpCiAKKyNpbmNsdWRlICJNYXRo
TUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIKICNpbmNsdWRlICJS
ZW5kZXJUYWJsZS5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgpAQCAtOTQsNyAr
OTUsNyBAQCBwcml2YXRlOgogCiAvLyBQYXJzaW5nIGZ1bmN0aW9ucyBmb3IgTWF0aE1MIExlbmd0
aCB2YWx1ZXMKIGJvb2wgcGFyc2VNYXRoTUxMZW5ndGgoY29uc3QgU3RyaW5nJiwgTGF5b3V0VW5p
dCYsIGNvbnN0IFJlbmRlclN0eWxlKiwgYm9vbCBhbGxvd05lZ2F0aXZlID0gdHJ1ZSk7Ci1ib29s
IHBhcnNlTWF0aE1MTmFtZWRTcGFjZShjb25zdCBTdHJpbmcmLCBMYXlvdXRVbml0JiwgY29uc3Qg
UmVuZGVyU3R5bGUqLCBib29sIGFsbG93TmVnYXRpdmUgPSB0cnVlKTsKK0xheW91dFVuaXQgdG9V
c2VyVW5pdHMoY29uc3QgTWF0aE1MRWxlbWVudDo6TGVuZ3RoJiwgY29uc3QgUmVuZGVyU3R5bGUm
LCBjb25zdCBMYXlvdXRVbml0JiByZWZlcmVuY2VWYWx1ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279112</attachid>
            <date>2016-05-17 05:10:12 -0700</date>
            <delta_ts>2016-07-08 06:44:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156792-20160517141108.patch</filename>
            <type>text/plain</type>
            <size>15931</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwOTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFjYjY3MmJkNDNkYjYy
Y2RjOTk3NTY1MDFjNTA2NmQ1MDhlNmY3YS4uOWNmMDZiODNkNTZkZWY5ZDQ2MzNjMjgyYTk0Njhm
YzNkNWYwYTY4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE2LTA1LTE2ICBGcmVk
ZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLm9yZz4KKworICAgICAgICBDcmVhdGUgYSBNYXRoTUxM
ZW5ndGggc3RydWN0IHRvIGhhbmRsZSB0aGUgcGFyc2luZyBvZiBNYXRoTUwgbGVuZ3RoLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NzkyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgaW50cm9kdWNl
IGEgc3RydWN0dXJlIGZvciBNYXRoTUwgbGVuZ3RocyB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUg
ZnV0dXJlIHRvIHN0b3JlIHRoZQorICAgICAgICBwYXJzZWQgdmFsdWVzIGluIHRoZSBNYXRoRWxl
bWVudCBjbGFzcy4gV2UgYWxzbyByZXdyaXRlIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIGZvciBNYXRo
TUwKKyAgICAgICAgbGVuZ3RocyBpbiBvcmRlciB0byBpbXByb3ZlIGVmZmljaWVuY3kgYW5kIGNv
ZGUgcmV1c2UuIFRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgaW50byB0aGUKKyAgICAgICAgTWF0aEVs
ZW1lbnQgY2xhc3MgYW5kIG9ubHkgdGhlIGNvbnZlcnNpb24gdG8gTGF5b3V0VW5pdCByZW1haW5z
IGluIHRoZSByZW5kZXJlciBjbGFzc2VzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYWxyZWFk
eSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogbWF0aG1sL01hdGhNTEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VOYW1lZFNwYWNlKTogSGVscGVyIGZ1
bmN0aW9uIHRvIHBhcnNlIGEgbmFtZWQgc3BhY2UuCisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxF
bGVtZW50OjpwYXJzZU1hdGhNTExlbmd0aCk6IFBhcnNpbmcgZnVuY3Rpb24gZm9yIE1hdGhNTCBs
ZW5ndGhzLgorICAgICAgICAqIG1hdGhtbC9NYXRoTUxFbGVtZW50Lmg6IERlY2xhcmUgbmV3IGZ1
bmN0aW9uIGFuZCBzdHJ1Y3R1cmUgdG8gaGFuZGxlIE1hdGhNTCBsZW5ndGhzLgorICAgICAgICAq
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6dG9Vc2VyVW5pdHMpOiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzb2x2ZSBhIE1hdGhNTCBsZW5n
dGguCisgICAgICAgIChXZWJDb3JlOjpwYXJzZU1hdGhNTExlbmd0aCk6IFJlbW92ZSB0aGUgb2xk
IHBhcnNpbmcgY29kZSBhbmQganVzdCB1c2UgTWF0aE1MRWxlbWVudDo6cGFyc2VNYXRoTUxMZW5n
dGggYW5kIHRvVXNlclVuaXRzIGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZU1hdGhN
TE5hbWVkU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MQmxvY2suaDogUmVtb3ZlIHVudXNlZCBmdW5jdGlvbi4KKwogMjAxNi0wNS0xNiAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0NhaXJvXSBHcmFw
aGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3Igc2hvdWxkIHVzZSB0aGUgY29ycmVjdCBzaXpl
IGZvciBjb3B5aW5nIG5vbi1pbWFnZSBzdXJmYWNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhN
TEVsZW1lbnQuY3BwCmluZGV4IDMxYmFiYzM5YTFjNmRiNmE2OTVjYjAwZWUxMTAwMzUxMTIwODBj
ZmYuLjBjYjkyZmQwZmU5NjUwMGRlNGUyODhkMmRkMmViMGNiYzU5ZjVjN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5jcHAKQEAgLTMwMiw2ICszMDIsMTAwIEBAIHZvaWQg
TWF0aE1MRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
LCBjb25zdCBBdG9taWNTdHJpCiAgICAgU3R5bGVkRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChu
YW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHJlYXNvbik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5z
aWduZWQgcGFyc2VOYW1lZFNwYWNlKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKK3sKKyAgICBp
ZiAoc3RyaW5nID09ICJ2ZXJ5dmVyeXRoaW5tYXRoc3BhY2UiKQorICAgICAgICByZXR1cm4gMTsK
KyAgICBpZiAoc3RyaW5nID09ICJ2ZXJ5dGhpbm1hdGhzcGFjZSIpCisgICAgICAgIHJldHVybiAy
OworICAgIGlmIChzdHJpbmcgPT0gInRoaW5tYXRoc3BhY2UiKQorICAgICAgICByZXR1cm4gMzsK
KyAgICBpZiAoc3RyaW5nID09ICJtZWRpdW1tYXRoc3BhY2UiKQorICAgICAgICByZXR1cm4gNDsK
KyAgICBpZiAoc3RyaW5nID09ICJ0aGlja21hdGhzcGFjZSIpCisgICAgICAgIHJldHVybiA1Owor
ICAgIGlmIChzdHJpbmcgPT0gInZlcnl0aGlja21hdGhzcGFjZSIpCisgICAgICAgIHJldHVybiA2
OworICAgIGlmIChzdHJpbmcgPT0gInZlcnl2ZXJ5dGhpY2ttYXRoc3BhY2UiKQorICAgICAgICBy
ZXR1cm4gNzsKKyAgICByZXR1cm4gMDsKK30KKworTWF0aE1MRWxlbWVudDo6TGVuZ3RoIE1hdGhN
TEVsZW1lbnQ6OnBhcnNlTWF0aE1MTGVuZ3RoKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAg
IExlbmd0aCBsZW5ndGg7CisKKyAgICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGZyb20gdGhl
IE1hdGhNTCBSZWxheCBORyBzY2hlbWEgaXMgYXMgZm9sbG93czoKKyAgICAvLworICAgIC8vICAg
cGF0dGVybiA9ICdccyooKC0/WzAtOV0qKFswLTldXC4/fFwuWzAtOV0pWzAtOV0qKGVbbXhdfGlu
fGNtfG1tfHBbeHRjXXwlKT8pfChuZWdhdGl2ZSk/KCh2ZXJ5KXswLDJ9dGhpKG58Y2spfG1lZGl1
bSltYXRoc3BhY2UpXHMqJworICAgIC8vCisgICAgLy8gV2UgZG8gbm90IHBlcmZvcm0gYSBzdHJp
Y3QgdmVyaWZpY2F0aW9uIG9mIHRoZSBzeW50YXggb2Ygd2hpdGVzcGFjZXMgYW5kIG51bWJlci4K
KyAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IHVzZSBpc0hUTUxTcGFjZSBhbmQgdG9GbG9hdCB0byBw
YXJzZSB0aGVzZSBwYXJ0cy4KKworICAgIC8vIFdlIGZpcnN0IHNraXAgd2hpdGVzcGFjZSBmcm9t
IGJvdGggZW5kcyBvZiB0aGUgc3RyaW5nLgorICAgIHVuc2lnbmVkIHN0YXJ0ID0gMCwgc3RyaW5n
TGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIHdoaWxlIChzdHJpbmdMZW5ndGggPiAwICYm
IGlzSFRNTFNwYWNlKHN0cmluZ1tzdGFydF0pKSB7CisgICAgICAgIHN0YXJ0Kys7CisgICAgICAg
IHN0cmluZ0xlbmd0aC0tOworICAgIH0KKyAgICB3aGlsZSAoc3RyaW5nTGVuZ3RoID4gMCAmJiBp
c0hUTUxTcGFjZShzdHJpbmdbc3RhcnQgKyBzdHJpbmdMZW5ndGggLSAxXSkpCisgICAgICAgIHN0
cmluZ0xlbmd0aC0tOworICAgIGlmICghc3RyaW5nTGVuZ3RoKQorICAgICAgICByZXR1cm4gbGVu
Z3RoOworCisgICAgLy8gV2UgY29uc2lkZXIgdGhlIG1vc3QgdHlwaWNhbCBjYXNlOiBhIG51bWJl
ciBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCB1bml0LgorICAgIFVDaGFyIGZpcnN0Q2hhciA9IHN0
cmluZ1tzdGFydF07CisgICAgaWYgKGlzQVNDSUlEaWdpdChmaXJzdENoYXIpIHx8IGZpcnN0Q2hh
ciA9PSAnLScgfHwgZmlyc3RDaGFyID09ICcuJykgeworICAgICAgICBMZW5ndGhUeXBlIGxlbmd0
aFR5cGUgPSBMZW5ndGhUeXBlOjpVbml0TGVzczsKKyAgICAgICAgVUNoYXIgbGFzdENoYXIgPSBz
dHJpbmdbc3RhcnQgKyBzdHJpbmdMZW5ndGggLSAxXTsKKyAgICAgICAgaWYgKGxhc3RDaGFyID09
ICclJykgeworICAgICAgICAgICAgbGVuZ3RoVHlwZSA9IExlbmd0aFR5cGU6OlBlcmNlbnRhZ2U7
CisgICAgICAgICAgICBzdHJpbmdMZW5ndGgtLTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJpbmdM
ZW5ndGggPj0gMikgeworICAgICAgICAgICAgVUNoYXIgcGVudWx0aW1hdGVDaGFyID0gc3RyaW5n
W3N0YXJ0ICsgc3RyaW5nTGVuZ3RoIC0gMl07CisgICAgICAgICAgICBpZiAocGVudWx0aW1hdGVD
aGFyID09ICdjJyAmJiBsYXN0Q2hhciA9PSAnbScpCisgICAgICAgICAgICAgICAgbGVuZ3RoVHlw
ZSA9IExlbmd0aFR5cGU6OkNtOworICAgICAgICAgICAgaWYgKHBlbnVsdGltYXRlQ2hhciA9PSAn
ZScgJiYgbGFzdENoYXIgPT0gJ20nKQorICAgICAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5n
dGhUeXBlOjpFbTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBlbnVsdGltYXRlQ2hhciA9PSAnZScg
JiYgbGFzdENoYXIgPT0gJ3gnKQorICAgICAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5ndGhU
eXBlOjpFeDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBlbnVsdGltYXRlQ2hhciA9PSAnaScgJiYg
bGFzdENoYXIgPT0gJ24nKQorICAgICAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5ndGhUeXBl
OjpJbjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBlbnVsdGltYXRlQ2hhciA9PSAnbScgJiYgbGFz
dENoYXIgPT0gJ20nKQorICAgICAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5ndGhUeXBlOjpN
bTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBlbnVsdGltYXRlQ2hhciA9PSAncCcgJiYgbGFzdENo
YXIgPT0gJ2MnKQorICAgICAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5ndGhUeXBlOjpQYzsK
KyAgICAgICAgICAgIGVsc2UgaWYgKHBlbnVsdGltYXRlQ2hhciA9PSAncCcgJiYgbGFzdENoYXIg
PT0gJ3QnKQorICAgICAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5ndGhUeXBlOjpQdDsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKHBlbnVsdGltYXRlQ2hhciA9PSAncCcgJiYgbGFzdENoYXIgPT0g
J3gnKQorICAgICAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5ndGhUeXBlOjpQeDsKKworICAg
ICAgICAgICAgaWYgKGxlbmd0aFR5cGUgIT0gTGVuZ3RoVHlwZTo6VW5pdExlc3MpCisgICAgICAg
ICAgICAgICAgc3RyaW5nTGVuZ3RoIC09IDI7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBvazsK
KyAgICAgICAgZmxvYXQgbGVuZ3RoVmFsdWUgPSBzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBzdHJp
bmdMZW5ndGgpLnRvRmxvYXQoJm9rKTsKKyAgICAgICAgaWYgKG9rKSB7CisgICAgICAgICAgICBs
ZW5ndGgudHlwZSA9IGxlbmd0aFR5cGU7CisgICAgICAgICAgICBsZW5ndGgudmFsdWUgPSBsZW5n
dGhWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0KKworICAg
IC8vIE90aGVyd2lzZSwgd2UgdHJ5IGFuZCBwYXJzZSBhIG5hbWVkIHNwYWNlLgorICAgIGJvb2wg
bmVnYXRpdmUgPSBzdHJpbmcuc3RhcnRzV2l0aCgibmVnYXRpdmUiKTsKKyAgICBpZiAobmVnYXRp
dmUpIHsKKyAgICAgICAgc3RhcnQgKz0gODsKKyAgICAgICAgc3RyaW5nTGVuZ3RoIC09IDg7Cisg
ICAgfQorICAgIHVuc2lnbmVkIG5hbWVkU3BhY2VWYWx1ZSA9IHBhcnNlTmFtZWRTcGFjZShzdHJp
bmcuc3Vic3RyaW5nKHN0YXJ0LCBzdHJpbmdMZW5ndGgpKTsKKyAgICBpZiAobmFtZWRTcGFjZVZh
bHVlKSB7CisgICAgICAgIGxlbmd0aC50eXBlID0gTGVuZ3RoVHlwZTo6TWF0aFVuaXQ7CisgICAg
ICAgIGxlbmd0aC52YWx1ZSA9IG5hbWVkU3BhY2VWYWx1ZSAqIChuZWdhdGl2ZSA/IC0xIDogMSk7
CisgICAgfQorICAgIHJldHVybiBsZW5ndGg7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShN
QVRITUwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuaAppbmRleCAyYTViM2VlMDli
OGQ0MThkNTNkZjY5NWVhNTM2ODhkMWE0MDQwZTMxLi45M2Y0Y2IwYmQxNTUyNmI1MTJiYzE1ODgw
MThiNjE2MjQxY2YwM2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1M
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmgKQEAg
LTU2LDYgKzU2LDE2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzVGFnTmFtZShjb25zdCBNYXRo
TUxRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdCB7IHJldHVybiBoYXNMb2NhbE5hbWUobmFtZS5s
b2NhbE5hbWUoKSk7IH0KIAorICAgIC8vIE1hdGhNTCBsZW5ndGhzIChodHRwczovL3d3dy53My5v
cmcvVFIvTWF0aE1MMy9jaGFwdGVyMi5odG1sI2Z1bmQudW5pdHMpCisgICAgLy8gVGVYJ3MgTWF0
aCBVbml0IGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgbmFtZWQgc3BhY2VzICgxIG11ID0gMS8xOCBl
bSkuCisgICAgLy8gVW5pdGxlc3MgdmFsdWVzIGFyZSBpbnRlcHJldGVkIGFzIGEgbXVsdGlwbGUg
b2YgYSByZWZlcmVuY2UgdmFsdWUuCisgICAgZW51bSBjbGFzcyBMZW5ndGhUeXBlIHsgQ20sIEVt
LCBFeCwgSW4sIE1hdGhVbml0LCBNbSwgUGFyc2luZ0ZhaWxlZCwgUGMsIFBlcmNlbnRhZ2UsIFB0
LCBQeCwgVW5pdExlc3MgfTsKKyAgICBzdHJ1Y3QgTGVuZ3RoIHsKKyAgICAgICAgTGVuZ3RoVHlw
ZSB0eXBlID0gTGVuZ3RoVHlwZTo6UGFyc2luZ0ZhaWxlZDsKKyAgICAgICAgZmxvYXQgdmFsdWUg
PSAwOworICAgIH07CisgICAgc3RhdGljIExlbmd0aCBwYXJzZU1hdGhNTExlbmd0aChjb25zdCBT
dHJpbmcmKTsKKwogcHJvdGVjdGVkOgogICAgIE1hdGhNTEVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAppbmRleCBkZDg3ODRiZDgzYmMx
NzdhZDJlOWZlOWQzMzczM2ZhYWIzODY3ODNlLi42ZjcyNjg4NmMyYzlkMzY1ZjU5OWI5YjUzZmY4
YzhiMmQ4MmFiN2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcApAQCAtMzAsMTAgKzMwLDExIEBACiAKICNpbmNsdWRl
ICJSZW5kZXJNYXRoTUxCbG9jay5oIgogCisjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTWF0aE1MRWxlbWVudC5oIgogI2luY2x1
ZGUgIk1hdGhNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIEVOQUJMRShERUJVR19NQVRIX0xBWU9VVCkK
ICNpbmNsdWRlICJQYWludEluZm8uaCIKQEAgLTEzNCwxNzcgKzEzNSw1MiBAQCB2b2lkIFJlbmRl
ck1hdGhNTEJsb2NrOjpwYWludChQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBw
YWludE9mZnNldCkKIH0KICNlbmRpZiAvLyBFTkFCTEUoREVCVUdfTUFUSF9MQVlPVVQpCiAKLS8v
Ci0vLyBUaGUgTWF0aE1MIHNwZWNpZmljYXRpb24gc2F5czoKLS8vIChodHRwOi8vd3d3LnczLm9y
Zy9UUi9NYXRoTUwvY2hhcHRlcjIuaHRtbCNmdW5kLnVuaXRzKQotLy8KLS8vICJNb3N0IHByZXNl
bnRhdGlvbiBlbGVtZW50cyBoYXZlIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgdmFsdWVzIHJlcHJl
c2VudGluZwotLy8gbGVuZ3RocyB0byBiZSB1c2VkIGZvciBzaXplLCBzcGFjaW5nIG9yIHNpbWls
YXIgcHJvcGVydGllcy4gVGhlIHN5bnRheCBvZiBhCi0vLyBsZW5ndGggaXMgc3BlY2lmaWVkIGFz
Ci0vLwotLy8gbnVtYmVyIHwgbnVtYmVyIHVuaXQgfCBuYW1lZHNwYWNlCi0vLwotLy8gVGhlcmUg
c2hvdWxkIGJlIG5vIHNwYWNlIGJldHdlZW4gdGhlIG51bWJlciBhbmQgdGhlIHVuaXQgb2YgYSBs
ZW5ndGguIgotLy8gCi0vLyAiQSB0cmFpbGluZyAnJScgcmVwcmVzZW50cyBhIHBlcmNlbnQgb2Yg
dGhlIGRlZmF1bHQgdmFsdWUuIFRoZSBkZWZhdWx0Ci0vLyB2YWx1ZSwgb3IgaG93IGl0IGlzIG9i
dGFpbmVkLCBpcyBsaXN0ZWQgaW4gdGhlIHRhYmxlIG9mIGF0dHJpYnV0ZXMgZm9yIGVhY2gKLS8v
IGVsZW1lbnQuIFsuLi5dIEEgbnVtYmVyIHdpdGhvdXQgYSB1bml0IGlzIGludGVwcmV0ZWQgYXMg
YSBtdWx0aXBsZSBvZiB0aGUKLS8vIGRlZmF1bHQgdmFsdWUuIgotLy8KLS8vICJUaGUgcG9zc2li
bGUgdW5pdHMgaW4gTWF0aE1MIGFyZToKLS8vICAKLS8vIFVuaXQgRGVzY3JpcHRpb24KLS8vIGVt
ICAgYW4gZW0gKGZvbnQtcmVsYXRpdmUgdW5pdCB0cmFkaXRpb25hbGx5IHVzZWQgZm9yIGhvcml6
b250YWwgbGVuZ3RocykKLS8vIGV4ICAgYW4gZXggKGZvbnQtcmVsYXRpdmUgdW5pdCB0cmFkaXRp
b25hbGx5IHVzZWQgZm9yIHZlcnRpY2FsIGxlbmd0aHMpCi0vLyBweCAgIHBpeGVscywgb3Igc2l6
ZSBvZiBhIHBpeGVsIGluIHRoZSBjdXJyZW50IGRpc3BsYXkKLS8vIGluICAgaW5jaGVzICgxIGlu
Y2ggPSAyLjU0IGNlbnRpbWV0ZXJzKQotLy8gY20gICBjZW50aW1ldGVycwotLy8gbW0gICBtaWxs
aW1ldGVycwotLy8gcHQgICBwb2ludHMgKDEgcG9pbnQgPSAxLzcyIGluY2gpCi0vLyBwYyAgIHBp
Y2FzICgxIHBpY2EgPSAxMiBwb2ludHMpCi0vLyAlICAgIHBlcmNlbnRhZ2Ugb2YgZGVmYXVsdCB2
YWx1ZSIKLS8vCi0vLyBUaGUgbnVtYmVycyBhcmUgZGVmaW5lZCB0aGF0IHdheToKLS8vIC0gdW5z
aWduZWQtbnVtYmVyOiAiYSBzdHJpbmcgb2YgZGVjaW1hbCBkaWdpdHMgd2l0aCB1cCB0byBvbmUg
ZGVjaW1hbCBwb2ludAotLy8gICAoVSswMDJFKSwgcmVwcmVzZW50aW5nIGEgbm9uLW5lZ2F0aXZl
IHRlcm1pbmF0aW5nIGRlY2ltYWwgbnVtYmVyIChhIHR5cGUgb2YKLS8vICAgcmF0aW9uYWwgbnVt
YmVyKSIKLS8vIC0gbnVtYmVyOiAiYW4gb3B0aW9uYWwgcHJlZml4IG9mICctJyAoVSswMDJEKSwg
Zm9sbG93ZWQgYnkgYW4gdW5zaWduZWQKLS8vICAgbnVtYmVyLCByZXByZXNlbnRpbmcgYSB0ZXJt
aW5hdGluZyBkZWNpbWFsIG51bWJlciAoYSB0eXBlIG9mIHJhdGlvbmFsCi0vLyAgIG51bWJlciki
Ci0vLwotYm9vbCBwYXJzZU1hdGhNTExlbmd0aChjb25zdCBTdHJpbmcmIHN0cmluZywgTGF5b3V0
VW5pdCYgbGVuZ3RoVmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBhbGxvd05l
Z2F0aXZlKQorTGF5b3V0VW5pdCB0b1VzZXJVbml0cyhjb25zdCBNYXRoTUxFbGVtZW50OjpMZW5n
dGgmIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBMYXlvdXRVbml0JiBy
ZWZlcmVuY2VWYWx1ZSkKIHsKLSAgICBTdHJpbmcgcyA9IHN0cmluZy5zaW1wbGlmeVdoaXRlU3Bh
Y2UoKTsKLQotICAgIGludCBzdHJpbmdMZW5ndGggPSBzLmxlbmd0aCgpOwotICAgIGlmICghc3Ry
aW5nTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAocGFyc2VNYXRoTUxO
YW1lZFNwYWNlKHMsIGxlbmd0aFZhbHVlLCBzdHlsZSwgYWxsb3dOZWdhdGl2ZSkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgU3RyaW5nQnVpbGRlciBudW1iZXI7Ci0gICAgU3RyaW5nIHVu
aXQ7Ci0KLSAgICAvLyBUaGlzIHZlcmlmaWVzIHdoZXRoZXIgdGhlIG5lZ2F0aXZlIHNpZ24gaXMg
dGhlcmUuCi0gICAgaW50IGkgPSAwOwotICAgIFVDaGFyIGMgPSBzWzBdOwotICAgIGlmIChjID09
ICctJykgewotICAgICAgICBudW1iZXIuYXBwZW5kKGMpOwotICAgICAgICBpKys7Ci0gICAgfQot
Ci0gICAgLy8gVGhpcyBnYXRoZXJzIHVwIGNoYXJhY3RlcnMgdGhhdCBtYWtlIHVwIHRoZSBudW1i
ZXIuCi0gICAgYm9vbCBnb3REb3QgPSBmYWxzZTsKLSAgICBmb3IgKCA7IGkgPCBzdHJpbmdMZW5n
dGg7IGkrKykgewotICAgICAgICBjID0gc1tpXTsKLSAgICAgICAgLy8gVGhlIHN0cmluZyBpcyBp
bnZhbGlkIGlmIGl0IGNvbnRhaW5zIHR3byBkb3RzLgotICAgICAgICBpZiAoZ290RG90ICYmIGMg
PT0gJy4nKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoYyA9PSAnLicp
Ci0gICAgICAgICAgICBnb3REb3QgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghaXNBU0NJSURp
Z2l0KGMpKSB7Ci0gICAgICAgICAgICB1bml0ID0gcy5zdWJzdHJpbmcoaSwgc3RyaW5nTGVuZ3Ro
IC0gaSk7Ci0gICAgICAgICAgICAvLyBTb21lIGF1dGhvcnMgbGVhdmUgYmxhbmtzIGJlZm9yZSB0
aGUgdW5pdCwgYnV0IHRoYXQgc2hvdWxkbid0Ci0gICAgICAgICAgICAvLyBiZSBhbGxvd2VkLCBz
byBkb24ndCBzaW1wbGlmeVdoaXRlc3BhY2Ugb24gJ3VuaXQnLgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgbnVtYmVyLmFwcGVuZChjKTsKKyAgICBzd2l0Y2ggKGxlbmd0
aC50eXBlKSB7CisgICAgY2FzZSBNYXRoTUxFbGVtZW50OjpMZW5ndGhUeXBlOjpDbToKKyAgICAg
ICAgcmV0dXJuIGxlbmd0aC52YWx1ZSAqIGNzc1BpeGVsc1BlckluY2ggLyAyLjU0ZjsKKyAgICBj
YXNlIE1hdGhNTEVsZW1lbnQ6Okxlbmd0aFR5cGU6OkVtOgorICAgICAgICByZXR1cm4gbGVuZ3Ro
LnZhbHVlICogc3R5bGUuZm9udENhc2NhZGUoKS5zaXplKCk7CisgICAgY2FzZSBNYXRoTUxFbGVt
ZW50OjpMZW5ndGhUeXBlOjpFeDoKKyAgICAgICAgcmV0dXJuIGxlbmd0aC52YWx1ZSAqIHN0eWxl
LmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOworICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3Ro
VHlwZTo6SW46CisgICAgICAgIHJldHVybiBsZW5ndGgudmFsdWUgKiBjc3NQaXhlbHNQZXJJbmNo
OworICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6TWF0aFVuaXQ6CisgICAgICAg
IHJldHVybiBsZW5ndGgudmFsdWUgKiBzdHlsZS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4Owor
ICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6TW06CisgICAgICAgIHJldHVybiBs
ZW5ndGgudmFsdWUgKiBjc3NQaXhlbHNQZXJJbmNoIC8gMjUuNGY7CisgICAgY2FzZSBNYXRoTUxF
bGVtZW50OjpMZW5ndGhUeXBlOjpQYzoKKyAgICAgICAgcmV0dXJuIGxlbmd0aC52YWx1ZSAqIGNz
c1BpeGVsc1BlckluY2ggLyA2OworICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6
UGVyY2VudGFnZToKKyAgICAgICAgcmV0dXJuIHJlZmVyZW5jZVZhbHVlICogbGVuZ3RoLnZhbHVl
IC8gMTAwOworICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6UHQ6CisgICAgICAg
IHJldHVybiBsZW5ndGgudmFsdWUgKiBjc3NQaXhlbHNQZXJJbmNoIC8gNzI7CisgICAgY2FzZSBN
YXRoTUxFbGVtZW50OjpMZW5ndGhUeXBlOjpQeDoKKyAgICAgICAgcmV0dXJuIGxlbmd0aC52YWx1
ZTsKKyAgICBjYXNlIE1hdGhNTEVsZW1lbnQ6Okxlbmd0aFR5cGU6OlVuaXRMZXNzOgorICAgICAg
ICByZXR1cm4gcmVmZXJlbmNlVmFsdWUgKiBsZW5ndGgudmFsdWU7CisgICAgY2FzZSBNYXRoTUxF
bGVtZW50OjpMZW5ndGhUeXBlOjpQYXJzaW5nRmFpbGVkOgorICAgICAgICByZXR1cm4gcmVmZXJl
bmNlVmFsdWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiByZWZlcmVuY2VWYWx1ZTsKICAgICB9Cit9CiAKLSAgICAvLyBDb252ZXJ0
IG51bWJlciB0byBmbG9hdGluZyBwb2ludAotICAgIGJvb2wgb2s7Ci0gICAgZmxvYXQgZmxvYXRW
YWx1ZSA9IG51bWJlci50b1N0cmluZygpLnRvRmxvYXQoJm9rKTsKLSAgICBpZiAoIW9rKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGZsb2F0VmFsdWUgPCAwICYmICFhbGxvd05lZ2F0
aXZlKQorYm9vbCBwYXJzZU1hdGhNTExlbmd0aChjb25zdCBTdHJpbmcmIHN0cmluZywgTGF5b3V0
VW5pdCYgbGVuZ3RoVmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBhbGxvd05l
Z2F0aXZlKQoreworICAgIE1hdGhNTEVsZW1lbnQ6Okxlbmd0aCBsZW5ndGggPSBNYXRoTUxFbGVt
ZW50OjpwYXJzZU1hdGhNTExlbmd0aChzdHJpbmcpOworICAgIGlmIChsZW5ndGgudHlwZSA9PSBN
YXRoTUxFbGVtZW50OjpMZW5ndGhUeXBlOjpQYXJzaW5nRmFpbGVkKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpZiAodW5pdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gbm8gZXhwbGlj
aXQgdW5pdCwgdGhpcyBpcyBhIG51bWJlciB0aGF0IHdpbGwgYWN0IGFzIGEgbXVsdGlwbGllcgot
ICAgICAgICBsZW5ndGhWYWx1ZSAqPSBmbG9hdFZhbHVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgaWYgKHVuaXQgPT0gIiUiKSB7Ci0gICAgICAgIGxlbmd0aFZhbHVlICo9IGZs
b2F0VmFsdWUgLyAxMDA7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAodW5p
dCA9PSAiZW0iKSB7Ci0gICAgICAgIGxlbmd0aFZhbHVlID0gZmxvYXRWYWx1ZSAqIHN0eWxlLT5m
b250Q2FzY2FkZSgpLnNpemUoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlm
ICh1bml0ID09ICJleCIpIHsKLSAgICAgICAgbGVuZ3RoVmFsdWUgPSBmbG9hdFZhbHVlICogc3R5
bGUtPmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgaWYgKHVuaXQgPT0gInB4IikgewotICAgICAgICBsZW5ndGhWYWx1ZSA9IGZsb2F0VmFs
dWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAodW5pdCA9PSAicHQiKSB7
Ci0gICAgICAgIGxlbmd0aFZhbHVlID0gNCAqIChmbG9hdFZhbHVlIC8gMyk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAodW5pdCA9PSAicGMiKSB7Ci0gICAgICAgIGxlbmd0
aFZhbHVlID0gMTYgKiBmbG9hdFZhbHVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgaWYgKHVuaXQgPT0gImluIikgewotICAgICAgICBsZW5ndGhWYWx1ZSA9IDk2ICogZmxvYXRW
YWx1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICh1bml0ID09ICJjbSIp
IHsKLSAgICAgICAgbGVuZ3RoVmFsdWUgPSA5NiAqIChmbG9hdFZhbHVlIC8gMi41NCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAodW5pdCA9PSAibW0iKSB7Ci0gICAgICAg
IGxlbmd0aFZhbHVlID0gOTYgKiAoZmxvYXRWYWx1ZSAvIDI1LjQpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9CisgICAgTGF5b3V0VW5pdCB2YWx1ZSA9IHRvVXNlclVuaXRzKGxlbmd0aCwg
KnN0eWxlLCBsZW5ndGhWYWx1ZSk7CiAKLSAgICAvLyB1bmV4cGVjdGVkIHVuaXQKLSAgICByZXR1
cm4gZmFsc2U7Ci19CisgICAgaWYgKCFhbGxvd05lZ2F0aXZlICYmIHZhbHVlIDwgMCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi1ib29sIHBhcnNlTWF0aE1MTmFtZWRTcGFjZShjb25zdCBTdHJp
bmcmIHN0cmluZywgTGF5b3V0VW5pdCYgbGVuZ3RoVmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSwgYm9vbCBhbGxvd05lZ2F0aXZlKQotewotICAgIGZsb2F0IGxlbmd0aCA9IDA7Ci0gICAg
Ly8gU2VlIGlmIGl0IGlzIG9uZSBvZiB0aGUgbmFtZWRzcGFjZXMgKHJhbmdpbmcgLTcvMThlbSwg
LTYvMTgsIC4uLiA3LzE4ZW0pCi0gICAgaWYgKHN0cmluZyA9PSAidmVyeXZlcnl0aGlubWF0aHNw
YWNlIikKLSAgICAgICAgbGVuZ3RoID0gMTsKLSAgICBlbHNlIGlmIChzdHJpbmcgPT0gInZlcnl0
aGlubWF0aHNwYWNlIikKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICBlbHNlIGlmIChzdHJpbmcg
PT0gInRoaW5tYXRoc3BhY2UiKQotICAgICAgICBsZW5ndGggPSAzOwotICAgIGVsc2UgaWYgKHN0
cmluZyA9PSAibWVkaXVtbWF0aHNwYWNlIikKLSAgICAgICAgbGVuZ3RoID0gNDsKLSAgICBlbHNl
IGlmIChzdHJpbmcgPT0gInRoaWNrbWF0aHNwYWNlIikKLSAgICAgICAgbGVuZ3RoID0gNTsKLSAg
ICBlbHNlIGlmIChzdHJpbmcgPT0gInZlcnl0aGlja21hdGhzcGFjZSIpCi0gICAgICAgIGxlbmd0
aCA9IDY7Ci0gICAgZWxzZSBpZiAoc3RyaW5nID09ICJ2ZXJ5dmVyeXRoaWNrbWF0aHNwYWNlIikK
LSAgICAgICAgbGVuZ3RoID0gNzsKLSAgICBlbHNlIGlmIChhbGxvd05lZ2F0aXZlKSB7Ci0gICAg
ICAgIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZldmVyeXZlcnl0aGlubWF0aHNwYWNlIikKLSAgICAg
ICAgICAgIGxlbmd0aCA9IC0xOwotICAgICAgICBlbHNlIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZl
dmVyeXRoaW5tYXRoc3BhY2UiKQotICAgICAgICAgICAgbGVuZ3RoID0gLTI7Ci0gICAgICAgIGVs
c2UgaWYgKHN0cmluZyA9PSAibmVnYXRpdmV0aGlubWF0aHNwYWNlIikKLSAgICAgICAgICAgIGxl
bmd0aCA9IC0zOwotICAgICAgICBlbHNlIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZlbWVkaXVtbWF0
aHNwYWNlIikKLSAgICAgICAgICAgIGxlbmd0aCA9IC00OwotICAgICAgICBlbHNlIGlmIChzdHJp
bmcgPT0gIm5lZ2F0aXZldGhpY2ttYXRoc3BhY2UiKQotICAgICAgICAgICAgbGVuZ3RoID0gLTU7
Ci0gICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PSAibmVnYXRpdmV2ZXJ5dGhpY2ttYXRoc3BhY2Ui
KQotICAgICAgICAgICAgbGVuZ3RoID0gLTY7Ci0gICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PSAi
bmVnYXRpdmV2ZXJ5dmVyeXRoaWNrbWF0aHNwYWNlIikKLSAgICAgICAgICAgIGxlbmd0aCA9IC03
OyAgICAgICAgCi0gICAgfQotICAgIGlmIChsZW5ndGgpIHsKLSAgICAgICAgbGVuZ3RoVmFsdWUg
PSBsZW5ndGggKiBzdHlsZS0+Zm9udENhc2NhZGUoKS5zaXplKCkgLyAxODsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICBsZW5ndGhWYWx1ZSA9IHZh
bHVlOworICAgIHJldHVybiB0cnVlOwogfQogCiBPcHRpb25hbDxpbnQ+IFJlbmRlck1hdGhNTFRh
YmxlOjpmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmgKaW5kZXggNDk5YTk0NDlmZDFjMTVl
ZTFmZjIxOGFkYTk2NGZkZjg3OTFlNzdjMC4uNmRiNmJiNGI3ODM1ZThlMzc1YjZmNjY2ZjVhYTNm
ZWYyZDMyNjhlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MQmxvY2suaApAQCAtMjksNiArMjksNyBAQAogCiAjaWYgRU5BQkxFKE1BVEhN
TCkKIAorI2luY2x1ZGUgIk1hdGhNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJGbGV4aWJs
ZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiU3R5bGVJbmhlcml0
ZWREYXRhLmgiCkBAIC05NCw3ICs5NSw3IEBAIHByaXZhdGU6CiAKIC8vIFBhcnNpbmcgZnVuY3Rp
b25zIGZvciBNYXRoTUwgTGVuZ3RoIHZhbHVlcwogYm9vbCBwYXJzZU1hdGhNTExlbmd0aChjb25z
dCBTdHJpbmcmLCBMYXlvdXRVbml0JiwgY29uc3QgUmVuZGVyU3R5bGUqLCBib29sIGFsbG93TmVn
YXRpdmUgPSB0cnVlKTsKLWJvb2wgcGFyc2VNYXRoTUxOYW1lZFNwYWNlKGNvbnN0IFN0cmluZyYs
IExheW91dFVuaXQmLCBjb25zdCBSZW5kZXJTdHlsZSosIGJvb2wgYWxsb3dOZWdhdGl2ZSA9IHRy
dWUpOworTGF5b3V0VW5pdCB0b1VzZXJVbml0cyhjb25zdCBNYXRoTUxFbGVtZW50OjpMZW5ndGgm
LCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IExheW91dFVuaXQmIHJlZmVyZW5jZVZhbHVlKTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283147</attachid>
            <date>2016-07-08 06:45:06 -0700</date>
            <delta_ts>2016-07-11 13:40:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156792-20160708154430.patch</filename>
            <type>text/plain</type>
            <size>17007</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAyOTc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjAxZDUzMmZmZTYyMDg3
ZjlhMTUyMzViZjMyMWZkZjRlOWI0ZjExMy4uMTcyNmM1MTYzNzczNjU3MWRjYTA3YTA2NDljYmU0
ODFjYjU5NDkzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE2LTA3LTA4ICBGcmVk
ZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLm9yZz4KKworICAgICAgICBDcmVhdGUgYSBNYXRoTUxM
ZW5ndGggc3RydWN0IHRvIGhhbmRsZSB0aGUgcGFyc2luZyBvZiBNYXRoTUwgbGVuZ3RoLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NzkyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgaW50cm9kdWNl
IGEgc3RydWN0dXJlIGZvciBNYXRoTUwgbGVuZ3RocyB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUg
ZnV0dXJlIHRvIHN0b3JlIHRoZQorICAgICAgICBwYXJzZWQgdmFsdWVzIGluIHRoZSBNYXRoRWxl
bWVudCBjbGFzcy4gV2UgYWxzbyByZXdyaXRlIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIGZvciBNYXRo
TUwKKyAgICAgICAgbGVuZ3RocyBpbiBvcmRlciB0byBpbXByb3ZlIGVmZmljaWVuY3kgYW5kIGNv
ZGUgcmV1c2UuIFRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgaW50byB0aGUKKyAgICAgICAgTWF0aEVs
ZW1lbnQgY2xhc3MgYW5kIG9ubHkgdGhlIGNvbnZlcnNpb24gdG8gTGF5b3V0VW5pdCByZW1haW5z
IGluIHRoZSByZW5kZXJlciBjbGFzc2VzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYWxyZWFk
eSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogbWF0aG1sL01hdGhNTEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VOYW1lZFNwYWNlKTogSGVscGVyIGZ1
bmN0aW9uIHRvIHBhcnNlIGEgbmFtZWQgc3BhY2UuCisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxF
bGVtZW50OjpwYXJzZU1hdGhNTExlbmd0aCk6IFBhcnNpbmcgZnVuY3Rpb24gZm9yIE1hdGhNTCBs
ZW5ndGhzLgorICAgICAgICAqIG1hdGhtbC9NYXRoTUxFbGVtZW50Lmg6IERlY2xhcmUgbmV3IGZ1
bmN0aW9uIGFuZCBzdHJ1Y3R1cmUgdG8gaGFuZGxlIE1hdGhNTCBsZW5ndGhzLgorICAgICAgICAq
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6dG9Vc2VyVW5pdHMpOiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzb2x2ZSBhIE1hdGhNTCBsZW5n
dGguCisgICAgICAgIChXZWJDb3JlOjpwYXJzZU1hdGhNTExlbmd0aCk6IFJlbW92ZSB0aGUgb2xk
IHBhcnNpbmcgY29kZSBhbmQganVzdCB1c2UgTWF0aE1MRWxlbWVudDo6cGFyc2VNYXRoTUxMZW5n
dGggYW5kIHRvVXNlclVuaXRzIGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZU1hdGhN
TE5hbWVkU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MQmxvY2suaDogUmVtb3ZlIHVudXNlZCBmdW5jdGlvbi4KKwogMjAxNi0wNy0wOCAgRnJl
ZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CiAKICAgICAgICAgVXNlIFJhZGljYWwqIGNv
bnN0YW50cyBmcm9tIHRoZSBPcGVuVHlwZSBNQVRIIHRhYmxlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvbWF0aG1s
L01hdGhNTEVsZW1lbnQuY3BwCmluZGV4IGNmNTFkNGQwNGFmNDlhMDg3YTg2NmZkNjRhNGZmMWJk
MDVlZjc4MzYuLmQ4NzM2ODYwZmM5MDA1NjUwNTdjNmI0N2VhYzliNzJkNzgwMTQyNzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5jcHAKQEAgLTMwNSw2ICszMDUsMTI1IEBA
IHZvaWQgTWF0aE1MRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBjb25zdCBBdG9taWNTdHJpCiAgICAgU3R5bGVkRWxlbWVudDo6YXR0cmlidXRlQ2hh
bmdlZChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHJlYXNvbik7CiB9CiAKK3N0YXRpYyBpbmxp
bmUgU3RyaW5nVmlldyBza2lwTGVhZGluZ0FuZFRyYWlsaW5nV2hpdGVzcGFjZShjb25zdCBTdHJp
bmcmIHN0cmluZykKK3sKKyAgICB1bnNpZ25lZCBzdGFydCA9IDAsIHN0cmluZ0xlbmd0aCA9IHN0
cmluZy5sZW5ndGgoKTsKKyAgICB3aGlsZSAoc3RyaW5nTGVuZ3RoID4gMCAmJiBpc0hUTUxTcGFj
ZShzdHJpbmdbc3RhcnRdKSkgeworICAgICAgICBzdGFydCsrOworICAgICAgICBzdHJpbmdMZW5n
dGgtLTsKKyAgICB9CisgICAgd2hpbGUgKHN0cmluZ0xlbmd0aCA+IDAgJiYgaXNIVE1MU3BhY2Uo
c3RyaW5nW3N0YXJ0ICsgc3RyaW5nTGVuZ3RoIC0gMV0pKQorICAgICAgICBzdHJpbmdMZW5ndGgt
LTsKKyAgICByZXR1cm4gc3RyaW5nLnN1YnN0cmluZyhzdGFydCwgc3RyaW5nTGVuZ3RoKTsKK30K
KworTWF0aE1MRWxlbWVudDo6TGVuZ3RoIE1hdGhNTEVsZW1lbnQ6OnBhcnNlTnVtYmVyQW5kVW5p
dChjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCit7CisgICAgTGVuZ3RoVHlwZSBsZW5ndGhUeXBl
ID0gTGVuZ3RoVHlwZTo6VW5pdExlc3M7CisgICAgdW5zaWduZWQgc3RyaW5nTGVuZ3RoID0gc3Ry
aW5nLmxlbmd0aCgpOworICAgIFVDaGFyIGxhc3RDaGFyID0gc3RyaW5nW3N0cmluZ0xlbmd0aCAt
IDFdOworICAgIGlmIChsYXN0Q2hhciA9PSAnJScpIHsKKyAgICAgICAgbGVuZ3RoVHlwZSA9IExl
bmd0aFR5cGU6OlBlcmNlbnRhZ2U7CisgICAgICAgIHN0cmluZ0xlbmd0aC0tOworICAgIH0gZWxz
ZSBpZiAoc3RyaW5nTGVuZ3RoID49IDIpIHsKKyAgICAgICAgVUNoYXIgcGVudWx0aW1hdGVDaGFy
ID0gc3RyaW5nW3N0cmluZ0xlbmd0aCAtIDJdOworICAgICAgICBpZiAocGVudWx0aW1hdGVDaGFy
ID09ICdjJyAmJiBsYXN0Q2hhciA9PSAnbScpCisgICAgICAgICAgICBsZW5ndGhUeXBlID0gTGVu
Z3RoVHlwZTo6Q207CisgICAgICAgIGlmIChwZW51bHRpbWF0ZUNoYXIgPT0gJ2UnICYmIGxhc3RD
aGFyID09ICdtJykKKyAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5ndGhUeXBlOjpFbTsKKyAg
ICAgICAgZWxzZSBpZiAocGVudWx0aW1hdGVDaGFyID09ICdlJyAmJiBsYXN0Q2hhciA9PSAneCcp
CisgICAgICAgICAgICBsZW5ndGhUeXBlID0gTGVuZ3RoVHlwZTo6RXg7CisgICAgICAgIGVsc2Ug
aWYgKHBlbnVsdGltYXRlQ2hhciA9PSAnaScgJiYgbGFzdENoYXIgPT0gJ24nKQorICAgICAgICAg
ICAgbGVuZ3RoVHlwZSA9IExlbmd0aFR5cGU6OkluOworICAgICAgICBlbHNlIGlmIChwZW51bHRp
bWF0ZUNoYXIgPT0gJ20nICYmIGxhc3RDaGFyID09ICdtJykKKyAgICAgICAgICAgIGxlbmd0aFR5
cGUgPSBMZW5ndGhUeXBlOjpNbTsKKyAgICAgICAgZWxzZSBpZiAocGVudWx0aW1hdGVDaGFyID09
ICdwJyAmJiBsYXN0Q2hhciA9PSAnYycpCisgICAgICAgICAgICBsZW5ndGhUeXBlID0gTGVuZ3Ro
VHlwZTo6UGM7CisgICAgICAgIGVsc2UgaWYgKHBlbnVsdGltYXRlQ2hhciA9PSAncCcgJiYgbGFz
dENoYXIgPT0gJ3QnKQorICAgICAgICAgICAgbGVuZ3RoVHlwZSA9IExlbmd0aFR5cGU6OlB0Owor
ICAgICAgICBlbHNlIGlmIChwZW51bHRpbWF0ZUNoYXIgPT0gJ3AnICYmIGxhc3RDaGFyID09ICd4
JykKKyAgICAgICAgICAgIGxlbmd0aFR5cGUgPSBMZW5ndGhUeXBlOjpQeDsKKworICAgICAgICBp
ZiAobGVuZ3RoVHlwZSAhPSBMZW5ndGhUeXBlOjpVbml0TGVzcykKKyAgICAgICAgICAgIHN0cmlu
Z0xlbmd0aCAtPSAyOworICAgIH0KKworICAgIGJvb2wgb2s7CisgICAgZmxvYXQgbGVuZ3RoVmFs
dWUgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIHN0cmluZ0xlbmd0aCkudG9GbG9hdChvayk7CisgICAg
aWYgKCFvaykKKyAgICAgICAgcmV0dXJuIExlbmd0aCgpOworCisgICAgTGVuZ3RoIGxlbmd0aDsK
KyAgICBsZW5ndGgudHlwZSA9IGxlbmd0aFR5cGU7CisgICAgbGVuZ3RoLnZhbHVlID0gbGVuZ3Ro
VmFsdWU7CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKworTWF0aE1MRWxlbWVudDo6TGVuZ3RoIE1h
dGhNTEVsZW1lbnQ6OnBhcnNlTmFtZWRTcGFjZShjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCit7
CisgICAgLy8gTmFtZWQgc3BhY2UgdmFsdWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS4KKyAgICBpbnQg
bmFtZWRTcGFjZVZhbHVlOworICAgIGlmIChzdHJpbmcgPT0gInZlcnl2ZXJ5dGhpbm1hdGhzcGFj
ZSIpCisgICAgICAgIG5hbWVkU3BhY2VWYWx1ZSA9IDE7CisgICAgZWxzZSBpZiAoc3RyaW5nID09
ICJ2ZXJ5dGhpbm1hdGhzcGFjZSIpCisgICAgICAgIG5hbWVkU3BhY2VWYWx1ZSA9IDI7CisgICAg
ZWxzZSBpZiAoc3RyaW5nID09ICJ0aGlubWF0aHNwYWNlIikKKyAgICAgICAgbmFtZWRTcGFjZVZh
bHVlID0gMzsKKyAgICBlbHNlIGlmIChzdHJpbmcgPT0gIm1lZGl1bW1hdGhzcGFjZSIpCisgICAg
ICAgIG5hbWVkU3BhY2VWYWx1ZSA9IDQ7CisgICAgZWxzZSBpZiAoc3RyaW5nID09ICJ0aGlja21h
dGhzcGFjZSIpCisgICAgICAgIG5hbWVkU3BhY2VWYWx1ZSA9IDU7CisgICAgZWxzZSBpZiAoc3Ry
aW5nID09ICJ2ZXJ5dGhpY2ttYXRoc3BhY2UiKQorICAgICAgICBuYW1lZFNwYWNlVmFsdWUgPSA2
OworICAgIGVsc2UgaWYgKHN0cmluZyA9PSAidmVyeXZlcnl0aGlja21hdGhzcGFjZSIpCisgICAg
ICAgIG5hbWVkU3BhY2VWYWx1ZSA9IDc7CisgICAgZWxzZSBpZiAoc3RyaW5nID09ICJuZWdhdGl2
ZXZlcnl2ZXJ5dGhpbm1hdGhzcGFjZSIpCisgICAgICAgIG5hbWVkU3BhY2VWYWx1ZSA9IC0xOwor
ICAgIGVsc2UgaWYgKHN0cmluZyA9PSAibmVnYXRpdmV2ZXJ5dGhpbm1hdGhzcGFjZSIpCisgICAg
ICAgIG5hbWVkU3BhY2VWYWx1ZSA9IC0yOworICAgIGVsc2UgaWYgKHN0cmluZyA9PSAibmVnYXRp
dmV0aGlubWF0aHNwYWNlIikKKyAgICAgICAgbmFtZWRTcGFjZVZhbHVlID0gLTM7CisgICAgZWxz
ZSBpZiAoc3RyaW5nID09ICJuZWdhdGl2ZW1lZGl1bW1hdGhzcGFjZSIpCisgICAgICAgIG5hbWVk
U3BhY2VWYWx1ZSA9IC00OworICAgIGVsc2UgaWYgKHN0cmluZyA9PSAibmVnYXRpdmV0aGlja21h
dGhzcGFjZSIpCisgICAgICAgIG5hbWVkU3BhY2VWYWx1ZSA9IC01OworICAgIGVsc2UgaWYgKHN0
cmluZyA9PSAibmVnYXRpdmV2ZXJ5dGhpY2ttYXRoc3BhY2UiKQorICAgICAgICBuYW1lZFNwYWNl
VmFsdWUgPSAtNjsKKyAgICBlbHNlIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZldmVyeXZlcnl0aGlj
a21hdGhzcGFjZSIpCisgICAgICAgIG5hbWVkU3BhY2VWYWx1ZSA9IC03OworICAgIGVsc2UKKyAg
ICAgICAgcmV0dXJuIExlbmd0aCgpOworCisgICAgTGVuZ3RoIGxlbmd0aDsKKyAgICBsZW5ndGgu
dHlwZSA9IExlbmd0aFR5cGU6Ok1hdGhVbml0OworICAgIGxlbmd0aC52YWx1ZSA9IG5hbWVkU3Bh
Y2VWYWx1ZTsKKyAgICByZXR1cm4gbGVuZ3RoOworfQorCitNYXRoTUxFbGVtZW50OjpMZW5ndGgg
TWF0aE1MRWxlbWVudDo6cGFyc2VNYXRoTUxMZW5ndGgoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7
CisgICAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZSBNYXRoTUwgUmVsYXggTkcg
c2NoZW1hIGlzIGFzIGZvbGxvd3M6CisgICAgLy8KKyAgICAvLyAgIHBhdHRlcm4gPSAnXHMqKCgt
P1swLTldKihbMC05XVwuP3xcLlswLTldKVswLTldKihlW214XXxpbnxjbXxtbXxwW3h0Y118JSk/
KXwobmVnYXRpdmUpPygodmVyeSl7MCwyfXRoaShufGNrKXxtZWRpdW0pbWF0aHNwYWNlKVxzKicK
KyAgICAvLworICAgIC8vIFdlIGRvIG5vdCBwZXJmb3JtIGEgc3RyaWN0IHZlcmlmaWNhdGlvbiBv
ZiB0aGUgc3ludGF4IG9mIHdoaXRlc3BhY2VzIGFuZCBudW1iZXIuCisgICAgLy8gSW5zdGVhZCwg
d2UganVzdCB1c2UgaXNIVE1MU3BhY2UgYW5kIHRvRmxvYXQgdG8gcGFyc2UgdGhlc2UgcGFydHMu
CisKKyAgICAvLyBXZSBmaXJzdCBza2lwIHdoaXRlc3BhY2UgZnJvbSBib3RoIGVuZHMgb2YgdGhl
IHN0cmluZy4KKyAgICBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcgPSBza2lwTGVhZGluZ0FuZFRyYWls
aW5nV2hpdGVzcGFjZShzdHJpbmcpOworCisgICAgaWYgKHN0cmluZ1ZpZXcuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gTGVuZ3RoKCk7CisKKyAgICAvLyBXZSBjb25zaWRlciB0aGUgbW9zdCB0
eXBpY2FsIGNhc2U6IGEgbnVtYmVyIGZvbGxvd2VkIGJ5IGFuIG9wdGlvbmFsIHVuaXQuCisgICAg
VUNoYXIgZmlyc3RDaGFyID0gc3RyaW5nVmlld1swXTsKKyAgICBpZiAoaXNBU0NJSURpZ2l0KGZp
cnN0Q2hhcikgfHwgZmlyc3RDaGFyID09ICctJyB8fCBmaXJzdENoYXIgPT0gJy4nKQorICAgICAg
ICByZXR1cm4gcGFyc2VOdW1iZXJBbmRVbml0KHN0cmluZ1ZpZXcpOworCisgICAgLy8gT3RoZXJ3
aXNlLCB3ZSB0cnkgYW5kIHBhcnNlIGEgbmFtZWQgc3BhY2UuCisgICAgcmV0dXJuIHBhcnNlTmFt
ZWRTcGFjZShzdHJpbmdWaWV3KTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKE1BVEhNTCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5oCmluZGV4IDJhNWIzZWUwOWI4ZDQxOGQ1
M2RmNjk1ZWE1MzY4OGQxYTQwNDBlMzEuLmYzYTRkMTA0ZjYzYTIzNjYyZTBhZDA5YTYwODY2OGE2
YTVkZjI5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuaApAQCAtNTYsNiAr
NTYsMTYgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNUYWdOYW1lKGNvbnN0IE1hdGhNTFF1YWxp
ZmllZE5hbWUmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIGhhc0xvY2FsTmFtZShuYW1lLmxvY2FsTmFt
ZSgpKTsgfQogCisgICAgLy8gTWF0aE1MIGxlbmd0aHMgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9N
YXRoTUwzL2NoYXB0ZXIyLmh0bWwjZnVuZC51bml0cykKKyAgICAvLyBUZVgncyBNYXRoIFVuaXQg
aXMgdXNlZCBpbnRlcm5hbGx5IGZvciBuYW1lZCBzcGFjZXMgKDEgbXUgPSAxLzE4IGVtKS4KKyAg
ICAvLyBVbml0bGVzcyB2YWx1ZXMgYXJlIGludGVwcmV0ZWQgYXMgYSBtdWx0aXBsZSBvZiBhIHJl
ZmVyZW5jZSB2YWx1ZS4KKyAgICBlbnVtIGNsYXNzIExlbmd0aFR5cGUgeyBDbSwgRW0sIEV4LCBJ
biwgTWF0aFVuaXQsIE1tLCBQYXJzaW5nRmFpbGVkLCBQYywgUGVyY2VudGFnZSwgUHQsIFB4LCBV
bml0TGVzcyB9OworICAgIHN0cnVjdCBMZW5ndGggeworICAgICAgICBMZW5ndGhUeXBlIHR5cGUg
eyBMZW5ndGhUeXBlOjpQYXJzaW5nRmFpbGVkIH07CisgICAgICAgIGZsb2F0IHZhbHVlIHsgMCB9
OworICAgIH07CisgICAgc3RhdGljIExlbmd0aCBwYXJzZU1hdGhNTExlbmd0aChjb25zdCBTdHJp
bmcmKTsKKwogcHJvdGVjdGVkOgogICAgIE1hdGhNTEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQmKTsKIApAQCAtNzEsNiArODEsOCBAQCBwcm90ZWN0ZWQ6CiAK
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNlbGVjdGVkQ2hpbGQoKSB7IH0KKyAg
ICBzdGF0aWMgTGVuZ3RoIHBhcnNlTnVtYmVyQW5kVW5pdChjb25zdCBTdHJpbmdWaWV3Jik7Cisg
ICAgc3RhdGljIExlbmd0aCBwYXJzZU5hbWVkU3BhY2UoY29uc3QgU3RyaW5nVmlldyYpOwogfTsK
IAogaW5saW5lIGJvb2wgTm9kZTo6aGFzVGFnTmFtZShjb25zdCBNYXRoTUxRdWFsaWZpZWROYW1l
JiBuYW1lKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEJsb2NrLmNwcAppbmRleCA3ZjBjMmUwNmRkNjM5ZDI1M2JjZDllMDNhMmE3
MDg4Y2E0ZDhmOWQ2Li5iMDBjODRiOWM5ZDUzNTczNjg1NDgyNDgxM2U3NjY3ZmE1YWU4NWYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJs
b2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEJsb2NrLmNwcApAQCAtMzAsMTEgKzMwLDEyIEBACiAKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxC
bG9jay5oIgogCisjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCisjaW5jbHVkZSAiTWF0aE1MRWxl
bWVudC5oIgogI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIEVOQUJMRShERUJV
R19NQVRIX0xBWU9VVCkKICNpbmNsdWRlICJQYWludEluZm8uaCIKQEAgLTEzNywxNzcgKzEzOCw1
MiBAQCB2b2lkIFJlbmRlck1hdGhNTEJsb2NrOjpwYWludChQYWludEluZm8mIGluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIH0KICNlbmRpZiAvLyBFTkFCTEUoREVCVUdfTUFU
SF9MQVlPVVQpCiAKLS8vCi0vLyBUaGUgTWF0aE1MIHNwZWNpZmljYXRpb24gc2F5czoKLS8vICho
dHRwOi8vd3d3LnczLm9yZy9UUi9NYXRoTUwvY2hhcHRlcjIuaHRtbCNmdW5kLnVuaXRzKQotLy8K
LS8vICJNb3N0IHByZXNlbnRhdGlvbiBlbGVtZW50cyBoYXZlIGF0dHJpYnV0ZXMgdGhhdCBhY2Nl
cHQgdmFsdWVzIHJlcHJlc2VudGluZwotLy8gbGVuZ3RocyB0byBiZSB1c2VkIGZvciBzaXplLCBz
cGFjaW5nIG9yIHNpbWlsYXIgcHJvcGVydGllcy4gVGhlIHN5bnRheCBvZiBhCi0vLyBsZW5ndGgg
aXMgc3BlY2lmaWVkIGFzCi0vLwotLy8gbnVtYmVyIHwgbnVtYmVyIHVuaXQgfCBuYW1lZHNwYWNl
Ci0vLwotLy8gVGhlcmUgc2hvdWxkIGJlIG5vIHNwYWNlIGJldHdlZW4gdGhlIG51bWJlciBhbmQg
dGhlIHVuaXQgb2YgYSBsZW5ndGguIgotLy8KLS8vICJBIHRyYWlsaW5nICclJyByZXByZXNlbnRz
IGEgcGVyY2VudCBvZiB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlIGRlZmF1bHQKLS8vIHZhbHVlLCBv
ciBob3cgaXQgaXMgb2J0YWluZWQsIGlzIGxpc3RlZCBpbiB0aGUgdGFibGUgb2YgYXR0cmlidXRl
cyBmb3IgZWFjaAotLy8gZWxlbWVudC4gWy4uLl0gQSBudW1iZXIgd2l0aG91dCBhIHVuaXQgaXMg
aW50ZXByZXRlZCBhcyBhIG11bHRpcGxlIG9mIHRoZQotLy8gZGVmYXVsdCB2YWx1ZS4iCi0vLwot
Ly8gIlRoZSBwb3NzaWJsZSB1bml0cyBpbiBNYXRoTUwgYXJlOgotLy8KLS8vIFVuaXQgRGVzY3Jp
cHRpb24KLS8vIGVtICAgYW4gZW0gKGZvbnQtcmVsYXRpdmUgdW5pdCB0cmFkaXRpb25hbGx5IHVz
ZWQgZm9yIGhvcml6b250YWwgbGVuZ3RocykKLS8vIGV4ICAgYW4gZXggKGZvbnQtcmVsYXRpdmUg
dW5pdCB0cmFkaXRpb25hbGx5IHVzZWQgZm9yIHZlcnRpY2FsIGxlbmd0aHMpCi0vLyBweCAgIHBp
eGVscywgb3Igc2l6ZSBvZiBhIHBpeGVsIGluIHRoZSBjdXJyZW50IGRpc3BsYXkKLS8vIGluICAg
aW5jaGVzICgxIGluY2ggPSAyLjU0IGNlbnRpbWV0ZXJzKQotLy8gY20gICBjZW50aW1ldGVycwot
Ly8gbW0gICBtaWxsaW1ldGVycwotLy8gcHQgICBwb2ludHMgKDEgcG9pbnQgPSAxLzcyIGluY2gp
Ci0vLyBwYyAgIHBpY2FzICgxIHBpY2EgPSAxMiBwb2ludHMpCi0vLyAlICAgIHBlcmNlbnRhZ2Ug
b2YgZGVmYXVsdCB2YWx1ZSIKLS8vCi0vLyBUaGUgbnVtYmVycyBhcmUgZGVmaW5lZCB0aGF0IHdh
eToKLS8vIC0gdW5zaWduZWQtbnVtYmVyOiAiYSBzdHJpbmcgb2YgZGVjaW1hbCBkaWdpdHMgd2l0
aCB1cCB0byBvbmUgZGVjaW1hbCBwb2ludAotLy8gICAoVSswMDJFKSwgcmVwcmVzZW50aW5nIGEg
bm9uLW5lZ2F0aXZlIHRlcm1pbmF0aW5nIGRlY2ltYWwgbnVtYmVyIChhIHR5cGUgb2YKLS8vICAg
cmF0aW9uYWwgbnVtYmVyKSIKLS8vIC0gbnVtYmVyOiAiYW4gb3B0aW9uYWwgcHJlZml4IG9mICct
JyAoVSswMDJEKSwgZm9sbG93ZWQgYnkgYW4gdW5zaWduZWQKLS8vICAgbnVtYmVyLCByZXByZXNl
bnRpbmcgYSB0ZXJtaW5hdGluZyBkZWNpbWFsIG51bWJlciAoYSB0eXBlIG9mIHJhdGlvbmFsCi0v
LyAgIG51bWJlcikiCi0vLwotYm9vbCBwYXJzZU1hdGhNTExlbmd0aChjb25zdCBTdHJpbmcmIHN0
cmluZywgTGF5b3V0VW5pdCYgbGVuZ3RoVmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwg
Ym9vbCBhbGxvd05lZ2F0aXZlKQorTGF5b3V0VW5pdCB0b1VzZXJVbml0cyhjb25zdCBNYXRoTUxF
bGVtZW50OjpMZW5ndGgmIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBM
YXlvdXRVbml0JiByZWZlcmVuY2VWYWx1ZSkKIHsKLSAgICBTdHJpbmcgcyA9IHN0cmluZy5zaW1w
bGlmeVdoaXRlU3BhY2UoKTsKLQotICAgIGludCBzdHJpbmdMZW5ndGggPSBzLmxlbmd0aCgpOwot
ICAgIGlmICghc3RyaW5nTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
cGFyc2VNYXRoTUxOYW1lZFNwYWNlKHMsIGxlbmd0aFZhbHVlLCBzdHlsZSwgYWxsb3dOZWdhdGl2
ZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgU3RyaW5nQnVpbGRlciBudW1iZXI7Ci0g
ICAgU3RyaW5nIHVuaXQ7Ci0KLSAgICAvLyBUaGlzIHZlcmlmaWVzIHdoZXRoZXIgdGhlIG5lZ2F0
aXZlIHNpZ24gaXMgdGhlcmUuCi0gICAgaW50IGkgPSAwOwotICAgIFVDaGFyIGMgPSBzWzBdOwot
ICAgIGlmIChjID09ICctJykgewotICAgICAgICBudW1iZXIuYXBwZW5kKGMpOwotICAgICAgICBp
Kys7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBnYXRoZXJzIHVwIGNoYXJhY3RlcnMgdGhhdCBtYWtl
IHVwIHRoZSBudW1iZXIuCi0gICAgYm9vbCBnb3REb3QgPSBmYWxzZTsKLSAgICBmb3IgKCA7IGkg
PCBzdHJpbmdMZW5ndGg7IGkrKykgewotICAgICAgICBjID0gc1tpXTsKLSAgICAgICAgLy8gVGhl
IHN0cmluZyBpcyBpbnZhbGlkIGlmIGl0IGNvbnRhaW5zIHR3byBkb3RzLgotICAgICAgICBpZiAo
Z290RG90ICYmIGMgPT0gJy4nKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoYyA9PSAnLicpCi0gICAgICAgICAgICBnb3REb3QgPSB0cnVlOwotICAgICAgICBlbHNlIGlm
ICghaXNBU0NJSURpZ2l0KGMpKSB7Ci0gICAgICAgICAgICB1bml0ID0gcy5zdWJzdHJpbmcoaSwg
c3RyaW5nTGVuZ3RoIC0gaSk7Ci0gICAgICAgICAgICAvLyBTb21lIGF1dGhvcnMgbGVhdmUgYmxh
bmtzIGJlZm9yZSB0aGUgdW5pdCwgYnV0IHRoYXQgc2hvdWxkbid0Ci0gICAgICAgICAgICAvLyBi
ZSBhbGxvd2VkLCBzbyBkb24ndCBzaW1wbGlmeVdoaXRlc3BhY2Ugb24gJ3VuaXQnLgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbnVtYmVyLmFwcGVuZChjKTsKKyAgICBz
d2l0Y2ggKGxlbmd0aC50eXBlKSB7CisgICAgY2FzZSBNYXRoTUxFbGVtZW50OjpMZW5ndGhUeXBl
OjpDbToKKyAgICAgICAgcmV0dXJuIGxlbmd0aC52YWx1ZSAqIGNzc1BpeGVsc1BlckluY2ggLyAy
LjU0ZjsKKyAgICBjYXNlIE1hdGhNTEVsZW1lbnQ6Okxlbmd0aFR5cGU6OkVtOgorICAgICAgICBy
ZXR1cm4gbGVuZ3RoLnZhbHVlICogc3R5bGUuZm9udENhc2NhZGUoKS5zaXplKCk7CisgICAgY2Fz
ZSBNYXRoTUxFbGVtZW50OjpMZW5ndGhUeXBlOjpFeDoKKyAgICAgICAgcmV0dXJuIGxlbmd0aC52
YWx1ZSAqIHN0eWxlLmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOworICAgIGNhc2UgTWF0aE1MRWxl
bWVudDo6TGVuZ3RoVHlwZTo6SW46CisgICAgICAgIHJldHVybiBsZW5ndGgudmFsdWUgKiBjc3NQ
aXhlbHNQZXJJbmNoOworICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6TWF0aFVu
aXQ6CisgICAgICAgIHJldHVybiBsZW5ndGgudmFsdWUgKiBzdHlsZS5mb250Q2FzY2FkZSgpLnNp
emUoKSAvIDE4OworICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6TW06CisgICAg
ICAgIHJldHVybiBsZW5ndGgudmFsdWUgKiBjc3NQaXhlbHNQZXJJbmNoIC8gMjUuNGY7CisgICAg
Y2FzZSBNYXRoTUxFbGVtZW50OjpMZW5ndGhUeXBlOjpQYzoKKyAgICAgICAgcmV0dXJuIGxlbmd0
aC52YWx1ZSAqIGNzc1BpeGVsc1BlckluY2ggLyA2OworICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6
TGVuZ3RoVHlwZTo6UGVyY2VudGFnZToKKyAgICAgICAgcmV0dXJuIHJlZmVyZW5jZVZhbHVlICog
bGVuZ3RoLnZhbHVlIC8gMTAwOworICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6
UHQ6CisgICAgICAgIHJldHVybiBsZW5ndGgudmFsdWUgKiBjc3NQaXhlbHNQZXJJbmNoIC8gNzI7
CisgICAgY2FzZSBNYXRoTUxFbGVtZW50OjpMZW5ndGhUeXBlOjpQeDoKKyAgICAgICAgcmV0dXJu
IGxlbmd0aC52YWx1ZTsKKyAgICBjYXNlIE1hdGhNTEVsZW1lbnQ6Okxlbmd0aFR5cGU6OlVuaXRM
ZXNzOgorICAgICAgICByZXR1cm4gcmVmZXJlbmNlVmFsdWUgKiBsZW5ndGgudmFsdWU7CisgICAg
Y2FzZSBNYXRoTUxFbGVtZW50OjpMZW5ndGhUeXBlOjpQYXJzaW5nRmFpbGVkOgorICAgICAgICBy
ZXR1cm4gcmVmZXJlbmNlVmFsdWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiByZWZlcmVuY2VWYWx1ZTsKICAgICB9Cit9CiAKLSAg
ICAvLyBDb252ZXJ0IG51bWJlciB0byBmbG9hdGluZyBwb2ludAotICAgIGJvb2wgb2s7Ci0gICAg
ZmxvYXQgZmxvYXRWYWx1ZSA9IG51bWJlci50b1N0cmluZygpLnRvRmxvYXQoJm9rKTsKLSAgICBp
ZiAoIW9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGZsb2F0VmFsdWUgPCAwICYm
ICFhbGxvd05lZ2F0aXZlKQorYm9vbCBwYXJzZU1hdGhNTExlbmd0aChjb25zdCBTdHJpbmcmIHN0
cmluZywgTGF5b3V0VW5pdCYgbGVuZ3RoVmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwg
Ym9vbCBhbGxvd05lZ2F0aXZlKQoreworICAgIE1hdGhNTEVsZW1lbnQ6Okxlbmd0aCBsZW5ndGgg
PSBNYXRoTUxFbGVtZW50OjpwYXJzZU1hdGhNTExlbmd0aChzdHJpbmcpOworICAgIGlmIChsZW5n
dGgudHlwZSA9PSBNYXRoTUxFbGVtZW50OjpMZW5ndGhUeXBlOjpQYXJzaW5nRmFpbGVkKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAodW5pdC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
Ly8gbm8gZXhwbGljaXQgdW5pdCwgdGhpcyBpcyBhIG51bWJlciB0aGF0IHdpbGwgYWN0IGFzIGEg
bXVsdGlwbGllcgotICAgICAgICBsZW5ndGhWYWx1ZSAqPSBmbG9hdFZhbHVlOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHVuaXQgPT0gIiUiKSB7Ci0gICAgICAgIGxlbmd0
aFZhbHVlICo9IGZsb2F0VmFsdWUgLyAxMDA7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICBpZiAodW5pdCA9PSAiZW0iKSB7Ci0gICAgICAgIGxlbmd0aFZhbHVlID0gZmxvYXRWYWx1
ZSAqIHN0eWxlLT5mb250Q2FzY2FkZSgpLnNpemUoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIGlmICh1bml0ID09ICJleCIpIHsKLSAgICAgICAgbGVuZ3RoVmFsdWUgPSBmbG9h
dFZhbHVlICogc3R5bGUtPmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHVuaXQgPT0gInB4IikgewotICAgICAgICBsZW5ndGhWYWx1
ZSA9IGZsb2F0VmFsdWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAodW5p
dCA9PSAicHQiKSB7Ci0gICAgICAgIGxlbmd0aFZhbHVlID0gNCAqIChmbG9hdFZhbHVlIC8gMyk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAodW5pdCA9PSAicGMiKSB7Ci0g
ICAgICAgIGxlbmd0aFZhbHVlID0gMTYgKiBmbG9hdFZhbHVlOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgaWYgKHVuaXQgPT0gImluIikgewotICAgICAgICBsZW5ndGhWYWx1ZSA9
IDk2ICogZmxvYXRWYWx1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICh1
bml0ID09ICJjbSIpIHsKLSAgICAgICAgbGVuZ3RoVmFsdWUgPSA5NiAqIChmbG9hdFZhbHVlIC8g
Mi41NCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAodW5pdCA9PSAibW0i
KSB7Ci0gICAgICAgIGxlbmd0aFZhbHVlID0gOTYgKiAoZmxvYXRWYWx1ZSAvIDI1LjQpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgTGF5b3V0VW5pdCB2YWx1ZSA9IHRvVXNlclVu
aXRzKGxlbmd0aCwgKnN0eWxlLCBsZW5ndGhWYWx1ZSk7CiAKLSAgICAvLyB1bmV4cGVjdGVkIHVu
aXQKLSAgICByZXR1cm4gZmFsc2U7Ci19CisgICAgaWYgKCFhbGxvd05lZ2F0aXZlICYmIHZhbHVl
IDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi1ib29sIHBhcnNlTWF0aE1MTmFtZWRTcGFj
ZShjb25zdCBTdHJpbmcmIHN0cmluZywgTGF5b3V0VW5pdCYgbGVuZ3RoVmFsdWUsIGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSwgYm9vbCBhbGxvd05lZ2F0aXZlKQotewotICAgIGZsb2F0IGxlbmd0
aCA9IDA7Ci0gICAgLy8gU2VlIGlmIGl0IGlzIG9uZSBvZiB0aGUgbmFtZWRzcGFjZXMgKHJhbmdp
bmcgLTcvMThlbSwgLTYvMTgsIC4uLiA3LzE4ZW0pCi0gICAgaWYgKHN0cmluZyA9PSAidmVyeXZl
cnl0aGlubWF0aHNwYWNlIikKLSAgICAgICAgbGVuZ3RoID0gMTsKLSAgICBlbHNlIGlmIChzdHJp
bmcgPT0gInZlcnl0aGlubWF0aHNwYWNlIikKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICBlbHNl
IGlmIChzdHJpbmcgPT0gInRoaW5tYXRoc3BhY2UiKQotICAgICAgICBsZW5ndGggPSAzOwotICAg
IGVsc2UgaWYgKHN0cmluZyA9PSAibWVkaXVtbWF0aHNwYWNlIikKLSAgICAgICAgbGVuZ3RoID0g
NDsKLSAgICBlbHNlIGlmIChzdHJpbmcgPT0gInRoaWNrbWF0aHNwYWNlIikKLSAgICAgICAgbGVu
Z3RoID0gNTsKLSAgICBlbHNlIGlmIChzdHJpbmcgPT0gInZlcnl0aGlja21hdGhzcGFjZSIpCi0g
ICAgICAgIGxlbmd0aCA9IDY7Ci0gICAgZWxzZSBpZiAoc3RyaW5nID09ICJ2ZXJ5dmVyeXRoaWNr
bWF0aHNwYWNlIikKLSAgICAgICAgbGVuZ3RoID0gNzsKLSAgICBlbHNlIGlmIChhbGxvd05lZ2F0
aXZlKSB7Ci0gICAgICAgIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZldmVyeXZlcnl0aGlubWF0aHNw
YWNlIikKLSAgICAgICAgICAgIGxlbmd0aCA9IC0xOwotICAgICAgICBlbHNlIGlmIChzdHJpbmcg
PT0gIm5lZ2F0aXZldmVyeXRoaW5tYXRoc3BhY2UiKQotICAgICAgICAgICAgbGVuZ3RoID0gLTI7
Ci0gICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PSAibmVnYXRpdmV0aGlubWF0aHNwYWNlIikKLSAg
ICAgICAgICAgIGxlbmd0aCA9IC0zOwotICAgICAgICBlbHNlIGlmIChzdHJpbmcgPT0gIm5lZ2F0
aXZlbWVkaXVtbWF0aHNwYWNlIikKLSAgICAgICAgICAgIGxlbmd0aCA9IC00OwotICAgICAgICBl
bHNlIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZldGhpY2ttYXRoc3BhY2UiKQotICAgICAgICAgICAg
bGVuZ3RoID0gLTU7Ci0gICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PSAibmVnYXRpdmV2ZXJ5dGhp
Y2ttYXRoc3BhY2UiKQotICAgICAgICAgICAgbGVuZ3RoID0gLTY7Ci0gICAgICAgIGVsc2UgaWYg
KHN0cmluZyA9PSAibmVnYXRpdmV2ZXJ5dmVyeXRoaWNrbWF0aHNwYWNlIikKLSAgICAgICAgICAg
IGxlbmd0aCA9IC03OwotICAgIH0KLSAgICBpZiAobGVuZ3RoKSB7Ci0gICAgICAgIGxlbmd0aFZh
bHVlID0gbGVuZ3RoICogc3R5bGUtPmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgbGVuZ3RoVmFsdWUg
PSB2YWx1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogT3B0aW9uYWw8aW50PiBSZW5kZXJNYXRo
TUxUYWJsZTo6Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCmluZGV4IDE0NTZjOTE1YTUy
ODBjMGQzMTQ0NTBlZTY3MmVhOGQxZWY0M2U2MDUuLjliM2IzZTFhMzg2NzU1YmY3Mzc2ZTBkYWU3
YzkzNGE0OGI4YjZlMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTEJsb2NrLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lmIEVOQUJMRShN
QVRITUwpCiAKKyNpbmNsdWRlICJNYXRoTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiTWF0aE1MU3R5
bGUuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgi
CkBAIC0xMTYsNyArMTE3LDcgQEAgcHJpdmF0ZToKIAogLy8gUGFyc2luZyBmdW5jdGlvbnMgZm9y
IE1hdGhNTCBMZW5ndGggdmFsdWVzCiBib29sIHBhcnNlTWF0aE1MTGVuZ3RoKGNvbnN0IFN0cmlu
ZyYsIExheW91dFVuaXQmLCBjb25zdCBSZW5kZXJTdHlsZSosIGJvb2wgYWxsb3dOZWdhdGl2ZSA9
IHRydWUpOwotYm9vbCBwYXJzZU1hdGhNTE5hbWVkU3BhY2UoY29uc3QgU3RyaW5nJiwgTGF5b3V0
VW5pdCYsIGNvbnN0IFJlbmRlclN0eWxlKiwgYm9vbCBhbGxvd05lZ2F0aXZlID0gdHJ1ZSk7CitM
YXlvdXRVbml0IHRvVXNlclVuaXRzKGNvbnN0IE1hdGhNTEVsZW1lbnQ6Okxlbmd0aCYsIGNvbnN0
IFJlbmRlclN0eWxlJiwgY29uc3QgTGF5b3V0VW5pdCYgcmVmZXJlbmNlVmFsdWUpOwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAK
</data>
<flag name="review"
          id="306864"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
          </attachment>
      

    </bug>

</bugzilla>