<?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>213588</bug_id>
          
          <creation_ts>2020-06-24 19:29:20 -0700</creation_ts>
          <short_desc>Add a new templated string type to help write more idiomatic parsing code</short_desc>
          <delta_ts>2020-06-25 17:22:28 -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>
          
          <blocked>213460</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>andersca</cc>
    
    <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1665960</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-24 19:29:20 -0700</bug_when>
    <thetext>Add a new templated string type to help write more idiomatic parsing code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665961</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-24 19:31:10 -0700</bug_when>
    <thetext>While working on https://bugs.webkit.org/show_bug.cgi?id=213460, it became clear having a typed string type that worked with our parsing idioms would be a nice code improvement. Breaking off that work into this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665963</commentid>
    <comment_count>2</comment_count>
      <attachid>402709</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-24 19:38:53 -0700</bug_when>
    <thetext>Created attachment 402709
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666082</commentid>
    <comment_count>3</comment_count>
      <attachid>402746</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-25 10:29:32 -0700</bug_when>
    <thetext>Created attachment 402746
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666095</commentid>
    <comment_count>4</comment_count>
      <attachid>402746</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-25 11:05:12 -0700</bug_when>
    <thetext>Comment on attachment 402746
Patch

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

I would prefer if there was at least one use going in with the class.

&gt; Source/WTF/wtf/text/StringParsingBuffer.h:42
&gt; +    constexpr StringParsingBuffer()
&gt; +    {
&gt; +    }

Maybe = default for this one?

&gt; Source/WTF/wtf/text/StringParsingBuffer.h:48
&gt; +    }

Maybe: ASSERT(characters || !length)

&gt; Source/WTF/wtf/text/StringParsingBuffer.h:54
&gt; +    }

ASSERT(!characters == !end) so we don’t pass a null by accident.

&gt; Source/WTF/wtf/text/StringParsingBuffer.h:57
&gt; +    constexpr const CharacterType* position() const { return m_position; }
&gt; +    constexpr const CharacterType* end() const { return m_end; }

Can these use auto instead of const CharacterType*?

&gt; Source/WTF/wtf/text/StringParsingBuffer.h:67
&gt; +        ASSERT(m_position + i &lt; m_end);

Also ASSERT(m_position &lt; m_end) to be overflow-proof?

&gt; Source/WTF/wtf/text/StringParsingBuffer.h:73
&gt; +        return *m_position;

ASSERT(m_position &lt; m_end);

&gt; Source/WTF/wtf/text/StringParsingBuffer.h:78
&gt; +        ++m_position;

ASSERT(m_position &lt; m_end);

&gt; Source/WTF/wtf/text/StringParsingBuffer.h:83
&gt; +        m_position += places;

ASSERT(m_position &lt;= m_end);
ASSERT(m_position + places &lt;= m_end);

&gt; Source/WTF/wtf/text/StringParsingBuffer.h:95
&gt; +        ++(*this);

No need for the parentheses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666192</commentid>
    <comment_count>5</comment_count>
      <attachid>402803</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-25 13:27:30 -0700</bug_when>
    <thetext>Created attachment 402803
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666196</commentid>
    <comment_count>6</comment_count>
      <attachid>402803</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-25 13:41:03 -0700</bug_when>
    <thetext>Comment on attachment 402803
Patch

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

&gt; Source/WTF/wtf/text/StringParsingBuffer.h:54
&gt; +        ASSERT(m_end &gt;= m_position);
&gt; +        ASSERT(!characters == !end);

Maybe also assert that the length fits in unsigned?

&gt; Source/WTF/wtf/text/StringParsingBuffer.h:69
&gt; +        ASSERT(m_position + i &lt; m_end);

On reflection, because of overflow I think should be written like this:

    ASSERT(i &lt; lengthRemaining());

&gt; Source/WTF/wtf/text/StringParsingBuffer.h:75
&gt; +        ASSERT(m_position &lt; m_end);

New, better idea:

    ASSERT(hasCharactersRemaining());

&gt; Source/WTF/wtf/text/StringParsingBuffer.h:81
&gt; +        ASSERT(m_position &lt; m_end);

Ditto.

&gt; Source/WTF/wtf/text/StringParsingBuffer.h:85
&gt; +    constexpr void advanceBy(unsigned places)

Wonder if this should be size_t instead of unsigned.

&gt; Source/WTF/wtf/text/StringParsingBuffer.h:87
&gt; +        ASSERT(m_position &lt;= m_end);

I guess it was silly that I suggested this one. Obviously, this is the class&apos;s invariant, so we could assert this anywhere.

&gt; Source/WTF/wtf/text/StringParsingBuffer.h:88
&gt; +        ASSERT(m_position + places &lt;= m_end);

On reflection, because of overflow I think should be written like this:

    ASSERT(places &lt;= lengthRemaining());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666215</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-25 14:13:23 -0700</bug_when>
    <thetext>Committed r263529: &lt;https://trac.webkit.org/changeset/263529&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 402803.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666245</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-25 15:12:54 -0700</bug_when>
    <thetext>Hope you don’t mind my after-commit comments!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666305</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-25 17:18:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/64781816&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666312</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-25 17:22:13 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Hope you don’t mind my after-commit comments!

Not in the slightest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666313</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-25 17:22:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/64781954&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402709</attachid>
            <date>2020-06-24 19:38:53 -0700</date>
            <delta_ts>2020-06-25 10:29:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213588-20200624193852.patch</filename>
            <type>text/plain</type>
            <size>25831</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM0OTMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDIwLTA2LTI0ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcgdGVtcGxhdGVkIHN0cmluZyB0eXBlIHRv
IGhlbHAgd3JpdGUgbW9yZSBpZGlvbWF0aWMgcGFyc2luZyBjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM1ODgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEludHJvZHVjZSBTdHJpbmdQ
YXJzaW5nQnVmZmVyPENoYXJUeXBlPiwgYSBuZXcgY2xhc3MgaW4gdGhlIFN0cmluZyBjbGFzcyBm
YW1pbHkKKyAgICAgICAgZGVzaWduZWQgdG8gYmUgdXNlZCBieSBwYXJzaW5nIGNvZGUuIEl0J3Mg
ZGVzaWduZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBoZWxwZXIKKyAgICAgICAgZnVuY3Rpb24sIHJl
YWRDaGFyYWN0ZXJzRm9yUGFyc2luZywgYW5kIGZvciB0aGUgdXNlciB0byB3cml0ZSB0aGUgcGFy
c2luZyBjb2RlCisgICAgICAgIGluIGEgd2F5IHRoYXQgd2lsbCB3b3JrIGZvciBib3RoIGxhdGlu
MSBhbmQgVVRGLTE2IGlucHV0cy4gTW9zdCB1c2FnZSB3aWxsIGxpa2VseQorICAgICAgICBmb2xs
b3cgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyBmb3JtCisgICAgICAgIAorICAgICAgICB7
CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIGF1dG8gcGFyc2VkUmVzdWx0ID0gcmVhZENo
YXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZ2lzaE9iamVjdFRvUGFyc2UsIFtdKGF1dG8gcGFyc2lu
Z0J1ZmZlcikgeworICAgICAgICAgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKnBhcnNpbmdCdWZm
ZXIgPT0gZm9vKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC4uLgorCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlZFJlc3VsdAorICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAuLi4KKyAgICAgICAgfQorCisgICAgICAgIEFQSSB0ZXN0cyBhZGRlZC4KKworICAgICAg
ICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgQWRkIFN0cmluZ1BhcnNpbmdCdWZmZXIuaAorCisgICAgICAgICog
d3RmL0ZvcndhcmQuaDoKKyAgICAgICAgRm9yd2FyZCBkZWNsYXJlIFN0cmluZ1BhcnNpbmdCdWZm
ZXIuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg6IAorICAgICAg
ICBBZGRlZC4KKwogMjAyMC0wNi0yNCAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+CiAK
ICAgICAgICAgV2Ugc2hvdWxkIHJlc3VycmVjdCB0aGUgb2xkZXIgcGF0Y2ggdGhhdCBjb2xsZWN0
cyBzb21lIHN0YXRpc3RpY3Mgb2Ygd2ViIEFQSSBjYWxscwpJbmRleDogU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NTIsNiAr
NDUyLDcgQEAKIAkJN0MxMzc5NDIyMjIzMjZENTAwRDdBODI0IC8qIGllZWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gaWVlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEzNzk0MzIyMjMy
NkQ1MDBEN0E4MjQgLyogUkVBRE1FLm1kICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gbmV0LmRhcmluZ2ZpcmViYWxsLm1hcmtkb3duOyBwYXRoID0gUkVB
RE1FLm1kOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNBNDVEMDIzQ0ZBODgzMDA3
REUzQTYgLyogUGxhdGZvcm1IYXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBsYXRmb3JtSGF2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzNCMDZFODI0
QTExNkU2MDBGRDI2QzcgLyogU3RyaW5nUGFyc2luZ0J1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJpbmdQYXJzaW5nQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDM0Y3
MjM5MUQ3ODgxMTkwMDY3NEUyNiAvKiBCcmlnYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEJyaWdhbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0MjMw
NzEyM0NFMkQ4QTAwNkU1NEQwIC8qIFBsYXRmb3JtRW5hYmxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtRW5hYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDNDIzMDcyMjNDRTJEOEEwMDZFNTREMCAvKiBQbGF0Zm9ybUNQVS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNQVS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTM5Niw2ICsxMzk3LDcgQEAKIAkJCQlBOEE0NzMyODE1MUE4MjVCMDA0
MTIzRkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQThBNDczMjkxNTFBODI1QjAwNDEyM0ZG
IC8qIFN0cmluZ0ltcGwuaCAqLywKIAkJCQlBOEE0NzMyQTE1MUE4MjVCMDA0MTIzRkYgLyogU3Ry
aW5nT3BlcmF0b3JzLmggKi8sCisJCQkJN0MzQjA2RTgyNEExMTZFNjAwRkQyNkM3IC8qIFN0cmlu
Z1BhcnNpbmdCdWZmZXIuaCAqLywKIAkJCQlDRDAwMzYwRDIxNTAxRjc4MDBGNEVENEMgLyogU3Ry
aW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oICovLAogCQkJCTkzRjE5OTNEMTlENzk1OEQwMEMyMzkw
QiAvKiBTdHJpbmdWaWV3LmNwcCAqLywKIAkJCQkxQTZFQjFERjE4N0QwQkQzMDAzMDEyNkYgLyog
U3RyaW5nVmlldy5oICovLApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI2MzMz
NSkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0z
MzgsNiArMzM4LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIHRleHQvU3RyaW5nSGFz
aGVyLmgKICAgICB0ZXh0L1N0cmluZ0ltcGwuaAogICAgIHRleHQvU3RyaW5nT3BlcmF0b3JzLmgK
KyAgICB0ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaAogICAgIHRleHQvU3RyaW5nVG9JbnRlZ2Vy
Q29udmVyc2lvbi5oCiAgICAgdGV4dC9TdHJpbmdWaWV3LmgKICAgICB0ZXh0L1N5bWJvbEltcGwu
aApJbmRleDogU291cmNlL1dURi93dGYvRm9yd2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0ZvcndhcmQuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dURi93dGYvRm9y
d2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCA9IGFsaWdub2YoVCkKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0g
RHVtYlB0clRyYWl0czxUPj4gY2xhc3MgUmVmOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgPSBEdW1iUHRyVHJhaXRzPFQ+PiBjbGFzcyBSZWZQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4g
Y2xhc3MgU3RyaW5nQnVmZmVyOwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFN0cmluZ1BhcnNp
bmdCdWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lkPiBjbGFzcyBTdHJp
bmdUeXBlQWRhcHRlcjsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBVbmlxdWVSZWY7CiB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgVmFyaWFudDsKQEAgLTEyMiw2ICsxMjMsNyBAQCB1c2lu
ZyBXVEY6OlN0cmluZzsKIHVzaW5nIFdURjo6U3RyaW5nQnVmZmVyOwogdXNpbmcgV1RGOjpTdHJp
bmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJbXBsOwordXNpbmcgV1RGOjpTdHJpbmdQYXJz
aW5nQnVmZmVyOwogdXNpbmcgV1RGOjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpUZXh0UG9zaXRp
b247CiB1c2luZyBXVEY6OlRleHRTdHJlYW07CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ1BhcnNpbmdCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ1BhcnNpbmdCdWZmZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ1BhcnNpbmdCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9MQ2hhci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbW1v
bi5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFN0
cmluZ1BhcnNpbmdCdWZmZXIgZmluYWwgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSBUOworCisgICAgY29uc3RleHByIFN0
cmluZ1BhcnNpbmdCdWZmZXIoKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgU3RyaW5n
UGFyc2luZ0J1ZmZlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCisgICAgICAgIDogbV9wb3NpdGlvbiB7IGNoYXJhY3RlcnMgfQorICAgICAgICAsIG1f
ZW5kIHsgY2hhcmFjdGVycyArIGxlbmd0aCB9CisgICAgeworICAgIH0KKworICAgIGNvbnN0ZXhw
ciBTdHJpbmdQYXJzaW5nQnVmZmVyKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIGNv
bnN0IENoYXJhY3RlclR5cGUqIGVuZCkKKyAgICAgICAgOiBtX3Bvc2l0aW9uIHsgY2hhcmFjdGVy
cyB9CisgICAgICAgICwgbV9lbmQgeyBlbmQgfQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdGV4
cHIgY29uc3QgQ2hhcmFjdGVyVHlwZSogcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0
aW9uOyB9CisgICAgY29uc3RleHByIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZW5kOyB9CisKKyAgICBjb25zdGV4cHIgYm9vbCBoYXNDaGFyYWN0ZXJzUmVtYWlu
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbiA8IG1fZW5kOyB9CisgICAgY29uc3RleHBy
IGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uID09IG1fZW5kOyB9CisKKyAg
ICBjb25zdGV4cHIgdW5zaWduZWQgbGVuZ3RoUmVtYWluaW5nKCkgY29uc3QgeyByZXR1cm4gbV9l
bmQgLSBtX3Bvc2l0aW9uOyB9CisgICAgU3RyaW5nVmlldyBzdHJpbmdWaWV3T2ZDaGFyYWN0ZXJz
UmVtYWluaW5nKCkgeyByZXR1cm4geyBtX3Bvc2l0aW9uLCBsZW5ndGhSZW1haW5pbmcoKSB9OyB9
CisKKyAgICBDaGFyYWN0ZXJUeXBlIG9wZXJhdG9yW10odW5zaWduZWQgaSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX3Bvc2l0aW9uICsgaSA8IG1fZW5kKTsKKyAgICAgICAgcmV0dXJuIG1fcG9z
aXRpb25baV07CisgICAgfQorCisgICAgY29uc3RleHByIENoYXJhY3RlclR5cGUgb3BlcmF0b3Iq
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqbV9wb3NpdGlvbjsKKyAgICB9CisKKyAg
ICBjb25zdGV4cHIgdm9pZCBhZHZhbmNlKCkKKyAgICB7CisgICAgICAgICsrbV9wb3NpdGlvbjsK
KyAgICB9CisKKyAgICBjb25zdGV4cHIgdm9pZCBhZHZhbmNlQnkodW5zaWduZWQgcGxhY2VzKQor
ICAgIHsKKyAgICAgICAgbV9wb3NpdGlvbiArPSBwbGFjZXM7CisgICAgfQorCisgICAgY29uc3Rl
eHByIFN0cmluZ1BhcnNpbmdCdWZmZXImIG9wZXJhdG9yKysoKQorICAgIHsKKyAgICAgICAgYWR2
YW5jZSgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgY29uc3RleHByIFN0
cmluZ1BhcnNpbmdCdWZmZXIgb3BlcmF0b3IrKyhpbnQpCisgICAgeworICAgICAgICBhdXRvIHJl
c3VsdCA9ICp0aGlzOworICAgICAgICArKygqdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgY29uc3RleHByIFN0cmluZ1BhcnNpbmdCdWZmZXImIG9wZXJhdG9yKz0o
aW50IHBsYWNlcykKKyAgICB7CisgICAgICAgIGFkdmFuY2VCeShwbGFjZXMpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IENoYXJhY3RlclR5cGUq
IG1fcG9zaXRpb24geyBudWxscHRyIH07CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogbV9lbmQg
eyBudWxscHRyIH07Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlLCB0eXBlbmFt
ZSBGdW5jdGlvbj4gZGVjbHR5cGUoYXV0bykgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKFN0cmlu
Z1R5cGUmJiBzdHJpbmcsIEZ1bmN0aW9uJiYgZnVuY3RvcikKK3sKKyAgICBpZiAoc3RyaW5nLmlz
OEJpdCgpKQorICAgICAgICByZXR1cm4gZnVuY3RvcihTdHJpbmdQYXJzaW5nQnVmZmVyIHsgc3Ry
aW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSB9KTsKKyAgICByZXR1cm4gZnVuY3Rv
cihTdHJpbmdQYXJzaW5nQnVmZmVyIHsgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVu
Z3RoKCkgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlN0cmluZ1Bh
cnNpbmdCdWZmZXI7Cit1c2luZyBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZzsKSW5kZXg6
IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDI2MzQ5MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2
IEBACisyMDIwLTA2LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgYSBuZXcgdGVtcGxhdGVkIHN0cmluZyB0eXBlIHRvIGhlbHAgd3JpdGUgbW9yZSBpZGlv
bWF0aWMgcGFyc2luZyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTM1ODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nUGFyc2luZ0J1ZmZlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIEFkZGVkIG5ldyB0
ZXN0cyBmb3IgbmV3IGNsYXNzLgorCiAyMDIwLTA2LTI0ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8
YXBAYXBwbGUuY29tPgogCiAgICAgICAgIG1hY09TIEJpZyBTdXIgYnVpbGQgZml4LgpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9iaW5kaW5ncy9tYWluLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvYmluZGluZ3MvbWFpbi5weQkocmV2aXNpb24gMjYzMzM1KQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iaW5kaW5ncy9tYWluLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC05NCw2ICs5NCw3IEBAIGNsYXNzIEJpbmRpbmdzVGVzdHM6CiAgICAgICAgICAgICAgICAn
LS13b3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlJywgd29ya2xldGdsb2JhbHNjb3Bl
X2NvbnN0cnVjdG9yc19maWxlLAogICAgICAgICAgICAgICAgJy0tcGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGVDb25zdHJ1Y3RvcnNGaWxlJywgcGFpbnR3b3JrbGV0Z2xvYmFsc2NvcGVfY29uc3RydWN0
b3JzX2ZpbGUsCiAgICAgICAgICAgICAgICAnLS10ZXN0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNG
aWxlJywgdGVzdGdsb2JhbHNjb3BlX2NvbnN0cnVjdG9yc19maWxlXQorICAgICAgICBwcmludCh0
ZXN0Z2xvYmFsc2NvcGVfY29uc3RydWN0b3JzX2ZpbGUpCiAKICAgICAgICAgZXhpdF9jb2RlID0g
MAogICAgICAgICB0cnk6CkBAIC0xNzEsNyArMTcyLDcgQEAgY2xhc3MgQmluZGluZ3NUZXN0czoK
ICAgICAgICAgICAgICMgRGV0ZWN0IGNoYW5nZXMKICAgICAgICAgICAgIGlmIHNlbGYuZGV0ZWN0
X2NoYW5nZXMoZ2VuZXJhdG9yLCB3b3JrX2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6
CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKLSAgICAgICAgICAgIHNodXRpbC5ybXRy
ZWUod29ya19kaXJlY3RvcnkpCisgICAgICAgICAgICAjIHNodXRpbC5ybXRyZWUod29ya19kaXJl
Y3RvcnkpCiAKICAgICAgICAgcmV0dXJuIHBhc3NlZAogCkBAIC0xOTMsNyArMTk0LDcgQEAgY2xh
c3MgQmluZGluZ3NUZXN0czoKICAgICAgICAgdGVzdGdsb2JhbHNjb3BlX2NvbnN0cnVjdG9yc19m
aWxlID0gb3MucGF0aC5qb2luKHdvcmtfZGlyZWN0b3J5LCAnQmluZGluZ1Rlc3RHbG9iYWxDb25z
dHJ1Y3RvcnMuaWRsJykKICAgICAgICAgaWYgc2VsZi5nZW5lcmF0ZV9zdXBwbGVtZW50YWxfZGVw
ZW5kZW5jeShpbnB1dF9kaXJlY3RvcnksIHN1cHBsZW1lbnRhbF9kZXBlbmRlbmN5X2ZpbGUsIHdp
bmRvd19jb25zdHJ1Y3RvcnNfZmlsZSwgd29ya2VyZ2xvYmFsc2NvcGVfY29uc3RydWN0b3JzX2Zp
bGUsIGRlZGljYXRlZHdvcmtlcmdsb2JhbHNjb3BlX2NvbnN0cnVjdG9yc19maWxlLCBzZXJ2aWNl
d29ya2VyZ2xvYmFsc2NvcGVfY29uc3RydWN0b3JzX2ZpbGUsIHdvcmtsZXRnbG9iYWxzY29wZV9j
b25zdHJ1Y3RvcnNfZmlsZSwgcGFpbnR3b3JrbGV0Z2xvYmFsc2NvcGVfY29uc3RydWN0b3JzX2Zp
bGUsIHRlc3RnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZSk6CiAgICAgICAgICAgICBwcmlu
dCgnRmFpbGVkIHRvIGdlbmVyYXRlIGEgc3VwcGxlbWVudGFsIGRlcGVuZGVuY3kgZmlsZS4nKQot
ICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh3b3JrX2RpcmVjdG9yeSkKKyAgICAgICAgICAgICMg
c2h1dGlsLnJtdHJlZSh3b3JrX2RpcmVjdG9yeSkKICAgICAgICAgICAgIHJldHVybiAtMQogCiAg
ICAgICAgIGZvciBnZW5lcmF0b3IgaW4gc2VsZi5nZW5lcmF0b3JzOgpAQCAtMjAyLDcgKzIwMyw3
IEBAIGNsYXNzIEJpbmRpbmdzVGVzdHM6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5ydW5fdGVz
dHMoZ2VuZXJhdG9yLCBpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnksIHN1cHBs
ZW1lbnRhbF9kZXBlbmRlbmN5X2ZpbGUpOgogICAgICAgICAgICAgICAgIGFsbF90ZXN0c19wYXNz
ZWQgPSBGYWxzZQogCi0gICAgICAgIHNodXRpbC5ybXRyZWUod29ya19kaXJlY3RvcnkpCisgICAg
ICAgICMgc2h1dGlsLnJtdHJlZSh3b3JrX2RpcmVjdG9yeSkKIAogICAgICAgICBpZiBzZWxmLmpz
b25fZmlsZV9uYW1lOgogICAgICAgICAgICAganNvbl9kYXRhID0gewpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNjMzMzUpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw3IEBAIHNldChU
ZXN0V1RGX1NPVVJDRVMKICAgICBUZXN0cy9XVEYvU3RyaW5nSGFzaGVyLmNwcAogICAgIFRlc3Rz
L1dURi9TdHJpbmdJbXBsLmNwcAogICAgIFRlc3RzL1dURi9TdHJpbmdPcGVyYXRvcnMuY3BwCisg
ICAgVGVzdHMvV1RGL1N0cmluZ1BhcnNpbmdCdWZmZXIuY3BwCiAgICAgVGVzdHMvV1RGL1N0cmlu
Z1ZpZXcuY3BwCiAgICAgVGVzdHMvV1RGL1N5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwCiAgICAg
VGVzdHMvV1RGL1RleHRCcmVha0l0ZXJhdG9yLmNwcApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDI2MzMzNSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NDMsNiArNzQz
LDcgQEAKIAkJN0NDRTdGMkUxQTQxMUIxMDAwNDQ3QzRDIC8qIFdLQnJvd3NpbmdDb250ZXh0R3Jv
dXBUZXN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkMzQzRDN0QxNDU4N0FBNjAwMjVGQjYyIC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBUZXN0Lm1t
ICovOyB9OwogCQk3Q0NFN0YyRjFBNDExQjEwMDA0NDdDNEMgLyogV0tCcm93c2luZ0NvbnRleHRM
b2FkRGVsZWdhdGVUZXN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkMzQzRDNzAxNDU3NUI2QTAwMjVGQjYyIC8qIFdLQnJvd3NpbmdDb250ZXh0TG9h
ZERlbGVnYXRlVGVzdC5tbSAqLzsgfTsKIAkJN0NENEMyNkUxRTJDMEU2RTAwOTI5NDcwIC8qIFN0
cmluZ0NvbmNhdGVuYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDRDRDMjZDMUUyQzBFNkUwMDkyOTQ3MCAvKiBTdHJpbmdDb25jYXRlbmF0ZS5j
cHAgKi87IH07CisJCTdDRDcwQzRGMjRBNDM2RUUwMEU2MTA0MCAvKiBTdHJpbmdQYXJzaW5nQnVm
ZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
RDcwQzRFMjRBNDM2RUUwMEU2MTA0MCAvKiBTdHJpbmdQYXJzaW5nQnVmZmVyLmNwcCAqLzsgfTsK
IAkJN0NFQjYyQUIyMjM2MDlERTAwNjlDQkIwIC8qIEl0ZXJhdG9yUmFuZ2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFQjYyQTkyMjM2MDg2QzAw
NjlDQkIwIC8qIEl0ZXJhdG9yUmFuZ2UuY3BwICovOyB9OwogCQk3Q0VGQTk2NjFBQzBCOUUyMDBC
OTEwRkQgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRUZBOTY0MUFDMEI5RTIwMEI5MTBGRCAv
KiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovOyB9OwogCQk3Q0ZCQ0FFNTE3NDMy
MzhGMDBCMkJGQ0YgLyogV2lsbExvYWRfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRkJDQUUzMTc0MzIzOEUwMEIyQkZDRiAvKiBXaWxs
TG9hZF9CdW5kbGUuY3BwICovOyB9OwpAQCAtMTIyNyw3ICsxMjI4LDYgQEAKIAkJCWRzdFBhdGgg
PSBUZXN0V2ViS2l0QVBJLnJlc291cmNlczsKIAkJCWRzdFN1YmZvbGRlclNwZWMgPSA3OwogCQkJ
ZmlsZXMgPSAoCi0JCQkJNTc1MUIyOEEyNDlENUJDNTAwNjY0QzJBIC8qIHdlYi1hdXRoZW50aWNh
dGlvbi1tYWtlLWNyZWRlbnRpYWwtaGlkLXBpbi1nZXQtcGluLXRva2VuLWZha2UtcGluLWludmFs
aWQtZXJyb3ItcmV0cnkuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NUE4MTdGRjIx
ODEwMjFBMDAwNEEzOUEgLyogMTAweDEwMC1yZWQudGdhIGluIENvcHkgUmVzb3VyY2VzICovLAog
CQkJCTFBOUU1MkM5MTNFNjVFRjQwMDY5MTdGNSAvKiAxOC1jaGFyYWN0ZXJzLmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8sCiAJCQkJNTVBODE4MDAyMTgxMDIyMTAwMDRBMzlBIC8qIDQwMHg0MDAt
Z3JlZW4ucG5nIGluIENvcHkgUmVzb3VyY2VzICovLApAQCAtMTU5MSw2ICsxNTkxLDcgQEAKIAkJ
CQk1N0M2MjQ1MDIzNDZDMjFFMDAzODNGRTcgLyogd2ViLWF1dGhlbnRpY2F0aW9uLWdldC1hc3Nl
cnRpb24uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NzhEQTQ0ODIzRUNEMDlCMDAy
NDYwMTAgLyogd2ViLWF1dGhlbnRpY2F0aW9uLW1ha2UtY3JlZGVudGlhbC1oaWQtcGluLWF1dGgt
YmxvY2tlZC1lcnJvci5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTU3MEQyNkY0MjND
M0NBNkEwMEQ1Q0Y2NyAvKiB3ZWItYXV0aGVudGljYXRpb24tbWFrZS1jcmVkZW50aWFsLWhpZC1w
aW4tZ2V0LWtleS1hZ3JlZW1lbnQtZXJyb3IuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKKwkJ
CQk1NzUxQjI4QTI0OUQ1QkM1MDA2NjRDMkEgLyogd2ViLWF1dGhlbnRpY2F0aW9uLW1ha2UtY3Jl
ZGVudGlhbC1oaWQtcGluLWdldC1waW4tdG9rZW4tZmFrZS1waW4taW52YWxpZC1lcnJvci1yZXRy
eS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTU3OERBNDQyMjNFQ0M3QTAwMDI0NjAx
MCAvKiB3ZWItYXV0aGVudGljYXRpb24tbWFrZS1jcmVkZW50aWFsLWhpZC1waW4tZ2V0LXBpbi10
b2tlbi1waW4tYXV0aC1ibG9ja2VkLWVycm9yLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJ
CQkJNTc4REE0NDYyM0VDQ0MwQTAwMjQ2MDEwIC8qIHdlYi1hdXRoZW50aWNhdGlvbi1tYWtlLWNy
ZWRlbnRpYWwtaGlkLXBpbi1nZXQtcGluLXRva2VuLXBpbi1hdXRoLWludmFsaWQtZXJyb3ItcmV0
cnkuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NzBEMjZGQTIzQzNGMjUxMDBENUNG
NjcgLyogd2ViLWF1dGhlbnRpY2F0aW9uLW1ha2UtY3JlZGVudGlhbC1oaWQtcGluLWdldC1waW4t
dG9rZW4tcGluLWJsb2NrZWQtZXJyb3IuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAgLTIy
NjksNiArMjI3MCw3IEBACiAJCTdDQ0U3RUEzMUE0MTE1Q0IwMDQ0N0M0QyAvKiBUZXN0V2ViS2l0
QVBJTGlicmFyeS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBUZXN0V2ViS2l0QVBJTGlicmFyeS54
Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NEMEQ1QUExRDU1MzRERTAw
MENDOUUxIC8qIFZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVmFyaWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDRDMjZDMUUy
QzBFNkUwMDkyOTQ3MCAvKiBTdHJpbmdDb25jYXRlbmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdDb25jYXRlbmF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTdDRDcwQzRFMjRBNDM2RUUwMEU2MTA0MCAvKiBTdHJpbmdQYXJzaW5n
QnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ1BhcnNpbmdCdWZmZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0VCNjJBOTIyMzYwODZDMDA2OUNCQjAgLyog
SXRlcmF0b3JSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJdGVyYXRvclJhbmdlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFRkE5NjQxQUMwQjlFMjAwQjkxMEZEIC8q
IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0ZCQ0FERDE3NDMyMzRGMDBCMkJGQ0YgLyogV2lsbExv
YWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2lsbExvYWQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDA3Miw2ICs0MDc0LDcgQEAKIAkJCQk5
M0FCQTgwODE2RERBQjkxMDAyREIyRkEgLyogU3RyaW5nSGFzaGVyLmNwcCAqLywKIAkJCQkyNkYx
QjQ0MzE1Q0E0MzRGMDBEMUU0QkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQzAxMzYzQzcx
M0MzOTk3MzAwRUYzOTY0IC8qIFN0cmluZ09wZXJhdG9ycy5jcHAgKi8sCisJCQkJN0NENzBDNEUy
NEE0MzZFRTAwRTYxMDQwIC8qIFN0cmluZ1BhcnNpbmdCdWZmZXIuY3BwICovLAogCQkJCTdDNzRE
NDJEMTg4MjI4RjMwMEU1RUQ1NyAvKiBTdHJpbmdWaWV3LmNwcCAqLywKIAkJCQk1NTk3RjgzNDFE
OTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAgKi8sCiAJCQkJOTMy
OUFBMjgxREUzRjgxRTAwM0FCRDA3IC8qIFRleHRCcmVha0l0ZXJhdG9yLmNwcCAqLywKQEAgLTQ3
ODQsNiArNDc4Nyw3IEBACiAJCQkJN0M4M0RGMzYxRDBBNTkwQzAwRkVCQ0YzIC8qIFN0cmluZ0hh
c2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYzNzFEMEE1OTBDMDBGRUJDRjMgLyog
U3RyaW5nSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYzODFEMEE1OTBDMDBGRUJD
RjMgLyogU3RyaW5nT3BlcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDRDcwQzRGMjRB
NDM2RUUwMEU2MTA0MCAvKiBTdHJpbmdQYXJzaW5nQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDODNERjNBMUQwQTU5MEMwMEZFQkNGMyAvKiBTdHJpbmdWaWV3LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTU1OTdGODM2MUQ5NTk2QzgwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1
ZXVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjQwMUQwQTU5MEMwMEZFQkNGMyAvKiBU
ZXN0c0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00ODQ1LDYgKzQ4NDksNyBAQAog
CQkJCTgzNDEzOEM3MjAzMjYxQ0EwMEYyNjk2MCAvKiBBc3luY1BvbGljeUZvck5hdmlnYXRpb25S
ZXNwb25zZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUI0MUE0MTFBN0UwMDQ0N0M0QyAv
KiBBdHRyaWJ1dGVkU3RyaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzc2MEM0RjEyMTEyNDlB
RjAwMjMzQUNDIC8qIEF0dHJTdHlsZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNERUQzNDJGMjQ5
RERFMEUwMDAyQUU3QSAvKiBBdWRpb1JvdXRpbmdBcmJpdHJhdGlvbi5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUNEQzhFNDhEMUJDNUNCNDUwMDU5NEZFQyAvKiBBdWRpb1Nlc3Npb25DYXRlZ29yeUlP
Uy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0MkQ2MzQ0MjJBMTcyOUYwMEQyRkIzQSAvKiBBdXRv
Y29ycmVjdGlvblRlc3RzSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0UwQjkxRDBBNjRG
MTAwRkVCQ0YzIC8qIEF1dG9MYXlvdXRJbnRlZ3JhdGlvbi5tbSBpbiBTb3VyY2VzICovLApAQCAt
NDg2Miw3ICs0ODY3LDYgQEAKIAkJCQkxQzJCODE4MDFDODkxRTdDMDBBNTUyOUYgLyogQ2FuY2Vs
Rm9udFN1YnJlc291cmNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQjYxQTQxMUE3RTAw
NDQ3QzRDIC8qIENhbmNlbExvYWRGcm9tUmVzb3VyY2VMb2FkRGVsZWdhdGUubW0gaW4gU291cmNl
cyAqLywKIAkJCQk3QzgzRTA0MTFEMEE2M0YyMDBGRUJDRjMgLyogQ2FuZGlkYXRlVGVzdHMubW0g
aW4gU291cmNlcyAqLywKLQkJCQlDREVEMzQyRjI0OURERTBFMDAwMkFFN0EgLyogQXVkaW9Sb3V0
aW5nQXJiaXRyYXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VFNzFBNDExQUU2MDA0
NDdDNEMgLyogQ2FuSGFuZGxlUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwN0MwNDZD
QTFFNDI2MkE4MDA3MjAxRTcgLyogQ0FSaW5nQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTU3MzAzQkNCMjAwODM3NjUwMDM1NTk2NSAvKiBDQk9SUmVhZGVyVGVzdC5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ1BhcnNpbmdC
dWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0
cmluZ1BhcnNpbmdCdWZmZXIuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1N0cmluZ1BhcnNpbmdCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiV1RGU3RyaW5nVXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJz
aW5nQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorCituYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CisKK1RFU1QoV1RGLCBTdHJpbmdQYXJzaW5nQnVmZmVyRW1wdHkp
Cit7CisgICAgU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4gcGFyc2luZ0J1ZmZlcjsKKworICAg
IEVYUEVDVF9UUlVFKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHBh
cnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKTsKKyAgICBFWFBFQ1RfRVEocGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpLCBudWxscHRyKTsKKyAgICBFWFBFQ1RfRVEocGFyc2luZ0J1
ZmZlci5lbmQoKSwgbnVsbHB0cik7CisgICAgRVhQRUNUX0VRKHBhcnNpbmdCdWZmZXIubGVuZ3Ro
UmVtYWluaW5nKCksIDB1KTsKKworfQorCitURVNUKFdURiwgU3RyaW5nUGFyc2luZ0J1ZmZlcklu
aXRpYWwpCit7CisgICAgU3RyaW5nVmlldyBzdHJpbmcgeyAiYWJjIiB9OworICAgIFN0cmluZ1Bh
cnNpbmdCdWZmZXI8TENoYXI+IHBhcnNpbmdCdWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczgoKSwg
c3RyaW5nLmxlbmd0aCgpIH07CisKKyAgICBFWFBFQ1RfRkFMU0UocGFyc2luZ0J1ZmZlci5hdEVu
ZCgpKTsKKyAgICBFWFBFQ1RfVFJVRShwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5p
bmcoKSk7CisgICAgRVhQRUNUX0VRKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSwgc3RyaW5nLmNo
YXJhY3RlcnM4KCkpOworICAgIEVYUEVDVF9FUShwYXJzaW5nQnVmZmVyLmVuZCgpLCBzdHJpbmcu
Y2hhcmFjdGVyczgoKSArIHN0cmluZy5sZW5ndGgoKSk7CisgICAgRVhQRUNUX0VRKHBhcnNpbmdC
dWZmZXIubGVuZ3RoUmVtYWluaW5nKCksIDN1KTsKKyAgICBFWFBFQ1RfRVEoKnBhcnNpbmdCdWZm
ZXIsICdhJyk7Cit9CisKK1RFU1QoV1RGLCBTdHJpbmdQYXJzaW5nQnVmZmVyQWR2YW5jZSkKK3sK
KyAgICBTdHJpbmdWaWV3IHN0cmluZyB7ICJhYmMiIH07CisgICAgU3RyaW5nUGFyc2luZ0J1ZmZl
cjxMQ2hhcj4gcGFyc2luZ0J1ZmZlciB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVu
Z3RoKCkgfTsKKworICAgIHBhcnNpbmdCdWZmZXIuYWR2YW5jZSgpOworICAgIEVYUEVDVF9GQUxT
RShwYXJzaW5nQnVmZmVyLmF0RW5kKCkpOworICAgIEVYUEVDVF9UUlVFKHBhcnNpbmdCdWZmZXIu
aGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKTsKKyAgICBFWFBFQ1RfRVEocGFyc2luZ0J1ZmZlci5s
ZW5ndGhSZW1haW5pbmcoKSwgMnUpOworICAgIEVYUEVDVF9FUSgqcGFyc2luZ0J1ZmZlciwgJ2In
KTsKK30KKworVEVTVChXVEYsIFN0cmluZ1BhcnNpbmdCdWZmZXJBZHZhbmNlQnkpCit7CisgICAg
U3RyaW5nVmlldyBzdHJpbmcgeyAiYWJjIiB9OworICAgIFN0cmluZ1BhcnNpbmdCdWZmZXI8TENo
YXI+IHBhcnNpbmdCdWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgp
IH07CisKKyAgICBwYXJzaW5nQnVmZmVyLmFkdmFuY2VCeSgyKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
cGFyc2luZ0J1ZmZlci5hdEVuZCgpKTsKKyAgICBFWFBFQ1RfVFJVRShwYXJzaW5nQnVmZmVyLmhh
c0NoYXJhY3RlcnNSZW1haW5pbmcoKSk7CisgICAgRVhQRUNUX0VRKHBhcnNpbmdCdWZmZXIubGVu
Z3RoUmVtYWluaW5nKCksIDF1KTsKKyAgICBFWFBFQ1RfRVEoKnBhcnNpbmdCdWZmZXIsICdjJyk7
Cit9CisKK1RFU1QoV1RGLCBTdHJpbmdQYXJzaW5nQnVmZmVyUHJlSW5jcmVtZW50KQoreworICAg
IFN0cmluZ1ZpZXcgc3RyaW5nIHsgImFiYyIgfTsKKyAgICBTdHJpbmdQYXJzaW5nQnVmZmVyPExD
aGFyPiBwYXJzaW5nQnVmZmVyIHsgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgo
KSB9OworCisgICAgYXV0byBwcmVJbmNyZW1lbnRlZFBhcnNpbmdCdWZmZXIgPSArK3BhcnNpbmdC
dWZmZXI7CisgICAgRVhQRUNUX0ZBTFNFKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSk7CisgICAgRVhQ
RUNUX1RSVUUocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpOworICAgIEVY
UEVDVF9FUShwYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygpLCAydSk7CisgICAgRVhQRUNU
X0VRKCpwYXJzaW5nQnVmZmVyLCAnYicpOworICAgIEVYUEVDVF9GQUxTRShwcmVJbmNyZW1lbnRl
ZFBhcnNpbmdCdWZmZXIuYXRFbmQoKSk7CisgICAgRVhQRUNUX1RSVUUocHJlSW5jcmVtZW50ZWRQ
YXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSk7CisgICAgRVhQRUNUX0VRKHBy
ZUluY3JlbWVudGVkUGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSwgMnUpOworICAgIEVY
UEVDVF9FUSgqcHJlSW5jcmVtZW50ZWRQYXJzaW5nQnVmZmVyLCAnYicpOworfQorCitURVNUKFdU
RiwgU3RyaW5nUGFyc2luZ0J1ZmZlclBvc3RJbmNyZW1lbnQpCit7CisgICAgU3RyaW5nVmlldyBz
dHJpbmcgeyAiYWJjIiB9OworICAgIFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+IHBhcnNpbmdC
dWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIH07CisKKyAgICBh
dXRvIHBvc3RJbmNyZW1lbnRlZFBhcnNpbmdCdWZmZXIgPSBwYXJzaW5nQnVmZmVyKys7CisgICAg
RVhQRUNUX0ZBTFNFKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSk7CisgICAgRVhQRUNUX1RSVUUocGFy
c2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpOworICAgIEVYUEVDVF9FUShwYXJz
aW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygpLCAydSk7CisgICAgRVhQRUNUX0VRKCpwYXJzaW5n
QnVmZmVyLCAnYicpOworICAgIEVYUEVDVF9GQUxTRShwb3N0SW5jcmVtZW50ZWRQYXJzaW5nQnVm
ZmVyLmF0RW5kKCkpOworICAgIEVYUEVDVF9UUlVFKHBvc3RJbmNyZW1lbnRlZFBhcnNpbmdCdWZm
ZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKTsKKyAgICBFWFBFQ1RfRVEocG9zdEluY3JlbWVu
dGVkUGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSwgM3UpOworICAgIEVYUEVDVF9FUSgq
cG9zdEluY3JlbWVudGVkUGFyc2luZ0J1ZmZlciwgJ2EnKTsKK30KKworVEVTVChXVEYsIFN0cmlu
Z1BhcnNpbmdCdWZmZXJQbHVzRXF1YWxzKQoreworICAgIFN0cmluZ1ZpZXcgc3RyaW5nIHsgImFi
YyIgfTsKKyAgICBTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiBwYXJzaW5nQnVmZmVyIHsgc3Ry
aW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSB9OworCisgICAgcGFyc2luZ0J1ZmZl
ciArPSAyOworICAgIEVYUEVDVF9GQUxTRShwYXJzaW5nQnVmZmVyLmF0RW5kKCkpOworICAgIEVY
UEVDVF9UUlVFKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKTsKKyAgICBF
WFBFQ1RfRVEocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSwgMXUpOworICAgIEVYUEVD
VF9FUSgqcGFyc2luZ0J1ZmZlciwgJ2MnKTsKK30KKworVEVTVChXVEYsIFN0cmluZ1BhcnNpbmdC
dWZmZXJFbmQpCit7CisgICAgU3RyaW5nVmlldyBzdHJpbmcgeyAiYWJjIiB9OworICAgIFN0cmlu
Z1BhcnNpbmdCdWZmZXI8TENoYXI+IHBhcnNpbmdCdWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczgo
KSwgc3RyaW5nLmxlbmd0aCgpIH07CisKKyAgICArK3BhcnNpbmdCdWZmZXI7CisgICAgRVhQRUNU
X0ZBTFNFKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSk7CisgICAgRVhQRUNUX1RSVUUocGFyc2luZ0J1
ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpOworICAgIEVYUEVDVF9FUSgqcGFyc2luZ0J1
ZmZlciwgJ2InKTsKKworICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICBFWFBFQ1RfRkFMU0UocGFy
c2luZ0J1ZmZlci5hdEVuZCgpKTsKKyAgICBFWFBFQ1RfVFJVRShwYXJzaW5nQnVmZmVyLmhhc0No
YXJhY3RlcnNSZW1haW5pbmcoKSk7CisgICAgRVhQRUNUX0VRKCpwYXJzaW5nQnVmZmVyLCAnYycp
OworCisgICAgKytwYXJzaW5nQnVmZmVyOworICAgIEVYUEVDVF9UUlVFKHBhcnNpbmdCdWZmZXIu
YXRFbmQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1Jl
bWFpbmluZygpKTsKK30KKworVEVTVChXVEYsIFN0cmluZ1BhcnNpbmdCdWZmZXJTdWJzY3JpcHQp
Cit7CisgICAgU3RyaW5nVmlldyBzdHJpbmcgeyAiYWJjIiB9OworICAgIFN0cmluZ1BhcnNpbmdC
dWZmZXI8TENoYXI+IHBhcnNpbmdCdWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5n
Lmxlbmd0aCgpIH07CisgICAgCisgICAgKytwYXJzaW5nQnVmZmVyOworICAgIEVYUEVDVF9FUShw
YXJzaW5nQnVmZmVyWzBdLCAnYicpOworICAgIEVYUEVDVF9FUShwYXJzaW5nQnVmZmVyWzFdLCAn
YycpOworfQorCitURVNUKFdURiwgU3RyaW5nUGFyc2luZ0J1ZmZlclN0cmluZ1ZpZXcpCit7Cisg
ICAgU3RyaW5nVmlldyBzdHJpbmcgeyAiYWJjIiB9OworICAgIFN0cmluZ1BhcnNpbmdCdWZmZXI8
TENoYXI+IHBhcnNpbmdCdWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0
aCgpIH07CisKKyAgICArK3BhcnNpbmdCdWZmZXI7CisgICAgYXV0byB2aWV3UmVtYWluaW5nID0g
cGFyc2luZ0J1ZmZlci5zdHJpbmdWaWV3T2ZDaGFyYWN0ZXJzUmVtYWluaW5nKCk7CisgICAgRVhQ
RUNUX0VRKHZpZXdSZW1haW5pbmcubGVuZ3RoKCksIDJ1KTsKKyAgICBFWFBFQ1RfRVEodmlld1Jl
bWFpbmluZ1swXSwgJ2InKTsKKyAgICBFWFBFQ1RfRVEodmlld1JlbWFpbmluZ1sxXSwgJ2MnKTsK
K30KKworVEVTVChXVEYsIFN0cmluZ1BhcnNpbmdCdWZmZXJSZWFkQ2hhcmFjdGVyc0ZvclBhcnNp
bmcpCit7CisgICAgYXV0byBsYXRpbjEgPSBTdHJpbmdWaWV3IHsgImFiYyIgfTsKKyAgICBhdXRv
IHJlc3VsdDEgPSBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhsYXRpbjEsIFtdKGF1dG8g
cGFyc2luZ0J1ZmZlcikgeworICAgICAgICBFWFBFQ1RfRkFMU0UocGFyc2luZ0J1ZmZlci5hdEVu
ZCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVt
YWluaW5nKCkpOworICAgICAgICBFWFBFQ1RfRVEocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5p
bmcoKSwgM3UpOworICAgICAgICBFWFBFQ1RfRVEoKnBhcnNpbmdCdWZmZXIsICdhJyk7CisgICAg
CisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgcmV0dXJuIHBhcnNpbmdCdWZmZXIu
bGVuZ3RoUmVtYWluaW5nKCk7CisgICAgfSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdDEsIDJ1KTsK
KworICAgIGF1dG8gdXRmMTYgPSB1dGYxNlN0cmluZyh1IvCfmI3wn5iJ8J+ZgyIpOworICAgIGF1
dG8gcmVzdWx0MiA9IFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHV0ZjE2LCBbXShhdXRv
IHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHBhcnNpbmdCdWZmZXIuYXRF
bmQoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1Jl
bWFpbmluZygpKTsKKyAgICAgICAgRVhQRUNUX0VRKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWlu
aW5nKCksIDZ1KTsKKyAgICAgICAgRVhQRUNUX0VRKCpwYXJzaW5nQnVmZmVyLCAweEQ4M0QpOwor
CisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgcmV0dXJuIHBhcnNpbmdCdWZmZXIu
bGVuZ3RoUmVtYWluaW5nKCk7CisgICAgfSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdDIsIDV1KTsK
K30KKworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402746</attachid>
            <date>2020-06-25 10:29:32 -0700</date>
            <delta_ts>2020-06-25 13:27:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213588-20200625102931.patch</filename>
            <type>text/plain</type>
            <size>21357</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM1MTcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDIwLTA2LTI0ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcgdGVtcGxhdGVkIHN0cmluZyB0eXBlIHRv
IGhlbHAgd3JpdGUgbW9yZSBpZGlvbWF0aWMgcGFyc2luZyBjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM1ODgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEludHJvZHVjZSBTdHJpbmdQ
YXJzaW5nQnVmZmVyPENoYXJUeXBlPiwgYSBuZXcgY2xhc3MgaW4gdGhlIFN0cmluZyBjbGFzcyBm
YW1pbHkKKyAgICAgICAgZGVzaWduZWQgdG8gYmUgdXNlZCBieSBwYXJzaW5nIGNvZGUuIEl0J3Mg
ZGVzaWduZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBoZWxwZXIKKyAgICAgICAgZnVuY3Rpb24sIHJl
YWRDaGFyYWN0ZXJzRm9yUGFyc2luZywgYW5kIGZvciB0aGUgdXNlciB0byB3cml0ZSB0aGUgcGFy
c2luZyBjb2RlCisgICAgICAgIGluIGEgd2F5IHRoYXQgd2lsbCB3b3JrIGZvciBib3RoIGxhdGlu
MSBhbmQgVVRGLTE2IGlucHV0cy4gTW9zdCB1c2FnZSB3aWxsIGxpa2VseQorICAgICAgICBmb2xs
b3cgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyBmb3JtCisgICAgICAgIAorICAgICAgICB7
CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIGF1dG8gcGFyc2VkUmVzdWx0ID0gcmVhZENo
YXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZ2lzaE9iamVjdFRvUGFyc2UsIFtdKGF1dG8gcGFyc2lu
Z0J1ZmZlcikgeworICAgICAgICAgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKnBhcnNpbmdCdWZm
ZXIgPT0gZm9vKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC4uLgorCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlZFJlc3VsdAorICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAuLi4KKyAgICAgICAgfQorCisgICAgICAgIEFQSSB0ZXN0cyBhZGRlZC4KKworICAgICAg
ICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgQWRkIFN0cmluZ1BhcnNpbmdCdWZmZXIuaAorCisgICAgICAgICog
d3RmL0ZvcndhcmQuaDoKKyAgICAgICAgRm9yd2FyZCBkZWNsYXJlIFN0cmluZ1BhcnNpbmdCdWZm
ZXIuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg6IAorICAgICAg
ICBBZGRlZC4KKwogMjAyMC0wNi0yNCAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+CiAK
ICAgICAgICAgV2Ugc2hvdWxkIHJlc3VycmVjdCB0aGUgb2xkZXIgcGF0Y2ggdGhhdCBjb2xsZWN0
cyBzb21lIHN0YXRpc3RpY3Mgb2Ygd2ViIEFQSSBjYWxscwpJbmRleDogU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjM1MTcpCisrKyBTb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NTUsNiAr
NDU1LDcgQEAKIAkJN0MxMzc5NDIyMjIzMjZENTAwRDdBODI0IC8qIGllZWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gaWVlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEzNzk0MzIyMjMy
NkQ1MDBEN0E4MjQgLyogUkVBRE1FLm1kICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gbmV0LmRhcmluZ2ZpcmViYWxsLm1hcmtkb3duOyBwYXRoID0gUkVB
RE1FLm1kOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNBNDVEMDIzQ0ZBODgzMDA3
REUzQTYgLyogUGxhdGZvcm1IYXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBsYXRmb3JtSGF2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzNCMDZFODI0
QTExNkU2MDBGRDI2QzcgLyogU3RyaW5nUGFyc2luZ0J1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJpbmdQYXJzaW5nQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDM0Y3
MjM5MUQ3ODgxMTkwMDY3NEUyNiAvKiBCcmlnYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEJyaWdhbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0MjMw
NzEyM0NFMkQ4QTAwNkU1NEQwIC8qIFBsYXRmb3JtRW5hYmxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtRW5hYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDNDIzMDcyMjNDRTJEOEEwMDZFNTREMCAvKiBQbGF0Zm9ybUNQVS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNQVS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTQwMSw2ICsxNDAyLDcgQEAKIAkJCQlBOEE0NzMyODE1MUE4MjVCMDA0
MTIzRkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQThBNDczMjkxNTFBODI1QjAwNDEyM0ZG
IC8qIFN0cmluZ0ltcGwuaCAqLywKIAkJCQlBOEE0NzMyQTE1MUE4MjVCMDA0MTIzRkYgLyogU3Ry
aW5nT3BlcmF0b3JzLmggKi8sCisJCQkJN0MzQjA2RTgyNEExMTZFNjAwRkQyNkM3IC8qIFN0cmlu
Z1BhcnNpbmdCdWZmZXIuaCAqLywKIAkJCQlDRDAwMzYwRDIxNTAxRjc4MDBGNEVENEMgLyogU3Ry
aW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oICovLAogCQkJCTkzRjE5OTNEMTlENzk1OEQwMEMyMzkw
QiAvKiBTdHJpbmdWaWV3LmNwcCAqLywKIAkJCQkxQTZFQjFERjE4N0QwQkQzMDAzMDEyNkYgLyog
U3RyaW5nVmlldy5oICovLApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI2MzUx
NykKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0z
MzksNiArMzM5LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIHRleHQvU3RyaW5nSGFz
aGVyLmgKICAgICB0ZXh0L1N0cmluZ0ltcGwuaAogICAgIHRleHQvU3RyaW5nT3BlcmF0b3JzLmgK
KyAgICB0ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaAogICAgIHRleHQvU3RyaW5nVG9JbnRlZ2Vy
Q29udmVyc2lvbi5oCiAgICAgdGV4dC9TdHJpbmdWaWV3LmgKICAgICB0ZXh0L1N5bWJvbEltcGwu
aApJbmRleDogU291cmNlL1dURi93dGYvRm9yd2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0ZvcndhcmQuaAkocmV2aXNpb24gMjYzNTE3KQorKysgU291cmNlL1dURi93dGYvRm9y
d2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCA9IGFsaWdub2YoVCkKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0g
RHVtYlB0clRyYWl0czxUPj4gY2xhc3MgUmVmOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgPSBEdW1iUHRyVHJhaXRzPFQ+PiBjbGFzcyBSZWZQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4g
Y2xhc3MgU3RyaW5nQnVmZmVyOwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFN0cmluZ1BhcnNp
bmdCdWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lkPiBjbGFzcyBTdHJp
bmdUeXBlQWRhcHRlcjsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBVbmlxdWVSZWY7CiB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgVmFyaWFudDsKQEAgLTEyMiw2ICsxMjMsNyBAQCB1c2lu
ZyBXVEY6OlN0cmluZzsKIHVzaW5nIFdURjo6U3RyaW5nQnVmZmVyOwogdXNpbmcgV1RGOjpTdHJp
bmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJbXBsOwordXNpbmcgV1RGOjpTdHJpbmdQYXJz
aW5nQnVmZmVyOwogdXNpbmcgV1RGOjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpUZXh0UG9zaXRp
b247CiB1c2luZyBXVEY6OlRleHRTdHJlYW07CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ1BhcnNpbmdCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ1BhcnNpbmdCdWZmZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ1BhcnNpbmdCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9MQ2hhci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbW1v
bi5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFN0
cmluZ1BhcnNpbmdCdWZmZXIgZmluYWwgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSBUOworCisgICAgY29uc3RleHByIFN0
cmluZ1BhcnNpbmdCdWZmZXIoKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgU3RyaW5n
UGFyc2luZ0J1ZmZlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCisgICAgICAgIDogbV9wb3NpdGlvbiB7IGNoYXJhY3RlcnMgfQorICAgICAgICAsIG1f
ZW5kIHsgY2hhcmFjdGVycyArIGxlbmd0aCB9CisgICAgeworICAgIH0KKworICAgIGNvbnN0ZXhw
ciBTdHJpbmdQYXJzaW5nQnVmZmVyKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIGNv
bnN0IENoYXJhY3RlclR5cGUqIGVuZCkKKyAgICAgICAgOiBtX3Bvc2l0aW9uIHsgY2hhcmFjdGVy
cyB9CisgICAgICAgICwgbV9lbmQgeyBlbmQgfQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdGV4
cHIgY29uc3QgQ2hhcmFjdGVyVHlwZSogcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0
aW9uOyB9CisgICAgY29uc3RleHByIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZW5kOyB9CisKKyAgICBjb25zdGV4cHIgYm9vbCBoYXNDaGFyYWN0ZXJzUmVtYWlu
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbiA8IG1fZW5kOyB9CisgICAgY29uc3RleHBy
IGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uID09IG1fZW5kOyB9CisKKyAg
ICBjb25zdGV4cHIgdW5zaWduZWQgbGVuZ3RoUmVtYWluaW5nKCkgY29uc3QgeyByZXR1cm4gbV9l
bmQgLSBtX3Bvc2l0aW9uOyB9CisgICAgU3RyaW5nVmlldyBzdHJpbmdWaWV3T2ZDaGFyYWN0ZXJz
UmVtYWluaW5nKCkgeyByZXR1cm4geyBtX3Bvc2l0aW9uLCBsZW5ndGhSZW1haW5pbmcoKSB9OyB9
CisKKyAgICBDaGFyYWN0ZXJUeXBlIG9wZXJhdG9yW10odW5zaWduZWQgaSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX3Bvc2l0aW9uICsgaSA8IG1fZW5kKTsKKyAgICAgICAgcmV0dXJuIG1fcG9z
aXRpb25baV07CisgICAgfQorCisgICAgY29uc3RleHByIENoYXJhY3RlclR5cGUgb3BlcmF0b3Iq
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqbV9wb3NpdGlvbjsKKyAgICB9CisKKyAg
ICBjb25zdGV4cHIgdm9pZCBhZHZhbmNlKCkKKyAgICB7CisgICAgICAgICsrbV9wb3NpdGlvbjsK
KyAgICB9CisKKyAgICBjb25zdGV4cHIgdm9pZCBhZHZhbmNlQnkodW5zaWduZWQgcGxhY2VzKQor
ICAgIHsKKyAgICAgICAgbV9wb3NpdGlvbiArPSBwbGFjZXM7CisgICAgfQorCisgICAgY29uc3Rl
eHByIFN0cmluZ1BhcnNpbmdCdWZmZXImIG9wZXJhdG9yKysoKQorICAgIHsKKyAgICAgICAgYWR2
YW5jZSgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgY29uc3RleHByIFN0
cmluZ1BhcnNpbmdCdWZmZXIgb3BlcmF0b3IrKyhpbnQpCisgICAgeworICAgICAgICBhdXRvIHJl
c3VsdCA9ICp0aGlzOworICAgICAgICArKygqdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgY29uc3RleHByIFN0cmluZ1BhcnNpbmdCdWZmZXImIG9wZXJhdG9yKz0o
aW50IHBsYWNlcykKKyAgICB7CisgICAgICAgIGFkdmFuY2VCeShwbGFjZXMpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IENoYXJhY3RlclR5cGUq
IG1fcG9zaXRpb24geyBudWxscHRyIH07CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogbV9lbmQg
eyBudWxscHRyIH07Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlLCB0eXBlbmFt
ZSBGdW5jdGlvbj4gZGVjbHR5cGUoYXV0bykgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKFN0cmlu
Z1R5cGUmJiBzdHJpbmcsIEZ1bmN0aW9uJiYgZnVuY3RvcikKK3sKKyAgICBpZiAoc3RyaW5nLmlz
OEJpdCgpKQorICAgICAgICByZXR1cm4gZnVuY3RvcihTdHJpbmdQYXJzaW5nQnVmZmVyIHsgc3Ry
aW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSB9KTsKKyAgICByZXR1cm4gZnVuY3Rv
cihTdHJpbmdQYXJzaW5nQnVmZmVyIHsgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVu
Z3RoKCkgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlN0cmluZ1Bh
cnNpbmdCdWZmZXI7Cit1c2luZyBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZzsKSW5kZXg6
IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDI2MzUxNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2
IEBACisyMDIwLTA2LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgYSBuZXcgdGVtcGxhdGVkIHN0cmluZyB0eXBlIHRvIGhlbHAgd3JpdGUgbW9yZSBpZGlv
bWF0aWMgcGFyc2luZyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTM1ODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nUGFyc2luZ0J1ZmZlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIEFkZGVkIG5ldyB0
ZXN0cyBmb3IgbmV3IGNsYXNzLgorCiAyMDIwLTA2LTI1ICBBYWthc2ggSmFpbiAgPGFha2FzaF9q
YWluQGFwcGxlLmNvbT4KIAogICAgICAgICBbZXdzXSBJbXByb3ZlIGhhbmRsaW5nIG9mIGludmFs
aWQgY2hhbmdlbG9nCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDI2MzUxNykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTg5LDYgKzg5LDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgIFRlc3RzL1dU
Ri9TdHJpbmdIYXNoZXIuY3BwCiAgICAgVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwCiAgICAgVGVz
dHMvV1RGL1N0cmluZ09wZXJhdG9ycy5jcHAKKyAgICBUZXN0cy9XVEYvU3RyaW5nUGFyc2luZ0J1
ZmZlci5jcHAKICAgICBUZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKICAgICBUZXN0cy9XVEYvU3lu
Y2hyb25pemVkRml4ZWRRdWV1ZS5jcHAKICAgICBUZXN0cy9XVEYvVGV4dEJyZWFrSXRlcmF0b3Iu
Y3BwCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjYzNTE3KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTc0Myw2ICs3NDMsNyBAQAogCQk3Q0NFN0YyRTFBNDExQjEwMDA0
NDdDNEMgLyogV0tCcm93c2luZ0NvbnRleHRHcm91cFRlc3QubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzNDNEM3RDE0NTg3QUE2MDAyNUZCNjIgLyog
V0tCcm93c2luZ0NvbnRleHRHcm91cFRlc3QubW0gKi87IH07CiAJCTdDQ0U3RjJGMUE0MTFCMTAw
MDQ0N0M0QyAvKiBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZVRlc3QubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzNDNEM3MDE0NTc1QjZBMDAy
NUZCNjIgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVUZXN0Lm1tICovOyB9OwogCQk3
Q0Q0QzI2RTFFMkMwRTZFMDA5Mjk0NzAgLyogU3RyaW5nQ29uY2F0ZW5hdGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NENEMyNkMxRTJDMEU2RTAw
OTI5NDcwIC8qIFN0cmluZ0NvbmNhdGVuYXRlLmNwcCAqLzsgfTsKKwkJN0NENzBDNEYyNEE0MzZF
RTAwRTYxMDQwIC8qIFN0cmluZ1BhcnNpbmdCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NENzBDNEUyNEE0MzZFRTAwRTYxMDQwIC8qIFN0
cmluZ1BhcnNpbmdCdWZmZXIuY3BwICovOyB9OwogCQk3Q0VCNjJBQjIyMzYwOURFMDA2OUNCQjAg
LyogSXRlcmF0b3JSYW5nZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3Q0VCNjJBOTIyMzYwODZDMDA2OUNCQjAgLyogSXRlcmF0b3JSYW5nZS5jcHAg
Ki87IH07CiAJCTdDRUZBOTY2MUFDMEI5RTIwMEI5MTBGRCAvKiBfV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0NFRkE5NjQxQUMwQjlFMjAwQjkxMEZEIC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUubW0gKi87IH07CiAJCTdDRkJDQUU1MTc0MzIzOEYwMEIyQkZDRiAvKiBXaWxsTG9hZF9CdW5k
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NG
QkNBRTMxNzQzMjM4RTAwQjJCRkNGIC8qIFdpbGxMb2FkX0J1bmRsZS5jcHAgKi87IH07CkBAIC0y
MjcyLDYgKzIyNzMsNyBAQAogCQk3Q0NFN0VBMzFBNDExNUNCMDA0NDdDNEMgLyogVGVzdFdlYktp
dEFQSUxpYnJhcnkueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gVGVzdFdlYktpdEFQSUxpYnJhcnku
eGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDBENUFBMUQ1NTM0REUw
MDBDQzlFMSAvKiBWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Q0QzI2QzFF
MkMwRTZFMDA5Mjk0NzAgLyogU3RyaW5nQ29uY2F0ZW5hdGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nQ29uY2F0ZW5hdGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3Q0Q3MEM0RTI0QTQzNkVFMDBFNjEwNDAgLyogU3RyaW5nUGFyc2lu
Z0J1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdQYXJzaW5nQnVmZmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFQjYyQTkyMjM2MDg2QzAwNjlDQkIwIC8q
IEl0ZXJhdG9yUmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXRlcmF0b3JSYW5nZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRUZBOTY0MUFDMEI5RTIwMEI5MTBGRCAv
KiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGQkNBREQxNzQzMjM0RjAwQjJCRkNGIC8qIFdpbGxM
b2FkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdpbGxMb2FkLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQwNzksNiArNDA4MSw3IEBACiAJCQkJ
OTNBQkE4MDgxNkREQUI5MTAwMkRCMkZBIC8qIFN0cmluZ0hhc2hlci5jcHAgKi8sCiAJCQkJMjZG
MUI0NDMxNUNBNDM0RjAwRDFFNEJGIC8qIFN0cmluZ0ltcGwuY3BwICovLAogCQkJCUMwMTM2M0M3
MTNDMzk5NzMwMEVGMzk2NCAvKiBTdHJpbmdPcGVyYXRvcnMuY3BwICovLAorCQkJCTdDRDcwQzRF
MjRBNDM2RUUwMEU2MTA0MCAvKiBTdHJpbmdQYXJzaW5nQnVmZmVyLmNwcCAqLywKIAkJCQk3Qzc0
RDQyRDE4ODIyOEYzMDBFNUVENTcgLyogU3RyaW5nVmlldy5jcHAgKi8sCiAJCQkJNTU5N0Y4MzQx
RDk1OTZDODAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwICovLAogCQkJCTkz
MjlBQTI4MURFM0Y4MUUwMDNBQkQwNyAvKiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgKi8sCkBAIC00
NzkxLDYgKzQ3OTQsNyBAQAogCQkJCTdDODNERjM2MUQwQTU5MEMwMEZFQkNGMyAvKiBTdHJpbmdI
YXNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMzcxRDBBNTkwQzAwRkVCQ0YzIC8q
IFN0cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMzgxRDBBNTkwQzAwRkVC
Q0YzIC8qIFN0cmluZ09wZXJhdG9ycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3Q0Q3MEM0RjI0
QTQzNkVFMDBFNjEwNDAgLyogU3RyaW5nUGFyc2luZ0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3QzgzREYzQTFEMEE1OTBDMDBGRUJDRjMgLyogU3RyaW5nVmlldy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1NTk3RjgzNjFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRR
dWV1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREY0MDFEMEE1OTBDMDBGRUJDRjMgLyog
VGVzdHNDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvU3RyaW5nUGFyc2luZ0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nUGFyc2luZ0J1ZmZlci5jcHAJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nUGFyc2luZ0J1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXVEZTdHJpbmdVdGlsaXRpZXMuaCIKKwor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdWaWV3Lmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworVEVTVChX
VEYsIFN0cmluZ1BhcnNpbmdCdWZmZXJFbXB0eSkKK3sKKyAgICBTdHJpbmdQYXJzaW5nQnVmZmVy
PExDaGFyPiBwYXJzaW5nQnVmZmVyOworCisgICAgRVhQRUNUX1RSVUUocGFyc2luZ0J1ZmZlci5h
dEVuZCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVt
YWluaW5nKCkpOworICAgIEVYUEVDVF9FUShwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCksIG51bGxw
dHIpOworICAgIEVYUEVDVF9FUShwYXJzaW5nQnVmZmVyLmVuZCgpLCBudWxscHRyKTsKKyAgICBF
WFBFQ1RfRVEocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSwgMHUpOworCit9CisKK1RF
U1QoV1RGLCBTdHJpbmdQYXJzaW5nQnVmZmVySW5pdGlhbCkKK3sKKyAgICBTdHJpbmdWaWV3IHN0
cmluZyB7ICJhYmMiIH07CisgICAgU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4gcGFyc2luZ0J1
ZmZlciB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfTsKKworICAgIEVY
UEVDVF9GQUxTRShwYXJzaW5nQnVmZmVyLmF0RW5kKCkpOworICAgIEVYUEVDVF9UUlVFKHBhcnNp
bmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKTsKKyAgICBFWFBFQ1RfRVEocGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpLCBzdHJpbmcuY2hhcmFjdGVyczgoKSk7CisgICAgRVhQRUNUX0VR
KHBhcnNpbmdCdWZmZXIuZW5kKCksIHN0cmluZy5jaGFyYWN0ZXJzOCgpICsgc3RyaW5nLmxlbmd0
aCgpKTsKKyAgICBFWFBFQ1RfRVEocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSwgM3Up
OworICAgIEVYUEVDVF9FUSgqcGFyc2luZ0J1ZmZlciwgJ2EnKTsKK30KKworVEVTVChXVEYsIFN0
cmluZ1BhcnNpbmdCdWZmZXJBZHZhbmNlKQoreworICAgIFN0cmluZ1ZpZXcgc3RyaW5nIHsgImFi
YyIgfTsKKyAgICBTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiBwYXJzaW5nQnVmZmVyIHsgc3Ry
aW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSB9OworCisgICAgcGFyc2luZ0J1ZmZl
ci5hZHZhbmNlKCk7CisgICAgRVhQRUNUX0ZBTFNFKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSk7Cisg
ICAgRVhQRUNUX1RSVUUocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpOwor
ICAgIEVYUEVDVF9FUShwYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygpLCAydSk7CisgICAg
RVhQRUNUX0VRKCpwYXJzaW5nQnVmZmVyLCAnYicpOworfQorCitURVNUKFdURiwgU3RyaW5nUGFy
c2luZ0J1ZmZlckFkdmFuY2VCeSkKK3sKKyAgICBTdHJpbmdWaWV3IHN0cmluZyB7ICJhYmMiIH07
CisgICAgU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4gcGFyc2luZ0J1ZmZlciB7IHN0cmluZy5j
aGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfTsKKworICAgIHBhcnNpbmdCdWZmZXIuYWR2
YW5jZUJ5KDIpOworICAgIEVYUEVDVF9GQUxTRShwYXJzaW5nQnVmZmVyLmF0RW5kKCkpOworICAg
IEVYUEVDVF9UUlVFKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKTsKKyAg
ICBFWFBFQ1RfRVEocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSwgMXUpOworICAgIEVY
UEVDVF9FUSgqcGFyc2luZ0J1ZmZlciwgJ2MnKTsKK30KKworVEVTVChXVEYsIFN0cmluZ1BhcnNp
bmdCdWZmZXJQcmVJbmNyZW1lbnQpCit7CisgICAgU3RyaW5nVmlldyBzdHJpbmcgeyAiYWJjIiB9
OworICAgIFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+IHBhcnNpbmdCdWZmZXIgeyBzdHJpbmcu
Y2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIH07CisKKyAgICBhdXRvIHByZUluY3JlbWVu
dGVkUGFyc2luZ0J1ZmZlciA9ICsrcGFyc2luZ0J1ZmZlcjsKKyAgICBFWFBFQ1RfRkFMU0UocGFy
c2luZ0J1ZmZlci5hdEVuZCgpKTsKKyAgICBFWFBFQ1RfVFJVRShwYXJzaW5nQnVmZmVyLmhhc0No
YXJhY3RlcnNSZW1haW5pbmcoKSk7CisgICAgRVhQRUNUX0VRKHBhcnNpbmdCdWZmZXIubGVuZ3Ro
UmVtYWluaW5nKCksIDJ1KTsKKyAgICBFWFBFQ1RfRVEoKnBhcnNpbmdCdWZmZXIsICdiJyk7Cisg
ICAgRVhQRUNUX0ZBTFNFKHByZUluY3JlbWVudGVkUGFyc2luZ0J1ZmZlci5hdEVuZCgpKTsKKyAg
ICBFWFBFQ1RfVFJVRShwcmVJbmNyZW1lbnRlZFBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1Jl
bWFpbmluZygpKTsKKyAgICBFWFBFQ1RfRVEocHJlSW5jcmVtZW50ZWRQYXJzaW5nQnVmZmVyLmxl
bmd0aFJlbWFpbmluZygpLCAydSk7CisgICAgRVhQRUNUX0VRKCpwcmVJbmNyZW1lbnRlZFBhcnNp
bmdCdWZmZXIsICdiJyk7Cit9CisKK1RFU1QoV1RGLCBTdHJpbmdQYXJzaW5nQnVmZmVyUG9zdElu
Y3JlbWVudCkKK3sKKyAgICBTdHJpbmdWaWV3IHN0cmluZyB7ICJhYmMiIH07CisgICAgU3RyaW5n
UGFyc2luZ0J1ZmZlcjxMQ2hhcj4gcGFyc2luZ0J1ZmZlciB7IHN0cmluZy5jaGFyYWN0ZXJzOCgp
LCBzdHJpbmcubGVuZ3RoKCkgfTsKKworICAgIGF1dG8gcG9zdEluY3JlbWVudGVkUGFyc2luZ0J1
ZmZlciA9IHBhcnNpbmdCdWZmZXIrKzsKKyAgICBFWFBFQ1RfRkFMU0UocGFyc2luZ0J1ZmZlci5h
dEVuZCgpKTsKKyAgICBFWFBFQ1RfVFJVRShwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1h
aW5pbmcoKSk7CisgICAgRVhQRUNUX0VRKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCks
IDJ1KTsKKyAgICBFWFBFQ1RfRVEoKnBhcnNpbmdCdWZmZXIsICdiJyk7CisgICAgRVhQRUNUX0ZB
TFNFKHBvc3RJbmNyZW1lbnRlZFBhcnNpbmdCdWZmZXIuYXRFbmQoKSk7CisgICAgRVhQRUNUX1RS
VUUocG9zdEluY3JlbWVudGVkUGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkp
OworICAgIEVYUEVDVF9FUShwb3N0SW5jcmVtZW50ZWRQYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFp
bmluZygpLCAzdSk7CisgICAgRVhQRUNUX0VRKCpwb3N0SW5jcmVtZW50ZWRQYXJzaW5nQnVmZmVy
LCAnYScpOworfQorCitURVNUKFdURiwgU3RyaW5nUGFyc2luZ0J1ZmZlclBsdXNFcXVhbHMpCit7
CisgICAgU3RyaW5nVmlldyBzdHJpbmcgeyAiYWJjIiB9OworICAgIFN0cmluZ1BhcnNpbmdCdWZm
ZXI8TENoYXI+IHBhcnNpbmdCdWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxl
bmd0aCgpIH07CisKKyAgICBwYXJzaW5nQnVmZmVyICs9IDI7CisgICAgRVhQRUNUX0ZBTFNFKHBh
cnNpbmdCdWZmZXIuYXRFbmQoKSk7CisgICAgRVhQRUNUX1RSVUUocGFyc2luZ0J1ZmZlci5oYXND
aGFyYWN0ZXJzUmVtYWluaW5nKCkpOworICAgIEVYUEVDVF9FUShwYXJzaW5nQnVmZmVyLmxlbmd0
aFJlbWFpbmluZygpLCAxdSk7CisgICAgRVhQRUNUX0VRKCpwYXJzaW5nQnVmZmVyLCAnYycpOwor
fQorCitURVNUKFdURiwgU3RyaW5nUGFyc2luZ0J1ZmZlckVuZCkKK3sKKyAgICBTdHJpbmdWaWV3
IHN0cmluZyB7ICJhYmMiIH07CisgICAgU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4gcGFyc2lu
Z0J1ZmZlciB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfTsKKworICAg
ICsrcGFyc2luZ0J1ZmZlcjsKKyAgICBFWFBFQ1RfRkFMU0UocGFyc2luZ0J1ZmZlci5hdEVuZCgp
KTsKKyAgICBFWFBFQ1RfVFJVRShwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmco
KSk7CisgICAgRVhQRUNUX0VRKCpwYXJzaW5nQnVmZmVyLCAnYicpOworCisgICAgKytwYXJzaW5n
QnVmZmVyOworICAgIEVYUEVDVF9GQUxTRShwYXJzaW5nQnVmZmVyLmF0RW5kKCkpOworICAgIEVY
UEVDVF9UUlVFKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKTsKKyAgICBF
WFBFQ1RfRVEoKnBhcnNpbmdCdWZmZXIsICdjJyk7CisKKyAgICArK3BhcnNpbmdCdWZmZXI7Cisg
ICAgRVhQRUNUX1RSVUUocGFyc2luZ0J1ZmZlci5hdEVuZCgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
cGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpOworfQorCitURVNUKFdURiwg
U3RyaW5nUGFyc2luZ0J1ZmZlclN1YnNjcmlwdCkKK3sKKyAgICBTdHJpbmdWaWV3IHN0cmluZyB7
ICJhYmMiIH07CisgICAgU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4gcGFyc2luZ0J1ZmZlciB7
IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfTsKKyAgICAKKyAgICArK3Bh
cnNpbmdCdWZmZXI7CisgICAgRVhQRUNUX0VRKHBhcnNpbmdCdWZmZXJbMF0sICdiJyk7CisgICAg
RVhQRUNUX0VRKHBhcnNpbmdCdWZmZXJbMV0sICdjJyk7Cit9CisKK1RFU1QoV1RGLCBTdHJpbmdQ
YXJzaW5nQnVmZmVyU3RyaW5nVmlldykKK3sKKyAgICBTdHJpbmdWaWV3IHN0cmluZyB7ICJhYmMi
IH07CisgICAgU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4gcGFyc2luZ0J1ZmZlciB7IHN0cmlu
Zy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfTsKKworICAgICsrcGFyc2luZ0J1ZmZl
cjsKKyAgICBhdXRvIHZpZXdSZW1haW5pbmcgPSBwYXJzaW5nQnVmZmVyLnN0cmluZ1ZpZXdPZkNo
YXJhY3RlcnNSZW1haW5pbmcoKTsKKyAgICBFWFBFQ1RfRVEodmlld1JlbWFpbmluZy5sZW5ndGgo
KSwgMnUpOworICAgIEVYUEVDVF9FUSh2aWV3UmVtYWluaW5nWzBdLCAnYicpOworICAgIEVYUEVD
VF9FUSh2aWV3UmVtYWluaW5nWzFdLCAnYycpOworfQorCitURVNUKFdURiwgU3RyaW5nUGFyc2lu
Z0J1ZmZlclJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZykKK3sKKyAgICBhdXRvIGxhdGluMSA9IFN0
cmluZ1ZpZXcgeyAiYWJjIiB9OworICAgIGF1dG8gcmVzdWx0MSA9IFdURjo6cmVhZENoYXJhY3Rl
cnNGb3JQYXJzaW5nKGxhdGluMSwgW10oYXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIEVY
UEVDVF9GQUxTRShwYXJzaW5nQnVmZmVyLmF0RW5kKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShw
YXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSk7CisgICAgICAgIEVYUEVDVF9F
UShwYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygpLCAzdSk7CisgICAgICAgIEVYUEVDVF9F
USgqcGFyc2luZ0J1ZmZlciwgJ2EnKTsKKyAgICAKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwor
ICAgICAgICByZXR1cm4gcGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKTsKKyAgICB9KTsK
KyAgICBFWFBFQ1RfRVEocmVzdWx0MSwgMnUpOworCisgICAgYXV0byB1dGYxNiA9IHV0ZjE2U3Ry
aW5nKHUi8J+YjfCfmInwn5mDIik7CisgICAgYXV0byByZXN1bHQyID0gV1RGOjpyZWFkQ2hhcmFj
dGVyc0ZvclBhcnNpbmcodXRmMTYsIFtdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICBF
WFBFQ1RfRkFMU0UocGFyc2luZ0J1ZmZlci5hdEVuZCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
cGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpOworICAgICAgICBFWFBFQ1Rf
RVEocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSwgNnUpOworICAgICAgICBFWFBFQ1Rf
RVEoKnBhcnNpbmdCdWZmZXIsIDB4RDgzRCk7CisKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwor
ICAgICAgICByZXR1cm4gcGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKTsKKyAgICB9KTsK
KyAgICBFWFBFQ1RfRVEocmVzdWx0MiwgNXUpOworfQorCit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402803</attachid>
            <date>2020-06-25 13:27:30 -0700</date>
            <delta_ts>2020-06-25 14:13:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213588-20200625132729.patch</filename>
            <type>text/plain</type>
            <size>21601</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDIwLTA2LTI0ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcgdGVtcGxhdGVkIHN0cmluZyB0eXBlIHRv
IGhlbHAgd3JpdGUgbW9yZSBpZGlvbWF0aWMgcGFyc2luZyBjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM1ODgKKworICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KKyAgICAgICAgCisgICAgICAgIEludHJvZHVjZSBTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJUeXBlPiwgYSBuZXcgY2xhc3MgaW4gdGhlIFN0cmluZyBjbGFzcyBmYW1p
bHkKKyAgICAgICAgZGVzaWduZWQgdG8gYmUgdXNlZCBieSBwYXJzaW5nIGNvZGUuIEl0J3MgZGVz
aWduZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBoZWxwZXIKKyAgICAgICAgZnVuY3Rpb24sIHJlYWRD
aGFyYWN0ZXJzRm9yUGFyc2luZywgYW5kIGZvciB0aGUgdXNlciB0byB3cml0ZSB0aGUgcGFyc2lu
ZyBjb2RlCisgICAgICAgIGluIGEgd2F5IHRoYXQgd2lsbCB3b3JrIGZvciBib3RoIGxhdGluMSBh
bmQgVVRGLTE2IGlucHV0cy4gTW9zdCB1c2FnZSB3aWxsIGxpa2VseQorICAgICAgICBmb2xsb3cg
c29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyBmb3JtCisgICAgICAgIAorICAgICAgICB7Cisg
ICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIGF1dG8gcGFyc2VkUmVzdWx0ID0gcmVhZENoYXJh
Y3RlcnNGb3JQYXJzaW5nKHN0cmluZ2lzaE9iamVjdFRvUGFyc2UsIFtdKGF1dG8gcGFyc2luZ0J1
ZmZlcikgeworICAgICAgICAgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3Rl
cnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKnBhcnNpbmdCdWZmZXIg
PT0gZm9vKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC4uLgorCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlZFJlc3VsdAorICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAuLi4KKyAgICAgICAgfQorCisgICAgICAgIEFQSSB0ZXN0cyBhZGRlZC4KKworICAgICAgICAq
IFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgQWRkIFN0cmluZ1BhcnNpbmdCdWZmZXIuaAorCisgICAgICAgICogd3Rm
L0ZvcndhcmQuaDoKKyAgICAgICAgRm9yd2FyZCBkZWNsYXJlIFN0cmluZ1BhcnNpbmdCdWZmZXIu
CisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg6IAorICAgICAgICBB
ZGRlZC4KKwogMjAyMC0wNi0yNCAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+CiAKICAg
ICAgICAgV2Ugc2hvdWxkIHJlc3VycmVjdCB0aGUgb2xkZXIgcGF0Y2ggdGhhdCBjb2xsZWN0cyBz
b21lIHN0YXRpc3RpY3Mgb2Ygd2ViIEFQSSBjYWxscwpJbmRleDogU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NTUsNiArNDU1
LDcgQEAKIAkJN0MxMzc5NDIyMjIzMjZENTAwRDdBODI0IC8qIGllZWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gaWVlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEzNzk0MzIyMjMyNkQ1
MDBEN0E4MjQgLyogUkVBRE1FLm1kICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gbmV0LmRhcmluZ2ZpcmViYWxsLm1hcmtkb3duOyBwYXRoID0gUkVBRE1F
Lm1kOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNBNDVEMDIzQ0ZBODgzMDA3REUz
QTYgLyogUGxhdGZvcm1IYXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBs
YXRmb3JtSGF2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzNCMDZFODI0QTEx
NkU2MDBGRDI2QzcgLyogU3RyaW5nUGFyc2luZ0J1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJp
bmdQYXJzaW5nQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDM0Y3MjM5
MUQ3ODgxMTkwMDY3NEUyNiAvKiBCcmlnYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJyaWdhbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0MjMwNzEy
M0NFMkQ4QTAwNkU1NEQwIC8qIFBsYXRmb3JtRW5hYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsYXRmb3JtRW5hYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDNDIzMDcyMjNDRTJEOEEwMDZFNTREMCAvKiBQbGF0Zm9ybUNQVS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNQVS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTQwMSw2ICsxNDAyLDcgQEAKIAkJCQlBOEE0NzMyODE1MUE4MjVCMDA0MTIz
RkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQThBNDczMjkxNTFBODI1QjAwNDEyM0ZGIC8q
IFN0cmluZ0ltcGwuaCAqLywKIAkJCQlBOEE0NzMyQTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5n
T3BlcmF0b3JzLmggKi8sCisJCQkJN0MzQjA2RTgyNEExMTZFNjAwRkQyNkM3IC8qIFN0cmluZ1Bh
cnNpbmdCdWZmZXIuaCAqLywKIAkJCQlDRDAwMzYwRDIxNTAxRjc4MDBGNEVENEMgLyogU3RyaW5n
VG9JbnRlZ2VyQ29udmVyc2lvbi5oICovLAogCQkJCTkzRjE5OTNEMTlENzk1OEQwMEMyMzkwQiAv
KiBTdHJpbmdWaWV3LmNwcCAqLywKIAkJCQkxQTZFQjFERjE4N0QwQkQzMDAzMDEyNkYgLyogU3Ry
aW5nVmlldy5oICovLApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI2MzUyMikK
KysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zMzks
NiArMzM5LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIHRleHQvU3RyaW5nSGFzaGVy
LmgKICAgICB0ZXh0L1N0cmluZ0ltcGwuaAogICAgIHRleHQvU3RyaW5nT3BlcmF0b3JzLmgKKyAg
ICB0ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaAogICAgIHRleHQvU3RyaW5nVG9JbnRlZ2VyQ29u
dmVyc2lvbi5oCiAgICAgdGV4dC9TdHJpbmdWaWV3LmgKICAgICB0ZXh0L1N5bWJvbEltcGwuaApJ
bmRleDogU291cmNlL1dURi93dGYvRm9yd2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0ZvcndhcmQuaAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dURi93dGYvRm9yd2Fy
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCA9IGFsaWdub2YoVCkKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gRHVt
YlB0clRyYWl0czxUPj4gY2xhc3MgUmVmOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
PSBEdW1iUHRyVHJhaXRzPFQ+PiBjbGFzcyBSZWZQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xh
c3MgU3RyaW5nQnVmZmVyOwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFN0cmluZ1BhcnNpbmdC
dWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lkPiBjbGFzcyBTdHJpbmdU
eXBlQWRhcHRlcjsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBVbmlxdWVSZWY7CiB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLj4gY2xhc3MgVmFyaWFudDsKQEAgLTEyMiw2ICsxMjMsNyBAQCB1c2luZyBX
VEY6OlN0cmluZzsKIHVzaW5nIFdURjo6U3RyaW5nQnVmZmVyOwogdXNpbmcgV1RGOjpTdHJpbmdC
dWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJbXBsOwordXNpbmcgV1RGOjpTdHJpbmdQYXJzaW5n
QnVmZmVyOwogdXNpbmcgV1RGOjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpUZXh0UG9zaXRpb247
CiB1c2luZyBXVEY6OlRleHRTdHJlYW07CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z1BhcnNpbmdCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z1BhcnNpbmdCdWZmZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ1BhcnNpbmdCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9MQ2hhci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbW1vbi5o
PgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFN0cmlu
Z1BhcnNpbmdCdWZmZXIgZmluYWwgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSBUOworCisgICAgY29uc3RleHByIFN0cmlu
Z1BhcnNpbmdCdWZmZXIoKSA9IGRlZmF1bHQ7CisKKyAgICBjb25zdGV4cHIgU3RyaW5nUGFyc2lu
Z0J1ZmZlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
CisgICAgICAgIDogbV9wb3NpdGlvbiB7IGNoYXJhY3RlcnMgfQorICAgICAgICAsIG1fZW5kIHsg
Y2hhcmFjdGVycyArIGxlbmd0aCB9CisgICAgeworICAgICAgICBBU1NFUlQoY2hhcmFjdGVycyB8
fCAhbGVuZ3RoKTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgU3RyaW5nUGFyc2luZ0J1ZmZlcihj
b25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQp
CisgICAgICAgIDogbV9wb3NpdGlvbiB7IGNoYXJhY3RlcnMgfQorICAgICAgICAsIG1fZW5kIHsg
ZW5kIH0KKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VuZCA+PSBtX3Bvc2l0aW9uKTsKKyAgICAg
ICAgQVNTRVJUKCFjaGFyYWN0ZXJzID09ICFlbmQpOworICAgIH0KKworICAgIGNvbnN0ZXhwciBh
dXRvIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorICAgIGNvbnN0ZXhw
ciBhdXRvIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CisKKyAgICBjb25zdGV4cHIgYm9v
bCBoYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbiA8IG1f
ZW5kOyB9CisgICAgY29uc3RleHByIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0
aW9uID09IG1fZW5kOyB9CisKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgbGVuZ3RoUmVtYWluaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9lbmQgLSBtX3Bvc2l0aW9uOyB9CisKKyAgICBTdHJpbmdWaWV3
IHN0cmluZ1ZpZXdPZkNoYXJhY3RlcnNSZW1haW5pbmcoKSB7IHJldHVybiB7IG1fcG9zaXRpb24s
IGxlbmd0aFJlbWFpbmluZygpIH07IH0KKworICAgIENoYXJhY3RlclR5cGUgb3BlcmF0b3JbXSh1
bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcG9zaXRpb24gKyBpIDwgbV9lbmQp
OworICAgICAgICByZXR1cm4gbV9wb3NpdGlvbltpXTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIg
Q2hhcmFjdGVyVHlwZSBvcGVyYXRvciooKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
cG9zaXRpb24gPCBtX2VuZCk7CisgICAgICAgIHJldHVybiAqbV9wb3NpdGlvbjsKKyAgICB9CisK
KyAgICBjb25zdGV4cHIgdm9pZCBhZHZhbmNlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Bv
c2l0aW9uIDwgbV9lbmQpOworICAgICAgICArK21fcG9zaXRpb247CisgICAgfQorCisgICAgY29u
c3RleHByIHZvaWQgYWR2YW5jZUJ5KHVuc2lnbmVkIHBsYWNlcykKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX3Bvc2l0aW9uIDw9IG1fZW5kKTsKKyAgICAgICAgQVNTRVJUKG1fcG9zaXRpb24gKyBw
bGFjZXMgPD0gbV9lbmQpOworICAgICAgICBtX3Bvc2l0aW9uICs9IHBsYWNlczsKKyAgICB9CisK
KyAgICBjb25zdGV4cHIgU3RyaW5nUGFyc2luZ0J1ZmZlciYgb3BlcmF0b3IrKygpCisgICAgewor
ICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBj
b25zdGV4cHIgU3RyaW5nUGFyc2luZ0J1ZmZlciBvcGVyYXRvcisrKGludCkKKyAgICB7CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gKnRoaXM7CisgICAgICAgICsrKnRoaXM7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgY29uc3RleHByIFN0cmluZ1BhcnNpbmdCdWZmZXImIG9w
ZXJhdG9yKz0oaW50IHBsYWNlcykKKyAgICB7CisgICAgICAgIGFkdmFuY2VCeShwbGFjZXMpOwor
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IENoYXJh
Y3RlclR5cGUqIG1fcG9zaXRpb24geyBudWxscHRyIH07CisgICAgY29uc3QgQ2hhcmFjdGVyVHlw
ZSogbV9lbmQgeyBudWxscHRyIH07Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBl
LCB0eXBlbmFtZSBGdW5jdGlvbj4gZGVjbHR5cGUoYXV0bykgcmVhZENoYXJhY3RlcnNGb3JQYXJz
aW5nKFN0cmluZ1R5cGUmJiBzdHJpbmcsIEZ1bmN0aW9uJiYgZnVuY3RvcikKK3sKKyAgICBpZiAo
c3RyaW5nLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gZnVuY3RvcihTdHJpbmdQYXJzaW5nQnVm
ZmVyIHsgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSB9KTsKKyAgICByZXR1
cm4gZnVuY3RvcihTdHJpbmdQYXJzaW5nQnVmZmVyIHsgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBz
dHJpbmcubGVuZ3RoKCkgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6
OlN0cmluZ1BhcnNpbmdCdWZmZXI7Cit1c2luZyBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2lu
ZzsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI2MzUyMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE2IEBACisyMDIwLTA2LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgYSBuZXcgdGVtcGxhdGVkIHN0cmluZyB0eXBlIHRvIGhlbHAgd3JpdGUg
bW9yZSBpZGlvbWF0aWMgcGFyc2luZyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM1ODgKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nUGFyc2luZ0J1ZmZlci5j
cHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIEFkZGVk
IG5ldyB0ZXN0cyBmb3IgbmV3IGNsYXNzLgorCiAyMDIwLTA2LTI1ICBBYWthc2ggSmFpbiAgPGFh
a2FzaF9qYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBbZXdzXSBTaGFyZSBtb3JlIGJvdHMgYmV0
d2VlbiBFV1MgYnVpbGRlciBhbmQgdGVzdGVycwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAyNjM1MjIpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw3IEBAIHNldChUZXN0V1RGX1NPVVJD
RVMKICAgICBUZXN0cy9XVEYvU3RyaW5nSGFzaGVyLmNwcAogICAgIFRlc3RzL1dURi9TdHJpbmdJ
bXBsLmNwcAogICAgIFRlc3RzL1dURi9TdHJpbmdPcGVyYXRvcnMuY3BwCisgICAgVGVzdHMvV1RG
L1N0cmluZ1BhcnNpbmdCdWZmZXIuY3BwCiAgICAgVGVzdHMvV1RGL1N0cmluZ1ZpZXcuY3BwCiAg
ICAgVGVzdHMvV1RGL1N5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwCiAgICAgVGVzdHMvV1RGL1Rl
eHRCcmVha0l0ZXJhdG9yLmNwcApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDI2MzUyMikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NDMsNiArNzQzLDcgQEAKIAkJN0ND
RTdGMkUxQTQxMUIxMDAwNDQ3QzRDIC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBUZXN0Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzQzRDN0QxNDU4
N0FBNjAwMjVGQjYyIC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBUZXN0Lm1tICovOyB9OwogCQk3
Q0NFN0YyRjFBNDExQjEwMDA0NDdDNEMgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVU
ZXN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMz
QzRDNzAxNDU3NUI2QTAwMjVGQjYyIC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlVGVz
dC5tbSAqLzsgfTsKIAkJN0NENEMyNkUxRTJDMEU2RTAwOTI5NDcwIC8qIFN0cmluZ0NvbmNhdGVu
YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
RDRDMjZDMUUyQzBFNkUwMDkyOTQ3MCAvKiBTdHJpbmdDb25jYXRlbmF0ZS5jcHAgKi87IH07CisJ
CTdDRDcwQzRGMjRBNDM2RUUwMEU2MTA0MCAvKiBTdHJpbmdQYXJzaW5nQnVmZmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDcwQzRFMjRBNDM2
RUUwMEU2MTA0MCAvKiBTdHJpbmdQYXJzaW5nQnVmZmVyLmNwcCAqLzsgfTsKIAkJN0NFQjYyQUIy
MjM2MDlERTAwNjlDQkIwIC8qIEl0ZXJhdG9yUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFQjYyQTkyMjM2MDg2QzAwNjlDQkIwIC8qIEl0
ZXJhdG9yUmFuZ2UuY3BwICovOyB9OwogCQk3Q0VGQTk2NjFBQzBCOUUyMDBCOTEwRkQgLyogX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDRUZBOTY0MUFDMEI5RTIwMEI5MTBGRCAvKiBfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLm1tICovOyB9OwogCQk3Q0ZCQ0FFNTE3NDMyMzhGMDBCMkJGQ0Yg
LyogV2lsbExvYWRfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDRkJDQUUzMTc0MzIzOEUwMEIyQkZDRiAvKiBXaWxsTG9hZF9CdW5kbGUu
Y3BwICovOyB9OwpAQCAtMjI3Miw2ICsyMjczLDcgQEAKIAkJN0NDRTdFQTMxQTQxMTVDQjAwNDQ3
QzRDIC8qIFRlc3RXZWJLaXRBUElMaWJyYXJ5LnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFRlc3RX
ZWJLaXRBUElMaWJyYXJ5LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Q0QwRDVBQTFENTUzNERFMDAwQ0M5RTEgLyogVmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0NENEMyNkMxRTJDMEU2RTAwOTI5NDcwIC8qIFN0cmluZ0NvbmNhdGVuYXRlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ0NvbmNhdGVuYXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NENzBDNEUyNEE0MzZFRTAwRTYxMDQw
IC8qIFN0cmluZ1BhcnNpbmdCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nUGFy
c2luZ0J1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRUI2MkE5MjIz
NjA4NkMwMDY5Q0JCMCAvKiBJdGVyYXRvclJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEl0
ZXJhdG9yUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0VGQTk2NDFB
QzBCOUUyMDBCOTEwRkQgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRkJDQUREMTc0MzIzNEYw
MEIyQkZDRiAvKiBXaWxsTG9hZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXaWxsTG9hZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MDc5LDYg
KzQwODEsNyBAQAogCQkJCTkzQUJBODA4MTZEREFCOTEwMDJEQjJGQSAvKiBTdHJpbmdIYXNoZXIu
Y3BwICovLAogCQkJCTI2RjFCNDQzMTVDQTQzNEYwMEQxRTRCRiAvKiBTdHJpbmdJbXBsLmNwcCAq
LywKIAkJCQlDMDEzNjNDNzEzQzM5OTczMDBFRjM5NjQgLyogU3RyaW5nT3BlcmF0b3JzLmNwcCAq
LywKKwkJCQk3Q0Q3MEM0RTI0QTQzNkVFMDBFNjEwNDAgLyogU3RyaW5nUGFyc2luZ0J1ZmZlci5j
cHAgKi8sCiAJCQkJN0M3NEQ0MkQxODgyMjhGMzAwRTVFRDU3IC8qIFN0cmluZ1ZpZXcuY3BwICov
LAogCQkJCTU1OTdGODM0MUQ5NTk2QzgwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVl
LmNwcCAqLywKIAkJCQk5MzI5QUEyODFERTNGODFFMDAzQUJEMDcgLyogVGV4dEJyZWFrSXRlcmF0
b3IuY3BwICovLApAQCAtNDc5MSw2ICs0Nzk0LDcgQEAKIAkJCQk3QzgzREYzNjFEMEE1OTBDMDBG
RUJDRjMgLyogU3RyaW5nSGFzaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjM3MUQw
QTU5MEMwMEZFQkNGMyAvKiBTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNE
RjM4MUQwQTU5MEMwMEZFQkNGMyAvKiBTdHJpbmdPcGVyYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJN0NENzBDNEYyNEE0MzZFRTAwRTYxMDQwIC8qIFN0cmluZ1BhcnNpbmdCdWZmZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGM0ExRDBBNTkwQzAwRkVCQ0YzIC8qIFN0cmluZ1Zp
ZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTU5N0Y4MzYxRDk1OTZDODAwNjZCQzIxIC8qIFN5
bmNocm9uaXplZEZpeGVkUXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGNDAxRDBB
NTkwQzAwRkVCQ0YzIC8qIFRlc3RzQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ1BhcnNpbmdCdWZmZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ1BhcnNpbmdC
dWZmZXIuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1N0cmluZ1BhcnNpbmdCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV1RGU3RyaW5n
VXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorCituYW1lc3BhY2UgVGVzdFdlYktp
dEFQSSB7CisKK1RFU1QoV1RGLCBTdHJpbmdQYXJzaW5nQnVmZmVyRW1wdHkpCit7CisgICAgU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4gcGFyc2luZ0J1ZmZlcjsKKworICAgIEVYUEVDVF9UUlVF
KHBhcnNpbmdCdWZmZXIuYXRFbmQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHBhcnNpbmdCdWZmZXIu
aGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKTsKKyAgICBFWFBFQ1RfRVEocGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpLCBudWxscHRyKTsKKyAgICBFWFBFQ1RfRVEocGFyc2luZ0J1ZmZlci5lbmQoKSwg
bnVsbHB0cik7CisgICAgRVhQRUNUX0VRKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCks
IDB1KTsKKworfQorCitURVNUKFdURiwgU3RyaW5nUGFyc2luZ0J1ZmZlckluaXRpYWwpCit7Cisg
ICAgU3RyaW5nVmlldyBzdHJpbmcgeyAiYWJjIiB9OworICAgIFN0cmluZ1BhcnNpbmdCdWZmZXI8
TENoYXI+IHBhcnNpbmdCdWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0
aCgpIH07CisKKyAgICBFWFBFQ1RfRkFMU0UocGFyc2luZ0J1ZmZlci5hdEVuZCgpKTsKKyAgICBF
WFBFQ1RfVFJVRShwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSk7CisgICAg
RVhQRUNUX0VRKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSwgc3RyaW5nLmNoYXJhY3RlcnM4KCkp
OworICAgIEVYUEVDVF9FUShwYXJzaW5nQnVmZmVyLmVuZCgpLCBzdHJpbmcuY2hhcmFjdGVyczgo
KSArIHN0cmluZy5sZW5ndGgoKSk7CisgICAgRVhQRUNUX0VRKHBhcnNpbmdCdWZmZXIubGVuZ3Ro
UmVtYWluaW5nKCksIDN1KTsKKyAgICBFWFBFQ1RfRVEoKnBhcnNpbmdCdWZmZXIsICdhJyk7Cit9
CisKK1RFU1QoV1RGLCBTdHJpbmdQYXJzaW5nQnVmZmVyQWR2YW5jZSkKK3sKKyAgICBTdHJpbmdW
aWV3IHN0cmluZyB7ICJhYmMiIH07CisgICAgU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4gcGFy
c2luZ0J1ZmZlciB7IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkgfTsKKwor
ICAgIHBhcnNpbmdCdWZmZXIuYWR2YW5jZSgpOworICAgIEVYUEVDVF9GQUxTRShwYXJzaW5nQnVm
ZmVyLmF0RW5kKCkpOworICAgIEVYUEVDVF9UUlVFKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVy
c1JlbWFpbmluZygpKTsKKyAgICBFWFBFQ1RfRVEocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5p
bmcoKSwgMnUpOworICAgIEVYUEVDVF9FUSgqcGFyc2luZ0J1ZmZlciwgJ2InKTsKK30KKworVEVT
VChXVEYsIFN0cmluZ1BhcnNpbmdCdWZmZXJBZHZhbmNlQnkpCit7CisgICAgU3RyaW5nVmlldyBz
dHJpbmcgeyAiYWJjIiB9OworICAgIFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+IHBhcnNpbmdC
dWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIH07CisKKyAgICBw
YXJzaW5nQnVmZmVyLmFkdmFuY2VCeSgyKTsKKyAgICBFWFBFQ1RfRkFMU0UocGFyc2luZ0J1ZmZl
ci5hdEVuZCgpKTsKKyAgICBFWFBFQ1RfVFJVRShwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNS
ZW1haW5pbmcoKSk7CisgICAgRVhQRUNUX0VRKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5n
KCksIDF1KTsKKyAgICBFWFBFQ1RfRVEoKnBhcnNpbmdCdWZmZXIsICdjJyk7Cit9CisKK1RFU1Qo
V1RGLCBTdHJpbmdQYXJzaW5nQnVmZmVyUHJlSW5jcmVtZW50KQoreworICAgIFN0cmluZ1ZpZXcg
c3RyaW5nIHsgImFiYyIgfTsKKyAgICBTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiBwYXJzaW5n
QnVmZmVyIHsgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSB9OworCisgICAg
YXV0byBwcmVJbmNyZW1lbnRlZFBhcnNpbmdCdWZmZXIgPSArK3BhcnNpbmdCdWZmZXI7CisgICAg
RVhQRUNUX0ZBTFNFKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSk7CisgICAgRVhQRUNUX1RSVUUocGFy
c2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpOworICAgIEVYUEVDVF9FUShwYXJz
aW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygpLCAydSk7CisgICAgRVhQRUNUX0VRKCpwYXJzaW5n
QnVmZmVyLCAnYicpOworICAgIEVYUEVDVF9GQUxTRShwcmVJbmNyZW1lbnRlZFBhcnNpbmdCdWZm
ZXIuYXRFbmQoKSk7CisgICAgRVhQRUNUX1RSVUUocHJlSW5jcmVtZW50ZWRQYXJzaW5nQnVmZmVy
Lmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSk7CisgICAgRVhQRUNUX0VRKHByZUluY3JlbWVudGVk
UGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSwgMnUpOworICAgIEVYUEVDVF9FUSgqcHJl
SW5jcmVtZW50ZWRQYXJzaW5nQnVmZmVyLCAnYicpOworfQorCitURVNUKFdURiwgU3RyaW5nUGFy
c2luZ0J1ZmZlclBvc3RJbmNyZW1lbnQpCit7CisgICAgU3RyaW5nVmlldyBzdHJpbmcgeyAiYWJj
IiB9OworICAgIFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+IHBhcnNpbmdCdWZmZXIgeyBzdHJp
bmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIH07CisKKyAgICBhdXRvIHBvc3RJbmNy
ZW1lbnRlZFBhcnNpbmdCdWZmZXIgPSBwYXJzaW5nQnVmZmVyKys7CisgICAgRVhQRUNUX0ZBTFNF
KHBhcnNpbmdCdWZmZXIuYXRFbmQoKSk7CisgICAgRVhQRUNUX1RSVUUocGFyc2luZ0J1ZmZlci5o
YXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpOworICAgIEVYUEVDVF9FUShwYXJzaW5nQnVmZmVyLmxl
bmd0aFJlbWFpbmluZygpLCAydSk7CisgICAgRVhQRUNUX0VRKCpwYXJzaW5nQnVmZmVyLCAnYicp
OworICAgIEVYUEVDVF9GQUxTRShwb3N0SW5jcmVtZW50ZWRQYXJzaW5nQnVmZmVyLmF0RW5kKCkp
OworICAgIEVYUEVDVF9UUlVFKHBvc3RJbmNyZW1lbnRlZFBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFj
dGVyc1JlbWFpbmluZygpKTsKKyAgICBFWFBFQ1RfRVEocG9zdEluY3JlbWVudGVkUGFyc2luZ0J1
ZmZlci5sZW5ndGhSZW1haW5pbmcoKSwgM3UpOworICAgIEVYUEVDVF9FUSgqcG9zdEluY3JlbWVu
dGVkUGFyc2luZ0J1ZmZlciwgJ2EnKTsKK30KKworVEVTVChXVEYsIFN0cmluZ1BhcnNpbmdCdWZm
ZXJQbHVzRXF1YWxzKQoreworICAgIFN0cmluZ1ZpZXcgc3RyaW5nIHsgImFiYyIgfTsKKyAgICBT
dHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiBwYXJzaW5nQnVmZmVyIHsgc3RyaW5nLmNoYXJhY3Rl
cnM4KCksIHN0cmluZy5sZW5ndGgoKSB9OworCisgICAgcGFyc2luZ0J1ZmZlciArPSAyOworICAg
IEVYUEVDVF9GQUxTRShwYXJzaW5nQnVmZmVyLmF0RW5kKCkpOworICAgIEVYUEVDVF9UUlVFKHBh
cnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKTsKKyAgICBFWFBFQ1RfRVEocGFy
c2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSwgMXUpOworICAgIEVYUEVDVF9FUSgqcGFyc2lu
Z0J1ZmZlciwgJ2MnKTsKK30KKworVEVTVChXVEYsIFN0cmluZ1BhcnNpbmdCdWZmZXJFbmQpCit7
CisgICAgU3RyaW5nVmlldyBzdHJpbmcgeyAiYWJjIiB9OworICAgIFN0cmluZ1BhcnNpbmdCdWZm
ZXI8TENoYXI+IHBhcnNpbmdCdWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxl
bmd0aCgpIH07CisKKyAgICArK3BhcnNpbmdCdWZmZXI7CisgICAgRVhQRUNUX0ZBTFNFKHBhcnNp
bmdCdWZmZXIuYXRFbmQoKSk7CisgICAgRVhQRUNUX1RSVUUocGFyc2luZ0J1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkpOworICAgIEVYUEVDVF9FUSgqcGFyc2luZ0J1ZmZlciwgJ2InKTsK
KworICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICBFWFBFQ1RfRkFMU0UocGFyc2luZ0J1ZmZlci5h
dEVuZCgpKTsKKyAgICBFWFBFQ1RfVFJVRShwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1h
aW5pbmcoKSk7CisgICAgRVhQRUNUX0VRKCpwYXJzaW5nQnVmZmVyLCAnYycpOworCisgICAgKytw
YXJzaW5nQnVmZmVyOworICAgIEVYUEVDVF9UUlVFKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKTsK
K30KKworVEVTVChXVEYsIFN0cmluZ1BhcnNpbmdCdWZmZXJTdWJzY3JpcHQpCit7CisgICAgU3Ry
aW5nVmlldyBzdHJpbmcgeyAiYWJjIiB9OworICAgIFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+
IHBhcnNpbmdCdWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIH07
CisgICAgCisgICAgKytwYXJzaW5nQnVmZmVyOworICAgIEVYUEVDVF9FUShwYXJzaW5nQnVmZmVy
WzBdLCAnYicpOworICAgIEVYUEVDVF9FUShwYXJzaW5nQnVmZmVyWzFdLCAnYycpOworfQorCitU
RVNUKFdURiwgU3RyaW5nUGFyc2luZ0J1ZmZlclN0cmluZ1ZpZXcpCit7CisgICAgU3RyaW5nVmll
dyBzdHJpbmcgeyAiYWJjIiB9OworICAgIFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+IHBhcnNp
bmdCdWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIH07CisKKyAg
ICArK3BhcnNpbmdCdWZmZXI7CisgICAgYXV0byB2aWV3UmVtYWluaW5nID0gcGFyc2luZ0J1ZmZl
ci5zdHJpbmdWaWV3T2ZDaGFyYWN0ZXJzUmVtYWluaW5nKCk7CisgICAgRVhQRUNUX0VRKHZpZXdS
ZW1haW5pbmcubGVuZ3RoKCksIDJ1KTsKKyAgICBFWFBFQ1RfRVEodmlld1JlbWFpbmluZ1swXSwg
J2InKTsKKyAgICBFWFBFQ1RfRVEodmlld1JlbWFpbmluZ1sxXSwgJ2MnKTsKK30KKworVEVTVChX
VEYsIFN0cmluZ1BhcnNpbmdCdWZmZXJSZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcpCit7CisgICAg
YXV0byBsYXRpbjEgPSBTdHJpbmdWaWV3IHsgImFiYyIgfTsKKyAgICBhdXRvIHJlc3VsdDEgPSBX
VEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhsYXRpbjEsIFtdKGF1dG8gcGFyc2luZ0J1ZmZl
cikgeworICAgICAgICBFWFBFQ1RfRkFMU0UocGFyc2luZ0J1ZmZlci5hdEVuZCgpKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSwgM3UpOwor
ICAgICAgICBFWFBFQ1RfRVEoKnBhcnNpbmdCdWZmZXIsICdhJyk7CisgICAgCisgICAgICAgICsr
cGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgcmV0dXJuIHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWlu
aW5nKCk7CisgICAgfSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdDEsIDJ1KTsKKworICAgIGF1dG8g
dXRmMTYgPSB1dGYxNlN0cmluZyh1IvCfmI3wn5iJ8J+ZgyIpOworICAgIGF1dG8gcmVzdWx0MiA9
IFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHV0ZjE2LCBbXShhdXRvIHBhcnNpbmdCdWZm
ZXIpIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKTsK
KyAgICAgICAgRVhQRUNUX0VRKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCksIDZ1KTsK
KyAgICAgICAgRVhQRUNUX0VRKCpwYXJzaW5nQnVmZmVyLCAweEQ4M0QpOworCisgICAgICAgICsr
cGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgcmV0dXJuIHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWlu
aW5nKCk7CisgICAgfSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdDIsIDV1KTsKK30KKworfQorCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>