<?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>167087</bug_id>
          
          <creation_ts>2017-01-15 21:11:03 -0800</creation_ts>
          <short_desc>Add the ability to use numbers in makeString()</short_desc>
          <delta_ts>2023-05-09 13:30:11 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>180720</blocked>
    
    <blocked>256164</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>joepeck</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1267088</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-15 21:11:03 -0800</bug_when>
    <thetext>Add the ability to use numbers in makeString()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1267089</commentid>
    <comment_count>1</comment_count>
      <attachid>298936</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-15 21:16:36 -0800</bug_when>
    <thetext>Created attachment 298936
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1267090</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-15 21:18:37 -0800</bug_when>
    <thetext>I like the direction of this, but I am not sure I have nailed the ergonomics of the API quite yet, especially the FormattedNumber part, which feels clunky, but I wanted to put it up for discussion anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1267091</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-15 21:21:08 -0800</bug_when>
    <thetext>I put the new adaptors in their own file because I was having a lot of trouble making it work in the main one. StringConcatenate.h is an odd puppy, with it&apos;s explicit #ifndef header guard checks. Ideally, this would all be in one file. The issue came down to dtoa.h causing some circular dependancies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1267106</commentid>
    <comment_count>4</comment_count>
      <attachid>298936</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-01-16 01:04:21 -0800</bug_when>
    <thetext>Comment on attachment 298936
Patch

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

Nice that you tested everything thoroughly, but where is the deployment at all the places using String::number today?

&gt; Source/WTF/wtf/text/AtomicString.h:366
&gt; +    typedef AtomicString ReturnType;
&gt; +    typedef void AdditionalArgumentType;

Newer code, so should start switching from typedef to using.

&gt; Source/WTF/wtf/text/IntegerToStringConversion.h:68
&gt; +static void writeNumberToBufferImpl(UnsignedIntegerType number, CharacterType* destination)

I always go out of my way to avoid &quot;impl&quot; in names like this. We should struggle a bit more.

&gt; Source/WTF/wtf/text/StringBuilder.h:374
&gt; +    typedef void ReturnType;
&gt; +    typedef StringBuilder AdditionalArgumentType;

Newer code, so should start switching from typedef to using.

&gt; Source/WTF/wtf/text/StringConcatenateNumbers.h:88
&gt; +        StringView(reinterpret_cast&lt;const LChar*&gt;(m_buffer), m_length).getCharactersWithUpconvert(destination);

This just looks like a long way to write memcpy.

&gt; Source/WTF/wtf/text/StringConcatenateNumbers.h:93
&gt; +        StringView(reinterpret_cast&lt;const LChar*&gt;(m_buffer), m_length).getCharactersWithUpconvert(destination);

Annoying to call a function that handles both 8-bit and 16-bit when we know our source is always 8-bit.

&gt; Source/WTF/wtf/text/StringConcatenateNumbers.h:96
&gt; +    String toString() const { return String(m_buffer, m_length); }

String { } syntax instead of String()?

&gt; Source/WTF/wtf/text/StringConcatenateNumbers.h:110
&gt; +    StringTypeAdapter&lt;double&gt;(double number)
&gt; +    {
&gt; +        numberToString(number, m_buffer);
&gt; +        m_length = strlen(m_buffer);
&gt; +    }

This should share a base class with StringTypeAdapter&lt;float&gt;. The constructor is the only function that is different.

&gt; Source/WTF/wtf/text/StringConcatenateNumbers.h:117
&gt; +        StringView(reinterpret_cast&lt;const LChar*&gt;(m_buffer), m_length).getCharactersWithUpconvert(destination);

Ditto.

&gt; Source/WTF/wtf/text/StringConcatenateNumbers.h:122
&gt; +        StringView(reinterpret_cast&lt;const LChar*&gt;(m_buffer), m_length).getCharactersWithUpconvert(destination);

Ditto.

&gt; Source/WTF/wtf/text/StringConcatenateNumbers.h:125
&gt; +    String toString() const { return String(m_buffer, m_length); }

Ditto.

&gt; Source/WTF/wtf/text/StringConcatenateNumbers.h:173
&gt; +        m_numberFormatter.stringView().getCharactersWithUpconvert(destination);

Ditto (same comment as in float and double).

&gt; Source/WTF/wtf/text/StringConcatenateNumbers.h:178
&gt; +        m_numberFormatter.stringView().getCharactersWithUpconvert(destination);

Ditto.

&gt; Source/WTF/wtf/text/StringConcatenateNumbers.h:181
&gt; +    String toString() const { return String(m_numberFormatter.buffer(), m_numberFormatter.length()); }

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1267225</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-16 14:25:04 -0800</bug_when>
    <thetext>Committed r210790: &lt;http://trac.webkit.org/changeset/210790&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1267294</commentid>
    <comment_count>6</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-01-16 20:24:58 -0800</bug_when>
    <thetext>Neat!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298936</attachid>
            <date>2017-01-15 21:16:36 -0800</date>
            <delta_ts>2017-01-16 01:04:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167087-20170115211452.patch</filename>
            <type>text/plain</type>
            <size>32347</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMTA3NDEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDE3LTAxLTE1ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgQWRkIHRoZSBhYmlsaXR5IHRvIHVzZSBudW1iZXJzIGluIG1h
a2VTdHJpbmcoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY3MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWxsb3cgbnVtYmVycyB0byBiZSBlYXNpbHkgdXNlZCBpbiBtYWtlU3RyaW5nKCkgYW5kIHRy
eU1ha2VTdHJpbmcoKS4KKworICAgICAgICBGb3IgaW5zdGFuY2UsIHlvdSBjYW4gbm93IHdyaXRl
OgorICAgICAgICAgICAgaW50IGFtb3VudCA9IDc7CisgICAgICAgICAgICBhdXRvIGZvbyA9IG1h
a2VTdHJpbmcoIlRoZXJlIGFyZSAiLCBhbW91bnQsICIgYXBwbGVzIGluIHRoZSBjYXJ0Iik7CisK
KyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIG5l
dyBmaWxlLgorCisgICAgICAgICogd3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5o
OgorICAgICAgICAoV1RGOjp3cml0ZU51bWJlclRvQnVmZmVySW1wbCk6CisgICAgICAgIChXVEY6
OndyaXRlTnVtYmVyVG9CdWZmZXJTaWduZWQpOgorICAgICAgICAoV1RGOjp3cml0ZU51bWJlclRv
QnVmZmVyVW5zaWduZWQpOgorICAgICAgICAoV1RGOjpsZW5ndGhPZk51bWJlckFzU3RyaW5nSW1w
bCk6CisgICAgICAgIChXVEY6Omxlbmd0aE9mTnVtYmVyQXNTdHJpbmdTaWduZWQpOgorICAgICAg
ICAoV1RGOjpsZW5ndGhPZk51bWJlckFzU3RyaW5nVW5zaWduZWQpOgorICAgICAgICBBZGQgdmFy
aWFudHMgb2YgaW50ZWdlciB3cml0aW5nIGNvZGUgdGhhdCBjb21wdXRlIHRoZSBsZW5ndGggb2Yg
dGhlIHN0cmluZworICAgICAgICB0aGF0IHdvdWxkIGJlIHByb2R1Y2VkIGFuZCB3cml0ZXMgdGhl
IHN0cmluZyB0byBhbiBleGlzdGluZyBidWZmZXIuCisKKyAgICAgICAgKFdURjo6SW50ZWdlclRv
U3RyaW5nQ29udmVyc2lvblRyYWl0PEF0b21pY1N0cmluZz46OmZsdXNoKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6SW50ZWdlclRvU3RyaW5nQ29udmVyc2lvblRyYWl0PFN0cmluZz46OmZsdXNo
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50ZWdlclRvU3RyaW5nQ29udmVyc2lvblRyYWl0
PFN0cmluZ0J1aWxkZXI+OjpmbHVzaCk6IERlbGV0ZWQuCisgICAgICAgIE1vdmUgdGhlc2UgdHJh
aXRzIHRvIHRoZWlyIHJlc3BlY3RpdmUgY2xhc3Nlcy4KKworICAgICAgICAqIHd0Zi90ZXh0L0F0
b21pY1N0cmluZy5oOgorICAgICAgICAoV1RGOjpJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uVHJh
aXQ8QXRvbWljU3RyaW5nPjo6Zmx1c2gpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaDoKKyAgICAgICAgKFdURjo6SW50ZWdlclRvU3RyaW5nQ29udmVyc2lvblRyYWl0PFN0cmlu
Z0J1aWxkZXI+OjpmbHVzaCk6CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAg
ICAgIChXVEY6OkludGVnZXJUb1N0cmluZ0NvbnZlcnNpb25UcmFpdDxTdHJpbmc+OjpmbHVzaCk6
CisgICAgICAgIFRyYWl0cyBtb3ZlZCBoZXJlIGZyb20gSW50ZWdlclRvU3RyaW5nQ29udmVyc2lv
bi5oCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaDogQWRk
ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPGludD46OlN0cmluZ1R5cGVBZGFw
dGVyPGludD4pOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxpbnQ+OjpsZW5ndGgp
OgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxpbnQ+OjppczhCaXQpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxpbnQ+Ojp3cml0ZVRvKToKKyAgICAgICAgKFdURjo6
U3RyaW5nVHlwZUFkYXB0ZXI8aW50Pjo6dG9TdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJpbmdU
eXBlQWRhcHRlcjx1bnNpZ25lZD46OlN0cmluZ1R5cGVBZGFwdGVyPHVuc2lnbmVkPik6CisgICAg
ICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPHVuc2lnbmVkPjo6bGVuZ3RoKToKKyAgICAgICAg
KFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8dW5zaWduZWQ+OjppczhCaXQpOgorICAgICAgICAoV1RG
OjpTdHJpbmdUeXBlQWRhcHRlcjx1bnNpZ25lZD46OndyaXRlVG8pOgorICAgICAgICAoV1RGOjpT
dHJpbmdUeXBlQWRhcHRlcjx1bnNpZ25lZD46OnRvU3RyaW5nKToKKyAgICAgICAgKFdURjo6U3Ry
aW5nVHlwZUFkYXB0ZXI8ZmxvYXQ+OjpTdHJpbmdUeXBlQWRhcHRlcjxmbG9hdD4pOgorICAgICAg
ICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxmbG9hdD46Omxlbmd0aCk6CisgICAgICAgIChXVEY6
OlN0cmluZ1R5cGVBZGFwdGVyPGZsb2F0Pjo6aXM4Qml0KToKKyAgICAgICAgKFdURjo6U3RyaW5n
VHlwZUFkYXB0ZXI8ZmxvYXQ+Ojp3cml0ZVRvKToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFk
YXB0ZXI8ZmxvYXQ+Ojp0b1N0cmluZyk6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVy
PGRvdWJsZT46OlN0cmluZ1R5cGVBZGFwdGVyPGRvdWJsZT4pOgorICAgICAgICAoV1RGOjpTdHJp
bmdUeXBlQWRhcHRlcjxkb3VibGU+OjpsZW5ndGgpOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBl
QWRhcHRlcjxkb3VibGU+OjppczhCaXQpOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRl
cjxkb3VibGU+Ojp3cml0ZVRvKToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8ZG91
YmxlPjo6dG9TdHJpbmcpOgorICAgICAgICBBZGQgYmFzaWMgYWRhcHRvcnMgZm9yIGludCwgdW5z
aWduZWQsIGZsb2F0LCBhbmQgZG91YmxlLgorCisgICAgICAgIChXVEY6OkZvcm1hdHRlZE51bWJl
cjo6Zml4ZWRQcmVjaXNpb24pOgorICAgICAgICAoV1RGOjpGb3JtYXR0ZWROdW1iZXI6OmZpeGVk
V2lkdGgpOgorICAgICAgICAoV1RGOjpGb3JtYXR0ZWROdW1iZXI6Omxlbmd0aCk6CisgICAgICAg
IChXVEY6OkZvcm1hdHRlZE51bWJlcjo6YnVmZmVyKToKKyAgICAgICAgKFdURjo6Rm9ybWF0dGVk
TnVtYmVyOjpzdHJpbmdWaWV3KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8Rm9y
bWF0dGVkTnVtYmVyPjo6U3RyaW5nVHlwZUFkYXB0ZXI8Rm9ybWF0dGVkTnVtYmVyPik6CisgICAg
ICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPEZvcm1hdHRlZE51bWJlcj46Omxlbmd0aCk6Cisg
ICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPEZvcm1hdHRlZE51bWJlcj46OmlzOEJpdCk6
CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPEZvcm1hdHRlZE51bWJlcj46OndyaXRl
VG8pOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxGb3JtYXR0ZWROdW1iZXI+Ojp0
b1N0cmluZyk6CisgICAgICAgIEFkZCBhIHNwZWNpYWwgY2xhc3MsIEZvcm1hdHRlZE51bWJlciwg
YW5kIGFuIGFkYXB0b3IgZm9yIGl0LCBhbGxvd2luZyBmb3IKKyAgICAgICAgZml4ZWRQcmVjaXNp
b24gYW5kIGZpeGVkV2lkdGggcmVwcmVzZW50YXRpb24gb2YgZG91Ymxlcy4KKwogMjAxNy0wMS0x
MiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIEltcGxl
bWVudCBzdXBwb3J0IGZvciBLZXlib2FyZEV2ZW50LmNvZGUKSW5kZXg6IFNvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjEwNzQxKQorKysgU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDYg
KzE0OCw3IEBACiAJCTdDM0Y3MjNBMUQ3ODgxMUEwMDY3NEUyNiAvKiBCcmlnYW5kLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNGNzIzOTFENzg4MTE5
MDA2NzRFMjYgLyogQnJpZ2FuZC5oICovOyB9OwogCQk3Q0JCQTA3NDE5QkI3RkRDMDBCQkYwMjUg
LyogT1NPYmplY3RQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDQkJBMDczMTlCQjdGREMwMEJCRjAyNSAvKiBPU09iamVjdFB0ci5oICovOyB9Owog
CQk3Q0QwRDVBOTFENTUzNEE3MDAwQ0M5RTEgLyogVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NEMEQ1QTcxRDU1MzIyQTAwMENDOUUxIC8q
IFZhcmlhbnQuaCAqLzsgfTsKKwkJN0NENEMyNzAxRTJDODJCOTAwOTI5NDcwIC8qIFN0cmluZ0Nv
bmNhdGVuYXRlTnVtYmVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0NENEMyNkYxRTJDODJCOTAwOTI5NDcwIC8qIFN0cmluZ0NvbmNhdGVuYXRlTnVt
YmVycy5oICovOyB9OwogCQk3Q0REN0ZGODE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFw
dG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NE
RDdGRjcxODZEMjkxRTAwNzQzM0NEIC8qIEl0ZXJhdG9yQWRhcHRvcnMuaCAqLzsgfTsKIAkJN0NE
RDdGRkExODZEMkE1NDAwNzQzM0NEIC8qIEl0ZXJhdG9yUmFuZ2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDREQ3RkY5MTg2RDJBNTQwMDc0MzNDRCAv
KiBJdGVyYXRvclJhbmdlLmggKi87IH07CiAJCTdFMjlDMzNFMTVGRkQ3OUIwMDUxNkQ2MSAvKiBP
YmpjUnVudGltZUV4dHJhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0UyOUMzM0QxNUZGRDc5QjAwNTE2RDYxIC8qIE9iamNSdW50aW1lRXh0cmFzLmgg
Ki87IH07CkBAIC01MjUsNiArNTI2LDcgQEAKIAkJN0MzRjcyMzkxRDc4ODExOTAwNjc0RTI2IC8q
IEJyaWdhbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnJpZ2FuZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0JCQTA3MzE5QkI3RkRDMDBCQkYwMjUgLyog
T1NPYmplY3RQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NPYmplY3RQ
dHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NEMEQ1QTcxRDU1MzIyQTAwMEND
OUUxIC8qIFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0Q0QzI2RjFFMkM4MkI5MDA5Mjk0
NzAgLyogU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3Q0REN0ZGNzE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9ycy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJdGVyYXRvckFkYXB0b3JzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDREQ3RkY5MTg2RDJBNTQwMDc0MzNDRCAvKiBJ
dGVyYXRvclJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEl0ZXJhdG9y
UmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0UyOUMzM0QxNUZGRDc5QjAw
NTE2RDYxIC8qIE9iamNSdW50aW1lRXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE9iamNSdW50aW1lRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMjAyLDYgKzEyMDQsNyBAQAogCQkJCUE4QTQ3MzI1MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJp
bmdCdWlsZGVyLmggKi8sCiAJCQkJNDMwQjQ3ODcxQUFBQUMxQTAwMTIyM0RBIC8qIFN0cmluZ0Nv
bW1vbi5oICovLAogCQkJCUE4QTQ3MzI2MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdDb25jYXRl
bmF0ZS5oICovLAorCQkJCTdDRDRDMjZGMUUyQzgyQjkwMDkyOTQ3MCAvKiBTdHJpbmdDb25jYXRl
bmF0ZU51bWJlcnMuaCAqLywKIAkJCQlBOEE0NzMyNzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5n
SGFzaC5oICovLAogCQkJCUE4QTQ3MzI4MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBsLmNw
cCAqLywKIAkJCQlBOEE0NzMyOTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5oICovLApA
QCAtMTMzMSw2ICsxMzM0LDcgQEAKIAkJCQkxQTQyOEI4QzFDOEY4OUREMDA1MUU5RUIgLyogQXBw
S2l0Q29tcGF0aWJpbGl0eURlY2xhcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDcz
ODUxNTFBODI1QjAwNDEyM0ZGIC8qIEFTQ0lJQ1R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3NDM0MTUxQTgyNUIwMDQxMjNGRiAvKiBBU0NJSUZhc3RQYXRoLmggaW4gSGVhZGVycyAqLywK
KwkJCQk3Q0Q0QzI3MDFFMkM4MkI5MDA5Mjk0NzAgLyogU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM4NzE1MUE4MjVCMDA0MTIzRkYgLyogQXNzZXJ0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczODgxNTFBODI1QjAwNDEyM0ZGIC8qIEF0
b21pY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDM2MTUxQTgyNUIwMDQxMjNGRiAvKiBB
dG9taWNTdHJpbmcuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9B
dG9taWNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0
cmluZy5oCShyZXZpc2lvbiAyMTA3NDEpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0
cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlIDx1dGls
aXR5PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIC8vIERlZmluZSAnTk9fSU1QTElDSVRfQVRPTUlDU1RSSU5HJyBiZWZv
cmUgaW5jbHVkaW5nIHRoaXMgaGVhZGVyLApAQCAtMzYwLDYgKzM2MSwxMiBAQCBpbmxpbmUgYm9v
bCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0CiAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UoYS5zdHJpbmcoKSwgYik7CiB9CiAKK3RlbXBsYXRlPD4gc3RydWN0IEludGVnZXJU
b1N0cmluZ0NvbnZlcnNpb25UcmFpdDxBdG9taWNTdHJpbmc+IHsKKyAgICB0eXBlZGVmIEF0b21p
Y1N0cmluZyBSZXR1cm5UeXBlOworICAgIHR5cGVkZWYgdm9pZCBBZGRpdGlvbmFsQXJndW1lbnRU
eXBlOworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGZsdXNoKExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgsIHZvaWQqKSB7IHJldHVybiBBdG9taWNTdHJpbmcoY2hhcmFjdGVycywgbGVu
Z3RoKTsgfQorfTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNpZm5kZWYgQVRPTUlDU1RSSU5H
X0hJREVfR0xPQkFMUwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9JbnRlZ2VyVG9TdHJpbmdD
b252ZXJzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9JbnRlZ2VyVG9T
dHJpbmdDb252ZXJzaW9uLmgJKHJldmlzaW9uIDIxMDc0MSkKKysrIFNvdXJjZS9XVEYvd3RmL3Rl
eHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsy
Miw2IEBACiAjaWZuZGVmIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb25faAogI2RlZmluZSBJbnRl
Z2VyVG9TdHJpbmdDb252ZXJzaW9uX2gKIAotI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKLQog
bmFtZXNwYWNlIFdURiB7CiAKIGVudW0gUG9zaXRpdmVPck5lZ2F0aXZlTnVtYmVyIHsKQEAgLTMz
LDIyICszMSw2IEBAIGVudW0gUG9zaXRpdmVPck5lZ2F0aXZlTnVtYmVyIHsKIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb25UcmFpdDsKIAotdGVt
cGxhdGU8PiBzdHJ1Y3QgSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvblRyYWl0PEF0b21pY1N0cmlu
Zz4gewotICAgIHR5cGVkZWYgQXRvbWljU3RyaW5nIFJldHVyblR5cGU7Ci0gICAgdHlwZWRlZiB2
b2lkIEFkZGl0aW9uYWxBcmd1bWVudFR5cGU7Ci0gICAgc3RhdGljIFJldHVyblR5cGUgZmx1c2go
TENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdm9pZCopIHsgcmV0dXJuIEF0b21p
Y1N0cmluZyhjaGFyYWN0ZXJzLCBsZW5ndGgpOyB9Ci19OwotdGVtcGxhdGU8PiBzdHJ1Y3QgSW50
ZWdlclRvU3RyaW5nQ29udmVyc2lvblRyYWl0PFN0cmluZz4gewotICAgIHR5cGVkZWYgU3RyaW5n
IFJldHVyblR5cGU7Ci0gICAgdHlwZWRlZiB2b2lkIEFkZGl0aW9uYWxBcmd1bWVudFR5cGU7Ci0g
ICAgc3RhdGljIFJldHVyblR5cGUgZmx1c2goTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCwgdm9pZCopIHsgcmV0dXJuIFN0cmluZyhjaGFyYWN0ZXJzLCBsZW5ndGgpOyB9Ci19Owot
dGVtcGxhdGU8PiBzdHJ1Y3QgSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvblRyYWl0PFN0cmluZ0J1
aWxkZXI+IHsKLSAgICB0eXBlZGVmIHZvaWQgUmV0dXJuVHlwZTsKLSAgICB0eXBlZGVmIFN0cmlu
Z0J1aWxkZXIgQWRkaXRpb25hbEFyZ3VtZW50VHlwZTsKLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBm
bHVzaChMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBTdHJpbmdCdWlsZGVyKiBz
dHJpbmdCdWlsZGVyKSB7IHN0cmluZ0J1aWxkZXItPmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgp
OyB9Ci19OwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVbnNpZ25lZEludGVnZXJU
eXBlLCBQb3NpdGl2ZU9yTmVnYXRpdmVOdW1iZXIgTnVtYmVyVHlwZSwgdHlwZW5hbWUgQWRkaXRp
b25hbEFyZ3VtZW50VHlwZT4KIHN0YXRpYyB0eXBlbmFtZSBJbnRlZ2VyVG9TdHJpbmdDb252ZXJz
aW9uVHJhaXQ8VD46OlJldHVyblR5cGUgbnVtYmVyVG9TdHJpbmdJbXBsKFVuc2lnbmVkSW50ZWdl
clR5cGUgbnVtYmVyLCBBZGRpdGlvbmFsQXJndW1lbnRUeXBlIGFkZGl0aW9uYWxBcmd1bWVudCkK
IHsKQEAgLTgxLDYgKzYzLDcyIEBAIGlubGluZSB0eXBlbmFtZSBJbnRlZ2VyVG9TdHJpbmdDb252
ZXJzaW8KICAgICByZXR1cm4gbnVtYmVyVG9TdHJpbmdJbXBsPFQsIFVuc2lnbmVkSW50ZWdlclR5
cGUsIFBvc2l0aXZlTnVtYmVyPihudW1iZXIsIGFkZGl0aW9uYWxBcmd1bWVudCk7CiB9CiAKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVW5zaWduZWRJbnRlZ2Vy
VHlwZSwgUG9zaXRpdmVPck5lZ2F0aXZlTnVtYmVyIE51bWJlclR5cGU+CitzdGF0aWMgdm9pZCB3
cml0ZU51bWJlclRvQnVmZmVySW1wbChVbnNpZ25lZEludGVnZXJUeXBlIG51bWJlciwgQ2hhcmFj
dGVyVHlwZSogZGVzdGluYXRpb24pCit7CisgICAgTENoYXIgYnVmW3NpemVvZihVbnNpZ25lZElu
dGVnZXJUeXBlKSAqIDMgKyAxXTsKKyAgICBMQ2hhciogZW5kID0gYnVmICsgV1RGX0FSUkFZX0xF
TkdUSChidWYpOworICAgIExDaGFyKiBwID0gZW5kOworCisgICAgZG8geworICAgICAgICAqLS1w
ID0gc3RhdGljX2Nhc3Q8TENoYXI+KChudW1iZXIgJSAxMCkgKyAnMCcpOworICAgICAgICBudW1i
ZXIgLz0gMTA7CisgICAgfSB3aGlsZSAobnVtYmVyKTsKKworICAgIGlmIChOdW1iZXJUeXBlID09
IE5lZ2F0aXZlTnVtYmVyKQorICAgICAgICAqLS1wID0gJy0nOworICAgIAorICAgIHdoaWxlIChw
IDwgZW5kKQorICAgICAgICAqZGVzdGluYXRpb24rKyA9IHN0YXRpY19jYXN0PENoYXJhY3RlclR5
cGU+KCpwKyspOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFt
ZSBTaWduZWRJbnRlZ2VyVHlwZT4KK2lubGluZSB2b2lkIHdyaXRlTnVtYmVyVG9CdWZmZXJTaWdu
ZWQoU2lnbmVkSW50ZWdlclR5cGUgbnVtYmVyLCBDaGFyYWN0ZXJUeXBlKiBkZXN0aW5hdGlvbikK
K3sKKyAgICBpZiAobnVtYmVyIDwgMCkKKyAgICAgICAgcmV0dXJuIHdyaXRlTnVtYmVyVG9CdWZm
ZXJJbXBsPENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxTaWduZWRJ
bnRlZ2VyVHlwZT46OnR5cGUsIE5lZ2F0aXZlTnVtYmVyPigtbnVtYmVyLCBkZXN0aW5hdGlvbik7
CisgICAgcmV0dXJuIHdyaXRlTnVtYmVyVG9CdWZmZXJJbXBsPENoYXJhY3RlclR5cGUsIHR5cGVu
YW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxTaWduZWRJbnRlZ2VyVHlwZT46OnR5cGUsIFBvc2l0aXZl
TnVtYmVyPihudW1iZXIsIGRlc3RpbmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZSwgdHlwZW5hbWUgVW5zaWduZWRJbnRlZ2VyVHlwZT4KK2lubGluZSB2b2lkIHdy
aXRlTnVtYmVyVG9CdWZmZXJVbnNpZ25lZChVbnNpZ25lZEludGVnZXJUeXBlIG51bWJlciwgQ2hh
cmFjdGVyVHlwZSogZGVzdGluYXRpb24pCit7CisgICAgcmV0dXJuIHdyaXRlTnVtYmVyVG9CdWZm
ZXJJbXBsPENoYXJhY3RlclR5cGUsIFVuc2lnbmVkSW50ZWdlclR5cGUsIFBvc2l0aXZlTnVtYmVy
PihudW1iZXIsIGRlc3RpbmF0aW9uKTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBVbnNpZ25l
ZEludGVnZXJUeXBlLCBQb3NpdGl2ZU9yTmVnYXRpdmVOdW1iZXIgTnVtYmVyVHlwZT4KK3N0YXRp
YyB1bnNpZ25lZCBsZW5ndGhPZk51bWJlckFzU3RyaW5nSW1wbChVbnNpZ25lZEludGVnZXJUeXBl
IG51bWJlcikKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworCisgICAgZG8geworICAgICAg
ICArK2xlbmd0aDsKKyAgICAgICAgbnVtYmVyIC89IDEwOworICAgIH0gd2hpbGUgKG51bWJlcik7
CisKKyAgICBpZiAoTnVtYmVyVHlwZSA9PSBOZWdhdGl2ZU51bWJlcikKKyAgICAgICAgKytsZW5n
dGg7CisKKyAgICByZXR1cm4gbGVuZ3RoOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTaWduZWRJ
bnRlZ2VyVHlwZT4KK2lubGluZSB1bnNpZ25lZCBsZW5ndGhPZk51bWJlckFzU3RyaW5nU2lnbmVk
KFNpZ25lZEludGVnZXJUeXBlIG51bWJlcikKK3sKKyAgICBpZiAobnVtYmVyIDwgMCkKKyAgICAg
ICAgcmV0dXJuIGxlbmd0aE9mTnVtYmVyQXNTdHJpbmdJbXBsPHR5cGVuYW1lIHN0ZDo6bWFrZV91
bnNpZ25lZDxTaWduZWRJbnRlZ2VyVHlwZT46OnR5cGUsIE5lZ2F0aXZlTnVtYmVyPigtbnVtYmVy
KTsKKyAgICByZXR1cm4gbGVuZ3RoT2ZOdW1iZXJBc1N0cmluZ0ltcGw8dHlwZW5hbWUgc3RkOjpt
YWtlX3Vuc2lnbmVkPFNpZ25lZEludGVnZXJUeXBlPjo6dHlwZSwgUG9zaXRpdmVOdW1iZXI+KG51
bWJlcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFVuc2lnbmVkSW50ZWdlclR5cGU+Citpbmxp
bmUgdW5zaWduZWQgbGVuZ3RoT2ZOdW1iZXJBc1N0cmluZ1Vuc2lnbmVkKFVuc2lnbmVkSW50ZWdl
clR5cGUgbnVtYmVyKQoreworICAgIHJldHVybiBsZW5ndGhPZk51bWJlckFzU3RyaW5nSW1wbDxV
bnNpZ25lZEludGVnZXJUeXBlLCBQb3NpdGl2ZU51bWJlcj4obnVtYmVyKTsKK30KKworCiB9IC8v
IG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb25faApJ
bmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgJKHJldmlzaW9uIDIxMDc0MSkKKysr
IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAjZGVmaW5lIFN0cmluZ0J1aWxkZXJfaAogCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29u
dmVyc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMzY4LDYgKzM2OSwxMiBAQCBpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFN0cmluZ0J1aWxkCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nQnVpbGRlciYgYikgeyByZXR1cm4gZXF1YWwoYiwgYSk7
IH0KIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJpbmdC
dWlsZGVyJiBiKSB7IHJldHVybiAhZXF1YWwoYiwgYSk7IH0KIAordGVtcGxhdGU8PiBzdHJ1Y3Qg
SW50ZWdlclRvU3RyaW5nQ29udmVyc2lvblRyYWl0PFN0cmluZ0J1aWxkZXI+IHsKKyAgICB0eXBl
ZGVmIHZvaWQgUmV0dXJuVHlwZTsKKyAgICB0eXBlZGVmIFN0cmluZ0J1aWxkZXIgQWRkaXRpb25h
bEFyZ3VtZW50VHlwZTsKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBmbHVzaChMQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoLCBTdHJpbmdCdWlsZGVyKiBzdHJpbmdCdWlsZGVyKSB7IHN0
cmluZ0J1aWxkZXItPmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgpOyB9Cit9OworCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpTdHJpbmdCdWlsZGVyOwpJbmRleDogU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPHd0Zi9kdG9hLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5n
Q29udmVyc2lvbi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+CitjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxp
bnQ+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcjxpbnQ+KGludCBudW1iZXIpCisg
ICAgICAgIDogbV9udW1iZXIobnVtYmVyKQorICAgIHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBs
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBsZW5ndGhPZk51bWJlckFzU3RyaW5nU2lnbmVkKG1fbnVt
YmVyKTsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
dm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QgeyB3cml0ZU51bWJlclRvQnVm
ZmVyU2lnbmVkKG1fbnVtYmVyLCBkZXN0aW5hdGlvbik7IH0KKyAgICB2b2lkIHdyaXRlVG8oVUNo
YXIqIGRlc3RpbmF0aW9uKSBjb25zdCB7IHdyaXRlTnVtYmVyVG9CdWZmZXJTaWduZWQobV9udW1i
ZXIsIGRlc3RpbmF0aW9uKTsgfQorCisgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gU3RyaW5nOjpudW1iZXIobV9udW1iZXIpOyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fbnVt
YmVyOworfTsKKwordGVtcGxhdGU8PgorY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8dW5zaWduZWQ+
IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcjx1bnNpZ25lZD4odW5zaWduZWQgbnVt
YmVyKQorICAgICAgICA6IG1fbnVtYmVyKG51bWJlcikKKyAgICB7CisgICAgfQorCisgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbGVuZ3RoT2ZOdW1iZXJBc1N0cmluZ1Vuc2ln
bmVkKG1fbnVtYmVyKTsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QgeyB3cml0ZU51
bWJlclRvQnVmZmVyVW5zaWduZWQobV9udW1iZXIsIGRlc3RpbmF0aW9uKTsgfQorICAgIHZvaWQg
d3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0IHsgd3JpdGVOdW1iZXJUb0J1ZmZlclVu
c2lnbmVkKG1fbnVtYmVyLCBkZXN0aW5hdGlvbik7IH0KKworICAgIFN0cmluZyB0b1N0cmluZygp
IGNvbnN0IHsgcmV0dXJuIFN0cmluZzo6bnVtYmVyKG1fbnVtYmVyKTsgfQorCitwcml2YXRlOgor
ICAgIHVuc2lnbmVkIG1fbnVtYmVyOworfTsKKwordGVtcGxhdGU8PgorY2xhc3MgU3RyaW5nVHlw
ZUFkYXB0ZXI8ZmxvYXQ+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcjxmbG9hdD4o
ZmxvYXQgbnVtYmVyKQorICAgIHsKKyAgICAgICAgbnVtYmVyVG9TdHJpbmcobnVtYmVyLCBtX2J1
ZmZlcik7CisgICAgICAgIG1fbGVuZ3RoID0gc3RybGVuKG1fYnVmZmVyKTsKKyAgICB9CisKKyAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIGJvb2wg
aXM4Qml0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdm9pZCB3cml0ZVRvKExDaGFy
KiBkZXN0aW5hdGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZ1ZpZXcocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KG1fYnVmZmVyKSwgbV9sZW5ndGgpLmdldENoYXJhY3RlcnNX
aXRoVXBjb252ZXJ0KGRlc3RpbmF0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHdyaXRlVG8oVUNo
YXIqIGRlc3RpbmF0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgU3RyaW5nVmlldyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4obV9idWZmZXIpLCBtX2xlbmd0aCkuZ2V0Q2hhcmFjdGVy
c1dpdGhVcGNvbnZlcnQoZGVzdGluYXRpb24pOworICAgIH0KKworICAgIFN0cmluZyB0b1N0cmlu
ZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZyhtX2J1ZmZlciwgbV9sZW5ndGgpOyB9CisKK3ByaXZh
dGU6CisgICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgbV9idWZmZXI7CisgICAgdW5zaWduZWQgbV9s
ZW5ndGg7Cit9OworCit0ZW1wbGF0ZTw+CitjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxkb3VibGU+
IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcjxkb3VibGU+KGRvdWJsZSBudW1iZXIp
CisgICAgeworICAgICAgICBudW1iZXJUb1N0cmluZyhudW1iZXIsIG1fYnVmZmVyKTsKKyAgICAg
ICAgbV9sZW5ndGggPSBzdHJsZW4obV9idWZmZXIpOworICAgIH0KKworICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgYm9vbCBpczhCaXQoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9u
KSBjb25zdAorICAgIHsKKyAgICAgICAgU3RyaW5nVmlldyhyZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4obV9idWZmZXIpLCBtX2xlbmd0aCkuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQo
ZGVzdGluYXRpb24pOworICAgIH0KKworICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRp
b24pIGNvbnN0CisgICAgeworICAgICAgICBTdHJpbmdWaWV3KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPihtX2J1ZmZlciksIG1fbGVuZ3RoKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVy
dChkZXN0aW5hdGlvbik7CisgICAgfQorCisgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gU3RyaW5nKG1fYnVmZmVyLCBtX2xlbmd0aCk7IH0KKworcHJpdmF0ZToKKyAgICBOdW1i
ZXJUb1N0cmluZ0J1ZmZlciBtX2J1ZmZlcjsKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsKK307CisK
K2NsYXNzIEZvcm1hdHRlZE51bWJlciB7CitwdWJsaWM6CisgICAgc3RhdGljIEZvcm1hdHRlZE51
bWJlciBmaXhlZFByZWNpc2lvbihkb3VibGUgbnVtYmVyLCB1bnNpZ25lZCBzaWduaWZpY2FudEZp
Z3VyZXMgPSA2LCBib29sIHRydW5jYXRlVHJhaWxpbmdaZXJvcyA9IGZhbHNlKQorICAgIHsKKyAg
ICAgICAgRm9ybWF0dGVkTnVtYmVyIG51bWJlckZvcm1hdHRlcjsKKyAgICAgICAgbnVtYmVyVG9G
aXhlZFByZWNpc2lvblN0cmluZyhudW1iZXIsIHNpZ25pZmljYW50RmlndXJlcywgbnVtYmVyRm9y
bWF0dGVyLm1fYnVmZmVyLCB0cnVuY2F0ZVRyYWlsaW5nWmVyb3MpOworICAgICAgICBudW1iZXJG
b3JtYXR0ZXIubV9sZW5ndGggPSBzdHJsZW4obnVtYmVyRm9ybWF0dGVyLm1fYnVmZmVyKTsKKyAg
ICAgICAgcmV0dXJuIG51bWJlckZvcm1hdHRlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgRm9ybWF0
dGVkTnVtYmVyIGZpeGVkV2lkdGgoZG91YmxlIG51bWJlciwgdW5zaWduZWQgZGVjaW1hbFBsYWNl
cykKKyAgICB7CisgICAgICAgIEZvcm1hdHRlZE51bWJlciBudW1iZXJGb3JtYXR0ZXI7CisgICAg
ICAgIG51bWJlclRvRml4ZWRXaWR0aFN0cmluZyhudW1iZXIsIGRlY2ltYWxQbGFjZXMsIG51bWJl
ckZvcm1hdHRlci5tX2J1ZmZlcik7CisgICAgICAgIG51bWJlckZvcm1hdHRlci5tX2xlbmd0aCA9
IHN0cmxlbihudW1iZXJGb3JtYXR0ZXIubV9idWZmZXIpOworICAgICAgICByZXR1cm4gbnVtYmVy
Rm9ybWF0dGVyOworICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGVuZ3RoOyB9CisgICAgY29uc3QgTENoYXIqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihtX2J1ZmZlcik7IH0KKworICAgIFN0cmluZ1Zp
ZXcgc3RyaW5nVmlldygpIGNvbnN0IHsgcmV0dXJuIHsgYnVmZmVyKCksIG1fbGVuZ3RoIH07IH0K
KworcHJpdmF0ZToKKyAgICBOdW1iZXJUb1N0cmluZ0J1ZmZlciBtX2J1ZmZlcjsKKyAgICB1bnNp
Z25lZCBtX2xlbmd0aDsKK307CisKK3RlbXBsYXRlPD4KK2NsYXNzIFN0cmluZ1R5cGVBZGFwdGVy
PEZvcm1hdHRlZE51bWJlcj4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyPEZvcm1h
dHRlZE51bWJlcj4oY29uc3QgRm9ybWF0dGVkTnVtYmVyJiBudW1iZXJGb3JtYXR0ZXIpCisgICAg
ICAgIDogbV9udW1iZXJGb3JtYXR0ZXIobnVtYmVyRm9ybWF0dGVyKQorICAgIHsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX251bWJlckZvcm1hdHRlci5s
ZW5ndGgoKTsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKKyAgICB7CisgICAgICAg
IG1fbnVtYmVyRm9ybWF0dGVyLnN0cmluZ1ZpZXcoKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVy
dChkZXN0aW5hdGlvbik7CisgICAgfQorCisgICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5h
dGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIG1fbnVtYmVyRm9ybWF0dGVyLnN0cmluZ1ZpZXco
KS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkZXN0aW5hdGlvbik7CisgICAgfQorCisgICAg
U3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKG1fbnVtYmVyRm9ybWF0dGVy
LmJ1ZmZlcigpLCBtX251bWJlckZvcm1hdHRlci5sZW5ndGgoKSk7IH0KKworcHJpdmF0ZToKKyAg
ICBjb25zdCBGb3JtYXR0ZWROdW1iZXImIG1fbnVtYmVyRm9ybWF0dGVyOworfTsKKworfQorCit1
c2luZyBXVEY6OkZvcm1hdHRlZE51bWJlcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RG
U3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAko
cmV2aXNpb24gMjEwNzQxKQorKysgU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogLy8gb24gc3lzdGVtcyB3aXRob3V0IGNhc2Ut
c2Vuc2l0aXZlIGZpbGUgc3lzdGVtcy4KIAogI2luY2x1ZGUgPHd0Zi90ZXh0L0FTQ0lJRmFzdFBh
dGguaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiAjaWZkZWYgX19PQkpDX18KQEAgLTcx
Myw2ICs3MTQsMTIgQEAgdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBpbmxpbmUgYm9vbCBzdAog
ICAgIHJldHVybiBzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZy5pbXBs
KCksIGxvd2VyY2FzZUxldHRlcnMpOwogfQogCit0ZW1wbGF0ZTw+IHN0cnVjdCBJbnRlZ2VyVG9T
dHJpbmdDb252ZXJzaW9uVHJhaXQ8U3RyaW5nPiB7CisgICAgdHlwZWRlZiBTdHJpbmcgUmV0dXJu
VHlwZTsKKyAgICB0eXBlZGVmIHZvaWQgQWRkaXRpb25hbEFyZ3VtZW50VHlwZTsKKyAgICBzdGF0
aWMgUmV0dXJuVHlwZSBmbHVzaChMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB2
b2lkKikgeyByZXR1cm4gU3RyaW5nKGNoYXJhY3RlcnMsIGxlbmd0aCk7IH0KK307CisKIH0KIAog
dXNpbmcgV1RGOjpDU3RyaW5nOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwNzg0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMDEtMTUgIFNhbSBXZWluaWcgIDxz
YW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgdGhlIGFiaWxpdHkgdG8gdXNlIG51bWJlcnMg
aW4gbWFrZVN0cmluZygpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjcwODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0NvbmNhdGVu
YXRlLmNwcDogQWRkZWQuCisgICAgICAgIEFkZCB0ZXN0cyBmb3IgU3RyaW5nQ29uY2F0ZW5hdGUs
IGZvY3VzaW5nIG9uIG5ldyBudW1lcmljIGFkZGl0aW9ucy4KKwogMjAxNy0wMS0xNSAgTWljaGFl
bCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcmVtb3ZlIHN0YWxlIGNvbW1lbnQuCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjEwNzQxKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQyNSw2ICs0MjUsNyBAQAog
CQk3Q0NFN0YyRDFBNDExQjEwMDA0NDdDNEMgLyogVXNlckNvbnRlbnRUZXN0Lm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjk0M0JFODQxNjFERkVCODAw
OTk5RTNEIC8qIFVzZXJDb250ZW50VGVzdC5tbSAqLzsgfTsKIAkJN0NDRTdGMkUxQTQxMUIxMDAw
NDQ3QzRDIC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBUZXN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzQzRDN0QxNDU4N0FBNjAwMjVGQjYyIC8q
IFdLQnJvd3NpbmdDb250ZXh0R3JvdXBUZXN0Lm1tICovOyB9OwogCQk3Q0NFN0YyRjFBNDExQjEw
MDA0NDdDNEMgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVUZXN0Lm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzQzRDNzAxNDU3NUI2QTAw
MjVGQjYyIC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlVGVzdC5tbSAqLzsgfTsKKwkJ
N0NENEMyNkUxRTJDMEU2RTAwOTI5NDcwIC8qIFN0cmluZ0NvbmNhdGVuYXRlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDRDMjZDMUUyQzBFNkUw
MDkyOTQ3MCAvKiBTdHJpbmdDb25jYXRlbmF0ZS5jcHAgKi87IH07CiAJCTdDRUZBOTY2MUFDMEI5
RTIwMEI5MTBGRCAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFRkE5NjQxQUMwQjlFMjAwQjkx
MEZEIC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi87IH07CiAJCTdDRkJDQUU1
MTc0MzIzOEYwMEIyQkZDRiAvKiBXaWxsTG9hZF9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGQkNBRTMxNzQzMjM4RTAwQjJCRkNGIC8q
IFdpbGxMb2FkX0J1bmRsZS5jcHAgKi87IH07CiAJCTgzNDlEM0MyMURCOTZEREUwMDRBOUY2NSAv
KiBDb250ZXh0TWVudURvd25sb2FkLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODM0OUQzQzExREI5NkREQTAwNEE5RjY1IC8qIENvbnRleHRNZW51RG93
bmxvYWQubW0gKi87IH07CkBAIC0xMDc3LDYgKzEwNzgsNyBAQAogCQk3Q0NFN0U4QzFBNDExNDRF
MDA0NDdDNEMgLyogbGliVGVzdFdlYktpdEFQSS5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBh
dGggPSBsaWJUZXN0V2ViS2l0QVBJLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTdDQ0U3RUEzMUE0MTE1Q0IwMDQ0N0M0QyAvKiBUZXN0V2ViS2l0QVBJTGlicmFyeS54
Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueGNjb25maWc7IHBhdGggPSBUZXN0V2ViS2l0QVBJTGlicmFyeS54Y2NvbmZpZzsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NEMEQ1QUExRDU1MzRERTAwMENDOUUxIC8qIFZh
cmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRDRDMjZDMUUyQzBFNkUwMDkyOTQ3
MCAvKiBTdHJpbmdDb25jYXRlbmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTdHJpbmdDb25jYXRlbmF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDRUZBOTY0MUFDMEI5RTIwMEI5MTBGRCAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NG
QkNBREQxNzQzMjM0RjAwQjJCRkNGIC8qIFdpbGxMb2FkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdpbGxMb2FkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0NGQkNBRTMxNzQzMjM4RTAwQjJCRkNGIC8qIFdpbGxMb2FkX0J1bmRsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaWxsTG9hZF9CdW5kbGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg3Niw3ICsxODc4LDYgQEAKIAkJQkM5MDk2
NDYxMjU1NjE4OTAwMDgzNzU2IC8qIFdURiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJQUQ3QzQzNEMxREQyQTU0NzAwMjY4ODhCIC8qIEV4cGVjdGVkLmNw
cCAqLywKIAkJCQlDMDk5MUM0RjE0M0M3RDY4MDA3OTk4RjIgLyogY2YgKi8sCiAJCQkJN0NCQkEw
NzUxOUJCOEEwOTAwQkJGMDI1IC8qIGRhcndpbiAqLywKIAkJCQlCQzAyOUIxQTE0ODZCMjM4MDA4
MTdEQTkgLyogbnMgKi8sCkBAIC0xODkxLDYgKzE4OTIsNyBAQAogCQkJCTFBMzUyNEE5MUQ2MjdC
RDQwMDMxNzI5QiAvKiBEZWxldGVkQWRkcmVzc09mT3BlcmF0b3IuaCAqLywKIAkJCQlFNEE3NTdE
MzE3OEFFQTVCMDBCNUQ3QTQgLyogRGVxdWUuY3BwICovLAogCQkJCTFBRjdCMjFEMUQ2Q0QxMkUw
MDhDMTI2QyAvKiBFbnVtVHJhaXRzLmNwcCAqLywKKwkJCQlBRDdDNDM0QzFERDJBNTQ3MDAyNjg4
OEIgLyogRXhwZWN0ZWQuY3BwICovLAogCQkJCTdBMzhEN0U1MUM3NTJENUYwMDRGMTU3RCAvKiBI
YXNoQ291bnRlZFNldC5jcHAgKi8sCiAJCQkJMEJDRDgzMzQxNDg1N0NFNDAwRUEyMDAzIC8qIEhh
c2hNYXAuY3BwICovLAogCQkJCTI2QjJERkY4MTVCREU1OTkwMDRGNjkxRCAvKiBIYXNoU2V0LmNw
cCAqLywKQEAgLTE5MTgsNiArMTkyMCw3IEBACiAJCQkJREM2OUFBNjIxQ0Y3N0M2NTAwQzYyNzJG
IC8qIFNjb3BlZExhbWJkYS5jcHAgKi8sCiAJCQkJQ0Q1MzkzQzkxNzU3QkFDNDAwQzA3MTIzIC8q
IFNIQTEuY3BwICovLAogCQkJCTgxQjUwMTkyMTQwRjIzMjMwMEQ5RUI1OCAvKiBTdHJpbmdCdWls
ZGVyLmNwcCAqLywKKwkJCQk3Q0Q0QzI2QzFFMkMwRTZFMDA5Mjk0NzAgLyogU3RyaW5nQ29uY2F0
ZW5hdGUuY3BwICovLAogCQkJCTkzQUJBODA4MTZEREFCOTEwMDJEQjJGQSAvKiBTdHJpbmdIYXNo
ZXIuY3BwICovLAogCQkJCTI2RjFCNDQzMTVDQTQzNEYwMEQxRTRCRiAvKiBTdHJpbmdJbXBsLmNw
cCAqLywKIAkJCQlDMDEzNjNDNzEzQzM5OTczMDBFRjM5NjQgLyogU3RyaW5nT3BlcmF0b3JzLmNw
cCAqLywKQEAgLTI0MTcsNiArMjQyMCw3IEBACiAJCQkJMUFGN0IyMUYxRDZDRDE0RDAwOEMxMjZD
IC8qIEVudW1UcmFpdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFRUYxRDBBNTkwQzAw
RkVCQ0YzIC8qIE1ENS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVGMTFEMEE1OTBDMDBG
RUJDRjMgLyogTWVkaWFUaW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDRDRDMjZFMUUyQzBF
NkUwMDkyOTQ3MCAvKiBTdHJpbmdDb25jYXRlbmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
QzgzREVGNjFEMEE1OTBDMDBGRUJDRjMgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3QzgzREVGRTFEMEE1OTBDMDBGRUJDRjMgLyogTmFrZWRQdHIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTMxQzFEOEUxREY4RUY3MjAwNkU5NzlGIC8qIExFQkRlY29kZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdD
b25jYXRlbmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvU3RyaW5nQ29uY2F0ZW5hdGUuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1N0cmluZ0NvbmNhdGVuYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIldURlN0cmluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNh
dGVuYXRlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+
CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworVEVTVChXVEYsIFN0cmluZ0NvbmNhdGVu
YXRlKQoreworICAgIEVYUEVDVF9FUSgiaGVsbG8gd29ybGQiLCBtYWtlU3RyaW5nKCJoZWxsbyIs
ICIgIiwgIndvcmxkIikpOworfQorCitURVNUKFdURiwgU3RyaW5nQ29uY2F0ZW5hdGVfSW50KQor
eworICAgIEVYUEVDVF9FUSg1dSwgV1RGOjpsZW5ndGhPZk51bWJlckFzU3RyaW5nU2lnbmVkKDE3
ODkwKSk7CisgICAgRVhQRUNUX0VRKCJoZWxsbyAxNzg5MCB3b3JsZCIsIG1ha2VTdHJpbmcoImhl
bGxvICIsIDE3ODkwICwgIiB3b3JsZCIpKTsKKworICAgIEVYUEVDVF9FUSg2dSwgV1RGOjpsZW5n
dGhPZk51bWJlckFzU3RyaW5nU2lnbmVkKC0xNzg5MCkpOworICAgIEVYUEVDVF9FUSgiaGVsbG8g
LTE3ODkwIHdvcmxkIiwgbWFrZVN0cmluZygiaGVsbG8gIiwgLTE3ODkwICwgIiB3b3JsZCIpKTsK
KworICAgIEVYUEVDVF9FUSgxdSwgV1RGOjpsZW5ndGhPZk51bWJlckFzU3RyaW5nU2lnbmVkKDAp
KTsKKyAgICBFWFBFQ1RfRVEoImhlbGxvIDAgd29ybGQiLCBtYWtlU3RyaW5nKCJoZWxsbyAiLCAw
ICwgIiB3b3JsZCIpKTsKK30KKworVEVTVChXVEYsIFN0cmluZ0NvbmNhdGVuYXRlX1Vuc2lnbmVk
KQoreworICAgIEVYUEVDVF9FUSg1dSwgV1RGOjpsZW5ndGhPZk51bWJlckFzU3RyaW5nVW5zaWdu
ZWQoMTc4OTB1KSk7CisgICAgRVhQRUNUX0VRKCJoZWxsbyAxNzg5MCB3b3JsZCIsIG1ha2VTdHJp
bmcoImhlbGxvICIsIDE3ODkwdSAsICIgd29ybGQiKSk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIFdU
Rjo6bGVuZ3RoT2ZOdW1iZXJBc1N0cmluZ1NpZ25lZCgwdSkpOworICAgIEVYUEVDVF9FUSgiaGVs
bG8gMCB3b3JsZCIsIG1ha2VTdHJpbmcoImhlbGxvICIsIDB1ICwgIiB3b3JsZCIpKTsKK30KKwor
VEVTVChXVEYsIFN0cmluZ0NvbmNhdGVuYXRlX0Zsb2F0KQoreworICAgIEVYUEVDVF9FUSgiaGVs
bG8gMTc4OTAgd29ybGQiLCBtYWtlU3RyaW5nKCJoZWxsbyAiLCAxNzg5MC4wZiAsICIgd29ybGQi
KSk7CisgICAgRVhQRUNUX0VRKCJoZWxsbyAxNzg5MC41IHdvcmxkIiwgbWFrZVN0cmluZygiaGVs
bG8gIiwgMTc4OTAuNWYgLCAiIHdvcmxkIikpOworCisgICAgRVhQRUNUX0VRKCJoZWxsbyAtMTc4
OTAgd29ybGQiLCBtYWtlU3RyaW5nKCJoZWxsbyAiLCAtMTc4OTAuMGYgLCAiIHdvcmxkIikpOwor
ICAgIEVYUEVDVF9FUSgiaGVsbG8gLTE3ODkwLjUgd29ybGQiLCBtYWtlU3RyaW5nKCJoZWxsbyAi
LCAtMTc4OTAuNWYgLCAiIHdvcmxkIikpOworCisgICAgRVhQRUNUX0VRKCJoZWxsbyAwIHdvcmxk
IiwgbWFrZVN0cmluZygiaGVsbG8gIiwgMC4wZiAsICIgd29ybGQiKSk7Cit9CisKK1RFU1QoV1RG
LCBTdHJpbmdDb25jYXRlbmF0ZV9Eb3VibGUpCit7CisgICAgRVhQRUNUX0VRKCJoZWxsbyAxNzg5
MCB3b3JsZCIsIG1ha2VTdHJpbmcoImhlbGxvICIsIDE3ODkwLjAgLCAiIHdvcmxkIikpOworICAg
IEVYUEVDVF9FUSgiaGVsbG8gMTc4OTAuNSB3b3JsZCIsIG1ha2VTdHJpbmcoImhlbGxvICIsIDE3
ODkwLjUgLCAiIHdvcmxkIikpOworCisgICAgRVhQRUNUX0VRKCJoZWxsbyAtMTc4OTAgd29ybGQi
LCBtYWtlU3RyaW5nKCJoZWxsbyAiLCAtMTc4OTAuMCAsICIgd29ybGQiKSk7CisgICAgRVhQRUNU
X0VRKCJoZWxsbyAtMTc4OTAuNSB3b3JsZCIsIG1ha2VTdHJpbmcoImhlbGxvICIsIC0xNzg5MC41
ICwgIiB3b3JsZCIpKTsKKworICAgIEVYUEVDVF9FUSgiaGVsbG8gMCB3b3JsZCIsIG1ha2VTdHJp
bmcoImhlbGxvICIsIDAuMCAsICIgd29ybGQiKSk7Cit9CisKK1RFU1QoV1RGLCBTdHJpbmdDb25j
YXRlbmF0ZV9Gb3JtYXR0ZWREb3VibGVGaXhlZFByZWNpc2lvbikKK3sKKyAgICBFWFBFQ1RfRVEo
ImhlbGxvIDE3ODkwLjAgd29ybGQiLCBtYWtlU3RyaW5nKCJoZWxsbyAiLCBGb3JtYXR0ZWROdW1i
ZXI6OmZpeGVkUHJlY2lzaW9uKDE3ODkwLjApICwgIiB3b3JsZCIpKTsKKyAgICBFWFBFQ1RfRVEo
ImhlbGxvIDEuNzllKzQgd29ybGQiLCBtYWtlU3RyaW5nKCJoZWxsbyAiLCBGb3JtYXR0ZWROdW1i
ZXI6OmZpeGVkUHJlY2lzaW9uKDE3ODkwLjAsIDMpICwgIiB3b3JsZCIpKTsKKyAgICBFWFBFQ1Rf
RVEoImhlbGxvIDE3ODkwLjAwMCB3b3JsZCIsIG1ha2VTdHJpbmcoImhlbGxvICIsIEZvcm1hdHRl
ZE51bWJlcjo6Zml4ZWRQcmVjaXNpb24oMTc4OTAuMCwgOCkgLCAiIHdvcmxkIikpOworICAgIEVY
UEVDVF9FUSgiaGVsbG8gMTc4OTAgd29ybGQiLCBtYWtlU3RyaW5nKCJoZWxsbyAiLCBGb3JtYXR0
ZWROdW1iZXI6OmZpeGVkUHJlY2lzaW9uKDE3ODkwLjAsIDgsIHRydWUpICwgIiB3b3JsZCIpKTsK
KworICAgIEVYUEVDVF9FUSgiaGVsbG8gMTc4OTAuNSB3b3JsZCIsIG1ha2VTdHJpbmcoImhlbGxv
ICIsIEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRQcmVjaXNpb24oMTc4OTAuNSkgLCAiIHdvcmxkIikp
OworICAgIEVYUEVDVF9FUSgiaGVsbG8gMS43OWUrNCB3b3JsZCIsIG1ha2VTdHJpbmcoImhlbGxv
ICIsIEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRQcmVjaXNpb24oMTc4OTAuNSwgMykgLCAiIHdvcmxk
IikpOworICAgIEVYUEVDVF9FUSgiaGVsbG8gMTc4OTAuNTAwIHdvcmxkIiwgbWFrZVN0cmluZygi
aGVsbG8gIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFByZWNpc2lvbigxNzg5MC41LCA4KSAsICIg
d29ybGQiKSk7CisgICAgRVhQRUNUX0VRKCJoZWxsbyAxNzg5MC41IHdvcmxkIiwgbWFrZVN0cmlu
ZygiaGVsbG8gIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFByZWNpc2lvbigxNzg5MC41LCA4LCB0
cnVlKSAsICIgd29ybGQiKSk7CisKKyAgICBFWFBFQ1RfRVEoImhlbGxvIC0xNzg5MC4wIHdvcmxk
IiwgbWFrZVN0cmluZygiaGVsbG8gIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFByZWNpc2lvbigt
MTc4OTAuMCkgLCAiIHdvcmxkIikpOworICAgIEVYUEVDVF9FUSgiaGVsbG8gLTEuNzllKzQgd29y
bGQiLCBtYWtlU3RyaW5nKCJoZWxsbyAiLCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkUHJlY2lzaW9u
KC0xNzg5MC4wLCAzKSAsICIgd29ybGQiKSk7CisgICAgRVhQRUNUX0VRKCJoZWxsbyAtMTc4OTAu
MDAwIHdvcmxkIiwgbWFrZVN0cmluZygiaGVsbG8gIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFBy
ZWNpc2lvbigtMTc4OTAuMCwgOCkgLCAiIHdvcmxkIikpOworICAgIEVYUEVDVF9FUSgiaGVsbG8g
LTE3ODkwIHdvcmxkIiwgbWFrZVN0cmluZygiaGVsbG8gIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhl
ZFByZWNpc2lvbigtMTc4OTAuMCwgOCwgdHJ1ZSkgLCAiIHdvcmxkIikpOworCisgICAgRVhQRUNU
X0VRKCJoZWxsbyAtMTc4OTAuNSB3b3JsZCIsIG1ha2VTdHJpbmcoImhlbGxvICIsIEZvcm1hdHRl
ZE51bWJlcjo6Zml4ZWRQcmVjaXNpb24oLTE3ODkwLjUpICwgIiB3b3JsZCIpKTsKKyAgICBFWFBF
Q1RfRVEoImhlbGxvIC0xLjc5ZSs0IHdvcmxkIiwgbWFrZVN0cmluZygiaGVsbG8gIiwgRm9ybWF0
dGVkTnVtYmVyOjpmaXhlZFByZWNpc2lvbigtMTc4OTAuNSwgMykgLCAiIHdvcmxkIikpOworICAg
IEVYUEVDVF9FUSgiaGVsbG8gLTE3ODkwLjUwMCB3b3JsZCIsIG1ha2VTdHJpbmcoImhlbGxvICIs
IEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRQcmVjaXNpb24oLTE3ODkwLjUsIDgpICwgIiB3b3JsZCIp
KTsKKyAgICBFWFBFQ1RfRVEoImhlbGxvIC0xNzg5MC41IHdvcmxkIiwgbWFrZVN0cmluZygiaGVs
bG8gIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFByZWNpc2lvbigtMTc4OTAuNSwgOCwgdHJ1ZSkg
LCAiIHdvcmxkIikpOworCisgICAgRVhQRUNUX0VRKCJoZWxsbyAwLjAwMDAwIHdvcmxkIiwgbWFr
ZVN0cmluZygiaGVsbG8gIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFByZWNpc2lvbigwLjApICwg
IiB3b3JsZCIpKTsKKyAgICBFWFBFQ1RfRVEoImhlbGxvIDAuMDAgd29ybGQiLCBtYWtlU3RyaW5n
KCJoZWxsbyAiLCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkUHJlY2lzaW9uKDAuMCwgMykgLCAiIHdv
cmxkIikpOworICAgIEVYUEVDVF9FUSgiaGVsbG8gMC4wMDAwMDAwIHdvcmxkIiwgbWFrZVN0cmlu
ZygiaGVsbG8gIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFByZWNpc2lvbigwLjAsIDgpICwgIiB3
b3JsZCIpKTsKKyAgICBFWFBFQ1RfRVEoImhlbGxvIDAgd29ybGQiLCBtYWtlU3RyaW5nKCJoZWxs
byAiLCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkUHJlY2lzaW9uKDAuMCwgOCwgdHJ1ZSkgLCAiIHdv
cmxkIikpOworfQorCitURVNUKFdURiwgU3RyaW5nQ29uY2F0ZW5hdGVfRm9ybWF0dGVkRG91Ymxl
Rml4ZWRXaWR0aCkKK3sKKyAgICBFWFBFQ1RfRVEoImhlbGxvIDE3ODkwLjAwMCB3b3JsZCIsIG1h
a2VTdHJpbmcoImhlbGxvICIsIEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRXaWR0aCgxNzg5MC4wLCAz
KSAsICIgd29ybGQiKSk7CisgICAgRVhQRUNUX0VRKCJoZWxsbyAxNzg5MC41MDAgd29ybGQiLCBt
YWtlU3RyaW5nKCJoZWxsbyAiLCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgoMTc4OTAuNSwg
MykgLCAiIHdvcmxkIikpOworCisgICAgRVhQRUNUX0VRKCJoZWxsbyAtMTc4OTAuMDAwIHdvcmxk
IiwgbWFrZVN0cmluZygiaGVsbG8gIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRoKC0xNzg5
MC4wLCAzKSAsICIgd29ybGQiKSk7CisgICAgRVhQRUNUX0VRKCJoZWxsbyAtMTc4OTAuNTAwIHdv
cmxkIiwgbWFrZVN0cmluZygiaGVsbG8gIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRoKC0x
Nzg5MC41LCAzKSAsICIgd29ybGQiKSk7CisKKyAgICBFWFBFQ1RfRVEoImhlbGxvIDAuMDAwIHdv
cmxkIiwgbWFrZVN0cmluZygiaGVsbG8gIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRoKDAu
MCwgMykgLCAiIHdvcmxkIikpOworfQorCit9Cg==
</data>
<flag name="review"
          id="321002"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>