<?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>215936</bug_id>
          
          <creation_ts>2020-08-28 10:48:37 -0700</creation_ts>
          <short_desc>Add CompactUniquePtrTuple</short_desc>
          <delta_ts>2020-09-03 20:02:16 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=216069</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1683697</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-08-28 10:48:37 -0700</bug_when>
    <thetext>I want to have the ability to use free 8-bits in pointer for std::unique_ptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683698</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-08-28 10:49:30 -0700</bug_when>
    <thetext>Should I wrap unique_ptr around or just write a new template class that behaves like std::unique_ptr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683704</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-28 11:08:09 -0700</bug_when>
    <thetext>Not sure how to make something a tuple if you can’t get a reference to one of the things inside.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683705</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-28 11:08:53 -0700</bug_when>
    <thetext>If it was a moved-out copy of the pointer then clearly unique_ptr is what we’d want. But for a reference to the thing inside the tuple, I don’t see how it can be unique_ptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684751</commentid>
    <comment_count>4</comment_count>
      <attachid>407752</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-02 01:44:58 -0700</bug_when>
    <thetext>Created attachment 407752
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684869</commentid>
    <comment_count>5</comment_count>
      <attachid>407752</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-09-02 10:25:33 -0700</bug_when>
    <thetext>Comment on attachment 407752
Patch

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

&gt; Source/WTF/ChangeLog:8
&gt; +        Added a new template class, CompactUniquePtrTuple, which stores a pointer and up to 16-bits of

why just 16? On iOS, we have more free space than that.

&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:75
&gt; +    template &lt;typename U&gt;
&gt; +    CompactUniquePtrTuple&lt;T, Type&gt;&amp; operator=(CompactUniquePtrTuple&lt;U, Type&gt;&amp;&amp; other)
&gt; +    {
&gt; +        deletePointerIfNotNull();
&gt; +        m_data = other.m_data;
&gt; +        other.m_data = CompactPointerTuple&lt;T*, Type&gt;();
&gt; +        return *this;
&gt; +    }

Never sure how to proceed with this, but this doesn&apos;t seem right if we end up moving into ourselves.

&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:77
&gt; +    T* pointer() const { return m_data.pointer(); }

call this get() to match unique_ptr API?

&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:84
&gt; +    std::unique_ptr&lt;T&gt; moveToUniquePtr()
&gt; +    {
&gt; +        T* pointer = m_data.pointer();
&gt; +        m_data.setPointer(nullptr);
&gt; +        return std::unique_ptr&lt;T, Deleter&gt;(pointer);
&gt; +    }

maybe call this release?

&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:93
&gt; +    void setPointer(std::unique_ptr&lt;U&gt;&amp;&amp; pointer)

not sure you need &amp;&amp; here since this function is taking ownership of this unique_ptr. If you just have it as &quot;std::unique_ptr&lt;U&gt; pointer&quot;, the caller will be forced to relinquish ownership</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684870</commentid>
    <comment_count>6</comment_count>
      <attachid>407752</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-09-02 10:27:26 -0700</bug_when>
    <thetext>Comment on attachment 407752
Patch

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

&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:37
&gt; +ALWAYS_INLINE CompactUniquePtrTuple&lt;T, Type&gt; makeCompactUniquePtr(Args&amp;&amp;... args)

do we want versions of these functions that allow us to pass in Type to the &quot;make&quot; functions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684871</commentid>
    <comment_count>7</comment_count>
      <attachid>407752</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-09-02 10:28:02 -0700</bug_when>
    <thetext>Comment on attachment 407752
Patch

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

&gt;&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:77
&gt;&gt; +    T* pointer() const { return m_data.pointer(); }
&gt; 
&gt; call this get() to match unique_ptr API?

maybe this is confusing given it&apos;s a tuple. I think pointer() is better</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684883</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-02 11:13:54 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #5)
&gt; Comment on attachment 407752 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407752&amp;action=review
&gt; 
&gt; &gt; Source/WTF/ChangeLog:8
&gt; &gt; +        Added a new template class, CompactUniquePtrTuple, which stores a pointer and up to 16-bits of
&gt; 
&gt; why just 16? On iOS, we have more free space than that.

That&apos;s the restriction CompactPointerTuple puts. In general, I don&apos;t think it&apos;s a good idea to make these classes accept different number of bits in different platforms as we want to share the same code across platforms as much as possible.

&gt; &gt; Source/WTF/wtf/CompactUniquePtrTuple.h:75
&gt; &gt; +    template &lt;typename U&gt;
&gt; &gt; +    CompactUniquePtrTuple&lt;T, Type&gt;&amp; operator=(CompactUniquePtrTuple&lt;U, Type&gt;&amp;&amp; other)
&gt; &gt; +    {
&gt; &gt; +        deletePointerIfNotNull();
&gt; &gt; +        m_data = other.m_data;
&gt; &gt; +        other.m_data = CompactPointerTuple&lt;T*, Type&gt;();
&gt; &gt; +        return *this;
&gt; &gt; +    }
&gt; 
&gt; Never sure how to proceed with this, but this doesn&apos;t seem right if we end
&gt; up moving into ourselves.

Oh right, I should have moved to a temporary variable first. Will fix.

&gt; &gt; Source/WTF/wtf/CompactUniquePtrTuple.h:77
&gt; &gt; +    T* pointer() const { return m_data.pointer(); }
&gt; 
&gt; call this get() to match unique_ptr API?

What you said. Other Compact*Tuple class use pointer().

&gt; &gt; Source/WTF/wtf/CompactUniquePtrTuple.h:84
&gt; &gt; +    std::unique_ptr&lt;T&gt; moveToUniquePtr()
&gt; &gt; +    {
&gt; &gt; +        T* pointer = m_data.pointer();
&gt; &gt; +        m_data.setPointer(nullptr);
&gt; &gt; +        return std::unique_ptr&lt;T, Deleter&gt;(pointer);
&gt; &gt; +    }
&gt; 
&gt; maybe call this release?

I think it&apos;s in line with pointer/type naming to name this differently from release.
I initially called this release as well but saw UniqueRef use moveToUniquePtr.

&gt; &gt; Source/WTF/wtf/CompactUniquePtrTuple.h:93
&gt; &gt; +    void setPointer(std::unique_ptr&lt;U&gt;&amp;&amp; pointer)
&gt; 
&gt; not sure you need &amp;&amp; here since this function is taking ownership of this
&gt; unique_ptr. If you just have it as &quot;std::unique_ptr&lt;U&gt; pointer&quot;, the caller
&gt; will be forced to relinquish ownership

That&apos;s true but I think it&apos;s communicative / self explanatory to use rvalue reference here
than to force the creation of a phantom temporary and force the caller to use WTFMove anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685104</commentid>
    <comment_count>9</comment_count>
      <attachid>407847</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-02 18:44:12 -0700</bug_when>
    <thetext>Created attachment 407847
Fixed operator=</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685143</commentid>
    <comment_count>10</comment_count>
      <attachid>407847</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-02 20:57:52 -0700</bug_when>
    <thetext>Comment on attachment 407847
Fixed operator=

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

&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:40
&gt; +    static_assert(std::is_same&lt;typename T::webkitFastMalloced, int&gt;::value, &quot;T is FastMalloced&quot;);
&gt; +    return CompactUniquePtrTuple&lt;T, Type&gt;(std::make_unique&lt;T&gt;(*new T(std::forward&lt;Args&gt;(args)...)));

Can’t this use WTF::makeUnique instead of repeating its assertion?

&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:47
&gt; +    static_assert(std::is_same&lt;typename T::webkitFastMalloced, int&gt;::value, &quot;T is FastMalloced&quot;);
&gt; +    return CompactUniquePtrTuple&lt;T, Type, Deleter&gt;(std::make_unique&lt;T&gt;(*new T(std::forward&lt;Args&gt;(args)...)));

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685180</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-02 22:23:40 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #10)
&gt; Comment on attachment 407847 [details]
&gt; Fixed operator=
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407847&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/CompactUniquePtrTuple.h:40
&gt; &gt; +    static_assert(std::is_same&lt;typename T::webkitFastMalloced, int&gt;::value, &quot;T is FastMalloced&quot;);
&gt; &gt; +    return CompactUniquePtrTuple&lt;T, Type&gt;(std::make_unique&lt;T&gt;(*new T(std::forward&lt;Args&gt;(args)...)));
&gt; 
&gt; Can’t this use WTF::makeUnique instead of repeating its assertion?

Oh oops, I forgot fo fix that. Doing that now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685189</commentid>
    <comment_count>12</comment_count>
      <attachid>407870</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-02 22:41:37 -0700</bug_when>
    <thetext>Created attachment 407870
Addresed Darin&apos;s review comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685194</commentid>
    <comment_count>13</comment_count>
      <attachid>407870</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-02 23:16:17 -0700</bug_when>
    <thetext>Comment on attachment 407870
Addresed Darin&apos;s review comment

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

&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:59
&gt; +        other.m_data = CompactPointerTuple&lt;T*, Type&gt;();

Could we use std::exchange here? It would make this a one-liner and we could use construction syntax rather than assignment syntax.

&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:74
&gt; +        return *this;

Seems like this should be written more simply:

    auto moved = WTFMove(other);
    std:swap(m_data, moved.m_data);
    return *this;

Or this more efficient version that does not null out the other but probably you like nulling out the other:

    std::swap(*this.m_data, other.m_data);
    return *this;

&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:79
&gt; +    std::unique_ptr&lt;T&gt; moveToUniquePtr()

Seems wrong that this does not use the proper Deleter.

&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:86
&gt; +    void setPointer(nullptr_t)

Is this really needed? Won’t the other setPointer do this just as efficiently?

&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:112
&gt; +    void deletePointerIfNotNull()

Since the built in delete operator does nothing when passed null it seems this could just be named deletePointer

&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:119
&gt; +    template&lt;typename U, typename E, typename D, class... Args&gt; friend CompactUniquePtrTuple&lt;U, E, D&gt; makeCompactUniquePtr(Args&amp;&amp;... args);

Not sure why these use class... rather than typename...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685213</commentid>
    <comment_count>14</comment_count>
      <attachid>407870</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-03 01:34:49 -0700</bug_when>
    <thetext>Comment on attachment 407870
Addresed Darin&apos;s review comment

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

&gt;&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:59
&gt;&gt; +        other.m_data = CompactPointerTuple&lt;T*, Type&gt;();
&gt; 
&gt; Could we use std::exchange here? It would make this a one-liner and we could use construction syntax rather than assignment syntax.

I&apos;m not sure what you mean. If you mean that:
m_data = WTFMove(other.m_data)
then it won&apos;t work because WTFMove(other.m_data) is basically a no-op.

&gt;&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:74
&gt;&gt; +        return *this;
&gt; 
&gt; Seems like this should be written more simply:
&gt; 
&gt;     auto moved = WTFMove(other);
&gt;     std:swap(m_data, moved.m_data);
&gt;     return *this;
&gt; 
&gt; Or this more efficient version that does not null out the other but probably you like nulling out the other:
&gt; 
&gt;     std::swap(*this.m_data, other.m_data);
&gt;     return *this;

That&apos;s a good point. Done the variant which clears out &quot;other&quot;.

&gt;&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:79
&gt;&gt; +    std::unique_ptr&lt;T&gt; moveToUniquePtr()
&gt; 
&gt; Seems wrong that this does not use the proper Deleter.

Oops, fixed. I had specified this in the return statement but forgot it here.

&gt;&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:86
&gt;&gt; +    void setPointer(nullptr_t)
&gt; 
&gt; Is this really needed? Won’t the other setPointer do this just as efficiently?

Yes, otherwise, we&apos;d get a build error like:

CompactUniquePtrTuple.cpp:67:7: error: no matching member function for call to &apos;setPointer&apos;
    a.setPointer(nullptr);
    ~~^~~~~~~~~~
In file included from Tools/TestWebKitAPI/Tests/WTF/CompactUniquePtrTuple.cpp:30:
CompactUniquePtrTuple.h:91:10: note: candidate template ignored: could not match &apos;unique_ptr&lt;type-parameter-0-0, default_delete&lt;type-parameter-0-0&gt; &gt;&apos; against &apos;nullptr_t&apos;
    void setPointer(std::unique_ptr&lt;U&gt;&amp;&amp; pointer)
         ^
The issue is that the compiler can&apos;t convert nullptr_t to std::unique_ptr&lt;U&gt;.

&gt;&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:112
&gt;&gt; +    void deletePointerIfNotNull()
&gt; 
&gt; Since the built in delete operator does nothing when passed null it seems this could just be named deletePointer

Sure, done.

&gt;&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:119
&gt;&gt; +    template&lt;typename U, typename E, typename D, class... Args&gt; friend CompactUniquePtrTuple&lt;U, E, D&gt; makeCompactUniquePtr(Args&amp;&amp;... args);
&gt; 
&gt; Not sure why these use class... rather than typename...

Fixed. Not sure what happened there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685311</commentid>
    <comment_count>15</comment_count>
      <attachid>407870</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-03 10:01:54 -0700</bug_when>
    <thetext>Comment on attachment 407870
Addresed Darin&apos;s review comment

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

&gt;&gt;&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:59
&gt;&gt;&gt; +        other.m_data = CompactPointerTuple&lt;T*, Type&gt;();
&gt;&gt; 
&gt;&gt; Could we use std::exchange here? It would make this a one-liner and we could use construction syntax rather than assignment syntax.
&gt; 
&gt; I&apos;m not sure what you mean. If you mean that:
&gt; m_data = WTFMove(other.m_data)
&gt; then it won&apos;t work because WTFMove(other.m_data) is basically a no-op.

I mean:

    m_data = std::exchange(other.m_data, { });</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685312</commentid>
    <comment_count>16</comment_count>
      <attachid>407870</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-03 10:03:20 -0700</bug_when>
    <thetext>Comment on attachment 407870
Addresed Darin&apos;s review comment

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

&gt;&gt;&gt;&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:59
&gt;&gt;&gt;&gt; +        other.m_data = CompactPointerTuple&lt;T*, Type&gt;();
&gt;&gt;&gt; 
&gt;&gt;&gt; Could we use std::exchange here? It would make this a one-liner and we could use construction syntax rather than assignment syntax.
&gt;&gt; 
&gt;&gt; I&apos;m not sure what you mean. If you mean that:
&gt;&gt; m_data = WTFMove(other.m_data)
&gt;&gt; then it won&apos;t work because WTFMove(other.m_data) is basically a no-op.
&gt; 
&gt; I mean:
&gt; 
&gt;     m_data = std::exchange(other.m_data, { });

Or actually, more like this:

    : m_data { std::exchange(other.m_data, { }) }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685542</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-03 20:00:30 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #16)
&gt; Comment on attachment 407870 [details]
&gt; Addresed Darin&apos;s review comment
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407870&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WTF/wtf/CompactUniquePtrTuple.h:59
&gt; &gt;&gt;&gt;&gt; +        other.m_data = CompactPointerTuple&lt;T*, Type&gt;();
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Could we use std::exchange here? It would make this a one-liner and we could use construction syntax rather than assignment syntax.
&gt; &gt;&gt; 
&gt; &gt;&gt; I&apos;m not sure what you mean. If you mean that:
&gt; &gt;&gt; m_data = WTFMove(other.m_data)
&gt; &gt;&gt; then it won&apos;t work because WTFMove(other.m_data) is basically a no-op.
&gt; &gt; 
&gt; &gt; I mean:
&gt; &gt; 
&gt; &gt;     m_data = std::exchange(other.m_data, { });
&gt; 
&gt; Or actually, more like this:
&gt; 
&gt;     : m_data { std::exchange(other.m_data, { }) }

Oh I see what you&apos;re saying. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685543</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-03 20:01:37 -0700</bug_when>
    <thetext>Committed r266573: &lt;https://trac.webkit.org/changeset/266573&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685544</commentid>
    <comment_count>19</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-03 20:02:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/68318595&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407752</attachid>
            <date>2020-09-02 01:44:58 -0700</date>
            <delta_ts>2020-09-02 18:44:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215936-20200902014500.patch</filename>
            <type>text/plain</type>
            <size>19049</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYzODMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDIwLTA5LTAyICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBDb21wYWN0VW5pcXVlUHRyVHVwbGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTkzNgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgbmV3IHRl
bXBsYXRlIGNsYXNzLCBDb21wYWN0VW5pcXVlUHRyVHVwbGUsIHdoaWNoIHN0b3JlcyBhIHBvaW50
ZXIgYW5kIHVwIHRvIDE2LWJpdHMgb2YKKyAgICAgICAgYSBQT0QgdHlwZSB1c2luZyBDb21wYWN0
UG9pbnRlclR1cGxlLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9Db21wYWN0VW5p
cXVlUHRyVHVwbGUuaDogQWRkZWQuCisgICAgICAgIChXVEY6Om1ha2VDb21wYWN0VW5pcXVlUHRy
KTogQWRkZWQuIExpa2UgbWFrZVVuaXF1ZSwgY3JlYXRlcyBhbiBvYmplY3Qgb2YgdGhlIHNwZWNp
ZmllZCB0eXBlCisgICAgICAgIGFuZCByZXR1cm5zIENvbXBhY3RVbmlxdWVQdHJUdXBsZS4KKyAg
ICAgICAgKFdURjo6Q29tcGFjdFVuaXF1ZVB0clR1cGxlKTogQWRkZWQuCisgICAgICAgIChXVEY6
OkNvbXBhY3RVbmlxdWVQdHJUdXBsZTo6Q29tcGFjdFVuaXF1ZVB0clR1cGxlKTogTW92ZSBjb25z
dHJ1Y3Rvci4KKyAgICAgICAgKFdURjo6Q29tcGFjdFVuaXF1ZVB0clR1cGxlOjp+Q29tcGFjdFVu
aXF1ZVB0clR1cGxlKToKKyAgICAgICAgKFdURjo6Q29tcGFjdFVuaXF1ZVB0clR1cGxlOjpvcGVy
YXRvcj0pOgorICAgICAgICAoV1RGOjpDb21wYWN0VW5pcXVlUHRyVHVwbGU6OnBvaW50ZXIpOgor
ICAgICAgICAoV1RGOjpDb21wYWN0VW5pcXVlUHRyVHVwbGU6Om1vdmVUb1VuaXF1ZVB0cik6IENs
ZWFycyB0aGlzIHBvaW50ZXIgYW5kIHJldHVybnMgdW5pcXVlX3B0ci4KKyAgICAgICAgKFdURjo6
Q29tcGFjdFVuaXF1ZVB0clR1cGxlOjpzZXRQb2ludGVyKTogTGlrZSBDb21wYWN0UG9pbnRlclR1
cGxlIHNldHMgdGhlIHBvaW50ZXIgY29tcG9uZW50CisgICAgICAgIG9mIHRoaXMgdHVwbGUsIGZy
ZWVpbmcgdGhlIG9sZCBvYmplY3QgaWYgdGhlcmUgaXMgYWxyZWFkeSBvbmUgc3RvcmVkLgorICAg
ICAgICAoV1RGOjpDb21wYWN0VW5pcXVlUHRyVHVwbGU6OnR5cGUpOgorICAgICAgICAoV1RGOjpD
b21wYWN0VW5pcXVlUHRyVHVwbGU6OnNldFR5cGUpOgorICAgICAgICAoV1RGOjpDb21wYWN0VW5p
cXVlUHRyVHVwbGU6OkNvbXBhY3RVbmlxdWVQdHJUdXBsZSk6IENvbnN0cnVjdG9yIHdoaWNoIHRh
a2VzIHVuaXF1ZV9wdHImJi4KKyAgICAgICAgKFdURjo6Q29tcGFjdFVuaXF1ZVB0clR1cGxlOjpk
ZWxldGVQb2ludGVySWZOb3ROdWxsKToKKwogMjAyMC0wOC0zMSAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2UgQmlnNSBlbmNvZGVyIGNv
bmZvcm0gdG8gdGhlIHNwZWNpZmljYXRpb24gYW5kIGJlaGF2aW9yIG9mIENocm9tZSBhbmQgRmly
ZWZveApJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyNjYzODMpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00OTYsNiArNDk2LDcgQEAKIAkJOTc0Q0ZDOEQxNkE0RjMyNzAw
NkQ1NDA0IC8qIFdlYWtQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vh
a1B0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTZCMTc4NDFFQkE0NDFDMDA3
RTEwRUIgLyogRGVidWdVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGVidWdVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUI2N0Yz
RjEyMjI4RDUzMTAwMzBERTlDIC8qIFdlYWtIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtI
YXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCOTZFOUIzMjRGRjc3Qjgw
MDE3NTZDMyAvKiBDb21wYWN0VW5pcXVlUHRyVHVwbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGFj
dFVuaXF1ZVB0clR1cGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQzcwRjA0
MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9tU3RyaW5nVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQXRvbVN0cmluZ1RhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOUJEOEY0MEExNzZDMkFEODAwMDJEODY1IC8qIEF0b21TdHJpbmdUYWJs
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBdG9tU3RyaW5nVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUM2N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8qIEluZGV4ZWRDb250YWluZXJJ
dGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGVkQ29udGFp
bmVySXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3Myw2ICs5NzQs
NyBAQAogCQkJCTBGQzRFREU1MTY5NjE0OTYwMEY2NTA0MSAvKiBDb21tYVByaW50ZXIuaCAqLywK
IAkJCQlFM0NGNzY5MDIxMTVENkJBMDA5MURFNDggLyogQ29tcGFjdFBvaW50ZXJUdXBsZS5oICov
LAogCQkJCUUzODAyMERCMjQwMUMwOTMwMDM3Q0E5RSAvKiBDb21wYWN0UmVmUHRyVHVwbGUuaCAq
LywKKwkJCQk5Qjk2RTlCMzI0RkY3N0I4MDAxNzU2QzMgLyogQ29tcGFjdFVuaXF1ZVB0clR1cGxl
LmggKi8sCiAJCQkJMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFk
LmNwcCAqLywKIAkJCQkwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJl
YWQuaCAqLywKIAkJCQlBOEE0NzI3MDE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNjYzODMpCisrKyBTb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQCBzZXQo
V1RGX1BVQkxJQ19IRUFERVJTCiAgICAgQ29tbWFQcmludGVyLmgKICAgICBDb21wYWN0UG9pbnRl
clR1cGxlLmgKICAgICBDb21wYWN0UmVmUHRyVHVwbGUuaAorICAgIENvbXBhY3RVbmlxdWVQdHJU
dXBsZS5oCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuaAogICAgIENvbXBpbGVyLmgKICAgICBDb21w
bGV0aW9uSGFuZGxlci5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db21wYWN0VW5pcXVlUHRyVHVw
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db21wYWN0VW5pcXVlUHRyVHVwbGUu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db21wYWN0VW5pcXVlUHRyVHVwbGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8bWVtb3J5
PgorI2luY2x1ZGUgPHd0Zi9Db21wYWN0UG9pbnRlclR1cGxlLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBUeXBlLCB0eXBlbmFtZSBEZWxldGVyID0gc3RkOjpkZWZhdWx0X2RlbGV0ZTxUPj4g
Y2xhc3MgQ29tcGFjdFVuaXF1ZVB0clR1cGxlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBUeXBlLCBjbGFzcy4uLiBBcmdzPgorQUxXQVlTX0lOTElORSBDb21wYWN0VW5pcXVlUHRy
VHVwbGU8VCwgVHlwZT4gbWFrZUNvbXBhY3RVbmlxdWVQdHIoQXJncyYmLi4uIGFyZ3MpCit7Cisg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgVDo6d2Via2l0RmFzdE1hbGxv
Y2VkLCBpbnQ+Ojp2YWx1ZSwgIlQgaXMgRmFzdE1hbGxvY2VkIik7CisgICAgcmV0dXJuIENvbXBh
Y3RVbmlxdWVQdHJUdXBsZTxULCBUeXBlPihzdGQ6Om1ha2VfdW5pcXVlPFQ+KCpuZXcgVChzdGQ6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFR5cGUsIHR5cGVuYW1lIERlbGV0ZXIsIGNsYXNzLi4uIEFyZ3M+CitBTFdBWVNfSU5M
SU5FIENvbXBhY3RVbmlxdWVQdHJUdXBsZTxULCBUeXBlPiBtYWtlQ29tcGFjdFVuaXF1ZVB0cihB
cmdzJiYuLi4gYXJncykKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTx0eXBlbmFt
ZSBUOjp3ZWJraXRGYXN0TWFsbG9jZWQsIGludD46OnZhbHVlLCAiVCBpcyBGYXN0TWFsbG9jZWQi
KTsKKyAgICByZXR1cm4gQ29tcGFjdFVuaXF1ZVB0clR1cGxlPFQsIFR5cGUsIERlbGV0ZXI+KHN0
ZDo6bWFrZV91bmlxdWU8VD4oKm5ldyBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHlwZSwgdHlwZW5hbWUgRGVsZXRl
cj4KK2NsYXNzIENvbXBhY3RVbmlxdWVQdHJUdXBsZSBmaW5hbCB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tcGFjdFVuaXF1ZVB0clR1
cGxlKTsKK3B1YmxpYzoKKyAgICBDb21wYWN0VW5pcXVlUHRyVHVwbGUoKSA9IGRlZmF1bHQ7CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBDb21wYWN0VW5pcXVlUHRyVHVwbGUoQ29t
cGFjdFVuaXF1ZVB0clR1cGxlPFUsIFR5cGU+JiYgb3RoZXIpCisgICAgeworICAgICAgICBzdGQ6
OmV4Y2hhbmdlKCp0aGlzLCBvdGhlcik7CisgICAgfQorCisgICAgfkNvbXBhY3RVbmlxdWVQdHJU
dXBsZSgpCisgICAgeworICAgICAgICBzZXRQb2ludGVyKG51bGxwdHIpOworICAgIH0KKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIENvbXBhY3RVbmlxdWVQdHJUdXBsZTxULCBUeXBl
PiYgb3BlcmF0b3I9KENvbXBhY3RVbmlxdWVQdHJUdXBsZTxVLCBUeXBlPiYmIG90aGVyKQorICAg
IHsKKyAgICAgICAgZGVsZXRlUG9pbnRlcklmTm90TnVsbCgpOworICAgICAgICBtX2RhdGEgPSBv
dGhlci5tX2RhdGE7CisgICAgICAgIG90aGVyLm1fZGF0YSA9IENvbXBhY3RQb2ludGVyVHVwbGU8
VCosIFR5cGU+KCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBUKiBwb2lu
dGVyKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnBvaW50ZXIoKTsgfQorCisgICAgc3RkOjp1bmlx
dWVfcHRyPFQ+IG1vdmVUb1VuaXF1ZVB0cigpCisgICAgeworICAgICAgICBUKiBwb2ludGVyID0g
bV9kYXRhLnBvaW50ZXIoKTsKKyAgICAgICAgbV9kYXRhLnNldFBvaW50ZXIobnVsbHB0cik7Cisg
ICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8VCwgRGVsZXRlcj4ocG9pbnRlcik7CisgICAg
fQorCisgICAgdm9pZCBzZXRQb2ludGVyKG51bGxwdHJfdCkKKyAgICB7CisgICAgICAgIGRlbGV0
ZVBvaW50ZXJJZk5vdE51bGwoKTsKKyAgICAgICAgbV9kYXRhLnNldFBvaW50ZXIobnVsbHB0cik7
CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgdm9pZCBzZXRQb2ludGVy
KHN0ZDo6dW5pcXVlX3B0cjxVPiYmIHBvaW50ZXIpCisgICAgeworICAgICAgICBkZWxldGVQb2lu
dGVySWZOb3ROdWxsKCk7CisgICAgICAgIG1fZGF0YS5zZXRQb2ludGVyKHBvaW50ZXIucmVsZWFz
ZSgpKTsKKyAgICB9CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEudHlw
ZSgpOyB9CisKKyAgICB2b2lkIHNldFR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgbV9k
YXRhLnNldFR5cGUodHlwZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENvbXBhY3RVbmlxdWVQ
dHJUdXBsZShzdGQ6OnVuaXF1ZV9wdHI8VD4mJiBwb2ludGVyKQorICAgIHsKKyAgICAgICAgbV9k
YXRhLnNldFBvaW50ZXIocG9pbnRlci5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHZvaWQgZGVs
ZXRlUG9pbnRlcklmTm90TnVsbCgpCisgICAgeworICAgICAgICBpZiAoVCogcG9pbnRlciA9IG1f
ZGF0YS5wb2ludGVyKCkpCisgICAgICAgICAgICBEZWxldGVyKCkocG9pbnRlcik7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRSwgY2xhc3MuLi4gQXJncz4gZnJp
ZW5kIENvbXBhY3RVbmlxdWVQdHJUdXBsZTxVLCBFPiBtYWtlQ29tcGFjdFVuaXF1ZVB0cihBcmdz
JiYuLi4gYXJncyk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRSwgdHlwZW5h
bWUgRCwgY2xhc3MuLi4gQXJncz4gZnJpZW5kIENvbXBhY3RVbmlxdWVQdHJUdXBsZTxVLCBFLCBE
PiBtYWtlQ29tcGFjdFVuaXF1ZVB0cihBcmdzJiYuLi4gYXJncyk7CisKKyAgICBDb21wYWN0UG9p
bnRlclR1cGxlPFQqLCBUeXBlPiBtX2RhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
dXNpbmcgV1RGOjpDb21wYWN0VW5pcXVlUHRyVHVwbGU7Cit1c2luZyBXVEY6Om1ha2VDb21wYWN0
VW5pcXVlUHRyOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gMjY2NDUxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDktMDIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgQWRkIENvbXBhY3RVbmlxdWVQdHJUdXBsZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTM2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYmFzaWMgdW5pdCB0
ZXN0cyBmb3IgQ29tcGFjdFVuaXF1ZVB0clR1cGxlLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9Db21wYWN0VW5pcXVlUHRyVHVwbGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkEpOiBBZGRlLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6QTo6QSk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpBOjp+QSk6CisgICAgICAgIChXVEZfQ29tcGFjdFVuaXF1ZVB0clR1
cGxlLkJhc2ljKToKKwogMjAyMC0wOS0wMSAgRGllZ28gUGlubyBHYXJjaWEgIDxkcGlub0BpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtGbGF0cGFrIFNES10gQWRhcHQgY2xlYW4td2Via2l0IHNjcmlw
dCB0byBmbGF0cGFrCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDI2NjM4MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgIFRlc3RzL1dU
Ri9DU3RyaW5nLmNwcAogICAgIFRlc3RzL1dURi9DaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMu
Y3BwCiAgICAgVGVzdHMvV1RGL0NvbXBhY3RSZWZQdHJUdXBsZS5jcHAKKyAgICBUZXN0cy9XVEYv
Q29tcGFjdFVuaXF1ZVB0clR1cGxlLmNwcAogICAgIFRlc3RzL1dURi9Db25jdXJyZW50UHRySGFz
aFNldC5jcHAKICAgICBUZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAogICAgIFRlc3RzL1dURi9Dcm9z
c1RocmVhZENvcGllci5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
NjYzODMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODMwLDYgKzgzMCw3IEBACiAJCTk5OTkx
MDhCMUYzOTNDOTYwMDhBRDQ1NSAvKiBDb3B5aW5nLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk5OTEwOEExRjM5M0M4QjAwOEFENDU1IC8qIENvcHlp
bmcubW0gKi87IH07CiAJCTlCMDJFMEQ2MjM1RkE0N0QwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0
aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIw
MkUwRDUyMzVGQTQ3RDAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb24ubW0gKi87IH07CiAJCTlC
MDc4NkE1MUM1ODg1QzMwMEQxNTlFMyAvKiBJbmplY3RlZEJ1bmRsZU1ha2VBbGxTaGFkb3dSb290
c09wZW5fQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCMDc4NkE0MUM1ODg1QzMwMEQxNTlFMyAvKiBJbmplY3RlZEJ1bmRsZU1ha2VBbGxT
aGFkb3dSb290c09wZW5fQnVuZGxlLmNwcCAqLzsgfTsKKwkJOUIwQzA1MTkyNEZERkI3RDAwRjJG
RTMxIC8qIENvbXBhY3RVbmlxdWVQdHJUdXBsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjBDMDUxODI0RkRGQjcwMDBGMkZFMzEgLyogQ29tcGFj
dFVuaXF1ZVB0clR1cGxlLmNwcCAqLzsgfTsKIAkJOUIxOUNEQTAxRjA2REZFMzAwMDU0OEREIC8q
IE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjE5Q0Q5RTFGMDZERkUzMDAwNTQ4
REQgLyogTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbSAqLzsgfTsK
IAkJOUIxRjZGNzgxRjkwNTU4NDAwQjU1NzQ0IC8qIENvcHlIVE1MLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIxMDU2NDExRjkwNDVDNzAwRDU1ODNG
IC8qIENvcHlIVE1MLm1tICovOyB9OwogCQk5QjFGNkY3OTFGOTA1NTlFMDBCNTU3NDQgLyogY29w
eS1odG1sLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIxMDU2NDIxRjkwNDdDQzAwRDU1ODNGIC8qIGNvcHktaHRtbC5odG1sICovOyB9
OwpAQCAtMjQyNyw2ICsyNDI4LDcgQEAKIAkJOUIwMkUwRDUyMzVGQTQ3RDAwNDA0NEIyIC8qIFRl
eHRNYW5pcHVsYXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0TWFuaXB1bGF0aW9u
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjA3ODZBMjFDNTg4MzBGMDBEMTU5
RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlTWFrZUFsbFNoYWRvd1Jv
b3RzT3Blbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDc4NkE0MUM1ODg1
QzMwMEQxNTlFMyAvKiBJbmplY3RlZEJ1bmRsZU1ha2VBbGxTaGFkb3dSb290c09wZW5fQnVuZGxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxl
TWFrZUFsbFNoYWRvd1Jvb3RzT3Blbl9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5QjBDMDUxODI0RkRGQjcwMDBGMkZFMzEgLyogQ29tcGFjdFVuaXF1ZVB0clR1cGxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBhY3RVbmlxdWVQ
dHJUdXBsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMTA1NjQxMUY5MDQ1
QzcwMEQ1NTgzRiAvKiBDb3B5SFRNTC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvcHlIVE1M
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjEwNTY0MjFGOTA0N0NDMDBENTU4
M0YgLyogY29weS1odG1sLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiY29weS1odG1sLmh0bWwiOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5QjE5Q0Q5RTFGMDZERkUzMDAwNTQ4REQgLyogTmV0d29y
a1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5l
Y3Rpb24ubW07IHBhdGggPSBXZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29u
bmVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQxMzQsNiArNDEzNiw3
IEBACiAJCQkJMDQ1MUE1QTYyMzVFNDM4RTAwOURGOTQ1IC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9y
LmNwcCAqLywKIAkJCQlBN0E5NjZEQTE0MEVDQ0M4MDA1RUY5QjQgLyogQ2hlY2tlZEFyaXRobWV0
aWNPcGVyYXRpb25zLmNwcCAqLywKIAkJCQlFMzAyQkRBOTI0MDRCOTIzMDA4NjUyNzcgLyogQ29t
cGFjdFJlZlB0clR1cGxlLmNwcCAqLywKKwkJCQk5QjBDMDUxODI0RkRGQjcwMDBGMkZFMzEgLyog
Q29tcGFjdFVuaXF1ZVB0clR1cGxlLmNwcCAqLywKIAkJCQkwRjMwQ0I1QjFGQ0UxNzkyMDA0QjUz
MjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovLAogCQkJCTBGRUFFMzY3MUI3RDE5Q0Iw
MENFMTdGMiAvKiBDb25kaXRpb24uY3BwICovLAogCQkJCTI3OERFNjRCMjJCOEQ2MTEwMDRFMEU3
QSAvKiBDcm9zc1RocmVhZENvcGllci5jcHAgKi8sCkBAIC00ODY2LDYgKzQ4NjksNyBAQAogCQkJ
CTA0REIyMzk2MjM1RTQzRUMwMDMyOEYxNyAvKiBCdW1wUG9pbnRlckFsbG9jYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3QzgzREVBMDFEMEE1OTBDMDBGRUJDRjMgLyogQ2hlY2tlZEFyaXRo
bWV0aWNPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzMDJCREFBMjQwNEI5MjQw
MDg2NTI3NyAvKiBDb21wYWN0UmVmUHRyVHVwbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOUIw
QzA1MTkyNEZERkI3RDAwRjJGRTMxIC8qIENvbXBhY3RVbmlxdWVQdHJUdXBsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjMwQ0I1QzFGQ0UxNzk2MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhh
c2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFQzMxRDBBNTkwQzAwRkVCQ0YzIC8q
IENvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVBNjFEMEE1OTBDMDBGRUJD
RjMgLyogQ291bnRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Db21wYWN0VW5pcXVlUHRyVHVwbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbXBhY3RVbmlxdWVQdHJUdXBsZS5jcHAJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29tcGFjdFVuaXF1
ZVB0clR1cGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlJlZkxvZ2dlci5oIgorI2luY2x1
ZGUgIlV0aWxpdGllcy5oIgorI2luY2x1ZGUgPHd0Zi9Db21wYWN0VW5pcXVlUHRyVHVwbGUuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBBIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIEEoKSB7ICsrc19jb25zdHJ1Y3RvckNhbGxDb3Vu
dDsgfQorICAgIH5BKCkgeyArK3NfZGVzdHJ1Y3RvckNhbGxDb3VudDsgfQorICAgIAorICAgIHN0
YXRpYyB1bnNpZ25lZCBzX2NvbnN0cnVjdG9yQ2FsbENvdW50OworICAgIHN0YXRpYyB1bnNpZ25l
ZCBzX2Rlc3RydWN0b3JDYWxsQ291bnQ7Cit9OworCit1bnNpZ25lZCBBOjpzX2NvbnN0cnVjdG9y
Q2FsbENvdW50ID0gMDsKK3Vuc2lnbmVkIEE6OnNfZGVzdHJ1Y3RvckNhbGxDb3VudCA9IDA7CisK
K1RFU1QoV1RGX0NvbXBhY3RVbmlxdWVQdHJUdXBsZSwgQmFzaWMpCit7CisgICAgQTo6c19jb25z
dHJ1Y3RvckNhbGxDb3VudCA9IDA7CisgICAgQTo6c19kZXN0cnVjdG9yQ2FsbENvdW50ID0gMDsK
KworICAgIENvbXBhY3RVbmlxdWVQdHJUdXBsZTxBLCB1aW50MTZfdD4gZW1wdHk7CisgICAgRVhQ
RUNUX0VRKDBVLCBBOjpzX2NvbnN0cnVjdG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1RfRVEoMFUs
IEE6OnNfZGVzdHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNUX0VRKG51bGxwdHIsIGVtcHR5
LnBvaW50ZXIoKSk7CisgICAgRVhQRUNUX0VRKDBVLCBlbXB0eS50eXBlKCkpOworCisgICAgQ29t
cGFjdFVuaXF1ZVB0clR1cGxlPEEsIHVpbnQxNl90PiBhID0gbWFrZUNvbXBhY3RVbmlxdWVQdHI8
QSwgdWludDE2X3Q+KCk7CisgICAgRVhQRUNUX0VRKDFVLCBBOjpzX2NvbnN0cnVjdG9yQ2FsbENv
dW50KTsKKyAgICBFWFBFQ1RfRVEoMFUsIEE6OnNfZGVzdHJ1Y3RvckNhbGxDb3VudCk7CisgICAg
RVhQRUNUX05FKG51bGxwdHIsIGEucG9pbnRlcigpKTsKKyAgICBFWFBFQ1RfRVEoMFUsIGEudHlw
ZSgpKTsKKworICAgIGEuc2V0UG9pbnRlcihudWxscHRyKTsKKyAgICBFWFBFQ1RfRVEoMVUsIEE6
OnNfY29uc3RydWN0b3JDYWxsQ291bnQpOworICAgIEVYUEVDVF9FUSgxVSwgQTo6c19kZXN0cnVj
dG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1RfRVEobnVsbHB0ciwgYS5wb2ludGVyKCkpOworICAg
IEVYUEVDVF9FUSgwVSwgYS50eXBlKCkpOworCisgICAgYSA9IG1ha2VDb21wYWN0VW5pcXVlUHRy
PEEsIHVpbnQxNl90PigpOworICAgIEVYUEVDVF9FUSgyVSwgQTo6c19jb25zdHJ1Y3RvckNhbGxD
b3VudCk7CisgICAgRVhQRUNUX0VRKDFVLCBBOjpzX2Rlc3RydWN0b3JDYWxsQ291bnQpOworICAg
IEVYUEVDVF9ORShudWxscHRyLCBhLnBvaW50ZXIoKSk7CisgICAgRVhQRUNUX0VRKDBVLCBhLnR5
cGUoKSk7CisKKyAgICBhLnNldFR5cGUoMHhmZmZmVSk7CisgICAgRVhQRUNUX0VRKDJVLCBBOjpz
X2NvbnN0cnVjdG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1RfRVEoMVUsIEE6OnNfZGVzdHJ1Y3Rv
ckNhbGxDb3VudCk7CisgICAgRVhQRUNUX05FKG51bGxwdHIsIGEucG9pbnRlcigpKTsKKyAgICBF
WFBFQ1RfRVEoMHhmZmZmVSwgYS50eXBlKCkpOworCisgICAgYS5zZXRQb2ludGVyKG1ha2VVbmlx
dWU8QT4oKSk7CisgICAgQSogb2xkUG9pbnRlciA9IGEucG9pbnRlcigpOworICAgIEVYUEVDVF9F
USgzVSwgQTo6c19jb25zdHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNUX0VRKDJVLCBBOjpz
X2Rlc3RydWN0b3JDYWxsQ291bnQpOworICAgIEVYUEVDVF9ORShudWxscHRyLCBhLnBvaW50ZXIo
KSk7CisgICAgRVhQRUNUX0VRKDB4ZmZmZlUsIGEudHlwZSgpKTsKKworICAgIGEuc2V0VHlwZSgw
eDEwMTBVKTsKKyAgICBFWFBFQ1RfRVEoM1UsIEE6OnNfY29uc3RydWN0b3JDYWxsQ291bnQpOwor
ICAgIEVYUEVDVF9FUSgyVSwgQTo6c19kZXN0cnVjdG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1Rf
RVEob2xkUG9pbnRlciwgYS5wb2ludGVyKCkpOworICAgIEVYUEVDVF9FUSgweDEwMTBVLCBhLnR5
cGUoKSk7CisKKyAgICBhID0gbWFrZUNvbXBhY3RVbmlxdWVQdHI8QSwgdWludDE2X3Q+KCk7Cisg
ICAgRVhQRUNUX0VRKDRVLCBBOjpzX2NvbnN0cnVjdG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1Rf
RVEoM1UsIEE6OnNfZGVzdHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNUX05FKG51bGxwdHIs
IGEucG9pbnRlcigpKTsKKyAgICBFWFBFQ1RfRVEoMHgwVSwgYS50eXBlKCkpOworCisgICAgYS5z
ZXRUeXBlKDB4ZjJmMlUpOworICAgIEVYUEVDVF9FUSg0VSwgQTo6c19jb25zdHJ1Y3RvckNhbGxD
b3VudCk7CisgICAgRVhQRUNUX0VRKDNVLCBBOjpzX2Rlc3RydWN0b3JDYWxsQ291bnQpOworICAg
IEVYUEVDVF9ORShudWxscHRyLCBhLnBvaW50ZXIoKSk7CisgICAgRVhQRUNUX0VRKDB4ZjJmMlUs
IGEudHlwZSgpKTsKKworICAgIG9sZFBvaW50ZXIgPSBhLnBvaW50ZXIoKTsKKyAgICBhdXRvIG1v
dmVkQSA9IGEubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgRVhQRUNUX0VRKDRVLCBBOjpzX2NvbnN0
cnVjdG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1RfRVEoM1UsIEE6OnNfZGVzdHJ1Y3RvckNhbGxD
b3VudCk7CisgICAgRVhQRUNUX0VRKG51bGxwdHIsIGEucG9pbnRlcigpKTsKKyAgICBFWFBFQ1Rf
RVEobW92ZWRBLmdldCgpLCBvbGRQb2ludGVyKTsKKyAgICBFWFBFQ1RfRVEoMHhmMmYyVSwgYS50
eXBlKCkpOworCisgICAgYS5zZXRQb2ludGVyKFdURk1vdmUobW92ZWRBKSk7CisgICAgRVhQRUNU
X0VRKDRVLCBBOjpzX2NvbnN0cnVjdG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1RfRVEoM1UsIEE6
OnNfZGVzdHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNUX0VRKG9sZFBvaW50ZXIsIGEucG9p
bnRlcigpKTsKKyAgICBFWFBFQ1RfRVEobW92ZWRBLmdldCgpLCBudWxscHRyKTsKKyAgICBFWFBF
Q1RfRVEoMHhmMmYyVSwgYS50eXBlKCkpOworCisgICAgYS5zZXRQb2ludGVyKG51bGxwdHIpOwor
ICAgIEVYUEVDVF9FUSg0VSwgQTo6c19jb25zdHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNU
X0VRKDRVLCBBOjpzX2Rlc3RydWN0b3JDYWxsQ291bnQpOworICAgIEVYUEVDVF9FUShudWxscHRy
LCBhLnBvaW50ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1vdmVkQS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgRVhQRUNUX0VRKDB4ZjJmMlUsIGEudHlwZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407847</attachid>
            <date>2020-09-02 18:44:12 -0700</date>
            <delta_ts>2020-09-02 22:41:35 -0700</delta_ts>
            <desc>Fixed operator=</desc>
            <filename>bug-215936-20200902184411.patch</filename>
            <type>text/plain</type>
            <size>19800</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYzODMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDIwLTA5LTAyICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBDb21wYWN0VW5pcXVlUHRyVHVwbGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTkzNgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgbmV3IHRl
bXBsYXRlIGNsYXNzLCBDb21wYWN0VW5pcXVlUHRyVHVwbGUsIHdoaWNoIHN0b3JlcyBhIHBvaW50
ZXIgYW5kIHVwIHRvIDE2LWJpdHMgb2YKKyAgICAgICAgYSBQT0QgdHlwZSB1c2luZyBDb21wYWN0
UG9pbnRlclR1cGxlLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9Db21wYWN0VW5p
cXVlUHRyVHVwbGUuaDogQWRkZWQuCisgICAgICAgIChXVEY6Om1ha2VDb21wYWN0VW5pcXVlUHRy
KTogQWRkZWQuIExpa2UgbWFrZVVuaXF1ZSwgY3JlYXRlcyBhbiBvYmplY3Qgb2YgdGhlIHNwZWNp
ZmllZCB0eXBlCisgICAgICAgIGFuZCByZXR1cm5zIENvbXBhY3RVbmlxdWVQdHJUdXBsZS4KKyAg
ICAgICAgKFdURjo6Q29tcGFjdFVuaXF1ZVB0clR1cGxlKTogQWRkZWQuCisgICAgICAgIChXVEY6
OkNvbXBhY3RVbmlxdWVQdHJUdXBsZTo6Q29tcGFjdFVuaXF1ZVB0clR1cGxlKTogTW92ZSBjb25z
dHJ1Y3Rvci4KKyAgICAgICAgKFdURjo6Q29tcGFjdFVuaXF1ZVB0clR1cGxlOjp+Q29tcGFjdFVu
aXF1ZVB0clR1cGxlKToKKyAgICAgICAgKFdURjo6Q29tcGFjdFVuaXF1ZVB0clR1cGxlOjpvcGVy
YXRvcj0pOgorICAgICAgICAoV1RGOjpDb21wYWN0VW5pcXVlUHRyVHVwbGU6OnBvaW50ZXIpOgor
ICAgICAgICAoV1RGOjpDb21wYWN0VW5pcXVlUHRyVHVwbGU6Om1vdmVUb1VuaXF1ZVB0cik6IENs
ZWFycyB0aGlzIHBvaW50ZXIgYW5kIHJldHVybnMgdW5pcXVlX3B0ci4KKyAgICAgICAgKFdURjo6
Q29tcGFjdFVuaXF1ZVB0clR1cGxlOjpzZXRQb2ludGVyKTogTGlrZSBDb21wYWN0UG9pbnRlclR1
cGxlIHNldHMgdGhlIHBvaW50ZXIgY29tcG9uZW50CisgICAgICAgIG9mIHRoaXMgdHVwbGUsIGZy
ZWVpbmcgdGhlIG9sZCBvYmplY3QgaWYgdGhlcmUgaXMgYWxyZWFkeSBvbmUgc3RvcmVkLgorICAg
ICAgICAoV1RGOjpDb21wYWN0VW5pcXVlUHRyVHVwbGU6OnR5cGUpOgorICAgICAgICAoV1RGOjpD
b21wYWN0VW5pcXVlUHRyVHVwbGU6OnNldFR5cGUpOgorICAgICAgICAoV1RGOjpDb21wYWN0VW5p
cXVlUHRyVHVwbGU6OkNvbXBhY3RVbmlxdWVQdHJUdXBsZSk6IENvbnN0cnVjdG9yIHdoaWNoIHRh
a2VzIHVuaXF1ZV9wdHImJi4KKyAgICAgICAgKFdURjo6Q29tcGFjdFVuaXF1ZVB0clR1cGxlOjpk
ZWxldGVQb2ludGVySWZOb3ROdWxsKToKKwogMjAyMC0wOC0zMSAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2UgQmlnNSBlbmNvZGVyIGNv
bmZvcm0gdG8gdGhlIHNwZWNpZmljYXRpb24gYW5kIGJlaGF2aW9yIG9mIENocm9tZSBhbmQgRmly
ZWZveApJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyNjYzODMpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00OTYsNiArNDk2LDcgQEAKIAkJOTc0Q0ZDOEQxNkE0RjMyNzAw
NkQ1NDA0IC8qIFdlYWtQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vh
a1B0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTZCMTc4NDFFQkE0NDFDMDA3
RTEwRUIgLyogRGVidWdVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGVidWdVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUI2N0Yz
RjEyMjI4RDUzMTAwMzBERTlDIC8qIFdlYWtIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtI
YXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCOTZFOUIzMjRGRjc3Qjgw
MDE3NTZDMyAvKiBDb21wYWN0VW5pcXVlUHRyVHVwbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGFj
dFVuaXF1ZVB0clR1cGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQzcwRjA0
MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9tU3RyaW5nVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQXRvbVN0cmluZ1RhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOUJEOEY0MEExNzZDMkFEODAwMDJEODY1IC8qIEF0b21TdHJpbmdUYWJs
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBdG9tU3RyaW5nVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUM2N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8qIEluZGV4ZWRDb250YWluZXJJ
dGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGVkQ29udGFp
bmVySXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3Myw2ICs5NzQs
NyBAQAogCQkJCTBGQzRFREU1MTY5NjE0OTYwMEY2NTA0MSAvKiBDb21tYVByaW50ZXIuaCAqLywK
IAkJCQlFM0NGNzY5MDIxMTVENkJBMDA5MURFNDggLyogQ29tcGFjdFBvaW50ZXJUdXBsZS5oICov
LAogCQkJCUUzODAyMERCMjQwMUMwOTMwMDM3Q0E5RSAvKiBDb21wYWN0UmVmUHRyVHVwbGUuaCAq
LywKKwkJCQk5Qjk2RTlCMzI0RkY3N0I4MDAxNzU2QzMgLyogQ29tcGFjdFVuaXF1ZVB0clR1cGxl
LmggKi8sCiAJCQkJMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFk
LmNwcCAqLywKIAkJCQkwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJl
YWQuaCAqLywKIAkJCQlBOEE0NzI3MDE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNjYzODMpCisrKyBTb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQCBzZXQo
V1RGX1BVQkxJQ19IRUFERVJTCiAgICAgQ29tbWFQcmludGVyLmgKICAgICBDb21wYWN0UG9pbnRl
clR1cGxlLmgKICAgICBDb21wYWN0UmVmUHRyVHVwbGUuaAorICAgIENvbXBhY3RVbmlxdWVQdHJU
dXBsZS5oCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuaAogICAgIENvbXBpbGVyLmgKICAgICBDb21w
bGV0aW9uSGFuZGxlci5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db21wYWN0VW5pcXVlUHRyVHVw
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db21wYWN0VW5pcXVlUHRyVHVwbGUu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db21wYWN0VW5pcXVlUHRyVHVwbGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8bWVtb3J5
PgorI2luY2x1ZGUgPHd0Zi9Db21wYWN0UG9pbnRlclR1cGxlLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBUeXBlLCB0eXBlbmFtZSBEZWxldGVyID0gc3RkOjpkZWZhdWx0X2RlbGV0ZTxUPj4g
Y2xhc3MgQ29tcGFjdFVuaXF1ZVB0clR1cGxlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBUeXBlLCBjbGFzcy4uLiBBcmdzPgorQUxXQVlTX0lOTElORSBDb21wYWN0VW5pcXVlUHRy
VHVwbGU8VCwgVHlwZT4gbWFrZUNvbXBhY3RVbmlxdWVQdHIoQXJncyYmLi4uIGFyZ3MpCit7Cisg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgVDo6d2Via2l0RmFzdE1hbGxv
Y2VkLCBpbnQ+Ojp2YWx1ZSwgIlQgaXMgRmFzdE1hbGxvY2VkIik7CisgICAgcmV0dXJuIENvbXBh
Y3RVbmlxdWVQdHJUdXBsZTxULCBUeXBlPihzdGQ6Om1ha2VfdW5pcXVlPFQ+KCpuZXcgVChzdGQ6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFR5cGUsIHR5cGVuYW1lIERlbGV0ZXIsIGNsYXNzLi4uIEFyZ3M+CitBTFdBWVNfSU5M
SU5FIENvbXBhY3RVbmlxdWVQdHJUdXBsZTxULCBUeXBlPiBtYWtlQ29tcGFjdFVuaXF1ZVB0cihB
cmdzJiYuLi4gYXJncykKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTx0eXBlbmFt
ZSBUOjp3ZWJraXRGYXN0TWFsbG9jZWQsIGludD46OnZhbHVlLCAiVCBpcyBGYXN0TWFsbG9jZWQi
KTsKKyAgICByZXR1cm4gQ29tcGFjdFVuaXF1ZVB0clR1cGxlPFQsIFR5cGUsIERlbGV0ZXI+KHN0
ZDo6bWFrZV91bmlxdWU8VD4oKm5ldyBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHlwZSwgdHlwZW5hbWUgRGVsZXRl
cj4KK2NsYXNzIENvbXBhY3RVbmlxdWVQdHJUdXBsZSBmaW5hbCB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tcGFjdFVuaXF1ZVB0clR1
cGxlKTsKK3B1YmxpYzoKKyAgICBDb21wYWN0VW5pcXVlUHRyVHVwbGUoKSA9IGRlZmF1bHQ7CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBDb21wYWN0VW5pcXVlUHRyVHVwbGUoQ29t
cGFjdFVuaXF1ZVB0clR1cGxlPFUsIFR5cGUsIERlbGV0ZXI+JiYgb3RoZXIpCisgICAgeworICAg
ICAgICBtX2RhdGEgPSBvdGhlci5tX2RhdGE7CisgICAgICAgIG90aGVyLm1fZGF0YSA9IENvbXBh
Y3RQb2ludGVyVHVwbGU8VCosIFR5cGU+KCk7CisgICAgfQorCisgICAgfkNvbXBhY3RVbmlxdWVQ
dHJUdXBsZSgpCisgICAgeworICAgICAgICBzZXRQb2ludGVyKG51bGxwdHIpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIENvbXBhY3RVbmlxdWVQdHJUdXBsZTxULCBU
eXBlLCBEZWxldGVyPiYgb3BlcmF0b3I9KENvbXBhY3RVbmlxdWVQdHJUdXBsZTxVLCBUeXBlLCBE
ZWxldGVyPiYmIG90aGVyKQorICAgIHsKKyAgICAgICAgQ29tcGFjdFBvaW50ZXJUdXBsZTxUKiwg
VHlwZT4gdGVtcDsKKyAgICAgICAgc3RkOjpzd2FwKHRlbXAsIG90aGVyLm1fZGF0YSk7CisgICAg
ICAgIGRlbGV0ZVBvaW50ZXJJZk5vdE51bGwoKTsKKyAgICAgICAgc3RkOjpleGNoYW5nZShtX2Rh
dGEsIHRlbXApOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgVCogcG9pbnRl
cigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5wb2ludGVyKCk7IH0KKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxUPiBtb3ZlVG9VbmlxdWVQdHIoKQorICAgIHsKKyAgICAgICAgVCogcG9pbnRlciA9IG1f
ZGF0YS5wb2ludGVyKCk7CisgICAgICAgIG1fZGF0YS5zZXRQb2ludGVyKG51bGxwdHIpOworICAg
ICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFQsIERlbGV0ZXI+KHBvaW50ZXIpOworICAgIH0K
KworICAgIHZvaWQgc2V0UG9pbnRlcihudWxscHRyX3QpCisgICAgeworICAgICAgICBkZWxldGVQ
b2ludGVySWZOb3ROdWxsKCk7CisgICAgICAgIG1fZGF0YS5zZXRQb2ludGVyKG51bGxwdHIpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHZvaWQgc2V0UG9pbnRlcihz
dGQ6OnVuaXF1ZV9wdHI8VT4mJiBwb2ludGVyKQorICAgIHsKKyAgICAgICAgZGVsZXRlUG9pbnRl
cklmTm90TnVsbCgpOworICAgICAgICBtX2RhdGEuc2V0UG9pbnRlcihwb2ludGVyLnJlbGVhc2Uo
KSk7CisgICAgfQorCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnR5cGUo
KTsgfQorCisgICAgdm9pZCBzZXRUeXBlKFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIG1fZGF0
YS5zZXRUeXBlKHR5cGUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDb21wYWN0VW5pcXVlUHRy
VHVwbGUoc3RkOjp1bmlxdWVfcHRyPFQ+JiYgcG9pbnRlcikKKyAgICB7CisgICAgICAgIG1fZGF0
YS5zZXRQb2ludGVyKHBvaW50ZXIucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGRlbGV0
ZVBvaW50ZXJJZk5vdE51bGwoKQorICAgIHsKKyAgICAgICAgaWYgKFQqIHBvaW50ZXIgPSBtX2Rh
dGEucG9pbnRlcigpKQorICAgICAgICAgICAgRGVsZXRlcigpKHBvaW50ZXIpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEUsIGNsYXNzLi4uIEFyZ3M+IGZyaWVu
ZCBDb21wYWN0VW5pcXVlUHRyVHVwbGU8VSwgRT4gbWFrZUNvbXBhY3RVbmlxdWVQdHIoQXJncyYm
Li4uIGFyZ3MpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEUsIHR5cGVuYW1l
IEQsIGNsYXNzLi4uIEFyZ3M+IGZyaWVuZCBDb21wYWN0VW5pcXVlUHRyVHVwbGU8VSwgRSwgRD4g
bWFrZUNvbXBhY3RVbmlxdWVQdHIoQXJncyYmLi4uIGFyZ3MpOworCisgICAgQ29tcGFjdFBvaW50
ZXJUdXBsZTxUKiwgVHlwZT4gbV9kYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3Vz
aW5nIFdURjo6Q29tcGFjdFVuaXF1ZVB0clR1cGxlOwordXNpbmcgV1RGOjptYWtlQ29tcGFjdFVu
aXF1ZVB0cjsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI2NjQ1MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIwIEBACisyMDIwLTA5LTAyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJr
aXQub3JnPgorCisgICAgICAgIEFkZCBDb21wYWN0VW5pcXVlUHRyVHVwbGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTkzNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGJhc2ljIHVuaXQgdGVz
dHMgZm9yIENvbXBhY3RVbmlxdWVQdHJUdXBsZS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvQ29tcGFjdFVuaXF1ZVB0clR1cGxlLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpBKTogQWRkZS4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkE6OkEpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6QTo6fkEpOgorICAgICAgICAoV1RGX0NvbXBhY3RVbmlxdWVQdHJUdXBs
ZS5CYXNpYyk6CisKIDIwMjAtMDktMDEgIERpZWdvIFBpbm8gR2FyY2lhICA8ZHBpbm9AaWdhbGlh
LmNvbT4KIAogICAgICAgICBbRmxhdHBhayBTREtdIEFkYXB0IGNsZWFuLXdlYmtpdCBzY3JpcHQg
dG8gZmxhdHBhawpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAy
NjYzODMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAgICBUZXN0cy9XVEYv
Q1N0cmluZy5jcHAKICAgICBUZXN0cy9XVEYvQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNw
cAogICAgIFRlc3RzL1dURi9Db21wYWN0UmVmUHRyVHVwbGUuY3BwCisgICAgVGVzdHMvV1RGL0Nv
bXBhY3RVbmlxdWVQdHJUdXBsZS5jcHAKICAgICBUZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hT
ZXQuY3BwCiAgICAgVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKICAgICBUZXN0cy9XVEYvQ3Jvc3NU
aHJlYWRDb3BpZXIuY3BwCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY2
MzgzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgzMCw2ICs4MzAsNyBAQAogCQk5OTk5MTA4
QjFGMzkzQzk2MDA4QUQ0NTUgLyogQ29weWluZy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5OTkxMDhBMUYzOTNDOEIwMDhBRDQ1NSAvKiBDb3B5aW5n
Lm1tICovOyB9OwogCQk5QjAyRTBENjIzNUZBNDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlv
bi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJF
MEQ1MjM1RkE0N0QwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uLm1tICovOyB9OwogCQk5QjA3
ODZBNTFDNTg4NUMzMDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNP
cGVuX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjA3ODZBNDFDNTg4NUMzMDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hh
ZG93Um9vdHNPcGVuX0J1bmRsZS5jcHAgKi87IH07CisJCTlCMEMwNTE5MjRGREZCN0QwMEYyRkUz
MSAvKiBDb21wYWN0VW5pcXVlUHRyVHVwbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwQzA1MTgyNEZERkI3MDAwRjJGRTMxIC8qIENvbXBhY3RV
bmlxdWVQdHJUdXBsZS5jcHAgKi87IH07CiAJCTlCMTlDREEwMUYwNkRGRTMwMDA1NDhERCAvKiBO
ZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIxOUNEOUUxRjA2REZFMzAwMDU0OERE
IC8qIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0gKi87IH07CiAJ
CTlCMUY2Rjc4MUY5MDU1ODQwMEI1NTc0NCAvKiBDb3B5SFRNTC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMTA1NjQxMUY5MDQ1QzcwMEQ1NTgzRiAv
KiBDb3B5SFRNTC5tbSAqLzsgfTsKIAkJOUIxRjZGNzkxRjkwNTU5RTAwQjU1NzQ0IC8qIGNvcHkt
aHRtbC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCMTA1NjQyMUY5MDQ3Q0MwMEQ1NTgzRiAvKiBjb3B5LWh0bWwuaHRtbCAqLzsgfTsK
QEAgLTI0MjcsNiArMjQyOCw3IEBACiAJCTlCMDJFMEQ1MjM1RkE0N0QwMDQwNDRCMiAvKiBUZXh0
TWFuaXB1bGF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dE1hbmlwdWxhdGlvbi5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwNzg2QTIxQzU4ODMwRjAwRDE1OUUz
IC8qIEluamVjdGVkQnVuZGxlTWFrZUFsbFNoYWRvd1Jvb3RzT3Blbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZU1ha2VBbGxTaGFkb3dSb290
c09wZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjA3ODZBNDFDNTg4NUMz
MDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuX0J1bmRsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZU1h
a2VBbGxTaGFkb3dSb290c09wZW5fQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOUIwQzA1MTgyNEZERkI3MDAwRjJGRTMxIC8qIENvbXBhY3RVbmlxdWVQdHJUdXBsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21wYWN0VW5pcXVlUHRy
VHVwbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjEwNTY0MTFGOTA0NUM3
MDBENTU4M0YgLyogQ29weUhUTUwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb3B5SFRNTC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIxMDU2NDIxRjkwNDdDQzAwRDU1ODNG
IC8qIGNvcHktaHRtbC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImNvcHktaHRtbC5odG1sIjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIxOUNEOUUxRjA2REZFMzAwMDU0OEREIC8qIE5ldHdvcmtQ
cm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0
aW9uLm1tOyBwYXRoID0gV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5l
Y3Rpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MTM0LDYgKzQxMzYsNyBA
QAogCQkJCTA0NTFBNUE2MjM1RTQzOEUwMDlERjk0NSAvKiBCdW1wUG9pbnRlckFsbG9jYXRvci5j
cHAgKi8sCiAJCQkJQTdBOTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1ldGlj
T3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJRTMwMkJEQTkyNDA0QjkyMzAwODY1Mjc3IC8qIENvbXBh
Y3RSZWZQdHJUdXBsZS5jcHAgKi8sCisJCQkJOUIwQzA1MTgyNEZERkI3MDAwRjJGRTMxIC8qIENv
bXBhY3RVbmlxdWVQdHJUdXBsZS5jcHAgKi8sCiAJCQkJMEYzMENCNUIxRkNFMTc5MjAwNEI1MzIz
IC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLywKIAkJCQkwRkVBRTM2NzFCN0QxOUNCMDBD
RTE3RjIgLyogQ29uZGl0aW9uLmNwcCAqLywKIAkJCQkyNzhERTY0QjIyQjhENjExMDA0RTBFN0Eg
LyogQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwICovLApAQCAtNDg2Niw2ICs0ODY5LDcgQEAKIAkJCQkw
NERCMjM5NjIzNUU0M0VDMDAzMjhGMTcgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M4M0RFQTAxRDBBNTkwQzAwRkVCQ0YzIC8qIENoZWNrZWRBcml0aG1l
dGljT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzAyQkRBQTI0MDRCOTI0MDA4
NjUyNzcgLyogQ29tcGFjdFJlZlB0clR1cGxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTlCMEMw
NTE5MjRGREZCN0QwMEYyRkUzMSAvKiBDb21wYWN0VW5pcXVlUHRyVHVwbGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYzMENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNo
U2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUMzMUQwQTU5MEMwMEZFQkNGMyAvKiBD
b25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFQTYxRDBBNTkwQzAwRkVCQ0Yz
IC8qIENvdW50ZXJzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvQ29tcGFjdFVuaXF1ZVB0clR1cGxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db21wYWN0VW5pcXVlUHRyVHVwbGUuY3BwCShub25l
eGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbXBhY3RVbmlxdWVQ
dHJUdXBsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJSZWZMb2dnZXIuaCIKKyNpbmNsdWRl
ICJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGFjdFVuaXF1ZVB0clR1cGxlLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworY2xhc3MgQSB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBBKCkgeyArK3NfY29uc3RydWN0b3JDYWxsQ291bnQ7
IH0KKyAgICB+QSgpIHsgKytzX2Rlc3RydWN0b3JDYWxsQ291bnQ7IH0KKyAgICAKKyAgICBzdGF0
aWMgdW5zaWduZWQgc19jb25zdHJ1Y3RvckNhbGxDb3VudDsKKyAgICBzdGF0aWMgdW5zaWduZWQg
c19kZXN0cnVjdG9yQ2FsbENvdW50OworfTsKKwordW5zaWduZWQgQTo6c19jb25zdHJ1Y3RvckNh
bGxDb3VudCA9IDA7Cit1bnNpZ25lZCBBOjpzX2Rlc3RydWN0b3JDYWxsQ291bnQgPSAwOworCitU
RVNUKFdURl9Db21wYWN0VW5pcXVlUHRyVHVwbGUsIEJhc2ljKQoreworICAgIEE6OnNfY29uc3Ry
dWN0b3JDYWxsQ291bnQgPSAwOworICAgIEE6OnNfZGVzdHJ1Y3RvckNhbGxDb3VudCA9IDA7CisK
KyAgICBDb21wYWN0VW5pcXVlUHRyVHVwbGU8QSwgdWludDE2X3Q+IGVtcHR5OworICAgIEVYUEVD
VF9FUSgwVSwgQTo6c19jb25zdHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNUX0VRKDBVLCBB
OjpzX2Rlc3RydWN0b3JDYWxsQ291bnQpOworICAgIEVYUEVDVF9FUShudWxscHRyLCBlbXB0eS5w
b2ludGVyKCkpOworICAgIEVYUEVDVF9FUSgwVSwgZW1wdHkudHlwZSgpKTsKKworICAgIENvbXBh
Y3RVbmlxdWVQdHJUdXBsZTxBLCB1aW50MTZfdD4gYSA9IG1ha2VDb21wYWN0VW5pcXVlUHRyPEEs
IHVpbnQxNl90PigpOworICAgIEVYUEVDVF9FUSgxVSwgQTo6c19jb25zdHJ1Y3RvckNhbGxDb3Vu
dCk7CisgICAgRVhQRUNUX0VRKDBVLCBBOjpzX2Rlc3RydWN0b3JDYWxsQ291bnQpOworICAgIEVY
UEVDVF9ORShudWxscHRyLCBhLnBvaW50ZXIoKSk7CisgICAgRVhQRUNUX0VRKDBVLCBhLnR5cGUo
KSk7CisKKyAgICBhLnNldFBvaW50ZXIobnVsbHB0cik7CisgICAgRVhQRUNUX0VRKDFVLCBBOjpz
X2NvbnN0cnVjdG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1RfRVEoMVUsIEE6OnNfZGVzdHJ1Y3Rv
ckNhbGxDb3VudCk7CisgICAgRVhQRUNUX0VRKG51bGxwdHIsIGEucG9pbnRlcigpKTsKKyAgICBF
WFBFQ1RfRVEoMFUsIGEudHlwZSgpKTsKKworICAgIGEgPSBtYWtlQ29tcGFjdFVuaXF1ZVB0cjxB
LCB1aW50MTZfdD4oKTsKKyAgICBFWFBFQ1RfRVEoMlUsIEE6OnNfY29uc3RydWN0b3JDYWxsQ291
bnQpOworICAgIEVYUEVDVF9FUSgxVSwgQTo6c19kZXN0cnVjdG9yQ2FsbENvdW50KTsKKyAgICBF
WFBFQ1RfTkUobnVsbHB0ciwgYS5wb2ludGVyKCkpOworICAgIEVYUEVDVF9FUSgwVSwgYS50eXBl
KCkpOworCisgICAgYS5zZXRUeXBlKDB4ZmZmZlUpOworICAgIEVYUEVDVF9FUSgyVSwgQTo6c19j
b25zdHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNUX0VRKDFVLCBBOjpzX2Rlc3RydWN0b3JD
YWxsQ291bnQpOworICAgIEVYUEVDVF9ORShudWxscHRyLCBhLnBvaW50ZXIoKSk7CisgICAgRVhQ
RUNUX0VRKDB4ZmZmZlUsIGEudHlwZSgpKTsKKworICAgIGEuc2V0UG9pbnRlcihtYWtlVW5pcXVl
PEE+KCkpOworICAgIEEqIG9sZFBvaW50ZXIgPSBhLnBvaW50ZXIoKTsKKyAgICBFWFBFQ1RfRVEo
M1UsIEE6OnNfY29uc3RydWN0b3JDYWxsQ291bnQpOworICAgIEVYUEVDVF9FUSgyVSwgQTo6c19k
ZXN0cnVjdG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1RfTkUobnVsbHB0ciwgYS5wb2ludGVyKCkp
OworICAgIEVYUEVDVF9FUSgweGZmZmZVLCBhLnR5cGUoKSk7CisKKyAgICBhLnNldFR5cGUoMHgx
MDEwVSk7CisgICAgRVhQRUNUX0VRKDNVLCBBOjpzX2NvbnN0cnVjdG9yQ2FsbENvdW50KTsKKyAg
ICBFWFBFQ1RfRVEoMlUsIEE6OnNfZGVzdHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNUX0VR
KG9sZFBvaW50ZXIsIGEucG9pbnRlcigpKTsKKyAgICBFWFBFQ1RfRVEoMHgxMDEwVSwgYS50eXBl
KCkpOworCisgICAgYSA9IG1ha2VDb21wYWN0VW5pcXVlUHRyPEEsIHVpbnQxNl90PigpOworICAg
IEVYUEVDVF9FUSg0VSwgQTo6c19jb25zdHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNUX0VR
KDNVLCBBOjpzX2Rlc3RydWN0b3JDYWxsQ291bnQpOworICAgIEVYUEVDVF9ORShudWxscHRyLCBh
LnBvaW50ZXIoKSk7CisgICAgRVhQRUNUX0VRKDB4MFUsIGEudHlwZSgpKTsKKworICAgIGEuc2V0
VHlwZSgweGYyZjJVKTsKKyAgICBFWFBFQ1RfRVEoNFUsIEE6OnNfY29uc3RydWN0b3JDYWxsQ291
bnQpOworICAgIEVYUEVDVF9FUSgzVSwgQTo6c19kZXN0cnVjdG9yQ2FsbENvdW50KTsKKyAgICBF
WFBFQ1RfTkUobnVsbHB0ciwgYS5wb2ludGVyKCkpOworICAgIEVYUEVDVF9FUSgweGYyZjJVLCBh
LnR5cGUoKSk7CisKKyAgICBvbGRQb2ludGVyID0gYS5wb2ludGVyKCk7CisgICAgYXV0byBtb3Zl
ZEEgPSBhLm1vdmVUb1VuaXF1ZVB0cigpOworICAgIEVYUEVDVF9FUSg0VSwgQTo6c19jb25zdHJ1
Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNUX0VRKDNVLCBBOjpzX2Rlc3RydWN0b3JDYWxsQ291
bnQpOworICAgIEVYUEVDVF9FUShudWxscHRyLCBhLnBvaW50ZXIoKSk7CisgICAgRVhQRUNUX0VR
KG1vdmVkQS5nZXQoKSwgb2xkUG9pbnRlcik7CisgICAgRVhQRUNUX0VRKDB4ZjJmMlUsIGEudHlw
ZSgpKTsKKworICAgIGEuc2V0UG9pbnRlcihXVEZNb3ZlKG1vdmVkQSkpOworICAgIEVYUEVDVF9F
USg0VSwgQTo6c19jb25zdHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNUX0VRKDNVLCBBOjpz
X2Rlc3RydWN0b3JDYWxsQ291bnQpOworICAgIEVYUEVDVF9FUShvbGRQb2ludGVyLCBhLnBvaW50
ZXIoKSk7CisgICAgRVhQRUNUX0VRKG1vdmVkQS5nZXQoKSwgbnVsbHB0cik7CisgICAgRVhQRUNU
X0VRKDB4ZjJmMlUsIGEudHlwZSgpKTsKKworICAgIENvbXBhY3RVbmlxdWVQdHJUdXBsZTxBLCB1
aW50MTZfdD4gYiA9IFdURk1vdmUoYSk7CisgICAgRVhQRUNUX0VRKDRVLCBBOjpzX2NvbnN0cnVj
dG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1RfRVEoM1UsIEE6OnNfZGVzdHJ1Y3RvckNhbGxDb3Vu
dCk7CisgICAgRVhQRUNUX0VRKG51bGxwdHIsIGEucG9pbnRlcigpKTsKKyAgICBFWFBFQ1RfRVEo
MCwgYS50eXBlKCkpOworICAgIEVYUEVDVF9FUShvbGRQb2ludGVyLCBiLnBvaW50ZXIoKSk7Cisg
ICAgRVhQRUNUX0VRKDB4ZjJmMlUsIGIudHlwZSgpKTsKKworICAgIENvbXBhY3RVbmlxdWVQdHJU
dXBsZTxBLCB1aW50MTZfdD4qIGJQdHIgPSAmYjsKKworICAgIGIgPSBXVEZNb3ZlKCpiUHRyKTsK
KyAgICBFWFBFQ1RfRVEoNFUsIEE6OnNfY29uc3RydWN0b3JDYWxsQ291bnQpOworICAgIEVYUEVD
VF9FUSgzVSwgQTo6c19kZXN0cnVjdG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1RfRVEobnVsbHB0
ciwgYS5wb2ludGVyKCkpOworICAgIEVYUEVDVF9FUSgwLCBhLnR5cGUoKSk7CisgICAgRVhQRUNU
X0VRKG9sZFBvaW50ZXIsIGIucG9pbnRlcigpKTsKKyAgICBFWFBFQ1RfRVEoMHhmMmYyVSwgYi50
eXBlKCkpOworCisgICAgYi5zZXRQb2ludGVyKG51bGxwdHIpOworICAgIEVYUEVDVF9FUSg0VSwg
QTo6c19jb25zdHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNUX0VRKDRVLCBBOjpzX2Rlc3Ry
dWN0b3JDYWxsQ291bnQpOworICAgIEVYUEVDVF9FUShudWxscHRyLCBhLnBvaW50ZXIoKSk7Cisg
ICAgRVhQRUNUX0VRKDAsIGEudHlwZSgpKTsKKyAgICBFWFBFQ1RfRVEobnVsbHB0ciwgYi5wb2lu
dGVyKCkpOworICAgIEVYUEVDVF9FUSgweGYyZjJVLCBiLnR5cGUoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407870</attachid>
            <date>2020-09-02 22:41:37 -0700</date>
            <delta_ts>2020-09-02 23:16:17 -0700</delta_ts>
            <desc>Addresed Darin&apos;s review comment</desc>
            <filename>bug-215936-20200902224135.patch</filename>
            <type>text/plain</type>
            <size>19574</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjYzODMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDIwLTA5LTAyICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBDb21wYWN0VW5pcXVlUHRyVHVwbGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTkzNgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgbmV3IHRl
bXBsYXRlIGNsYXNzLCBDb21wYWN0VW5pcXVlUHRyVHVwbGUsIHdoaWNoIHN0b3JlcyBhIHBvaW50
ZXIgYW5kIHVwIHRvIDE2LWJpdHMgb2YKKyAgICAgICAgYSBQT0QgdHlwZSB1c2luZyBDb21wYWN0
UG9pbnRlclR1cGxlLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9Db21wYWN0VW5p
cXVlUHRyVHVwbGUuaDogQWRkZWQuCisgICAgICAgIChXVEY6Om1ha2VDb21wYWN0VW5pcXVlUHRy
KTogQWRkZWQuIExpa2UgbWFrZVVuaXF1ZSwgY3JlYXRlcyBhbiBvYmplY3Qgb2YgdGhlIHNwZWNp
ZmllZCB0eXBlCisgICAgICAgIGFuZCByZXR1cm5zIENvbXBhY3RVbmlxdWVQdHJUdXBsZS4KKyAg
ICAgICAgKFdURjo6Q29tcGFjdFVuaXF1ZVB0clR1cGxlKTogQWRkZWQuCisgICAgICAgIChXVEY6
OkNvbXBhY3RVbmlxdWVQdHJUdXBsZTo6Q29tcGFjdFVuaXF1ZVB0clR1cGxlKTogTW92ZSBjb25z
dHJ1Y3Rvci4KKyAgICAgICAgKFdURjo6Q29tcGFjdFVuaXF1ZVB0clR1cGxlOjp+Q29tcGFjdFVu
aXF1ZVB0clR1cGxlKToKKyAgICAgICAgKFdURjo6Q29tcGFjdFVuaXF1ZVB0clR1cGxlOjpvcGVy
YXRvcj0pOgorICAgICAgICAoV1RGOjpDb21wYWN0VW5pcXVlUHRyVHVwbGU6OnBvaW50ZXIpOgor
ICAgICAgICAoV1RGOjpDb21wYWN0VW5pcXVlUHRyVHVwbGU6Om1vdmVUb1VuaXF1ZVB0cik6IENs
ZWFycyB0aGlzIHBvaW50ZXIgYW5kIHJldHVybnMgdW5pcXVlX3B0ci4KKyAgICAgICAgKFdURjo6
Q29tcGFjdFVuaXF1ZVB0clR1cGxlOjpzZXRQb2ludGVyKTogTGlrZSBDb21wYWN0UG9pbnRlclR1
cGxlIHNldHMgdGhlIHBvaW50ZXIgY29tcG9uZW50CisgICAgICAgIG9mIHRoaXMgdHVwbGUsIGZy
ZWVpbmcgdGhlIG9sZCBvYmplY3QgaWYgdGhlcmUgaXMgYWxyZWFkeSBvbmUgc3RvcmVkLgorICAg
ICAgICAoV1RGOjpDb21wYWN0VW5pcXVlUHRyVHVwbGU6OnR5cGUpOgorICAgICAgICAoV1RGOjpD
b21wYWN0VW5pcXVlUHRyVHVwbGU6OnNldFR5cGUpOgorICAgICAgICAoV1RGOjpDb21wYWN0VW5p
cXVlUHRyVHVwbGU6OkNvbXBhY3RVbmlxdWVQdHJUdXBsZSk6IENvbnN0cnVjdG9yIHdoaWNoIHRh
a2VzIHVuaXF1ZV9wdHImJi4KKyAgICAgICAgKFdURjo6Q29tcGFjdFVuaXF1ZVB0clR1cGxlOjpk
ZWxldGVQb2ludGVySWZOb3ROdWxsKToKKwogMjAyMC0wOC0zMSAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2UgQmlnNSBlbmNvZGVyIGNv
bmZvcm0gdG8gdGhlIHNwZWNpZmljYXRpb24gYW5kIGJlaGF2aW9yIG9mIENocm9tZSBhbmQgRmly
ZWZveApJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyNjYzODMpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00OTYsNiArNDk2LDcgQEAKIAkJOTc0Q0ZDOEQxNkE0RjMyNzAw
NkQ1NDA0IC8qIFdlYWtQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vh
a1B0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTZCMTc4NDFFQkE0NDFDMDA3
RTEwRUIgLyogRGVidWdVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGVidWdVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUI2N0Yz
RjEyMjI4RDUzMTAwMzBERTlDIC8qIFdlYWtIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtI
YXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCOTZFOUIzMjRGRjc3Qjgw
MDE3NTZDMyAvKiBDb21wYWN0VW5pcXVlUHRyVHVwbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGFj
dFVuaXF1ZVB0clR1cGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQzcwRjA0
MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9tU3RyaW5nVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQXRvbVN0cmluZ1RhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOUJEOEY0MEExNzZDMkFEODAwMDJEODY1IC8qIEF0b21TdHJpbmdUYWJs
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBdG9tU3RyaW5nVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUM2N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8qIEluZGV4ZWRDb250YWluZXJJ
dGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGVkQ29udGFp
bmVySXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3Myw2ICs5NzQs
NyBAQAogCQkJCTBGQzRFREU1MTY5NjE0OTYwMEY2NTA0MSAvKiBDb21tYVByaW50ZXIuaCAqLywK
IAkJCQlFM0NGNzY5MDIxMTVENkJBMDA5MURFNDggLyogQ29tcGFjdFBvaW50ZXJUdXBsZS5oICov
LAogCQkJCUUzODAyMERCMjQwMUMwOTMwMDM3Q0E5RSAvKiBDb21wYWN0UmVmUHRyVHVwbGUuaCAq
LywKKwkJCQk5Qjk2RTlCMzI0RkY3N0I4MDAxNzU2QzMgLyogQ29tcGFjdFVuaXF1ZVB0clR1cGxl
LmggKi8sCiAJCQkJMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFk
LmNwcCAqLywKIAkJCQkwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJl
YWQuaCAqLywKIAkJCQlBOEE0NzI3MDE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNjYzODMpCisrKyBTb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQCBzZXQo
V1RGX1BVQkxJQ19IRUFERVJTCiAgICAgQ29tbWFQcmludGVyLmgKICAgICBDb21wYWN0UG9pbnRl
clR1cGxlLmgKICAgICBDb21wYWN0UmVmUHRyVHVwbGUuaAorICAgIENvbXBhY3RVbmlxdWVQdHJU
dXBsZS5oCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuaAogICAgIENvbXBpbGVyLmgKICAgICBDb21w
bGV0aW9uSGFuZGxlci5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db21wYWN0VW5pcXVlUHRyVHVw
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db21wYWN0VW5pcXVlUHRyVHVwbGUu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db21wYWN0VW5pcXVlUHRyVHVwbGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8bWVtb3J5
PgorI2luY2x1ZGUgPHd0Zi9Db21wYWN0UG9pbnRlclR1cGxlLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBUeXBlLCB0eXBlbmFtZSBEZWxldGVyID0gc3RkOjpkZWZhdWx0X2RlbGV0ZTxUPj4g
Y2xhc3MgQ29tcGFjdFVuaXF1ZVB0clR1cGxlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBUeXBlLCBjbGFzcy4uLiBBcmdzPgorQUxXQVlTX0lOTElORSBDb21wYWN0VW5pcXVlUHRy
VHVwbGU8VCwgVHlwZT4gbWFrZUNvbXBhY3RVbmlxdWVQdHIoQXJncyYmLi4uIGFyZ3MpCit7Cisg
ICAgcmV0dXJuIENvbXBhY3RVbmlxdWVQdHJUdXBsZTxULCBUeXBlPihtYWtlVW5pcXVlPFQ+KHN0
ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBUeXBlLCB0eXBlbmFtZSBEZWxldGVyLCBjbGFzcy4uLiBBcmdzPgorQUxXQVlTX0lO
TElORSBDb21wYWN0VW5pcXVlUHRyVHVwbGU8VCwgVHlwZT4gbWFrZUNvbXBhY3RVbmlxdWVQdHIo
QXJncyYmLi4uIGFyZ3MpCit7CisgICAgcmV0dXJuIENvbXBhY3RVbmlxdWVQdHJUdXBsZTxULCBU
eXBlLCBEZWxldGVyPihtYWtlVW5pcXVlPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUeXBlLCB0eXBlbmFtZSBEZWxl
dGVyPgorY2xhc3MgQ29tcGFjdFVuaXF1ZVB0clR1cGxlIGZpbmFsIHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21wYWN0VW5pcXVlUHRy
VHVwbGUpOworcHVibGljOgorICAgIENvbXBhY3RVbmlxdWVQdHJUdXBsZSgpID0gZGVmYXVsdDsK
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIENvbXBhY3RVbmlxdWVQdHJUdXBsZShD
b21wYWN0VW5pcXVlUHRyVHVwbGU8VSwgVHlwZSwgRGVsZXRlcj4mJiBvdGhlcikKKyAgICB7Cisg
ICAgICAgIG1fZGF0YSA9IG90aGVyLm1fZGF0YTsKKyAgICAgICAgb3RoZXIubV9kYXRhID0gQ29t
cGFjdFBvaW50ZXJUdXBsZTxUKiwgVHlwZT4oKTsKKyAgICB9CisKKyAgICB+Q29tcGFjdFVuaXF1
ZVB0clR1cGxlKCkKKyAgICB7CisgICAgICAgIHNldFBvaW50ZXIobnVsbHB0cik7CisgICAgfQor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgQ29tcGFjdFVuaXF1ZVB0clR1cGxlPFQs
IFR5cGUsIERlbGV0ZXI+JiBvcGVyYXRvcj0oQ29tcGFjdFVuaXF1ZVB0clR1cGxlPFUsIFR5cGUs
IERlbGV0ZXI+JiYgb3RoZXIpCisgICAgeworICAgICAgICBDb21wYWN0UG9pbnRlclR1cGxlPFQq
LCBUeXBlPiB0ZW1wOworICAgICAgICBzdGQ6OnN3YXAodGVtcCwgb3RoZXIubV9kYXRhKTsKKyAg
ICAgICAgZGVsZXRlUG9pbnRlcklmTm90TnVsbCgpOworICAgICAgICBzdGQ6OmV4Y2hhbmdlKG1f
ZGF0YSwgdGVtcCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBUKiBwb2lu
dGVyKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnBvaW50ZXIoKTsgfQorCisgICAgc3RkOjp1bmlx
dWVfcHRyPFQ+IG1vdmVUb1VuaXF1ZVB0cigpCisgICAgeworICAgICAgICBUKiBwb2ludGVyID0g
bV9kYXRhLnBvaW50ZXIoKTsKKyAgICAgICAgbV9kYXRhLnNldFBvaW50ZXIobnVsbHB0cik7Cisg
ICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8VCwgRGVsZXRlcj4ocG9pbnRlcik7CisgICAg
fQorCisgICAgdm9pZCBzZXRQb2ludGVyKG51bGxwdHJfdCkKKyAgICB7CisgICAgICAgIGRlbGV0
ZVBvaW50ZXJJZk5vdE51bGwoKTsKKyAgICAgICAgbV9kYXRhLnNldFBvaW50ZXIobnVsbHB0cik7
CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgdm9pZCBzZXRQb2ludGVy
KHN0ZDo6dW5pcXVlX3B0cjxVPiYmIHBvaW50ZXIpCisgICAgeworICAgICAgICBkZWxldGVQb2lu
dGVySWZOb3ROdWxsKCk7CisgICAgICAgIG1fZGF0YS5zZXRQb2ludGVyKHBvaW50ZXIucmVsZWFz
ZSgpKTsKKyAgICB9CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEudHlw
ZSgpOyB9CisKKyAgICB2b2lkIHNldFR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgbV9k
YXRhLnNldFR5cGUodHlwZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENvbXBhY3RVbmlxdWVQ
dHJUdXBsZShzdGQ6OnVuaXF1ZV9wdHI8VD4mJiBwb2ludGVyKQorICAgIHsKKyAgICAgICAgbV9k
YXRhLnNldFBvaW50ZXIocG9pbnRlci5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHZvaWQgZGVs
ZXRlUG9pbnRlcklmTm90TnVsbCgpCisgICAgeworICAgICAgICBpZiAoVCogcG9pbnRlciA9IG1f
ZGF0YS5wb2ludGVyKCkpCisgICAgICAgICAgICBEZWxldGVyKCkocG9pbnRlcik7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRSwgY2xhc3MuLi4gQXJncz4gZnJp
ZW5kIENvbXBhY3RVbmlxdWVQdHJUdXBsZTxVLCBFPiBtYWtlQ29tcGFjdFVuaXF1ZVB0cihBcmdz
JiYuLi4gYXJncyk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRSwgdHlwZW5h
bWUgRCwgY2xhc3MuLi4gQXJncz4gZnJpZW5kIENvbXBhY3RVbmlxdWVQdHJUdXBsZTxVLCBFLCBE
PiBtYWtlQ29tcGFjdFVuaXF1ZVB0cihBcmdzJiYuLi4gYXJncyk7CisKKyAgICBDb21wYWN0UG9p
bnRlclR1cGxlPFQqLCBUeXBlPiBtX2RhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
dXNpbmcgV1RGOjpDb21wYWN0VW5pcXVlUHRyVHVwbGU7Cit1c2luZyBXVEY6Om1ha2VDb21wYWN0
VW5pcXVlUHRyOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gMjY2NDUxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDktMDIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgQWRkIENvbXBhY3RVbmlxdWVQdHJUdXBsZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTM2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYmFzaWMgdW5pdCB0
ZXN0cyBmb3IgQ29tcGFjdFVuaXF1ZVB0clR1cGxlLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9Db21wYWN0VW5pcXVlUHRyVHVwbGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkEpOiBBZGRlLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6QTo6QSk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpBOjp+QSk6CisgICAgICAgIChXVEZfQ29tcGFjdFVuaXF1ZVB0clR1
cGxlLkJhc2ljKToKKwogMjAyMC0wOS0wMSAgRGllZ28gUGlubyBHYXJjaWEgIDxkcGlub0BpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtGbGF0cGFrIFNES10gQWRhcHQgY2xlYW4td2Via2l0IHNjcmlw
dCB0byBmbGF0cGFrCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDI2NjM4MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgIFRlc3RzL1dU
Ri9DU3RyaW5nLmNwcAogICAgIFRlc3RzL1dURi9DaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMu
Y3BwCiAgICAgVGVzdHMvV1RGL0NvbXBhY3RSZWZQdHJUdXBsZS5jcHAKKyAgICBUZXN0cy9XVEYv
Q29tcGFjdFVuaXF1ZVB0clR1cGxlLmNwcAogICAgIFRlc3RzL1dURi9Db25jdXJyZW50UHRySGFz
aFNldC5jcHAKICAgICBUZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAogICAgIFRlc3RzL1dURi9Dcm9z
c1RocmVhZENvcGllci5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
NjYzODMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODMwLDYgKzgzMCw3IEBACiAJCTk5OTkx
MDhCMUYzOTNDOTYwMDhBRDQ1NSAvKiBDb3B5aW5nLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk5OTEwOEExRjM5M0M4QjAwOEFENDU1IC8qIENvcHlp
bmcubW0gKi87IH07CiAJCTlCMDJFMEQ2MjM1RkE0N0QwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0
aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIw
MkUwRDUyMzVGQTQ3RDAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb24ubW0gKi87IH07CiAJCTlC
MDc4NkE1MUM1ODg1QzMwMEQxNTlFMyAvKiBJbmplY3RlZEJ1bmRsZU1ha2VBbGxTaGFkb3dSb290
c09wZW5fQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCMDc4NkE0MUM1ODg1QzMwMEQxNTlFMyAvKiBJbmplY3RlZEJ1bmRsZU1ha2VBbGxT
aGFkb3dSb290c09wZW5fQnVuZGxlLmNwcCAqLzsgfTsKKwkJOUIwQzA1MTkyNEZERkI3RDAwRjJG
RTMxIC8qIENvbXBhY3RVbmlxdWVQdHJUdXBsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjBDMDUxODI0RkRGQjcwMDBGMkZFMzEgLyogQ29tcGFj
dFVuaXF1ZVB0clR1cGxlLmNwcCAqLzsgfTsKIAkJOUIxOUNEQTAxRjA2REZFMzAwMDU0OEREIC8q
IE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjE5Q0Q5RTFGMDZERkUzMDAwNTQ4
REQgLyogTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbSAqLzsgfTsK
IAkJOUIxRjZGNzgxRjkwNTU4NDAwQjU1NzQ0IC8qIENvcHlIVE1MLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIxMDU2NDExRjkwNDVDNzAwRDU1ODNG
IC8qIENvcHlIVE1MLm1tICovOyB9OwogCQk5QjFGNkY3OTFGOTA1NTlFMDBCNTU3NDQgLyogY29w
eS1odG1sLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIxMDU2NDIxRjkwNDdDQzAwRDU1ODNGIC8qIGNvcHktaHRtbC5odG1sICovOyB9
OwpAQCAtMjQyNyw2ICsyNDI4LDcgQEAKIAkJOUIwMkUwRDUyMzVGQTQ3RDAwNDA0NEIyIC8qIFRl
eHRNYW5pcHVsYXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0TWFuaXB1bGF0aW9u
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjA3ODZBMjFDNTg4MzBGMDBEMTU5
RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlTWFrZUFsbFNoYWRvd1Jv
b3RzT3Blbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDc4NkE0MUM1ODg1
QzMwMEQxNTlFMyAvKiBJbmplY3RlZEJ1bmRsZU1ha2VBbGxTaGFkb3dSb290c09wZW5fQnVuZGxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxl
TWFrZUFsbFNoYWRvd1Jvb3RzT3Blbl9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5QjBDMDUxODI0RkRGQjcwMDBGMkZFMzEgLyogQ29tcGFjdFVuaXF1ZVB0clR1cGxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBhY3RVbmlxdWVQ
dHJUdXBsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMTA1NjQxMUY5MDQ1
QzcwMEQ1NTgzRiAvKiBDb3B5SFRNTC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvcHlIVE1M
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjEwNTY0MjFGOTA0N0NDMDBENTU4
M0YgLyogY29weS1odG1sLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiY29weS1odG1sLmh0bWwiOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5QjE5Q0Q5RTFGMDZERkUzMDAwNTQ4REQgLyogTmV0d29y
a1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5l
Y3Rpb24ubW07IHBhdGggPSBXZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29u
bmVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQxMzQsNiArNDEzNiw3
IEBACiAJCQkJMDQ1MUE1QTYyMzVFNDM4RTAwOURGOTQ1IC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9y
LmNwcCAqLywKIAkJCQlBN0E5NjZEQTE0MEVDQ0M4MDA1RUY5QjQgLyogQ2hlY2tlZEFyaXRobWV0
aWNPcGVyYXRpb25zLmNwcCAqLywKIAkJCQlFMzAyQkRBOTI0MDRCOTIzMDA4NjUyNzcgLyogQ29t
cGFjdFJlZlB0clR1cGxlLmNwcCAqLywKKwkJCQk5QjBDMDUxODI0RkRGQjcwMDBGMkZFMzEgLyog
Q29tcGFjdFVuaXF1ZVB0clR1cGxlLmNwcCAqLywKIAkJCQkwRjMwQ0I1QjFGQ0UxNzkyMDA0QjUz
MjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovLAogCQkJCTBGRUFFMzY3MUI3RDE5Q0Iw
MENFMTdGMiAvKiBDb25kaXRpb24uY3BwICovLAogCQkJCTI3OERFNjRCMjJCOEQ2MTEwMDRFMEU3
QSAvKiBDcm9zc1RocmVhZENvcGllci5jcHAgKi8sCkBAIC00ODY2LDYgKzQ4NjksNyBAQAogCQkJ
CTA0REIyMzk2MjM1RTQzRUMwMDMyOEYxNyAvKiBCdW1wUG9pbnRlckFsbG9jYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3QzgzREVBMDFEMEE1OTBDMDBGRUJDRjMgLyogQ2hlY2tlZEFyaXRo
bWV0aWNPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzMDJCREFBMjQwNEI5MjQw
MDg2NTI3NyAvKiBDb21wYWN0UmVmUHRyVHVwbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOUIw
QzA1MTkyNEZERkI3RDAwRjJGRTMxIC8qIENvbXBhY3RVbmlxdWVQdHJUdXBsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjMwQ0I1QzFGQ0UxNzk2MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhh
c2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFQzMxRDBBNTkwQzAwRkVCQ0YzIC8q
IENvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVBNjFEMEE1OTBDMDBGRUJD
RjMgLyogQ291bnRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Db21wYWN0VW5pcXVlUHRyVHVwbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbXBhY3RVbmlxdWVQdHJUdXBsZS5jcHAJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29tcGFjdFVuaXF1
ZVB0clR1cGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlJlZkxvZ2dlci5oIgorI2luY2x1
ZGUgIlV0aWxpdGllcy5oIgorI2luY2x1ZGUgPHd0Zi9Db21wYWN0VW5pcXVlUHRyVHVwbGUuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBBIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIEEoKSB7ICsrc19jb25zdHJ1Y3RvckNhbGxDb3Vu
dDsgfQorICAgIH5BKCkgeyArK3NfZGVzdHJ1Y3RvckNhbGxDb3VudDsgfQorICAgIAorICAgIHN0
YXRpYyB1bnNpZ25lZCBzX2NvbnN0cnVjdG9yQ2FsbENvdW50OworICAgIHN0YXRpYyB1bnNpZ25l
ZCBzX2Rlc3RydWN0b3JDYWxsQ291bnQ7Cit9OworCit1bnNpZ25lZCBBOjpzX2NvbnN0cnVjdG9y
Q2FsbENvdW50ID0gMDsKK3Vuc2lnbmVkIEE6OnNfZGVzdHJ1Y3RvckNhbGxDb3VudCA9IDA7CisK
K1RFU1QoV1RGX0NvbXBhY3RVbmlxdWVQdHJUdXBsZSwgQmFzaWMpCit7CisgICAgQTo6c19jb25z
dHJ1Y3RvckNhbGxDb3VudCA9IDA7CisgICAgQTo6c19kZXN0cnVjdG9yQ2FsbENvdW50ID0gMDsK
KworICAgIENvbXBhY3RVbmlxdWVQdHJUdXBsZTxBLCB1aW50MTZfdD4gZW1wdHk7CisgICAgRVhQ
RUNUX0VRKDBVLCBBOjpzX2NvbnN0cnVjdG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1RfRVEoMFUs
IEE6OnNfZGVzdHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNUX0VRKG51bGxwdHIsIGVtcHR5
LnBvaW50ZXIoKSk7CisgICAgRVhQRUNUX0VRKDBVLCBlbXB0eS50eXBlKCkpOworCisgICAgQ29t
cGFjdFVuaXF1ZVB0clR1cGxlPEEsIHVpbnQxNl90PiBhID0gbWFrZUNvbXBhY3RVbmlxdWVQdHI8
QSwgdWludDE2X3Q+KCk7CisgICAgRVhQRUNUX0VRKDFVLCBBOjpzX2NvbnN0cnVjdG9yQ2FsbENv
dW50KTsKKyAgICBFWFBFQ1RfRVEoMFUsIEE6OnNfZGVzdHJ1Y3RvckNhbGxDb3VudCk7CisgICAg
RVhQRUNUX05FKG51bGxwdHIsIGEucG9pbnRlcigpKTsKKyAgICBFWFBFQ1RfRVEoMFUsIGEudHlw
ZSgpKTsKKworICAgIGEuc2V0UG9pbnRlcihudWxscHRyKTsKKyAgICBFWFBFQ1RfRVEoMVUsIEE6
OnNfY29uc3RydWN0b3JDYWxsQ291bnQpOworICAgIEVYUEVDVF9FUSgxVSwgQTo6c19kZXN0cnVj
dG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1RfRVEobnVsbHB0ciwgYS5wb2ludGVyKCkpOworICAg
IEVYUEVDVF9FUSgwVSwgYS50eXBlKCkpOworCisgICAgYSA9IG1ha2VDb21wYWN0VW5pcXVlUHRy
PEEsIHVpbnQxNl90PigpOworICAgIEVYUEVDVF9FUSgyVSwgQTo6c19jb25zdHJ1Y3RvckNhbGxD
b3VudCk7CisgICAgRVhQRUNUX0VRKDFVLCBBOjpzX2Rlc3RydWN0b3JDYWxsQ291bnQpOworICAg
IEVYUEVDVF9ORShudWxscHRyLCBhLnBvaW50ZXIoKSk7CisgICAgRVhQRUNUX0VRKDBVLCBhLnR5
cGUoKSk7CisKKyAgICBhLnNldFR5cGUoMHhmZmZmVSk7CisgICAgRVhQRUNUX0VRKDJVLCBBOjpz
X2NvbnN0cnVjdG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1RfRVEoMVUsIEE6OnNfZGVzdHJ1Y3Rv
ckNhbGxDb3VudCk7CisgICAgRVhQRUNUX05FKG51bGxwdHIsIGEucG9pbnRlcigpKTsKKyAgICBF
WFBFQ1RfRVEoMHhmZmZmVSwgYS50eXBlKCkpOworCisgICAgYS5zZXRQb2ludGVyKG1ha2VVbmlx
dWU8QT4oKSk7CisgICAgQSogb2xkUG9pbnRlciA9IGEucG9pbnRlcigpOworICAgIEVYUEVDVF9F
USgzVSwgQTo6c19jb25zdHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNUX0VRKDJVLCBBOjpz
X2Rlc3RydWN0b3JDYWxsQ291bnQpOworICAgIEVYUEVDVF9ORShudWxscHRyLCBhLnBvaW50ZXIo
KSk7CisgICAgRVhQRUNUX0VRKDB4ZmZmZlUsIGEudHlwZSgpKTsKKworICAgIGEuc2V0VHlwZSgw
eDEwMTBVKTsKKyAgICBFWFBFQ1RfRVEoM1UsIEE6OnNfY29uc3RydWN0b3JDYWxsQ291bnQpOwor
ICAgIEVYUEVDVF9FUSgyVSwgQTo6c19kZXN0cnVjdG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1Rf
RVEob2xkUG9pbnRlciwgYS5wb2ludGVyKCkpOworICAgIEVYUEVDVF9FUSgweDEwMTBVLCBhLnR5
cGUoKSk7CisKKyAgICBhID0gbWFrZUNvbXBhY3RVbmlxdWVQdHI8QSwgdWludDE2X3Q+KCk7Cisg
ICAgRVhQRUNUX0VRKDRVLCBBOjpzX2NvbnN0cnVjdG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1Rf
RVEoM1UsIEE6OnNfZGVzdHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNUX05FKG51bGxwdHIs
IGEucG9pbnRlcigpKTsKKyAgICBFWFBFQ1RfRVEoMHgwVSwgYS50eXBlKCkpOworCisgICAgYS5z
ZXRUeXBlKDB4ZjJmMlUpOworICAgIEVYUEVDVF9FUSg0VSwgQTo6c19jb25zdHJ1Y3RvckNhbGxD
b3VudCk7CisgICAgRVhQRUNUX0VRKDNVLCBBOjpzX2Rlc3RydWN0b3JDYWxsQ291bnQpOworICAg
IEVYUEVDVF9ORShudWxscHRyLCBhLnBvaW50ZXIoKSk7CisgICAgRVhQRUNUX0VRKDB4ZjJmMlUs
IGEudHlwZSgpKTsKKworICAgIG9sZFBvaW50ZXIgPSBhLnBvaW50ZXIoKTsKKyAgICBhdXRvIG1v
dmVkQSA9IGEubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgRVhQRUNUX0VRKDRVLCBBOjpzX2NvbnN0
cnVjdG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1RfRVEoM1UsIEE6OnNfZGVzdHJ1Y3RvckNhbGxD
b3VudCk7CisgICAgRVhQRUNUX0VRKG51bGxwdHIsIGEucG9pbnRlcigpKTsKKyAgICBFWFBFQ1Rf
RVEobW92ZWRBLmdldCgpLCBvbGRQb2ludGVyKTsKKyAgICBFWFBFQ1RfRVEoMHhmMmYyVSwgYS50
eXBlKCkpOworCisgICAgYS5zZXRQb2ludGVyKFdURk1vdmUobW92ZWRBKSk7CisgICAgRVhQRUNU
X0VRKDRVLCBBOjpzX2NvbnN0cnVjdG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1RfRVEoM1UsIEE6
OnNfZGVzdHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNUX0VRKG9sZFBvaW50ZXIsIGEucG9p
bnRlcigpKTsKKyAgICBFWFBFQ1RfRVEobW92ZWRBLmdldCgpLCBudWxscHRyKTsKKyAgICBFWFBF
Q1RfRVEoMHhmMmYyVSwgYS50eXBlKCkpOworCisgICAgQ29tcGFjdFVuaXF1ZVB0clR1cGxlPEEs
IHVpbnQxNl90PiBiID0gV1RGTW92ZShhKTsKKyAgICBFWFBFQ1RfRVEoNFUsIEE6OnNfY29uc3Ry
dWN0b3JDYWxsQ291bnQpOworICAgIEVYUEVDVF9FUSgzVSwgQTo6c19kZXN0cnVjdG9yQ2FsbENv
dW50KTsKKyAgICBFWFBFQ1RfRVEobnVsbHB0ciwgYS5wb2ludGVyKCkpOworICAgIEVYUEVDVF9F
USgwLCBhLnR5cGUoKSk7CisgICAgRVhQRUNUX0VRKG9sZFBvaW50ZXIsIGIucG9pbnRlcigpKTsK
KyAgICBFWFBFQ1RfRVEoMHhmMmYyVSwgYi50eXBlKCkpOworCisgICAgQ29tcGFjdFVuaXF1ZVB0
clR1cGxlPEEsIHVpbnQxNl90PiogYlB0ciA9ICZiOworCisgICAgYiA9IFdURk1vdmUoKmJQdHIp
OworICAgIEVYUEVDVF9FUSg0VSwgQTo6c19jb25zdHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQ
RUNUX0VRKDNVLCBBOjpzX2Rlc3RydWN0b3JDYWxsQ291bnQpOworICAgIEVYUEVDVF9FUShudWxs
cHRyLCBhLnBvaW50ZXIoKSk7CisgICAgRVhQRUNUX0VRKDAsIGEudHlwZSgpKTsKKyAgICBFWFBF
Q1RfRVEob2xkUG9pbnRlciwgYi5wb2ludGVyKCkpOworICAgIEVYUEVDVF9FUSgweGYyZjJVLCBi
LnR5cGUoKSk7CisKKyAgICBiLnNldFBvaW50ZXIobnVsbHB0cik7CisgICAgRVhQRUNUX0VRKDRV
LCBBOjpzX2NvbnN0cnVjdG9yQ2FsbENvdW50KTsKKyAgICBFWFBFQ1RfRVEoNFUsIEE6OnNfZGVz
dHJ1Y3RvckNhbGxDb3VudCk7CisgICAgRVhQRUNUX0VRKG51bGxwdHIsIGEucG9pbnRlcigpKTsK
KyAgICBFWFBFQ1RfRVEoMCwgYS50eXBlKCkpOworICAgIEVYUEVDVF9FUShudWxscHRyLCBiLnBv
aW50ZXIoKSk7CisgICAgRVhQRUNUX0VRKDB4ZjJmMlUsIGIudHlwZSgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>
<flag name="review"
          id="423227"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>