<?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>213929</bug_id>
          
          <creation_ts>2020-07-03 10:37:59 -0700</creation_ts>
          <short_desc>Convert DateComponents to use StringParsingBuffer</short_desc>
          <delta_ts>2020-07-30 19:06:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>andersca</cc>
    
    <cc>darin</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1668593</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-03 10:37:59 -0700</bug_when>
    <thetext>Convert DateComponents to use StringParsingBuffer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668594</commentid>
    <comment_count>1</comment_count>
      <attachid>403465</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-03 10:41:38 -0700</bug_when>
    <thetext>Created attachment 403465
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676423</commentid>
    <comment_count>2</comment_count>
      <attachid>405583</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-30 09:58:24 -0700</bug_when>
    <thetext>Created attachment 405583
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676456</commentid>
    <comment_count>3</comment_count>
      <attachid>405591</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-30 11:03:59 -0700</bug_when>
    <thetext>Created attachment 405591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676493</commentid>
    <comment_count>4</comment_count>
      <attachid>405591</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-30 12:37:49 -0700</bug_when>
    <thetext>Comment on attachment 405591
Patch

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

&gt; Source/WebCore/platform/DateComponents.cpp:44
&gt; +// HTML5 uses ISO-8601 format with year &gt;= 1. Gregorian calendar started in

Continuing to call the HTML specification &quot;HTML5&quot; is quaint.

&gt; Source/WebCore/platform/DateComponents.cpp:112
&gt; +    skipWhile&lt;CharacterType, isASCIIDigit&gt;(buffer);

Is there no way to make this idiom figure out the character type from the buffer argument?

&gt; Source/WebCore/platform/DateComponents.cpp:120
&gt; +    if (maximumNumberOfDigitsToParse &gt; buffer.lengthRemaining() || !maximumNumberOfDigitsToParse)
&gt; +        return WTF::nullopt;

Subtly awkward naming that caller must *not* pass in a large value for maximumNumberOfDigitsToParse. Doesn&apos;t really feel like it’s a maximum from the caller’s point of view. The function could clamp instead of just returning.

&gt; Source/WebCore/platform/DateComponents.cpp:142
&gt; +    if (value &amp;&amp; (*value &lt; minimumValue || *value &gt; maximumValue))

I would have written:

    if (!(value &amp;&amp; *value &gt;= minimumValue &amp;&amp; *value &lt;= maximumValue))

Handles null in a different way, but I slightly prefer it. I think one reason is that this idiom does the right thing with non-finite floating point values. Also if refactoring to use a function, it’s more logical to have an &quot;is good&quot; function than an &quot;is bad&quot; function. In fact, I kind of wish the WTF::String::isNull function had the opposite sense and had some awesome name for the same reason.

&gt; Source/WebCore/platform/DateComponents.cpp:465
&gt; +    StringParsingBuffer&lt;CharacterType&gt; temporaryBuffer = buffer;

Maybe just use auto here?

&gt; Source/WebCore/platform/DateComponents.cpp:485
&gt; +                        // Regardless of the number of digits, we only ever parse at most 3. All other
&gt; +                        // digits after that are ignored, but the buffer is incremented as if they were
&gt; +                        // all parsed.

I don’t see the code that increments the buffer as if they were all parsed.

&gt; Source/WebCore/platform/DateComponents.cpp:659
&gt; +    if (doubleYear &lt; minimumYear || maximumYear &lt; doubleYear)

Same thought about writing this in the !&quot;is good&quot; way instead of the &quot;is bad&quot; way. And here it’s literally floating point, so reversing it would let us optimize by removing the std::isfinite check above.

&gt; Source/WebCore/platform/DateComponents.cpp:697
&gt; +        if (m_year &lt;= minimumYear)

Fascinating that this is &quot;&lt;=&quot;. I’m sure we have test coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676550</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-30 14:25:55 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #4)
&gt; Comment on attachment 405591 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=405591&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/DateComponents.cpp:44
&gt; &gt; +// HTML5 uses ISO-8601 format with year &gt;= 1. Gregorian calendar started in
&gt; 
&gt; Continuing to call the HTML specification &quot;HTML5&quot; is quaint.

Yeah. Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/DateComponents.cpp:112
&gt; &gt; +    skipWhile&lt;CharacterType, isASCIIDigit&gt;(buffer);
&gt; 
&gt; Is there no way to make this idiom figure out the character type from the
&gt; buffer argument?

I&apos;ll see, but so far, unless we convert to using function objects rather than function pointers, we can&apos;t deduce CharacterType.

&gt; 
&gt; &gt; Source/WebCore/platform/DateComponents.cpp:120
&gt; &gt; +    if (maximumNumberOfDigitsToParse &gt; buffer.lengthRemaining() || !maximumNumberOfDigitsToParse)
&gt; &gt; +        return WTF::nullopt;
&gt; 
&gt; Subtly awkward naming that caller must *not* pass in a large value for
&gt; maximumNumberOfDigitsToParse. Doesn&apos;t really feel like it’s a maximum from
&gt; the caller’s point of view. The function could clamp instead of just
&gt; returning.

I think this whole maximum number concept can be removed eventually.

&gt; 
&gt; &gt; Source/WebCore/platform/DateComponents.cpp:142
&gt; &gt; +    if (value &amp;&amp; (*value &lt; minimumValue || *value &gt; maximumValue))
&gt; 
&gt; I would have written:
&gt; 
&gt;     if (!(value &amp;&amp; *value &gt;= minimumValue &amp;&amp; *value &lt;= maximumValue))
&gt; 
&gt; Handles null in a different way, but I slightly prefer it. I think one
&gt; reason is that this idiom does the right thing with non-finite floating
&gt; point values. Also if refactoring to use a function, it’s more logical to
&gt; have an &quot;is good&quot; function than an &quot;is bad&quot; function. In fact, I kind of
&gt; wish the WTF::String::isNull function had the opposite sense and had some
&gt; awesome name for the same reason.

Ok. Changed.

&gt; 
&gt; &gt; Source/WebCore/platform/DateComponents.cpp:465
&gt; &gt; +    StringParsingBuffer&lt;CharacterType&gt; temporaryBuffer = buffer;
&gt; 
&gt; Maybe just use auto here?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/DateComponents.cpp:485
&gt; &gt; +                        // Regardless of the number of digits, we only ever parse at most 3. All other
&gt; &gt; +                        // digits after that are ignored, but the buffer is incremented as if they were
&gt; &gt; +                        // all parsed.
&gt; 
&gt; I don’t see the code that increments the buffer as if they were all parsed.

It&apos;s right below. 

                    // Only after successfully parsing and validating &apos;millisecond&apos;, do we increment the real buffer.
                    buffer += 1 + digitsLength;


&gt; 
&gt; &gt; Source/WebCore/platform/DateComponents.cpp:659
&gt; &gt; +    if (doubleYear &lt; minimumYear || maximumYear &lt; doubleYear)
&gt; 
&gt; Same thought about writing this in the !&quot;is good&quot; way instead of the &quot;is
&gt; bad&quot; way. And here it’s literally floating point, so reversing it would let
&gt; us optimize by removing the std::isfinite check above.

Nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676552</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-30 14:29:07 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #5)
&gt; (In reply to Darin Adler from comment #4)
&gt; &gt; Comment on attachment 405591 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=405591&amp;action=review
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/DateComponents.cpp:112
&gt; &gt; &gt; +    skipWhile&lt;CharacterType, isASCIIDigit&gt;(buffer);
&gt; &gt; 
&gt; &gt; Is there no way to make this idiom figure out the character type from the
&gt; &gt; buffer argument?
&gt; 
&gt; I&apos;ll see, but so far, unless we convert to using function objects rather
&gt; than function pointers, we can&apos;t deduce CharacterType.
&gt; 

I guess an alternative option would be to just stop trying to deduce CharacterType and have two overloads of skipWhile, one for LChar, one for UChar:

template&lt;bool characterPredicate(LChar)&gt; void skipWhile(const LChar*&amp; position, const LChar* end)
{
    while (position &lt; end &amp;&amp; characterPredicate(*position))
        ++position;
}

template&lt;bool characterPredicate(UChar)&gt; void skipWhile(const UChar*&amp; position, const UChar* end)
{
    while (position &lt; end &amp;&amp; characterPredicate(*position))
        ++position;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676554</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-30 14:29:41 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #6)
&gt; (In reply to Sam Weinig from comment #5)
&gt; &gt; (In reply to Darin Adler from comment #4)
&gt; &gt; &gt; Comment on attachment 405591 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=405591&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/DateComponents.cpp:112
&gt; &gt; &gt; &gt; +    skipWhile&lt;CharacterType, isASCIIDigit&gt;(buffer);
&gt; &gt; &gt; 
&gt; &gt; &gt; Is there no way to make this idiom figure out the character type from the
&gt; &gt; &gt; buffer argument?
&gt; &gt; 
&gt; &gt; I&apos;ll see, but so far, unless we convert to using function objects rather
&gt; &gt; than function pointers, we can&apos;t deduce CharacterType.
&gt; &gt; 
&gt; 
&gt; I guess an alternative option would be to just stop trying to deduce
&gt; CharacterType and have two overloads of skipWhile, one for LChar, one for
&gt; UChar:
&gt; 
&gt; template&lt;bool characterPredicate(LChar)&gt; void skipWhile(const LChar*&amp;
&gt; position, const LChar* end)
&gt; {
&gt;     while (position &lt; end &amp;&amp; characterPredicate(*position))
&gt;         ++position;
&gt; }
&gt; 
&gt; template&lt;bool characterPredicate(UChar)&gt; void skipWhile(const UChar*&amp;
&gt; position, const UChar* end)
&gt; {
&gt;     while (position &lt; end &amp;&amp; characterPredicate(*position))
&gt;         ++position;
&gt; }

This is untested, might not compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676556</commentid>
    <comment_count>8</comment_count>
      <attachid>405619</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-30 14:31:00 -0700</bug_when>
    <thetext>Created attachment 405619
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676665</commentid>
    <comment_count>9</comment_count>
      <attachid>405645</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-30 17:50:20 -0700</bug_when>
    <thetext>Created attachment 405645
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676669</commentid>
    <comment_count>10</comment_count>
      <attachid>405647</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-30 18:05:14 -0700</bug_when>
    <thetext>Created attachment 405647
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676681</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-30 19:05:41 -0700</bug_when>
    <thetext>Committed r265126: &lt;https://trac.webkit.org/changeset/265126&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 405647.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676682</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-30 19:06:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/66359344&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403465</attachid>
            <date>2020-07-03 10:41:38 -0700</date>
            <delta_ts>2020-07-30 09:58:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213929-20200703104138.patch</filename>
            <type>text/plain</type>
            <size>26537</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDIwLTA3LTAzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBDb252ZXJ0IERhdGVDb21wb25lbnRz
IHRvIHVzZSBTdHJpbmdQYXJzaW5nQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM5MjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAtIFN3aXRjaGVzIHN0cmluZyBwYXJzaW5nIGluIERhdGVDb21w
b25lbnRzIHRvIHVzaW5nIFN0cmluZ1BhcnNpbmdCdWZmZXIsCisgICAgICAgICAgbWFraW5nIHVz
ZSBvZiBQYXJzaW5nVXRpbGl0aWVzIHRvIHN0cmVhbWxpbmUgLyBzaW1wbGlmeSB0aGUgY29kZS4K
KyAgICAgICAgLSBNb3ZlcyBhIGZldyBjb25zdGFudCB2YWx1ZXMgb25seSB1c2VkIGluIERhdGVD
b21wb25lbnRzLmNwcCB0byBEYXRlQ29tcG9uZW50cy5jcHAKKyAgICAgICAgLSBSZW5hbWUgdG9J
bnQgaW4gRGF0ZUNvbXBvbmVudHMuY3BwIHRvIHBhcnNlSW50LCBhbmQgaGF2ZSB1c2UgYW4gT3B0
aW9uYWwgcmV0dXJuCisgICAgICAgICAgdmFsdWUgcmF0aGVyIHRoYW4gYm9vbCArIG91dC1wYXJh
bWV0ZXIuCisgICAgICAgIC0gQWRkIG5ldyBwYXJzZUludFdpdGhpbkxpbWl0cyB0aGF0IGFsc28g
Y2hlY2tzIHRoYXQgcGFyc2VkIHZhbHVlIGlzIHdpdGhpbiBzcGVjZmllZAorICAgICAgICAgIGxp
bWl0cywgYXMgdGhpcyBpcyB3aGF0IGFsbW9zdCBhbGwgb2YgdGhlIGludCBwYXJzaW5nIGluIERh
dGVDb21wb25lbnRzIG5lZWRzLgorCisgICAgICAgICogcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y291bnREaWdpdHMpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VJbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VJbnRXaXRoaW5MaW1pdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlWWVhcik6CisgICAgICAgIChXZWJD
b3JlOjp3aXRoaW5IVE1MRGF0ZUxpbWl0cyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcm9t
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ01v
bnRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ0RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nV2Vlayk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdUaW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ0RhdGVUaW1lTG9jYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nRGF0ZVRpbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlVGltZVpvbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlTW9udGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29t
cG9uZW50czo6cGFyc2VXZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpw
YXJzZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZVRp
bWVMb2NhbCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6cGFyc2VEYXRlVGlt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TW9udGhzU2luY2VFcG9j
aCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2lu
Y2VFcG9jaEZvcldlZWspOgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL0RhdGVDb21wb25lbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
Q29tcG9uZW50czo6bWluaW11bVllYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZUNvbXBvbmVudHM6Om1heGltdW1ZZWFyKTogRGVsZXRlZC4KKwogMjAyMC0wNy0wMyAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgU3BsaXQgY29sb3IgY29udmVyc2lv
biBmdW5jdGlvbnMgb3V0IG9mIENvbG9yVXRpbGl0aWVzLmgvY3BwIGludG8gdGhlaXIgb3duIGZp
bGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwCShy
ZXZpc2lvbiAyNjM5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDI1ICszMSwzNSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCiAKKyNpbmNsdWRlICJQYXJzaW5nVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUu
aD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCisvLyBIVE1MNSB1c2VzIElTTy04NjAxIGZvcm1hdCB3aXRoIHllYXIgPj0gMS4gR3JlZ29y
aWFuIGNhbGVuZGFyIHN0YXJ0ZWQgaW4KKy8vIDE1ODIuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gc3Vw
cG9ydCAwMDAxLTAxLTAxIGluIEdyZWdvcmlhbiBjYWxlbmRhciBydWxlLgorc3RhdGljIGNvbnN0
ZXhwciBpbnQgbWluaW11bVllYXIgPSAxOworCisvLyBEYXRlIGluIEVDTUFTY3JpcHQgY2FuJ3Qg
cmVwcmVzZW50IGRhdGVzIGxhdGVyIHRoYW4gMjc1NzYwLTA5LTEzVDAwOjAwWi4KKy8vIFNvLCB3
ZSBoYXZlIHRoZSBzYW1lIHVwcGVyIGxpbWl0IGluIEhUTUw1IGRhdGUvdGltZSB0eXBlcy4KK3N0
YXRpYyBjb25zdGV4cHIgaW50IG1heGltdW1ZZWFyID0gMjc1NzYwOworCiAvLyBIVE1MNSBzcGVj
aWZpY2F0aW9uIGRlZmluZXMgbWluaW11bSB3ZWVrIG9mIHllYXIgaXMgb25lLgotY29uc3QgaW50
IERhdGVDb21wb25lbnRzOjptaW5pbXVtV2Vla051bWJlciA9IDE7CitzdGF0aWMgY29uc3RleHBy
IGludCBtaW5pbXVtV2Vla051bWJlciA9IDE7CiAKIC8vIEhUTUw1IHNwZWNpZmljYXRpb24gZGVm
aW5lcyBtYXhpbXVtIHdlZWsgb2YgeWVhciBpcyA1My4KLWNvbnN0IGludCBEYXRlQ29tcG9uZW50
czo6bWF4aW11bVdlZWtOdW1iZXIgPSA1MzsKK3N0YXRpYyBjb25zdGV4cHIgaW50IG1heGltdW1X
ZWVrTnVtYmVyID0gNTM7CiAKLXN0YXRpYyBjb25zdCBpbnQgbWF4aW11bU1vbnRoSW5NYXhpbXVt
WWVhciA9IDg7IC8vIFRoaXMgaXMgU2VwdGVtYmVyLCBzaW5jZSBtb250aHMgYXJlIDAgYmFzZWQu
Ci1zdGF0aWMgY29uc3QgaW50IG1heGltdW1EYXlJbk1heGltdW1Nb250aCA9IDEzOwotc3RhdGlj
IGNvbnN0IGludCBtYXhpbXVtV2Vla0luTWF4aW11bVllYXIgPSAzNzsgLy8gVGhlIHdlZWsgb2Yg
Mjc1NzYwLTA5LTEzCitzdGF0aWMgY29uc3RleHByIGludCBtYXhpbXVtTW9udGhJbk1heGltdW1Z
ZWFyID0gODsgLy8gVGhpcyBpcyBTZXB0ZW1iZXIsIHNpbmNlIG1vbnRocyBhcmUgMCBiYXNlZC4K
K3N0YXRpYyBjb25zdGV4cHIgaW50IG1heGltdW1EYXlJbk1heGltdW1Nb250aCA9IDEzOworc3Rh
dGljIGNvbnN0ZXhwciBpbnQgbWF4aW11bVdlZWtJbk1heGltdW1ZZWFyID0gMzc7IC8vIFRoZSB3
ZWVrIG9mIDI3NTc2MC0wOS0xMwogCi1zdGF0aWMgY29uc3QgaW50IGRheXNJbk1vbnRoWzEyXSA9
IHszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxfTsKK3N0YXRp
YyBjb25zdGV4cHIgaW50IGRheXNJbk1vbnRoWzEyXSA9IHsgMzEsIDI4LCAzMSwgMzAsIDMxLCAz
MCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMSB9OwogCiBzdGF0aWMgYm9vbCBpc0xlYXBZZWFyKGlu
dCB5ZWFyKQogewpAQCAtOTYsNjggKzEwNiw3MiBAQCBpbnQgRGF0ZUNvbXBvbmVudHM6Om1heFdl
ZWtOdW1iZXJJblllYXIoCiAgICAgcmV0dXJuIGRheSA9PSBUaHVyc2RheSB8fCAoZGF5ID09IFdl
ZG5lc2RheSAmJiBpc0xlYXBZZWFyKG1feWVhcikpID8gbWF4aW11bVdlZWtOdW1iZXIgOiBtYXhp
bXVtV2Vla051bWJlciAtIDE7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IHN0YXRpYyB1bnNpZ25lZCBjb3VudERpZ2l0cyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVu
c2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBzdGF0aWMgdW5zaWduZWQgY291bnREaWdpdHMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiBidWZmZXIpCiB7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBzdGFydDsKLSAg
ICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKCFpc0FTQ0lJ
RGlnaXQoc3JjW2luZGV4XSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJu
IGluZGV4IC0gc3RhcnQ7CisgICAgYXV0byBiZWdpbiA9IGJ1ZmZlci5wb3NpdGlvbigpOworICAg
IHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJRGlnaXQ+KGJ1ZmZlcik7CisgICAgcmV0
dXJuIGJ1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW47CiB9CiAKIC8vIFZlcnkgc3RyaWN0IGludGVn
ZXIgcGFyc2VyLiBEbyBub3QgYWxsb3cgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlIHVu
bGlrZSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoKS4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyBib29sIHRvSW50KGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBwYXJzZVN0YXJ0LCB1bnNpZ25lZCBwYXJzZUxlbmd0aCwgaW50
JiBvdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8
aW50PiBwYXJzZUludChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIs
IHVuc2lnbmVkIG1heGltdW1OdW1iZXJPZkRpZ2l0c1RvUGFyc2UpCiB7Ci0gICAgaWYgKHBhcnNl
U3RhcnQgKyBwYXJzZUxlbmd0aCA+IGxlbmd0aCB8fCBwYXJzZUxlbmd0aCA8PSAwKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IHZhbHVlID0gMDsKLSAgICBhdXRvIGN1cnJlbnQgPSBz
cmMgKyBwYXJzZVN0YXJ0OwotICAgIGF1dG8gZW5kID0gY3VycmVudCArIHBhcnNlTGVuZ3RoOwor
ICAgIGlmIChtYXhpbXVtTnVtYmVyT2ZEaWdpdHNUb1BhcnNlID4gYnVmZmVyLmxlbmd0aFJlbWFp
bmluZygpIHx8ICFtYXhpbXVtTnVtYmVyT2ZEaWdpdHNUb1BhcnNlKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgbmVnYXRpdmUg
bnVtYmVycyBmb3IgSVNPIDg2MDEuCi0gICAgZm9yICg7IGN1cnJlbnQgPCBlbmQ7ICsrY3VycmVu
dCkgewotICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqY3VycmVudCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGludCBkaWdpdCA9ICpjdXJyZW50IC0gJzAnOworCisgICAg
aW50IHZhbHVlID0gMDsKKyAgICB1bnNpZ25lZCBkaWdpdHNSZW1haW5pbmcgPSAwOworICAgIHdo
aWxlIChkaWdpdHNSZW1haW5pbmcgPCBtYXhpbXVtTnVtYmVyT2ZEaWdpdHNUb1BhcnNlKSB7Cisg
ICAgICAgIGlmICghaXNBU0NJSURpZ2l0KCpidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgaW50IGRpZ2l0ID0gKmJ1ZmZlciAtICcwJzsKICAgICAgICAg
aWYgKHZhbHVlID4gKElOVF9NQVggLSBkaWdpdCkgLyAxMCkgLy8gQ2hlY2sgZm9yIG92ZXJmbG93
LgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDEwICsgZGlnaXQ7CisgICAgICAgICsrZGln
aXRzUmVtYWluaW5nOwogICAgIH0KLSAgICBvdXQgPSB2YWx1ZTsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gdmFsdWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IHN0YXRpYyBPcHRpb25hbDxpbnQ+IHBhcnNlSW50V2l0aGluTGltaXRzKFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlciwgdW5zaWduZWQgbWF4aW11bU51bWJlck9mRGln
aXRzVG9QYXJzZSwgaW50IG1pbmltdW1WYWx1ZSwgaW50IG1heGltdW1WYWx1ZSkKK3sKKyAgICBh
dXRvIHZhbHVlID0gcGFyc2VJbnQoYnVmZmVyLCBtYXhpbXVtTnVtYmVyT2ZEaWdpdHNUb1BhcnNl
KTsKKyAgICBpZiAodmFsdWUgJiYgKCp2YWx1ZSA8IG1pbmltdW1WYWx1ZSB8fCAqdmFsdWUgPiBt
YXhpbXVtVmFsdWUpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB2
YWx1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29t
cG9uZW50czo6cGFyc2VZZWFyKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVu
Z3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlWWVhcihTdHJpbmdQYXJzaW5n
QnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7Ci0gICAgdW5zaWduZWQgZGlnaXRzTGVu
Z3RoID0gY291bnREaWdpdHMoc3JjLCBsZW5ndGgsIHN0YXJ0KTsKKyAgICB1bnNpZ25lZCBkaWdp
dHNMZW5ndGggPSBjb3VudERpZ2l0cyhidWZmZXIpOwogICAgIC8vIE5lZWRzIGF0IGxlYXN0IDQg
ZGlnaXRzIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQuCiAgICAgaWYgKGRpZ2l0c0xlbmd0aCA8
IDQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbnQgeWVhcjsKLSAgICBpZiAoIXRvSW50
KHNyYywgbGVuZ3RoLCBzdGFydCwgZGlnaXRzTGVuZ3RoLCB5ZWFyKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICh5ZWFyIDwgbWluaW11bVllYXIoKSB8fCB5ZWFyID4gbWF4aW11bVll
YXIoKSkKKworICAgIGF1dG8geWVhciA9IHBhcnNlSW50V2l0aGluTGltaXRzKGJ1ZmZlciwgZGln
aXRzTGVuZ3RoLCBtaW5pbXVtWWVhciwgbWF4aW11bVllYXIpOworICAgIGlmICgheWVhcikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1feWVhciA9IHllYXI7Ci0gICAgZW5kID0gc3RhcnQg
KyBkaWdpdHNMZW5ndGg7CisKKyAgICBtX3llYXIgPSAqeWVhcjsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogc3RhdGljIGJvb2wgd2l0aGluSFRNTERhdGVMaW1pdHMoaW50IHllYXIsIGludCBtb250
aCkKIHsKLSAgICBpZiAoeWVhciA8IERhdGVDb21wb25lbnRzOjptaW5pbXVtWWVhcigpKQorICAg
IGlmICh5ZWFyIDwgbWluaW11bVllYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
eWVhciA8IERhdGVDb21wb25lbnRzOjptYXhpbXVtWWVhcigpKQorICAgIGlmICh5ZWFyIDwgbWF4
aW11bVllYXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBtb250aCA8PSBtYXhp
bXVtTW9udGhJbk1heGltdW1ZZWFyOwogfQogCiBzdGF0aWMgYm9vbCB3aXRoaW5IVE1MRGF0ZUxp
bWl0cyhpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgbW9udGhEYXkpCiB7Ci0gICAgaWYgKHllYXIg
PCBEYXRlQ29tcG9uZW50czo6bWluaW11bVllYXIoKSkKKyAgICBpZiAoeWVhciA8IG1pbmltdW1Z
ZWFyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHllYXIgPCBEYXRlQ29tcG9uZW50
czo6bWF4aW11bVllYXIoKSkKKyAgICBpZiAoeWVhciA8IG1heGltdW1ZZWFyKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBpZiAobW9udGggPCBtYXhpbXVtTW9udGhJbk1heGltdW1ZZWFyKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE2Niw5ICsxODAsOSBAQCBzdGF0aWMgYm9vbCB3aXRo
aW5IVE1MRGF0ZUxpbWl0cyhpbnQgeWVhCiAKIHN0YXRpYyBib29sIHdpdGhpbkhUTUxEYXRlTGlt
aXRzKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBtb250aERheSwgaW50IGhvdXIsIGludCBtaW51
dGUsIGludCBzZWNvbmQsIGludCBtaWxsaXNlY29uZCkKIHsKLSAgICBpZiAoeWVhciA8IERhdGVD
b21wb25lbnRzOjptaW5pbXVtWWVhcigpKQorICAgIGlmICh5ZWFyIDwgbWluaW11bVllYXIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoeWVhciA8IERhdGVDb21wb25lbnRzOjptYXhp
bXVtWWVhcigpKQorICAgIGlmICh5ZWFyIDwgbWF4aW11bVllYXIpCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIGlmIChtb250aCA8IG1heGltdW1Nb250aEluTWF4aW11bVllYXIpCiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMTg1LDU5ICsxOTksNTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRj4g
c3RhdGljIE9wdGlvbmFsPERhdAogICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgRGF0ZUNvbXBvbmVudHMgcmVzdWx0OwotICAgIHVu
c2lnbmVkIGVuZDsKLSAgICBpZiAoc291cmNlLmlzOEJpdCgpKSB7Ci0gICAgICAgIGlmICghcGFy
c2VGdW5jdGlvbihyZXN1bHQsIHNvdXJjZS5jaGFyYWN0ZXJzOCgpLCBzb3VyY2UubGVuZ3RoKCks
IGVuZCkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmICghcGFyc2VGdW5jdGlvbihyZXN1bHQsIHNvdXJjZS5jaGFyYWN0ZXJzMTYoKSwg
c291cmNlLmxlbmd0aCgpLCBlbmQpKQorICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNp
bmcoc291cmNlLCBbJl0oYXV0byBidWZmZXIpIC0+IE9wdGlvbmFsPERhdGVDb21wb25lbnRzPiB7
CisgICAgICAgIERhdGVDb21wb25lbnRzIGRhdGU7CisgICAgICAgIGlmICghcGFyc2VGdW5jdGlv
bihidWZmZXIsIGRhdGUpIHx8ICFidWZmZXIuYXRFbmQoKSkKICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0gICAgfQotICAgIGlmIChlbmQgIT0gc291cmNlLmxlbmd0aCgpKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJl
dHVybiBkYXRlOworICAgIH0pOwogfQogCiBPcHRpb25hbDxEYXRlQ29tcG9uZW50cz4gRGF0ZUNv
bXBvbmVudHM6OmZyb21QYXJzaW5nTW9udGgoU3RyaW5nVmlldyBzb3VyY2UpCiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgZGF0ZSwgY29uc3QgYXV0byog
c3JjLCBhdXRvIGxlbmd0aCwgYXV0byYgZW5kKSB7Ci0gICAgICAgIHJldHVybiBkYXRlLnBhcnNl
TW9udGgoc3JjLCBsZW5ndGgsIDAsIGVuZCk7CisgICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJpbmco
c291cmNlLCBbXSAoYXV0byYgYnVmZmVyLCBhdXRvJiBkYXRlKSB7CisgICAgICAgIHJldHVybiBk
YXRlLnBhcnNlTW9udGgoYnVmZmVyKTsKICAgICB9KTsKIH0KIAogT3B0aW9uYWw8RGF0ZUNvbXBv
bmVudHM+IERhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ0RhdGUoU3RyaW5nVmlldyBzb3VyY2Up
CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgZGF0ZSwg
Y29uc3QgYXV0byogc3JjLCBhdXRvIGxlbmd0aCwgYXV0byYgZW5kKSB7Ci0gICAgICAgIHJldHVy
biBkYXRlLnBhcnNlRGF0ZShzcmMsIGxlbmd0aCwgMCwgZW5kKTsKKyAgICByZXR1cm4gY3JlYXRl
RnJvbVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBidWZmZXIsIGF1dG8mIGRhdGUpIHsKKyAgICAg
ICAgcmV0dXJuIGRhdGUucGFyc2VEYXRlKGJ1ZmZlcik7CiAgICAgfSk7CiB9CiAKIE9wdGlvbmFs
PERhdGVDb21wb25lbnRzPiBEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdXZWVrKFN0cmluZ1Zp
ZXcgc291cmNlKQogewotICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10gKGF1
dG8mIGRhdGUsIGNvbnN0IGF1dG8qIHNyYywgYXV0byBsZW5ndGgsIGF1dG8mIGVuZCkgewotICAg
ICAgICByZXR1cm4gZGF0ZS5wYXJzZVdlZWsoc3JjLCBsZW5ndGgsIDAsIGVuZCk7CisgICAgcmV0
dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgYnVmZmVyLCBhdXRvJiBkYXRl
KSB7CisgICAgICAgIHJldHVybiBkYXRlLnBhcnNlV2VlayhidWZmZXIpOwogICAgIH0pOwogfQog
CiBPcHRpb25hbDxEYXRlQ29tcG9uZW50cz4gRGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nVGlt
ZShTdHJpbmdWaWV3IHNvdXJjZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlRnJvbVN0cmluZyhzb3Vy
Y2UsIFtdIChhdXRvJiBkYXRlLCBjb25zdCBhdXRvKiBzcmMsIGF1dG8gbGVuZ3RoLCBhdXRvJiBl
bmQpIHsKLSAgICAgICAgcmV0dXJuIGRhdGUucGFyc2VUaW1lKHNyYywgbGVuZ3RoLCAwLCBlbmQp
OworICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10gKGF1dG8mIGJ1ZmZlciwg
YXV0byYgZGF0ZSkgeworICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZVRpbWUoYnVmZmVyKTsKICAg
ICB9KTsKIH0KIAogT3B0aW9uYWw8RGF0ZUNvbXBvbmVudHM+IERhdGVDb21wb25lbnRzOjpmcm9t
UGFyc2luZ0RhdGVUaW1lTG9jYWwoU3RyaW5nVmlldyBzb3VyY2UpCiB7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgZGF0ZSwgY29uc3QgYXV0byogc3JjLCBh
dXRvIGxlbmd0aCwgYXV0byYgZW5kKSB7Ci0gICAgICAgIHJldHVybiBkYXRlLnBhcnNlRGF0ZVRp
bWVMb2NhbChzcmMsIGxlbmd0aCwgMCwgZW5kKTsKKyAgICByZXR1cm4gY3JlYXRlRnJvbVN0cmlu
Zyhzb3VyY2UsIFtdIChhdXRvJiBidWZmZXIsIGF1dG8mIGRhdGUpIHsKKyAgICAgICAgcmV0dXJu
IGRhdGUucGFyc2VEYXRlVGltZUxvY2FsKGJ1ZmZlcik7CiAgICAgfSk7CiB9CiAKIE9wdGlvbmFs
PERhdGVDb21wb25lbnRzPiBEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdEYXRlVGltZShTdHJp
bmdWaWV3IHNvdXJjZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlRnJvbVN0cmluZyhzb3VyY2UsIFtd
IChhdXRvJiBkYXRlLCBjb25zdCBhdXRvKiBzcmMsIGF1dG8gbGVuZ3RoLCBhdXRvJiBlbmQpIHsK
LSAgICAgICAgcmV0dXJuIGRhdGUucGFyc2VEYXRlVGltZShzcmMsIGxlbmd0aCwgMCwgZW5kKTsK
KyAgICByZXR1cm4gY3JlYXRlRnJvbVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBidWZmZXIsIGF1
dG8mIGRhdGUpIHsKKyAgICAgICAgcmV0dXJuIGRhdGUucGFyc2VEYXRlVGltZShidWZmZXIpOwog
ICAgIH0pOwogfQogCkBAIC0zNDQsMjE2ICszNTIsMTk3IEBAIGJvb2wgRGF0ZUNvbXBvbmVudHM6
OmFkZE1pbnV0ZShpbnQgbWludXQKIH0KIAogLy8gUGFyc2VzIGEgdGltZXpvbmUgcGFydCwgYW5k
IGFkanVzdCB5ZWFyLCBtb250aCwgbW9udGhEYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxs
aXNlY29uZC4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNvbXBv
bmVudHM6OnBhcnNlVGltZVpvbmUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25lZCBs
ZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9uZW50czo6cGFyc2VUaW1lWm9uZShTdHJpbmdQ
YXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7Ci0gICAgaWYgKHN0YXJ0ID49
IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIGluZGV4ID0gc3Rh
cnQ7Ci0gICAgaWYgKHNyY1tpbmRleF0gPT0gJ1onKSB7Ci0gICAgICAgIGVuZCA9IGluZGV4ICsg
MTsKKyAgICBpZiAoc2tpcEV4YWN0bHkoYnVmZmVyLCAnWicpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9CiAKICAgICBib29sIG1pbnVzOwotICAgIGlmIChzcmNbaW5kZXhdID09ICcrJykK
KyAgICBpZiAoc2tpcEV4YWN0bHkoYnVmZmVyLCAnKycpKQogICAgICAgICBtaW51cyA9IGZhbHNl
OwotICAgIGVsc2UgaWYgKHNyY1tpbmRleF0gPT0gJy0nKQorICAgIGVsc2UgaWYgKHNraXBFeGFj
dGx5KGJ1ZmZlciwgJy0nKSkKICAgICAgICAgbWludXMgPSB0cnVlOwogICAgIGVsc2UKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7CiAKLSAgICBpbnQgaG91cjsKLSAgICBpbnQg
bWludXRlOwotICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBob3VyKSB8fCBo
b3VyIDwgMCB8fCBob3VyID4gMjMpCisgICAgYXV0byBob3VyID0gcGFyc2VJbnRXaXRoaW5MaW1p
dHMoYnVmZmVyLCAyLCAwLCAyMyk7CisgICAgaWYgKCFob3VyKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaW5kZXggKz0gMjsKIAotICAgIGlmIChpbmRleCA+PSBsZW5ndGggfHwgc3JjW2lu
ZGV4XSAhPSAnOicpCisgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICc6JykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4OwogCi0gICAgaWYgKCF0b0ludChzcmMsIGxlbmd0
aCwgaW5kZXgsIDIsIG1pbnV0ZSkgfHwgbWludXRlIDwgMCB8fCBtaW51dGUgPiA1OSkKKyAgICBh
dXRvIG1pbnV0ZSA9IHBhcnNlSW50V2l0aGluTGltaXRzKGJ1ZmZlciwgMiwgMCwgNTkpOworICAg
IGlmICghbWludXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW5kZXggKz0gMjsKIAog
ICAgIGlmIChtaW51cykgewotICAgICAgICBob3VyID0gLWhvdXI7Ci0gICAgICAgIG1pbnV0ZSA9
IC1taW51dGU7CisgICAgICAgICpob3VyID0gLSpob3VyOworICAgICAgICAqbWludXRlID0gLSpt
aW51dGU7CiAgICAgfQogCiAgICAgLy8gU3VidHJhY3QgdGhlIHRpbWV6b25lIG9mZnNldC4KLSAg
ICBpZiAoIWFkZE1pbnV0ZSgtKGhvdXIgKiA2MCArIG1pbnV0ZSkpKQorICAgIGlmICghYWRkTWlu
dXRlKC0oKmhvdXIgKiA2MCArICptaW51dGUpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGVuZCA9IGluZGV4OworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlTW9udGgoY29uc3QgQ2hh
cmFjdGVyVHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCYgZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9u
ZW50czo6cGFyc2VNb250aChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZm
ZXIpCiB7Ci0gICAgQVNTRVJUKHNyYyk7Ci0gICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgaWYgKCFw
YXJzZVllYXIoc3JjLCBsZW5ndGgsIHN0YXJ0LCBpbmRleCkpCisgICAgaWYgKCFwYXJzZVllYXIo
YnVmZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChpbmRleCA+PSBsZW5ndGgg
fHwgc3JjW2luZGV4XSAhPSAnLScpCisKKyAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJy0n
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7CiAKLSAgICBpbnQgbW9udGg7
Ci0gICAgaWYgKCF0b0ludChzcmMsIGxlbmd0aCwgaW5kZXgsIDIsIG1vbnRoKSB8fCBtb250aCA8
IDEgfHwgbW9udGggPiAxMikKKyAgICBhdXRvIG1vbnRoID0gcGFyc2VJbnRXaXRoaW5MaW1pdHMo
YnVmZmVyLCAyLCAxLCAxMik7CisgICAgaWYgKCFtb250aCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIC0tbW9udGg7Ci0gICAgaWYgKCF3aXRoaW5IVE1MRGF0ZUxpbWl0cyhtX3llYXIsIG1v
bnRoKSkKKyAgICAtLSptb250aDsKKworICAgIGlmICghd2l0aGluSFRNTERhdGVMaW1pdHMobV95
ZWFyLCAqbW9udGgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb250aCA9IG1vbnRo
OwotICAgIGVuZCA9IGluZGV4ICsgMjsKKworICAgIG1fbW9udGggPSAqbW9udGg7CiAgICAgbV90
eXBlID0gTW9udGg7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZShjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBl
bmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRz
OjpwYXJzZURhdGUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQog
ewotICAgIEFTU0VSVChzcmMpOwotICAgIHVuc2lnbmVkIGluZGV4OwotICAgIGlmICghcGFyc2VN
b250aChzcmMsIGxlbmd0aCwgc3RhcnQsIGluZGV4KSkKKyAgICBpZiAoIXBhcnNlTW9udGgoYnVm
ZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vICctJyBhbmQgMi1kaWdpdHMgYXJl
IG5lZWRlZC4KLSAgICBpZiAoaW5kZXggKyAyID49IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChzcmNbaW5kZXhdICE9ICctJykKKworICAgIGlmICghc2tpcEV4YWN0bHko
YnVmZmVyLCAnLScpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKytpbmRleDsKIAotICAg
IGludCBkYXk7Ci0gICAgaWYgKCF0b0ludChzcmMsIGxlbmd0aCwgaW5kZXgsIDIsIGRheSkgfHwg
ZGF5IDwgMSB8fCBkYXkgPiBtYXhEYXlPZk1vbnRoKG1feWVhciwgbV9tb250aCkpCisgICAgYXV0
byBkYXkgPSBwYXJzZUludFdpdGhpbkxpbWl0cyhidWZmZXIsIDIsIDEsIG1heERheU9mTW9udGgo
bV95ZWFyLCBtX21vbnRoKSk7CisgICAgaWYgKCFkYXkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIXdpdGhpbkhUTUxEYXRlTGltaXRzKG1feWVhciwgbV9tb250aCwgZGF5KSkKKwor
ICAgIGlmICghd2l0aGluSFRNTERhdGVMaW1pdHMobV95ZWFyLCBtX21vbnRoLCAqZGF5KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbW9udGhEYXkgPSBkYXk7Ci0gICAgZW5kID0gaW5k
ZXggKyAyOworCisgICAgbV9tb250aERheSA9ICpkYXk7CiAgICAgbV90eXBlID0gRGF0ZTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9v
bCBEYXRlQ29tcG9uZW50czo6cGFyc2VXZWVrKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlV2VlayhTdHJp
bmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7Ci0gICAgQVNTRVJUKHNy
Yyk7Ci0gICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgaWYgKCFwYXJzZVllYXIoc3JjLCBsZW5ndGgs
IHN0YXJ0LCBpbmRleCkpCisgICAgaWYgKCFwYXJzZVllYXIoYnVmZmVyKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgLy8gNCBjaGFyYWN0ZXJzICgnLScgJ1cnIGRpZ2l0IGRpZ2l0KSBh
cmUgbmVlZGVkLgotICAgIGlmIChpbmRleCArIDMgPj0gbGVuZ3RoKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKHNyY1tpbmRleF0gIT0gJy0nKQorICAgIGlmICghc2tpcEV4YWN0bHko
YnVmZmVyLCAnLScpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKytpbmRleDsKLSAgICBp
ZiAoc3JjW2luZGV4XSAhPSAnVycpCisgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICdXJykp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4OwogCi0gICAgaW50IHdlZWs7Ci0g
ICAgaWYgKCF0b0ludChzcmMsIGxlbmd0aCwgaW5kZXgsIDIsIHdlZWspIHx8IHdlZWsgPCBtaW5p
bXVtV2Vla051bWJlciB8fCB3ZWVrID4gbWF4V2Vla051bWJlckluWWVhcigpKQorICAgIGF1dG8g
d2VlayA9IHBhcnNlSW50V2l0aGluTGltaXRzKGJ1ZmZlciwgMiwgbWluaW11bVdlZWtOdW1iZXIs
IG1heFdlZWtOdW1iZXJJblllYXIoKSk7CisgICAgaWYgKCF3ZWVrKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKG1feWVhciA9PSBtYXhpbXVtWWVhcigpICYmIHdlZWsgPiBtYXhpbXVt
V2Vla0luTWF4aW11bVllYXIpCisKKyAgICBpZiAobV95ZWFyID09IG1heGltdW1ZZWFyICYmICp3
ZWVrID4gbWF4aW11bVdlZWtJbk1heGltdW1ZZWFyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV93ZWVrID0gd2VlazsKLSAgICBlbmQgPSBpbmRleCArIDI7CisKKyAgICBtX3dlZWsgPSAq
d2VlazsKICAgICBtX3R5cGUgPSBXZWVrOwogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZVRpbWUo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCYgZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBE
YXRlQ29tcG9uZW50czo6cGFyc2VUaW1lKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4mIGJ1ZmZlcikKIHsKLSAgICBBU1NFUlQoc3JjKTsKLSAgICBpbnQgaG91cjsKLSAgICBpZiAo
IXRvSW50KHNyYywgbGVuZ3RoLCBzdGFydCwgMiwgaG91cikgfHwgaG91ciA8IDAgfHwgaG91ciA+
IDIzKQorICAgIGF1dG8gaG91ciA9IHBhcnNlSW50V2l0aGluTGltaXRzKGJ1ZmZlciwgMiwgMCwg
MjMpOworICAgIGlmICghaG91cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVk
IGluZGV4ID0gc3RhcnQgKyAyOwotICAgIGlmIChpbmRleCA+PSBsZW5ndGgpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoc3JjW2luZGV4XSAhPSAnOicpCisKKyAgICBpZiAoIXNraXBF
eGFjdGx5KGJ1ZmZlciwgJzonKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7
CiAKLSAgICBpbnQgbWludXRlOwotICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAy
LCBtaW51dGUpIHx8IG1pbnV0ZSA8IDAgfHwgbWludXRlID4gNTkpCisgICAgYXV0byBtaW51dGUg
PSBwYXJzZUludFdpdGhpbkxpbWl0cyhidWZmZXIsIDIsIDAsIDU5KTsKKyAgICBpZiAoIW1pbnV0
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGluZGV4ICs9IDI7CiAKLSAgICBpbnQgc2Vj
b25kID0gMDsKLSAgICBpbnQgbWlsbGlzZWNvbmQgPSAwOwogICAgIC8vIE9wdGlvbmFsIHNlY29u
ZCBwYXJ0LgogICAgIC8vIERvIG5vdCByZXR1cm4gd2l0aCBmYWxzZSBiZWNhdXNlIHRoZSBwYXJ0
IGlzIG9wdGlvbmFsLgotICAgIGlmIChpbmRleCArIDIgPCBsZW5ndGggJiYgc3JjW2luZGV4XSA9
PSAnOicpIHsKLSAgICAgICAgaWYgKHRvSW50KHNyYywgbGVuZ3RoLCBpbmRleCArIDEsIDIsIHNl
Y29uZCkgJiYgc2Vjb25kID49IDAgJiYgc2Vjb25kIDw9IDU5KSB7Ci0gICAgICAgICAgICBpbmRl
eCArPSAzOworICAgIE9wdGlvbmFsPGludD4gc2Vjb25kOworICAgIE9wdGlvbmFsPGludD4gbWls
bGlzZWNvbmQ7CisKKyAgICBTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHRlbXBv
cmFyeUJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICBpZiAoc2tpcEV4YWN0bHkodGVtcG9yYXJ5QnVmZmVy
LCAnOicpKSB7CisgICAgICAgIHNlY29uZCA9IHBhcnNlSW50V2l0aGluTGltaXRzKHRlbXBvcmFy
eUJ1ZmZlciwgMiwgMCwgNTkpOworICAgICAgICBpZiAoc2Vjb25kKSB7CisgICAgICAgICAgICAv
LyBPbmx5IGFmdGVyIHN1Y2Nlc3NmdWxseSBwYXJzaW5nIGFuZCB2YWxpZGF0aW5nICdzZWNvbmQn
LCBkbyB3ZSBpbmNyZW1lbnQgdGhlIHJlYWwgYnVmZmVyLgorICAgICAgICAgICAgYnVmZmVyICs9
IHRlbXBvcmFyeUJ1ZmZlci5wb3NpdGlvbigpIC0gYnVmZmVyLnBvc2l0aW9uKCk7CiAKICAgICAg
ICAgICAgIC8vIE9wdGlvbmFsIGZyYWN0aW9uYWwgc2Vjb25kIHBhcnQuCi0gICAgICAgICAgICBp
ZiAoaW5kZXggPCBsZW5ndGggJiYgc3JjW2luZGV4XSA9PSAnLicpIHsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBkaWdpdHNMZW5ndGggPSBjb3VudERpZ2l0cyhzcmMsIGxlbmd0aCwgaW5kZXgg
KyAxKTsKLSAgICAgICAgICAgICAgICBpZiAoZGlnaXRzTGVuZ3RoID4gIDApIHsKLSAgICAgICAg
ICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBvazsKKyAgICAg
ICAgICAgIGlmIChza2lwRXhhY3RseSh0ZW1wb3JhcnlCdWZmZXIsICcuJykpIHsKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBkaWdpdHNMZW5ndGggPSBjb3VudERpZ2l0cyh0ZW1wb3JhcnlCdWZm
ZXIpOworICAgICAgICAgICAgICAgIGlmIChkaWdpdHNMZW5ndGggPiAwKSB7CisgICAgICAgICAg
ICAgICAgICAgICsrdGVtcG9yYXJ5QnVmZmVyOwogICAgICAgICAgICAgICAgICAgICBpZiAoZGln
aXRzTGVuZ3RoID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gdG9JbnQoc3Jj
LCBsZW5ndGgsIGluZGV4LCAxLCBtaWxsaXNlY29uZCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtaWxsaXNlY29uZCAqPSAxMDA7CisgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29u
ZCA9IHBhcnNlSW50KHRlbXBvcmFyeUJ1ZmZlciwgMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAqbWlsbGlzZWNvbmQgKj0gMTAwOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRp
Z2l0c0xlbmd0aCA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvayA9IHRvSW50KHNy
YywgbGVuZ3RoLCBpbmRleCwgMiwgbWlsbGlzZWNvbmQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbWlsbGlzZWNvbmQgKj0gMTA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSAvLyBkaWdp
dHNMZW5ndGggPj0gMwotICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSB0b0ludChzcmMsIGxl
bmd0aCwgaW5kZXgsIDMsIG1pbGxpc2Vjb25kKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChvaywgb2spOwotICAgICAgICAgICAgICAgICAgICBpbmRleCArPSBkaWdpdHNMZW5n
dGg7CisgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZCA9IHBhcnNlSW50KHRlbXBv
cmFyeUJ1ZmZlciwgMik7CisgICAgICAgICAgICAgICAgICAgICAgICAqbWlsbGlzZWNvbmQgKj0g
MTA7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
bWlsbGlzZWNvbmQgPSBwYXJzZUludCh0ZW1wb3JhcnlCdWZmZXIsIDMpOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gRHVlIHRvIHRoZSBjb3VudERpZ2l0cyBh
Ym92ZSwgdGhlIHBhcnNlSW50IGNhbGxzIHNob3VsZCBhbGwgYmUgc3VjY2Vzc2Z1bC4KKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKG1pbGxpc2Vjb25kKTsKKworICAgICAgICAgICAgICAgICAg
ICAvLyBPbmx5IGFmdGVyIHN1Y2Nlc3NmdWxseSBwYXJzaW5nIGFuZCB2YWxpZGF0aW5nICdtaWxs
aXNlY29uZCcsIGRvIHdlIGluY3JlbWVudCB0aGUgcmVhbCBidWZmZXIuCisgICAgICAgICAgICAg
ICAgICAgIGJ1ZmZlciArPSB0ZW1wb3JhcnlCdWZmZXIucG9zaXRpb24oKSAtIGJ1ZmZlci5wb3Np
dGlvbigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KLSAgICBtX2hvdXIgPSBob3VyOwotICAgIG1fbWludXRlID0gbWludXRlOwotICAgIG1fc2Vj
b25kID0gc2Vjb25kOwotICAgIG1fbWlsbGlzZWNvbmQgPSBtaWxsaXNlY29uZDsKLSAgICBlbmQg
PSBpbmRleDsKKworICAgIG1faG91ciA9ICpob3VyOworICAgIG1fbWludXRlID0gKm1pbnV0ZTsK
KyAgICBtX3NlY29uZCA9IHNlY29uZC52YWx1ZU9yKDApOworICAgIG1fbWlsbGlzZWNvbmQgPSBt
aWxsaXNlY29uZC52YWx1ZU9yKDApOwogICAgIG1fdHlwZSA9IFRpbWU7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNvbXBv
bmVudHM6OnBhcnNlRGF0ZVRpbWVMb2NhbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZURhdGVUaW1lTG9j
YWwoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewotICAgIEFT
U0VSVChzcmMpOwotICAgIHVuc2lnbmVkIGluZGV4OwotICAgIGlmICghcGFyc2VEYXRlKHNyYywg
bGVuZ3RoLCBzdGFydCwgaW5kZXgpKQorICAgIGlmICghcGFyc2VEYXRlKGJ1ZmZlcikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKHNyY1tpbmRleF0gIT0gJ1QnKQorCisgICAgaWYgKCFza2lwRXhh
Y3RseShidWZmZXIsICdUJykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4Owot
ICAgIGlmICghcGFyc2VUaW1lKHNyYywgbGVuZ3RoLCBpbmRleCwgZW5kKSkKKworICAgIGlmICgh
cGFyc2VUaW1lKGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghd2l0
aGluSFRNTERhdGVMaW1pdHMobV95ZWFyLCBtX21vbnRoLCBtX21vbnRoRGF5LCBtX2hvdXIsIG1f
bWludXRlLCBtX3NlY29uZCwgbV9taWxsaXNlY29uZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KwogICAgIG1fdHlwZSA9IERhdGVUaW1lTG9jYWw7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNl
RGF0ZVRpbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gYm9vbCBEYXRlQ29tcG9uZW50czo6cGFyc2VEYXRlVGltZShTdHJpbmdQYXJzaW5nQnVmZmVy
PENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7Ci0gICAgQVNTRVJUKHNyYyk7Ci0gICAgdW5zaWdu
ZWQgaW5kZXg7Ci0gICAgaWYgKCFwYXJzZURhdGUoc3JjLCBsZW5ndGgsIHN0YXJ0LCBpbmRleCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQorICAgIGlm
ICghcGFyc2VEYXRlKGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3Jj
W2luZGV4XSAhPSAnVCcpCisKKyAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJ1QnKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7Ci0gICAgaWYgKCFwYXJzZVRpbWUoc3Jj
LCBsZW5ndGgsIGluZGV4LCBpbmRleCkpCisKKyAgICBpZiAoIXBhcnNlVGltZShidWZmZXIpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFwYXJzZVRpbWVab25lKHNyYywgbGVuZ3Ro
LCBpbmRleCwgZW5kKSkKKworICAgIGlmICghcGFyc2VUaW1lWm9uZShidWZmZXIpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoIXdpdGhpbkhUTUxEYXRlTGltaXRzKG1feWVhciwg
bV9tb250aCwgbV9tb250aERheSwgbV9ob3VyLCBtX21pbnV0ZSwgbV9zZWNvbmQsIG1fbWlsbGlz
ZWNvbmQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBtX3R5cGUgPSBEYXRlVGltZTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTcwOCw3ICs2OTcsNyBAQCBib29sIERhdGVDb21wb25l
bnRzOjpzZXRNb250aHNTaW5jZUVwb2NoCiAgICAgbW9udGhzID0gcm91bmQobW9udGhzKTsKICAg
ICBkb3VibGUgZG91YmxlTW9udGggPSBwb3NpdGl2ZUZtb2QobW9udGhzLCAxMik7CiAgICAgZG91
YmxlIGRvdWJsZVllYXIgPSAxOTcwICsgKG1vbnRocyAtIGRvdWJsZU1vbnRoKSAvIDEyOwotICAg
IGlmIChkb3VibGVZZWFyIDwgbWluaW11bVllYXIoKSB8fCBtYXhpbXVtWWVhcigpIDwgZG91Ymxl
WWVhcikKKyAgICBpZiAoZG91YmxlWWVhciA8IG1pbmltdW1ZZWFyIHx8IG1heGltdW1ZZWFyIDwg
ZG91YmxlWWVhcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGludCB5ZWFyID0gc3RhdGlj
X2Nhc3Q8aW50Pihkb3VibGVZZWFyKTsKICAgICBpbnQgbW9udGggPSBzdGF0aWNfY2FzdDxpbnQ+
KGRvdWJsZU1vbnRoKTsKQEAgLTczOCw3ICs3MjcsNyBAQCBib29sIERhdGVDb21wb25lbnRzOjpz
ZXRNaWxsaXNlY29uZHNTaW5jCiAgICAgbXMgPSByb3VuZChtcyk7CiAKICAgICBtX3llYXIgPSBt
c1RvWWVhcihtcyk7Ci0gICAgaWYgKG1feWVhciA8IG1pbmltdW1ZZWFyKCkgfHwgbV95ZWFyID4g
bWF4aW11bVllYXIoKSkKKyAgICBpZiAobV95ZWFyIDwgbWluaW11bVllYXIgfHwgbV95ZWFyID4g
bWF4aW11bVllYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGludCB5ZWFyRGF5ID0g
ZGF5SW5ZZWFyKG1zLCBtX3llYXIpOwpAQCAtNzQ2LDcgKzczNSw3IEBAIGJvb2wgRGF0ZUNvbXBv
bmVudHM6OnNldE1pbGxpc2Vjb25kc1NpbmMKICAgICBpZiAoeWVhckRheSA8IG9mZnNldCkgewog
ICAgICAgICAvLyBUaGUgZGF5IGJlbG9uZ3MgdG8gdGhlIGxhc3Qgd2VlayBvZiB0aGUgcHJldmlv
dXMgeWVhci4KICAgICAgICAgbV95ZWFyLS07Ci0gICAgICAgIGlmIChtX3llYXIgPD0gbWluaW11
bVllYXIoKSkKKyAgICAgICAgaWYgKG1feWVhciA8PSBtaW5pbXVtWWVhcikKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgbV93ZWVrID0gbWF4V2Vla051bWJlckluWWVhcigpOwog
ICAgIH0gZWxzZSB7CkBAIC03NTUsNyArNzQ0LDcgQEAgYm9vbCBEYXRlQ29tcG9uZW50czo6c2V0
TWlsbGlzZWNvbmRzU2luYwogICAgICAgICAgICAgbV95ZWFyKys7CiAgICAgICAgICAgICBtX3dl
ZWsgPSAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX3llYXIgPiBtYXhpbXVtWWVhcigpIHx8
IChtX3llYXIgPT0gbWF4aW11bVllYXIoKSAmJiBtX3dlZWsgPiBtYXhpbXVtV2Vla0luTWF4aW11
bVllYXIpKQorICAgICAgICBpZiAobV95ZWFyID4gbWF4aW11bVllYXIgfHwgKG1feWVhciA9PSBt
YXhpbXVtWWVhciAmJiBtX3dlZWsgPiBtYXhpbXVtV2Vla0luTWF4aW11bVllYXIpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBtX3R5cGUgPSBXZWVrOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oCShyZXZpc2lvbiAyNjM5MDApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDIsMjYgKzE0MiwxNSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbmxp
bmUgZG91YmxlIG1heGltdW1UaW1lKCkgeyByZXR1cm4gODYzOTk5OTk7IH0gLy8gMjM6NTk6NTku
OTk5CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbmxpbmUgZG91YmxlIG1heGltdW1XZWVrKCkgeyBy
ZXR1cm4gODYzOTk5OTU2ODAwMDAwMC4wOyB9IC8vIDI3NTc2MC0wOS0wOCwgdGhlIE1vbmRheSBv
ZiB0aGUgd2VlayBpbmNsdWRpbmcgMjc1NzYwLTA5LTEzLgogCi0gICAgLy8gSFRNTDUgdXNlcyBJ
U08tODYwMSBmb3JtYXQgd2l0aCB5ZWFyID49IDEuIEdyZWdvcmlhbiBjYWxlbmRhciBzdGFydGVk
IGluCi0gICAgLy8gMTU4Mi4gSG93ZXZlciwgd2UgbmVlZCB0byBzdXBwb3J0IDAwMDEtMDEtMDEg
aW4gR3JlZ29yaWFuIGNhbGVuZGFyIHJ1bGUuCi0gICAgc3RhdGljIGlubGluZSBpbnQgbWluaW11
bVllYXIoKSB7IHJldHVybiAxOyB9Ci0KLSAgICAvLyBEYXRlIGluIEVDTUFTY3JpcHQgY2FuJ3Qg
cmVwcmVzZW50IGRhdGVzIGxhdGVyIHRoYW4gMjc1NzYwLTA5LTEzVDAwOjAwWi4KLSAgICAvLyBT
bywgd2UgaGF2ZSB0aGUgc2FtZSB1cHBlciBsaW1pdCBpbiBIVE1MNSBkYXRlL3RpbWUgdHlwZXMu
Ci0gICAgc3RhdGljIGlubGluZSBpbnQgbWF4aW11bVllYXIoKSB7IHJldHVybiAyNzU3NjA7IH0K
LQotICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVdlZWtOdW1iZXI7Ci0gICAgc3RhdGljIGNv
bnN0IGludCBtYXhpbXVtV2Vla051bWJlcjsKLQogcHJpdmF0ZToKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlTW9udGgoY29uc3QgQ2hhcmFjdGVyVHlwZSog
c3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKTsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlRGF0ZShjb25zdCBD
aGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkJiBlbmQpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFy
c2VXZWVrKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gYm9vbCBwYXJzZVRpbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25lZCBs
ZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKTsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlRGF0ZVRpbWVMb2NhbChjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBl
bmQpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VEYXRl
VGltZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkJiBlbmQpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IGJvb2wgcGFyc2VZZWFyKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVu
Z3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVRpbWVab25lKGNvbnN0IENoYXJhY3RlclR5cGUq
IHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZU1vbnRoKFN0cmlu
Z1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlRGF0ZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3Rl
clR5cGU+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJz
ZVdlZWsoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VUaW1lKFN0cmluZ1BhcnNpbmdCdWZm
ZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBib29sIHBhcnNlRGF0ZVRpbWVMb2NhbChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5
cGU+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZURh
dGVUaW1lKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlWWVhcihTdHJpbmdQYXJzaW5nQnVm
ZmVyPENoYXJhY3RlclR5cGU+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gYm9vbCBwYXJzZVRpbWVab25lKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4m
KTsKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvcioo
KSBmdW5jdGlvbnMgdGFrZQogICAgIC8vIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNl
IDE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwIFVUQyBhcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405583</attachid>
            <date>2020-07-30 09:58:24 -0700</date>
            <delta_ts>2020-07-30 11:03:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213929-20200730095823.patch</filename>
            <type>text/plain</type>
            <size>24999</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDIwLTA3LTMwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBDb252ZXJ0IERhdGVDb21wb25lbnRz
IHRvIHVzZSBTdHJpbmdQYXJzaW5nQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM5MjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAtIFN3aXRjaGVzIHN0cmluZyBwYXJzaW5nIGluIERhdGVDb21w
b25lbnRzIHRvIHVzaW5nIFN0cmluZ1BhcnNpbmdCdWZmZXIsCisgICAgICAgICAgbWFraW5nIHVz
ZSBvZiBQYXJzaW5nVXRpbGl0aWVzIHRvIHN0cmVhbWxpbmUgLyBzaW1wbGlmeSB0aGUgY29kZS4K
KyAgICAgICAgLSBNb3ZlcyBhIGZldyBjb25zdGFudCB2YWx1ZXMgb25seSB1c2VkIGluIERhdGVD
b21wb25lbnRzLmNwcCB0byBEYXRlQ29tcG9uZW50cy5jcHAKKyAgICAgICAgLSBSZW5hbWUgdG9J
bnQgaW4gRGF0ZUNvbXBvbmVudHMuY3BwIHRvIHBhcnNlSW50LCBhbmQgaGF2ZSB1c2UgYW4gT3B0
aW9uYWwgcmV0dXJuCisgICAgICAgICAgdmFsdWUgcmF0aGVyIHRoYW4gYm9vbCArIG91dC1wYXJh
bWV0ZXIuCisgICAgICAgIC0gQWRkIG5ldyBwYXJzZUludFdpdGhpbkxpbWl0cyB0aGF0IGFsc28g
Y2hlY2tzIHRoYXQgcGFyc2VkIHZhbHVlIGlzIHdpdGhpbiBzcGVjZmllZAorICAgICAgICAgIGxp
bWl0cywgYXMgdGhpcyBpcyB3aGF0IGFsbW9zdCBhbGwgb2YgdGhlIGludCBwYXJzaW5nIGluIERh
dGVDb21wb25lbnRzIG5lZWRzLgorCisgICAgICAgICogcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y291bnREaWdpdHMpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VJbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VJbnRXaXRoaW5MaW1pdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlWWVhcik6CisgICAgICAgIChXZWJD
b3JlOjp3aXRoaW5IVE1MRGF0ZUxpbWl0cyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcm9t
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ01v
bnRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ0RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nV2Vlayk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdUaW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ0RhdGVUaW1lTG9jYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nRGF0ZVRpbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlVGltZVpvbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlTW9udGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29t
cG9uZW50czo6cGFyc2VXZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpw
YXJzZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZVRp
bWVMb2NhbCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6cGFyc2VEYXRlVGlt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TW9udGhzU2luY2VFcG9j
aCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2lu
Y2VFcG9jaEZvcldlZWspOgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL0RhdGVDb21wb25lbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
Q29tcG9uZW50czo6bWluaW11bVllYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZUNvbXBvbmVudHM6Om1heGltdW1ZZWFyKTogRGVsZXRlZC4KKwogMjAyMC0wNy0yOSAgQ2xhcmsg
V2FuZyAgPGNsYXJrX3dhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZGVkIGNvcHlGcm9tQ2hh
bm5lbCwgY29weVRvQ2hhbm5lbCB0byBBdWRpb0J1ZmZlcgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmNwcAkocmV2aXNpb24gMjY1MDY0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwyNSArMzEsMzUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRlQ29tcG9u
ZW50cy5oIgogCisjaW5jbHVkZSAiUGFyc2luZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgPGxpbWl0
cy5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRo
Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5n
QnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gSFRNTDUgdXNlcyBJU08tODYw
MSBmb3JtYXQgd2l0aCB5ZWFyID49IDEuIEdyZWdvcmlhbiBjYWxlbmRhciBzdGFydGVkIGluCisv
LyAxNTgyLiBIb3dldmVyLCB3ZSBuZWVkIHRvIHN1cHBvcnQgMDAwMS0wMS0wMSBpbiBHcmVnb3Jp
YW4gY2FsZW5kYXIgcnVsZS4KK3N0YXRpYyBjb25zdGV4cHIgaW50IG1pbmltdW1ZZWFyID0gMTsK
KworLy8gRGF0ZSBpbiBFQ01BU2NyaXB0IGNhbid0IHJlcHJlc2VudCBkYXRlcyBsYXRlciB0aGFu
IDI3NTc2MC0wOS0xM1QwMDowMFouCisvLyBTbywgd2UgaGF2ZSB0aGUgc2FtZSB1cHBlciBsaW1p
dCBpbiBIVE1MNSBkYXRlL3RpbWUgdHlwZXMuCitzdGF0aWMgY29uc3RleHByIGludCBtYXhpbXVt
WWVhciA9IDI3NTc2MDsKKwogLy8gSFRNTDUgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIG1pbmltdW0g
d2VlayBvZiB5ZWFyIGlzIG9uZS4KLWNvbnN0IGludCBEYXRlQ29tcG9uZW50czo6bWluaW11bVdl
ZWtOdW1iZXIgPSAxOworc3RhdGljIGNvbnN0ZXhwciBpbnQgbWluaW11bVdlZWtOdW1iZXIgPSAx
OwogCiAvLyBIVE1MNSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgbWF4aW11bSB3ZWVrIG9mIHllYXIg
aXMgNTMuCi1jb25zdCBpbnQgRGF0ZUNvbXBvbmVudHM6Om1heGltdW1XZWVrTnVtYmVyID0gNTM7
CitzdGF0aWMgY29uc3RleHByIGludCBtYXhpbXVtV2Vla051bWJlciA9IDUzOwogCi1zdGF0aWMg
Y29uc3QgaW50IG1heGltdW1Nb250aEluTWF4aW11bVllYXIgPSA4OyAvLyBUaGlzIGlzIFNlcHRl
bWJlciwgc2luY2UgbW9udGhzIGFyZSAwIGJhc2VkLgotc3RhdGljIGNvbnN0IGludCBtYXhpbXVt
RGF5SW5NYXhpbXVtTW9udGggPSAxMzsKLXN0YXRpYyBjb25zdCBpbnQgbWF4aW11bVdlZWtJbk1h
eGltdW1ZZWFyID0gMzc7IC8vIFRoZSB3ZWVrIG9mIDI3NTc2MC0wOS0xMworc3RhdGljIGNvbnN0
ZXhwciBpbnQgbWF4aW11bU1vbnRoSW5NYXhpbXVtWWVhciA9IDg7IC8vIFRoaXMgaXMgU2VwdGVt
YmVyLCBzaW5jZSBtb250aHMgYXJlIDAgYmFzZWQuCitzdGF0aWMgY29uc3RleHByIGludCBtYXhp
bXVtRGF5SW5NYXhpbXVtTW9udGggPSAxMzsKK3N0YXRpYyBjb25zdGV4cHIgaW50IG1heGltdW1X
ZWVrSW5NYXhpbXVtWWVhciA9IDM3OyAvLyBUaGUgd2VlayBvZiAyNzU3NjAtMDktMTMKIAotc3Rh
dGljIGNvbnN0IGludCBkYXlzSW5Nb250aFsxMl0gPSB7MzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwg
MzEsIDMxLCAzMCwgMzEsIDMwLCAzMX07CitzdGF0aWMgY29uc3RleHByIGludCBkYXlzSW5Nb250
aFsxMl0gPSB7IDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzEg
fTsKIAogc3RhdGljIGJvb2wgaXNMZWFwWWVhcihpbnQgeWVhcikKIHsKQEAgLTk2LDY4ICsxMDYs
NzMgQEAgaW50IERhdGVDb21wb25lbnRzOjptYXhXZWVrTnVtYmVySW5ZZWFyKAogICAgIHJldHVy
biBkYXkgPT0gVGh1cnNkYXkgfHwgKGRheSA9PSBXZWRuZXNkYXkgJiYgaXNMZWFwWWVhcihtX3ll
YXIpKSA/IG1heGltdW1XZWVrTnVtYmVyIDogbWF4aW11bVdlZWtOdW1iZXIgLSAxOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgdW5zaWduZWQgY291bnREaWdp
dHMoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0
YXJ0KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIHVuc2lnbmVkIGNv
dW50RGlnaXRzKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gYnVmZmVyKQogewot
ICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnQ7Ci0gICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyAr
K2luZGV4KSB7Ci0gICAgICAgIGlmICghaXNBU0NJSURpZ2l0KHNyY1tpbmRleF0pKQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBpbmRleCAtIHN0YXJ0OworICAgIGF1dG8g
YmVnaW4gPSBidWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNBU0NJSURpZ2l0PihidWZmZXIpOworICAgIHJldHVybiBidWZmZXIucG9zaXRpb24oKSAtIGJl
Z2luOwogfQogCiAvLyBWZXJ5IHN0cmljdCBpbnRlZ2VyIHBhcnNlci4gRG8gbm90IGFsbG93IGxl
YWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSB1bmxpa2UgY2hhcmFjdGVyc1RvSW50U3RyaWN0
KCkuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCB0b0ludChj
b25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgcGFyc2VT
dGFydCwgdW5zaWduZWQgcGFyc2VMZW5ndGgsIGludCYgb3V0KQordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPGludD4gcGFyc2VJbnQoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyLCB1bnNpZ25lZCBtYXhpbXVtTnVtYmVyT2ZE
aWdpdHNUb1BhcnNlKQogewotICAgIGlmIChwYXJzZVN0YXJ0ICsgcGFyc2VMZW5ndGggPiBsZW5n
dGggfHwgcGFyc2VMZW5ndGggPD0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGludCB2
YWx1ZSA9IDA7Ci0gICAgYXV0byBjdXJyZW50ID0gc3JjICsgcGFyc2VTdGFydDsKLSAgICBhdXRv
IGVuZCA9IGN1cnJlbnQgKyBwYXJzZUxlbmd0aDsKKyAgICBpZiAobWF4aW11bU51bWJlck9mRGln
aXRzVG9QYXJzZSA+IGJ1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSB8fCAhbWF4aW11bU51bWJlck9m
RGlnaXRzVG9QYXJzZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFdl
IGRvbid0IG5lZWQgdG8gaGFuZGxlIG5lZ2F0aXZlIG51bWJlcnMgZm9yIElTTyA4NjAxLgotICAg
IGZvciAoOyBjdXJyZW50IDwgZW5kOyArK2N1cnJlbnQpIHsKLSAgICAgICAgaWYgKCFpc0FTQ0lJ
RGlnaXQoKmN1cnJlbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpbnQg
ZGlnaXQgPSAqY3VycmVudCAtICcwJzsKKworICAgIGludCB2YWx1ZSA9IDA7CisgICAgdW5zaWdu
ZWQgZGlnaXRzUmVtYWluaW5nID0gMDsKKyAgICB3aGlsZSAoZGlnaXRzUmVtYWluaW5nIDwgbWF4
aW11bU51bWJlck9mRGlnaXRzVG9QYXJzZSkgeworICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgq
YnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGludCBk
aWdpdCA9ICpidWZmZXIgLSAnMCc7CiAgICAgICAgIGlmICh2YWx1ZSA+IChJTlRfTUFYIC0gZGln
aXQpIC8gMTApIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIHZhbHVlID0gdmFs
dWUgKiAxMCArIGRpZ2l0OworICAgICAgICArK2RpZ2l0c1JlbWFpbmluZzsKKyAgICAgICAgKyti
dWZmZXI7CiAgICAgfQotICAgIG91dCA9IHZhbHVlOwotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiB2YWx1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBE
YXRlQ29tcG9uZW50czo6cGFyc2VZZWFyKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxpbnQ+IHBhcnNlSW50V2l0aGluTGlt
aXRzKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlciwgdW5zaWduZWQg
bWF4aW11bU51bWJlck9mRGlnaXRzVG9QYXJzZSwgaW50IG1pbmltdW1WYWx1ZSwgaW50IG1heGlt
dW1WYWx1ZSkKIHsKLSAgICB1bnNpZ25lZCBkaWdpdHNMZW5ndGggPSBjb3VudERpZ2l0cyhzcmMs
IGxlbmd0aCwgc3RhcnQpOworICAgIGF1dG8gdmFsdWUgPSBwYXJzZUludChidWZmZXIsIG1heGlt
dW1OdW1iZXJPZkRpZ2l0c1RvUGFyc2UpOworICAgIGlmICh2YWx1ZSAmJiAoKnZhbHVlIDwgbWlu
aW11bVZhbHVlIHx8ICp2YWx1ZSA+IG1heGltdW1WYWx1ZSkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZVllYXIoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQoreworICAgIHVuc2lnbmVkIGRpZ2l0c0xlbmd0
aCA9IGNvdW50RGlnaXRzKGJ1ZmZlcik7CiAgICAgLy8gTmVlZHMgYXQgbGVhc3QgNCBkaWdpdHMg
YWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KICAgICBpZiAoZGlnaXRzTGVuZ3RoIDwgNCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGludCB5ZWFyOwotICAgIGlmICghdG9JbnQoc3JjLCBs
ZW5ndGgsIHN0YXJ0LCBkaWdpdHNMZW5ndGgsIHllYXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKHllYXIgPCBtaW5pbXVtWWVhcigpIHx8IHllYXIgPiBtYXhpbXVtWWVhcigpKQor
CisgICAgYXV0byB5ZWFyID0gcGFyc2VJbnRXaXRoaW5MaW1pdHMoYnVmZmVyLCBkaWdpdHNMZW5n
dGgsIG1pbmltdW1ZZWFyLCBtYXhpbXVtWWVhcik7CisgICAgaWYgKCF5ZWFyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV95ZWFyID0geWVhcjsKLSAgICBlbmQgPSBzdGFydCArIGRpZ2l0
c0xlbmd0aDsKKworICAgIG1feWVhciA9ICp5ZWFyOwogICAgIHJldHVybiB0cnVlOwogfQogCiBz
dGF0aWMgYm9vbCB3aXRoaW5IVE1MRGF0ZUxpbWl0cyhpbnQgeWVhciwgaW50IG1vbnRoKQogewot
ICAgIGlmICh5ZWFyIDwgRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1ZZWFyKCkpCisgICAgaWYgKHll
YXIgPCBtaW5pbXVtWWVhcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICh5ZWFyIDwg
RGF0ZUNvbXBvbmVudHM6Om1heGltdW1ZZWFyKCkpCisgICAgaWYgKHllYXIgPCBtYXhpbXVtWWVh
cikKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIG1vbnRoIDw9IG1heGltdW1Nb250
aEluTWF4aW11bVllYXI7CiB9CiAKIHN0YXRpYyBib29sIHdpdGhpbkhUTUxEYXRlTGltaXRzKGlu
dCB5ZWFyLCBpbnQgbW9udGgsIGludCBtb250aERheSkKIHsKLSAgICBpZiAoeWVhciA8IERhdGVD
b21wb25lbnRzOjptaW5pbXVtWWVhcigpKQorICAgIGlmICh5ZWFyIDwgbWluaW11bVllYXIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoeWVhciA8IERhdGVDb21wb25lbnRzOjptYXhp
bXVtWWVhcigpKQorICAgIGlmICh5ZWFyIDwgbWF4aW11bVllYXIpCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIGlmIChtb250aCA8IG1heGltdW1Nb250aEluTWF4aW11bVllYXIpCiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMTY2LDkgKzE4MSw5IEBAIHN0YXRpYyBib29sIHdpdGhpbkhUTUxE
YXRlTGltaXRzKGludCB5ZWEKIAogc3RhdGljIGJvb2wgd2l0aGluSFRNTERhdGVMaW1pdHMoaW50
IHllYXIsIGludCBtb250aCwgaW50IG1vbnRoRGF5LCBpbnQgaG91ciwgaW50IG1pbnV0ZSwgaW50
IHNlY29uZCwgaW50IG1pbGxpc2Vjb25kKQogewotICAgIGlmICh5ZWFyIDwgRGF0ZUNvbXBvbmVu
dHM6Om1pbmltdW1ZZWFyKCkpCisgICAgaWYgKHllYXIgPCBtaW5pbXVtWWVhcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICh5ZWFyIDwgRGF0ZUNvbXBvbmVudHM6Om1heGltdW1ZZWFy
KCkpCisgICAgaWYgKHllYXIgPCBtYXhpbXVtWWVhcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgaWYgKG1vbnRoIDwgbWF4aW11bU1vbnRoSW5NYXhpbXVtWWVhcikKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0xODUsNTIgKzIwMCw0NiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBGPiBzdGF0aWMg
T3B0aW9uYWw8RGF0CiAgICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBEYXRlQ29tcG9uZW50cyByZXN1bHQ7Ci0gICAgdW5zaWduZWQg
ZW5kOwotICAgIGlmIChzb3VyY2UuaXM4Qml0KCkpIHsKLSAgICAgICAgaWYgKCFwYXJzZUZ1bmN0
aW9uKHJlc3VsdCwgc291cmNlLmNoYXJhY3RlcnM4KCksIHNvdXJjZS5sZW5ndGgoKSwgZW5kKSkK
KyAgICByZXR1cm4gcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHNvdXJjZSwgWyZdKGF1dG8gYnVm
ZmVyKSAtPiBPcHRpb25hbDxEYXRlQ29tcG9uZW50cz4geworICAgICAgICBEYXRlQ29tcG9uZW50
cyBkYXRlOworICAgICAgICBpZiAoIXBhcnNlRnVuY3Rpb24oYnVmZmVyLCBkYXRlKSB8fCAhYnVm
ZmVyLmF0RW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmICghcGFyc2VGdW5jdGlvbihyZXN1bHQsIHNvdXJjZS5jaGFyYWN0ZXJz
MTYoKSwgc291cmNlLmxlbmd0aCgpLCBlbmQpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLSAgICB9Ci0gICAgaWYgKGVuZCAhPSBzb3VyY2UubGVuZ3RoKCkpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGRh
dGU7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPERhdGVDb21wb25lbnRzPiBEYXRlQ29tcG9uZW50
czo6ZnJvbVBhcnNpbmdNb250aChTdHJpbmdWaWV3IHNvdXJjZSkKIHsKLSAgICByZXR1cm4gY3Jl
YXRlRnJvbVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBkYXRlLCBjb25zdCBhdXRvKiBzcmMsIGF1
dG8gbGVuZ3RoLCBhdXRvJiBlbmQpIHsKLSAgICAgICAgcmV0dXJuIGRhdGUucGFyc2VNb250aChz
cmMsIGxlbmd0aCwgMCwgZW5kKTsKKyAgICByZXR1cm4gY3JlYXRlRnJvbVN0cmluZyhzb3VyY2Us
IFtdIChhdXRvJiBidWZmZXIsIGF1dG8mIGRhdGUpIHsKKyAgICAgICAgcmV0dXJuIGRhdGUucGFy
c2VNb250aChidWZmZXIpOwogICAgIH0pOwogfQogCiBPcHRpb25hbDxEYXRlQ29tcG9uZW50cz4g
RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nRGF0ZShTdHJpbmdWaWV3IHNvdXJjZSkKIHsKLSAg
ICByZXR1cm4gY3JlYXRlRnJvbVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBkYXRlLCBjb25zdCBh
dXRvKiBzcmMsIGF1dG8gbGVuZ3RoLCBhdXRvJiBlbmQpIHsKLSAgICAgICAgcmV0dXJuIGRhdGUu
cGFyc2VEYXRlKHNyYywgbGVuZ3RoLCAwLCBlbmQpOworICAgIHJldHVybiBjcmVhdGVGcm9tU3Ry
aW5nKHNvdXJjZSwgW10gKGF1dG8mIGJ1ZmZlciwgYXV0byYgZGF0ZSkgeworICAgICAgICByZXR1
cm4gZGF0ZS5wYXJzZURhdGUoYnVmZmVyKTsKICAgICB9KTsKIH0KIAogT3B0aW9uYWw8RGF0ZUNv
bXBvbmVudHM+IERhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ1dlZWsoU3RyaW5nVmlldyBzb3Vy
Y2UpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgZGF0
ZSwgY29uc3QgYXV0byogc3JjLCBhdXRvIGxlbmd0aCwgYXV0byYgZW5kKSB7Ci0gICAgICAgIHJl
dHVybiBkYXRlLnBhcnNlV2VlayhzcmMsIGxlbmd0aCwgMCwgZW5kKTsKKyAgICByZXR1cm4gY3Jl
YXRlRnJvbVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBidWZmZXIsIGF1dG8mIGRhdGUpIHsKKyAg
ICAgICAgcmV0dXJuIGRhdGUucGFyc2VXZWVrKGJ1ZmZlcik7CiAgICAgfSk7CiB9CiAKIE9wdGlv
bmFsPERhdGVDb21wb25lbnRzPiBEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdUaW1lKFN0cmlu
Z1ZpZXcgc291cmNlKQogewotICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10g
KGF1dG8mIGRhdGUsIGNvbnN0IGF1dG8qIHNyYywgYXV0byBsZW5ndGgsIGF1dG8mIGVuZCkgewot
ICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZVRpbWUoc3JjLCBsZW5ndGgsIDAsIGVuZCk7CisgICAg
cmV0dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgYnVmZmVyLCBhdXRvJiBk
YXRlKSB7CisgICAgICAgIHJldHVybiBkYXRlLnBhcnNlVGltZShidWZmZXIpOwogICAgIH0pOwog
fQogCiBPcHRpb25hbDxEYXRlQ29tcG9uZW50cz4gRGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5n
RGF0ZVRpbWVMb2NhbChTdHJpbmdWaWV3IHNvdXJjZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlRnJv
bVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBkYXRlLCBjb25zdCBhdXRvKiBzcmMsIGF1dG8gbGVu
Z3RoLCBhdXRvJiBlbmQpIHsKLSAgICAgICAgcmV0dXJuIGRhdGUucGFyc2VEYXRlVGltZUxvY2Fs
KHNyYywgbGVuZ3RoLCAwLCBlbmQpOworICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJj
ZSwgW10gKGF1dG8mIGJ1ZmZlciwgYXV0byYgZGF0ZSkgeworICAgICAgICByZXR1cm4gZGF0ZS5w
YXJzZURhdGVUaW1lTG9jYWwoYnVmZmVyKTsKICAgICB9KTsKIH0KIApAQCAtMzM3LDE5NSArMzQ2
LDE3NSBAQCBib29sIERhdGVDb21wb25lbnRzOjphZGRNaW51dGUoaW50IG1pbnV0CiB9CiAKIC8v
IFBhcnNlcyBhIHRpbWV6b25lIHBhcnQsIGFuZCBhZGp1c3QgeWVhciwgbW9udGgsIG1vbnRoRGF5
LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZVRpbWVab25lKGNvbnN0IENo
YXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNvbXBv
bmVudHM6OnBhcnNlVGltZVpvbmUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYg
YnVmZmVyKQogewotICAgIGlmIChzdGFydCA+PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXJ0OwotICAgIGlmIChzcmNbaW5kZXhdID09ICda
JykgewotICAgICAgICBlbmQgPSBpbmRleCArIDE7CisgICAgaWYgKHNraXBFeGFjdGx5KGJ1ZmZl
ciwgJ1onKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQogCiAgICAgYm9vbCBtaW51czsK
LSAgICBpZiAoc3JjW2luZGV4XSA9PSAnKycpCisgICAgaWYgKHNraXBFeGFjdGx5KGJ1ZmZlciwg
JysnKSkKICAgICAgICAgbWludXMgPSBmYWxzZTsKLSAgICBlbHNlIGlmIChzcmNbaW5kZXhdID09
ICctJykKKyAgICBlbHNlIGlmIChza2lwRXhhY3RseShidWZmZXIsICctJykpCiAgICAgICAgIG1p
bnVzID0gdHJ1ZTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4
OwogCi0gICAgaW50IGhvdXI7Ci0gICAgaW50IG1pbnV0ZTsKLSAgICBpZiAoIXRvSW50KHNyYywg
bGVuZ3RoLCBpbmRleCwgMiwgaG91cikgfHwgaG91ciA8IDAgfHwgaG91ciA+IDIzKQorICAgIGF1
dG8gaG91ciA9IHBhcnNlSW50V2l0aGluTGltaXRzKGJ1ZmZlciwgMiwgMCwgMjMpOworICAgIGlm
ICghaG91cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGluZGV4ICs9IDI7CiAKLSAgICBp
ZiAoaW5kZXggPj0gbGVuZ3RoIHx8IHNyY1tpbmRleF0gIT0gJzonKQorICAgIGlmICghc2tpcEV4
YWN0bHkoYnVmZmVyLCAnOicpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKytpbmRleDsK
IAotICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBtaW51dGUpIHx8IG1pbnV0
ZSA8IDAgfHwgbWludXRlID4gNTkpCisgICAgYXV0byBtaW51dGUgPSBwYXJzZUludFdpdGhpbkxp
bWl0cyhidWZmZXIsIDIsIDAsIDU5KTsKKyAgICBpZiAoIW1pbnV0ZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGluZGV4ICs9IDI7CiAKICAgICBpZiAobWludXMpIHsKLSAgICAgICAgaG91
ciA9IC1ob3VyOwotICAgICAgICBtaW51dGUgPSAtbWludXRlOworICAgICAgICAqaG91ciA9IC0q
aG91cjsKKyAgICAgICAgKm1pbnV0ZSA9IC0qbWludXRlOwogICAgIH0KIAogICAgIC8vIFN1YnRy
YWN0IHRoZSB0aW1lem9uZSBvZmZzZXQuCi0gICAgaWYgKCFhZGRNaW51dGUoLShob3VyICogNjAg
KyBtaW51dGUpKSkKKyAgICBpZiAoIWFkZE1pbnV0ZSgtKCpob3VyICogNjAgKyAqbWludXRlKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBlbmQgPSBpbmRleDsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9u
ZW50czo6cGFyc2VNb250aChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0
aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZU1vbnRoKFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKIHsKLSAgICBBU1NFUlQoc3JjKTsKLSAgICB1
bnNpZ25lZCBpbmRleDsKLSAgICBpZiAoIXBhcnNlWWVhcihzcmMsIGxlbmd0aCwgc3RhcnQsIGlu
ZGV4KSkKKyAgICBpZiAoIXBhcnNlWWVhcihidWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKGluZGV4ID49IGxlbmd0aCB8fCBzcmNbaW5kZXhdICE9ICctJykKKworICAgIGlm
ICghc2tpcEV4YWN0bHkoYnVmZmVyLCAnLScpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
KytpbmRleDsKIAotICAgIGludCBtb250aDsKLSAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBp
bmRleCwgMiwgbW9udGgpIHx8IG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKQorICAgIGF1dG8gbW9u
dGggPSBwYXJzZUludFdpdGhpbkxpbWl0cyhidWZmZXIsIDIsIDEsIDEyKTsKKyAgICBpZiAoIW1v
bnRoKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLS1tb250aDsKLSAgICBpZiAoIXdpdGhp
bkhUTUxEYXRlTGltaXRzKG1feWVhciwgbW9udGgpKQorICAgIC0tKm1vbnRoOworCisgICAgaWYg
KCF3aXRoaW5IVE1MRGF0ZUxpbWl0cyhtX3llYXIsICptb250aCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX21vbnRoID0gbW9udGg7Ci0gICAgZW5kID0gaW5kZXggKyAyOworCisgICAg
bV9tb250aCA9ICptb250aDsKICAgICBtX3R5cGUgPSBNb250aDsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9uZW50
czo6cGFyc2VEYXRlKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1
bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGJvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZShTdHJpbmdQYXJzaW5nQnVmZmVy
PENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7Ci0gICAgQVNTRVJUKHNyYyk7Ci0gICAgdW5zaWdu
ZWQgaW5kZXg7Ci0gICAgaWYgKCFwYXJzZU1vbnRoKHNyYywgbGVuZ3RoLCBzdGFydCwgaW5kZXgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gJy0nIGFuZCAyLWRpZ2l0cyBhcmUgbmVl
ZGVkLgotICAgIGlmIChpbmRleCArIDIgPj0gbGVuZ3RoKQorICAgIGlmICghcGFyc2VNb250aChi
dWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNyY1tpbmRleF0gIT0gJy0n
KQorCisgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICctJykpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICArK2luZGV4OwogCi0gICAgaW50IGRheTsKLSAgICBpZiAoIXRvSW50KHNyYywg
bGVuZ3RoLCBpbmRleCwgMiwgZGF5KSB8fCBkYXkgPCAxIHx8IGRheSA+IG1heERheU9mTW9udGgo
bV95ZWFyLCBtX21vbnRoKSkKKyAgICBhdXRvIGRheSA9IHBhcnNlSW50V2l0aGluTGltaXRzKGJ1
ZmZlciwgMiwgMSwgbWF4RGF5T2ZNb250aChtX3llYXIsIG1fbW9udGgpKTsKKyAgICBpZiAoIWRh
eSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghd2l0aGluSFRNTERhdGVMaW1pdHMo
bV95ZWFyLCBtX21vbnRoLCBkYXkpKQorCisgICAgaWYgKCF3aXRoaW5IVE1MRGF0ZUxpbWl0cyht
X3llYXIsIG1fbW9udGgsICpkYXkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb250
aERheSA9IGRheTsKLSAgICBlbmQgPSBpbmRleCArIDI7CisKKyAgICBtX21vbnRoRGF5ID0gKmRh
eTsKICAgICBtX3R5cGUgPSBEYXRlOwogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZVdlZWsoY29u
c3QgQ2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1
bnNpZ25lZCYgZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRl
Q29tcG9uZW50czo6cGFyc2VXZWVrKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4m
IGJ1ZmZlcikKIHsKLSAgICBBU1NFUlQoc3JjKTsKLSAgICB1bnNpZ25lZCBpbmRleDsKLSAgICBp
ZiAoIXBhcnNlWWVhcihzcmMsIGxlbmd0aCwgc3RhcnQsIGluZGV4KSkKKyAgICBpZiAoIXBhcnNl
WWVhcihidWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyA0IGNoYXJhY3Rl
cnMgKCctJyAnVycgZGlnaXQgZGlnaXQpIGFyZSBuZWVkZWQuCi0gICAgaWYgKGluZGV4ICsgMyA+
PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3JjW2luZGV4XSAhPSAn
LScpCisgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICctJykpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICArK2luZGV4OwotICAgIGlmIChzcmNbaW5kZXhdICE9ICdXJykKKyAgICBpZiAo
IXNraXBFeGFjdGx5KGJ1ZmZlciwgJ1cnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsr
aW5kZXg7CiAKLSAgICBpbnQgd2VlazsKLSAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBpbmRl
eCwgMiwgd2VlaykgfHwgd2VlayA8IG1pbmltdW1XZWVrTnVtYmVyIHx8IHdlZWsgPiBtYXhXZWVr
TnVtYmVySW5ZZWFyKCkpCisgICAgYXV0byB3ZWVrID0gcGFyc2VJbnRXaXRoaW5MaW1pdHMoYnVm
ZmVyLCAyLCBtaW5pbXVtV2Vla051bWJlciwgbWF4V2Vla051bWJlckluWWVhcigpKTsKKyAgICBp
ZiAoIXdlZWspCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV95ZWFyID09IG1heGlt
dW1ZZWFyKCkgJiYgd2VlayA+IG1heGltdW1XZWVrSW5NYXhpbXVtWWVhcikKKworICAgIGlmICht
X3llYXIgPT0gbWF4aW11bVllYXIgJiYgKndlZWsgPiBtYXhpbXVtV2Vla0luTWF4aW11bVllYXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3dlZWsgPSB3ZWVrOwotICAgIGVuZCA9IGlu
ZGV4ICsgMjsKKworICAgIG1fd2VlayA9ICp3ZWVrOwogICAgIG1fdHlwZSA9IFdlZWs7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wg
RGF0ZUNvbXBvbmVudHM6OnBhcnNlVGltZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZVRpbWUoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewotICAgIEFTU0VSVChzcmMp
OwotICAgIGludCBob3VyOwotICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIHN0YXJ0LCAyLCBo
b3VyKSB8fCBob3VyIDwgMCB8fCBob3VyID4gMjMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB1bnNpZ25lZCBpbmRleCA9IHN0YXJ0ICsgMjsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQor
ICAgIGF1dG8gaG91ciA9IHBhcnNlSW50V2l0aGluTGltaXRzKGJ1ZmZlciwgMiwgMCwgMjMpOwor
ICAgIGlmICghaG91cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzcmNbaW5kZXhd
ICE9ICc6JykKKworICAgIGlmICghc2tpcEV4YWN0bHkoYnVmZmVyLCAnOicpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgKytpbmRleDsKIAotICAgIGludCBtaW51dGU7Ci0gICAgaWYgKCF0
b0ludChzcmMsIGxlbmd0aCwgaW5kZXgsIDIsIG1pbnV0ZSkgfHwgbWludXRlIDwgMCB8fCBtaW51
dGUgPiA1OSkKKyAgICBhdXRvIG1pbnV0ZSA9IHBhcnNlSW50V2l0aGluTGltaXRzKGJ1ZmZlciwg
MiwgMCwgNTkpOworICAgIGlmICghbWludXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aW5kZXggKz0gMjsKIAotICAgIGludCBzZWNvbmQgPSAwOwotICAgIGludCBtaWxsaXNlY29uZCA9
IDA7CiAgICAgLy8gT3B0aW9uYWwgc2Vjb25kIHBhcnQuCiAgICAgLy8gRG8gbm90IHJldHVybiB3
aXRoIGZhbHNlIGJlY2F1c2UgdGhlIHBhcnQgaXMgb3B0aW9uYWwuCi0gICAgaWYgKGluZGV4ICsg
MiA8IGxlbmd0aCAmJiBzcmNbaW5kZXhdID09ICc6JykgewotICAgICAgICBpZiAodG9JbnQoc3Jj
LCBsZW5ndGgsIGluZGV4ICsgMSwgMiwgc2Vjb25kKSAmJiBzZWNvbmQgPj0gMCAmJiBzZWNvbmQg
PD0gNTkpIHsKLSAgICAgICAgICAgIGluZGV4ICs9IDM7CisgICAgT3B0aW9uYWw8aW50PiBzZWNv
bmQ7CisgICAgT3B0aW9uYWw8aW50PiBtaWxsaXNlY29uZDsKKworICAgIFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4gdGVtcG9yYXJ5QnVmZmVyID0gYnVmZmVyOworICAgIGlmIChz
a2lwRXhhY3RseSh0ZW1wb3JhcnlCdWZmZXIsICc6JykpIHsKKyAgICAgICAgc2Vjb25kID0gcGFy
c2VJbnRXaXRoaW5MaW1pdHModGVtcG9yYXJ5QnVmZmVyLCAyLCAwLCA1OSk7CisgICAgICAgIGlm
IChzZWNvbmQpIHsKKyAgICAgICAgICAgIC8vIE9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBhcnNp
bmcgYW5kIHZhbGlkYXRpbmcgJ3NlY29uZCcsIGRvIHdlIGluY3JlbWVudCB0aGUgcmVhbCBidWZm
ZXIuCisgICAgICAgICAgICBidWZmZXIgKz0gdGVtcG9yYXJ5QnVmZmVyLnBvc2l0aW9uKCkgLSBi
dWZmZXIucG9zaXRpb24oKTsKIAogICAgICAgICAgICAgLy8gT3B0aW9uYWwgZnJhY3Rpb25hbCBz
ZWNvbmQgcGFydC4KLSAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBzcmNbaW5kZXhd
ID09ICcuJykgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRpZ2l0c0xlbmd0aCA9IGNvdW50
RGlnaXRzKHNyYywgbGVuZ3RoLCBpbmRleCArIDEpOwotICAgICAgICAgICAgICAgIGlmIChkaWdp
dHNMZW5ndGggPiAgMCkgewotICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAg
ICAgICAgICAgICBib29sIG9rOworICAgICAgICAgICAgaWYgKHNraXBFeGFjdGx5KHRlbXBvcmFy
eUJ1ZmZlciwgJy4nKSkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRpZ2l0c0xlbmd0aCA9
IGNvdW50RGlnaXRzKHRlbXBvcmFyeUJ1ZmZlcik7CisgICAgICAgICAgICAgICAgaWYgKGRpZ2l0
c0xlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgKyt0ZW1wb3JhcnlCdWZmZXI7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHNMZW5ndGggPT0gMSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgb2sgPSB0b0ludChzcmMsIGxlbmd0aCwgaW5kZXgsIDEsIG1pbGxpc2Vjb25k
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kICo9IDEwMDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kID0gcGFyc2VJbnQodGVtcG9yYXJ5QnVmZmVyLCAx
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICptaWxsaXNlY29uZCAqPSAxMDA7CiAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzTGVuZ3RoID09IDIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9rID0gdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBtaWxsaXNlY29u
ZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZCAqPSAxMDsKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIC8vIGRpZ2l0c0xlbmd0aCA+PSAzCi0gICAgICAgICAgICAgICAg
ICAgICAgICBvayA9IHRvSW50KHNyYywgbGVuZ3RoLCBpbmRleCwgMywgbWlsbGlzZWNvbmQpOwot
ICAgICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0gICAgICAgICAgICAg
ICAgICAgIGluZGV4ICs9IGRpZ2l0c0xlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1p
bGxpc2Vjb25kID0gcGFyc2VJbnQodGVtcG9yYXJ5QnVmZmVyLCAyKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICptaWxsaXNlY29uZCAqPSAxMDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZCA9IHBhcnNlSW50KHRlbXBvcmFy
eUJ1ZmZlciwgMyk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAv
LyBEdWUgdG8gdGhlIGNvdW50RGlnaXRzIGFib3ZlLCB0aGUgcGFyc2VJbnQgY2FsbHMgc2hvdWxk
IGFsbCBiZSBzdWNjZXNzZnVsLgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQobWlsbGlzZWNv
bmQpOworCisgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBh
cnNpbmcgYW5kIHZhbGlkYXRpbmcgJ21pbGxpc2Vjb25kJywgZG8gd2UgaW5jcmVtZW50IHRoZSBy
ZWFsIGJ1ZmZlci4KKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IHRlbXBvcmFyeUJ1ZmZl
ci5wb3NpdGlvbigpIC0gYnVmZmVyLnBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIG1faG91ciA9IGhvdXI7Ci0gICAgbV9t
aW51dGUgPSBtaW51dGU7Ci0gICAgbV9zZWNvbmQgPSBzZWNvbmQ7Ci0gICAgbV9taWxsaXNlY29u
ZCA9IG1pbGxpc2Vjb25kOwotICAgIGVuZCA9IGluZGV4OworCisgICAgbV9ob3VyID0gKmhvdXI7
CisgICAgbV9taW51dGUgPSAqbWludXRlOworICAgIG1fc2Vjb25kID0gc2Vjb25kLnZhbHVlT3Io
MCk7CisgICAgbV9taWxsaXNlY29uZCA9IG1pbGxpc2Vjb25kLnZhbHVlT3IoMCk7CiAgICAgbV90
eXBlID0gVGltZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9uZW50czo6cGFyc2VEYXRlVGltZUxvY2FsKGNvbnN0
IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5z
aWduZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNv
bXBvbmVudHM6OnBhcnNlRGF0ZVRpbWVMb2NhbChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3Rl
clR5cGU+JiBidWZmZXIpCiB7Ci0gICAgQVNTRVJUKHNyYyk7Ci0gICAgdW5zaWduZWQgaW5kZXg7
Ci0gICAgaWYgKCFwYXJzZURhdGUoc3JjLCBsZW5ndGgsIHN0YXJ0LCBpbmRleCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQorICAgIGlmICghcGFyc2VE
YXRlKGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3JjW2luZGV4XSAh
PSAnVCcpCisKKyAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJ1QnKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICsraW5kZXg7Ci0gICAgaWYgKCFwYXJzZVRpbWUoc3JjLCBsZW5ndGgs
IGluZGV4LCBlbmQpKQorCisgICAgaWYgKCFwYXJzZVRpbWUoYnVmZmVyKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOworCiAgICAgaWYgKCF3aXRoaW5IVE1MRGF0ZUxpbWl0cyhtX3llYXIsIG1fbW9u
dGgsIG1fbW9udGhEYXksIG1faG91ciwgbV9taW51dGUsIG1fc2Vjb25kLCBtX21pbGxpc2Vjb25k
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgbV90eXBlID0gRGF0ZVRpbWVMb2NhbDsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY2NCw3ICs2NTMsNyBAQCBib29sIERhdGVDb21wb25l
bnRzOjpzZXRNb250aHNTaW5jZUVwb2NoCiAgICAgbW9udGhzID0gcm91bmQobW9udGhzKTsKICAg
ICBkb3VibGUgZG91YmxlTW9udGggPSBwb3NpdGl2ZUZtb2QobW9udGhzLCAxMik7CiAgICAgZG91
YmxlIGRvdWJsZVllYXIgPSAxOTcwICsgKG1vbnRocyAtIGRvdWJsZU1vbnRoKSAvIDEyOwotICAg
IGlmIChkb3VibGVZZWFyIDwgbWluaW11bVllYXIoKSB8fCBtYXhpbXVtWWVhcigpIDwgZG91Ymxl
WWVhcikKKyAgICBpZiAoZG91YmxlWWVhciA8IG1pbmltdW1ZZWFyIHx8IG1heGltdW1ZZWFyIDwg
ZG91YmxlWWVhcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGludCB5ZWFyID0gc3RhdGlj
X2Nhc3Q8aW50Pihkb3VibGVZZWFyKTsKICAgICBpbnQgbW9udGggPSBzdGF0aWNfY2FzdDxpbnQ+
KGRvdWJsZU1vbnRoKTsKQEAgLTY5NCw3ICs2ODMsNyBAQCBib29sIERhdGVDb21wb25lbnRzOjpz
ZXRNaWxsaXNlY29uZHNTaW5jCiAgICAgbXMgPSByb3VuZChtcyk7CiAKICAgICBtX3llYXIgPSBt
c1RvWWVhcihtcyk7Ci0gICAgaWYgKG1feWVhciA8IG1pbmltdW1ZZWFyKCkgfHwgbV95ZWFyID4g
bWF4aW11bVllYXIoKSkKKyAgICBpZiAobV95ZWFyIDwgbWluaW11bVllYXIgfHwgbV95ZWFyID4g
bWF4aW11bVllYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGludCB5ZWFyRGF5ID0g
ZGF5SW5ZZWFyKG1zLCBtX3llYXIpOwpAQCAtNzAyLDcgKzY5MSw3IEBAIGJvb2wgRGF0ZUNvbXBv
bmVudHM6OnNldE1pbGxpc2Vjb25kc1NpbmMKICAgICBpZiAoeWVhckRheSA8IG9mZnNldCkgewog
ICAgICAgICAvLyBUaGUgZGF5IGJlbG9uZ3MgdG8gdGhlIGxhc3Qgd2VlayBvZiB0aGUgcHJldmlv
dXMgeWVhci4KICAgICAgICAgbV95ZWFyLS07Ci0gICAgICAgIGlmIChtX3llYXIgPD0gbWluaW11
bVllYXIoKSkKKyAgICAgICAgaWYgKG1feWVhciA8PSBtaW5pbXVtWWVhcikKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgbV93ZWVrID0gbWF4V2Vla051bWJlckluWWVhcigpOwog
ICAgIH0gZWxzZSB7CkBAIC03MTEsNyArNzAwLDcgQEAgYm9vbCBEYXRlQ29tcG9uZW50czo6c2V0
TWlsbGlzZWNvbmRzU2luYwogICAgICAgICAgICAgbV95ZWFyKys7CiAgICAgICAgICAgICBtX3dl
ZWsgPSAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX3llYXIgPiBtYXhpbXVtWWVhcigpIHx8
IChtX3llYXIgPT0gbWF4aW11bVllYXIoKSAmJiBtX3dlZWsgPiBtYXhpbXVtV2Vla0luTWF4aW11
bVllYXIpKQorICAgICAgICBpZiAobV95ZWFyID4gbWF4aW11bVllYXIgfHwgKG1feWVhciA9PSBt
YXhpbXVtWWVhciAmJiBtX3dlZWsgPiBtYXhpbXVtV2Vla0luTWF4aW11bVllYXIpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBtX3R5cGUgPSBXZWVrOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oCShyZXZpc2lvbiAyNjUwNjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzcsMjUgKzEzNywxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbmxp
bmUgZG91YmxlIG1heGltdW1UaW1lKCkgeyByZXR1cm4gODYzOTk5OTk7IH0gLy8gMjM6NTk6NTku
OTk5CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbmxpbmUgZG91YmxlIG1heGltdW1XZWVrKCkgeyBy
ZXR1cm4gODYzOTk5OTU2ODAwMDAwMC4wOyB9IC8vIDI3NTc2MC0wOS0wOCwgdGhlIE1vbmRheSBv
ZiB0aGUgd2VlayBpbmNsdWRpbmcgMjc1NzYwLTA5LTEzLgogCi0gICAgLy8gSFRNTDUgdXNlcyBJ
U08tODYwMSBmb3JtYXQgd2l0aCB5ZWFyID49IDEuIEdyZWdvcmlhbiBjYWxlbmRhciBzdGFydGVk
IGluCi0gICAgLy8gMTU4Mi4gSG93ZXZlciwgd2UgbmVlZCB0byBzdXBwb3J0IDAwMDEtMDEtMDEg
aW4gR3JlZ29yaWFuIGNhbGVuZGFyIHJ1bGUuCi0gICAgc3RhdGljIGlubGluZSBpbnQgbWluaW11
bVllYXIoKSB7IHJldHVybiAxOyB9Ci0KLSAgICAvLyBEYXRlIGluIEVDTUFTY3JpcHQgY2FuJ3Qg
cmVwcmVzZW50IGRhdGVzIGxhdGVyIHRoYW4gMjc1NzYwLTA5LTEzVDAwOjAwWi4KLSAgICAvLyBT
bywgd2UgaGF2ZSB0aGUgc2FtZSB1cHBlciBsaW1pdCBpbiBIVE1MNSBkYXRlL3RpbWUgdHlwZXMu
Ci0gICAgc3RhdGljIGlubGluZSBpbnQgbWF4aW11bVllYXIoKSB7IHJldHVybiAyNzU3NjA7IH0K
LQotICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVdlZWtOdW1iZXI7Ci0gICAgc3RhdGljIGNv
bnN0IGludCBtYXhpbXVtV2Vla051bWJlcjsKLQogcHJpdmF0ZToKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlTW9udGgoY29uc3QgQ2hhcmFjdGVyVHlwZSog
c3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKTsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlRGF0ZShjb25zdCBD
aGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkJiBlbmQpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFy
c2VXZWVrKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gYm9vbCBwYXJzZVRpbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25lZCBs
ZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKTsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlRGF0ZVRpbWVMb2NhbChjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBl
bmQpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VZZWFy
KGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQmIGVuZCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Ym9vbCBwYXJzZVRpbWVab25lKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVu
Z3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVllYXIoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFy
YWN0ZXJUeXBlPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wg
cGFyc2VUaW1lWm9uZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+Jik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZU1vbnRoKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBib29sIHBhcnNlRGF0ZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5
cGU+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVdl
ZWsoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VUaW1lKFN0cmluZ1BhcnNpbmdCdWZmZXI8
Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBi
b29sIHBhcnNlRGF0ZVRpbWVMb2NhbChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+
Jik7CiAKICAgICAvLyBUaGUgZm9sbG93aW5nIHNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3Iq
KCkgZnVuY3Rpb25zIHRha2UKICAgICAvLyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5j
ZSAxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMCBVVEMgYXMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405591</attachid>
            <date>2020-07-30 11:03:59 -0700</date>
            <delta_ts>2020-07-30 14:30:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213929-20200730110358.patch</filename>
            <type>text/plain</type>
            <size>25183</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDIwLTA3LTMwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBDb252ZXJ0IERhdGVDb21wb25lbnRz
IHRvIHVzZSBTdHJpbmdQYXJzaW5nQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM5MjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAtIFN3aXRjaGVzIHN0cmluZyBwYXJzaW5nIGluIERhdGVDb21w
b25lbnRzIHRvIHVzaW5nIFN0cmluZ1BhcnNpbmdCdWZmZXIsCisgICAgICAgICAgbWFraW5nIHVz
ZSBvZiBQYXJzaW5nVXRpbGl0aWVzIHRvIHN0cmVhbWxpbmUgLyBzaW1wbGlmeSB0aGUgY29kZS4K
KyAgICAgICAgLSBNb3ZlcyBhIGZldyBjb25zdGFudCB2YWx1ZXMgb25seSB1c2VkIGluIERhdGVD
b21wb25lbnRzLmNwcCB0byBEYXRlQ29tcG9uZW50cy5jcHAKKyAgICAgICAgLSBSZW5hbWUgdG9J
bnQgaW4gRGF0ZUNvbXBvbmVudHMuY3BwIHRvIHBhcnNlSW50LCBhbmQgaGF2ZSB1c2UgYW4gT3B0
aW9uYWwgcmV0dXJuCisgICAgICAgICAgdmFsdWUgcmF0aGVyIHRoYW4gYm9vbCArIG91dC1wYXJh
bWV0ZXIuCisgICAgICAgIC0gQWRkIG5ldyBwYXJzZUludFdpdGhpbkxpbWl0cyB0aGF0IGFsc28g
Y2hlY2tzIHRoYXQgcGFyc2VkIHZhbHVlIGlzIHdpdGhpbiBzcGVjZmllZAorICAgICAgICAgIGxp
bWl0cywgYXMgdGhpcyBpcyB3aGF0IGFsbW9zdCBhbGwgb2YgdGhlIGludCBwYXJzaW5nIGluIERh
dGVDb21wb25lbnRzIG5lZWRzLgorCisgICAgICAgICogcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y291bnREaWdpdHMpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VJbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VJbnRXaXRoaW5MaW1pdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlWWVhcik6CisgICAgICAgIChXZWJD
b3JlOjp3aXRoaW5IVE1MRGF0ZUxpbWl0cyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcm9t
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ01v
bnRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ0RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nV2Vlayk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdUaW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ0RhdGVUaW1lTG9jYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nRGF0ZVRpbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlVGltZVpvbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlTW9udGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29t
cG9uZW50czo6cGFyc2VXZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpw
YXJzZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZVRp
bWVMb2NhbCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6cGFyc2VEYXRlVGlt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TW9udGhzU2luY2VFcG9j
aCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2lu
Y2VFcG9jaEZvcldlZWspOgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL0RhdGVDb21wb25lbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
Q29tcG9uZW50czo6bWluaW11bVllYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZUNvbXBvbmVudHM6Om1heGltdW1ZZWFyKTogRGVsZXRlZC4KKwogMjAyMC0wNy0yOSAgQ2xhcmsg
V2FuZyAgPGNsYXJrX3dhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZGVkIGNvcHlGcm9tQ2hh
bm5lbCwgY29weVRvQ2hhbm5lbCB0byBBdWRpb0J1ZmZlcgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmNwcAkocmV2aXNpb24gMjY1MDY0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwyNSArMzEsMzUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRlQ29tcG9u
ZW50cy5oIgogCisjaW5jbHVkZSAiUGFyc2luZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgPGxpbWl0
cy5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRo
Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5n
QnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gSFRNTDUgdXNlcyBJU08tODYw
MSBmb3JtYXQgd2l0aCB5ZWFyID49IDEuIEdyZWdvcmlhbiBjYWxlbmRhciBzdGFydGVkIGluCisv
LyAxNTgyLiBIb3dldmVyLCB3ZSBuZWVkIHRvIHN1cHBvcnQgMDAwMS0wMS0wMSBpbiBHcmVnb3Jp
YW4gY2FsZW5kYXIgcnVsZS4KK3N0YXRpYyBjb25zdGV4cHIgaW50IG1pbmltdW1ZZWFyID0gMTsK
KworLy8gRGF0ZSBpbiBFQ01BU2NyaXB0IGNhbid0IHJlcHJlc2VudCBkYXRlcyBsYXRlciB0aGFu
IDI3NTc2MC0wOS0xM1QwMDowMFouCisvLyBTbywgd2UgaGF2ZSB0aGUgc2FtZSB1cHBlciBsaW1p
dCBpbiBIVE1MNSBkYXRlL3RpbWUgdHlwZXMuCitzdGF0aWMgY29uc3RleHByIGludCBtYXhpbXVt
WWVhciA9IDI3NTc2MDsKKwogLy8gSFRNTDUgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIG1pbmltdW0g
d2VlayBvZiB5ZWFyIGlzIG9uZS4KLWNvbnN0IGludCBEYXRlQ29tcG9uZW50czo6bWluaW11bVdl
ZWtOdW1iZXIgPSAxOworc3RhdGljIGNvbnN0ZXhwciBpbnQgbWluaW11bVdlZWtOdW1iZXIgPSAx
OwogCiAvLyBIVE1MNSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgbWF4aW11bSB3ZWVrIG9mIHllYXIg
aXMgNTMuCi1jb25zdCBpbnQgRGF0ZUNvbXBvbmVudHM6Om1heGltdW1XZWVrTnVtYmVyID0gNTM7
CitzdGF0aWMgY29uc3RleHByIGludCBtYXhpbXVtV2Vla051bWJlciA9IDUzOwogCi1zdGF0aWMg
Y29uc3QgaW50IG1heGltdW1Nb250aEluTWF4aW11bVllYXIgPSA4OyAvLyBUaGlzIGlzIFNlcHRl
bWJlciwgc2luY2UgbW9udGhzIGFyZSAwIGJhc2VkLgotc3RhdGljIGNvbnN0IGludCBtYXhpbXVt
RGF5SW5NYXhpbXVtTW9udGggPSAxMzsKLXN0YXRpYyBjb25zdCBpbnQgbWF4aW11bVdlZWtJbk1h
eGltdW1ZZWFyID0gMzc7IC8vIFRoZSB3ZWVrIG9mIDI3NTc2MC0wOS0xMworc3RhdGljIGNvbnN0
ZXhwciBpbnQgbWF4aW11bU1vbnRoSW5NYXhpbXVtWWVhciA9IDg7IC8vIFRoaXMgaXMgU2VwdGVt
YmVyLCBzaW5jZSBtb250aHMgYXJlIDAgYmFzZWQuCitzdGF0aWMgY29uc3RleHByIGludCBtYXhp
bXVtRGF5SW5NYXhpbXVtTW9udGggPSAxMzsKK3N0YXRpYyBjb25zdGV4cHIgaW50IG1heGltdW1X
ZWVrSW5NYXhpbXVtWWVhciA9IDM3OyAvLyBUaGUgd2VlayBvZiAyNzU3NjAtMDktMTMKIAotc3Rh
dGljIGNvbnN0IGludCBkYXlzSW5Nb250aFsxMl0gPSB7MzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwg
MzEsIDMxLCAzMCwgMzEsIDMwLCAzMX07CitzdGF0aWMgY29uc3RleHByIGludCBkYXlzSW5Nb250
aFsxMl0gPSB7IDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzEg
fTsKIAogc3RhdGljIGJvb2wgaXNMZWFwWWVhcihpbnQgeWVhcikKIHsKQEAgLTk2LDY4ICsxMDYs
NzMgQEAgaW50IERhdGVDb21wb25lbnRzOjptYXhXZWVrTnVtYmVySW5ZZWFyKAogICAgIHJldHVy
biBkYXkgPT0gVGh1cnNkYXkgfHwgKGRheSA9PSBXZWRuZXNkYXkgJiYgaXNMZWFwWWVhcihtX3ll
YXIpKSA/IG1heGltdW1XZWVrTnVtYmVyIDogbWF4aW11bVdlZWtOdW1iZXIgLSAxOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgdW5zaWduZWQgY291bnREaWdp
dHMoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0
YXJ0KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIHVuc2lnbmVkIGNv
dW50RGlnaXRzKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gYnVmZmVyKQogewot
ICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnQ7Ci0gICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyAr
K2luZGV4KSB7Ci0gICAgICAgIGlmICghaXNBU0NJSURpZ2l0KHNyY1tpbmRleF0pKQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBpbmRleCAtIHN0YXJ0OworICAgIGF1dG8g
YmVnaW4gPSBidWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNBU0NJSURpZ2l0PihidWZmZXIpOworICAgIHJldHVybiBidWZmZXIucG9zaXRpb24oKSAtIGJl
Z2luOwogfQogCiAvLyBWZXJ5IHN0cmljdCBpbnRlZ2VyIHBhcnNlci4gRG8gbm90IGFsbG93IGxl
YWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSB1bmxpa2UgY2hhcmFjdGVyc1RvSW50U3RyaWN0
KCkuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCB0b0ludChj
b25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgcGFyc2VT
dGFydCwgdW5zaWduZWQgcGFyc2VMZW5ndGgsIGludCYgb3V0KQordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPGludD4gcGFyc2VJbnQoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyLCB1bnNpZ25lZCBtYXhpbXVtTnVtYmVyT2ZE
aWdpdHNUb1BhcnNlKQogewotICAgIGlmIChwYXJzZVN0YXJ0ICsgcGFyc2VMZW5ndGggPiBsZW5n
dGggfHwgcGFyc2VMZW5ndGggPD0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGludCB2
YWx1ZSA9IDA7Ci0gICAgYXV0byBjdXJyZW50ID0gc3JjICsgcGFyc2VTdGFydDsKLSAgICBhdXRv
IGVuZCA9IGN1cnJlbnQgKyBwYXJzZUxlbmd0aDsKKyAgICBpZiAobWF4aW11bU51bWJlck9mRGln
aXRzVG9QYXJzZSA+IGJ1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSB8fCAhbWF4aW11bU51bWJlck9m
RGlnaXRzVG9QYXJzZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFdl
IGRvbid0IG5lZWQgdG8gaGFuZGxlIG5lZ2F0aXZlIG51bWJlcnMgZm9yIElTTyA4NjAxLgotICAg
IGZvciAoOyBjdXJyZW50IDwgZW5kOyArK2N1cnJlbnQpIHsKLSAgICAgICAgaWYgKCFpc0FTQ0lJ
RGlnaXQoKmN1cnJlbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpbnQg
ZGlnaXQgPSAqY3VycmVudCAtICcwJzsKKworICAgIGludCB2YWx1ZSA9IDA7CisgICAgdW5zaWdu
ZWQgZGlnaXRzUmVtYWluaW5nID0gMDsKKyAgICB3aGlsZSAoZGlnaXRzUmVtYWluaW5nIDwgbWF4
aW11bU51bWJlck9mRGlnaXRzVG9QYXJzZSkgeworICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgq
YnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGludCBk
aWdpdCA9ICpidWZmZXIgLSAnMCc7CiAgICAgICAgIGlmICh2YWx1ZSA+IChJTlRfTUFYIC0gZGln
aXQpIC8gMTApIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIHZhbHVlID0gdmFs
dWUgKiAxMCArIGRpZ2l0OworICAgICAgICArK2RpZ2l0c1JlbWFpbmluZzsKKyAgICAgICAgKyti
dWZmZXI7CiAgICAgfQotICAgIG91dCA9IHZhbHVlOwotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiB2YWx1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBE
YXRlQ29tcG9uZW50czo6cGFyc2VZZWFyKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxpbnQ+IHBhcnNlSW50V2l0aGluTGlt
aXRzKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlciwgdW5zaWduZWQg
bWF4aW11bU51bWJlck9mRGlnaXRzVG9QYXJzZSwgaW50IG1pbmltdW1WYWx1ZSwgaW50IG1heGlt
dW1WYWx1ZSkKIHsKLSAgICB1bnNpZ25lZCBkaWdpdHNMZW5ndGggPSBjb3VudERpZ2l0cyhzcmMs
IGxlbmd0aCwgc3RhcnQpOworICAgIGF1dG8gdmFsdWUgPSBwYXJzZUludChidWZmZXIsIG1heGlt
dW1OdW1iZXJPZkRpZ2l0c1RvUGFyc2UpOworICAgIGlmICh2YWx1ZSAmJiAoKnZhbHVlIDwgbWlu
aW11bVZhbHVlIHx8ICp2YWx1ZSA+IG1heGltdW1WYWx1ZSkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZVllYXIoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQoreworICAgIHVuc2lnbmVkIGRpZ2l0c0xlbmd0
aCA9IGNvdW50RGlnaXRzKGJ1ZmZlcik7CiAgICAgLy8gTmVlZHMgYXQgbGVhc3QgNCBkaWdpdHMg
YWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KICAgICBpZiAoZGlnaXRzTGVuZ3RoIDwgNCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGludCB5ZWFyOwotICAgIGlmICghdG9JbnQoc3JjLCBs
ZW5ndGgsIHN0YXJ0LCBkaWdpdHNMZW5ndGgsIHllYXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKHllYXIgPCBtaW5pbXVtWWVhcigpIHx8IHllYXIgPiBtYXhpbXVtWWVhcigpKQor
CisgICAgYXV0byB5ZWFyID0gcGFyc2VJbnRXaXRoaW5MaW1pdHMoYnVmZmVyLCBkaWdpdHNMZW5n
dGgsIG1pbmltdW1ZZWFyLCBtYXhpbXVtWWVhcik7CisgICAgaWYgKCF5ZWFyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV95ZWFyID0geWVhcjsKLSAgICBlbmQgPSBzdGFydCArIGRpZ2l0
c0xlbmd0aDsKKworICAgIG1feWVhciA9ICp5ZWFyOwogICAgIHJldHVybiB0cnVlOwogfQogCiBz
dGF0aWMgYm9vbCB3aXRoaW5IVE1MRGF0ZUxpbWl0cyhpbnQgeWVhciwgaW50IG1vbnRoKQogewot
ICAgIGlmICh5ZWFyIDwgRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1ZZWFyKCkpCisgICAgaWYgKHll
YXIgPCBtaW5pbXVtWWVhcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICh5ZWFyIDwg
RGF0ZUNvbXBvbmVudHM6Om1heGltdW1ZZWFyKCkpCisgICAgaWYgKHllYXIgPCBtYXhpbXVtWWVh
cikKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIG1vbnRoIDw9IG1heGltdW1Nb250
aEluTWF4aW11bVllYXI7CiB9CiAKIHN0YXRpYyBib29sIHdpdGhpbkhUTUxEYXRlTGltaXRzKGlu
dCB5ZWFyLCBpbnQgbW9udGgsIGludCBtb250aERheSkKIHsKLSAgICBpZiAoeWVhciA8IERhdGVD
b21wb25lbnRzOjptaW5pbXVtWWVhcigpKQorICAgIGlmICh5ZWFyIDwgbWluaW11bVllYXIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoeWVhciA8IERhdGVDb21wb25lbnRzOjptYXhp
bXVtWWVhcigpKQorICAgIGlmICh5ZWFyIDwgbWF4aW11bVllYXIpCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIGlmIChtb250aCA8IG1heGltdW1Nb250aEluTWF4aW11bVllYXIpCiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMTY2LDkgKzE4MSw5IEBAIHN0YXRpYyBib29sIHdpdGhpbkhUTUxE
YXRlTGltaXRzKGludCB5ZWEKIAogc3RhdGljIGJvb2wgd2l0aGluSFRNTERhdGVMaW1pdHMoaW50
IHllYXIsIGludCBtb250aCwgaW50IG1vbnRoRGF5LCBpbnQgaG91ciwgaW50IG1pbnV0ZSwgaW50
IHNlY29uZCwgaW50IG1pbGxpc2Vjb25kKQogewotICAgIGlmICh5ZWFyIDwgRGF0ZUNvbXBvbmVu
dHM6Om1pbmltdW1ZZWFyKCkpCisgICAgaWYgKHllYXIgPCBtaW5pbXVtWWVhcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICh5ZWFyIDwgRGF0ZUNvbXBvbmVudHM6Om1heGltdW1ZZWFy
KCkpCisgICAgaWYgKHllYXIgPCBtYXhpbXVtWWVhcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgaWYgKG1vbnRoIDwgbWF4aW11bU1vbnRoSW5NYXhpbXVtWWVhcikKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0xODUsNTIgKzIwMCw0NiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBGPiBzdGF0aWMg
T3B0aW9uYWw8RGF0CiAgICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBEYXRlQ29tcG9uZW50cyByZXN1bHQ7Ci0gICAgdW5zaWduZWQg
ZW5kOwotICAgIGlmIChzb3VyY2UuaXM4Qml0KCkpIHsKLSAgICAgICAgaWYgKCFwYXJzZUZ1bmN0
aW9uKHJlc3VsdCwgc291cmNlLmNoYXJhY3RlcnM4KCksIHNvdXJjZS5sZW5ndGgoKSwgZW5kKSkK
KyAgICByZXR1cm4gcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHNvdXJjZSwgWyZdKGF1dG8gYnVm
ZmVyKSAtPiBPcHRpb25hbDxEYXRlQ29tcG9uZW50cz4geworICAgICAgICBEYXRlQ29tcG9uZW50
cyBkYXRlOworICAgICAgICBpZiAoIXBhcnNlRnVuY3Rpb24oYnVmZmVyLCBkYXRlKSB8fCAhYnVm
ZmVyLmF0RW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmICghcGFyc2VGdW5jdGlvbihyZXN1bHQsIHNvdXJjZS5jaGFyYWN0ZXJz
MTYoKSwgc291cmNlLmxlbmd0aCgpLCBlbmQpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLSAgICB9Ci0gICAgaWYgKGVuZCAhPSBzb3VyY2UubGVuZ3RoKCkpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGRh
dGU7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPERhdGVDb21wb25lbnRzPiBEYXRlQ29tcG9uZW50
czo6ZnJvbVBhcnNpbmdNb250aChTdHJpbmdWaWV3IHNvdXJjZSkKIHsKLSAgICByZXR1cm4gY3Jl
YXRlRnJvbVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBkYXRlLCBjb25zdCBhdXRvKiBzcmMsIGF1
dG8gbGVuZ3RoLCBhdXRvJiBlbmQpIHsKLSAgICAgICAgcmV0dXJuIGRhdGUucGFyc2VNb250aChz
cmMsIGxlbmd0aCwgMCwgZW5kKTsKKyAgICByZXR1cm4gY3JlYXRlRnJvbVN0cmluZyhzb3VyY2Us
IFtdIChhdXRvJiBidWZmZXIsIGF1dG8mIGRhdGUpIHsKKyAgICAgICAgcmV0dXJuIGRhdGUucGFy
c2VNb250aChidWZmZXIpOwogICAgIH0pOwogfQogCiBPcHRpb25hbDxEYXRlQ29tcG9uZW50cz4g
RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nRGF0ZShTdHJpbmdWaWV3IHNvdXJjZSkKIHsKLSAg
ICByZXR1cm4gY3JlYXRlRnJvbVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBkYXRlLCBjb25zdCBh
dXRvKiBzcmMsIGF1dG8gbGVuZ3RoLCBhdXRvJiBlbmQpIHsKLSAgICAgICAgcmV0dXJuIGRhdGUu
cGFyc2VEYXRlKHNyYywgbGVuZ3RoLCAwLCBlbmQpOworICAgIHJldHVybiBjcmVhdGVGcm9tU3Ry
aW5nKHNvdXJjZSwgW10gKGF1dG8mIGJ1ZmZlciwgYXV0byYgZGF0ZSkgeworICAgICAgICByZXR1
cm4gZGF0ZS5wYXJzZURhdGUoYnVmZmVyKTsKICAgICB9KTsKIH0KIAogT3B0aW9uYWw8RGF0ZUNv
bXBvbmVudHM+IERhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ1dlZWsoU3RyaW5nVmlldyBzb3Vy
Y2UpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgZGF0
ZSwgY29uc3QgYXV0byogc3JjLCBhdXRvIGxlbmd0aCwgYXV0byYgZW5kKSB7Ci0gICAgICAgIHJl
dHVybiBkYXRlLnBhcnNlV2VlayhzcmMsIGxlbmd0aCwgMCwgZW5kKTsKKyAgICByZXR1cm4gY3Jl
YXRlRnJvbVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBidWZmZXIsIGF1dG8mIGRhdGUpIHsKKyAg
ICAgICAgcmV0dXJuIGRhdGUucGFyc2VXZWVrKGJ1ZmZlcik7CiAgICAgfSk7CiB9CiAKIE9wdGlv
bmFsPERhdGVDb21wb25lbnRzPiBEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdUaW1lKFN0cmlu
Z1ZpZXcgc291cmNlKQogewotICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10g
KGF1dG8mIGRhdGUsIGNvbnN0IGF1dG8qIHNyYywgYXV0byBsZW5ndGgsIGF1dG8mIGVuZCkgewot
ICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZVRpbWUoc3JjLCBsZW5ndGgsIDAsIGVuZCk7CisgICAg
cmV0dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgYnVmZmVyLCBhdXRvJiBk
YXRlKSB7CisgICAgICAgIHJldHVybiBkYXRlLnBhcnNlVGltZShidWZmZXIpOwogICAgIH0pOwog
fQogCiBPcHRpb25hbDxEYXRlQ29tcG9uZW50cz4gRGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5n
RGF0ZVRpbWVMb2NhbChTdHJpbmdWaWV3IHNvdXJjZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlRnJv
bVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBkYXRlLCBjb25zdCBhdXRvKiBzcmMsIGF1dG8gbGVu
Z3RoLCBhdXRvJiBlbmQpIHsKLSAgICAgICAgcmV0dXJuIGRhdGUucGFyc2VEYXRlVGltZUxvY2Fs
KHNyYywgbGVuZ3RoLCAwLCBlbmQpOworICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJj
ZSwgW10gKGF1dG8mIGJ1ZmZlciwgYXV0byYgZGF0ZSkgeworICAgICAgICByZXR1cm4gZGF0ZS5w
YXJzZURhdGVUaW1lTG9jYWwoYnVmZmVyKTsKICAgICB9KTsKIH0KIApAQCAtMzM3LDE5NSArMzQ2
LDE3OCBAQCBib29sIERhdGVDb21wb25lbnRzOjphZGRNaW51dGUoaW50IG1pbnV0CiB9CiAKIC8v
IFBhcnNlcyBhIHRpbWV6b25lIHBhcnQsIGFuZCBhZGp1c3QgeWVhciwgbW9udGgsIG1vbnRoRGF5
LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZVRpbWVab25lKGNvbnN0IENo
YXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNvbXBv
bmVudHM6OnBhcnNlVGltZVpvbmUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYg
YnVmZmVyKQogewotICAgIGlmIChzdGFydCA+PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXJ0OwotICAgIGlmIChzcmNbaW5kZXhdID09ICda
JykgewotICAgICAgICBlbmQgPSBpbmRleCArIDE7CisgICAgaWYgKHNraXBFeGFjdGx5KGJ1ZmZl
ciwgJ1onKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQogCiAgICAgYm9vbCBtaW51czsK
LSAgICBpZiAoc3JjW2luZGV4XSA9PSAnKycpCisgICAgaWYgKHNraXBFeGFjdGx5KGJ1ZmZlciwg
JysnKSkKICAgICAgICAgbWludXMgPSBmYWxzZTsKLSAgICBlbHNlIGlmIChzcmNbaW5kZXhdID09
ICctJykKKyAgICBlbHNlIGlmIChza2lwRXhhY3RseShidWZmZXIsICctJykpCiAgICAgICAgIG1p
bnVzID0gdHJ1ZTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4
OwogCi0gICAgaW50IGhvdXI7Ci0gICAgaW50IG1pbnV0ZTsKLSAgICBpZiAoIXRvSW50KHNyYywg
bGVuZ3RoLCBpbmRleCwgMiwgaG91cikgfHwgaG91ciA8IDAgfHwgaG91ciA+IDIzKQorICAgIGF1
dG8gaG91ciA9IHBhcnNlSW50V2l0aGluTGltaXRzKGJ1ZmZlciwgMiwgMCwgMjMpOworICAgIGlm
ICghaG91cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGluZGV4ICs9IDI7CiAKLSAgICBp
ZiAoaW5kZXggPj0gbGVuZ3RoIHx8IHNyY1tpbmRleF0gIT0gJzonKQorICAgIGlmICghc2tpcEV4
YWN0bHkoYnVmZmVyLCAnOicpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKytpbmRleDsK
IAotICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBtaW51dGUpIHx8IG1pbnV0
ZSA8IDAgfHwgbWludXRlID4gNTkpCisgICAgYXV0byBtaW51dGUgPSBwYXJzZUludFdpdGhpbkxp
bWl0cyhidWZmZXIsIDIsIDAsIDU5KTsKKyAgICBpZiAoIW1pbnV0ZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGluZGV4ICs9IDI7CiAKICAgICBpZiAobWludXMpIHsKLSAgICAgICAgaG91
ciA9IC1ob3VyOwotICAgICAgICBtaW51dGUgPSAtbWludXRlOworICAgICAgICAqaG91ciA9IC0q
aG91cjsKKyAgICAgICAgKm1pbnV0ZSA9IC0qbWludXRlOwogICAgIH0KIAogICAgIC8vIFN1YnRy
YWN0IHRoZSB0aW1lem9uZSBvZmZzZXQuCi0gICAgaWYgKCFhZGRNaW51dGUoLShob3VyICogNjAg
KyBtaW51dGUpKSkKKyAgICBpZiAoIWFkZE1pbnV0ZSgtKCpob3VyICogNjAgKyAqbWludXRlKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBlbmQgPSBpbmRleDsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9u
ZW50czo6cGFyc2VNb250aChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0
aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZU1vbnRoKFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKIHsKLSAgICBBU1NFUlQoc3JjKTsKLSAgICB1
bnNpZ25lZCBpbmRleDsKLSAgICBpZiAoIXBhcnNlWWVhcihzcmMsIGxlbmd0aCwgc3RhcnQsIGlu
ZGV4KSkKKyAgICBpZiAoIXBhcnNlWWVhcihidWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKGluZGV4ID49IGxlbmd0aCB8fCBzcmNbaW5kZXhdICE9ICctJykKKworICAgIGlm
ICghc2tpcEV4YWN0bHkoYnVmZmVyLCAnLScpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
KytpbmRleDsKIAotICAgIGludCBtb250aDsKLSAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBp
bmRleCwgMiwgbW9udGgpIHx8IG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKQorICAgIGF1dG8gbW9u
dGggPSBwYXJzZUludFdpdGhpbkxpbWl0cyhidWZmZXIsIDIsIDEsIDEyKTsKKyAgICBpZiAoIW1v
bnRoKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLS1tb250aDsKLSAgICBpZiAoIXdpdGhp
bkhUTUxEYXRlTGltaXRzKG1feWVhciwgbW9udGgpKQorICAgIC0tKm1vbnRoOworCisgICAgaWYg
KCF3aXRoaW5IVE1MRGF0ZUxpbWl0cyhtX3llYXIsICptb250aCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX21vbnRoID0gbW9udGg7Ci0gICAgZW5kID0gaW5kZXggKyAyOworCisgICAg
bV9tb250aCA9ICptb250aDsKICAgICBtX3R5cGUgPSBNb250aDsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9uZW50
czo6cGFyc2VEYXRlKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1
bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGJvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZShTdHJpbmdQYXJzaW5nQnVmZmVy
PENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7Ci0gICAgQVNTRVJUKHNyYyk7Ci0gICAgdW5zaWdu
ZWQgaW5kZXg7Ci0gICAgaWYgKCFwYXJzZU1vbnRoKHNyYywgbGVuZ3RoLCBzdGFydCwgaW5kZXgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gJy0nIGFuZCAyLWRpZ2l0cyBhcmUgbmVl
ZGVkLgotICAgIGlmIChpbmRleCArIDIgPj0gbGVuZ3RoKQorICAgIGlmICghcGFyc2VNb250aChi
dWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNyY1tpbmRleF0gIT0gJy0n
KQorCisgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICctJykpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICArK2luZGV4OwogCi0gICAgaW50IGRheTsKLSAgICBpZiAoIXRvSW50KHNyYywg
bGVuZ3RoLCBpbmRleCwgMiwgZGF5KSB8fCBkYXkgPCAxIHx8IGRheSA+IG1heERheU9mTW9udGgo
bV95ZWFyLCBtX21vbnRoKSkKKyAgICBhdXRvIGRheSA9IHBhcnNlSW50V2l0aGluTGltaXRzKGJ1
ZmZlciwgMiwgMSwgbWF4RGF5T2ZNb250aChtX3llYXIsIG1fbW9udGgpKTsKKyAgICBpZiAoIWRh
eSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghd2l0aGluSFRNTERhdGVMaW1pdHMo
bV95ZWFyLCBtX21vbnRoLCBkYXkpKQorCisgICAgaWYgKCF3aXRoaW5IVE1MRGF0ZUxpbWl0cyht
X3llYXIsIG1fbW9udGgsICpkYXkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb250
aERheSA9IGRheTsKLSAgICBlbmQgPSBpbmRleCArIDI7CisKKyAgICBtX21vbnRoRGF5ID0gKmRh
eTsKICAgICBtX3R5cGUgPSBEYXRlOwogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZVdlZWsoY29u
c3QgQ2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1
bnNpZ25lZCYgZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRl
Q29tcG9uZW50czo6cGFyc2VXZWVrKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4m
IGJ1ZmZlcikKIHsKLSAgICBBU1NFUlQoc3JjKTsKLSAgICB1bnNpZ25lZCBpbmRleDsKLSAgICBp
ZiAoIXBhcnNlWWVhcihzcmMsIGxlbmd0aCwgc3RhcnQsIGluZGV4KSkKKyAgICBpZiAoIXBhcnNl
WWVhcihidWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyA0IGNoYXJhY3Rl
cnMgKCctJyAnVycgZGlnaXQgZGlnaXQpIGFyZSBuZWVkZWQuCi0gICAgaWYgKGluZGV4ICsgMyA+
PSBsZW5ndGgpCisgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICctJykpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoc3JjW2luZGV4XSAhPSAnLScpCisgICAgaWYgKCFza2lwRXhh
Y3RseShidWZmZXIsICdXJykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4Owot
ICAgIGlmIChzcmNbaW5kZXhdICE9ICdXJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsr
aW5kZXg7CiAKLSAgICBpbnQgd2VlazsKLSAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBpbmRl
eCwgMiwgd2VlaykgfHwgd2VlayA8IG1pbmltdW1XZWVrTnVtYmVyIHx8IHdlZWsgPiBtYXhXZWVr
TnVtYmVySW5ZZWFyKCkpCisgICAgYXV0byB3ZWVrID0gcGFyc2VJbnRXaXRoaW5MaW1pdHMoYnVm
ZmVyLCAyLCBtaW5pbXVtV2Vla051bWJlciwgbWF4V2Vla051bWJlckluWWVhcigpKTsKKyAgICBp
ZiAoIXdlZWspCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV95ZWFyID09IG1heGlt
dW1ZZWFyKCkgJiYgd2VlayA+IG1heGltdW1XZWVrSW5NYXhpbXVtWWVhcikKKworICAgIGlmICht
X3llYXIgPT0gbWF4aW11bVllYXIgJiYgKndlZWsgPiBtYXhpbXVtV2Vla0luTWF4aW11bVllYXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3dlZWsgPSB3ZWVrOwotICAgIGVuZCA9IGlu
ZGV4ICsgMjsKKworICAgIG1fd2VlayA9ICp3ZWVrOwogICAgIG1fdHlwZSA9IFdlZWs7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wg
RGF0ZUNvbXBvbmVudHM6OnBhcnNlVGltZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZVRpbWUoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewotICAgIEFTU0VSVChzcmMp
OwotICAgIGludCBob3VyOwotICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIHN0YXJ0LCAyLCBo
b3VyKSB8fCBob3VyIDwgMCB8fCBob3VyID4gMjMpCisgICAgYXV0byBob3VyID0gcGFyc2VJbnRX
aXRoaW5MaW1pdHMoYnVmZmVyLCAyLCAwLCAyMyk7CisgICAgaWYgKCFob3VyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBzdGFydCArIDI7Ci0gICAgaWYgKGlu
ZGV4ID49IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzcmNbaW5kZXhd
ICE9ICc6JykKKworICAgIGlmICghc2tpcEV4YWN0bHkoYnVmZmVyLCAnOicpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgKytpbmRleDsKIAotICAgIGludCBtaW51dGU7Ci0gICAgaWYgKCF0
b0ludChzcmMsIGxlbmd0aCwgaW5kZXgsIDIsIG1pbnV0ZSkgfHwgbWludXRlIDwgMCB8fCBtaW51
dGUgPiA1OSkKKyAgICBhdXRvIG1pbnV0ZSA9IHBhcnNlSW50V2l0aGluTGltaXRzKGJ1ZmZlciwg
MiwgMCwgNTkpOworICAgIGlmICghbWludXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aW5kZXggKz0gMjsKIAotICAgIGludCBzZWNvbmQgPSAwOwotICAgIGludCBtaWxsaXNlY29uZCA9
IDA7CiAgICAgLy8gT3B0aW9uYWwgc2Vjb25kIHBhcnQuCiAgICAgLy8gRG8gbm90IHJldHVybiB3
aXRoIGZhbHNlIGJlY2F1c2UgdGhlIHBhcnQgaXMgb3B0aW9uYWwuCi0gICAgaWYgKGluZGV4ICsg
MiA8IGxlbmd0aCAmJiBzcmNbaW5kZXhdID09ICc6JykgewotICAgICAgICBpZiAodG9JbnQoc3Jj
LCBsZW5ndGgsIGluZGV4ICsgMSwgMiwgc2Vjb25kKSAmJiBzZWNvbmQgPj0gMCAmJiBzZWNvbmQg
PD0gNTkpIHsKLSAgICAgICAgICAgIGluZGV4ICs9IDM7CisgICAgT3B0aW9uYWw8aW50PiBzZWNv
bmQ7CisgICAgT3B0aW9uYWw8aW50PiBtaWxsaXNlY29uZDsKKworICAgIFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4gdGVtcG9yYXJ5QnVmZmVyID0gYnVmZmVyOworICAgIGlmIChz
a2lwRXhhY3RseSh0ZW1wb3JhcnlCdWZmZXIsICc6JykpIHsKKyAgICAgICAgc2Vjb25kID0gcGFy
c2VJbnRXaXRoaW5MaW1pdHModGVtcG9yYXJ5QnVmZmVyLCAyLCAwLCA1OSk7CisgICAgICAgIGlm
IChzZWNvbmQpIHsKKyAgICAgICAgICAgIC8vIE9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBhcnNp
bmcgYW5kIHZhbGlkYXRpbmcgJ3NlY29uZCcsIGRvIHdlIGluY3JlbWVudCB0aGUgcmVhbCBidWZm
ZXIuCisgICAgICAgICAgICBidWZmZXIgKz0gdGVtcG9yYXJ5QnVmZmVyLnBvc2l0aW9uKCkgLSBi
dWZmZXIucG9zaXRpb24oKTsKIAogICAgICAgICAgICAgLy8gT3B0aW9uYWwgZnJhY3Rpb25hbCBz
ZWNvbmQgcGFydC4KLSAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBzcmNbaW5kZXhd
ID09ICcuJykgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRpZ2l0c0xlbmd0aCA9IGNvdW50
RGlnaXRzKHNyYywgbGVuZ3RoLCBpbmRleCArIDEpOwotICAgICAgICAgICAgICAgIGlmIChkaWdp
dHNMZW5ndGggPiAgMCkgewotICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAg
ICAgICAgICAgICBib29sIG9rOworICAgICAgICAgICAgaWYgKHNraXBFeGFjdGx5KHRlbXBvcmFy
eUJ1ZmZlciwgJy4nKSkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRpZ2l0c0xlbmd0aCA9
IGNvdW50RGlnaXRzKHRlbXBvcmFyeUJ1ZmZlcik7CisgICAgICAgICAgICAgICAgaWYgKGRpZ2l0
c0xlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0xlbmd0aCA9PSAx
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvayA9IHRvSW50KHNyYywgbGVuZ3RoLCBpbmRl
eCwgMSwgbWlsbGlzZWNvbmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmQg
Kj0gMTAwOworICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmQgPSBwYXJzZUludCh0
ZW1wb3JhcnlCdWZmZXIsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgKm1pbGxpc2Vjb25k
ICo9IDEwMDsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWdpdHNMZW5ndGggPT0g
MikgewotICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSB0b0ludChzcmMsIGxlbmd0aCwgaW5k
ZXgsIDIsIG1pbGxpc2Vjb25kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25k
ICo9IDEwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgLy8gZGlnaXRzTGVuZ3RoID49IDMK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAz
LCBtaWxsaXNlY29uZCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQob2ssIG9r
KTsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gZGlnaXRzTGVuZ3RoOworICAgICAgICAg
ICAgICAgICAgICAgICAgbWlsbGlzZWNvbmQgPSBwYXJzZUludCh0ZW1wb3JhcnlCdWZmZXIsIDIp
OworICAgICAgICAgICAgICAgICAgICAgICAgKm1pbGxpc2Vjb25kICo9IDEwOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnYXJkbGVz
cyBvZiB0aGUgbnVtYmVyIG9mIGRpZ2l0cywgd2Ugb25seSBldmVyIHBhcnNlIGF0IG1vc3QgMy4g
QWxsIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkaWdpdHMgYWZ0ZXIgdGhhdCBh
cmUgaWdub3JlZCwgYnV0IHRoZSBidWZmZXIgaXMgaW5jcmVtZW50ZWQgYXMgaWYgdGhleSB3ZXJl
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGwgcGFyc2VkLgorICAgICAgICAgICAgICAg
ICAgICAgICAgbWlsbGlzZWNvbmQgPSBwYXJzZUludCh0ZW1wb3JhcnlCdWZmZXIsIDMpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRHVlIHRvIHRoZSBj
b3VudERpZ2l0cyBhYm92ZSwgdGhlIHBhcnNlSW50IGNhbGxzIHNob3VsZCBhbGwgYmUgc3VjY2Vz
c2Z1bC4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1pbGxpc2Vjb25kKTsKKworICAgICAg
ICAgICAgICAgICAgICAvLyBPbmx5IGFmdGVyIHN1Y2Nlc3NmdWxseSBwYXJzaW5nIGFuZCB2YWxp
ZGF0aW5nICdtaWxsaXNlY29uZCcsIGRvIHdlIGluY3JlbWVudCB0aGUgcmVhbCBidWZmZXIuCisg
ICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSAxICsgZGlnaXRzTGVuZ3RoOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBtX2hvdXIgPSBo
b3VyOwotICAgIG1fbWludXRlID0gbWludXRlOwotICAgIG1fc2Vjb25kID0gc2Vjb25kOwotICAg
IG1fbWlsbGlzZWNvbmQgPSBtaWxsaXNlY29uZDsKLSAgICBlbmQgPSBpbmRleDsKKworICAgIG1f
aG91ciA9ICpob3VyOworICAgIG1fbWludXRlID0gKm1pbnV0ZTsKKyAgICBtX3NlY29uZCA9IHNl
Y29uZC52YWx1ZU9yKDApOworICAgIG1fbWlsbGlzZWNvbmQgPSBtaWxsaXNlY29uZC52YWx1ZU9y
KDApOwogICAgIG1fdHlwZSA9IFRpbWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZVRp
bWVMb2NhbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZURhdGVUaW1lTG9jYWwoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewotICAgIEFTU0VSVChzcmMpOwotICAgIHVu
c2lnbmVkIGluZGV4OwotICAgIGlmICghcGFyc2VEYXRlKHNyYywgbGVuZ3RoLCBzdGFydCwgaW5k
ZXgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGluZGV4ID49IGxlbmd0aCkKKyAg
ICBpZiAoIXBhcnNlRGF0ZShidWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KHNyY1tpbmRleF0gIT0gJ1QnKQorCisgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICdUJykp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4OwotICAgIGlmICghcGFyc2VUaW1l
KHNyYywgbGVuZ3RoLCBpbmRleCwgZW5kKSkKKworICAgIGlmICghcGFyc2VUaW1lKGJ1ZmZlcikp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghd2l0aGluSFRNTERhdGVMaW1pdHMo
bV95ZWFyLCBtX21vbnRoLCBtX21vbnRoRGF5LCBtX2hvdXIsIG1fbWludXRlLCBtX3NlY29uZCwg
bV9taWxsaXNlY29uZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIG1fdHlwZSA9IERh
dGVUaW1lTG9jYWw7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC02NjQsNyArNjU2LDcgQEAgYm9v
bCBEYXRlQ29tcG9uZW50czo6c2V0TW9udGhzU2luY2VFcG9jaAogICAgIG1vbnRocyA9IHJvdW5k
KG1vbnRocyk7CiAgICAgZG91YmxlIGRvdWJsZU1vbnRoID0gcG9zaXRpdmVGbW9kKG1vbnRocywg
MTIpOwogICAgIGRvdWJsZSBkb3VibGVZZWFyID0gMTk3MCArIChtb250aHMgLSBkb3VibGVNb250
aCkgLyAxMjsKLSAgICBpZiAoZG91YmxlWWVhciA8IG1pbmltdW1ZZWFyKCkgfHwgbWF4aW11bVll
YXIoKSA8IGRvdWJsZVllYXIpCisgICAgaWYgKGRvdWJsZVllYXIgPCBtaW5pbXVtWWVhciB8fCBt
YXhpbXVtWWVhciA8IGRvdWJsZVllYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbnQg
eWVhciA9IHN0YXRpY19jYXN0PGludD4oZG91YmxlWWVhcik7CiAgICAgaW50IG1vbnRoID0gc3Rh
dGljX2Nhc3Q8aW50Pihkb3VibGVNb250aCk7CkBAIC02OTQsNyArNjg2LDcgQEAgYm9vbCBEYXRl
Q29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2luYwogICAgIG1zID0gcm91bmQobXMpOwogCiAg
ICAgbV95ZWFyID0gbXNUb1llYXIobXMpOwotICAgIGlmIChtX3llYXIgPCBtaW5pbXVtWWVhcigp
IHx8IG1feWVhciA+IG1heGltdW1ZZWFyKCkpCisgICAgaWYgKG1feWVhciA8IG1pbmltdW1ZZWFy
IHx8IG1feWVhciA+IG1heGltdW1ZZWFyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
bnQgeWVhckRheSA9IGRheUluWWVhcihtcywgbV95ZWFyKTsKQEAgLTcwMiw3ICs2OTQsNyBAQCBi
b29sIERhdGVDb21wb25lbnRzOjpzZXRNaWxsaXNlY29uZHNTaW5jCiAgICAgaWYgKHllYXJEYXkg
PCBvZmZzZXQpIHsKICAgICAgICAgLy8gVGhlIGRheSBiZWxvbmdzIHRvIHRoZSBsYXN0IHdlZWsg
b2YgdGhlIHByZXZpb3VzIHllYXIuCiAgICAgICAgIG1feWVhci0tOwotICAgICAgICBpZiAobV95
ZWFyIDw9IG1pbmltdW1ZZWFyKCkpCisgICAgICAgIGlmIChtX3llYXIgPD0gbWluaW11bVllYXIp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG1fd2VlayA9IG1heFdlZWtOdW1i
ZXJJblllYXIoKTsKICAgICB9IGVsc2UgewpAQCAtNzExLDcgKzcwMyw3IEBAIGJvb2wgRGF0ZUNv
bXBvbmVudHM6OnNldE1pbGxpc2Vjb25kc1NpbmMKICAgICAgICAgICAgIG1feWVhcisrOwogICAg
ICAgICAgICAgbV93ZWVrID0gMTsKICAgICAgICAgfQotICAgICAgICBpZiAobV95ZWFyID4gbWF4
aW11bVllYXIoKSB8fCAobV95ZWFyID09IG1heGltdW1ZZWFyKCkgJiYgbV93ZWVrID4gbWF4aW11
bVdlZWtJbk1heGltdW1ZZWFyKSkKKyAgICAgICAgaWYgKG1feWVhciA+IG1heGltdW1ZZWFyIHx8
IChtX3llYXIgPT0gbWF4aW11bVllYXIgJiYgbV93ZWVrID4gbWF4aW11bVdlZWtJbk1heGltdW1Z
ZWFyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgbV90eXBlID0gV2Vl
azsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuaAkocmV2aXNp
b24gMjY1MDY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTM3LDI1ICsxMzcsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW5saW5lIGRvdWJsZSBtYXhpbXVtVGltZSgpIHsgcmV0dXJuIDg2Mzk5OTk5OyB9
IC8vIDIzOjU5OjU5Ljk5OQogICAgIHN0YXRpYyBjb25zdGV4cHIgaW5saW5lIGRvdWJsZSBtYXhp
bXVtV2VlaygpIHsgcmV0dXJuIDg2Mzk5OTk1NjgwMDAwMDAuMDsgfSAvLyAyNzU3NjAtMDktMDgs
IHRoZSBNb25kYXkgb2YgdGhlIHdlZWsgaW5jbHVkaW5nIDI3NTc2MC0wOS0xMy4KIAotICAgIC8v
IEhUTUw1IHVzZXMgSVNPLTg2MDEgZm9ybWF0IHdpdGggeWVhciA+PSAxLiBHcmVnb3JpYW4gY2Fs
ZW5kYXIgc3RhcnRlZCBpbgotICAgIC8vIDE1ODIuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gc3VwcG9y
dCAwMDAxLTAxLTAxIGluIEdyZWdvcmlhbiBjYWxlbmRhciBydWxlLgotICAgIHN0YXRpYyBpbmxp
bmUgaW50IG1pbmltdW1ZZWFyKCkgeyByZXR1cm4gMTsgfQotCi0gICAgLy8gRGF0ZSBpbiBFQ01B
U2NyaXB0IGNhbid0IHJlcHJlc2VudCBkYXRlcyBsYXRlciB0aGFuIDI3NTc2MC0wOS0xM1QwMDow
MFouCi0gICAgLy8gU28sIHdlIGhhdmUgdGhlIHNhbWUgdXBwZXIgbGltaXQgaW4gSFRNTDUgZGF0
ZS90aW1lIHR5cGVzLgotICAgIHN0YXRpYyBpbmxpbmUgaW50IG1heGltdW1ZZWFyKCkgeyByZXR1
cm4gMjc1NzYwOyB9Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1XZWVrTnVtYmVyOwot
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bVdlZWtOdW1iZXI7Ci0KIHByaXZhdGU6Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZU1vbnRoKGNvbnN0IENo
YXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZWQmIGVuZCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJz
ZURhdGUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCYgZW5kKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBib29sIHBhcnNlV2Vlayhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VUaW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHNy
YywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZURhdGVUaW1lTG9jYWwo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCYgZW5kKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBi
b29sIHBhcnNlWWVhcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGJvb2wgcGFyc2VUaW1lWm9uZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMs
IHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VZZWFyKFN0cmluZ1BhcnNp
bmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBib29sIHBhcnNlVGltZVpvbmUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJU
eXBlPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VN
b250aChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+Jik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZURhdGUoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxDaGFyYWN0ZXJUeXBlPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGJvb2wgcGFyc2VXZWVrKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlVGltZShTdHJpbmdQ
YXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gYm9vbCBwYXJzZURhdGVUaW1lTG9jYWwoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiYpOwogCiAgICAgLy8gVGhlIGZvbGxvd2luZyBzZXRNaWxsaXNlY29uZHNT
aW5jZUVwb2NoRm9yKigpIGZ1bmN0aW9ucyB0YWtlCiAgICAgLy8gdGhlIG51bWJlciBvZiBtaWxs
aXNlY29uZHMgc2luY2UgMTk3MC0wMS0wMSAwMDowMDowMC4wMDAgVVRDIGFzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405619</attachid>
            <date>2020-07-30 14:31:00 -0700</date>
            <delta_ts>2020-07-30 17:50:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213929-20200730143059.patch</filename>
            <type>text/plain</type>
            <size>25365</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDIwLTA3LTMwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBDb252ZXJ0IERhdGVDb21wb25lbnRz
IHRvIHVzZSBTdHJpbmdQYXJzaW5nQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM5MjkKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICAtIFN3aXRjaGVzIHN0cmluZyBwYXJzaW5nIGluIERhdGVDb21wb25l
bnRzIHRvIHVzaW5nIFN0cmluZ1BhcnNpbmdCdWZmZXIsCisgICAgICAgICAgbWFraW5nIHVzZSBv
ZiBQYXJzaW5nVXRpbGl0aWVzIHRvIHN0cmVhbWxpbmUgLyBzaW1wbGlmeSB0aGUgY29kZS4KKyAg
ICAgICAgLSBNb3ZlcyBhIGZldyBjb25zdGFudCB2YWx1ZXMgb25seSB1c2VkIGluIERhdGVDb21w
b25lbnRzLmNwcCB0byBEYXRlQ29tcG9uZW50cy5jcHAKKyAgICAgICAgLSBSZW5hbWUgdG9JbnQg
aW4gRGF0ZUNvbXBvbmVudHMuY3BwIHRvIHBhcnNlSW50LCBhbmQgaGF2ZSB1c2UgYW4gT3B0aW9u
YWwgcmV0dXJuCisgICAgICAgICAgdmFsdWUgcmF0aGVyIHRoYW4gYm9vbCArIG91dC1wYXJhbWV0
ZXIuCisgICAgICAgIC0gQWRkIG5ldyBwYXJzZUludFdpdGhpbkxpbWl0cyB0aGF0IGFsc28gY2hl
Y2tzIHRoYXQgcGFyc2VkIHZhbHVlIGlzIHdpdGhpbiBzcGVjZmllZAorICAgICAgICAgIGxpbWl0
cywgYXMgdGhpcyBpcyB3aGF0IGFsbW9zdCBhbGwgb2YgdGhlIGludCBwYXJzaW5nIGluIERhdGVD
b21wb25lbnRzIG5lZWRzLgorCisgICAgICAgICogcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y291bnREaWdpdHMpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VJbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VJbnRXaXRoaW5MaW1pdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlWWVhcik6CisgICAgICAgIChXZWJDb3Jl
Ojp3aXRoaW5IVE1MRGF0ZUxpbWl0cyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcm9tU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ01vbnRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ0RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nV2Vlayk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdUaW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ0RhdGVUaW1lTG9jYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nRGF0ZVRpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlVGltZVpvbmUpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlTW9udGgpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9u
ZW50czo6cGFyc2VXZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpwYXJz
ZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZVRpbWVM
b2NhbCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6cGFyc2VEYXRlVGltZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TW9udGhzU2luY2VFcG9jaCk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2luY2VF
cG9jaEZvcldlZWspOgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL0RhdGVDb21wb25lbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29t
cG9uZW50czo6bWluaW11bVllYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNv
bXBvbmVudHM6Om1heGltdW1ZZWFyKTogRGVsZXRlZC4KKwogMjAyMC0wNy0yOSAgQ2xhcmsgV2Fu
ZyAgPGNsYXJrX3dhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZGVkIGNvcHlGcm9tQ2hhbm5l
bCwgY29weVRvQ2hhbm5lbCB0byBBdWRpb0J1ZmZlcgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RhdGVDb21wb25lbnRzLmNwcAkocmV2aXNpb24gMjY1MDY0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwy
NSArMzEsMzUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRlQ29tcG9uZW50
cy5oIgogCisjaW5jbHVkZSAiUGFyc2luZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgPGxpbWl0cy5o
PgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdD
b25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVm
ZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gSFRNTDUgc3BlY2lmaWNhdGlvbiBk
ZWZpbmVzIG1pbmltdW0gd2VlayBvZiB5ZWFyIGlzIG9uZS4KLWNvbnN0IGludCBEYXRlQ29tcG9u
ZW50czo6bWluaW11bVdlZWtOdW1iZXIgPSAxOworLy8gSFRNTCB1c2VzIElTTy04NjAxIGZvcm1h
dCB3aXRoIHllYXIgPj0gMS4gR3JlZ29yaWFuIGNhbGVuZGFyIHN0YXJ0ZWQgaW4KKy8vIDE1ODIu
IEhvd2V2ZXIsIHdlIG5lZWQgdG8gc3VwcG9ydCAwMDAxLTAxLTAxIGluIEdyZWdvcmlhbiBjYWxl
bmRhciBydWxlLgorc3RhdGljIGNvbnN0ZXhwciBpbnQgbWluaW11bVllYXIgPSAxOwogCi0vLyBI
VE1MNSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgbWF4aW11bSB3ZWVrIG9mIHllYXIgaXMgNTMuCi1j
b25zdCBpbnQgRGF0ZUNvbXBvbmVudHM6Om1heGltdW1XZWVrTnVtYmVyID0gNTM7CisvLyBEYXRl
IGluIEVDTUFTY3JpcHQgY2FuJ3QgcmVwcmVzZW50IGRhdGVzIGxhdGVyIHRoYW4gMjc1NzYwLTA5
LTEzVDAwOjAwWi4KKy8vIFNvLCB3ZSBoYXZlIHRoZSBzYW1lIHVwcGVyIGxpbWl0IGluIEhUTUw1
IGRhdGUvdGltZSB0eXBlcy4KK3N0YXRpYyBjb25zdGV4cHIgaW50IG1heGltdW1ZZWFyID0gMjc1
NzYwOwogCi1zdGF0aWMgY29uc3QgaW50IG1heGltdW1Nb250aEluTWF4aW11bVllYXIgPSA4OyAv
LyBUaGlzIGlzIFNlcHRlbWJlciwgc2luY2UgbW9udGhzIGFyZSAwIGJhc2VkLgotc3RhdGljIGNv
bnN0IGludCBtYXhpbXVtRGF5SW5NYXhpbXVtTW9udGggPSAxMzsKLXN0YXRpYyBjb25zdCBpbnQg
bWF4aW11bVdlZWtJbk1heGltdW1ZZWFyID0gMzc7IC8vIFRoZSB3ZWVrIG9mIDI3NTc2MC0wOS0x
MworLy8gSFRNTGRlZmluZXMgbWluaW11bSB3ZWVrIG9mIHllYXIgaXMgb25lLgorc3RhdGljIGNv
bnN0ZXhwciBpbnQgbWluaW11bVdlZWtOdW1iZXIgPSAxOwogCi1zdGF0aWMgY29uc3QgaW50IGRh
eXNJbk1vbnRoWzEyXSA9IHszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwg
MzAsIDMxfTsKKy8vIEhUTUwgZGVmaW5lcyBtYXhpbXVtIHdlZWsgb2YgeWVhciBpcyA1My4KK3N0
YXRpYyBjb25zdGV4cHIgaW50IG1heGltdW1XZWVrTnVtYmVyID0gNTM7CisKK3N0YXRpYyBjb25z
dGV4cHIgaW50IG1heGltdW1Nb250aEluTWF4aW11bVllYXIgPSA4OyAvLyBUaGlzIGlzIFNlcHRl
bWJlciwgc2luY2UgbW9udGhzIGFyZSAwIGJhc2VkLgorc3RhdGljIGNvbnN0ZXhwciBpbnQgbWF4
aW11bURheUluTWF4aW11bU1vbnRoID0gMTM7CitzdGF0aWMgY29uc3RleHByIGludCBtYXhpbXVt
V2Vla0luTWF4aW11bVllYXIgPSAzNzsgLy8gVGhlIHdlZWsgb2YgMjc1NzYwLTA5LTEzCisKK3N0
YXRpYyBjb25zdGV4cHIgaW50IGRheXNJbk1vbnRoWzEyXSA9IHsgMzEsIDI4LCAzMSwgMzAsIDMx
LCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMSB9OwogCiBzdGF0aWMgYm9vbCBpc0xlYXBZZWFy
KGludCB5ZWFyKQogewpAQCAtOTYsNjggKzEwNiw3MyBAQCBpbnQgRGF0ZUNvbXBvbmVudHM6Om1h
eFdlZWtOdW1iZXJJblllYXIoCiAgICAgcmV0dXJuIGRheSA9PSBUaHVyc2RheSB8fCAoZGF5ID09
IFdlZG5lc2RheSAmJiBpc0xlYXBZZWFyKG1feWVhcikpID8gbWF4aW11bVdlZWtOdW1iZXIgOiBt
YXhpbXVtV2Vla051bWJlciAtIDE7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyB1bnNpZ25lZCBjb3VudERpZ2l0cyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMs
IHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgdW5zaWduZWQgY291bnREaWdpdHMoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxDaGFyYWN0ZXJUeXBlPiBidWZmZXIpCiB7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBzdGFydDsK
LSAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKCFpc0FT
Q0lJRGlnaXQoc3JjW2luZGV4XSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0
dXJuIGluZGV4IC0gc3RhcnQ7CisgICAgYXV0byBiZWdpbiA9IGJ1ZmZlci5wb3NpdGlvbigpOwor
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJRGlnaXQ+KGJ1ZmZlcik7CisgICAg
cmV0dXJuIGJ1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW47CiB9CiAKIC8vIFZlcnkgc3RyaWN0IGlu
dGVnZXIgcGFyc2VyLiBEbyBub3QgYWxsb3cgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNl
IHVubGlrZSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoKS4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IHN0YXRpYyBib29sIHRvSW50KGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBwYXJzZVN0YXJ0LCB1bnNpZ25lZCBwYXJzZUxlbmd0aCwg
aW50JiBvdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9u
YWw8aW50PiBwYXJzZUludChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZm
ZXIsIHVuc2lnbmVkIG1heGltdW1OdW1iZXJPZkRpZ2l0c1RvUGFyc2UpCiB7Ci0gICAgaWYgKHBh
cnNlU3RhcnQgKyBwYXJzZUxlbmd0aCA+IGxlbmd0aCB8fCBwYXJzZUxlbmd0aCA8PSAwKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IHZhbHVlID0gMDsKLSAgICBhdXRvIGN1cnJlbnQg
PSBzcmMgKyBwYXJzZVN0YXJ0OwotICAgIGF1dG8gZW5kID0gY3VycmVudCArIHBhcnNlTGVuZ3Ro
OworICAgIGlmIChtYXhpbXVtTnVtYmVyT2ZEaWdpdHNUb1BhcnNlID4gYnVmZmVyLmxlbmd0aFJl
bWFpbmluZygpIHx8ICFtYXhpbXVtTnVtYmVyT2ZEaWdpdHNUb1BhcnNlKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgbmVnYXRp
dmUgbnVtYmVycyBmb3IgSVNPIDg2MDEuCi0gICAgZm9yICg7IGN1cnJlbnQgPCBlbmQ7ICsrY3Vy
cmVudCkgewotICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqY3VycmVudCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGludCBkaWdpdCA9ICpjdXJyZW50IC0gJzAnOworCisg
ICAgaW50IHZhbHVlID0gMDsKKyAgICB1bnNpZ25lZCBkaWdpdHNSZW1haW5pbmcgPSAwOworICAg
IHdoaWxlIChkaWdpdHNSZW1haW5pbmcgPCBtYXhpbXVtTnVtYmVyT2ZEaWdpdHNUb1BhcnNlKSB7
CisgICAgICAgIGlmICghaXNBU0NJSURpZ2l0KCpidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgaW50IGRpZ2l0ID0gKmJ1ZmZlciAtICcwJzsKICAgICAg
ICAgaWYgKHZhbHVlID4gKElOVF9NQVggLSBkaWdpdCkgLyAxMCkgLy8gQ2hlY2sgZm9yIG92ZXJm
bG93LgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDEwICsgZGlnaXQ7CisgICAgICAgICsr
ZGlnaXRzUmVtYWluaW5nOworICAgICAgICArK2J1ZmZlcjsKICAgICB9Ci0gICAgb3V0ID0gdmFs
dWU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8aW50PiBwYXJzZUludFdpdGhp
bkxpbWl0cyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIsIHVuc2ln
bmVkIG1heGltdW1OdW1iZXJPZkRpZ2l0c1RvUGFyc2UsIGludCBtaW5pbXVtVmFsdWUsIGludCBt
YXhpbXVtVmFsdWUpCit7CisgICAgYXV0byB2YWx1ZSA9IHBhcnNlSW50KGJ1ZmZlciwgbWF4aW11
bU51bWJlck9mRGlnaXRzVG9QYXJzZSk7CisgICAgaWYgKCEodmFsdWUgJiYgKnZhbHVlID49IG1p
bmltdW1WYWx1ZSAmJiAqdmFsdWUgPD0gbWF4aW11bVZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlWWVhcihjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBl
bmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRz
OjpwYXJzZVllYXIoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQog
ewotICAgIHVuc2lnbmVkIGRpZ2l0c0xlbmd0aCA9IGNvdW50RGlnaXRzKHNyYywgbGVuZ3RoLCBz
dGFydCk7CisgICAgdW5zaWduZWQgZGlnaXRzTGVuZ3RoID0gY291bnREaWdpdHMoYnVmZmVyKTsK
ICAgICAvLyBOZWVkcyBhdCBsZWFzdCA0IGRpZ2l0cyBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJk
LgogICAgIGlmIChkaWdpdHNMZW5ndGggPCA0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aW50IHllYXI7Ci0gICAgaWYgKCF0b0ludChzcmMsIGxlbmd0aCwgc3RhcnQsIGRpZ2l0c0xlbmd0
aCwgeWVhcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoeWVhciA8IG1pbmltdW1Z
ZWFyKCkgfHwgeWVhciA+IG1heGltdW1ZZWFyKCkpCisKKyAgICBhdXRvIHllYXIgPSBwYXJzZUlu
dFdpdGhpbkxpbWl0cyhidWZmZXIsIGRpZ2l0c0xlbmd0aCwgbWluaW11bVllYXIsIG1heGltdW1Z
ZWFyKTsKKyAgICBpZiAoIXllYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3llYXIg
PSB5ZWFyOwotICAgIGVuZCA9IHN0YXJ0ICsgZGlnaXRzTGVuZ3RoOworCisgICAgbV95ZWFyID0g
KnllYXI7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIHdpdGhpbkhUTUxEYXRl
TGltaXRzKGludCB5ZWFyLCBpbnQgbW9udGgpCiB7Ci0gICAgaWYgKHllYXIgPCBEYXRlQ29tcG9u
ZW50czo6bWluaW11bVllYXIoKSkKKyAgICBpZiAoeWVhciA8IG1pbmltdW1ZZWFyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHllYXIgPCBEYXRlQ29tcG9uZW50czo6bWF4aW11bVll
YXIoKSkKKyAgICBpZiAoeWVhciA8IG1heGltdW1ZZWFyKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICByZXR1cm4gbW9udGggPD0gbWF4aW11bU1vbnRoSW5NYXhpbXVtWWVhcjsKIH0KIAogc3Rh
dGljIGJvb2wgd2l0aGluSFRNTERhdGVMaW1pdHMoaW50IHllYXIsIGludCBtb250aCwgaW50IG1v
bnRoRGF5KQogewotICAgIGlmICh5ZWFyIDwgRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1ZZWFyKCkp
CisgICAgaWYgKHllYXIgPCBtaW5pbXVtWWVhcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICh5ZWFyIDwgRGF0ZUNvbXBvbmVudHM6Om1heGltdW1ZZWFyKCkpCisgICAgaWYgKHllYXIg
PCBtYXhpbXVtWWVhcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKG1vbnRoIDwgbWF4
aW11bU1vbnRoSW5NYXhpbXVtWWVhcikKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjYsOSAr
MTgxLDkgQEAgc3RhdGljIGJvb2wgd2l0aGluSFRNTERhdGVMaW1pdHMoaW50IHllYQogCiBzdGF0
aWMgYm9vbCB3aXRoaW5IVE1MRGF0ZUxpbWl0cyhpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgbW9u
dGhEYXksIGludCBob3VyLCBpbnQgbWludXRlLCBpbnQgc2Vjb25kLCBpbnQgbWlsbGlzZWNvbmQp
CiB7Ci0gICAgaWYgKHllYXIgPCBEYXRlQ29tcG9uZW50czo6bWluaW11bVllYXIoKSkKKyAgICBp
ZiAoeWVhciA8IG1pbmltdW1ZZWFyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHll
YXIgPCBEYXRlQ29tcG9uZW50czo6bWF4aW11bVllYXIoKSkKKyAgICBpZiAoeWVhciA8IG1heGlt
dW1ZZWFyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAobW9udGggPCBtYXhpbXVtTW9u
dGhJbk1heGltdW1ZZWFyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE4NSw1MiArMjAwLDQ2
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEY+IHN0YXRpYyBPcHRpb25hbDxEYXQKICAgICBpZiAoc291
cmNlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIERhdGVD
b21wb25lbnRzIHJlc3VsdDsKLSAgICB1bnNpZ25lZCBlbmQ7Ci0gICAgaWYgKHNvdXJjZS5pczhC
aXQoKSkgewotICAgICAgICBpZiAoIXBhcnNlRnVuY3Rpb24ocmVzdWx0LCBzb3VyY2UuY2hhcmFj
dGVyczgoKSwgc291cmNlLmxlbmd0aCgpLCBlbmQpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXBhcnNlRnVuY3Rpb24ocmVzdWx0
LCBzb3VyY2UuY2hhcmFjdGVyczE2KCksIHNvdXJjZS5sZW5ndGgoKSwgZW5kKSkKKyAgICByZXR1
cm4gcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHNvdXJjZSwgWyZdKGF1dG8gYnVmZmVyKSAtPiBP
cHRpb25hbDxEYXRlQ29tcG9uZW50cz4geworICAgICAgICBEYXRlQ29tcG9uZW50cyBkYXRlOwor
ICAgICAgICBpZiAoIXBhcnNlRnVuY3Rpb24oYnVmZmVyLCBkYXRlKSB8fCAhYnVmZmVyLmF0RW5k
KCkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIH0KLSAgICBpZiAoZW5k
ICE9IHNvdXJjZS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gZGF0ZTsKKyAgICB9KTsKIH0KIAogT3B0aW9u
YWw8RGF0ZUNvbXBvbmVudHM+IERhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ01vbnRoKFN0cmlu
Z1ZpZXcgc291cmNlKQogewotICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10g
KGF1dG8mIGRhdGUsIGNvbnN0IGF1dG8qIHNyYywgYXV0byBsZW5ndGgsIGF1dG8mIGVuZCkgewot
ICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZU1vbnRoKHNyYywgbGVuZ3RoLCAwLCBlbmQpOworICAg
IHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10gKGF1dG8mIGJ1ZmZlciwgYXV0byYg
ZGF0ZSkgeworICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZU1vbnRoKGJ1ZmZlcik7CiAgICAgfSk7
CiB9CiAKIE9wdGlvbmFsPERhdGVDb21wb25lbnRzPiBEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNp
bmdEYXRlKFN0cmluZ1ZpZXcgc291cmNlKQogewotICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5n
KHNvdXJjZSwgW10gKGF1dG8mIGRhdGUsIGNvbnN0IGF1dG8qIHNyYywgYXV0byBsZW5ndGgsIGF1
dG8mIGVuZCkgewotICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZURhdGUoc3JjLCBsZW5ndGgsIDAs
IGVuZCk7CisgICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgYnVm
ZmVyLCBhdXRvJiBkYXRlKSB7CisgICAgICAgIHJldHVybiBkYXRlLnBhcnNlRGF0ZShidWZmZXIp
OwogICAgIH0pOwogfQogCiBPcHRpb25hbDxEYXRlQ29tcG9uZW50cz4gRGF0ZUNvbXBvbmVudHM6
OmZyb21QYXJzaW5nV2VlayhTdHJpbmdWaWV3IHNvdXJjZSkKIHsKLSAgICByZXR1cm4gY3JlYXRl
RnJvbVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBkYXRlLCBjb25zdCBhdXRvKiBzcmMsIGF1dG8g
bGVuZ3RoLCBhdXRvJiBlbmQpIHsKLSAgICAgICAgcmV0dXJuIGRhdGUucGFyc2VXZWVrKHNyYywg
bGVuZ3RoLCAwLCBlbmQpOworICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10g
KGF1dG8mIGJ1ZmZlciwgYXV0byYgZGF0ZSkgeworICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZVdl
ZWsoYnVmZmVyKTsKICAgICB9KTsKIH0KIAogT3B0aW9uYWw8RGF0ZUNvbXBvbmVudHM+IERhdGVD
b21wb25lbnRzOjpmcm9tUGFyc2luZ1RpbWUoU3RyaW5nVmlldyBzb3VyY2UpCiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgZGF0ZSwgY29uc3QgYXV0byog
c3JjLCBhdXRvIGxlbmd0aCwgYXV0byYgZW5kKSB7Ci0gICAgICAgIHJldHVybiBkYXRlLnBhcnNl
VGltZShzcmMsIGxlbmd0aCwgMCwgZW5kKTsKKyAgICByZXR1cm4gY3JlYXRlRnJvbVN0cmluZyhz
b3VyY2UsIFtdIChhdXRvJiBidWZmZXIsIGF1dG8mIGRhdGUpIHsKKyAgICAgICAgcmV0dXJuIGRh
dGUucGFyc2VUaW1lKGJ1ZmZlcik7CiAgICAgfSk7CiB9CiAKIE9wdGlvbmFsPERhdGVDb21wb25l
bnRzPiBEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdEYXRlVGltZUxvY2FsKFN0cmluZ1ZpZXcg
c291cmNlKQogewotICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10gKGF1dG8m
IGRhdGUsIGNvbnN0IGF1dG8qIHNyYywgYXV0byBsZW5ndGgsIGF1dG8mIGVuZCkgewotICAgICAg
ICByZXR1cm4gZGF0ZS5wYXJzZURhdGVUaW1lTG9jYWwoc3JjLCBsZW5ndGgsIDAsIGVuZCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgYnVmZmVyLCBhdXRv
JiBkYXRlKSB7CisgICAgICAgIHJldHVybiBkYXRlLnBhcnNlRGF0ZVRpbWVMb2NhbChidWZmZXIp
OwogICAgIH0pOwogfQogCkBAIC0zMzcsMTk1ICszNDYsMTc4IEBAIGJvb2wgRGF0ZUNvbXBvbmVu
dHM6OmFkZE1pbnV0ZShpbnQgbWludXQKIH0KIAogLy8gUGFyc2VzIGEgdGltZXpvbmUgcGFydCwg
YW5kIGFkanVzdCB5ZWFyLCBtb250aCwgbW9udGhEYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBt
aWxsaXNlY29uZC4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNv
bXBvbmVudHM6OnBhcnNlVGltZVpvbmUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9uZW50czo6cGFyc2VUaW1lWm9uZShTdHJp
bmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7Ci0gICAgaWYgKHN0YXJ0
ID49IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIGluZGV4ID0g
c3RhcnQ7Ci0gICAgaWYgKHNyY1tpbmRleF0gPT0gJ1onKSB7Ci0gICAgICAgIGVuZCA9IGluZGV4
ICsgMTsKKyAgICBpZiAoc2tpcEV4YWN0bHkoYnVmZmVyLCAnWicpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9CiAKICAgICBib29sIG1pbnVzOwotICAgIGlmIChzcmNbaW5kZXhdID09ICcr
JykKKyAgICBpZiAoc2tpcEV4YWN0bHkoYnVmZmVyLCAnKycpKQogICAgICAgICBtaW51cyA9IGZh
bHNlOwotICAgIGVsc2UgaWYgKHNyY1tpbmRleF0gPT0gJy0nKQorICAgIGVsc2UgaWYgKHNraXBF
eGFjdGx5KGJ1ZmZlciwgJy0nKSkKICAgICAgICAgbWludXMgPSB0cnVlOwogICAgIGVsc2UKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7CiAKLSAgICBpbnQgaG91cjsKLSAgICBp
bnQgbWludXRlOwotICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBob3VyKSB8
fCBob3VyIDwgMCB8fCBob3VyID4gMjMpCisgICAgYXV0byBob3VyID0gcGFyc2VJbnRXaXRoaW5M
aW1pdHMoYnVmZmVyLCAyLCAwLCAyMyk7CisgICAgaWYgKCFob3VyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaW5kZXggKz0gMjsKIAotICAgIGlmIChpbmRleCA+PSBsZW5ndGggfHwgc3Jj
W2luZGV4XSAhPSAnOicpCisgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICc6JykpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4OwogCi0gICAgaWYgKCF0b0ludChzcmMsIGxl
bmd0aCwgaW5kZXgsIDIsIG1pbnV0ZSkgfHwgbWludXRlIDwgMCB8fCBtaW51dGUgPiA1OSkKKyAg
ICBhdXRvIG1pbnV0ZSA9IHBhcnNlSW50V2l0aGluTGltaXRzKGJ1ZmZlciwgMiwgMCwgNTkpOwor
ICAgIGlmICghbWludXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW5kZXggKz0gMjsK
IAogICAgIGlmIChtaW51cykgewotICAgICAgICBob3VyID0gLWhvdXI7Ci0gICAgICAgIG1pbnV0
ZSA9IC1taW51dGU7CisgICAgICAgICpob3VyID0gLSpob3VyOworICAgICAgICAqbWludXRlID0g
LSptaW51dGU7CiAgICAgfQogCiAgICAgLy8gU3VidHJhY3QgdGhlIHRpbWV6b25lIG9mZnNldC4K
LSAgICBpZiAoIWFkZE1pbnV0ZSgtKGhvdXIgKiA2MCArIG1pbnV0ZSkpKQorICAgIGlmICghYWRk
TWludXRlKC0oKmhvdXIgKiA2MCArICptaW51dGUpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGVuZCA9IGluZGV4OwogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZU1vbnRoKGNvbnN0IENo
YXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNvbXBv
bmVudHM6OnBhcnNlTW9udGgoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVm
ZmVyKQogewotICAgIEFTU0VSVChzcmMpOwotICAgIHVuc2lnbmVkIGluZGV4OwotICAgIGlmICgh
cGFyc2VZZWFyKHNyYywgbGVuZ3RoLCBzdGFydCwgaW5kZXgpKQorICAgIGlmICghcGFyc2VZZWFy
KGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3Ro
IHx8IHNyY1tpbmRleF0gIT0gJy0nKQorCisgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICct
JykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4OwogCi0gICAgaW50IG1vbnRo
OwotICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBtb250aCkgfHwgbW9udGgg
PCAxIHx8IG1vbnRoID4gMTIpCisgICAgYXV0byBtb250aCA9IHBhcnNlSW50V2l0aGluTGltaXRz
KGJ1ZmZlciwgMiwgMSwgMTIpOworICAgIGlmICghbW9udGgpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAtLW1vbnRoOwotICAgIGlmICghd2l0aGluSFRNTERhdGVMaW1pdHMobV95ZWFyLCBt
b250aCkpCisgICAgLS0qbW9udGg7CisKKyAgICBpZiAoIXdpdGhpbkhUTUxEYXRlTGltaXRzKG1f
eWVhciwgKm1vbnRoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbW9udGggPSBtb250
aDsKLSAgICBlbmQgPSBpbmRleCArIDI7CisKKyAgICBtX21vbnRoID0gKm1vbnRoOwogICAgIG1f
dHlwZSA9IE1vbnRoOwogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZURhdGUoY29uc3QgQ2hhcmFj
dGVyVHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYg
ZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9uZW50
czo6cGFyc2VEYXRlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikK
IHsKLSAgICBBU1NFUlQoc3JjKTsKLSAgICB1bnNpZ25lZCBpbmRleDsKLSAgICBpZiAoIXBhcnNl
TW9udGgoc3JjLCBsZW5ndGgsIHN0YXJ0LCBpbmRleCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAvLyAnLScgYW5kIDItZGlnaXRzIGFyZSBuZWVkZWQuCi0gICAgaWYgKGluZGV4ICsgMiA+
PSBsZW5ndGgpCisgICAgaWYgKCFwYXJzZU1vbnRoKGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoc3JjW2luZGV4XSAhPSAnLScpCisKKyAgICBpZiAoIXNraXBFeGFjdGx5
KGJ1ZmZlciwgJy0nKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7CiAKLSAg
ICBpbnQgZGF5OwotICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBkYXkpIHx8
IGRheSA8IDEgfHwgZGF5ID4gbWF4RGF5T2ZNb250aChtX3llYXIsIG1fbW9udGgpKQorICAgIGF1
dG8gZGF5ID0gcGFyc2VJbnRXaXRoaW5MaW1pdHMoYnVmZmVyLCAyLCAxLCBtYXhEYXlPZk1vbnRo
KG1feWVhciwgbV9tb250aCkpOworICAgIGlmICghZGF5KQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKCF3aXRoaW5IVE1MRGF0ZUxpbWl0cyhtX3llYXIsIG1fbW9udGgsIGRheSkpCisK
KyAgICBpZiAoIXdpdGhpbkhUTUxEYXRlTGltaXRzKG1feWVhciwgbV9tb250aCwgKmRheSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX21vbnRoRGF5ID0gZGF5OwotICAgIGVuZCA9IGlu
ZGV4ICsgMjsKKworICAgIG1fbW9udGhEYXkgPSAqZGF5OwogICAgIG1fdHlwZSA9IERhdGU7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJv
b2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlV2Vlayhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVu
c2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZVdlZWsoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewotICAgIEFTU0VSVChz
cmMpOwotICAgIHVuc2lnbmVkIGluZGV4OwotICAgIGlmICghcGFyc2VZZWFyKHNyYywgbGVuZ3Ro
LCBzdGFydCwgaW5kZXgpKQorICAgIGlmICghcGFyc2VZZWFyKGJ1ZmZlcikpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIC8vIDQgY2hhcmFjdGVycyAoJy0nICdXJyBkaWdpdCBkaWdpdCkg
YXJlIG5lZWRlZC4KLSAgICBpZiAoaW5kZXggKyAzID49IGxlbmd0aCkKKyAgICBpZiAoIXNraXBF
eGFjdGx5KGJ1ZmZlciwgJy0nKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzcmNb
aW5kZXhdICE9ICctJykKKyAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJ1cnKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7Ci0gICAgaWYgKHNyY1tpbmRleF0gIT0gJ1cn
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKytpbmRleDsKIAotICAgIGludCB3ZWVrOwot
ICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCB3ZWVrKSB8fCB3ZWVrIDwgbWlu
aW11bVdlZWtOdW1iZXIgfHwgd2VlayA+IG1heFdlZWtOdW1iZXJJblllYXIoKSkKKyAgICBhdXRv
IHdlZWsgPSBwYXJzZUludFdpdGhpbkxpbWl0cyhidWZmZXIsIDIsIG1pbmltdW1XZWVrTnVtYmVy
LCBtYXhXZWVrTnVtYmVySW5ZZWFyKCkpOworICAgIGlmICghd2VlaykKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChtX3llYXIgPT0gbWF4aW11bVllYXIoKSAmJiB3ZWVrID4gbWF4aW11
bVdlZWtJbk1heGltdW1ZZWFyKQorCisgICAgaWYgKG1feWVhciA9PSBtYXhpbXVtWWVhciAmJiAq
d2VlayA+IG1heGltdW1XZWVrSW5NYXhpbXVtWWVhcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fd2VlayA9IHdlZWs7Ci0gICAgZW5kID0gaW5kZXggKyAyOworCisgICAgbV93ZWVrID0g
KndlZWs7CiAgICAgbV90eXBlID0gV2VlazsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9uZW50czo6cGFyc2VUaW1l
KGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wg
RGF0ZUNvbXBvbmVudHM6OnBhcnNlVGltZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5
cGU+JiBidWZmZXIpCiB7Ci0gICAgQVNTRVJUKHNyYyk7Ci0gICAgaW50IGhvdXI7Ci0gICAgaWYg
KCF0b0ludChzcmMsIGxlbmd0aCwgc3RhcnQsIDIsIGhvdXIpIHx8IGhvdXIgPCAwIHx8IGhvdXIg
PiAyMykKKyAgICBhdXRvIGhvdXIgPSBwYXJzZUludFdpdGhpbkxpbWl0cyhidWZmZXIsIDIsIDAs
IDIzKTsKKyAgICBpZiAoIWhvdXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25l
ZCBpbmRleCA9IHN0YXJ0ICsgMjsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNyY1tpbmRleF0gIT0gJzonKQorCisgICAgaWYgKCFza2lw
RXhhY3RseShidWZmZXIsICc6JykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4
OwogCi0gICAgaW50IG1pbnV0ZTsKLSAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBpbmRleCwg
MiwgbWludXRlKSB8fCBtaW51dGUgPCAwIHx8IG1pbnV0ZSA+IDU5KQorICAgIGF1dG8gbWludXRl
ID0gcGFyc2VJbnRXaXRoaW5MaW1pdHMoYnVmZmVyLCAyLCAwLCA1OSk7CisgICAgaWYgKCFtaW51
dGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbmRleCArPSAyOwogCi0gICAgaW50IHNl
Y29uZCA9IDA7Ci0gICAgaW50IG1pbGxpc2Vjb25kID0gMDsKICAgICAvLyBPcHRpb25hbCBzZWNv
bmQgcGFydC4KICAgICAvLyBEbyBub3QgcmV0dXJuIHdpdGggZmFsc2UgYmVjYXVzZSB0aGUgcGFy
dCBpcyBvcHRpb25hbC4KLSAgICBpZiAoaW5kZXggKyAyIDwgbGVuZ3RoICYmIHNyY1tpbmRleF0g
PT0gJzonKSB7Ci0gICAgICAgIGlmICh0b0ludChzcmMsIGxlbmd0aCwgaW5kZXggKyAxLCAyLCBz
ZWNvbmQpICYmIHNlY29uZCA+PSAwICYmIHNlY29uZCA8PSA1OSkgewotICAgICAgICAgICAgaW5k
ZXggKz0gMzsKKyAgICBPcHRpb25hbDxpbnQ+IHNlY29uZDsKKyAgICBPcHRpb25hbDxpbnQ+IG1p
bGxpc2Vjb25kOworCisgICAgYXV0byB0ZW1wb3JhcnlCdWZmZXIgPSBidWZmZXI7CisgICAgaWYg
KHNraXBFeGFjdGx5KHRlbXBvcmFyeUJ1ZmZlciwgJzonKSkgeworICAgICAgICBzZWNvbmQgPSBw
YXJzZUludFdpdGhpbkxpbWl0cyh0ZW1wb3JhcnlCdWZmZXIsIDIsIDAsIDU5KTsKKyAgICAgICAg
aWYgKHNlY29uZCkgeworICAgICAgICAgICAgLy8gT25seSBhZnRlciBzdWNjZXNzZnVsbHkgcGFy
c2luZyBhbmQgdmFsaWRhdGluZyAnc2Vjb25kJywgZG8gd2UgaW5jcmVtZW50IHRoZSByZWFsIGJ1
ZmZlci4KKyAgICAgICAgICAgIGJ1ZmZlciArPSB0ZW1wb3JhcnlCdWZmZXIucG9zaXRpb24oKSAt
IGJ1ZmZlci5wb3NpdGlvbigpOwogCiAgICAgICAgICAgICAvLyBPcHRpb25hbCBmcmFjdGlvbmFs
IHNlY29uZCBwYXJ0LgotICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIHNyY1tpbmRl
eF0gPT0gJy4nKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgZGlnaXRzTGVuZ3RoID0gY291
bnREaWdpdHMoc3JjLCBsZW5ndGgsIGluZGV4ICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKGRp
Z2l0c0xlbmd0aCA+ICAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAg
ICAgICAgICAgICAgIGJvb2wgb2s7CisgICAgICAgICAgICBpZiAoc2tpcEV4YWN0bHkodGVtcG9y
YXJ5QnVmZmVyLCAnLicpKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZGlnaXRzTGVuZ3Ro
ID0gY291bnREaWdpdHModGVtcG9yYXJ5QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBpZiAoZGln
aXRzTGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZGlnaXRzTGVuZ3RoID09
IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gdG9JbnQoc3JjLCBsZW5ndGgsIGlu
ZGV4LCAxLCBtaWxsaXNlY29uZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29u
ZCAqPSAxMDA7CisgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZCA9IHBhcnNlSW50
KHRlbXBvcmFyeUJ1ZmZlciwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAqbWlsbGlzZWNv
bmQgKj0gMTAwOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0c0xlbmd0aCA9
PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvayA9IHRvSW50KHNyYywgbGVuZ3RoLCBp
bmRleCwgMiwgbWlsbGlzZWNvbmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWNv
bmQgKj0gMTA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSAvLyBkaWdpdHNMZW5ndGggPj0g
MwotICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSB0b0ludChzcmMsIGxlbmd0aCwgaW5kZXgs
IDMsIG1pbGxpc2Vjb25kKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChvaywg
b2spOwotICAgICAgICAgICAgICAgICAgICBpbmRleCArPSBkaWdpdHNMZW5ndGg7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZCA9IHBhcnNlSW50KHRlbXBvcmFyeUJ1ZmZlciwg
Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAqbWlsbGlzZWNvbmQgKj0gMTA7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdhcmRs
ZXNzIG9mIHRoZSBudW1iZXIgb2YgZGlnaXRzLCB3ZSBvbmx5IGV2ZXIgcGFyc2UgYXQgbW9zdCAz
LiBBbGwgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpZ2l0cyBhZnRlciB0aGF0
IGFyZSBpZ25vcmVkLCBidXQgdGhlIGJ1ZmZlciBpcyBpbmNyZW1lbnRlZCBhcyBpZiB0aGV5IHdl
cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBwYXJzZWQuCisgICAgICAgICAgICAg
ICAgICAgICAgICBtaWxsaXNlY29uZCA9IHBhcnNlSW50KHRlbXBvcmFyeUJ1ZmZlciwgMyk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBEdWUgdG8gdGhl
IGNvdW50RGlnaXRzIGFib3ZlLCB0aGUgcGFyc2VJbnQgY2FsbHMgc2hvdWxkIGFsbCBiZSBzdWNj
ZXNzZnVsLgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQobWlsbGlzZWNvbmQpOworCisgICAg
ICAgICAgICAgICAgICAgIC8vIE9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBhcnNpbmcgYW5kIHZh
bGlkYXRpbmcgJ21pbGxpc2Vjb25kJywgZG8gd2UgaW5jcmVtZW50IHRoZSByZWFsIGJ1ZmZlci4K
KyAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IDEgKyBkaWdpdHNMZW5ndGg7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIG1faG91ciA9
IGhvdXI7Ci0gICAgbV9taW51dGUgPSBtaW51dGU7Ci0gICAgbV9zZWNvbmQgPSBzZWNvbmQ7Ci0g
ICAgbV9taWxsaXNlY29uZCA9IG1pbGxpc2Vjb25kOwotICAgIGVuZCA9IGluZGV4OworCisgICAg
bV9ob3VyID0gKmhvdXI7CisgICAgbV9taW51dGUgPSAqbWludXRlOworICAgIG1fc2Vjb25kID0g
c2Vjb25kLnZhbHVlT3IoMCk7CisgICAgbV9taWxsaXNlY29uZCA9IG1pbGxpc2Vjb25kLnZhbHVl
T3IoMCk7CiAgICAgbV90eXBlID0gVGltZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9uZW50czo6cGFyc2VEYXRl
VGltZUxvY2FsKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IGJvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZVRpbWVMb2NhbChTdHJpbmdQYXJzaW5n
QnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7Ci0gICAgQVNTRVJUKHNyYyk7Ci0gICAg
dW5zaWduZWQgaW5kZXg7Ci0gICAgaWYgKCFwYXJzZURhdGUoc3JjLCBsZW5ndGgsIHN0YXJ0LCBp
bmRleCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQor
ICAgIGlmICghcGFyc2VEYXRlKGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoc3JjW2luZGV4XSAhPSAnVCcpCisKKyAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJ1Qn
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7Ci0gICAgaWYgKCFwYXJzZVRp
bWUoc3JjLCBsZW5ndGgsIGluZGV4LCBlbmQpKQorCisgICAgaWYgKCFwYXJzZVRpbWUoYnVmZmVy
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCF3aXRoaW5IVE1MRGF0ZUxpbWl0
cyhtX3llYXIsIG1fbW9udGgsIG1fbW9udGhEYXksIG1faG91ciwgbV9taW51dGUsIG1fc2Vjb25k
LCBtX21pbGxpc2Vjb25kKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgbV90eXBlID0g
RGF0ZVRpbWVMb2NhbDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY1OSwxMiArNjUxLDEwIEBA
IGJvb2wgRGF0ZUNvbXBvbmVudHM6OnNldE1pbGxpc2Vjb25kc1NpbmMKIAogYm9vbCBEYXRlQ29t
cG9uZW50czo6c2V0TW9udGhzU2luY2VFcG9jaChkb3VibGUgbW9udGhzKQogewotICAgIGlmICgh
c3RkOjppc2Zpbml0ZShtb250aHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbW9udGhz
ID0gcm91bmQobW9udGhzKTsKICAgICBkb3VibGUgZG91YmxlTW9udGggPSBwb3NpdGl2ZUZtb2Qo
bW9udGhzLCAxMik7CiAgICAgZG91YmxlIGRvdWJsZVllYXIgPSAxOTcwICsgKG1vbnRocyAtIGRv
dWJsZU1vbnRoKSAvIDEyOwotICAgIGlmIChkb3VibGVZZWFyIDwgbWluaW11bVllYXIoKSB8fCBt
YXhpbXVtWWVhcigpIDwgZG91YmxlWWVhcikKKyAgICBpZiAoIShkb3VibGVZZWFyID4gbWluaW11
bVllYXIgJiYgbWF4aW11bVllYXIgPiBkb3VibGVZZWFyKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGludCB5ZWFyID0gc3RhdGljX2Nhc3Q8aW50Pihkb3VibGVZZWFyKTsKICAgICBpbnQg
bW9udGggPSBzdGF0aWNfY2FzdDxpbnQ+KGRvdWJsZU1vbnRoKTsKQEAgLTY5NCw3ICs2ODQsNyBA
QCBib29sIERhdGVDb21wb25lbnRzOjpzZXRNaWxsaXNlY29uZHNTaW5jCiAgICAgbXMgPSByb3Vu
ZChtcyk7CiAKICAgICBtX3llYXIgPSBtc1RvWWVhcihtcyk7Ci0gICAgaWYgKG1feWVhciA8IG1p
bmltdW1ZZWFyKCkgfHwgbV95ZWFyID4gbWF4aW11bVllYXIoKSkKKyAgICBpZiAobV95ZWFyIDwg
bWluaW11bVllYXIgfHwgbV95ZWFyID4gbWF4aW11bVllYXIpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGludCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCBtX3llYXIpOwpAQCAtNzAyLDcg
KzY5Miw3IEBAIGJvb2wgRGF0ZUNvbXBvbmVudHM6OnNldE1pbGxpc2Vjb25kc1NpbmMKICAgICBp
ZiAoeWVhckRheSA8IG9mZnNldCkgewogICAgICAgICAvLyBUaGUgZGF5IGJlbG9uZ3MgdG8gdGhl
IGxhc3Qgd2VlayBvZiB0aGUgcHJldmlvdXMgeWVhci4KICAgICAgICAgbV95ZWFyLS07Ci0gICAg
ICAgIGlmIChtX3llYXIgPD0gbWluaW11bVllYXIoKSkKKyAgICAgICAgaWYgKG1feWVhciA8PSBt
aW5pbXVtWWVhcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbV93ZWVrID0g
bWF4V2Vla051bWJlckluWWVhcigpOwogICAgIH0gZWxzZSB7CkBAIC03MTEsNyArNzAxLDcgQEAg
Ym9vbCBEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2luYwogICAgICAgICAgICAgbV95
ZWFyKys7CiAgICAgICAgICAgICBtX3dlZWsgPSAxOwogICAgICAgICB9Ci0gICAgICAgIGlmICht
X3llYXIgPiBtYXhpbXVtWWVhcigpIHx8IChtX3llYXIgPT0gbWF4aW11bVllYXIoKSAmJiBtX3dl
ZWsgPiBtYXhpbXVtV2Vla0luTWF4aW11bVllYXIpKQorICAgICAgICBpZiAobV95ZWFyID4gbWF4
aW11bVllYXIgfHwgKG1feWVhciA9PSBtYXhpbXVtWWVhciAmJiBtX3dlZWsgPiBtYXhpbXVtV2Vl
a0luTWF4aW11bVllYXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBt
X3R5cGUgPSBXZWVrOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVu
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50
cy5oCShyZXZpc2lvbiAyNjUwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29t
cG9uZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsMjUgKzEzNywxNCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBpbmxpbmUgZG91YmxlIG1heGltdW1UaW1lKCkgeyByZXR1cm4g
ODYzOTk5OTk7IH0gLy8gMjM6NTk6NTkuOTk5CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbmxpbmUg
ZG91YmxlIG1heGltdW1XZWVrKCkgeyByZXR1cm4gODYzOTk5OTU2ODAwMDAwMC4wOyB9IC8vIDI3
NTc2MC0wOS0wOCwgdGhlIE1vbmRheSBvZiB0aGUgd2VlayBpbmNsdWRpbmcgMjc1NzYwLTA5LTEz
LgogCi0gICAgLy8gSFRNTDUgdXNlcyBJU08tODYwMSBmb3JtYXQgd2l0aCB5ZWFyID49IDEuIEdy
ZWdvcmlhbiBjYWxlbmRhciBzdGFydGVkIGluCi0gICAgLy8gMTU4Mi4gSG93ZXZlciwgd2UgbmVl
ZCB0byBzdXBwb3J0IDAwMDEtMDEtMDEgaW4gR3JlZ29yaWFuIGNhbGVuZGFyIHJ1bGUuCi0gICAg
c3RhdGljIGlubGluZSBpbnQgbWluaW11bVllYXIoKSB7IHJldHVybiAxOyB9Ci0KLSAgICAvLyBE
YXRlIGluIEVDTUFTY3JpcHQgY2FuJ3QgcmVwcmVzZW50IGRhdGVzIGxhdGVyIHRoYW4gMjc1NzYw
LTA5LTEzVDAwOjAwWi4KLSAgICAvLyBTbywgd2UgaGF2ZSB0aGUgc2FtZSB1cHBlciBsaW1pdCBp
biBIVE1MNSBkYXRlL3RpbWUgdHlwZXMuCi0gICAgc3RhdGljIGlubGluZSBpbnQgbWF4aW11bVll
YXIoKSB7IHJldHVybiAyNzU3NjA7IH0KLQotICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVdl
ZWtOdW1iZXI7Ci0gICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtV2Vla051bWJlcjsKLQogcHJp
dmF0ZToKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlTW9u
dGgoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCYgZW5kKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBib29sIHBhcnNlRGF0ZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0
aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VXZWVrKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywg
dW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVRpbWUoY29uc3QgQ2hhcmFj
dGVyVHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYg
ZW5kKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlRGF0
ZVRpbWVMb2NhbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IGJvb2wgcGFyc2VZZWFyKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVRpbWVab25lKGNvbnN0IENoYXJhY3Rl
clR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVu
ZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVllYXIo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VUaW1lWm9uZShTdHJpbmdQYXJzaW5nQnVmZmVy
PENoYXJhY3RlclR5cGU+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Ym9vbCBwYXJzZU1vbnRoKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlRGF0ZShTdHJpbmdQ
YXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gYm9vbCBwYXJzZVdlZWsoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJU
eXBlPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VU
aW1lKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlRGF0ZVRpbWVMb2NhbChTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJhY3RlclR5cGU+Jik7CiAKICAgICAvLyBUaGUgZm9sbG93aW5nIHNldE1p
bGxpc2Vjb25kc1NpbmNlRXBvY2hGb3IqKCkgZnVuY3Rpb25zIHRha2UKICAgICAvLyB0aGUgbnVt
YmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSAxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMCBVVEMgYXMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405645</attachid>
            <date>2020-07-30 17:50:20 -0700</date>
            <delta_ts>2020-07-30 18:05:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213929-20200730175020.patch</filename>
            <type>text/plain</type>
            <size>24792</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDIwLTA3LTMwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBDb252ZXJ0IERhdGVDb21wb25lbnRz
IHRvIHVzZSBTdHJpbmdQYXJzaW5nQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM5MjkKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICAtIFN3aXRjaGVzIHN0cmluZyBwYXJzaW5nIGluIERhdGVDb21wb25l
bnRzIHRvIHVzaW5nIFN0cmluZ1BhcnNpbmdCdWZmZXIsCisgICAgICAgICAgbWFraW5nIHVzZSBv
ZiBQYXJzaW5nVXRpbGl0aWVzIHRvIHN0cmVhbWxpbmUgLyBzaW1wbGlmeSB0aGUgY29kZS4KKyAg
ICAgICAgLSBNb3ZlcyBhIGZldyBjb25zdGFudCB2YWx1ZXMgb25seSB1c2VkIGluIERhdGVDb21w
b25lbnRzLmNwcCB0byBEYXRlQ29tcG9uZW50cy5jcHAKKyAgICAgICAgLSBSZW5hbWUgdG9JbnQg
aW4gRGF0ZUNvbXBvbmVudHMuY3BwIHRvIHBhcnNlSW50LCBhbmQgaGF2ZSB1c2UgYW4gT3B0aW9u
YWwgcmV0dXJuCisgICAgICAgICAgdmFsdWUgcmF0aGVyIHRoYW4gYm9vbCArIG91dC1wYXJhbWV0
ZXIuCisgICAgICAgIC0gQWRkIG5ldyBwYXJzZUludFdpdGhpbkxpbWl0cyB0aGF0IGFsc28gY2hl
Y2tzIHRoYXQgcGFyc2VkIHZhbHVlIGlzIHdpdGhpbiBzcGVjZmllZAorICAgICAgICAgIGxpbWl0
cywgYXMgdGhpcyBpcyB3aGF0IGFsbW9zdCBhbGwgb2YgdGhlIGludCBwYXJzaW5nIGluIERhdGVD
b21wb25lbnRzIG5lZWRzLgorCisgICAgICAgICogcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y291bnREaWdpdHMpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VJbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VJbnRXaXRoaW5MaW1pdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlWWVhcik6CisgICAgICAgIChXZWJDb3Jl
Ojp3aXRoaW5IVE1MRGF0ZUxpbWl0cyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcm9tU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ01vbnRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ0RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nV2Vlayk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdUaW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ0RhdGVUaW1lTG9jYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nRGF0ZVRpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlVGltZVpvbmUpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlTW9udGgpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9u
ZW50czo6cGFyc2VXZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpwYXJz
ZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZVRpbWVM
b2NhbCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6cGFyc2VEYXRlVGltZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TW9udGhzU2luY2VFcG9jaCk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2luY2VF
cG9jaEZvcldlZWspOgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL0RhdGVDb21wb25lbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29t
cG9uZW50czo6bWluaW11bVllYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNv
bXBvbmVudHM6Om1heGltdW1ZZWFyKTogRGVsZXRlZC4KKwogMjAyMC0wNy0yOSAgQ2xhcmsgV2Fu
ZyAgPGNsYXJrX3dhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZGVkIGNvcHlGcm9tQ2hhbm5l
bCwgY29weVRvQ2hhbm5lbCB0byBBdWRpb0J1ZmZlcgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RhdGVDb21wb25lbnRzLmNwcAkocmV2aXNpb24gMjY1MDY0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwy
NSArMzEsMzUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRlQ29tcG9uZW50
cy5oIgogCisjaW5jbHVkZSAiUGFyc2luZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgPGxpbWl0cy5o
PgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdD
b25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVm
ZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gSFRNTDUgc3BlY2lmaWNhdGlvbiBk
ZWZpbmVzIG1pbmltdW0gd2VlayBvZiB5ZWFyIGlzIG9uZS4KLWNvbnN0IGludCBEYXRlQ29tcG9u
ZW50czo6bWluaW11bVdlZWtOdW1iZXIgPSAxOworLy8gSFRNTCB1c2VzIElTTy04NjAxIGZvcm1h
dCB3aXRoIHllYXIgPj0gMS4gR3JlZ29yaWFuIGNhbGVuZGFyIHN0YXJ0ZWQgaW4KKy8vIDE1ODIu
IEhvd2V2ZXIsIHdlIG5lZWQgdG8gc3VwcG9ydCAwMDAxLTAxLTAxIGluIEdyZWdvcmlhbiBjYWxl
bmRhciBydWxlLgorc3RhdGljIGNvbnN0ZXhwciBpbnQgbWluaW11bVllYXIgPSAxOwogCi0vLyBI
VE1MNSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgbWF4aW11bSB3ZWVrIG9mIHllYXIgaXMgNTMuCi1j
b25zdCBpbnQgRGF0ZUNvbXBvbmVudHM6Om1heGltdW1XZWVrTnVtYmVyID0gNTM7CisvLyBEYXRl
IGluIEVDTUFTY3JpcHQgY2FuJ3QgcmVwcmVzZW50IGRhdGVzIGxhdGVyIHRoYW4gMjc1NzYwLTA5
LTEzVDAwOjAwWi4KKy8vIFNvLCB3ZSBoYXZlIHRoZSBzYW1lIHVwcGVyIGxpbWl0IGluIEhUTUw1
IGRhdGUvdGltZSB0eXBlcy4KK3N0YXRpYyBjb25zdGV4cHIgaW50IG1heGltdW1ZZWFyID0gMjc1
NzYwOwogCi1zdGF0aWMgY29uc3QgaW50IG1heGltdW1Nb250aEluTWF4aW11bVllYXIgPSA4OyAv
LyBUaGlzIGlzIFNlcHRlbWJlciwgc2luY2UgbW9udGhzIGFyZSAwIGJhc2VkLgotc3RhdGljIGNv
bnN0IGludCBtYXhpbXVtRGF5SW5NYXhpbXVtTW9udGggPSAxMzsKLXN0YXRpYyBjb25zdCBpbnQg
bWF4aW11bVdlZWtJbk1heGltdW1ZZWFyID0gMzc7IC8vIFRoZSB3ZWVrIG9mIDI3NTc2MC0wOS0x
MworLy8gSFRNTGRlZmluZXMgbWluaW11bSB3ZWVrIG9mIHllYXIgaXMgb25lLgorc3RhdGljIGNv
bnN0ZXhwciBpbnQgbWluaW11bVdlZWtOdW1iZXIgPSAxOwogCi1zdGF0aWMgY29uc3QgaW50IGRh
eXNJbk1vbnRoWzEyXSA9IHszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwg
MzAsIDMxfTsKKy8vIEhUTUwgZGVmaW5lcyBtYXhpbXVtIHdlZWsgb2YgeWVhciBpcyA1My4KK3N0
YXRpYyBjb25zdGV4cHIgaW50IG1heGltdW1XZWVrTnVtYmVyID0gNTM7CisKK3N0YXRpYyBjb25z
dGV4cHIgaW50IG1heGltdW1Nb250aEluTWF4aW11bVllYXIgPSA4OyAvLyBUaGlzIGlzIFNlcHRl
bWJlciwgc2luY2UgbW9udGhzIGFyZSAwIGJhc2VkLgorc3RhdGljIGNvbnN0ZXhwciBpbnQgbWF4
aW11bURheUluTWF4aW11bU1vbnRoID0gMTM7CitzdGF0aWMgY29uc3RleHByIGludCBtYXhpbXVt
V2Vla0luTWF4aW11bVllYXIgPSAzNzsgLy8gVGhlIHdlZWsgb2YgMjc1NzYwLTA5LTEzCisKK3N0
YXRpYyBjb25zdGV4cHIgaW50IGRheXNJbk1vbnRoWzEyXSA9IHsgMzEsIDI4LCAzMSwgMzAsIDMx
LCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMSB9OwogCiBzdGF0aWMgYm9vbCBpc0xlYXBZZWFy
KGludCB5ZWFyKQogewpAQCAtOTYsNjggKzEwNiw3MyBAQCBpbnQgRGF0ZUNvbXBvbmVudHM6Om1h
eFdlZWtOdW1iZXJJblllYXIoCiAgICAgcmV0dXJuIGRheSA9PSBUaHVyc2RheSB8fCAoZGF5ID09
IFdlZG5lc2RheSAmJiBpc0xlYXBZZWFyKG1feWVhcikpID8gbWF4aW11bVdlZWtOdW1iZXIgOiBt
YXhpbXVtV2Vla051bWJlciAtIDE7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyB1bnNpZ25lZCBjb3VudERpZ2l0cyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMs
IHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgdW5zaWduZWQgY291bnREaWdpdHMoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxDaGFyYWN0ZXJUeXBlPiBidWZmZXIpCiB7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBzdGFydDsK
LSAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKCFpc0FT
Q0lJRGlnaXQoc3JjW2luZGV4XSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0
dXJuIGluZGV4IC0gc3RhcnQ7CisgICAgYXV0byBiZWdpbiA9IGJ1ZmZlci5wb3NpdGlvbigpOwor
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJRGlnaXQ+KGJ1ZmZlcik7CisgICAg
cmV0dXJuIGJ1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW47CiB9CiAKIC8vIFZlcnkgc3RyaWN0IGlu
dGVnZXIgcGFyc2VyLiBEbyBub3QgYWxsb3cgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNl
IHVubGlrZSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoKS4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IHN0YXRpYyBib29sIHRvSW50KGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBwYXJzZVN0YXJ0LCB1bnNpZ25lZCBwYXJzZUxlbmd0aCwg
aW50JiBvdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9u
YWw8aW50PiBwYXJzZUludChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZm
ZXIsIHVuc2lnbmVkIG1heGltdW1OdW1iZXJPZkRpZ2l0c1RvUGFyc2UpCiB7Ci0gICAgaWYgKHBh
cnNlU3RhcnQgKyBwYXJzZUxlbmd0aCA+IGxlbmd0aCB8fCBwYXJzZUxlbmd0aCA8PSAwKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IHZhbHVlID0gMDsKLSAgICBhdXRvIGN1cnJlbnQg
PSBzcmMgKyBwYXJzZVN0YXJ0OwotICAgIGF1dG8gZW5kID0gY3VycmVudCArIHBhcnNlTGVuZ3Ro
OworICAgIGlmIChtYXhpbXVtTnVtYmVyT2ZEaWdpdHNUb1BhcnNlID4gYnVmZmVyLmxlbmd0aFJl
bWFpbmluZygpIHx8ICFtYXhpbXVtTnVtYmVyT2ZEaWdpdHNUb1BhcnNlKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgbmVnYXRp
dmUgbnVtYmVycyBmb3IgSVNPIDg2MDEuCi0gICAgZm9yICg7IGN1cnJlbnQgPCBlbmQ7ICsrY3Vy
cmVudCkgewotICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqY3VycmVudCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGludCBkaWdpdCA9ICpjdXJyZW50IC0gJzAnOworCisg
ICAgaW50IHZhbHVlID0gMDsKKyAgICB1bnNpZ25lZCBkaWdpdHNSZW1haW5pbmcgPSAwOworICAg
IHdoaWxlIChkaWdpdHNSZW1haW5pbmcgPCBtYXhpbXVtTnVtYmVyT2ZEaWdpdHNUb1BhcnNlKSB7
CisgICAgICAgIGlmICghaXNBU0NJSURpZ2l0KCpidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgaW50IGRpZ2l0ID0gKmJ1ZmZlciAtICcwJzsKICAgICAg
ICAgaWYgKHZhbHVlID4gKElOVF9NQVggLSBkaWdpdCkgLyAxMCkgLy8gQ2hlY2sgZm9yIG92ZXJm
bG93LgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDEwICsgZGlnaXQ7CisgICAgICAgICsr
ZGlnaXRzUmVtYWluaW5nOworICAgICAgICArK2J1ZmZlcjsKICAgICB9Ci0gICAgb3V0ID0gdmFs
dWU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8aW50PiBwYXJzZUludFdpdGhp
bkxpbWl0cyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIsIHVuc2ln
bmVkIG1heGltdW1OdW1iZXJPZkRpZ2l0c1RvUGFyc2UsIGludCBtaW5pbXVtVmFsdWUsIGludCBt
YXhpbXVtVmFsdWUpCit7CisgICAgYXV0byB2YWx1ZSA9IHBhcnNlSW50KGJ1ZmZlciwgbWF4aW11
bU51bWJlck9mRGlnaXRzVG9QYXJzZSk7CisgICAgaWYgKCEodmFsdWUgJiYgKnZhbHVlID49IG1p
bmltdW1WYWx1ZSAmJiAqdmFsdWUgPD0gbWF4aW11bVZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlWWVhcihjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBl
bmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRz
OjpwYXJzZVllYXIoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQog
ewotICAgIHVuc2lnbmVkIGRpZ2l0c0xlbmd0aCA9IGNvdW50RGlnaXRzKHNyYywgbGVuZ3RoLCBz
dGFydCk7CisgICAgdW5zaWduZWQgZGlnaXRzTGVuZ3RoID0gY291bnREaWdpdHMoYnVmZmVyKTsK
ICAgICAvLyBOZWVkcyBhdCBsZWFzdCA0IGRpZ2l0cyBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJk
LgogICAgIGlmIChkaWdpdHNMZW5ndGggPCA0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aW50IHllYXI7Ci0gICAgaWYgKCF0b0ludChzcmMsIGxlbmd0aCwgc3RhcnQsIGRpZ2l0c0xlbmd0
aCwgeWVhcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoeWVhciA8IG1pbmltdW1Z
ZWFyKCkgfHwgeWVhciA+IG1heGltdW1ZZWFyKCkpCisKKyAgICBhdXRvIHllYXIgPSBwYXJzZUlu
dFdpdGhpbkxpbWl0cyhidWZmZXIsIGRpZ2l0c0xlbmd0aCwgbWluaW11bVllYXIsIG1heGltdW1Z
ZWFyKTsKKyAgICBpZiAoIXllYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3llYXIg
PSB5ZWFyOwotICAgIGVuZCA9IHN0YXJ0ICsgZGlnaXRzTGVuZ3RoOworCisgICAgbV95ZWFyID0g
KnllYXI7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIHdpdGhpbkhUTUxEYXRl
TGltaXRzKGludCB5ZWFyLCBpbnQgbW9udGgpCiB7Ci0gICAgaWYgKHllYXIgPCBEYXRlQ29tcG9u
ZW50czo6bWluaW11bVllYXIoKSkKKyAgICBpZiAoeWVhciA8IG1pbmltdW1ZZWFyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHllYXIgPCBEYXRlQ29tcG9uZW50czo6bWF4aW11bVll
YXIoKSkKKyAgICBpZiAoeWVhciA8IG1heGltdW1ZZWFyKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICByZXR1cm4gbW9udGggPD0gbWF4aW11bU1vbnRoSW5NYXhpbXVtWWVhcjsKIH0KIAogc3Rh
dGljIGJvb2wgd2l0aGluSFRNTERhdGVMaW1pdHMoaW50IHllYXIsIGludCBtb250aCwgaW50IG1v
bnRoRGF5KQogewotICAgIGlmICh5ZWFyIDwgRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1ZZWFyKCkp
CisgICAgaWYgKHllYXIgPCBtaW5pbXVtWWVhcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICh5ZWFyIDwgRGF0ZUNvbXBvbmVudHM6Om1heGltdW1ZZWFyKCkpCisgICAgaWYgKHllYXIg
PCBtYXhpbXVtWWVhcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKG1vbnRoIDwgbWF4
aW11bU1vbnRoSW5NYXhpbXVtWWVhcikKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjYsOSAr
MTgxLDkgQEAgc3RhdGljIGJvb2wgd2l0aGluSFRNTERhdGVMaW1pdHMoaW50IHllYQogCiBzdGF0
aWMgYm9vbCB3aXRoaW5IVE1MRGF0ZUxpbWl0cyhpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgbW9u
dGhEYXksIGludCBob3VyLCBpbnQgbWludXRlLCBpbnQgc2Vjb25kLCBpbnQgbWlsbGlzZWNvbmQp
CiB7Ci0gICAgaWYgKHllYXIgPCBEYXRlQ29tcG9uZW50czo6bWluaW11bVllYXIoKSkKKyAgICBp
ZiAoeWVhciA8IG1pbmltdW1ZZWFyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHll
YXIgPCBEYXRlQ29tcG9uZW50czo6bWF4aW11bVllYXIoKSkKKyAgICBpZiAoeWVhciA8IG1heGlt
dW1ZZWFyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAobW9udGggPCBtYXhpbXVtTW9u
dGhJbk1heGltdW1ZZWFyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE4NSw1MiArMjAwLDQ2
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEY+IHN0YXRpYyBPcHRpb25hbDxEYXQKICAgICBpZiAoc291
cmNlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIERhdGVD
b21wb25lbnRzIHJlc3VsdDsKLSAgICB1bnNpZ25lZCBlbmQ7Ci0gICAgaWYgKHNvdXJjZS5pczhC
aXQoKSkgewotICAgICAgICBpZiAoIXBhcnNlRnVuY3Rpb24ocmVzdWx0LCBzb3VyY2UuY2hhcmFj
dGVyczgoKSwgc291cmNlLmxlbmd0aCgpLCBlbmQpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXBhcnNlRnVuY3Rpb24ocmVzdWx0
LCBzb3VyY2UuY2hhcmFjdGVyczE2KCksIHNvdXJjZS5sZW5ndGgoKSwgZW5kKSkKKyAgICByZXR1
cm4gcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHNvdXJjZSwgWyZdKGF1dG8gYnVmZmVyKSAtPiBP
cHRpb25hbDxEYXRlQ29tcG9uZW50cz4geworICAgICAgICBEYXRlQ29tcG9uZW50cyBkYXRlOwor
ICAgICAgICBpZiAoIXBhcnNlRnVuY3Rpb24oYnVmZmVyLCBkYXRlKSB8fCAhYnVmZmVyLmF0RW5k
KCkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIH0KLSAgICBpZiAoZW5k
ICE9IHNvdXJjZS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gZGF0ZTsKKyAgICB9KTsKIH0KIAogT3B0aW9u
YWw8RGF0ZUNvbXBvbmVudHM+IERhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ01vbnRoKFN0cmlu
Z1ZpZXcgc291cmNlKQogewotICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10g
KGF1dG8mIGRhdGUsIGNvbnN0IGF1dG8qIHNyYywgYXV0byBsZW5ndGgsIGF1dG8mIGVuZCkgewot
ICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZU1vbnRoKHNyYywgbGVuZ3RoLCAwLCBlbmQpOworICAg
IHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10gKGF1dG8mIGJ1ZmZlciwgYXV0byYg
ZGF0ZSkgeworICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZU1vbnRoKGJ1ZmZlcik7CiAgICAgfSk7
CiB9CiAKIE9wdGlvbmFsPERhdGVDb21wb25lbnRzPiBEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNp
bmdEYXRlKFN0cmluZ1ZpZXcgc291cmNlKQogewotICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5n
KHNvdXJjZSwgW10gKGF1dG8mIGRhdGUsIGNvbnN0IGF1dG8qIHNyYywgYXV0byBsZW5ndGgsIGF1
dG8mIGVuZCkgewotICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZURhdGUoc3JjLCBsZW5ndGgsIDAs
IGVuZCk7CisgICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgYnVm
ZmVyLCBhdXRvJiBkYXRlKSB7CisgICAgICAgIHJldHVybiBkYXRlLnBhcnNlRGF0ZShidWZmZXIp
OwogICAgIH0pOwogfQogCiBPcHRpb25hbDxEYXRlQ29tcG9uZW50cz4gRGF0ZUNvbXBvbmVudHM6
OmZyb21QYXJzaW5nV2VlayhTdHJpbmdWaWV3IHNvdXJjZSkKIHsKLSAgICByZXR1cm4gY3JlYXRl
RnJvbVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBkYXRlLCBjb25zdCBhdXRvKiBzcmMsIGF1dG8g
bGVuZ3RoLCBhdXRvJiBlbmQpIHsKLSAgICAgICAgcmV0dXJuIGRhdGUucGFyc2VXZWVrKHNyYywg
bGVuZ3RoLCAwLCBlbmQpOworICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10g
KGF1dG8mIGJ1ZmZlciwgYXV0byYgZGF0ZSkgeworICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZVdl
ZWsoYnVmZmVyKTsKICAgICB9KTsKIH0KIAogT3B0aW9uYWw8RGF0ZUNvbXBvbmVudHM+IERhdGVD
b21wb25lbnRzOjpmcm9tUGFyc2luZ1RpbWUoU3RyaW5nVmlldyBzb3VyY2UpCiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgZGF0ZSwgY29uc3QgYXV0byog
c3JjLCBhdXRvIGxlbmd0aCwgYXV0byYgZW5kKSB7Ci0gICAgICAgIHJldHVybiBkYXRlLnBhcnNl
VGltZShzcmMsIGxlbmd0aCwgMCwgZW5kKTsKKyAgICByZXR1cm4gY3JlYXRlRnJvbVN0cmluZyhz
b3VyY2UsIFtdIChhdXRvJiBidWZmZXIsIGF1dG8mIGRhdGUpIHsKKyAgICAgICAgcmV0dXJuIGRh
dGUucGFyc2VUaW1lKGJ1ZmZlcik7CiAgICAgfSk7CiB9CiAKIE9wdGlvbmFsPERhdGVDb21wb25l
bnRzPiBEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdEYXRlVGltZUxvY2FsKFN0cmluZ1ZpZXcg
c291cmNlKQogewotICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10gKGF1dG8m
IGRhdGUsIGNvbnN0IGF1dG8qIHNyYywgYXV0byBsZW5ndGgsIGF1dG8mIGVuZCkgewotICAgICAg
ICByZXR1cm4gZGF0ZS5wYXJzZURhdGVUaW1lTG9jYWwoc3JjLCBsZW5ndGgsIDAsIGVuZCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgYnVmZmVyLCBhdXRv
JiBkYXRlKSB7CisgICAgICAgIHJldHVybiBkYXRlLnBhcnNlRGF0ZVRpbWVMb2NhbChidWZmZXIp
OwogICAgIH0pOwogfQogCkBAIC0zMzcsMTk1ICszNDYsMTc4IEBAIGJvb2wgRGF0ZUNvbXBvbmVu
dHM6OmFkZE1pbnV0ZShpbnQgbWludXQKIH0KIAogLy8gUGFyc2VzIGEgdGltZXpvbmUgcGFydCwg
YW5kIGFkanVzdCB5ZWFyLCBtb250aCwgbW9udGhEYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBt
aWxsaXNlY29uZC4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNv
bXBvbmVudHM6OnBhcnNlVGltZVpvbmUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9uZW50czo6cGFyc2VUaW1lWm9uZShTdHJp
bmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7Ci0gICAgaWYgKHN0YXJ0
ID49IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIGluZGV4ID0g
c3RhcnQ7Ci0gICAgaWYgKHNyY1tpbmRleF0gPT0gJ1onKSB7Ci0gICAgICAgIGVuZCA9IGluZGV4
ICsgMTsKKyAgICBpZiAoc2tpcEV4YWN0bHkoYnVmZmVyLCAnWicpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9CiAKICAgICBib29sIG1pbnVzOwotICAgIGlmIChzcmNbaW5kZXhdID09ICcr
JykKKyAgICBpZiAoc2tpcEV4YWN0bHkoYnVmZmVyLCAnKycpKQogICAgICAgICBtaW51cyA9IGZh
bHNlOwotICAgIGVsc2UgaWYgKHNyY1tpbmRleF0gPT0gJy0nKQorICAgIGVsc2UgaWYgKHNraXBF
eGFjdGx5KGJ1ZmZlciwgJy0nKSkKICAgICAgICAgbWludXMgPSB0cnVlOwogICAgIGVsc2UKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7CiAKLSAgICBpbnQgaG91cjsKLSAgICBp
bnQgbWludXRlOwotICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBob3VyKSB8
fCBob3VyIDwgMCB8fCBob3VyID4gMjMpCisgICAgYXV0byBob3VyID0gcGFyc2VJbnRXaXRoaW5M
aW1pdHMoYnVmZmVyLCAyLCAwLCAyMyk7CisgICAgaWYgKCFob3VyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaW5kZXggKz0gMjsKIAotICAgIGlmIChpbmRleCA+PSBsZW5ndGggfHwgc3Jj
W2luZGV4XSAhPSAnOicpCisgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICc6JykpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4OwogCi0gICAgaWYgKCF0b0ludChzcmMsIGxl
bmd0aCwgaW5kZXgsIDIsIG1pbnV0ZSkgfHwgbWludXRlIDwgMCB8fCBtaW51dGUgPiA1OSkKKyAg
ICBhdXRvIG1pbnV0ZSA9IHBhcnNlSW50V2l0aGluTGltaXRzKGJ1ZmZlciwgMiwgMCwgNTkpOwor
ICAgIGlmICghbWludXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW5kZXggKz0gMjsK
IAogICAgIGlmIChtaW51cykgewotICAgICAgICBob3VyID0gLWhvdXI7Ci0gICAgICAgIG1pbnV0
ZSA9IC1taW51dGU7CisgICAgICAgICpob3VyID0gLSpob3VyOworICAgICAgICAqbWludXRlID0g
LSptaW51dGU7CiAgICAgfQogCiAgICAgLy8gU3VidHJhY3QgdGhlIHRpbWV6b25lIG9mZnNldC4K
LSAgICBpZiAoIWFkZE1pbnV0ZSgtKGhvdXIgKiA2MCArIG1pbnV0ZSkpKQorICAgIGlmICghYWRk
TWludXRlKC0oKmhvdXIgKiA2MCArICptaW51dGUpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGVuZCA9IGluZGV4OwogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZU1vbnRoKGNvbnN0IENo
YXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNvbXBv
bmVudHM6OnBhcnNlTW9udGgoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVm
ZmVyKQogewotICAgIEFTU0VSVChzcmMpOwotICAgIHVuc2lnbmVkIGluZGV4OwotICAgIGlmICgh
cGFyc2VZZWFyKHNyYywgbGVuZ3RoLCBzdGFydCwgaW5kZXgpKQorICAgIGlmICghcGFyc2VZZWFy
KGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3Ro
IHx8IHNyY1tpbmRleF0gIT0gJy0nKQorCisgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICct
JykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4OwogCi0gICAgaW50IG1vbnRo
OwotICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBtb250aCkgfHwgbW9udGgg
PCAxIHx8IG1vbnRoID4gMTIpCisgICAgYXV0byBtb250aCA9IHBhcnNlSW50V2l0aGluTGltaXRz
KGJ1ZmZlciwgMiwgMSwgMTIpOworICAgIGlmICghbW9udGgpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAtLW1vbnRoOwotICAgIGlmICghd2l0aGluSFRNTERhdGVMaW1pdHMobV95ZWFyLCBt
b250aCkpCisgICAgLS0qbW9udGg7CisKKyAgICBpZiAoIXdpdGhpbkhUTUxEYXRlTGltaXRzKG1f
eWVhciwgKm1vbnRoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbW9udGggPSBtb250
aDsKLSAgICBlbmQgPSBpbmRleCArIDI7CisKKyAgICBtX21vbnRoID0gKm1vbnRoOwogICAgIG1f
dHlwZSA9IE1vbnRoOwogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZURhdGUoY29uc3QgQ2hhcmFj
dGVyVHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYg
ZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9uZW50
czo6cGFyc2VEYXRlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikK
IHsKLSAgICBBU1NFUlQoc3JjKTsKLSAgICB1bnNpZ25lZCBpbmRleDsKLSAgICBpZiAoIXBhcnNl
TW9udGgoc3JjLCBsZW5ndGgsIHN0YXJ0LCBpbmRleCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAvLyAnLScgYW5kIDItZGlnaXRzIGFyZSBuZWVkZWQuCi0gICAgaWYgKGluZGV4ICsgMiA+
PSBsZW5ndGgpCisgICAgaWYgKCFwYXJzZU1vbnRoKGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoc3JjW2luZGV4XSAhPSAnLScpCisKKyAgICBpZiAoIXNraXBFeGFjdGx5
KGJ1ZmZlciwgJy0nKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7CiAKLSAg
ICBpbnQgZGF5OwotICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBkYXkpIHx8
IGRheSA8IDEgfHwgZGF5ID4gbWF4RGF5T2ZNb250aChtX3llYXIsIG1fbW9udGgpKQorICAgIGF1
dG8gZGF5ID0gcGFyc2VJbnRXaXRoaW5MaW1pdHMoYnVmZmVyLCAyLCAxLCBtYXhEYXlPZk1vbnRo
KG1feWVhciwgbV9tb250aCkpOworICAgIGlmICghZGF5KQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKCF3aXRoaW5IVE1MRGF0ZUxpbWl0cyhtX3llYXIsIG1fbW9udGgsIGRheSkpCisK
KyAgICBpZiAoIXdpdGhpbkhUTUxEYXRlTGltaXRzKG1feWVhciwgbV9tb250aCwgKmRheSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX21vbnRoRGF5ID0gZGF5OwotICAgIGVuZCA9IGlu
ZGV4ICsgMjsKKworICAgIG1fbW9udGhEYXkgPSAqZGF5OwogICAgIG1fdHlwZSA9IERhdGU7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJv
b2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlV2Vlayhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVu
c2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZVdlZWsoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewotICAgIEFTU0VSVChz
cmMpOwotICAgIHVuc2lnbmVkIGluZGV4OwotICAgIGlmICghcGFyc2VZZWFyKHNyYywgbGVuZ3Ro
LCBzdGFydCwgaW5kZXgpKQorICAgIGlmICghcGFyc2VZZWFyKGJ1ZmZlcikpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIC8vIDQgY2hhcmFjdGVycyAoJy0nICdXJyBkaWdpdCBkaWdpdCkg
YXJlIG5lZWRlZC4KLSAgICBpZiAoaW5kZXggKyAzID49IGxlbmd0aCkKKyAgICBpZiAoIXNraXBF
eGFjdGx5KGJ1ZmZlciwgJy0nKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzcmNb
aW5kZXhdICE9ICctJykKKyAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJ1cnKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7Ci0gICAgaWYgKHNyY1tpbmRleF0gIT0gJ1cn
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKytpbmRleDsKIAotICAgIGludCB3ZWVrOwot
ICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCB3ZWVrKSB8fCB3ZWVrIDwgbWlu
aW11bVdlZWtOdW1iZXIgfHwgd2VlayA+IG1heFdlZWtOdW1iZXJJblllYXIoKSkKKyAgICBhdXRv
IHdlZWsgPSBwYXJzZUludFdpdGhpbkxpbWl0cyhidWZmZXIsIDIsIG1pbmltdW1XZWVrTnVtYmVy
LCBtYXhXZWVrTnVtYmVySW5ZZWFyKCkpOworICAgIGlmICghd2VlaykKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChtX3llYXIgPT0gbWF4aW11bVllYXIoKSAmJiB3ZWVrID4gbWF4aW11
bVdlZWtJbk1heGltdW1ZZWFyKQorCisgICAgaWYgKG1feWVhciA9PSBtYXhpbXVtWWVhciAmJiAq
d2VlayA+IG1heGltdW1XZWVrSW5NYXhpbXVtWWVhcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fd2VlayA9IHdlZWs7Ci0gICAgZW5kID0gaW5kZXggKyAyOworCisgICAgbV93ZWVrID0g
KndlZWs7CiAgICAgbV90eXBlID0gV2VlazsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9uZW50czo6cGFyc2VUaW1l
KGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wg
RGF0ZUNvbXBvbmVudHM6OnBhcnNlVGltZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5
cGU+JiBidWZmZXIpCiB7Ci0gICAgQVNTRVJUKHNyYyk7Ci0gICAgaW50IGhvdXI7Ci0gICAgaWYg
KCF0b0ludChzcmMsIGxlbmd0aCwgc3RhcnQsIDIsIGhvdXIpIHx8IGhvdXIgPCAwIHx8IGhvdXIg
PiAyMykKKyAgICBhdXRvIGhvdXIgPSBwYXJzZUludFdpdGhpbkxpbWl0cyhidWZmZXIsIDIsIDAs
IDIzKTsKKyAgICBpZiAoIWhvdXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25l
ZCBpbmRleCA9IHN0YXJ0ICsgMjsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNyY1tpbmRleF0gIT0gJzonKQorCisgICAgaWYgKCFza2lw
RXhhY3RseShidWZmZXIsICc6JykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4
OwogCi0gICAgaW50IG1pbnV0ZTsKLSAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBpbmRleCwg
MiwgbWludXRlKSB8fCBtaW51dGUgPCAwIHx8IG1pbnV0ZSA+IDU5KQorICAgIGF1dG8gbWludXRl
ID0gcGFyc2VJbnRXaXRoaW5MaW1pdHMoYnVmZmVyLCAyLCAwLCA1OSk7CisgICAgaWYgKCFtaW51
dGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbmRleCArPSAyOwogCi0gICAgaW50IHNl
Y29uZCA9IDA7Ci0gICAgaW50IG1pbGxpc2Vjb25kID0gMDsKICAgICAvLyBPcHRpb25hbCBzZWNv
bmQgcGFydC4KICAgICAvLyBEbyBub3QgcmV0dXJuIHdpdGggZmFsc2UgYmVjYXVzZSB0aGUgcGFy
dCBpcyBvcHRpb25hbC4KLSAgICBpZiAoaW5kZXggKyAyIDwgbGVuZ3RoICYmIHNyY1tpbmRleF0g
PT0gJzonKSB7Ci0gICAgICAgIGlmICh0b0ludChzcmMsIGxlbmd0aCwgaW5kZXggKyAxLCAyLCBz
ZWNvbmQpICYmIHNlY29uZCA+PSAwICYmIHNlY29uZCA8PSA1OSkgewotICAgICAgICAgICAgaW5k
ZXggKz0gMzsKKyAgICBPcHRpb25hbDxpbnQ+IHNlY29uZDsKKyAgICBPcHRpb25hbDxpbnQ+IG1p
bGxpc2Vjb25kOworCisgICAgYXV0byB0ZW1wb3JhcnlCdWZmZXIgPSBidWZmZXI7CisgICAgaWYg
KHNraXBFeGFjdGx5KHRlbXBvcmFyeUJ1ZmZlciwgJzonKSkgeworICAgICAgICBzZWNvbmQgPSBw
YXJzZUludFdpdGhpbkxpbWl0cyh0ZW1wb3JhcnlCdWZmZXIsIDIsIDAsIDU5KTsKKyAgICAgICAg
aWYgKHNlY29uZCkgeworICAgICAgICAgICAgLy8gT25seSBhZnRlciBzdWNjZXNzZnVsbHkgcGFy
c2luZyBhbmQgdmFsaWRhdGluZyAnc2Vjb25kJywgZG8gd2UgaW5jcmVtZW50IHRoZSByZWFsIGJ1
ZmZlci4KKyAgICAgICAgICAgIGJ1ZmZlciArPSB0ZW1wb3JhcnlCdWZmZXIucG9zaXRpb24oKSAt
IGJ1ZmZlci5wb3NpdGlvbigpOwogCiAgICAgICAgICAgICAvLyBPcHRpb25hbCBmcmFjdGlvbmFs
IHNlY29uZCBwYXJ0LgotICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIHNyY1tpbmRl
eF0gPT0gJy4nKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgZGlnaXRzTGVuZ3RoID0gY291
bnREaWdpdHMoc3JjLCBsZW5ndGgsIGluZGV4ICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKGRp
Z2l0c0xlbmd0aCA+ICAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAg
ICAgICAgICAgICAgIGJvb2wgb2s7CisgICAgICAgICAgICBpZiAoc2tpcEV4YWN0bHkodGVtcG9y
YXJ5QnVmZmVyLCAnLicpKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZGlnaXRzTGVuZ3Ro
ID0gY291bnREaWdpdHModGVtcG9yYXJ5QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBpZiAoZGln
aXRzTGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZGlnaXRzTGVuZ3RoID09
IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gdG9JbnQoc3JjLCBsZW5ndGgsIGlu
ZGV4LCAxLCBtaWxsaXNlY29uZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29u
ZCAqPSAxMDA7CisgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZCA9IHBhcnNlSW50
KHRlbXBvcmFyeUJ1ZmZlciwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAqbWlsbGlzZWNv
bmQgKj0gMTAwOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0c0xlbmd0aCA9
PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvayA9IHRvSW50KHNyYywgbGVuZ3RoLCBp
bmRleCwgMiwgbWlsbGlzZWNvbmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWNv
bmQgKj0gMTA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSAvLyBkaWdpdHNMZW5ndGggPj0g
MwotICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSB0b0ludChzcmMsIGxlbmd0aCwgaW5kZXgs
IDMsIG1pbGxpc2Vjb25kKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChvaywg
b2spOwotICAgICAgICAgICAgICAgICAgICBpbmRleCArPSBkaWdpdHNMZW5ndGg7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZCA9IHBhcnNlSW50KHRlbXBvcmFyeUJ1ZmZlciwg
Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAqbWlsbGlzZWNvbmQgKj0gMTA7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdhcmRs
ZXNzIG9mIHRoZSBudW1iZXIgb2YgZGlnaXRzLCB3ZSBvbmx5IGV2ZXIgcGFyc2UgYXQgbW9zdCAz
LiBBbGwgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpZ2l0cyBhZnRlciB0aGF0
IGFyZSBpZ25vcmVkLCBidXQgdGhlIGJ1ZmZlciBpcyBpbmNyZW1lbnRlZCBhcyBpZiB0aGV5IHdl
cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBwYXJzZWQuCisgICAgICAgICAgICAg
ICAgICAgICAgICBtaWxsaXNlY29uZCA9IHBhcnNlSW50KHRlbXBvcmFyeUJ1ZmZlciwgMyk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBEdWUgdG8gdGhl
IGNvdW50RGlnaXRzIGFib3ZlLCB0aGUgcGFyc2VJbnQgY2FsbHMgc2hvdWxkIGFsbCBiZSBzdWNj
ZXNzZnVsLgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQobWlsbGlzZWNvbmQpOworCisgICAg
ICAgICAgICAgICAgICAgIC8vIE9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBhcnNpbmcgYW5kIHZh
bGlkYXRpbmcgJ21pbGxpc2Vjb25kJywgZG8gd2UgaW5jcmVtZW50IHRoZSByZWFsIGJ1ZmZlci4K
KyAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IDEgKyBkaWdpdHNMZW5ndGg7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIG1faG91ciA9
IGhvdXI7Ci0gICAgbV9taW51dGUgPSBtaW51dGU7Ci0gICAgbV9zZWNvbmQgPSBzZWNvbmQ7Ci0g
ICAgbV9taWxsaXNlY29uZCA9IG1pbGxpc2Vjb25kOwotICAgIGVuZCA9IGluZGV4OworCisgICAg
bV9ob3VyID0gKmhvdXI7CisgICAgbV9taW51dGUgPSAqbWludXRlOworICAgIG1fc2Vjb25kID0g
c2Vjb25kLnZhbHVlT3IoMCk7CisgICAgbV9taWxsaXNlY29uZCA9IG1pbGxpc2Vjb25kLnZhbHVl
T3IoMCk7CiAgICAgbV90eXBlID0gVGltZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9uZW50czo6cGFyc2VEYXRl
VGltZUxvY2FsKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IGJvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZVRpbWVMb2NhbChTdHJpbmdQYXJzaW5n
QnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7Ci0gICAgQVNTRVJUKHNyYyk7Ci0gICAg
dW5zaWduZWQgaW5kZXg7Ci0gICAgaWYgKCFwYXJzZURhdGUoc3JjLCBsZW5ndGgsIHN0YXJ0LCBp
bmRleCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQor
ICAgIGlmICghcGFyc2VEYXRlKGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoc3JjW2luZGV4XSAhPSAnVCcpCisKKyAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJ1Qn
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7Ci0gICAgaWYgKCFwYXJzZVRp
bWUoc3JjLCBsZW5ndGgsIGluZGV4LCBlbmQpKQorCisgICAgaWYgKCFwYXJzZVRpbWUoYnVmZmVy
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCF3aXRoaW5IVE1MRGF0ZUxpbWl0
cyhtX3llYXIsIG1fbW9udGgsIG1fbW9udGhEYXksIG1faG91ciwgbV9taW51dGUsIG1fc2Vjb25k
LCBtX21pbGxpc2Vjb25kKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgbV90eXBlID0g
RGF0ZVRpbWVMb2NhbDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY5NCw3ICs2ODYsNyBAQCBi
b29sIERhdGVDb21wb25lbnRzOjpzZXRNaWxsaXNlY29uZHNTaW5jCiAgICAgbXMgPSByb3VuZCht
cyk7CiAKICAgICBtX3llYXIgPSBtc1RvWWVhcihtcyk7Ci0gICAgaWYgKG1feWVhciA8IG1pbmlt
dW1ZZWFyKCkgfHwgbV95ZWFyID4gbWF4aW11bVllYXIoKSkKKyAgICBpZiAobV95ZWFyIDwgbWlu
aW11bVllYXIgfHwgbV95ZWFyID4gbWF4aW11bVllYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGludCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCBtX3llYXIpOwpAQCAtNzAyLDcgKzY5
NCw3IEBAIGJvb2wgRGF0ZUNvbXBvbmVudHM6OnNldE1pbGxpc2Vjb25kc1NpbmMKICAgICBpZiAo
eWVhckRheSA8IG9mZnNldCkgewogICAgICAgICAvLyBUaGUgZGF5IGJlbG9uZ3MgdG8gdGhlIGxh
c3Qgd2VlayBvZiB0aGUgcHJldmlvdXMgeWVhci4KICAgICAgICAgbV95ZWFyLS07Ci0gICAgICAg
IGlmIChtX3llYXIgPD0gbWluaW11bVllYXIoKSkKKyAgICAgICAgaWYgKG1feWVhciA8PSBtaW5p
bXVtWWVhcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbV93ZWVrID0gbWF4
V2Vla051bWJlckluWWVhcigpOwogICAgIH0gZWxzZSB7CkBAIC03MTEsNyArNzAzLDcgQEAgYm9v
bCBEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2luYwogICAgICAgICAgICAgbV95ZWFy
Kys7CiAgICAgICAgICAgICBtX3dlZWsgPSAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX3ll
YXIgPiBtYXhpbXVtWWVhcigpIHx8IChtX3llYXIgPT0gbWF4aW11bVllYXIoKSAmJiBtX3dlZWsg
PiBtYXhpbXVtV2Vla0luTWF4aW11bVllYXIpKQorICAgICAgICBpZiAobV95ZWFyID4gbWF4aW11
bVllYXIgfHwgKG1feWVhciA9PSBtYXhpbXVtWWVhciAmJiBtX3dlZWsgPiBtYXhpbXVtV2Vla0lu
TWF4aW11bVllYXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBtX3R5
cGUgPSBXZWVrOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5o
CShyZXZpc2lvbiAyNjUwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9u
ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsMjUgKzEzNywxNCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbmxpbmUgZG91YmxlIG1heGltdW1UaW1lKCkgeyByZXR1cm4gODYz
OTk5OTk7IH0gLy8gMjM6NTk6NTkuOTk5CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbmxpbmUgZG91
YmxlIG1heGltdW1XZWVrKCkgeyByZXR1cm4gODYzOTk5OTU2ODAwMDAwMC4wOyB9IC8vIDI3NTc2
MC0wOS0wOCwgdGhlIE1vbmRheSBvZiB0aGUgd2VlayBpbmNsdWRpbmcgMjc1NzYwLTA5LTEzLgog
Ci0gICAgLy8gSFRNTDUgdXNlcyBJU08tODYwMSBmb3JtYXQgd2l0aCB5ZWFyID49IDEuIEdyZWdv
cmlhbiBjYWxlbmRhciBzdGFydGVkIGluCi0gICAgLy8gMTU4Mi4gSG93ZXZlciwgd2UgbmVlZCB0
byBzdXBwb3J0IDAwMDEtMDEtMDEgaW4gR3JlZ29yaWFuIGNhbGVuZGFyIHJ1bGUuCi0gICAgc3Rh
dGljIGlubGluZSBpbnQgbWluaW11bVllYXIoKSB7IHJldHVybiAxOyB9Ci0KLSAgICAvLyBEYXRl
IGluIEVDTUFTY3JpcHQgY2FuJ3QgcmVwcmVzZW50IGRhdGVzIGxhdGVyIHRoYW4gMjc1NzYwLTA5
LTEzVDAwOjAwWi4KLSAgICAvLyBTbywgd2UgaGF2ZSB0aGUgc2FtZSB1cHBlciBsaW1pdCBpbiBI
VE1MNSBkYXRlL3RpbWUgdHlwZXMuCi0gICAgc3RhdGljIGlubGluZSBpbnQgbWF4aW11bVllYXIo
KSB7IHJldHVybiAyNzU3NjA7IH0KLQotICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVdlZWtO
dW1iZXI7Ci0gICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtV2Vla051bWJlcjsKLQogcHJpdmF0
ZToKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlTW9udGgo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCYgZW5kKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBi
b29sIHBhcnNlRGF0ZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGJvb2wgcGFyc2VXZWVrKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVRpbWUoY29uc3QgQ2hhcmFjdGVy
VHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5k
KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlRGF0ZVRp
bWVMb2NhbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGJvb2wgcGFyc2VZZWFyKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQg
bGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVRpbWVab25lKGNvbnN0IENoYXJhY3RlclR5
cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVllYXIoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VUaW1lWm9uZShTdHJpbmdQYXJzaW5nQnVmZmVyPENo
YXJhY3RlclR5cGU+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9v
bCBwYXJzZU1vbnRoKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlRGF0ZShTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJhY3RlclR5cGU+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gYm9vbCBwYXJzZVdlZWsoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBl
PiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VUaW1l
KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlRGF0ZVRpbWVMb2NhbChTdHJpbmdQYXJzaW5n
QnVmZmVyPENoYXJhY3RlclR5cGU+Jik7CiAKICAgICAvLyBUaGUgZm9sbG93aW5nIHNldE1pbGxp
c2Vjb25kc1NpbmNlRXBvY2hGb3IqKCkgZnVuY3Rpb25zIHRha2UKICAgICAvLyB0aGUgbnVtYmVy
IG9mIG1pbGxpc2Vjb25kcyBzaW5jZSAxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMCBVVEMgYXMK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405647</attachid>
            <date>2020-07-30 18:05:14 -0700</date>
            <delta_ts>2020-07-30 19:05:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213929-20200730180513.patch</filename>
            <type>text/plain</type>
            <size>25242</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDIwLTA3LTMwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBDb252ZXJ0IERhdGVDb21wb25lbnRz
IHRvIHVzZSBTdHJpbmdQYXJzaW5nQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM5MjkKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICAtIFN3aXRjaGVzIHN0cmluZyBwYXJzaW5nIGluIERhdGVDb21wb25l
bnRzIHRvIHVzaW5nIFN0cmluZ1BhcnNpbmdCdWZmZXIsCisgICAgICAgICAgbWFraW5nIHVzZSBv
ZiBQYXJzaW5nVXRpbGl0aWVzIHRvIHN0cmVhbWxpbmUgLyBzaW1wbGlmeSB0aGUgY29kZS4KKyAg
ICAgICAgLSBNb3ZlcyBhIGZldyBjb25zdGFudCB2YWx1ZXMgb25seSB1c2VkIGluIERhdGVDb21w
b25lbnRzLmNwcCB0byBEYXRlQ29tcG9uZW50cy5jcHAKKyAgICAgICAgLSBSZW5hbWUgdG9JbnQg
aW4gRGF0ZUNvbXBvbmVudHMuY3BwIHRvIHBhcnNlSW50LCBhbmQgaGF2ZSB1c2UgYW4gT3B0aW9u
YWwgcmV0dXJuCisgICAgICAgICAgdmFsdWUgcmF0aGVyIHRoYW4gYm9vbCArIG91dC1wYXJhbWV0
ZXIuCisgICAgICAgIC0gQWRkIG5ldyBwYXJzZUludFdpdGhpbkxpbWl0cyB0aGF0IGFsc28gY2hl
Y2tzIHRoYXQgcGFyc2VkIHZhbHVlIGlzIHdpdGhpbiBzcGVjZmllZAorICAgICAgICAgIGxpbWl0
cywgYXMgdGhpcyBpcyB3aGF0IGFsbW9zdCBhbGwgb2YgdGhlIGludCBwYXJzaW5nIGluIERhdGVD
b21wb25lbnRzIG5lZWRzLgorCisgICAgICAgICogcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y291bnREaWdpdHMpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VJbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VJbnRXaXRoaW5MaW1pdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlWWVhcik6CisgICAgICAgIChXZWJDb3Jl
Ojp3aXRoaW5IVE1MRGF0ZUxpbWl0cyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcm9tU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ01vbnRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ0RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nV2Vlayk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdUaW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ0RhdGVUaW1lTG9jYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nRGF0ZVRpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlVGltZVpvbmUpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlTW9udGgpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9u
ZW50czo6cGFyc2VXZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpwYXJz
ZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZVRpbWVM
b2NhbCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6cGFyc2VEYXRlVGltZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TW9udGhzU2luY2VFcG9jaCk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2luY2VF
cG9jaEZvcldlZWspOgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL0RhdGVDb21wb25lbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29t
cG9uZW50czo6bWluaW11bVllYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNv
bXBvbmVudHM6Om1heGltdW1ZZWFyKTogRGVsZXRlZC4KKwogMjAyMC0wNy0yOSAgQ2xhcmsgV2Fu
ZyAgPGNsYXJrX3dhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZGVkIGNvcHlGcm9tQ2hhbm5l
bCwgY29weVRvQ2hhbm5lbCB0byBBdWRpb0J1ZmZlcgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RhdGVDb21wb25lbnRzLmNwcAkocmV2aXNpb24gMjY1MDY0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwy
NSArMzEsMzUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRlQ29tcG9uZW50
cy5oIgogCisjaW5jbHVkZSAiUGFyc2luZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgPGxpbWl0cy5o
PgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdD
b25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVm
ZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gSFRNTDUgc3BlY2lmaWNhdGlvbiBk
ZWZpbmVzIG1pbmltdW0gd2VlayBvZiB5ZWFyIGlzIG9uZS4KLWNvbnN0IGludCBEYXRlQ29tcG9u
ZW50czo6bWluaW11bVdlZWtOdW1iZXIgPSAxOworLy8gSFRNTCB1c2VzIElTTy04NjAxIGZvcm1h
dCB3aXRoIHllYXIgPj0gMS4gR3JlZ29yaWFuIGNhbGVuZGFyIHN0YXJ0ZWQgaW4KKy8vIDE1ODIu
IEhvd2V2ZXIsIHdlIG5lZWQgdG8gc3VwcG9ydCAwMDAxLTAxLTAxIGluIEdyZWdvcmlhbiBjYWxl
bmRhciBydWxlLgorc3RhdGljIGNvbnN0ZXhwciBpbnQgbWluaW11bVllYXIgPSAxOwogCi0vLyBI
VE1MNSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgbWF4aW11bSB3ZWVrIG9mIHllYXIgaXMgNTMuCi1j
b25zdCBpbnQgRGF0ZUNvbXBvbmVudHM6Om1heGltdW1XZWVrTnVtYmVyID0gNTM7CisvLyBEYXRl
IGluIEVDTUFTY3JpcHQgY2FuJ3QgcmVwcmVzZW50IGRhdGVzIGxhdGVyIHRoYW4gMjc1NzYwLTA5
LTEzVDAwOjAwWi4KKy8vIFNvLCB3ZSBoYXZlIHRoZSBzYW1lIHVwcGVyIGxpbWl0IGluIEhUTUw1
IGRhdGUvdGltZSB0eXBlcy4KK3N0YXRpYyBjb25zdGV4cHIgaW50IG1heGltdW1ZZWFyID0gMjc1
NzYwOwogCi1zdGF0aWMgY29uc3QgaW50IG1heGltdW1Nb250aEluTWF4aW11bVllYXIgPSA4OyAv
LyBUaGlzIGlzIFNlcHRlbWJlciwgc2luY2UgbW9udGhzIGFyZSAwIGJhc2VkLgotc3RhdGljIGNv
bnN0IGludCBtYXhpbXVtRGF5SW5NYXhpbXVtTW9udGggPSAxMzsKLXN0YXRpYyBjb25zdCBpbnQg
bWF4aW11bVdlZWtJbk1heGltdW1ZZWFyID0gMzc7IC8vIFRoZSB3ZWVrIG9mIDI3NTc2MC0wOS0x
MworLy8gSFRNTGRlZmluZXMgbWluaW11bSB3ZWVrIG9mIHllYXIgaXMgb25lLgorc3RhdGljIGNv
bnN0ZXhwciBpbnQgbWluaW11bVdlZWtOdW1iZXIgPSAxOwogCi1zdGF0aWMgY29uc3QgaW50IGRh
eXNJbk1vbnRoWzEyXSA9IHszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwg
MzAsIDMxfTsKKy8vIEhUTUwgZGVmaW5lcyBtYXhpbXVtIHdlZWsgb2YgeWVhciBpcyA1My4KK3N0
YXRpYyBjb25zdGV4cHIgaW50IG1heGltdW1XZWVrTnVtYmVyID0gNTM7CisKK3N0YXRpYyBjb25z
dGV4cHIgaW50IG1heGltdW1Nb250aEluTWF4aW11bVllYXIgPSA4OyAvLyBUaGlzIGlzIFNlcHRl
bWJlciwgc2luY2UgbW9udGhzIGFyZSAwIGJhc2VkLgorc3RhdGljIGNvbnN0ZXhwciBpbnQgbWF4
aW11bURheUluTWF4aW11bU1vbnRoID0gMTM7CitzdGF0aWMgY29uc3RleHByIGludCBtYXhpbXVt
V2Vla0luTWF4aW11bVllYXIgPSAzNzsgLy8gVGhlIHdlZWsgb2YgMjc1NzYwLTA5LTEzCisKK3N0
YXRpYyBjb25zdGV4cHIgaW50IGRheXNJbk1vbnRoWzEyXSA9IHsgMzEsIDI4LCAzMSwgMzAsIDMx
LCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMSB9OwogCiBzdGF0aWMgYm9vbCBpc0xlYXBZZWFy
KGludCB5ZWFyKQogewpAQCAtOTYsNjggKzEwNiw3MyBAQCBpbnQgRGF0ZUNvbXBvbmVudHM6Om1h
eFdlZWtOdW1iZXJJblllYXIoCiAgICAgcmV0dXJuIGRheSA9PSBUaHVyc2RheSB8fCAoZGF5ID09
IFdlZG5lc2RheSAmJiBpc0xlYXBZZWFyKG1feWVhcikpID8gbWF4aW11bVdlZWtOdW1iZXIgOiBt
YXhpbXVtV2Vla051bWJlciAtIDE7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyB1bnNpZ25lZCBjb3VudERpZ2l0cyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMs
IHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgdW5zaWduZWQgY291bnREaWdpdHMoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxDaGFyYWN0ZXJUeXBlPiBidWZmZXIpCiB7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBzdGFydDsK
LSAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKCFpc0FT
Q0lJRGlnaXQoc3JjW2luZGV4XSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0
dXJuIGluZGV4IC0gc3RhcnQ7CisgICAgYXV0byBiZWdpbiA9IGJ1ZmZlci5wb3NpdGlvbigpOwor
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJRGlnaXQ+KGJ1ZmZlcik7CisgICAg
cmV0dXJuIGJ1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW47CiB9CiAKIC8vIFZlcnkgc3RyaWN0IGlu
dGVnZXIgcGFyc2VyLiBEbyBub3QgYWxsb3cgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNl
IHVubGlrZSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoKS4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IHN0YXRpYyBib29sIHRvSW50KGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBwYXJzZVN0YXJ0LCB1bnNpZ25lZCBwYXJzZUxlbmd0aCwg
aW50JiBvdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9u
YWw8aW50PiBwYXJzZUludChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZm
ZXIsIHVuc2lnbmVkIG1heGltdW1OdW1iZXJPZkRpZ2l0c1RvUGFyc2UpCiB7Ci0gICAgaWYgKHBh
cnNlU3RhcnQgKyBwYXJzZUxlbmd0aCA+IGxlbmd0aCB8fCBwYXJzZUxlbmd0aCA8PSAwKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IHZhbHVlID0gMDsKLSAgICBhdXRvIGN1cnJlbnQg
PSBzcmMgKyBwYXJzZVN0YXJ0OwotICAgIGF1dG8gZW5kID0gY3VycmVudCArIHBhcnNlTGVuZ3Ro
OworICAgIGlmIChtYXhpbXVtTnVtYmVyT2ZEaWdpdHNUb1BhcnNlID4gYnVmZmVyLmxlbmd0aFJl
bWFpbmluZygpIHx8ICFtYXhpbXVtTnVtYmVyT2ZEaWdpdHNUb1BhcnNlKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgbmVnYXRp
dmUgbnVtYmVycyBmb3IgSVNPIDg2MDEuCi0gICAgZm9yICg7IGN1cnJlbnQgPCBlbmQ7ICsrY3Vy
cmVudCkgewotICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqY3VycmVudCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGludCBkaWdpdCA9ICpjdXJyZW50IC0gJzAnOworCisg
ICAgaW50IHZhbHVlID0gMDsKKyAgICB1bnNpZ25lZCBkaWdpdHNSZW1haW5pbmcgPSAwOworICAg
IHdoaWxlIChkaWdpdHNSZW1haW5pbmcgPCBtYXhpbXVtTnVtYmVyT2ZEaWdpdHNUb1BhcnNlKSB7
CisgICAgICAgIGlmICghaXNBU0NJSURpZ2l0KCpidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgaW50IGRpZ2l0ID0gKmJ1ZmZlciAtICcwJzsKICAgICAg
ICAgaWYgKHZhbHVlID4gKElOVF9NQVggLSBkaWdpdCkgLyAxMCkgLy8gQ2hlY2sgZm9yIG92ZXJm
bG93LgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDEwICsgZGlnaXQ7CisgICAgICAgICsr
ZGlnaXRzUmVtYWluaW5nOworICAgICAgICArK2J1ZmZlcjsKICAgICB9Ci0gICAgb3V0ID0gdmFs
dWU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8aW50PiBwYXJzZUludFdpdGhp
bkxpbWl0cyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIsIHVuc2ln
bmVkIG1heGltdW1OdW1iZXJPZkRpZ2l0c1RvUGFyc2UsIGludCBtaW5pbXVtVmFsdWUsIGludCBt
YXhpbXVtVmFsdWUpCit7CisgICAgYXV0byB2YWx1ZSA9IHBhcnNlSW50KGJ1ZmZlciwgbWF4aW11
bU51bWJlck9mRGlnaXRzVG9QYXJzZSk7CisgICAgaWYgKCEodmFsdWUgJiYgKnZhbHVlID49IG1p
bmltdW1WYWx1ZSAmJiAqdmFsdWUgPD0gbWF4aW11bVZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlWWVhcihjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBl
bmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRz
OjpwYXJzZVllYXIoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQog
ewotICAgIHVuc2lnbmVkIGRpZ2l0c0xlbmd0aCA9IGNvdW50RGlnaXRzKHNyYywgbGVuZ3RoLCBz
dGFydCk7CisgICAgdW5zaWduZWQgZGlnaXRzTGVuZ3RoID0gY291bnREaWdpdHMoYnVmZmVyKTsK
ICAgICAvLyBOZWVkcyBhdCBsZWFzdCA0IGRpZ2l0cyBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJk
LgogICAgIGlmIChkaWdpdHNMZW5ndGggPCA0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aW50IHllYXI7Ci0gICAgaWYgKCF0b0ludChzcmMsIGxlbmd0aCwgc3RhcnQsIGRpZ2l0c0xlbmd0
aCwgeWVhcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoeWVhciA8IG1pbmltdW1Z
ZWFyKCkgfHwgeWVhciA+IG1heGltdW1ZZWFyKCkpCisKKyAgICBhdXRvIHllYXIgPSBwYXJzZUlu
dFdpdGhpbkxpbWl0cyhidWZmZXIsIGRpZ2l0c0xlbmd0aCwgbWluaW11bVllYXIsIG1heGltdW1Z
ZWFyKTsKKyAgICBpZiAoIXllYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3llYXIg
PSB5ZWFyOwotICAgIGVuZCA9IHN0YXJ0ICsgZGlnaXRzTGVuZ3RoOworCisgICAgbV95ZWFyID0g
KnllYXI7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIHdpdGhpbkhUTUxEYXRl
TGltaXRzKGludCB5ZWFyLCBpbnQgbW9udGgpCiB7Ci0gICAgaWYgKHllYXIgPCBEYXRlQ29tcG9u
ZW50czo6bWluaW11bVllYXIoKSkKKyAgICBpZiAoeWVhciA8IG1pbmltdW1ZZWFyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHllYXIgPCBEYXRlQ29tcG9uZW50czo6bWF4aW11bVll
YXIoKSkKKyAgICBpZiAoeWVhciA8IG1heGltdW1ZZWFyKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICByZXR1cm4gbW9udGggPD0gbWF4aW11bU1vbnRoSW5NYXhpbXVtWWVhcjsKIH0KIAogc3Rh
dGljIGJvb2wgd2l0aGluSFRNTERhdGVMaW1pdHMoaW50IHllYXIsIGludCBtb250aCwgaW50IG1v
bnRoRGF5KQogewotICAgIGlmICh5ZWFyIDwgRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1ZZWFyKCkp
CisgICAgaWYgKHllYXIgPCBtaW5pbXVtWWVhcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICh5ZWFyIDwgRGF0ZUNvbXBvbmVudHM6Om1heGltdW1ZZWFyKCkpCisgICAgaWYgKHllYXIg
PCBtYXhpbXVtWWVhcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKG1vbnRoIDwgbWF4
aW11bU1vbnRoSW5NYXhpbXVtWWVhcikKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjYsOSAr
MTgxLDkgQEAgc3RhdGljIGJvb2wgd2l0aGluSFRNTERhdGVMaW1pdHMoaW50IHllYQogCiBzdGF0
aWMgYm9vbCB3aXRoaW5IVE1MRGF0ZUxpbWl0cyhpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgbW9u
dGhEYXksIGludCBob3VyLCBpbnQgbWludXRlLCBpbnQgc2Vjb25kLCBpbnQgbWlsbGlzZWNvbmQp
CiB7Ci0gICAgaWYgKHllYXIgPCBEYXRlQ29tcG9uZW50czo6bWluaW11bVllYXIoKSkKKyAgICBp
ZiAoeWVhciA8IG1pbmltdW1ZZWFyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHll
YXIgPCBEYXRlQ29tcG9uZW50czo6bWF4aW11bVllYXIoKSkKKyAgICBpZiAoeWVhciA8IG1heGlt
dW1ZZWFyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAobW9udGggPCBtYXhpbXVtTW9u
dGhJbk1heGltdW1ZZWFyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE4NSw1MiArMjAwLDQ2
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEY+IHN0YXRpYyBPcHRpb25hbDxEYXQKICAgICBpZiAoc291
cmNlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIERhdGVD
b21wb25lbnRzIHJlc3VsdDsKLSAgICB1bnNpZ25lZCBlbmQ7Ci0gICAgaWYgKHNvdXJjZS5pczhC
aXQoKSkgewotICAgICAgICBpZiAoIXBhcnNlRnVuY3Rpb24ocmVzdWx0LCBzb3VyY2UuY2hhcmFj
dGVyczgoKSwgc291cmNlLmxlbmd0aCgpLCBlbmQpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXBhcnNlRnVuY3Rpb24ocmVzdWx0
LCBzb3VyY2UuY2hhcmFjdGVyczE2KCksIHNvdXJjZS5sZW5ndGgoKSwgZW5kKSkKKyAgICByZXR1
cm4gcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHNvdXJjZSwgWyZdKGF1dG8gYnVmZmVyKSAtPiBP
cHRpb25hbDxEYXRlQ29tcG9uZW50cz4geworICAgICAgICBEYXRlQ29tcG9uZW50cyBkYXRlOwor
ICAgICAgICBpZiAoIXBhcnNlRnVuY3Rpb24oYnVmZmVyLCBkYXRlKSB8fCAhYnVmZmVyLmF0RW5k
KCkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIH0KLSAgICBpZiAoZW5k
ICE9IHNvdXJjZS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gZGF0ZTsKKyAgICB9KTsKIH0KIAogT3B0aW9u
YWw8RGF0ZUNvbXBvbmVudHM+IERhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ01vbnRoKFN0cmlu
Z1ZpZXcgc291cmNlKQogewotICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10g
KGF1dG8mIGRhdGUsIGNvbnN0IGF1dG8qIHNyYywgYXV0byBsZW5ndGgsIGF1dG8mIGVuZCkgewot
ICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZU1vbnRoKHNyYywgbGVuZ3RoLCAwLCBlbmQpOworICAg
IHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10gKGF1dG8mIGJ1ZmZlciwgYXV0byYg
ZGF0ZSkgeworICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZU1vbnRoKGJ1ZmZlcik7CiAgICAgfSk7
CiB9CiAKIE9wdGlvbmFsPERhdGVDb21wb25lbnRzPiBEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNp
bmdEYXRlKFN0cmluZ1ZpZXcgc291cmNlKQogewotICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5n
KHNvdXJjZSwgW10gKGF1dG8mIGRhdGUsIGNvbnN0IGF1dG8qIHNyYywgYXV0byBsZW5ndGgsIGF1
dG8mIGVuZCkgewotICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZURhdGUoc3JjLCBsZW5ndGgsIDAs
IGVuZCk7CisgICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgYnVm
ZmVyLCBhdXRvJiBkYXRlKSB7CisgICAgICAgIHJldHVybiBkYXRlLnBhcnNlRGF0ZShidWZmZXIp
OwogICAgIH0pOwogfQogCiBPcHRpb25hbDxEYXRlQ29tcG9uZW50cz4gRGF0ZUNvbXBvbmVudHM6
OmZyb21QYXJzaW5nV2VlayhTdHJpbmdWaWV3IHNvdXJjZSkKIHsKLSAgICByZXR1cm4gY3JlYXRl
RnJvbVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBkYXRlLCBjb25zdCBhdXRvKiBzcmMsIGF1dG8g
bGVuZ3RoLCBhdXRvJiBlbmQpIHsKLSAgICAgICAgcmV0dXJuIGRhdGUucGFyc2VXZWVrKHNyYywg
bGVuZ3RoLCAwLCBlbmQpOworICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10g
KGF1dG8mIGJ1ZmZlciwgYXV0byYgZGF0ZSkgeworICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZVdl
ZWsoYnVmZmVyKTsKICAgICB9KTsKIH0KIAogT3B0aW9uYWw8RGF0ZUNvbXBvbmVudHM+IERhdGVD
b21wb25lbnRzOjpmcm9tUGFyc2luZ1RpbWUoU3RyaW5nVmlldyBzb3VyY2UpCiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgZGF0ZSwgY29uc3QgYXV0byog
c3JjLCBhdXRvIGxlbmd0aCwgYXV0byYgZW5kKSB7Ci0gICAgICAgIHJldHVybiBkYXRlLnBhcnNl
VGltZShzcmMsIGxlbmd0aCwgMCwgZW5kKTsKKyAgICByZXR1cm4gY3JlYXRlRnJvbVN0cmluZyhz
b3VyY2UsIFtdIChhdXRvJiBidWZmZXIsIGF1dG8mIGRhdGUpIHsKKyAgICAgICAgcmV0dXJuIGRh
dGUucGFyc2VUaW1lKGJ1ZmZlcik7CiAgICAgfSk7CiB9CiAKIE9wdGlvbmFsPERhdGVDb21wb25l
bnRzPiBEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdEYXRlVGltZUxvY2FsKFN0cmluZ1ZpZXcg
c291cmNlKQogewotICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10gKGF1dG8m
IGRhdGUsIGNvbnN0IGF1dG8qIHNyYywgYXV0byBsZW5ndGgsIGF1dG8mIGVuZCkgewotICAgICAg
ICByZXR1cm4gZGF0ZS5wYXJzZURhdGVUaW1lTG9jYWwoc3JjLCBsZW5ndGgsIDAsIGVuZCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgYnVmZmVyLCBhdXRv
JiBkYXRlKSB7CisgICAgICAgIHJldHVybiBkYXRlLnBhcnNlRGF0ZVRpbWVMb2NhbChidWZmZXIp
OwogICAgIH0pOwogfQogCkBAIC0zMzcsMTk1ICszNDYsMTc4IEBAIGJvb2wgRGF0ZUNvbXBvbmVu
dHM6OmFkZE1pbnV0ZShpbnQgbWludXQKIH0KIAogLy8gUGFyc2VzIGEgdGltZXpvbmUgcGFydCwg
YW5kIGFkanVzdCB5ZWFyLCBtb250aCwgbW9udGhEYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBt
aWxsaXNlY29uZC4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNv
bXBvbmVudHM6OnBhcnNlVGltZVpvbmUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9uZW50czo6cGFyc2VUaW1lWm9uZShTdHJp
bmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7Ci0gICAgaWYgKHN0YXJ0
ID49IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIGluZGV4ID0g
c3RhcnQ7Ci0gICAgaWYgKHNyY1tpbmRleF0gPT0gJ1onKSB7Ci0gICAgICAgIGVuZCA9IGluZGV4
ICsgMTsKKyAgICBpZiAoc2tpcEV4YWN0bHkoYnVmZmVyLCAnWicpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9CiAKICAgICBib29sIG1pbnVzOwotICAgIGlmIChzcmNbaW5kZXhdID09ICcr
JykKKyAgICBpZiAoc2tpcEV4YWN0bHkoYnVmZmVyLCAnKycpKQogICAgICAgICBtaW51cyA9IGZh
bHNlOwotICAgIGVsc2UgaWYgKHNyY1tpbmRleF0gPT0gJy0nKQorICAgIGVsc2UgaWYgKHNraXBF
eGFjdGx5KGJ1ZmZlciwgJy0nKSkKICAgICAgICAgbWludXMgPSB0cnVlOwogICAgIGVsc2UKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7CiAKLSAgICBpbnQgaG91cjsKLSAgICBp
bnQgbWludXRlOwotICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBob3VyKSB8
fCBob3VyIDwgMCB8fCBob3VyID4gMjMpCisgICAgYXV0byBob3VyID0gcGFyc2VJbnRXaXRoaW5M
aW1pdHMoYnVmZmVyLCAyLCAwLCAyMyk7CisgICAgaWYgKCFob3VyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaW5kZXggKz0gMjsKIAotICAgIGlmIChpbmRleCA+PSBsZW5ndGggfHwgc3Jj
W2luZGV4XSAhPSAnOicpCisgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICc6JykpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4OwogCi0gICAgaWYgKCF0b0ludChzcmMsIGxl
bmd0aCwgaW5kZXgsIDIsIG1pbnV0ZSkgfHwgbWludXRlIDwgMCB8fCBtaW51dGUgPiA1OSkKKyAg
ICBhdXRvIG1pbnV0ZSA9IHBhcnNlSW50V2l0aGluTGltaXRzKGJ1ZmZlciwgMiwgMCwgNTkpOwor
ICAgIGlmICghbWludXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW5kZXggKz0gMjsK
IAogICAgIGlmIChtaW51cykgewotICAgICAgICBob3VyID0gLWhvdXI7Ci0gICAgICAgIG1pbnV0
ZSA9IC1taW51dGU7CisgICAgICAgICpob3VyID0gLSpob3VyOworICAgICAgICAqbWludXRlID0g
LSptaW51dGU7CiAgICAgfQogCiAgICAgLy8gU3VidHJhY3QgdGhlIHRpbWV6b25lIG9mZnNldC4K
LSAgICBpZiAoIWFkZE1pbnV0ZSgtKGhvdXIgKiA2MCArIG1pbnV0ZSkpKQorICAgIGlmICghYWRk
TWludXRlKC0oKmhvdXIgKiA2MCArICptaW51dGUpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGVuZCA9IGluZGV4OwogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZU1vbnRoKGNvbnN0IENo
YXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgRGF0ZUNvbXBv
bmVudHM6OnBhcnNlTW9udGgoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVm
ZmVyKQogewotICAgIEFTU0VSVChzcmMpOwotICAgIHVuc2lnbmVkIGluZGV4OwotICAgIGlmICgh
cGFyc2VZZWFyKHNyYywgbGVuZ3RoLCBzdGFydCwgaW5kZXgpKQorICAgIGlmICghcGFyc2VZZWFy
KGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3Ro
IHx8IHNyY1tpbmRleF0gIT0gJy0nKQorCisgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICct
JykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4OwogCi0gICAgaW50IG1vbnRo
OwotICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBtb250aCkgfHwgbW9udGgg
PCAxIHx8IG1vbnRoID4gMTIpCisgICAgYXV0byBtb250aCA9IHBhcnNlSW50V2l0aGluTGltaXRz
KGJ1ZmZlciwgMiwgMSwgMTIpOworICAgIGlmICghbW9udGgpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAtLW1vbnRoOwotICAgIGlmICghd2l0aGluSFRNTERhdGVMaW1pdHMobV95ZWFyLCBt
b250aCkpCisgICAgLS0qbW9udGg7CisKKyAgICBpZiAoIXdpdGhpbkhUTUxEYXRlTGltaXRzKG1f
eWVhciwgKm1vbnRoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbW9udGggPSBtb250
aDsKLSAgICBlbmQgPSBpbmRleCArIDI7CisKKyAgICBtX21vbnRoID0gKm1vbnRoOwogICAgIG1f
dHlwZSA9IE1vbnRoOwogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZURhdGUoY29uc3QgQ2hhcmFj
dGVyVHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYg
ZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9uZW50
czo6cGFyc2VEYXRlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikK
IHsKLSAgICBBU1NFUlQoc3JjKTsKLSAgICB1bnNpZ25lZCBpbmRleDsKLSAgICBpZiAoIXBhcnNl
TW9udGgoc3JjLCBsZW5ndGgsIHN0YXJ0LCBpbmRleCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAvLyAnLScgYW5kIDItZGlnaXRzIGFyZSBuZWVkZWQuCi0gICAgaWYgKGluZGV4ICsgMiA+
PSBsZW5ndGgpCisgICAgaWYgKCFwYXJzZU1vbnRoKGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoc3JjW2luZGV4XSAhPSAnLScpCisKKyAgICBpZiAoIXNraXBFeGFjdGx5
KGJ1ZmZlciwgJy0nKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7CiAKLSAg
ICBpbnQgZGF5OwotICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBkYXkpIHx8
IGRheSA8IDEgfHwgZGF5ID4gbWF4RGF5T2ZNb250aChtX3llYXIsIG1fbW9udGgpKQorICAgIGF1
dG8gZGF5ID0gcGFyc2VJbnRXaXRoaW5MaW1pdHMoYnVmZmVyLCAyLCAxLCBtYXhEYXlPZk1vbnRo
KG1feWVhciwgbV9tb250aCkpOworICAgIGlmICghZGF5KQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKCF3aXRoaW5IVE1MRGF0ZUxpbWl0cyhtX3llYXIsIG1fbW9udGgsIGRheSkpCisK
KyAgICBpZiAoIXdpdGhpbkhUTUxEYXRlTGltaXRzKG1feWVhciwgbV9tb250aCwgKmRheSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX21vbnRoRGF5ID0gZGF5OwotICAgIGVuZCA9IGlu
ZGV4ICsgMjsKKworICAgIG1fbW9udGhEYXkgPSAqZGF5OwogICAgIG1fdHlwZSA9IERhdGU7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJv
b2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlV2Vlayhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVu
c2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIERhdGVDb21wb25lbnRzOjpwYXJzZVdlZWsoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewotICAgIEFTU0VSVChz
cmMpOwotICAgIHVuc2lnbmVkIGluZGV4OwotICAgIGlmICghcGFyc2VZZWFyKHNyYywgbGVuZ3Ro
LCBzdGFydCwgaW5kZXgpKQorICAgIGlmICghcGFyc2VZZWFyKGJ1ZmZlcikpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIC8vIDQgY2hhcmFjdGVycyAoJy0nICdXJyBkaWdpdCBkaWdpdCkg
YXJlIG5lZWRlZC4KLSAgICBpZiAoaW5kZXggKyAzID49IGxlbmd0aCkKKyAgICBpZiAoIXNraXBF
eGFjdGx5KGJ1ZmZlciwgJy0nKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzcmNb
aW5kZXhdICE9ICctJykKKyAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJ1cnKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7Ci0gICAgaWYgKHNyY1tpbmRleF0gIT0gJ1cn
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKytpbmRleDsKIAotICAgIGludCB3ZWVrOwot
ICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCB3ZWVrKSB8fCB3ZWVrIDwgbWlu
aW11bVdlZWtOdW1iZXIgfHwgd2VlayA+IG1heFdlZWtOdW1iZXJJblllYXIoKSkKKyAgICBhdXRv
IHdlZWsgPSBwYXJzZUludFdpdGhpbkxpbWl0cyhidWZmZXIsIDIsIG1pbmltdW1XZWVrTnVtYmVy
LCBtYXhXZWVrTnVtYmVySW5ZZWFyKCkpOworICAgIGlmICghd2VlaykKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChtX3llYXIgPT0gbWF4aW11bVllYXIoKSAmJiB3ZWVrID4gbWF4aW11
bVdlZWtJbk1heGltdW1ZZWFyKQorCisgICAgaWYgKG1feWVhciA9PSBtYXhpbXVtWWVhciAmJiAq
d2VlayA+IG1heGltdW1XZWVrSW5NYXhpbXVtWWVhcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fd2VlayA9IHdlZWs7Ci0gICAgZW5kID0gaW5kZXggKyAyOworCisgICAgbV93ZWVrID0g
KndlZWs7CiAgICAgbV90eXBlID0gV2VlazsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9uZW50czo6cGFyc2VUaW1l
KGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wg
RGF0ZUNvbXBvbmVudHM6OnBhcnNlVGltZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5
cGU+JiBidWZmZXIpCiB7Ci0gICAgQVNTRVJUKHNyYyk7Ci0gICAgaW50IGhvdXI7Ci0gICAgaWYg
KCF0b0ludChzcmMsIGxlbmd0aCwgc3RhcnQsIDIsIGhvdXIpIHx8IGhvdXIgPCAwIHx8IGhvdXIg
PiAyMykKKyAgICBhdXRvIGhvdXIgPSBwYXJzZUludFdpdGhpbkxpbWl0cyhidWZmZXIsIDIsIDAs
IDIzKTsKKyAgICBpZiAoIWhvdXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25l
ZCBpbmRleCA9IHN0YXJ0ICsgMjsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNyY1tpbmRleF0gIT0gJzonKQorCisgICAgaWYgKCFza2lw
RXhhY3RseShidWZmZXIsICc6JykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4
OwogCi0gICAgaW50IG1pbnV0ZTsKLSAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBpbmRleCwg
MiwgbWludXRlKSB8fCBtaW51dGUgPCAwIHx8IG1pbnV0ZSA+IDU5KQorICAgIGF1dG8gbWludXRl
ID0gcGFyc2VJbnRXaXRoaW5MaW1pdHMoYnVmZmVyLCAyLCAwLCA1OSk7CisgICAgaWYgKCFtaW51
dGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbmRleCArPSAyOwogCi0gICAgaW50IHNl
Y29uZCA9IDA7Ci0gICAgaW50IG1pbGxpc2Vjb25kID0gMDsKICAgICAvLyBPcHRpb25hbCBzZWNv
bmQgcGFydC4KICAgICAvLyBEbyBub3QgcmV0dXJuIHdpdGggZmFsc2UgYmVjYXVzZSB0aGUgcGFy
dCBpcyBvcHRpb25hbC4KLSAgICBpZiAoaW5kZXggKyAyIDwgbGVuZ3RoICYmIHNyY1tpbmRleF0g
PT0gJzonKSB7Ci0gICAgICAgIGlmICh0b0ludChzcmMsIGxlbmd0aCwgaW5kZXggKyAxLCAyLCBz
ZWNvbmQpICYmIHNlY29uZCA+PSAwICYmIHNlY29uZCA8PSA1OSkgewotICAgICAgICAgICAgaW5k
ZXggKz0gMzsKKyAgICBPcHRpb25hbDxpbnQ+IHNlY29uZDsKKyAgICBPcHRpb25hbDxpbnQ+IG1p
bGxpc2Vjb25kOworCisgICAgYXV0byB0ZW1wb3JhcnlCdWZmZXIgPSBidWZmZXI7CisgICAgaWYg
KHNraXBFeGFjdGx5KHRlbXBvcmFyeUJ1ZmZlciwgJzonKSkgeworICAgICAgICBzZWNvbmQgPSBw
YXJzZUludFdpdGhpbkxpbWl0cyh0ZW1wb3JhcnlCdWZmZXIsIDIsIDAsIDU5KTsKKyAgICAgICAg
aWYgKHNlY29uZCkgeworICAgICAgICAgICAgLy8gT25seSBhZnRlciBzdWNjZXNzZnVsbHkgcGFy
c2luZyBhbmQgdmFsaWRhdGluZyAnc2Vjb25kJywgZG8gd2UgaW5jcmVtZW50IHRoZSByZWFsIGJ1
ZmZlci4KKyAgICAgICAgICAgIGJ1ZmZlciArPSB0ZW1wb3JhcnlCdWZmZXIucG9zaXRpb24oKSAt
IGJ1ZmZlci5wb3NpdGlvbigpOwogCiAgICAgICAgICAgICAvLyBPcHRpb25hbCBmcmFjdGlvbmFs
IHNlY29uZCBwYXJ0LgotICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIHNyY1tpbmRl
eF0gPT0gJy4nKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgZGlnaXRzTGVuZ3RoID0gY291
bnREaWdpdHMoc3JjLCBsZW5ndGgsIGluZGV4ICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKGRp
Z2l0c0xlbmd0aCA+ICAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAg
ICAgICAgICAgICAgIGJvb2wgb2s7CisgICAgICAgICAgICBpZiAoc2tpcEV4YWN0bHkodGVtcG9y
YXJ5QnVmZmVyLCAnLicpKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZGlnaXRzTGVuZ3Ro
ID0gY291bnREaWdpdHModGVtcG9yYXJ5QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBpZiAoZGln
aXRzTGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZGlnaXRzTGVuZ3RoID09
IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gdG9JbnQoc3JjLCBsZW5ndGgsIGlu
ZGV4LCAxLCBtaWxsaXNlY29uZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29u
ZCAqPSAxMDA7CisgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZCA9IHBhcnNlSW50
KHRlbXBvcmFyeUJ1ZmZlciwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAqbWlsbGlzZWNv
bmQgKj0gMTAwOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0c0xlbmd0aCA9
PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvayA9IHRvSW50KHNyYywgbGVuZ3RoLCBp
bmRleCwgMiwgbWlsbGlzZWNvbmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWNv
bmQgKj0gMTA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSAvLyBkaWdpdHNMZW5ndGggPj0g
MwotICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSB0b0ludChzcmMsIGxlbmd0aCwgaW5kZXgs
IDMsIG1pbGxpc2Vjb25kKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChvaywg
b2spOwotICAgICAgICAgICAgICAgICAgICBpbmRleCArPSBkaWdpdHNMZW5ndGg7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZCA9IHBhcnNlSW50KHRlbXBvcmFyeUJ1ZmZlciwg
Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAqbWlsbGlzZWNvbmQgKj0gMTA7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdhcmRs
ZXNzIG9mIHRoZSBudW1iZXIgb2YgZGlnaXRzLCB3ZSBvbmx5IGV2ZXIgcGFyc2UgYXQgbW9zdCAz
LiBBbGwgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpZ2l0cyBhZnRlciB0aGF0
IGFyZSBpZ25vcmVkLCBidXQgdGhlIGJ1ZmZlciBpcyBpbmNyZW1lbnRlZCBhcyBpZiB0aGV5IHdl
cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBwYXJzZWQuCisgICAgICAgICAgICAg
ICAgICAgICAgICBtaWxsaXNlY29uZCA9IHBhcnNlSW50KHRlbXBvcmFyeUJ1ZmZlciwgMyk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBEdWUgdG8gdGhl
IGNvdW50RGlnaXRzIGFib3ZlLCB0aGUgcGFyc2VJbnQgY2FsbHMgc2hvdWxkIGFsbCBiZSBzdWNj
ZXNzZnVsLgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQobWlsbGlzZWNvbmQpOworCisgICAg
ICAgICAgICAgICAgICAgIC8vIE9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBhcnNpbmcgYW5kIHZh
bGlkYXRpbmcgJ21pbGxpc2Vjb25kJywgZG8gd2UgaW5jcmVtZW50IHRoZSByZWFsIGJ1ZmZlci4K
KyAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IDEgKyBkaWdpdHNMZW5ndGg7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIG1faG91ciA9
IGhvdXI7Ci0gICAgbV9taW51dGUgPSBtaW51dGU7Ci0gICAgbV9zZWNvbmQgPSBzZWNvbmQ7Ci0g
ICAgbV9taWxsaXNlY29uZCA9IG1pbGxpc2Vjb25kOwotICAgIGVuZCA9IGluZGV4OworCisgICAg
bV9ob3VyID0gKmhvdXI7CisgICAgbV9taW51dGUgPSAqbWludXRlOworICAgIG1fc2Vjb25kID0g
c2Vjb25kLnZhbHVlT3IoMCk7CisgICAgbV9taWxsaXNlY29uZCA9IG1pbGxpc2Vjb25kLnZhbHVl
T3IoMCk7CiAgICAgbV90eXBlID0gVGltZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBEYXRlQ29tcG9uZW50czo6cGFyc2VEYXRl
VGltZUxvY2FsKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IGJvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlRGF0ZVRpbWVMb2NhbChTdHJpbmdQYXJzaW5n
QnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7Ci0gICAgQVNTRVJUKHNyYyk7Ci0gICAg
dW5zaWduZWQgaW5kZXg7Ci0gICAgaWYgKCFwYXJzZURhdGUoc3JjLCBsZW5ndGgsIHN0YXJ0LCBp
bmRleCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQor
ICAgIGlmICghcGFyc2VEYXRlKGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoc3JjW2luZGV4XSAhPSAnVCcpCisKKyAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJ1Qn
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7Ci0gICAgaWYgKCFwYXJzZVRp
bWUoc3JjLCBsZW5ndGgsIGluZGV4LCBlbmQpKQorCisgICAgaWYgKCFwYXJzZVRpbWUoYnVmZmVy
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCF3aXRoaW5IVE1MRGF0ZUxpbWl0
cyhtX3llYXIsIG1fbW9udGgsIG1fbW9udGhEYXksIG1faG91ciwgbV9taW51dGUsIG1fc2Vjb25k
LCBtX21pbGxpc2Vjb25kKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgbV90eXBlID0g
RGF0ZVRpbWVMb2NhbDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY2NCw3ICs2NTYsNyBAQCBi
b29sIERhdGVDb21wb25lbnRzOjpzZXRNb250aHNTaW5jZUVwb2NoCiAgICAgbW9udGhzID0gcm91
bmQobW9udGhzKTsKICAgICBkb3VibGUgZG91YmxlTW9udGggPSBwb3NpdGl2ZUZtb2QobW9udGhz
LCAxMik7CiAgICAgZG91YmxlIGRvdWJsZVllYXIgPSAxOTcwICsgKG1vbnRocyAtIGRvdWJsZU1v
bnRoKSAvIDEyOwotICAgIGlmIChkb3VibGVZZWFyIDwgbWluaW11bVllYXIoKSB8fCBtYXhpbXVt
WWVhcigpIDwgZG91YmxlWWVhcikKKyAgICBpZiAoZG91YmxlWWVhciA8IG1pbmltdW1ZZWFyIHx8
IG1heGltdW1ZZWFyIDwgZG91YmxlWWVhcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlu
dCB5ZWFyID0gc3RhdGljX2Nhc3Q8aW50Pihkb3VibGVZZWFyKTsKICAgICBpbnQgbW9udGggPSBz
dGF0aWNfY2FzdDxpbnQ+KGRvdWJsZU1vbnRoKTsKQEAgLTY5NCw3ICs2ODYsNyBAQCBib29sIERh
dGVDb21wb25lbnRzOjpzZXRNaWxsaXNlY29uZHNTaW5jCiAgICAgbXMgPSByb3VuZChtcyk7CiAK
ICAgICBtX3llYXIgPSBtc1RvWWVhcihtcyk7Ci0gICAgaWYgKG1feWVhciA8IG1pbmltdW1ZZWFy
KCkgfHwgbV95ZWFyID4gbWF4aW11bVllYXIoKSkKKyAgICBpZiAobV95ZWFyIDwgbWluaW11bVll
YXIgfHwgbV95ZWFyID4gbWF4aW11bVllYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGludCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCBtX3llYXIpOwpAQCAtNzAyLDcgKzY5NCw3IEBA
IGJvb2wgRGF0ZUNvbXBvbmVudHM6OnNldE1pbGxpc2Vjb25kc1NpbmMKICAgICBpZiAoeWVhckRh
eSA8IG9mZnNldCkgewogICAgICAgICAvLyBUaGUgZGF5IGJlbG9uZ3MgdG8gdGhlIGxhc3Qgd2Vl
ayBvZiB0aGUgcHJldmlvdXMgeWVhci4KICAgICAgICAgbV95ZWFyLS07Ci0gICAgICAgIGlmICht
X3llYXIgPD0gbWluaW11bVllYXIoKSkKKyAgICAgICAgaWYgKG1feWVhciA8PSBtaW5pbXVtWWVh
cikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbV93ZWVrID0gbWF4V2Vla051
bWJlckluWWVhcigpOwogICAgIH0gZWxzZSB7CkBAIC03MTEsNyArNzAzLDcgQEAgYm9vbCBEYXRl
Q29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2luYwogICAgICAgICAgICAgbV95ZWFyKys7CiAg
ICAgICAgICAgICBtX3dlZWsgPSAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX3llYXIgPiBt
YXhpbXVtWWVhcigpIHx8IChtX3llYXIgPT0gbWF4aW11bVllYXIoKSAmJiBtX3dlZWsgPiBtYXhp
bXVtV2Vla0luTWF4aW11bVllYXIpKQorICAgICAgICBpZiAobV95ZWFyID4gbWF4aW11bVllYXIg
fHwgKG1feWVhciA9PSBtYXhpbXVtWWVhciAmJiBtX3dlZWsgPiBtYXhpbXVtV2Vla0luTWF4aW11
bVllYXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBtX3R5cGUgPSBX
ZWVrOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oCShyZXZp
c2lvbiAyNjUwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsMjUgKzEzNywxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBpbmxpbmUgZG91YmxlIG1heGltdW1UaW1lKCkgeyByZXR1cm4gODYzOTk5OTk7
IH0gLy8gMjM6NTk6NTkuOTk5CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbmxpbmUgZG91YmxlIG1h
eGltdW1XZWVrKCkgeyByZXR1cm4gODYzOTk5OTU2ODAwMDAwMC4wOyB9IC8vIDI3NTc2MC0wOS0w
OCwgdGhlIE1vbmRheSBvZiB0aGUgd2VlayBpbmNsdWRpbmcgMjc1NzYwLTA5LTEzLgogCi0gICAg
Ly8gSFRNTDUgdXNlcyBJU08tODYwMSBmb3JtYXQgd2l0aCB5ZWFyID49IDEuIEdyZWdvcmlhbiBj
YWxlbmRhciBzdGFydGVkIGluCi0gICAgLy8gMTU4Mi4gSG93ZXZlciwgd2UgbmVlZCB0byBzdXBw
b3J0IDAwMDEtMDEtMDEgaW4gR3JlZ29yaWFuIGNhbGVuZGFyIHJ1bGUuCi0gICAgc3RhdGljIGlu
bGluZSBpbnQgbWluaW11bVllYXIoKSB7IHJldHVybiAxOyB9Ci0KLSAgICAvLyBEYXRlIGluIEVD
TUFTY3JpcHQgY2FuJ3QgcmVwcmVzZW50IGRhdGVzIGxhdGVyIHRoYW4gMjc1NzYwLTA5LTEzVDAw
OjAwWi4KLSAgICAvLyBTbywgd2UgaGF2ZSB0aGUgc2FtZSB1cHBlciBsaW1pdCBpbiBIVE1MNSBk
YXRlL3RpbWUgdHlwZXMuCi0gICAgc3RhdGljIGlubGluZSBpbnQgbWF4aW11bVllYXIoKSB7IHJl
dHVybiAyNzU3NjA7IH0KLQotICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVdlZWtOdW1iZXI7
Ci0gICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtV2Vla051bWJlcjsKLQogcHJpdmF0ZToKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlTW9udGgoY29uc3Qg
Q2hhcmFjdGVyVHlwZSogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCYgZW5kKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBh
cnNlRGF0ZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGJvb2wgcGFyc2VXZWVrKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQg
bGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVRpbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSog
c3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKTsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlRGF0ZVRpbWVMb2Nh
bChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkJiBlbmQpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGJvb2wgcGFyc2VZZWFyKGNvbnN0IENoYXJhY3RlclR5cGUqIHNyYywgdW5zaWduZWQgbGVuZ3Ro
LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVRpbWVab25lKGNvbnN0IENoYXJhY3RlclR5cGUqIHNy
YywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVllYXIoU3RyaW5nUGFy
c2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IGJvb2wgcGFyc2VUaW1lWm9uZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3Rl
clR5cGU+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJz
ZU1vbnRoKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlRGF0ZShTdHJpbmdQYXJzaW5nQnVm
ZmVyPENoYXJhY3RlclR5cGU+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gYm9vbCBwYXJzZVdlZWsoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VUaW1lKFN0cmlu
Z1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlRGF0ZVRpbWVMb2NhbChTdHJpbmdQYXJzaW5nQnVmZmVy
PENoYXJhY3RlclR5cGU+Jik7CiAKICAgICAvLyBUaGUgZm9sbG93aW5nIHNldE1pbGxpc2Vjb25k
c1NpbmNlRXBvY2hGb3IqKCkgZnVuY3Rpb25zIHRha2UKICAgICAvLyB0aGUgbnVtYmVyIG9mIG1p
bGxpc2Vjb25kcyBzaW5jZSAxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMCBVVEMgYXMK
</data>

          </attachment>
      

    </bug>

</bugzilla>