<?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>55399</bug_id>
          
          <creation_ts>2011-02-28 12:33:17 -0800</creation_ts>
          <short_desc>Rework object grouping to never produce huge grouper array</short_desc>
          <delta_ts>2011-03-14 18:19:40 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>55899</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="anton muhin">antonm</reporter>
          <assigned_to name="anton muhin">antonm</assigned_to>
          <cc>abarth</cc>
    
    <cc>ager</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>vitalyr</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>359240</commentid>
    <comment_count>0</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-02-28 12:33:17 -0800</bug_when>
    <thetext>[v8] Do not put the same handle into several groups: that can easily lead to huge array of items to be grouped</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359241</commentid>
    <comment_count>1</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-02-28 12:35:05 -0800</bug_when>
    <thetext>The original problem: http://code.google.com/p/chromium/issues/detail?id=73441</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359245</commentid>
    <comment_count>2</comment_count>
      <attachid>84098</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-02-28 12:43:32 -0800</bug_when>
    <thetext>Created attachment 84098
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359249</commentid>
    <comment_count>3</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-02-28 12:44:38 -0800</bug_when>
    <thetext>Guys, I would really appreciate any algorithmic advice as well.  I hope that typically we shouldn&apos;t have too many group ids (~100).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360784</commentid>
    <comment_count>4</comment_count>
      <attachid>84098</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-03-02 07:29:30 -0800</bug_when>
    <thetext>Comment on attachment 84098
Patch

Mads and Vitaly suggested to investigate some better approaches.  So I am cancelling request for review for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362603</commentid>
    <comment_count>5</comment_count>
      <attachid>84775</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-03-04 10:19:27 -0800</bug_when>
    <thetext>Created attachment 84775
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362658</commentid>
    <comment_count>6</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-03-04 12:13:33 -0800</bug_when>
    <thetext>Attachment 84775 did not build on qt:
Build output: http://queues.webkit.org/results/8083780</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362666</commentid>
    <comment_count>7</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-03-04 12:57:14 -0800</bug_when>
    <thetext>Attachment 84775 did not build on gtk:
Build output: http://queues.webkit.org/results/8088549</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362779</commentid>
    <comment_count>8</comment_count>
      <attachid>84775</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-04 16:12:47 -0800</bug_when>
    <thetext>Comment on attachment 84775
Patch

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

&gt; Source/WebCore/css/CSSRuleList.h:56
&gt; +    PassRefPtr&lt;StyleList&gt; styleList()

A getter that is not passing ownership should return a raw pointer, not a PassRefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362858</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-04 20:26:09 -0800</bug_when>
    <thetext>Attachment 84775 did not build on mac:
Build output: http://queues.webkit.org/results/8083919</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362930</commentid>
    <comment_count>10</comment_count>
      <attachid>84858</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-03-05 03:55:37 -0800</bug_when>
    <thetext>Created attachment 84858
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362931</commentid>
    <comment_count>11</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-03-05 03:56:47 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 84775 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=84775&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/CSSRuleList.h:56
&gt; &gt; +    PassRefPtr&lt;StyleList&gt; styleList()
&gt; 
&gt; A getter that is not passing ownership should return a raw pointer, not a PassRefPtr.

Thanks a lot, Darin, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362959</commentid>
    <comment_count>12</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2011-03-05 09:24:44 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=84858) [details]
&gt; Patch

Looks good. It&apos;s way clearer than what we had before.

&gt;-    void startMap()
&gt;-    {
&gt;-        m_grouper.shrink(0);
&gt;-    }
&gt;+            // Alas, CSSProperty---it&apos;s a type of items behind CSSMutableStyleDeclaration---doesn&apos;t
&gt;+            // have uplink to the parent (and thus could be potentionally shared between several
&gt;+            // declarations), so we need to iterate over them.

The comment is a bit hard to parse. How about &quot;The object group for a CSSMutableStyleDeclaration must contain all its items (CSSProperties) that have wrappers. Unfortunately, a CSSProperty object can be be shared by a few declarations and doesn&apos;t have a link to them. So we have to add the items by iterating the declaration objects.&quot; Ok, it sucks too, but please make it clearer.

&gt;+        // Group by sorting by the group id.
&gt;+        std::sort(m_grouper.begin(), m_grouper.end());
&gt;+
&gt;+        // FIXME Should probably work in iterators here, but indexes were easier for my simple mind.
&gt;+        for (size_t i = 0; i &lt; m_grouper.size(); ) {

I don&apos;t think we should keep this comment.

&gt;+            Vector&lt;v8::Persistent&lt;v8::Value&gt; &gt; group;
&gt;+            group.reserveCapacity(nextKeyIndex - i);
&gt;+            for (; i &lt; nextKeyIndex; ++i) {
&gt;+                v8::Persistent&lt;v8::Value&gt; wrapper = m_grouper[i].wrapper();
&gt;+                if (!wrapper.IsEmpty())
&gt;+                    group.append(wrapper);

How can a wrapper be empty here? If there are valid cases when this might happen, please add a comment. Otherwise, add an assert.

&gt;+        bool isSubclass(const WrapperTypeInfo* that) const
&gt;+        {
&gt;+            
&gt;+            for (const WrapperTypeInfo* current = this; current; current = current-&gt;parentClass)
&gt;+                if (current == that)
&gt;+                    return true;

Style nit. The loop body is now two lines and so needs {}, doesn&apos;t it?

&gt;+    StyleList* styleList()
&gt;+    {
&gt;+        return m_list.get();
&gt;+    }

Could be a one-liner.

&gt;+    Document* document()
&gt;+    {
&gt;+        return m_doc;
&gt;+    }

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364454</commentid>
    <comment_count>13</comment_count>
      <attachid>85166</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-03-09 05:57:00 -0800</bug_when>
    <thetext>Created attachment 85166
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364456</commentid>
    <comment_count>14</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-03-09 06:02:33 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #10)
&gt; &gt; Created an attachment (id=84858) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; Looks good. It&apos;s way clearer than what we had before.

Thanks a lot, Vitaly.  Just in case, Vitaly knows a lot about v8/bindings, but cannot r+ it, so I&apos;d appreciate another look from someone with r+ privileges.

&gt; 
&gt; &gt;-    void startMap()
&gt; &gt;-    {
&gt; &gt;-        m_grouper.shrink(0);
&gt; &gt;-    }
&gt; &gt;+            // Alas, CSSProperty---it&apos;s a type of items behind CSSMutableStyleDeclaration---doesn&apos;t
&gt; &gt;+            // have uplink to the parent (and thus could be potentionally shared between several
&gt; &gt;+            // declarations), so we need to iterate over them.
&gt; 
&gt; The comment is a bit hard to parse. How about &quot;The object group for a CSSMutableStyleDeclaration must contain all its items (CSSProperties) that have wrappers. Unfortunately, a CSSProperty object can be be shared by a few declarations and doesn&apos;t have a link to them. So we have to add the items by iterating the declaration objects.&quot; Ok, it sucks too, but please make it clearer.

Rephrased.  May you have another look?

&gt; 
&gt; &gt;+        // Group by sorting by the group id.
&gt; &gt;+        std::sort(m_grouper.begin(), m_grouper.end());
&gt; &gt;+
&gt; &gt;+        // FIXME Should probably work in iterators here, but indexes were easier for my simple mind.
&gt; &gt;+        for (size_t i = 0; i &lt; m_grouper.size(); ) {
&gt; 
&gt; I don&apos;t think we should keep this comment.

Done.

&gt; 
&gt; &gt;+            Vector&lt;v8::Persistent&lt;v8::Value&gt; &gt; group;
&gt; &gt;+            group.reserveCapacity(nextKeyIndex - i);
&gt; &gt;+            for (; i &lt; nextKeyIndex; ++i) {
&gt; &gt;+                v8::Persistent&lt;v8::Value&gt; wrapper = m_grouper[i].wrapper();
&gt; &gt;+                if (!wrapper.IsEmpty())
&gt; &gt;+                    group.append(wrapper);
&gt; 
&gt; How can a wrapper be empty here? If there are valid cases when this might happen, please add a comment. Otherwise, add an assert.

Let&apos;s keep it as is now.  I&apos;ll try to turn that into assert, but don&apos;t want to do it in this patch which I&apos;d like to bring to M11.

&gt; 
&gt; &gt;+        bool isSubclass(const WrapperTypeInfo* that) const
&gt; &gt;+        {
&gt; &gt;+            
&gt; &gt;+            for (const WrapperTypeInfo* current = this; current; current = current-&gt;parentClass)
&gt; &gt;+                if (current == that)
&gt; &gt;+                    return true;
&gt; 
&gt; Style nit. The loop body is now two lines and so needs {}, doesn&apos;t it?

Done, but webkit style checker is fine with both versions.

&gt; 
&gt; &gt;+    StyleList* styleList()
&gt; &gt;+    {
&gt; &gt;+        return m_list.get();
&gt; &gt;+    }
&gt; 
&gt; Could be a one-liner.

Yep, but I am following the style in this file (see create methods above)

&gt; 
&gt; &gt;+    Document* document()
&gt; &gt;+    {
&gt; &gt;+        return m_doc;
&gt; &gt;+    }
&gt; 
&gt; Ditto.

Ditto, right above this method there is swap method, so I am just following the style around.  But if you insist on making this one-liners, definitely I&apos;ll do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364492</commentid>
    <comment_count>15</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2011-03-09 07:22:27 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; Created an attachment (id=84858) [details] [details] [details]
&gt; &gt; &gt; Patch

As bug 55899 shows sharing CSSProperties is really bad. I did a small investigation and found out that these guys are not only shared but are cached (CSSPrimitiveValueCache) and so putting a property object into a set of groups is going to retain much more than we&apos;d like. We should switch from using objects groups for them to creating hidden dependencies. Hidden dependencies are a bit nastier because they require allocation (and also require locating the right wrapper to hold them), but OTOH they don&apos;t create a two-way strong reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365148</commentid>
    <comment_count>16</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-03-10 07:13:32 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; Created an attachment (id=84858) [details] [details] [details] [details]
&gt; &gt; &gt; &gt; Patch
&gt; 
&gt; As bug 55899 shows sharing CSSProperties is really bad. I did a small investigation and found out that these guys are not only shared but are cached (CSSPrimitiveValueCache) and so putting a property object into a set of groups is going to retain much more than we&apos;d like. We should switch from using objects groups for them to creating hidden dependencies. Hidden dependencies are a bit nastier because they require allocation (and also require locating the right wrapper to hold them), but OTOH they don&apos;t create a two-way strong reference.

That&apos;s indeed a problem.  And correct solution is to have one way references, but I don&apos;t think hidden refs is the right approach.  I can implement necessary v8 stuff though (as we discussed yesterday) and then fix it the right way.

Right now I see three ways out: 1) keep this logic and reevaluate it if we meet in the wild huge retained trees due to shared CSSPrimitiveValue, 2) slightly alter the logic and ignore not dirty wrappers (that improves our chances to survive), 3) just omit this grouping---that makes one layout test fail, but it might be bearable for time being.

I am personally for 1) or 3), slightly more in favour of 1) as correctness trumps performance imho.

And of course we can first wait for proper v8 extension.

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365277</commentid>
    <comment_count>17</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2011-03-10 10:14:56 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; &gt; Created an attachment (id=84858) [details] [details] [details] [details] [details]
&gt; &gt; &gt; &gt; &gt; Patch
&gt; &gt; 
&gt; &gt; As bug 55899 shows sharing CSSProperties is really bad. I did a small investigation and found out that these guys are not only shared but are cached (CSSPrimitiveValueCache) and so putting a property object into a set of groups is going to retain much more than we&apos;d like. We should switch from using objects groups for them to creating hidden dependencies. Hidden dependencies are a bit nastier because they require allocation (and also require locating the right wrapper to hold them), but OTOH they don&apos;t create a two-way strong reference.
&gt; 
&gt; That&apos;s indeed a problem.  And correct solution is to have one way references, but I don&apos;t think hidden refs is the right approach.  I can implement necessary v8 stuff though (as we discussed yesterday) and then fix it the right way.
&gt; 
&gt; Right now I see three ways out: 1) keep this logic and reevaluate it if we meet in the wild huge retained trees due to shared CSSPrimitiveValue, 2) slightly alter the logic and ignore not dirty wrappers (that improves our chances to survive), 3) just omit this grouping---that makes one layout test fail, but it might be bearable for time being.
&gt; 
&gt; I am personally for 1) or 3), slightly more in favour of 1) as correctness trumps performance imho.
&gt; 
&gt; And of course we can first wait for proper v8 extension.
&gt; 
&gt; Thoughts?

1) and even 2) are still not entirely correct in the GC sense, because they cause us to retain too much and avoiding the issue is as non-obvious for web developers as it gets. I vote for 3). The only bad consequence is that it becomes possible to detect GC by adding custom properties to primitive values like &quot;50px&quot;. Yet because these objects are shared in unspecified (AFAIK) ways there shouldn&apos;t be anything that relies on custom properties on these objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365453</commentid>
    <comment_count>18</comment_count>
      <attachid>85166</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-10 12:51:47 -0800</bug_when>
    <thetext>Comment on attachment 85166
Patch

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

I like the approach.  This stuff is very subtle, so I&apos;m not 100% sure that this change is correct, but I don&apos;t see anything wrong with it.  Some very minor style nits below.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1715
&gt; +    # find the super descriptor

This should be a complete sentence that starts with a capital letter and ends with a period.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1720
&gt; +        if ($parent eq &quot;EventTarget&quot;) { next; }

Each statement should be on its own line.

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:237
&gt; +    if (root-&gt;isStyleSheet())
&gt; +        if (Node* ownerNode = static_cast&lt;StyleSheet*&gt;(root)-&gt;ownerNode())
&gt; +            return calculateGroupId(ownerNode);

We need { } around the body of this if block.

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:281
&gt; +            // CSSProperty (type of items in mutable style declaration) doesn&apos;t have a pointer to
&gt; +            // its parent. Therefore we cannot treat them like other objects---traverse up to the
&gt; +            // root when visiting a wrapper---and need to put them into the group directly.

I see.  We still need to walk down for these.  Ok.

&gt; Source/WebCore/bindings/v8/WrapperTypeInfo.h:67
&gt; +            

This blank line is empty.

&gt; Source/WebCore/css/CSSRuleList.h:59
&gt; +    StyleList* styleList()
&gt; +    {
&gt; +        return m_list.get();
&gt; +    }

You can just put this all on one line if you like.  Simple getters can be on one line to preserve vertical space.

&gt; Source/WebCore/css/StyleSheetList.h:57
&gt; +    Document* document()
&gt; +    {
&gt; +        return m_doc;
&gt; +    }

Same here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366150</commentid>
    <comment_count>19</comment_count>
      <attachid>85499</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-03-11 11:21:53 -0800</bug_when>
    <thetext>Created attachment 85499
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366154</commentid>
    <comment_count>20</comment_count>
      <attachid>85499</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-11 11:24:29 -0800</bug_when>
    <thetext>Comment on attachment 85499
Patch

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

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:293
&gt; +#if 0

Maybe you forgot to remove this line?

&gt; Source/WebCore/css/CSSRuleList.h:59
&gt; +    StyleList* styleList()
&gt; +    {
&gt; +        return m_list.get();
&gt; +    }

This are still multi-line...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366159</commentid>
    <comment_count>21</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-03-11 11:27:39 -0800</bug_when>
    <thetext>Adam, thanks a lot for comments.  Sorry for delay---it took some time to merge it with my previous change due to differences in inline style handling.

I did all you asked except for one-liners.  As I explained to Vitaly before, I just try to follow the style of the corresponding files (see comment 14).  And again, if you think it&apos;s time to improve style of these files, I&apos;ll do that.

The main question for me right now---do we want to risk retaining huge graphs due to cached CSSPrimitiveValues?  I internally put offensive code into #if 0/#endif (to be removed before submit).

Vitaly think we should ignore them for now even though it&apos;ll introduce a minor bug.  Minor for that was a behaviour in Safari and Chromium in all the previous versions.

I think we could risk, but too concerned that OOMs due to this behaviour might be difficult to trace.  So now I am starting to linger on Vitaly&apos;s side.

What do you think?  For other options see comment 16.


(In reply to comment #18)
&gt; (From update of attachment 85166 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=85166&amp;action=review
&gt; 
&gt; I like the approach.  This stuff is very subtle, so I&apos;m not 100% sure that this change is correct, but I don&apos;t see anything wrong with it.  Some very minor style nits below.
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1715
&gt; &gt; +    # find the super descriptor
&gt; 
&gt; This should be a complete sentence that starts with a capital letter and ends with a period.
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1720
&gt; &gt; +        if ($parent eq &quot;EventTarget&quot;) { next; }
&gt; 
&gt; Each statement should be on its own line.
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8GCController.cpp:237
&gt; &gt; +    if (root-&gt;isStyleSheet())
&gt; &gt; +        if (Node* ownerNode = static_cast&lt;StyleSheet*&gt;(root)-&gt;ownerNode())
&gt; &gt; +            return calculateGroupId(ownerNode);
&gt; 
&gt; We need { } around the body of this if block.
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8GCController.cpp:281
&gt; &gt; +            // CSSProperty (type of items in mutable style declaration) doesn&apos;t have a pointer to
&gt; &gt; +            // its parent. Therefore we cannot treat them like other objects---traverse up to the
&gt; &gt; +            // root when visiting a wrapper---and need to put them into the group directly.
&gt; 
&gt; I see.  We still need to walk down for these.  Ok.
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/WrapperTypeInfo.h:67
&gt; &gt; +            
&gt; 
&gt; This blank line is empty.
&gt; 
&gt; &gt; Source/WebCore/css/CSSRuleList.h:59
&gt; &gt; +    StyleList* styleList()
&gt; &gt; +    {
&gt; &gt; +        return m_list.get();
&gt; &gt; +    }
&gt; 
&gt; You can just put this all on one line if you like.  Simple getters can be on one line to preserve vertical space.
&gt; 
&gt; &gt; Source/WebCore/css/StyleSheetList.h:57
&gt; &gt; +    Document* document()
&gt; &gt; +    {
&gt; &gt; +        return m_doc;
&gt; &gt; +    }
&gt; 
&gt; Same here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366202</commentid>
    <comment_count>22</comment_count>
      <attachid>85507</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-03-11 12:02:40 -0800</bug_when>
    <thetext>Created attachment 85507
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366205</commentid>
    <comment_count>23</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-03-11 12:03:38 -0800</bug_when>
    <thetext>As discussed with Adam on IM, uploading a version that Vitaly and me prefer, so Adam can both r+ and cq+ it if he likes it.

(In reply to comment #22)
&gt; Created an attachment (id=85507) [details]
&gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367205</commentid>
    <comment_count>24</comment_count>
      <attachid>85507</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-14 14:05:28 -0700</bug_when>
    <thetext>Comment on attachment 85507
Patch

I&apos;m sold.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367408</commentid>
    <comment_count>25</comment_count>
      <attachid>85507</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-14 18:19:35 -0700</bug_when>
    <thetext>Comment on attachment 85507
Patch

Clearing flags on attachment: 85507

Committed r81092: &lt;http://trac.webkit.org/changeset/81092&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367409</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-14 18:19:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84098</attachid>
            <date>2011-02-28 12:43:32 -0800</date>
            <delta_ts>2011-03-04 10:19:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55399-20110228234330.patch</filename>
            <type>text/plain</type>
            <size>5883</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk4NjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkNzZjNjljMWU1YzAwNjZh
NTZmYmViNDNiMDg1ODA3N2QyMzc2MTVhLi4zY2ZiMTM1MWY5ZjBkYzEwMzk2YTNiYTFmNWQ4MmE0
MzU3NGMwMDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDItMjggIEFudG9u
IE11aGluICA8YW50b25tQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbdjhdIERvIG5vdCBwdXQgdGhlIHNhbWUgaGFuZGxlIGlu
dG8gc2V2ZXJhbCBncm91cHM6IHRoYXQgY2FuIGVhc2lseSBsZWFkIHRvIGh1Z2UgYXJyYXkgb2Yg
aXRlbXMgdG8gYmUgZ3JvdXBlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTUzOTkKKworICAgICAgICBDb3JlIHBhcnQgb2YgdjggR0MgYW5kIHNob3Vs
ZCBiZSB0ZXN0ZWQgYnkgYWxyZWFkeSBwcmVzZW50IHRlc3RzLgorCisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JvdXBlckl0ZW06
OnNldEdyb3VwSWQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0R3JvdXBlclZpc2l0b3I6
OmVuZE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpET01PYmplY3RHcm91cGVyVmlzaXRvcjo6dmlz
aXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU9iamVjdEdyb3VwZXJWaXNpdG9y
OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0R3JvdXBlclZpc2l0b3I6OmFk
ZEFsbEl0ZW1zKToKKwogMjAxMS0wMi0yOCAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAppbmRleCBhMzRkYzI0MjVlYmU3Zjc5
MzViYTA5MThiMGM4ZDJkYzc4MDc5OGMyLi5kMjlhNGVjMzZmMzk1OGZmZjBkMzA0ZjZmYjg5NTU1
MTgxOWZkZGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xs
ZXIuY3BwCkBAIC0xODUsNiArMTg1LDcgQEAgcHVibGljOgogCiAgICAgdWludHB0cl90IGdyb3Vw
SWQoKSBjb25zdCB7IHJldHVybiBtX2dyb3VwSWQ7IH0KICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
T2JqZWN0PiB3cmFwcGVyKCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVyOyB9CisgICAgdm9pZCBz
ZXRHcm91cElkKHVpbnRwdHJfdCB2YWx1ZSkgeyBtX2dyb3VwSWQgPSB2YWx1ZTsgfQogCiBwcml2
YXRlOgogICAgIHVpbnRwdHJfdCBtX2dyb3VwSWQ7CkBAIC0zNDIsNiArMzQzLDU3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZW5kTWFwKCkKICAgICB7CisgICAgICAgIC8vIFdlIGhhdmUgYSBsaXN0
IG9mIHBhaXJzIHdoaWNoIHNheXMgd2hpY2ggZ3JvdXBJZHMgc2hvdWxkIGJlCisgICAgICAgIC8v
IHVuaWZpZWQuIFBhaXJzIGluIHRoaXMgbGlzdCBhcmUgb3JkZXJlZCAoZmlyc3QgY29tcG9uZW50
CisgICAgICAgIC8vIGlzIGFsd2F5cyBsZXNzZXIgdGhhbiBzZWNvbmQpLiBOb3cgd2UgYnVpbGQg
YSBtYXAgd2hpY2ggdGVsbHMKKyAgICAgICAgLy8gYXMgYSBtaW5pbWFsIGdyb3VwIGlkIHRvIHdo
aWNoIGdyb3VwZCBpZCBzaG91bGQgbWFwLgorICAgICAgICBWZWN0b3I8IHBhaXI8dWludHB0cl90
LCB1aW50cHRyX3Q+ID4gcGFpcnM7CisgICAgICAgIHBhaXJzLnJlc2VydmVDYXBhY2l0eShtX2Nh
bm9uaWNhbGl6YXRpb24uc2l6ZSgpKTsKKyAgICAgICAgcGFpcnMuYXBwZW5kUmFuZ2UobV9jYW5v
bmljYWxpemF0aW9uLmJlZ2luKCksIG1fY2Fub25pY2FsaXphdGlvbi5lbmQoKSk7CisgICAgICAg
IHN0ZDo6c29ydChwYWlycy5iZWdpbigpLCBwYWlycy5lbmQoKSk7CisKKyAgICAgICAgSGFzaE1h
cDx1aW50cHRyX3QsIHVpbnRwdHJfdD4gY2Fub25pY0dyb3VwOworICAgICAgICB1aW50cHRyX3Qg
cHJldmlvdXNHcm91cElkID0gMDsKKyAgICAgICAgc2l6ZV90IGF0ID0gMDsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwYWlycy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgdWlu
dHB0cl90IGxlc3Nlckdyb3VwSWQgPSBwYWlyc1tpXS5maXJzdDsKKyAgICAgICAgICAgIGlmIChw
cmV2aW91c0dyb3VwSWQgIT0gbGVzc2VyR3JvdXBJZCkgeworICAgICAgICAgICAgICAgIGF0ID0g
aTsKKyAgICAgICAgICAgICAgICBwcmV2aW91c0dyb3VwSWQgPSBsZXNzZXJHcm91cElkOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdWludHB0cl90IGJpZ2dlckdyb3VwSWQgPSBwYWlyc1tp
XS5zZWNvbmQ7CisgICAgICAgICAgICBBU1NFUlQobGVzc2VyR3JvdXBJZCA8IGJpZ2dlckdyb3Vw
SWQpOworCisgICAgICAgICAgICB1aW50cHRyX3QgY2Fub25pY0dyb3VwSWQgPSBjYW5vbmljR3Jv
dXAuYWRkKGxlc3Nlckdyb3VwSWQsIGxlc3Nlckdyb3VwSWQpLmZpcnN0LT5zZWNvbmQ7CisgICAg
ICAgICAgICBBU1NFUlQoY2Fub25pY0dyb3VwLmdldChjYW5vbmljR3JvdXBJZCkgPT0gY2Fub25p
Y0dyb3VwSWQpOworICAgICAgICAgICAgcGFpcjxIYXNoTWFwPHVpbnRwdHJfdCwgdWludHB0cl90
ID46Oml0ZXJhdG9yLCBib29sPiBsb29rdXAgPSBjYW5vbmljR3JvdXAuYWRkKGJpZ2dlckdyb3Vw
SWQsIGNhbm9uaWNHcm91cElkKTsKKyAgICAgICAgICAgIGlmICghbG9va3VwLnNlY29uZCkgewor
ICAgICAgICAgICAgICAgIC8vIFdlIGZvdW5kIGFub3RoZXIgY2FuZGlkYXRlLgorICAgICAgICAg
ICAgICAgIHVpbnRwdHJfdCBvdGhlciA9IGxvb2t1cC5maXJzdC0+c2Vjb25kOworICAgICAgICAg
ICAgICAgIC8vIEl0IHNob3VsZCBiZSBjYW5vbmljIGFzIHdlbGwuCisgICAgICAgICAgICAgICAg
QVNTRVJUKGNhbm9uaWNHcm91cC5nZXQob3RoZXIpID09IG90aGVyKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQob3RoZXIgPCBsZXNzZXJHcm91cElkKTsKKyAgICAgICAgICAgICAgICBpZiAob3Ro
ZXIgPCBjYW5vbmljR3JvdXBJZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRv
IHJlYnVpbGQgYWxsIHRoZSBjYW5vbmljIGdyb3VwIGlkcyBmb3IgcGFpcnMgd2l0aCB0aGUgZmly
c3QKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcG9uZW50IGVxdWFsIHRvIGxlc3Nlckdyb3Vw
SWQuCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghYXQgfHwgcGFpcnNbYXQgLSAxXS5maXJz
dCA8IGxlc3Nlckdyb3VwSWQpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0g
YXQ7IGogPCBpOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwYWlyc1tp
XS5maXJzdCA9PSBsZXNzZXJHcm91cElkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbm9u
aWNHcm91cC5zZXQocGFpcnNbaV0uc2Vjb25kLCBvdGhlcik7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JvdXBlci5zaXplKCk7IGkrKykgeworICAgICAg
ICAgICAgR3JvdXBlckl0ZW0mIGl0ZW0gPSBtX2dyb3VwZXJbaV07CisgICAgICAgICAgICB1aW50
cHRyX3QgbmV3R3JvdXBJZCA9IGNhbm9uaWNHcm91cC5nZXQoaXRlbS5ncm91cElkKCkpOworICAg
ICAgICAgICAgaWYgKG5ld0dyb3VwSWQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3R3Jv
dXBJZCA9PSBjYW5vbmljR3JvdXAuZ2V0KG5ld0dyb3VwSWQpKTsKKyAgICAgICAgICAgICAgICBp
dGVtLnNldEdyb3VwSWQobmV3R3JvdXBJZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwog
ICAgICAgICBtYWtlVjhPYmplY3RHcm91cHMobV9ncm91cGVyKTsKICAgICB9CiAKQEAgLTM4Miw3
ICs0MzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGZvciAoQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3NzTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24tPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgd3JhcHBlciA9IHN0b3JlLT5kb21PYmplY3RNYXAoKS5nZXQoaXQtPnZhbHVlKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIHdy
YXBwZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQoZ3JvdXBJZCwgd3Jh
cHBlcik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CkBAIC0zOTUsNiArNDQ3LDIyIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBHcm91
cGVyTGlzdCBtX2dyb3VwZXI7CisgICAgSGFzaE1hcDx1aW50cHRyX3QsIHVpbnRwdHJfdD4gbV9n
cm91cElkOworICAgIEhhc2hTZXQ8IHBhaXI8dWludHB0cl90LCB1aW50cHRyX3Q+ID4gbV9jYW5v
bmljYWxpemF0aW9uOworICAgIGludCB2aXNpdGVkOworCisgICAgdm9pZCBhcHBlbmQodWludHB0
cl90IGdyb3VwSWQsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCisgICAgewor
ICAgICAgICB1aW50cHRyX3QgaWQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oKndyYXBw
ZXIpOworICAgICAgICBwYWlyPEhhc2hNYXA8dWludHB0cl90LCB1aW50cHRyX3Q+OjppdGVyYXRv
ciwgYm9vbD4gbG9va3VwID0gbV9ncm91cElkLmFkZChpZCwgZ3JvdXBJZCk7CisgICAgICAgIGlm
ICghbG9va3VwLnNlY29uZCkgeworICAgICAgICAgICAgLy8gSGFzIGJlZW4gYWxyZWFkeSBncm91
cGVkLgorICAgICAgICAgICAgdWludHB0cl90IG90aGVyID0gbG9va3VwLmZpcnN0LT5zZWNvbmQ7
CisgICAgICAgICAgICBpZiAob3RoZXIgIT0gZ3JvdXBJZCkKKyAgICAgICAgICAgICAgICBtX2Nh
bm9uaWNhbGl6YXRpb24uYWRkKGdyb3VwSWQgPCBvdGhlciA/IHN0ZDo6bWFrZV9wYWlyKGdyb3Vw
SWQsIG90aGVyKSA6IHN0ZDo6bWFrZV9wYWlyKG90aGVyLCBncm91cElkKSk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgbV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3
cmFwcGVyKSk7CisgICAgfQogCiAgICAgdGVtcGxhdGUgPGNsYXNzIEM+CiAgICAgdm9pZCBhZGRB
bGxJdGVtcyhET01EYXRhU3RvcmUqIHN0b3JlLCBDKiBjb2xsZWN0aW9uLCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0PiB3cmFwcGVyKQpAQCAtNDA0LDcgKzQ3Miw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xsZWN0aW9uLT5sZW5ndGgoKTsgaSsrKSB7
CiAgICAgICAgICAgICB3cmFwcGVyID0gc3RvcmUtPmRvbU9iamVjdE1hcCgpLmdldChjb2xsZWN0
aW9uLT5pdGVtKGkpKTsKICAgICAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgbV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVy
KSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKGdyb3VwSWQsIHdyYXBwZXIpOwogICAgICAgICB9
CiAgICAgfQogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84775</attachid>
            <date>2011-03-04 10:19:27 -0800</date>
            <delta_ts>2011-03-05 03:55:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55399-20110304211925.patch</filename>
            <type>text/plain</type>
            <size>24787</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk4NjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkNzZjNjljMWU1YzAwNjZh
NTZmYmViNDNiMDg1ODA3N2QyMzc2MTVhLi45NmFhZjI4ODgxOGRmNDIyZDliMWM1YmFmM2IyYzlh
NjlmNGNiZGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMDMtMDQgIEFudG9u
IE11aGluICA8YW50b25tQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbdjhdIFJld29yayBvYmplY3QgZ3JvdXAgYnVpbGRpbmcu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTM5OQor
CisgICAgICAgIEluc3RlYWQgb2YgZ29pbmcgdG9wLWRvd24gKGZyb20gb3duZXIgdG8gb3duZWQg
ZWxlbWVudHMpLCBnbyB1cC0tLWZyb20gb2JqZWN0cworICAgICAgICB0byB0aGVpciBncm91cCBp
ZHMuICBUaGF0IGZpdHMgYmV0dGVyIHRvIHY4J3Mgb2JqZWN0IGdyb3VwaW5nIG1vZGVsIGFuZCBn
dWFyYW50ZWVzCisgICAgICAgIHRoYXQgZWFjaCB3cmFwcGVyIGJlbG9uZ3MgdG8gdGhlIHNpbmds
ZSBncm91cC4KKworICAgICAgICBBbGFzLCB0aGlzIGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBmb3Ig
b25lIGtpbmQgb2Ygb2JqZWN0cy0tLUNTU1Byb3BlcnRpZXMuCisKKyAgICAgICAgUGFydCBvZiBj
b3JlIEdDIGFsZ29laXRobSBhbmQgdGVzdGVkIGV4dGVuc2l2ZWx5IGJ5IGV4aXNpdGluZyBsYXlv
dXQgdGVzdHMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlR3JvdXBJZCk6CisgICAgICAgIChXZWJDb3JlOjpjYWxj
dWxhdGVSb290U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpHcm91cGVyVmlzaXRvcjo6
dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdyb3VwZXJWaXNpdG9yOjphcHBs
eUdyb3VwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3Vl
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaDoKKyAgICAgICAgKFdl
YkNvcmU6OldyYXBwZXJUeXBlSW5mbzo6aXNTdWJjbGFzcyk6CisgICAgICAgICogY3NzL0NTU1J1
bGVMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NSdWxlTGlzdDo6c3R5bGVMaXN0KToKKyAg
ICAgICAgKiBjc3MvU3R5bGVTaGVldExpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hl
ZXRMaXN0Ojpkb2N1bWVudCk6CisKIDIwMTEtMDItMjggIFJlbmF0YSBIb2RvdmFuICA8cmVuaUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4
IGFiZDgxNzI3YmJmZTFiNDgyYjY2ZmFlOWU3YzE5MTJmYjJjNmVmOTUuLjU2MmUyNzViMTJkNDkw
YzNiMzAzZDJmMjMwNWU5YTM5YzMzYjY3YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0xNzEyLDggKzE3MTIsMjAgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgIG15ICR0b0FjdGl2ZSA9IElzQWN0aXZl
RG9tVHlwZSgkaW50ZXJmYWNlTmFtZSkgPyAiJHtjbGFzc05hbWV9Ojp0b0FjdGl2ZURPTU9iamVj
dCIgOiAiMCI7CiAKKyAgICAjIGZpbmQgdGhlIHN1cGVyIGRlc2NyaXB0b3IKKyAgICBteSAkcGFy
ZW50Q2xhc3MgPSAiIjsKKyAgICBteSAkcGFyZW50Q2xhc3NUZW1wbGF0ZSA9ICIiOworICAgIGZv
cmVhY2ggKEB7JGRhdGFOb2RlLT5wYXJlbnRzfSkgeworICAgICAgICBteSAkcGFyZW50ID0gJGNv
ZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRfKTsKKyAgICAgICAgaWYgKCRwYXJlbnQgZXEgIkV2
ZW50VGFyZ2V0IikgeyBuZXh0OyB9CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4JHtwYXJlbnR9
LmgifSA9IDE7CisgICAgICAgICRwYXJlbnRDbGFzcyA9ICJWOCIgLiAkcGFyZW50OworICAgICAg
ICAkcGFyZW50Q2xhc3NUZW1wbGF0ZSA9ICRwYXJlbnRDbGFzcyAuICI6OkdldFRlbXBsYXRlKCki
OworICAgICAgICBsYXN0OworICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAibmFt
ZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiV3Jh
cHBlclR5cGVJbmZvICR7Y2xhc3NOYW1lfTo6aW5mbyA9IHsgJHtjbGFzc05hbWV9OjpHZXRUZW1w
bGF0ZSwgJHtjbGFzc05hbWV9OjpkZXJlZk9iamVjdCwgJHt0b0FjdGl2ZX0gfTtcblxuIik7ICAg
CisgICAgbXkgJHBhcmVudENsYXNzSW5mbyA9ICRwYXJlbnRDbGFzcyA/ICImJHtwYXJlbnRDbGFz
c306OmluZm8iIDogIjAiOworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJXcmFwcGVyVHlw
ZUluZm8gJHtjbGFzc05hbWV9OjppbmZvID0geyAke2NsYXNzTmFtZX06OkdldFRlbXBsYXRlLCAk
e2NsYXNzTmFtZX06OmRlcmVmT2JqZWN0LCAke3RvQWN0aXZlfSwgJHtwYXJlbnRDbGFzc0luZm99
IH07XG5cbiIpOyAgIAogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJuYW1lc3BhY2UgJHtp
bnRlcmZhY2VOYW1lfUludGVybmFsIHtcblxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgInRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIFY4X1VTRShUKSB7IH1cblxuIik7CiAKQEAg
LTE5MzcsMTUgKzE5NDksNiBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdFRlbXBs
YXRlPiBDb25maWd1cmVTaGFkb3dPYmplY3RUZW1wbGF0ZSh2ODo6UGVycwogRU5ECiAgICAgfQog
Ci0gICAgIyBmaW5kIHRoZSBzdXBlciBkZXNjcmlwdG9yCi0gICAgbXkgJHBhcmVudENsYXNzVGVt
cGxhdGUgPSAiIjsKLSAgICBmb3JlYWNoIChAeyRkYXRhTm9kZS0+cGFyZW50c30pIHsKLSAgICAg
ICAgbXkgJHBhcmVudCA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkXyk7Ci0gICAgICAg
IGlmICgkcGFyZW50IGVxICJFdmVudFRhcmdldCIpIHsgbmV4dDsgfQotICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJWOCR7cGFyZW50fS5oIn0gPSAxOwotICAgICAgICAkcGFyZW50Q2xhc3NUZW1wbGF0
ZSA9ICJWOCIgLiAkcGFyZW50IC4gIjo6R2V0VGVtcGxhdGUoKSI7Ci0gICAgICAgIGxhc3Q7Ci0g
ICAgfQogICAgIGlmICghJHBhcmVudENsYXNzVGVtcGxhdGUpIHsKICAgICAgICAgJHBhcmVudENs
YXNzVGVtcGxhdGUgPSAidjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCkiOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKaW5kZXggMjY3ZjFmMDliYmM4ZWU4ZDNiMjYyMjZl
MGY4MDc3ZGEzZmE5ZDU4OC4uNTg1Mjk3YzI0ZWYwZDc1NjBlOTgxMGQyNmYxMTEwYTAyOWExMjY1
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1XcmFwcGVyVHlwZUluZm8gVjhUZXN0SW50ZXJmYWNlOjppbmZvID0geyBW
OFRlc3RJbnRlcmZhY2U6OkdldFRlbXBsYXRlLCBWOFRlc3RJbnRlcmZhY2U6OmRlcmVmT2JqZWN0
LCAwIH07CitXcmFwcGVyVHlwZUluZm8gVjhUZXN0SW50ZXJmYWNlOjppbmZvID0geyBWOFRlc3RJ
bnRlcmZhY2U6OkdldFRlbXBsYXRlLCBWOFRlc3RJbnRlcmZhY2U6OmRlcmVmT2JqZWN0LCAwLCAw
IH07CiAKIG5hbWVzcGFjZSBUZXN0SW50ZXJmYWNlSW50ZXJuYWwgewogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5kZXggYWI5ZTZkYjI4ODEzNmZhMjY5
MDkwNmIwOTY5NjQ0ZjBmOTNkODM4ZS4uMDZjNzFjMGU2NzhjMDJhYmIzNTU3YjAyNjU5ZjlmZjU2
Y2MxZmFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cApAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdyYXBwZXJUeXBl
SW5mbyBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjppbmZvID0geyBWOFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1wbGF0ZSwgVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
cjo6ZGVyZWZPYmplY3QsIDAgfTsKK1dyYXBwZXJUeXBlSW5mbyBWOFRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyOjppbmZvID0geyBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1w
bGF0ZSwgVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6ZGVyZWZPYmplY3QsIDAsIDAgfTsK
IAogbmFtZXNwYWNlIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVySW50ZXJuYWwgewogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2Jq
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmou
Y3BwCmluZGV4IDQyOTg3NTY4ZDY3ZDNiNWUwOWQ5MzM2MGMzNzk1YzdhNWIwNzU4YjEuLjQ5YjVi
YmU1Mzc2ZmYxYmEzNmUzZWUxY2I4Y2VjNDQxZDYyNmY2NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC00Niw3
ICs0Niw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV3JhcHBlclR5cGVJbmZvIFY4VGVz
dE9iajo6aW5mbyA9IHsgVjhUZXN0T2JqOjpHZXRUZW1wbGF0ZSwgVjhUZXN0T2JqOjpkZXJlZk9i
amVjdCwgMCB9OworV3JhcHBlclR5cGVJbmZvIFY4VGVzdE9iajo6aW5mbyA9IHsgVjhUZXN0T2Jq
OjpHZXRUZW1wbGF0ZSwgVjhUZXN0T2JqOjpkZXJlZk9iamVjdCwgMCwgMCB9OwogCiBuYW1lc3Bh
Y2UgVGVzdE9iakludGVybmFsIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhH
Q0NvbnRyb2xsZXIuY3BwCmluZGV4IGEzNGRjMjQyNWViZTdmNzkzNWJhMDkxOGIwYzhkMmRjNzgw
Nzk4YzIuLjZkNDA2MzZhOTA0ZDdjOTc0OGYwNTJhZTg4ODcyMWQ3MzE5N2ZkNGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKQEAgLTM0LDI3ICsz
NCwxOCBAQAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkF0dHIuaCIK
ICNpbmNsdWRlICJET01EYXRhU3RvcmUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1CcmlkZ2UuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhDU1NDaGFyc2V0UnVsZS5oIgotI2luY2x1ZGUgIlY4Q1NT
Rm9udEZhY2VSdWxlLmgiCi0jaW5jbHVkZSAiVjhDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAi
VjhDU1NNZWRpYVJ1bGUuaCIKKyNpbmNsdWRlICJWOENTU1J1bGUuaCIKICNpbmNsdWRlICJWOENT
U1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiVjhDU1NTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVk
ZSAiVjhDU1NTdHlsZVJ1bGUuaCIKLSNpbmNsdWRlICJWOENTU1N0eWxlU2hlZXQuaCIKLSNpbmNs
dWRlICJWOERPTU1hcC5oIgotI2luY2x1ZGUgIlY4SFRNTExpbmtFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiVjhIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhET01JbXBsZW1lbnRhdGlvbi5o
IgogI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnQuaCIKLSNpbmNsdWRlICJWOFByb2Nlc3NpbmdJbnN0
cnVjdGlvbi5oIgotI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJWOFN0eWxlU2hlZXQu
aCIKICNpbmNsdWRlICJWOFN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiV3JhcHBlclR5cGVJ
bmZvLmgiCiAKQEAgLTE5OCwyMTUgKzE4OSwxNTggQEAgYm9vbCBvcGVyYXRvcjwoY29uc3QgR3Jv
dXBlckl0ZW0mIGEsIGNvbnN0IEdyb3VwZXJJdGVtJiBiKQogCiB0eXBlZGVmIFZlY3RvcjxHcm91
cGVySXRlbT4gR3JvdXBlckxpc3Q7CiAKLXZvaWQgbWFrZVY4T2JqZWN0R3JvdXBzKEdyb3VwZXJM
aXN0JiBncm91cGVyKQorLy8gSWYgdGhlIG5vZGUgaXMgaW4gZG9jdW1lbnQsIHB1dCBpdCBpbiB0
aGUgb3duZXJEb2N1bWVudCdzIG9iamVjdCBncm91cC4KKy8vCisvLyBJZiBhbiBpbWFnZSBlbGVt
ZW50IHdhcyBjcmVhdGVkIGJ5IEphdmFTY3JpcHQgIm5ldyBJbWFnZSIsCisvLyBpdCBpcyBub3Qg
aW4gYSBkb2N1bWVudC4gSG93ZXZlciwgaWYgdGhlIGxvYWQgZXZlbnQgaGFzIG5vdAorLy8gYmVl
biBmaXJlZCAoc3RpbGwgb25sb2FkaW5nKSwgaXQgaXMgdHJlYXRlZCBhcyBpbiB0aGUgZG9jdW1l
bnQuCisvLworLy8gT3RoZXJ3aXNlLCB0aGUgbm9kZSBpcyBwdXQgaW4gYW4gb2JqZWN0IGdyb3Vw
IGlkZW50aWZpZWQgYnkgdGhlIHJvb3QKKy8vIGVsZW1lbnQgb2YgdGhlIHRyZWUgdG8gd2hpY2gg
aXQgYmVsb25ncy4KK3N0YXRpYyB1aW50cHRyX3QgY2FsY3VsYXRlR3JvdXBJZChOb2RlKiBub2Rl
KQogewotICAgIC8vIEdyb3VwIGJ5IHNvcnRpbmcgYnkgdGhlIGdyb3VwIGlkLgotICAgIHN0ZDo6
c29ydChncm91cGVyLmJlZ2luKCksIGdyb3VwZXIuZW5kKCkpOwotCi0gICAgLy8gRklYTUUgU2hv
dWxkIHByb2JhYmx5IHdvcmsgaW4gaXRlcmF0b3JzIGhlcmUsIGJ1dCBpbmRleGVzIHdlcmUgZWFz
aWVyIGZvciBteSBzaW1wbGUgbWluZC4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdyb3Vw
ZXIuc2l6ZSgpOyApIHsKLSAgICAgICAgLy8gU2VlayB0byB0aGUgbmV4dCBrZXkgKG9yIHRoZSBl
bmQgb2YgdGhlIGxpc3QpLgotICAgICAgICBzaXplX3QgbmV4dEtleUluZGV4ID0gZ3JvdXBlci5z
aXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSBpOyBqIDwgZ3JvdXBlci5zaXplKCk7ICsr
aikgewotICAgICAgICAgICAgaWYgKGdyb3VwZXJbaV0uZ3JvdXBJZCgpICE9IGdyb3VwZXJbal0u
Z3JvdXBJZCgpKSB7Ci0gICAgICAgICAgICAgICAgbmV4dEtleUluZGV4ID0gajsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VS
VChuZXh0S2V5SW5kZXggPiBpKTsKKyAgICBpZiAobm9kZS0+aW5Eb2N1bWVudCgpIHx8IChub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nVGFnKSAmJiAhc3RhdGljX2Nhc3Q8SFRNTEltYWdl
RWxlbWVudCo+KG5vZGUpLT5oYXZlRmlyZWRMb2FkRXZlbnQoKSkpCisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+ZG9jdW1lbnQoKSk7CisKKyAgICBOb2Rl
KiByb290ID0gbm9kZTsKKyAgICBpZiAobm9kZS0+aXNBdHRyaWJ1dGVOb2RlKCkpIHsKKyAgICAg
ICAgcm9vdCA9IHN0YXRpY19jYXN0PEF0dHIqPihub2RlKS0+b3duZXJFbGVtZW50KCk7CisgICAg
ICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUgaGFzIG5vIGVsZW1lbnQsIG5vIG5lZWQgdG8gcHV0IGl0
IGluIHRoZSBncm91cCwKKyAgICAgICAgLy8gYmVjYXVzZSBpdCdsbCBhbHdheXMgYmUgYSBncm91
cCBvZiAxLgorICAgICAgICBpZiAoIXJvb3QpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9
IGVsc2UgeworICAgICAgICB3aGlsZSAoTm9kZSogcGFyZW50ID0gcm9vdC0+cGFyZW50Tm9kZSgp
KQorICAgICAgICAgICAgcm9vdCA9IHBhcmVudDsKKyAgICB9CiAKLSAgICAgICAgLy8gV2Ugb25s
eSBjYXJlIGFib3V0IGEgZ3JvdXAgaWYgaXQgaGFzIG1vcmUgdGhhbiBvbmUgb2JqZWN0LiBJZiBp
dCBvbmx5Ci0gICAgICAgIC8vIGhhcyBvbmUgb2JqZWN0LCBpdCBoYXMgbm90aGluZyBlbHNlIHRo
YXQgbmVlZHMgdG8gYmUga2VwdCBhbGl2ZS4KLSAgICAgICAgaWYgKG5leHRLZXlJbmRleCAtIGkg
PD0gMSkgewotICAgICAgICAgICAgaSA9IG5leHRLZXlJbmRleDsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihy
b290KTsKK30KIAotICAgICAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IGdy
b3VwOwotICAgICAgICBncm91cC5yZXNlcnZlQ2FwYWNpdHkobmV4dEtleUluZGV4IC0gaSk7Ci0g
ICAgICAgIGZvciAoOyBpIDwgbmV4dEtleUluZGV4OyArK2kpIHsKLSAgICAgICAgICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpWYWx1ZT4gd3JhcHBlciA9IGdyb3VwZXJbaV0ud3JhcHBlcigpOwotICAg
ICAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBncm91cC5h
cHBlbmQod3JhcHBlcik7Ci0gICAgICAgIH0KK3N0YXRpYyBTdHlsZUJhc2UqIGNhbGN1bGF0ZVJv
b3RTdHlsZVNoZWV0KFN0eWxlQmFzZSogc3R5bGVCYXNlKQoreworICAgIFN0eWxlQmFzZSogcm9v
dCA9IHN0eWxlQmFzZTsKKyAgICB3aGlsZSAoU3R5bGVCYXNlKiBwYXJlbnQgPSByb290LT5wYXJl
bnQoKSkgeworICAgICAgICAvLyBXZSBhc3N1bWUgdGhhdCBubyBzdHlsZSBzaGVldHMgaW4gYmV0
d2VlbiBjYW4gaGF2ZSBvd25lciBub2Rlcy4KKyAgICAgICAgQVNTRVJUKCFyb290LT5pc1N0eWxl
U2hlZXQoKSB8fCAhc3RhdGljX2Nhc3Q8U3R5bGVTaGVldCo+KHJvb3QpLT5vd25lck5vZGUoKSk7
CisgICAgICAgIHJvb3QgPSBwYXJlbnQ7CisgICAgfQorICAgIHJldHVybiByb290OworfQogCi0g
ICAgICAgIGlmIChncm91cC5zaXplKCkgPiAxKQotICAgICAgICAgICAgdjg6OlY4OjpBZGRPYmpl
Y3RHcm91cCgmZ3JvdXBbMF0sIGdyb3VwLnNpemUoKSk7CitzdGF0aWMgdWludHB0cl90IGNhbGN1
bGF0ZUdyb3VwSWQoU3R5bGVCYXNlKiBzdHlsZUJhc2UpCit7CisgICAgU3R5bGVCYXNlKiByb290
ID0gY2FsY3VsYXRlUm9vdFN0eWxlU2hlZXQoc3R5bGVCYXNlKTsKKyAgICBBU1NFUlQocm9vdCk7
CisgICAgaWYgKHJvb3QtPmlzU3R5bGVTaGVldCgpKQorICAgICAgICBpZiAoTm9kZSogb3duZXJO
b2RlID0gc3RhdGljX2Nhc3Q8U3R5bGVTaGVldCo+KHJvb3QpLT5vd25lck5vZGUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBjYWxjdWxhdGVHcm91cElkKG93bmVyTm9kZSk7CiAKLSAgICAgICAgQVNT
RVJUKGkgPT0gbmV4dEtleUluZGV4KTsKLSAgICB9CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Pihyb290KTsKIH0KIAotY2xhc3MgTm9kZUdyb3VwZXJWaXNpdG9yIDogcHVi
bGljIERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3IgeworY2xhc3MgR3JvdXBlclZpc2l0b3Ig
OiBwdWJsaWMgRE9NV3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciwgcHVibGljIERPTVdyYXBwZXJN
YXA8dm9pZD46OlZpc2l0b3IgewogcHVibGljOgotICAgIE5vZGVHcm91cGVyVmlzaXRvcigpCi0g
ICAgewotICAgICAgICAvLyBGSVhNRTogZ3JvdXBlcl8ucmVzZXJ2ZUNhcGFjaXR5KG5vZGVfbWFw
LnNpemUoKSk7ICA/Ci0gICAgfQotCiAgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0
b3JlKiBzdG9yZSwgTm9kZSogbm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBl
cikKICAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBub2RlIGlzIGluIGRvY3VtZW50LCBwdXQgaXQg
aW4gdGhlIG93bmVyRG9jdW1lbnQncyBvYmplY3QgZ3JvdXAuCi0gICAgICAgIC8vCi0gICAgICAg
IC8vIElmIGFuIGltYWdlIGVsZW1lbnQgd2FzIGNyZWF0ZWQgYnkgSmF2YVNjcmlwdCAibmV3IElt
YWdlIiwKLSAgICAgICAgLy8gaXQgaXMgbm90IGluIGEgZG9jdW1lbnQuIEhvd2V2ZXIsIGlmIHRo
ZSBsb2FkIGV2ZW50IGhhcyBub3QKLSAgICAgICAgLy8gYmVlbiBmaXJlZCAoc3RpbGwgb25sb2Fk
aW5nKSwgaXQgaXMgdHJlYXRlZCBhcyBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgIC8vCi0gICAg
ICAgIC8vIE90aGVyd2lzZSwgdGhlIG5vZGUgaXMgcHV0IGluIGFuIG9iamVjdCBncm91cCBpZGVu
dGlmaWVkIGJ5IHRoZSByb290Ci0gICAgICAgIC8vIGVsZW1lbnQgb2YgdGhlIHRyZWUgdG8gd2hp
Y2ggaXQgYmVsb25ncy4KLSAgICAgICAgdWludHB0cl90IGdyb3VwSWQ7Ci0gICAgICAgIGlmIChu
b2RlLT5pbkRvY3VtZW50KCkgfHwgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcp
ICYmICFzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4obm9kZSktPmhhdmVGaXJlZExvYWRF
dmVudCgpKSkKLSAgICAgICAgICAgIGdyb3VwSWQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4obm9kZS0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgTm9kZSog
cm9vdCA9IG5vZGU7Ci0gICAgICAgICAgICBpZiAobm9kZS0+aXNBdHRyaWJ1dGVOb2RlKCkpIHsK
LSAgICAgICAgICAgICAgICByb290ID0gc3RhdGljX2Nhc3Q8QXR0cio+KG5vZGUpLT5vd25lckVs
ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGhhcyBubyBlbGVt
ZW50LCBubyBuZWVkIHRvIHB1dCBpdCBpbiB0aGUgZ3JvdXAsCi0gICAgICAgICAgICAgICAgLy8g
YmVjYXVzZSBpdCdsbCBhbHdheXMgYmUgYSBncm91cCBvZiAxLgotICAgICAgICAgICAgICAgIGlm
ICghcm9vdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICB3aGlsZSAocm9vdC0+cGFyZW50Tm9kZSgpKQotICAgICAgICAg
ICAgICAgICAgICByb290ID0gcm9vdC0+cGFyZW50Tm9kZSgpOwotCi0gICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIG5vZGUgaXMgYWxvbmUgaW4gaXRzIERPTSB0cmVlIChkb2Vzbid0IGhhdmUgYSBw
YXJlbnQgb3IgYW55Ci0gICAgICAgICAgICAgICAgLy8gY2hpbGRyZW4pIHRoZW4gdGhlIGdyb3Vw
IHdpbGwgYmUgZmlsdGVyZWQgb3V0IGxhdGVyIGFueXdheS4KLSAgICAgICAgICAgICAgICBpZiAo
cm9vdCA9PSBub2RlICYmICFub2RlLT5oYXNDaGlsZE5vZGVzKCkgJiYgIW5vZGUtPmhhc0F0dHJp
YnV0ZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihyb290KTsKLSAg
ICAgICAgfQorICAgICAgICB1aW50cHRyX3QgZ3JvdXBJZCA9IGNhbGN1bGF0ZUdyb3VwSWQobm9k
ZSk7CisgICAgICAgIGlmICghZ3JvdXBJZCkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
bV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CisgICAgfQog
Ci0gICAgICAgIC8vIElmIHRoZSBub2RlIGlzIHN0eWxlZCBhbmQgdGhlcmUgaXMgYSB3cmFwcGVy
IGZvciB0aGUgaW5saW5lCi0gICAgICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9uLCB3ZSBuZWVkIHRv
IGtlZXAgdGhhdCBzdHlsZSBkZWNsYXJhdGlvbgotICAgICAgICAvLyB3cmFwcGVyIGFsaXZlIGFz
IHdlbGwsIHNvIHdlIGFkZCBpdCB0byB0aGUgb2JqZWN0IGdyb3VwLgotICAgICAgICBpZiAobm9k
ZS0+aXNTdHlsZWRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIFN0eWxlZEVsZW1lbnQqIGVsZW1l
bnQgPSByZWludGVycHJldF9jYXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgICAg
IGFkZERPTU9iamVjdFRvR3JvdXAoc3RvcmUsIGdyb3VwSWQsIGVsZW1lbnQtPmlubGluZVN0eWxl
RGVjbCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChub2RlLT5pc0RvY3VtZW50Tm9kZSgp
KSB7Ci0gICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSByZWludGVycHJldF9jYXN0PERv
Y3VtZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICBhZGRET01PYmplY3RUb0dyb3VwKHN0b3JlLCBn
cm91cElkLCBkb2N1bWVudC0+c3R5bGVTaGVldHMoKSk7Ci0gICAgICAgICAgICBhZGRET01PYmpl
Y3RUb0dyb3VwKHN0b3JlLCBncm91cElkLCBkb2N1bWVudC0+aW1wbGVtZW50YXRpb24oKSk7Ci0g
ICAgICAgIH0KLQorICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUs
IHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKKyAgICB7
CiAgICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZUluZm8gPSBWOERPTVdyYXBwZXI6OmRvbVdy
YXBwZXJUeXBlKHdyYXBwZXIpOwogCi0gICAgICAgIGlmIChWOEhUTUxMaW5rRWxlbWVudDo6aW5m
by5lcXVhbHModHlwZUluZm8pKSB7Ci0gICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQqIGh0bWxM
aW5rRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudCo+KG5vZGUpOwotICAgICAg
ICAgICAgYWRkRE9NT2JqZWN0VG9Hcm91cChzdG9yZSwgZ3JvdXBJZCwgaHRtbExpbmtFbGVtZW50
LT5zaGVldCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAodHlwZUluZm8tPmlzU3ViY2xhc3Mo
JlY4U3R5bGVTaGVldExpc3Q6OmluZm8pKSB7CisgICAgICAgICAgICBTdHlsZVNoZWV0TGlzdCog
c3R5bGVTaGVldExpc3QgPSBzdGF0aWNfY2FzdDxTdHlsZVNoZWV0TGlzdCo+KG9iamVjdCk7Cisg
ICAgICAgICAgICB1aW50cHRyX3QgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihzdHlsZVNoZWV0TGlzdCk7CisgICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0g
c3R5bGVTaGVldExpc3QtPmRvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgZ3JvdXBJZCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihkb2N1bWVudCk7CisgICAgICAgICAgICBtX2dyb3Vw
ZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIpKTsKIAotICAgICAgICBpZiAo
VjhIVE1MU3R5bGVFbGVtZW50OjppbmZvLmVxdWFscyh0eXBlSW5mbykpIHsKLSAgICAgICAgICAg
IEhUTUxTdHlsZUVsZW1lbnQqIGh0bWxTdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5
bGVFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICBhZGRET01PYmplY3RUb0dyb3VwKHN0b3Jl
LCBncm91cElkLCBodG1sU3R5bGVFbGVtZW50LT5zaGVldCgpKTsKLSAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKHR5cGVJbmZvLT5pc1N1YmNsYXNzKCZWOERPTUltcGxlbWVudGF0aW9uOjpp
bmZvKSkgeworICAgICAgICAgICAgRE9NSW1wbGVtZW50YXRpb24qIGRvbUltcGxlbWVudGF0aW9u
ID0gc3RhdGljX2Nhc3Q8RE9NSW1wbGVtZW50YXRpb24qPihvYmplY3QpOworICAgICAgICAgICAg
dWludHB0cl90IGdyb3VwSWQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZG9tSW1wbGVt
ZW50YXRpb24pOworICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGRvbUltcGxl
bWVudGF0aW9uLT5vd25lckRvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgZ3JvdXBJZCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihkb2N1bWVudCk7CisgICAgICAgICAgICBtX2dyb3Vw
ZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIpKTsKIAotICAgICAgICBpZiAo
VjhQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmluZm8uZXF1YWxzKHR5cGVJbmZvKSkgewotICAgICAg
ICAgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSBzdGF0
aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPihub2RlKTsKLSAgICAgICAgICAgIGFkZERP
TU9iamVjdFRvR3JvdXAoc3RvcmUsIGdyb3VwSWQsIHByb2Nlc3NpbmdJbnN0cnVjdGlvbi0+c2hl
ZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodHlwZUluZm8tPmlz
U3ViY2xhc3MoJlY4U3R5bGVTaGVldDo6aW5mbykgfHwgdHlwZUluZm8tPmlzU3ViY2xhc3MoJlY4
Q1NTUnVsZTo6aW5mbykpIHsKKyAgICAgICAgICAgIG1fZ3JvdXBlci5hcHBlbmQoR3JvdXBlckl0
ZW0oY2FsY3VsYXRlR3JvdXBJZChzdGF0aWNfY2FzdDxTdHlsZUJhc2UqPihvYmplY3QpKSwgd3Jh
cHBlcikpOwogCi0gICAgdm9pZCBhcHBseUdyb3VwaW5nKCkKLSAgICB7Ci0gICAgICAgIG1ha2VW
OE9iamVjdEdyb3VwcyhtX2dyb3VwZXIpOwotICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0eXBl
SW5mby0+aXNTdWJjbGFzcygmVjhDU1NTdHlsZURlY2xhcmF0aW9uOjppbmZvKSkgeworICAgICAg
ICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogY3NzU3R5bGVEZWNsYXJhdGlvbiA9IHN0YXRpY19j
YXN0PENTU1N0eWxlRGVjbGFyYXRpb24qPihvYmplY3QpOwogCi1wcml2YXRlOgotICAgIEdyb3Vw
ZXJMaXN0IG1fZ3JvdXBlcjsKLQotICAgIHZvaWQgYWRkRE9NT2JqZWN0VG9Hcm91cChET01EYXRh
U3RvcmUqIHN0b3JlLCB1aW50cHRyX3QgZ3JvdXBJZCwgdm9pZCogb2JqZWN0KQotICAgIHsKLSAg
ICAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBzdG9yZS0+ZG9tT2JqZWN0TWFwKCkuZ2V0KG9i
amVjdCk7Ci0gICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgICAgICB1aW50
cHRyX3QgZ3JvdXBJZCA9IGNhbGN1bGF0ZUdyb3VwSWQoY3NzU3R5bGVEZWNsYXJhdGlvbik7CiAg
ICAgICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIp
KTsKLSAgICB9Ci19OwotCi1jbGFzcyBET01PYmplY3RHcm91cGVyVmlzaXRvciA6IHB1YmxpYyBE
T01XcmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9yIHsKLXB1YmxpYzoKLSAgICBET01PYmplY3RHcm91
cGVyVmlzaXRvcigpCi0gICAgewotICAgIH0KIAotICAgIHZvaWQgc3RhcnRNYXAoKQotICAgIHsK
LSAgICAgICAgbV9ncm91cGVyLnNocmluaygwKTsKLSAgICB9CisgICAgICAgICAgICAvLyBBbGFz
LCBDU1NQcm9wZXJ0eS0tLWl0J3MgYSB0eXBlIG9mIGl0ZW1zIGJlaGluZCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbi0tLWRvZXNuJ3QKKyAgICAgICAgICAgIC8vIGhhdmUgdXBsaW5rIHRvIHRo
ZSBwYXJlbnQgKGFuZCB0aHVzIGNvdWxkIGJlIHBvdGVudGlvbmFsbHkgc2hhcmVkIGJldHdlZW4g
c2V2ZXJhbAorICAgICAgICAgICAgLy8gZGVjbGFyYXRpb25zKSwgc28gd2UgbmVlZCB0byBpdGVy
YXRlIG92ZXIgdGhlbS4KKyAgICAgICAgICAgIGlmIChjc3NTdHlsZURlY2xhcmF0aW9uLT5pc011
dGFibGVTdHlsZURlY2xhcmF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogY3NzTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gPSBzdGF0aWNfY2FzdDxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+KGNzc1N0eWxlRGVjbGFyYXRpb24pOworICAgICAg
ICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBjc3NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi0+ZW5kKCk7CisgICAgICAgICAgICAgICAgZm9y
IChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjc3NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbi0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXIgPSBzdG9yZS0+ZG9tT2JqZWN0TWFwKCkuZ2V0KGl0LT52YWx1
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JvdXBlci5hcHBlbmQoR3JvdXBlckl0ZW0oZ3JvdXBJZCwg
d3JhcHBlcikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgIHZvaWQg
ZW5kTWFwKCkKLSAgICB7Ci0gICAgICAgIG1ha2VWOE9iamVjdEdyb3VwcyhtX2dyb3VwZXIpOwor
ICAgICAgICB9IGVsc2UgaWYgKHR5cGVJbmZvLT5pc1N1YmNsYXNzKCZWOENTU1J1bGVMaXN0Ojpp
bmZvKSkgeworICAgICAgICAgICAgQ1NTUnVsZUxpc3QqIGNzc1J1bGVMaXN0ID0gc3RhdGljX2Nh
c3Q8Q1NTUnVsZUxpc3QqPihvYmplY3QpOworICAgICAgICAgICAgdWludHB0cl90IGdyb3VwSWQg
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY3NzUnVsZUxpc3QpOworICAgICAgICAgICAg
UmVmUHRyPFN0eWxlTGlzdD4gc3R5bGVMaXN0ID0gY3NzUnVsZUxpc3QtPnN0eWxlTGlzdCgpOwor
ICAgICAgICAgICAgaWYgKHN0eWxlTGlzdCkKKyAgICAgICAgICAgICAgICBncm91cElkID0gY2Fs
Y3VsYXRlR3JvdXBJZChzdHlsZUxpc3QuZ2V0KCkpOworICAgICAgICAgICAgbV9ncm91cGVyLmFw
cGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CisgICAgICAgIH0KICAgICB9CiAK
LSAgICB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqIHN0b3JlLCB2b2lkKiBvYmpl
Y3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCisgICAgdm9pZCBhcHBseUdy
b3VwaW5nKCkKICAgICB7Ci0gICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZUluZm8gPSBWOERP
TVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHdyYXBwZXIpOwotICAgICAgICAvLyBGSVhNRTogZXh0
ZW5kIFdyYXBwZXJUeXBlSW5mbyB3aXRoIGlzU3R5bGUgdG8gc2ltcGxpZnkgdGhlIGNoZWNrIGJl
bG93IG9yIGNvbnNpZGVyCi0gICAgICAgIC8vIGFkZGluZyBhIHZpcnR1YWwgbWV0aG9kIHRvIFdy
YXBwZXJUeXBlSW5mbyB3aGljaCB3b3VsZCBrbm93IGhvdyB0byBncm91cCBvYmplY3RzLgotICAg
ICAgICAvLyBGSVhNRTogY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIFN0eWxlQmFzZSB3cmFwcGVy
cyB3ZSBzaG91bGQgY2FyZSBvZi4KLSAgICAgICAgaWYgKFY4Q1NTU3R5bGVTaGVldDo6aW5mby5l
cXVhbHModHlwZUluZm8pCi0gICAgICAgICAgICB8fCBWOENTU1N0eWxlRGVjbGFyYXRpb246Omlu
Zm8uZXF1YWxzKHR5cGVJbmZvKQotICAgICAgICAgICAgfHwgVjhDU1NDaGFyc2V0UnVsZTo6aW5m
by5lcXVhbHModHlwZUluZm8pCi0gICAgICAgICAgICB8fCBWOENTU0ZvbnRGYWNlUnVsZTo6aW5m
by5lcXVhbHModHlwZUluZm8pCi0gICAgICAgICAgICB8fCBWOENTU1N0eWxlUnVsZTo6aW5mby5l
cXVhbHModHlwZUluZm8pCi0gICAgICAgICAgICB8fCBWOENTU0ltcG9ydFJ1bGU6OmluZm8uZXF1
YWxzKHR5cGVJbmZvKQotICAgICAgICAgICAgfHwgVjhDU1NNZWRpYVJ1bGU6OmluZm8uZXF1YWxz
KHR5cGVJbmZvKSkgewotICAgICAgICAgICAgU3R5bGVCYXNlKiBzdHlsZUJhc2UgPSBzdGF0aWNf
Y2FzdDxTdHlsZUJhc2UqPihvYmplY3QpOwotCi0gICAgICAgICAgICAvLyBXZSBwdXQgdGhlIHdo
b2xlIHRyZWUgb2Ygc3R5bGUgZWxlbWVudHMgaW50byBhIHNpbmdsZSBvYmplY3QgZ3JvdXAuCi0g
ICAgICAgICAgICAvLyBUbyBhY2hpZXZlIHRoYXQgd2UgZ3JvdXAgZWxlbWVudHMgYnkgdGhlIHJv
b3RzIG9mIHRoZWlyIHRyZWVzLgotICAgICAgICAgICAgU3R5bGVCYXNlKiByb290ID0gc3R5bGVC
YXNlOwotICAgICAgICAgICAgQVNTRVJUKHJvb3QpOwotICAgICAgICAgICAgd2hpbGUgKHRydWUp
IHsKLSAgICAgICAgICAgICAgICBTdHlsZUJhc2UqIHBhcmVudCA9IHJvb3QtPnBhcmVudCgpOwot
ICAgICAgICAgICAgICAgIGlmICghcGFyZW50KQorICAgICAgICAvLyBHcm91cCBieSBzb3J0aW5n
IGJ5IHRoZSBncm91cCBpZC4KKyAgICAgICAgc3RkOjpzb3J0KG1fZ3JvdXBlci5iZWdpbigpLCBt
X2dyb3VwZXIuZW5kKCkpOworCisgICAgICAgIC8vIEZJWE1FIFNob3VsZCBwcm9iYWJseSB3b3Jr
IGluIGl0ZXJhdG9ycyBoZXJlLCBidXQgaW5kZXhlcyB3ZXJlIGVhc2llciBmb3IgbXkgc2ltcGxl
IG1pbmQuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncm91cGVyLnNpemUoKTsg
KSB7CisgICAgICAgICAgICAvLyBTZWVrIHRvIHRoZSBuZXh0IGtleSAob3IgdGhlIGVuZCBvZiB0
aGUgbGlzdCkuCisgICAgICAgICAgICBzaXplX3QgbmV4dEtleUluZGV4ID0gbV9ncm91cGVyLnNp
emUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpOyBqIDwgbV9ncm91cGVyLnNpemUo
KTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JvdXBlcltpXS5ncm91cElkKCkgIT0g
bV9ncm91cGVyW2pdLmdyb3VwSWQoKSkgeworICAgICAgICAgICAgICAgICAgICBuZXh0S2V5SW5k
ZXggPSBqOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICByb290
ID0gcGFyZW50OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IC8vIEdyb3VwIGlkIGlzIGFuIGFkZHJlc3Mgb2YgdGhlIHJvb3QuCi0gICAgICAgICAgICB1aW50
cHRyX3QgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihyb290KTsKLSAgICAg
ICAgICAgIG1fZ3JvdXBlci5hcHBlbmQoR3JvdXBlckl0ZW0oZ3JvdXBJZCwgd3JhcHBlcikpOwog
Ci0gICAgICAgICAgICBpZiAoVjhDU1NTdHlsZURlY2xhcmF0aW9uOjppbmZvLmVxdWFscyh0eXBl
SW5mbykpIHsKLSAgICAgICAgICAgICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBjc3NTdHlsZURl
Y2xhcmF0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVEZWNsYXJhdGlvbio+KHN0eWxlQmFzZSk7
Ci0gICAgICAgICAgICAgICAgaWYgKGNzc1N0eWxlRGVjbGFyYXRpb24tPmlzTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24oKSkgewotICAgICAgICAgICAgICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiogY3NzTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gPSBzdGF0aWNfY2FzdDxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbio+KGNzc1N0eWxlRGVjbGFyYXRpb24pOwotICAgICAgICAgICAg
ICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
Y3NzTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24tPmVuZCgpOwotICAgICAgICAgICAgICAgICAgICBm
b3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IGNzc011
dGFibGVTdHlsZURlY2xhcmF0aW9uLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHdyYXBwZXIgPSBzdG9yZS0+ZG9tT2JqZWN0TWFwKCkuZ2V0KGl0
LT52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncm91cGVyLmFwcGVuZChHcm91cGVy
SXRlbShncm91cElkLCB3cmFwcGVyKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQobmV4dEtleUluZGV4ID4gaSk7CisKKyAgICAg
ICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBhIGdyb3VwIGlmIGl0IGhhcyBtb3JlIHRoYW4g
b25lIG9iamVjdC4gSWYgaXQgb25seQorICAgICAgICAgICAgLy8gaGFzIG9uZSBvYmplY3QsIGl0
IGhhcyBub3RoaW5nIGVsc2UgdGhhdCBuZWVkcyB0byBiZSBrZXB0IGFsaXZlLgorICAgICAgICAg
ICAgaWYgKG5leHRLZXlJbmRleCAtIGkgPD0gMSkgeworICAgICAgICAgICAgICAgIGkgPSBuZXh0
S2V5SW5kZXg7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4gZ3JvdXA7CisgICAg
ICAgICAgICBncm91cC5yZXNlcnZlQ2FwYWNpdHkobmV4dEtleUluZGV4IC0gaSk7CisgICAgICAg
ICAgICBmb3IgKDsgaSA8IG5leHRLZXlJbmRleDsgKytpKSB7CisgICAgICAgICAgICAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyID0gbV9ncm91cGVyW2ldLndyYXBwZXIoKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
ICAgICBncm91cC5hcHBlbmQod3JhcHBlcik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAoVjhTdHlsZVNoZWV0TGlzdDo6aW5mby5lcXVhbHModHlwZUluZm8pKSB7Ci0gICAgICAg
ICAgICBhZGRBbGxJdGVtcyhzdG9yZSwgc3RhdGljX2Nhc3Q8U3R5bGVTaGVldExpc3QqPihvYmpl
Y3QpLCB3cmFwcGVyKTsKLSAgICAgICAgfSBlbHNlIGlmIChWOENTU1J1bGVMaXN0OjppbmZvLmVx
dWFscyh0eXBlSW5mbykpIHsKLSAgICAgICAgICAgIGFkZEFsbEl0ZW1zKHN0b3JlLCBzdGF0aWNf
Y2FzdDxDU1NSdWxlTGlzdCo+KG9iamVjdCksIHdyYXBwZXIpOworCisgICAgICAgICAgICBpZiAo
Z3JvdXAuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAgICB2ODo6Vjg6OkFkZE9iamVjdEdyb3Vw
KCZncm91cFswXSwgZ3JvdXAuc2l6ZSgpKTsKKworICAgICAgICAgICAgQVNTRVJUKGkgPT0gbmV4
dEtleUluZGV4KTsKICAgICAgICAgfQogICAgIH0KIAogcHJpdmF0ZToKICAgICBHcm91cGVyTGlz
dCBtX2dyb3VwZXI7Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KLSAgICB2b2lkIGFkZEFsbEl0
ZW1zKERPTURhdGFTdG9yZSogc3RvcmUsIEMqIGNvbGxlY3Rpb24sIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+IHdyYXBwZXIpCi0gICAgewotICAgICAgICB1aW50cHRyX3QgZ3JvdXBJZCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb2xsZWN0aW9uKTsKLSAgICAgICAgbV9ncm91cGVy
LmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjb2xsZWN0aW9uLT5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAg
ICB3cmFwcGVyID0gc3RvcmUtPmRvbU9iamVjdE1hcCgpLmdldChjb2xsZWN0aW9uLT5pdGVtKGkp
KTsKLSAgICAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
bV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7Ci0gICAgICAg
IH0KLSAgICB9CiB9OwogCiAvLyBDcmVhdGUgb2JqZWN0IGdyb3VwcyBmb3IgRE9NIHRyZWUgbm9k
ZXMuCkBAIC00MjUsMTIgKzM1OSwxMCBAQCB2b2lkIFY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3Vl
KCkKICAgICB2aXNpdEFjdGl2ZURPTU9iamVjdHNJbkN1cnJlbnRUaHJlYWQoJnByb2xvZ3VlVmlz
aXRvcik7CiAKICAgICAvLyBDcmVhdGUgb2JqZWN0IGdyb3Vwcy4KLSAgICBOb2RlR3JvdXBlclZp
c2l0b3Igbm9kZUdyb3VwZXJWaXNpdG9yOwotICAgIHZpc2l0RE9NTm9kZXNJbkN1cnJlbnRUaHJl
YWQoJm5vZGVHcm91cGVyVmlzaXRvcik7Ci0gICAgbm9kZUdyb3VwZXJWaXNpdG9yLmFwcGx5R3Jv
dXBpbmcoKTsKLQotICAgIERPTU9iamVjdEdyb3VwZXJWaXNpdG9yIGRvbU9iamVjdEdyb3VwZXJW
aXNpdG9yOwotICAgIHZpc2l0RE9NT2JqZWN0c0luQ3VycmVudFRocmVhZCgmZG9tT2JqZWN0R3Jv
dXBlclZpc2l0b3IpOworICAgIEdyb3VwZXJWaXNpdG9yIGdyb3VwZXJWaXNpdG9yOworICAgIHZp
c2l0RE9NTm9kZXNJbkN1cnJlbnRUaHJlYWQoJmdyb3VwZXJWaXNpdG9yKTsKKyAgICB2aXNpdERP
TU9iamVjdHNJbkN1cnJlbnRUaHJlYWQoJmdyb3VwZXJWaXNpdG9yKTsKKyAgICBncm91cGVyVmlz
aXRvci5hcHBseUdyb3VwaW5nKCk7CiAKICAgICAvLyBDbGVhbiBzaW5nbGUgZWxlbWVudCBjYWNo
ZSBmb3Igc3RyaW5nIGNvbnZlcnNpb25zLgogICAgIGxhc3RTdHJpbmdJbXBsID0gMDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dyYXBwZXJUeXBlSW5mby5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmgKaW5kZXggMWQxY2JmZDQ1
YTBkZDhkMmY2MTJlMzZlODFhNjM3MTU2ZjI4NWUxMS4uMGZjOWNlNzk2Mzc1ZjdjNDdmN2M2NmQ1
NDAwYmRiYjk4MzQ4MzY3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
V3JhcHBlclR5cGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV3JhcHBl
clR5cGVJbmZvLmgKQEAgLTYxLDYgKzYxLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIHRoaXMgPT0gdGhhdDsKICAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgaXNTdWJjbGFzcyhjb25zdCBXcmFwcGVyVHlwZUluZm8qIHRoYXQpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChjb25zdCBXcmFwcGVyVHlw
ZUluZm8qIGN1cnJlbnQgPSB0aGlzOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50
Q2xhc3MpCisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gdGhhdCkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IGdldFRlbXBsYXRlKCkgeyByZXR1cm4gZ2V0VGVtcGxhdGVGdW5jdGlvbigpOyB9CiAgICAg
ICAgIApAQCAtODAsNiArOTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0
IEdldFRlbXBsYXRlRnVuY3Rpb24gZ2V0VGVtcGxhdGVGdW5jdGlvbjsKICAgICAgICAgY29uc3Qg
RGVyZWZPYmplY3RGdW5jdGlvbiBkZXJlZk9iamVjdEZ1bmN0aW9uOwogICAgICAgICBjb25zdCBU
b0FjdGl2ZURPTU9iamVjdEZ1bmN0aW9uIHRvQWN0aXZlRE9NT2JqZWN0RnVuY3Rpb247CisgICAg
ICAgIGNvbnN0IFdyYXBwZXJUeXBlSW5mbyogcGFyZW50Q2xhc3M7CiAgICAgfTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGVMaXN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUnVsZUxpc3QuaAppbmRleCBhMzU1YzRhNDQzMjQ3ZjU1ZDZkYjRhMDE1YjE1MzFj
ZDNiODI1NDQ5Li40NDcwZTNiZjIwMzg1Y2EyZjJmOTIwZWZkN2Y5ZjgyY2I3MzZhYWE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZUxpc3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUnVsZUxpc3QuaApAQCAtNTMsNiArNTMsMTEgQEAgcHVibGljOgogICAgIHZv
aWQgZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCk7CiAgICAgdm9pZCBhcHBlbmQoQ1NTUnVsZSop
OwogCisgICAgUGFzc1JlZlB0cjxTdHlsZUxpc3Q+IHN0eWxlTGlzdCgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9saXN0OworICAgIH0KKwogcHJpdmF0ZToKICAgICBDU1NSdWxlTGlzdCgpOwog
ICAgIENTU1J1bGVMaXN0KFN0eWxlTGlzdCosIGJvb2wgb21pdENoYXJzZXRSdWxlcyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5oCmluZGV4IGE0ODY1MTE2ODc1NmVjMGE3N2VjMTFkYjQ1
OWFhM2Y3MzY5MzlhZDAuLmEwMTk2OTE5ZDhkM2NlZjVkNmViMzU2MDEyZTk5ZWVlMjBjZTY4ODcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5oCkBAIC01MCw2ICs1MCwxMSBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBtX3NoZWV0cy5zd2FwKHNoZWV0cyk7CiAgICAgfQorCisgICAg
RG9jdW1lbnQqIGRvY3VtZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RvYzsKKyAgICB9
CiAgICAgCiBwcml2YXRlOgogICAgIFN0eWxlU2hlZXRMaXN0KERvY3VtZW50Kik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84858</attachid>
            <date>2011-03-05 03:55:37 -0800</date>
            <delta_ts>2011-03-09 05:56:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55399-20110305145535.patch</filename>
            <type>text/plain</type>
            <size>24769</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk4NjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkNzZjNjljMWU1YzAwNjZh
NTZmYmViNDNiMDg1ODA3N2QyMzc2MTVhLi45NmFhZjI4ODgxOGRmNDIyZDliMWM1YmFmM2IyYzlh
NjlmNGNiZGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMDMtMDQgIEFudG9u
IE11aGluICA8YW50b25tQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbdjhdIFJld29yayBvYmplY3QgZ3JvdXAgYnVpbGRpbmcu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTM5OQor
CisgICAgICAgIEluc3RlYWQgb2YgZ29pbmcgdG9wLWRvd24gKGZyb20gb3duZXIgdG8gb3duZWQg
ZWxlbWVudHMpLCBnbyB1cC0tLWZyb20gb2JqZWN0cworICAgICAgICB0byB0aGVpciBncm91cCBp
ZHMuICBUaGF0IGZpdHMgYmV0dGVyIHRvIHY4J3Mgb2JqZWN0IGdyb3VwaW5nIG1vZGVsIGFuZCBn
dWFyYW50ZWVzCisgICAgICAgIHRoYXQgZWFjaCB3cmFwcGVyIGJlbG9uZ3MgdG8gdGhlIHNpbmds
ZSBncm91cC4KKworICAgICAgICBBbGFzLCB0aGlzIGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBmb3Ig
b25lIGtpbmQgb2Ygb2JqZWN0cy0tLUNTU1Byb3BlcnRpZXMuCisKKyAgICAgICAgUGFydCBvZiBj
b3JlIEdDIGFsZ29laXRobSBhbmQgdGVzdGVkIGV4dGVuc2l2ZWx5IGJ5IGV4aXNpdGluZyBsYXlv
dXQgdGVzdHMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlR3JvdXBJZCk6CisgICAgICAgIChXZWJDb3JlOjpjYWxj
dWxhdGVSb290U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpHcm91cGVyVmlzaXRvcjo6
dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdyb3VwZXJWaXNpdG9yOjphcHBs
eUdyb3VwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3Vl
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaDoKKyAgICAgICAgKFdl
YkNvcmU6OldyYXBwZXJUeXBlSW5mbzo6aXNTdWJjbGFzcyk6CisgICAgICAgICogY3NzL0NTU1J1
bGVMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NSdWxlTGlzdDo6c3R5bGVMaXN0KToKKyAg
ICAgICAgKiBjc3MvU3R5bGVTaGVldExpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hl
ZXRMaXN0Ojpkb2N1bWVudCk6CisKIDIwMTEtMDItMjggIFJlbmF0YSBIb2RvdmFuICA8cmVuaUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4
IGFiZDgxNzI3YmJmZTFiNDgyYjY2ZmFlOWU3YzE5MTJmYjJjNmVmOTUuLjU2MmUyNzViMTJkNDkw
YzNiMzAzZDJmMjMwNWU5YTM5YzMzYjY3YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0xNzEyLDggKzE3MTIsMjAgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgIG15ICR0b0FjdGl2ZSA9IElzQWN0aXZl
RG9tVHlwZSgkaW50ZXJmYWNlTmFtZSkgPyAiJHtjbGFzc05hbWV9Ojp0b0FjdGl2ZURPTU9iamVj
dCIgOiAiMCI7CiAKKyAgICAjIGZpbmQgdGhlIHN1cGVyIGRlc2NyaXB0b3IKKyAgICBteSAkcGFy
ZW50Q2xhc3MgPSAiIjsKKyAgICBteSAkcGFyZW50Q2xhc3NUZW1wbGF0ZSA9ICIiOworICAgIGZv
cmVhY2ggKEB7JGRhdGFOb2RlLT5wYXJlbnRzfSkgeworICAgICAgICBteSAkcGFyZW50ID0gJGNv
ZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRfKTsKKyAgICAgICAgaWYgKCRwYXJlbnQgZXEgIkV2
ZW50VGFyZ2V0IikgeyBuZXh0OyB9CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4JHtwYXJlbnR9
LmgifSA9IDE7CisgICAgICAgICRwYXJlbnRDbGFzcyA9ICJWOCIgLiAkcGFyZW50OworICAgICAg
ICAkcGFyZW50Q2xhc3NUZW1wbGF0ZSA9ICRwYXJlbnRDbGFzcyAuICI6OkdldFRlbXBsYXRlKCki
OworICAgICAgICBsYXN0OworICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAibmFt
ZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiV3Jh
cHBlclR5cGVJbmZvICR7Y2xhc3NOYW1lfTo6aW5mbyA9IHsgJHtjbGFzc05hbWV9OjpHZXRUZW1w
bGF0ZSwgJHtjbGFzc05hbWV9OjpkZXJlZk9iamVjdCwgJHt0b0FjdGl2ZX0gfTtcblxuIik7ICAg
CisgICAgbXkgJHBhcmVudENsYXNzSW5mbyA9ICRwYXJlbnRDbGFzcyA/ICImJHtwYXJlbnRDbGFz
c306OmluZm8iIDogIjAiOworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJXcmFwcGVyVHlw
ZUluZm8gJHtjbGFzc05hbWV9OjppbmZvID0geyAke2NsYXNzTmFtZX06OkdldFRlbXBsYXRlLCAk
e2NsYXNzTmFtZX06OmRlcmVmT2JqZWN0LCAke3RvQWN0aXZlfSwgJHtwYXJlbnRDbGFzc0luZm99
IH07XG5cbiIpOyAgIAogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJuYW1lc3BhY2UgJHtp
bnRlcmZhY2VOYW1lfUludGVybmFsIHtcblxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgInRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIFY4X1VTRShUKSB7IH1cblxuIik7CiAKQEAg
LTE5MzcsMTUgKzE5NDksNiBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdFRlbXBs
YXRlPiBDb25maWd1cmVTaGFkb3dPYmplY3RUZW1wbGF0ZSh2ODo6UGVycwogRU5ECiAgICAgfQog
Ci0gICAgIyBmaW5kIHRoZSBzdXBlciBkZXNjcmlwdG9yCi0gICAgbXkgJHBhcmVudENsYXNzVGVt
cGxhdGUgPSAiIjsKLSAgICBmb3JlYWNoIChAeyRkYXRhTm9kZS0+cGFyZW50c30pIHsKLSAgICAg
ICAgbXkgJHBhcmVudCA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkXyk7Ci0gICAgICAg
IGlmICgkcGFyZW50IGVxICJFdmVudFRhcmdldCIpIHsgbmV4dDsgfQotICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJWOCR7cGFyZW50fS5oIn0gPSAxOwotICAgICAgICAkcGFyZW50Q2xhc3NUZW1wbGF0
ZSA9ICJWOCIgLiAkcGFyZW50IC4gIjo6R2V0VGVtcGxhdGUoKSI7Ci0gICAgICAgIGxhc3Q7Ci0g
ICAgfQogICAgIGlmICghJHBhcmVudENsYXNzVGVtcGxhdGUpIHsKICAgICAgICAgJHBhcmVudENs
YXNzVGVtcGxhdGUgPSAidjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCkiOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKaW5kZXggMjY3ZjFmMDliYmM4ZWU4ZDNiMjYyMjZl
MGY4MDc3ZGEzZmE5ZDU4OC4uNTg1Mjk3YzI0ZWYwZDc1NjBlOTgxMGQyNmYxMTEwYTAyOWExMjY1
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1XcmFwcGVyVHlwZUluZm8gVjhUZXN0SW50ZXJmYWNlOjppbmZvID0geyBW
OFRlc3RJbnRlcmZhY2U6OkdldFRlbXBsYXRlLCBWOFRlc3RJbnRlcmZhY2U6OmRlcmVmT2JqZWN0
LCAwIH07CitXcmFwcGVyVHlwZUluZm8gVjhUZXN0SW50ZXJmYWNlOjppbmZvID0geyBWOFRlc3RJ
bnRlcmZhY2U6OkdldFRlbXBsYXRlLCBWOFRlc3RJbnRlcmZhY2U6OmRlcmVmT2JqZWN0LCAwLCAw
IH07CiAKIG5hbWVzcGFjZSBUZXN0SW50ZXJmYWNlSW50ZXJuYWwgewogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5kZXggYWI5ZTZkYjI4ODEzNmZhMjY5
MDkwNmIwOTY5NjQ0ZjBmOTNkODM4ZS4uMDZjNzFjMGU2NzhjMDJhYmIzNTU3YjAyNjU5ZjlmZjU2
Y2MxZmFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cApAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdyYXBwZXJUeXBl
SW5mbyBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjppbmZvID0geyBWOFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1wbGF0ZSwgVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
cjo6ZGVyZWZPYmplY3QsIDAgfTsKK1dyYXBwZXJUeXBlSW5mbyBWOFRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyOjppbmZvID0geyBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1w
bGF0ZSwgVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6ZGVyZWZPYmplY3QsIDAsIDAgfTsK
IAogbmFtZXNwYWNlIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVySW50ZXJuYWwgewogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2Jq
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmou
Y3BwCmluZGV4IDQyOTg3NTY4ZDY3ZDNiNWUwOWQ5MzM2MGMzNzk1YzdhNWIwNzU4YjEuLjQ5YjVi
YmU1Mzc2ZmYxYmEzNmUzZWUxY2I4Y2VjNDQxZDYyNmY2NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC00Niw3
ICs0Niw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV3JhcHBlclR5cGVJbmZvIFY4VGVz
dE9iajo6aW5mbyA9IHsgVjhUZXN0T2JqOjpHZXRUZW1wbGF0ZSwgVjhUZXN0T2JqOjpkZXJlZk9i
amVjdCwgMCB9OworV3JhcHBlclR5cGVJbmZvIFY4VGVzdE9iajo6aW5mbyA9IHsgVjhUZXN0T2Jq
OjpHZXRUZW1wbGF0ZSwgVjhUZXN0T2JqOjpkZXJlZk9iamVjdCwgMCwgMCB9OwogCiBuYW1lc3Bh
Y2UgVGVzdE9iakludGVybmFsIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhH
Q0NvbnRyb2xsZXIuY3BwCmluZGV4IGEzNGRjMjQyNWViZTdmNzkzNWJhMDkxOGIwYzhkMmRjNzgw
Nzk4YzIuLjQ4YzFmNWJjODMyMGU3ZDc5YzkyZjczOWU4ZWNhNmVhM2Y5MTE2MGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKQEAgLTM0LDI3ICsz
NCwxOCBAQAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkF0dHIuaCIK
ICNpbmNsdWRlICJET01EYXRhU3RvcmUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1CcmlkZ2UuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhDU1NDaGFyc2V0UnVsZS5oIgotI2luY2x1ZGUgIlY4Q1NT
Rm9udEZhY2VSdWxlLmgiCi0jaW5jbHVkZSAiVjhDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAi
VjhDU1NNZWRpYVJ1bGUuaCIKKyNpbmNsdWRlICJWOENTU1J1bGUuaCIKICNpbmNsdWRlICJWOENT
U1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiVjhDU1NTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVk
ZSAiVjhDU1NTdHlsZVJ1bGUuaCIKLSNpbmNsdWRlICJWOENTU1N0eWxlU2hlZXQuaCIKLSNpbmNs
dWRlICJWOERPTU1hcC5oIgotI2luY2x1ZGUgIlY4SFRNTExpbmtFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiVjhIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhET01JbXBsZW1lbnRhdGlvbi5o
IgogI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnQuaCIKLSNpbmNsdWRlICJWOFByb2Nlc3NpbmdJbnN0
cnVjdGlvbi5oIgotI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJWOFN0eWxlU2hlZXQu
aCIKICNpbmNsdWRlICJWOFN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiV3JhcHBlclR5cGVJ
bmZvLmgiCiAKQEAgLTE5OCwyMTUgKzE4OSwxNTggQEAgYm9vbCBvcGVyYXRvcjwoY29uc3QgR3Jv
dXBlckl0ZW0mIGEsIGNvbnN0IEdyb3VwZXJJdGVtJiBiKQogCiB0eXBlZGVmIFZlY3RvcjxHcm91
cGVySXRlbT4gR3JvdXBlckxpc3Q7CiAKLXZvaWQgbWFrZVY4T2JqZWN0R3JvdXBzKEdyb3VwZXJM
aXN0JiBncm91cGVyKQorLy8gSWYgdGhlIG5vZGUgaXMgaW4gZG9jdW1lbnQsIHB1dCBpdCBpbiB0
aGUgb3duZXJEb2N1bWVudCdzIG9iamVjdCBncm91cC4KKy8vCisvLyBJZiBhbiBpbWFnZSBlbGVt
ZW50IHdhcyBjcmVhdGVkIGJ5IEphdmFTY3JpcHQgIm5ldyBJbWFnZSIsCisvLyBpdCBpcyBub3Qg
aW4gYSBkb2N1bWVudC4gSG93ZXZlciwgaWYgdGhlIGxvYWQgZXZlbnQgaGFzIG5vdAorLy8gYmVl
biBmaXJlZCAoc3RpbGwgb25sb2FkaW5nKSwgaXQgaXMgdHJlYXRlZCBhcyBpbiB0aGUgZG9jdW1l
bnQuCisvLworLy8gT3RoZXJ3aXNlLCB0aGUgbm9kZSBpcyBwdXQgaW4gYW4gb2JqZWN0IGdyb3Vw
IGlkZW50aWZpZWQgYnkgdGhlIHJvb3QKKy8vIGVsZW1lbnQgb2YgdGhlIHRyZWUgdG8gd2hpY2gg
aXQgYmVsb25ncy4KK3N0YXRpYyB1aW50cHRyX3QgY2FsY3VsYXRlR3JvdXBJZChOb2RlKiBub2Rl
KQogewotICAgIC8vIEdyb3VwIGJ5IHNvcnRpbmcgYnkgdGhlIGdyb3VwIGlkLgotICAgIHN0ZDo6
c29ydChncm91cGVyLmJlZ2luKCksIGdyb3VwZXIuZW5kKCkpOwotCi0gICAgLy8gRklYTUUgU2hv
dWxkIHByb2JhYmx5IHdvcmsgaW4gaXRlcmF0b3JzIGhlcmUsIGJ1dCBpbmRleGVzIHdlcmUgZWFz
aWVyIGZvciBteSBzaW1wbGUgbWluZC4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdyb3Vw
ZXIuc2l6ZSgpOyApIHsKLSAgICAgICAgLy8gU2VlayB0byB0aGUgbmV4dCBrZXkgKG9yIHRoZSBl
bmQgb2YgdGhlIGxpc3QpLgotICAgICAgICBzaXplX3QgbmV4dEtleUluZGV4ID0gZ3JvdXBlci5z
aXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSBpOyBqIDwgZ3JvdXBlci5zaXplKCk7ICsr
aikgewotICAgICAgICAgICAgaWYgKGdyb3VwZXJbaV0uZ3JvdXBJZCgpICE9IGdyb3VwZXJbal0u
Z3JvdXBJZCgpKSB7Ci0gICAgICAgICAgICAgICAgbmV4dEtleUluZGV4ID0gajsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VS
VChuZXh0S2V5SW5kZXggPiBpKTsKKyAgICBpZiAobm9kZS0+aW5Eb2N1bWVudCgpIHx8IChub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nVGFnKSAmJiAhc3RhdGljX2Nhc3Q8SFRNTEltYWdl
RWxlbWVudCo+KG5vZGUpLT5oYXZlRmlyZWRMb2FkRXZlbnQoKSkpCisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+ZG9jdW1lbnQoKSk7CisKKyAgICBOb2Rl
KiByb290ID0gbm9kZTsKKyAgICBpZiAobm9kZS0+aXNBdHRyaWJ1dGVOb2RlKCkpIHsKKyAgICAg
ICAgcm9vdCA9IHN0YXRpY19jYXN0PEF0dHIqPihub2RlKS0+b3duZXJFbGVtZW50KCk7CisgICAg
ICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUgaGFzIG5vIGVsZW1lbnQsIG5vIG5lZWQgdG8gcHV0IGl0
IGluIHRoZSBncm91cCwKKyAgICAgICAgLy8gYmVjYXVzZSBpdCdsbCBhbHdheXMgYmUgYSBncm91
cCBvZiAxLgorICAgICAgICBpZiAoIXJvb3QpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9
IGVsc2UgeworICAgICAgICB3aGlsZSAoTm9kZSogcGFyZW50ID0gcm9vdC0+cGFyZW50Tm9kZSgp
KQorICAgICAgICAgICAgcm9vdCA9IHBhcmVudDsKKyAgICB9CiAKLSAgICAgICAgLy8gV2Ugb25s
eSBjYXJlIGFib3V0IGEgZ3JvdXAgaWYgaXQgaGFzIG1vcmUgdGhhbiBvbmUgb2JqZWN0LiBJZiBp
dCBvbmx5Ci0gICAgICAgIC8vIGhhcyBvbmUgb2JqZWN0LCBpdCBoYXMgbm90aGluZyBlbHNlIHRo
YXQgbmVlZHMgdG8gYmUga2VwdCBhbGl2ZS4KLSAgICAgICAgaWYgKG5leHRLZXlJbmRleCAtIGkg
PD0gMSkgewotICAgICAgICAgICAgaSA9IG5leHRLZXlJbmRleDsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihy
b290KTsKK30KIAotICAgICAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IGdy
b3VwOwotICAgICAgICBncm91cC5yZXNlcnZlQ2FwYWNpdHkobmV4dEtleUluZGV4IC0gaSk7Ci0g
ICAgICAgIGZvciAoOyBpIDwgbmV4dEtleUluZGV4OyArK2kpIHsKLSAgICAgICAgICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpWYWx1ZT4gd3JhcHBlciA9IGdyb3VwZXJbaV0ud3JhcHBlcigpOwotICAg
ICAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBncm91cC5h
cHBlbmQod3JhcHBlcik7Ci0gICAgICAgIH0KK3N0YXRpYyBTdHlsZUJhc2UqIGNhbGN1bGF0ZVJv
b3RTdHlsZVNoZWV0KFN0eWxlQmFzZSogc3R5bGVCYXNlKQoreworICAgIFN0eWxlQmFzZSogcm9v
dCA9IHN0eWxlQmFzZTsKKyAgICB3aGlsZSAoU3R5bGVCYXNlKiBwYXJlbnQgPSByb290LT5wYXJl
bnQoKSkgeworICAgICAgICAvLyBXZSBhc3N1bWUgdGhhdCBubyBzdHlsZSBzaGVldHMgaW4gYmV0
d2VlbiBjYW4gaGF2ZSBvd25lciBub2Rlcy4KKyAgICAgICAgQVNTRVJUKCFyb290LT5pc1N0eWxl
U2hlZXQoKSB8fCAhc3RhdGljX2Nhc3Q8U3R5bGVTaGVldCo+KHJvb3QpLT5vd25lck5vZGUoKSk7
CisgICAgICAgIHJvb3QgPSBwYXJlbnQ7CisgICAgfQorICAgIHJldHVybiByb290OworfQogCi0g
ICAgICAgIGlmIChncm91cC5zaXplKCkgPiAxKQotICAgICAgICAgICAgdjg6OlY4OjpBZGRPYmpl
Y3RHcm91cCgmZ3JvdXBbMF0sIGdyb3VwLnNpemUoKSk7CitzdGF0aWMgdWludHB0cl90IGNhbGN1
bGF0ZUdyb3VwSWQoU3R5bGVCYXNlKiBzdHlsZUJhc2UpCit7CisgICAgU3R5bGVCYXNlKiByb290
ID0gY2FsY3VsYXRlUm9vdFN0eWxlU2hlZXQoc3R5bGVCYXNlKTsKKyAgICBBU1NFUlQocm9vdCk7
CisgICAgaWYgKHJvb3QtPmlzU3R5bGVTaGVldCgpKQorICAgICAgICBpZiAoTm9kZSogb3duZXJO
b2RlID0gc3RhdGljX2Nhc3Q8U3R5bGVTaGVldCo+KHJvb3QpLT5vd25lck5vZGUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBjYWxjdWxhdGVHcm91cElkKG93bmVyTm9kZSk7CiAKLSAgICAgICAgQVNT
RVJUKGkgPT0gbmV4dEtleUluZGV4KTsKLSAgICB9CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Pihyb290KTsKIH0KIAotY2xhc3MgTm9kZUdyb3VwZXJWaXNpdG9yIDogcHVi
bGljIERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3IgeworY2xhc3MgR3JvdXBlclZpc2l0b3Ig
OiBwdWJsaWMgRE9NV3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciwgcHVibGljIERPTVdyYXBwZXJN
YXA8dm9pZD46OlZpc2l0b3IgewogcHVibGljOgotICAgIE5vZGVHcm91cGVyVmlzaXRvcigpCi0g
ICAgewotICAgICAgICAvLyBGSVhNRTogZ3JvdXBlcl8ucmVzZXJ2ZUNhcGFjaXR5KG5vZGVfbWFw
LnNpemUoKSk7ICA/Ci0gICAgfQotCiAgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0
b3JlKiBzdG9yZSwgTm9kZSogbm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBl
cikKICAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBub2RlIGlzIGluIGRvY3VtZW50LCBwdXQgaXQg
aW4gdGhlIG93bmVyRG9jdW1lbnQncyBvYmplY3QgZ3JvdXAuCi0gICAgICAgIC8vCi0gICAgICAg
IC8vIElmIGFuIGltYWdlIGVsZW1lbnQgd2FzIGNyZWF0ZWQgYnkgSmF2YVNjcmlwdCAibmV3IElt
YWdlIiwKLSAgICAgICAgLy8gaXQgaXMgbm90IGluIGEgZG9jdW1lbnQuIEhvd2V2ZXIsIGlmIHRo
ZSBsb2FkIGV2ZW50IGhhcyBub3QKLSAgICAgICAgLy8gYmVlbiBmaXJlZCAoc3RpbGwgb25sb2Fk
aW5nKSwgaXQgaXMgdHJlYXRlZCBhcyBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgIC8vCi0gICAg
ICAgIC8vIE90aGVyd2lzZSwgdGhlIG5vZGUgaXMgcHV0IGluIGFuIG9iamVjdCBncm91cCBpZGVu
dGlmaWVkIGJ5IHRoZSByb290Ci0gICAgICAgIC8vIGVsZW1lbnQgb2YgdGhlIHRyZWUgdG8gd2hp
Y2ggaXQgYmVsb25ncy4KLSAgICAgICAgdWludHB0cl90IGdyb3VwSWQ7Ci0gICAgICAgIGlmIChu
b2RlLT5pbkRvY3VtZW50KCkgfHwgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcp
ICYmICFzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4obm9kZSktPmhhdmVGaXJlZExvYWRF
dmVudCgpKSkKLSAgICAgICAgICAgIGdyb3VwSWQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4obm9kZS0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgTm9kZSog
cm9vdCA9IG5vZGU7Ci0gICAgICAgICAgICBpZiAobm9kZS0+aXNBdHRyaWJ1dGVOb2RlKCkpIHsK
LSAgICAgICAgICAgICAgICByb290ID0gc3RhdGljX2Nhc3Q8QXR0cio+KG5vZGUpLT5vd25lckVs
ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGhhcyBubyBlbGVt
ZW50LCBubyBuZWVkIHRvIHB1dCBpdCBpbiB0aGUgZ3JvdXAsCi0gICAgICAgICAgICAgICAgLy8g
YmVjYXVzZSBpdCdsbCBhbHdheXMgYmUgYSBncm91cCBvZiAxLgotICAgICAgICAgICAgICAgIGlm
ICghcm9vdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICB3aGlsZSAocm9vdC0+cGFyZW50Tm9kZSgpKQotICAgICAgICAg
ICAgICAgICAgICByb290ID0gcm9vdC0+cGFyZW50Tm9kZSgpOwotCi0gICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIG5vZGUgaXMgYWxvbmUgaW4gaXRzIERPTSB0cmVlIChkb2Vzbid0IGhhdmUgYSBw
YXJlbnQgb3IgYW55Ci0gICAgICAgICAgICAgICAgLy8gY2hpbGRyZW4pIHRoZW4gdGhlIGdyb3Vw
IHdpbGwgYmUgZmlsdGVyZWQgb3V0IGxhdGVyIGFueXdheS4KLSAgICAgICAgICAgICAgICBpZiAo
cm9vdCA9PSBub2RlICYmICFub2RlLT5oYXNDaGlsZE5vZGVzKCkgJiYgIW5vZGUtPmhhc0F0dHJp
YnV0ZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihyb290KTsKLSAg
ICAgICAgfQorICAgICAgICB1aW50cHRyX3QgZ3JvdXBJZCA9IGNhbGN1bGF0ZUdyb3VwSWQobm9k
ZSk7CisgICAgICAgIGlmICghZ3JvdXBJZCkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
bV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CisgICAgfQog
Ci0gICAgICAgIC8vIElmIHRoZSBub2RlIGlzIHN0eWxlZCBhbmQgdGhlcmUgaXMgYSB3cmFwcGVy
IGZvciB0aGUgaW5saW5lCi0gICAgICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9uLCB3ZSBuZWVkIHRv
IGtlZXAgdGhhdCBzdHlsZSBkZWNsYXJhdGlvbgotICAgICAgICAvLyB3cmFwcGVyIGFsaXZlIGFz
IHdlbGwsIHNvIHdlIGFkZCBpdCB0byB0aGUgb2JqZWN0IGdyb3VwLgotICAgICAgICBpZiAobm9k
ZS0+aXNTdHlsZWRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIFN0eWxlZEVsZW1lbnQqIGVsZW1l
bnQgPSByZWludGVycHJldF9jYXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgICAg
IGFkZERPTU9iamVjdFRvR3JvdXAoc3RvcmUsIGdyb3VwSWQsIGVsZW1lbnQtPmlubGluZVN0eWxl
RGVjbCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChub2RlLT5pc0RvY3VtZW50Tm9kZSgp
KSB7Ci0gICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSByZWludGVycHJldF9jYXN0PERv
Y3VtZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICBhZGRET01PYmplY3RUb0dyb3VwKHN0b3JlLCBn
cm91cElkLCBkb2N1bWVudC0+c3R5bGVTaGVldHMoKSk7Ci0gICAgICAgICAgICBhZGRET01PYmpl
Y3RUb0dyb3VwKHN0b3JlLCBncm91cElkLCBkb2N1bWVudC0+aW1wbGVtZW50YXRpb24oKSk7Ci0g
ICAgICAgIH0KLQorICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUs
IHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKKyAgICB7
CiAgICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZUluZm8gPSBWOERPTVdyYXBwZXI6OmRvbVdy
YXBwZXJUeXBlKHdyYXBwZXIpOwogCi0gICAgICAgIGlmIChWOEhUTUxMaW5rRWxlbWVudDo6aW5m
by5lcXVhbHModHlwZUluZm8pKSB7Ci0gICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQqIGh0bWxM
aW5rRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudCo+KG5vZGUpOwotICAgICAg
ICAgICAgYWRkRE9NT2JqZWN0VG9Hcm91cChzdG9yZSwgZ3JvdXBJZCwgaHRtbExpbmtFbGVtZW50
LT5zaGVldCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAodHlwZUluZm8tPmlzU3ViY2xhc3Mo
JlY4U3R5bGVTaGVldExpc3Q6OmluZm8pKSB7CisgICAgICAgICAgICBTdHlsZVNoZWV0TGlzdCog
c3R5bGVTaGVldExpc3QgPSBzdGF0aWNfY2FzdDxTdHlsZVNoZWV0TGlzdCo+KG9iamVjdCk7Cisg
ICAgICAgICAgICB1aW50cHRyX3QgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihzdHlsZVNoZWV0TGlzdCk7CisgICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0g
c3R5bGVTaGVldExpc3QtPmRvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgZ3JvdXBJZCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihkb2N1bWVudCk7CisgICAgICAgICAgICBtX2dyb3Vw
ZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIpKTsKIAotICAgICAgICBpZiAo
VjhIVE1MU3R5bGVFbGVtZW50OjppbmZvLmVxdWFscyh0eXBlSW5mbykpIHsKLSAgICAgICAgICAg
IEhUTUxTdHlsZUVsZW1lbnQqIGh0bWxTdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5
bGVFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICBhZGRET01PYmplY3RUb0dyb3VwKHN0b3Jl
LCBncm91cElkLCBodG1sU3R5bGVFbGVtZW50LT5zaGVldCgpKTsKLSAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKHR5cGVJbmZvLT5pc1N1YmNsYXNzKCZWOERPTUltcGxlbWVudGF0aW9uOjpp
bmZvKSkgeworICAgICAgICAgICAgRE9NSW1wbGVtZW50YXRpb24qIGRvbUltcGxlbWVudGF0aW9u
ID0gc3RhdGljX2Nhc3Q8RE9NSW1wbGVtZW50YXRpb24qPihvYmplY3QpOworICAgICAgICAgICAg
dWludHB0cl90IGdyb3VwSWQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZG9tSW1wbGVt
ZW50YXRpb24pOworICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGRvbUltcGxl
bWVudGF0aW9uLT5vd25lckRvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgZ3JvdXBJZCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihkb2N1bWVudCk7CisgICAgICAgICAgICBtX2dyb3Vw
ZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIpKTsKIAotICAgICAgICBpZiAo
VjhQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmluZm8uZXF1YWxzKHR5cGVJbmZvKSkgewotICAgICAg
ICAgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSBzdGF0
aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPihub2RlKTsKLSAgICAgICAgICAgIGFkZERP
TU9iamVjdFRvR3JvdXAoc3RvcmUsIGdyb3VwSWQsIHByb2Nlc3NpbmdJbnN0cnVjdGlvbi0+c2hl
ZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodHlwZUluZm8tPmlz
U3ViY2xhc3MoJlY4U3R5bGVTaGVldDo6aW5mbykgfHwgdHlwZUluZm8tPmlzU3ViY2xhc3MoJlY4
Q1NTUnVsZTo6aW5mbykpIHsKKyAgICAgICAgICAgIG1fZ3JvdXBlci5hcHBlbmQoR3JvdXBlckl0
ZW0oY2FsY3VsYXRlR3JvdXBJZChzdGF0aWNfY2FzdDxTdHlsZUJhc2UqPihvYmplY3QpKSwgd3Jh
cHBlcikpOwogCi0gICAgdm9pZCBhcHBseUdyb3VwaW5nKCkKLSAgICB7Ci0gICAgICAgIG1ha2VW
OE9iamVjdEdyb3VwcyhtX2dyb3VwZXIpOwotICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0eXBl
SW5mby0+aXNTdWJjbGFzcygmVjhDU1NTdHlsZURlY2xhcmF0aW9uOjppbmZvKSkgeworICAgICAg
ICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogY3NzU3R5bGVEZWNsYXJhdGlvbiA9IHN0YXRpY19j
YXN0PENTU1N0eWxlRGVjbGFyYXRpb24qPihvYmplY3QpOwogCi1wcml2YXRlOgotICAgIEdyb3Vw
ZXJMaXN0IG1fZ3JvdXBlcjsKLQotICAgIHZvaWQgYWRkRE9NT2JqZWN0VG9Hcm91cChET01EYXRh
U3RvcmUqIHN0b3JlLCB1aW50cHRyX3QgZ3JvdXBJZCwgdm9pZCogb2JqZWN0KQotICAgIHsKLSAg
ICAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBzdG9yZS0+ZG9tT2JqZWN0TWFwKCkuZ2V0KG9i
amVjdCk7Ci0gICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgICAgICB1aW50
cHRyX3QgZ3JvdXBJZCA9IGNhbGN1bGF0ZUdyb3VwSWQoY3NzU3R5bGVEZWNsYXJhdGlvbik7CiAg
ICAgICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIp
KTsKLSAgICB9Ci19OwotCi1jbGFzcyBET01PYmplY3RHcm91cGVyVmlzaXRvciA6IHB1YmxpYyBE
T01XcmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9yIHsKLXB1YmxpYzoKLSAgICBET01PYmplY3RHcm91
cGVyVmlzaXRvcigpCi0gICAgewotICAgIH0KIAotICAgIHZvaWQgc3RhcnRNYXAoKQotICAgIHsK
LSAgICAgICAgbV9ncm91cGVyLnNocmluaygwKTsKLSAgICB9CisgICAgICAgICAgICAvLyBBbGFz
LCBDU1NQcm9wZXJ0eS0tLWl0J3MgYSB0eXBlIG9mIGl0ZW1zIGJlaGluZCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbi0tLWRvZXNuJ3QKKyAgICAgICAgICAgIC8vIGhhdmUgdXBsaW5rIHRvIHRo
ZSBwYXJlbnQgKGFuZCB0aHVzIGNvdWxkIGJlIHBvdGVudGlvbmFsbHkgc2hhcmVkIGJldHdlZW4g
c2V2ZXJhbAorICAgICAgICAgICAgLy8gZGVjbGFyYXRpb25zKSwgc28gd2UgbmVlZCB0byBpdGVy
YXRlIG92ZXIgdGhlbS4KKyAgICAgICAgICAgIGlmIChjc3NTdHlsZURlY2xhcmF0aW9uLT5pc011
dGFibGVTdHlsZURlY2xhcmF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogY3NzTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gPSBzdGF0aWNfY2FzdDxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+KGNzc1N0eWxlRGVjbGFyYXRpb24pOworICAgICAg
ICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBjc3NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi0+ZW5kKCk7CisgICAgICAgICAgICAgICAgZm9y
IChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjc3NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbi0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXIgPSBzdG9yZS0+ZG9tT2JqZWN0TWFwKCkuZ2V0KGl0LT52YWx1
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JvdXBlci5hcHBlbmQoR3JvdXBlckl0ZW0oZ3JvdXBJZCwg
d3JhcHBlcikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgIHZvaWQg
ZW5kTWFwKCkKLSAgICB7Ci0gICAgICAgIG1ha2VWOE9iamVjdEdyb3VwcyhtX2dyb3VwZXIpOwor
ICAgICAgICB9IGVsc2UgaWYgKHR5cGVJbmZvLT5pc1N1YmNsYXNzKCZWOENTU1J1bGVMaXN0Ojpp
bmZvKSkgeworICAgICAgICAgICAgQ1NTUnVsZUxpc3QqIGNzc1J1bGVMaXN0ID0gc3RhdGljX2Nh
c3Q8Q1NTUnVsZUxpc3QqPihvYmplY3QpOworICAgICAgICAgICAgdWludHB0cl90IGdyb3VwSWQg
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY3NzUnVsZUxpc3QpOworICAgICAgICAgICAg
U3R5bGVMaXN0KiBzdHlsZUxpc3QgPSBjc3NSdWxlTGlzdC0+c3R5bGVMaXN0KCk7CisgICAgICAg
ICAgICBpZiAoc3R5bGVMaXN0KQorICAgICAgICAgICAgICAgIGdyb3VwSWQgPSBjYWxjdWxhdGVH
cm91cElkKHN0eWxlTGlzdCk7CisgICAgICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3VwZXJJ
dGVtKGdyb3VwSWQsIHdyYXBwZXIpKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgdmlz
aXRET01XcmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUsIHZvaWQqIG9iamVjdCwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKKyAgICB2b2lkIGFwcGx5R3JvdXBpbmcoKQogICAg
IHsKLSAgICAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlSW5mbyA9IFY4RE9NV3JhcHBlcjo6ZG9t
V3JhcHBlclR5cGUod3JhcHBlcik7Ci0gICAgICAgIC8vIEZJWE1FOiBleHRlbmQgV3JhcHBlclR5
cGVJbmZvIHdpdGggaXNTdHlsZSB0byBzaW1wbGlmeSB0aGUgY2hlY2sgYmVsb3cgb3IgY29uc2lk
ZXIKLSAgICAgICAgLy8gYWRkaW5nIGEgdmlydHVhbCBtZXRob2QgdG8gV3JhcHBlclR5cGVJbmZv
IHdoaWNoIHdvdWxkIGtub3cgaG93IHRvIGdyb3VwIG9iamVjdHMuCi0gICAgICAgIC8vIEZJWE1F
OiBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgU3R5bGVCYXNlIHdyYXBwZXJzIHdlIHNob3VsZCBj
YXJlIG9mLgotICAgICAgICBpZiAoVjhDU1NTdHlsZVNoZWV0OjppbmZvLmVxdWFscyh0eXBlSW5m
bykKLSAgICAgICAgICAgIHx8IFY4Q1NTU3R5bGVEZWNsYXJhdGlvbjo6aW5mby5lcXVhbHModHlw
ZUluZm8pCi0gICAgICAgICAgICB8fCBWOENTU0NoYXJzZXRSdWxlOjppbmZvLmVxdWFscyh0eXBl
SW5mbykKLSAgICAgICAgICAgIHx8IFY4Q1NTRm9udEZhY2VSdWxlOjppbmZvLmVxdWFscyh0eXBl
SW5mbykKLSAgICAgICAgICAgIHx8IFY4Q1NTU3R5bGVSdWxlOjppbmZvLmVxdWFscyh0eXBlSW5m
bykKLSAgICAgICAgICAgIHx8IFY4Q1NTSW1wb3J0UnVsZTo6aW5mby5lcXVhbHModHlwZUluZm8p
Ci0gICAgICAgICAgICB8fCBWOENTU01lZGlhUnVsZTo6aW5mby5lcXVhbHModHlwZUluZm8pKSB7
Ci0gICAgICAgICAgICBTdHlsZUJhc2UqIHN0eWxlQmFzZSA9IHN0YXRpY19jYXN0PFN0eWxlQmFz
ZSo+KG9iamVjdCk7Ci0KLSAgICAgICAgICAgIC8vIFdlIHB1dCB0aGUgd2hvbGUgdHJlZSBvZiBz
dHlsZSBlbGVtZW50cyBpbnRvIGEgc2luZ2xlIG9iamVjdCBncm91cC4KLSAgICAgICAgICAgIC8v
IFRvIGFjaGlldmUgdGhhdCB3ZSBncm91cCBlbGVtZW50cyBieSB0aGUgcm9vdHMgb2YgdGhlaXIg
dHJlZXMuCi0gICAgICAgICAgICBTdHlsZUJhc2UqIHJvb3QgPSBzdHlsZUJhc2U7Ci0gICAgICAg
ICAgICBBU1NFUlQocm9vdCk7Ci0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAg
ICAgICAgIFN0eWxlQmFzZSogcGFyZW50ID0gcm9vdC0+cGFyZW50KCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFwYXJlbnQpCisgICAgICAgIC8vIEdyb3VwIGJ5IHNvcnRpbmcgYnkgdGhlIGdyb3Vw
IGlkLgorICAgICAgICBzdGQ6OnNvcnQobV9ncm91cGVyLmJlZ2luKCksIG1fZ3JvdXBlci5lbmQo
KSk7CisKKyAgICAgICAgLy8gRklYTUUgU2hvdWxkIHByb2JhYmx5IHdvcmsgaW4gaXRlcmF0b3Jz
IGhlcmUsIGJ1dCBpbmRleGVzIHdlcmUgZWFzaWVyIGZvciBteSBzaW1wbGUgbWluZC4KKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyb3VwZXIuc2l6ZSgpOyApIHsKKyAgICAgICAg
ICAgIC8vIFNlZWsgdG8gdGhlIG5leHQga2V5IChvciB0aGUgZW5kIG9mIHRoZSBsaXN0KS4KKyAg
ICAgICAgICAgIHNpemVfdCBuZXh0S2V5SW5kZXggPSBtX2dyb3VwZXIuc2l6ZSgpOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaiA9IGk7IGogPCBtX2dyb3VwZXIuc2l6ZSgpOyArK2opIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9ncm91cGVyW2ldLmdyb3VwSWQoKSAhPSBtX2dyb3VwZXJbal0u
Z3JvdXBJZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG5leHRLZXlJbmRleCA9IGo7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHJvb3QgPSBwYXJlbnQ7Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gR3JvdXAgaWQg
aXMgYW4gYWRkcmVzcyBvZiB0aGUgcm9vdC4KLSAgICAgICAgICAgIHVpbnRwdHJfdCBncm91cElk
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJvb3QpOwotICAgICAgICAgICAgbV9ncm91
cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CiAKLSAgICAgICAgICAg
IGlmIChWOENTU1N0eWxlRGVjbGFyYXRpb246OmluZm8uZXF1YWxzKHR5cGVJbmZvKSkgewotICAg
ICAgICAgICAgICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGNzc1N0eWxlRGVjbGFyYXRpb24gPSBz
dGF0aWNfY2FzdDxDU1NTdHlsZURlY2xhcmF0aW9uKj4oc3R5bGVCYXNlKTsKLSAgICAgICAgICAg
ICAgICBpZiAoY3NzU3R5bGVEZWNsYXJhdGlvbi0+aXNNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBjc3NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiA9IHN0YXRpY19jYXN0PENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKj4oY3NzU3R5bGVEZWNsYXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjc3NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbi0+ZW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3NzTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24tPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlciA9IHN0b3JlLT5kb21PYmplY3RNYXAoKS5nZXQoaXQtPnZhbHVlKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQs
IHdyYXBwZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIEFTU0VSVChuZXh0S2V5SW5kZXggPiBpKTsKKworICAgICAgICAgICAgLy8gV2Ug
b25seSBjYXJlIGFib3V0IGEgZ3JvdXAgaWYgaXQgaGFzIG1vcmUgdGhhbiBvbmUgb2JqZWN0LiBJ
ZiBpdCBvbmx5CisgICAgICAgICAgICAvLyBoYXMgb25lIG9iamVjdCwgaXQgaGFzIG5vdGhpbmcg
ZWxzZSB0aGF0IG5lZWRzIHRvIGJlIGtlcHQgYWxpdmUuCisgICAgICAgICAgICBpZiAobmV4dEtl
eUluZGV4IC0gaSA8PSAxKSB7CisgICAgICAgICAgICAgICAgaSA9IG5leHRLZXlJbmRleDsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVmVj
dG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBncm91cDsKKyAgICAgICAgICAgIGdyb3Vw
LnJlc2VydmVDYXBhY2l0eShuZXh0S2V5SW5kZXggLSBpKTsKKyAgICAgICAgICAgIGZvciAoOyBp
IDwgbmV4dEtleUluZGV4OyArK2kpIHsKKyAgICAgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6VmFsdWU+IHdyYXBwZXIgPSBtX2dyb3VwZXJbaV0ud3JhcHBlcigpOworICAgICAgICAgICAg
ICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGdyb3VwLmFw
cGVuZCh3cmFwcGVyKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChWOFN0eWxl
U2hlZXRMaXN0OjppbmZvLmVxdWFscyh0eXBlSW5mbykpIHsKLSAgICAgICAgICAgIGFkZEFsbEl0
ZW1zKHN0b3JlLCBzdGF0aWNfY2FzdDxTdHlsZVNoZWV0TGlzdCo+KG9iamVjdCksIHdyYXBwZXIp
OwotICAgICAgICB9IGVsc2UgaWYgKFY4Q1NTUnVsZUxpc3Q6OmluZm8uZXF1YWxzKHR5cGVJbmZv
KSkgewotICAgICAgICAgICAgYWRkQWxsSXRlbXMoc3RvcmUsIHN0YXRpY19jYXN0PENTU1J1bGVM
aXN0Kj4ob2JqZWN0KSwgd3JhcHBlcik7CisKKyAgICAgICAgICAgIGlmIChncm91cC5zaXplKCkg
PiAxKQorICAgICAgICAgICAgICAgIHY4OjpWODo6QWRkT2JqZWN0R3JvdXAoJmdyb3VwWzBdLCBn
cm91cC5zaXplKCkpOworCisgICAgICAgICAgICBBU1NFUlQoaSA9PSBuZXh0S2V5SW5kZXgpOwog
ICAgICAgICB9CiAgICAgfQogCiBwcml2YXRlOgogICAgIEdyb3VwZXJMaXN0IG1fZ3JvdXBlcjsK
LQotICAgIHRlbXBsYXRlIDxjbGFzcyBDPgotICAgIHZvaWQgYWRkQWxsSXRlbXMoRE9NRGF0YVN0
b3JlKiBzdG9yZSwgQyogY29sbGVjdGlvbiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3Jh
cHBlcikKLSAgICB7Ci0gICAgICAgIHVpbnRwdHJfdCBncm91cElkID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGNvbGxlY3Rpb24pOwotICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3Vw
ZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvbGxlY3Rpb24tPmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgICAgIHdyYXBwZXIgPSBz
dG9yZS0+ZG9tT2JqZWN0TWFwKCkuZ2V0KGNvbGxlY3Rpb24tPml0ZW0oaSkpOwotICAgICAgICAg
ICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBtX2dyb3VwZXIuYXBw
ZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIpKTsKLSAgICAgICAgfQotICAgIH0KIH07
CiAKIC8vIENyZWF0ZSBvYmplY3QgZ3JvdXBzIGZvciBET00gdHJlZSBub2Rlcy4KQEAgLTQyNSwx
MiArMzU5LDEwIEBAIHZvaWQgVjhHQ0NvbnRyb2xsZXI6OmdjUHJvbG9ndWUoKQogICAgIHZpc2l0
QWN0aXZlRE9NT2JqZWN0c0luQ3VycmVudFRocmVhZCgmcHJvbG9ndWVWaXNpdG9yKTsKIAogICAg
IC8vIENyZWF0ZSBvYmplY3QgZ3JvdXBzLgotICAgIE5vZGVHcm91cGVyVmlzaXRvciBub2RlR3Jv
dXBlclZpc2l0b3I7Ci0gICAgdmlzaXRET01Ob2Rlc0luQ3VycmVudFRocmVhZCgmbm9kZUdyb3Vw
ZXJWaXNpdG9yKTsKLSAgICBub2RlR3JvdXBlclZpc2l0b3IuYXBwbHlHcm91cGluZygpOwotCi0g
ICAgRE9NT2JqZWN0R3JvdXBlclZpc2l0b3IgZG9tT2JqZWN0R3JvdXBlclZpc2l0b3I7Ci0gICAg
dmlzaXRET01PYmplY3RzSW5DdXJyZW50VGhyZWFkKCZkb21PYmplY3RHcm91cGVyVmlzaXRvcik7
CisgICAgR3JvdXBlclZpc2l0b3IgZ3JvdXBlclZpc2l0b3I7CisgICAgdmlzaXRET01Ob2Rlc0lu
Q3VycmVudFRocmVhZCgmZ3JvdXBlclZpc2l0b3IpOworICAgIHZpc2l0RE9NT2JqZWN0c0luQ3Vy
cmVudFRocmVhZCgmZ3JvdXBlclZpc2l0b3IpOworICAgIGdyb3VwZXJWaXNpdG9yLmFwcGx5R3Jv
dXBpbmcoKTsKIAogICAgIC8vIENsZWFuIHNpbmdsZSBlbGVtZW50IGNhY2hlIGZvciBzdHJpbmcg
Y29udmVyc2lvbnMuCiAgICAgbGFzdFN0cmluZ0ltcGwgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaAppbmRleCAxZDFjYmZkNDVhMGRkOGQyZjYxMmUz
NmU4MWE2MzcxNTZmMjg1ZTExLi4wZmM5Y2U3OTYzNzVmN2M0N2Y3YzY2ZDU0MDBiZGJiOTgzNDgz
Njc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUlu
Zm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaApA
QCAtNjEsNiArNjEsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gdGhpcyA9PSB0aGF0OwogICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc1N1
YmNsYXNzKGNvbnN0IFdyYXBwZXJUeXBlSW5mbyogdGhhdCkgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGNvbnN0IFdyYXBwZXJUeXBlSW5mbyogY3VycmVu
dCA9IHRoaXM7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnRDbGFzcykKKyAgICAg
ICAgICAgICAgICBpZiAoY3VycmVudCA9PSB0aGF0KQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZ2V0VGVtcGxh
dGUoKSB7IHJldHVybiBnZXRUZW1wbGF0ZUZ1bmN0aW9uKCk7IH0KICAgICAgICAgCkBAIC04MCw2
ICs5MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3QgR2V0VGVtcGxhdGVG
dW5jdGlvbiBnZXRUZW1wbGF0ZUZ1bmN0aW9uOwogICAgICAgICBjb25zdCBEZXJlZk9iamVjdEZ1
bmN0aW9uIGRlcmVmT2JqZWN0RnVuY3Rpb247CiAgICAgICAgIGNvbnN0IFRvQWN0aXZlRE9NT2Jq
ZWN0RnVuY3Rpb24gdG9BY3RpdmVET01PYmplY3RGdW5jdGlvbjsKKyAgICAgICAgY29uc3QgV3Jh
cHBlclR5cGVJbmZvKiBwYXJlbnRDbGFzczsKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUnVsZUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxl
TGlzdC5oCmluZGV4IGEzNTVjNGE0NDMyNDdmNTVkNmRiNGEwMTViMTUzMWNkM2I4MjU0NDkuLjg3
OTk2YTlmMDFmODg2NzM0ODM2Yjg2ZGYyZjQ1ODJhOWFkMmQxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NSdWxlTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NS
dWxlTGlzdC5oCkBAIC01Myw2ICs1MywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVSdWxl
KHVuc2lnbmVkIGluZGV4KTsKICAgICB2b2lkIGFwcGVuZChDU1NSdWxlKik7CiAKKyAgICBTdHls
ZUxpc3QqIHN0eWxlTGlzdCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9saXN0LmdldCgpOwor
ICAgIH0KKwogcHJpdmF0ZToKICAgICBDU1NSdWxlTGlzdCgpOwogICAgIENTU1J1bGVMaXN0KFN0
eWxlTGlzdCosIGJvb2wgb21pdENoYXJzZXRSdWxlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVTaGVldExpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0
TGlzdC5oCmluZGV4IGE0ODY1MTE2ODc1NmVjMGE3N2VjMTFkYjQ1OWFhM2Y3MzY5MzlhZDAuLmEw
MTk2OTE5ZDhkM2NlZjVkNmViMzU2MDEyZTk5ZWVlMjBjZTY4ODcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVNoZWV0TGlzdC5oCkBAIC01MCw2ICs1MCwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBtX3NoZWV0cy5zd2FwKHNoZWV0cyk7CiAgICAgfQorCisgICAgRG9jdW1lbnQqIGRvY3VtZW50
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RvYzsKKyAgICB9CiAgICAgCiBwcml2YXRlOgog
ICAgIFN0eWxlU2hlZXRMaXN0KERvY3VtZW50Kik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85166</attachid>
            <date>2011-03-09 05:57:00 -0800</date>
            <delta_ts>2011-03-11 11:21:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55399-20110309165658.patch</filename>
            <type>text/plain</type>
            <size>24712</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk4NjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkNzZjNjljMWU1YzAwNjZh
NTZmYmViNDNiMDg1ODA3N2QyMzc2MTVhLi41MDAwNDVjMTg0OTQzZjBkMzdhODVhNzZkNmU1YTNj
Nzc4MTZjNGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMDMtMDQgIEFudG9u
IE11aGluICA8YW50b25tQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbdjhdIFJld29yayBvYmplY3QgZ3JvdXAgYnVpbGRpbmcu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTM5OQor
CisgICAgICAgIEluc3RlYWQgb2YgZ29pbmcgdG9wLWRvd24gKGZyb20gb3duZXIgdG8gb3duZWQg
ZWxlbWVudHMpLCBnbyB1cC0tLWZyb20gb2JqZWN0cworICAgICAgICB0byB0aGVpciBncm91cCBp
ZHMuICBUaGF0IGZpdHMgYmV0dGVyIHRvIHY4J3Mgb2JqZWN0IGdyb3VwaW5nIG1vZGVsIGFuZCBn
dWFyYW50ZWVzCisgICAgICAgIHRoYXQgZWFjaCB3cmFwcGVyIGJlbG9uZ3MgdG8gdGhlIHNpbmds
ZSBncm91cC4KKworICAgICAgICBBbGFzLCB0aGlzIGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBmb3Ig
b25lIGtpbmQgb2Ygb2JqZWN0cy0tLUNTU1Byb3BlcnRpZXMuCisKKyAgICAgICAgUGFydCBvZiBj
b3JlIEdDIGFsZ29yaXRobSBhbmQgdGVzdGVkIGV4dGVuc2l2ZWx5IGJ5IGV4aXNpdGluZyBsYXlv
dXQgdGVzdHMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlR3JvdXBJZCk6CisgICAgICAgIChXZWJDb3JlOjpjYWxj
dWxhdGVSb290U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpHcm91cGVyVmlzaXRvcjo6
dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdyb3VwZXJWaXNpdG9yOjphcHBs
eUdyb3VwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3Vl
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaDoKKyAgICAgICAgKFdl
YkNvcmU6OldyYXBwZXJUeXBlSW5mbzo6aXNTdWJjbGFzcyk6CisgICAgICAgICogY3NzL0NTU1J1
bGVMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NSdWxlTGlzdDo6c3R5bGVMaXN0KToKKyAg
ICAgICAgKiBjc3MvU3R5bGVTaGVldExpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hl
ZXRMaXN0Ojpkb2N1bWVudCk6CisKIDIwMTEtMDItMjggIFJlbmF0YSBIb2RvdmFuICA8cmVuaUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4
IGFiZDgxNzI3YmJmZTFiNDgyYjY2ZmFlOWU3YzE5MTJmYjJjNmVmOTUuLjU2MmUyNzViMTJkNDkw
YzNiMzAzZDJmMjMwNWU5YTM5YzMzYjY3YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0xNzEyLDggKzE3MTIsMjAgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgIG15ICR0b0FjdGl2ZSA9IElzQWN0aXZl
RG9tVHlwZSgkaW50ZXJmYWNlTmFtZSkgPyAiJHtjbGFzc05hbWV9Ojp0b0FjdGl2ZURPTU9iamVj
dCIgOiAiMCI7CiAKKyAgICAjIGZpbmQgdGhlIHN1cGVyIGRlc2NyaXB0b3IKKyAgICBteSAkcGFy
ZW50Q2xhc3MgPSAiIjsKKyAgICBteSAkcGFyZW50Q2xhc3NUZW1wbGF0ZSA9ICIiOworICAgIGZv
cmVhY2ggKEB7JGRhdGFOb2RlLT5wYXJlbnRzfSkgeworICAgICAgICBteSAkcGFyZW50ID0gJGNv
ZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRfKTsKKyAgICAgICAgaWYgKCRwYXJlbnQgZXEgIkV2
ZW50VGFyZ2V0IikgeyBuZXh0OyB9CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4JHtwYXJlbnR9
LmgifSA9IDE7CisgICAgICAgICRwYXJlbnRDbGFzcyA9ICJWOCIgLiAkcGFyZW50OworICAgICAg
ICAkcGFyZW50Q2xhc3NUZW1wbGF0ZSA9ICRwYXJlbnRDbGFzcyAuICI6OkdldFRlbXBsYXRlKCki
OworICAgICAgICBsYXN0OworICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAibmFt
ZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiV3Jh
cHBlclR5cGVJbmZvICR7Y2xhc3NOYW1lfTo6aW5mbyA9IHsgJHtjbGFzc05hbWV9OjpHZXRUZW1w
bGF0ZSwgJHtjbGFzc05hbWV9OjpkZXJlZk9iamVjdCwgJHt0b0FjdGl2ZX0gfTtcblxuIik7ICAg
CisgICAgbXkgJHBhcmVudENsYXNzSW5mbyA9ICRwYXJlbnRDbGFzcyA/ICImJHtwYXJlbnRDbGFz
c306OmluZm8iIDogIjAiOworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJXcmFwcGVyVHlw
ZUluZm8gJHtjbGFzc05hbWV9OjppbmZvID0geyAke2NsYXNzTmFtZX06OkdldFRlbXBsYXRlLCAk
e2NsYXNzTmFtZX06OmRlcmVmT2JqZWN0LCAke3RvQWN0aXZlfSwgJHtwYXJlbnRDbGFzc0luZm99
IH07XG5cbiIpOyAgIAogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJuYW1lc3BhY2UgJHtp
bnRlcmZhY2VOYW1lfUludGVybmFsIHtcblxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgInRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIFY4X1VTRShUKSB7IH1cblxuIik7CiAKQEAg
LTE5MzcsMTUgKzE5NDksNiBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdFRlbXBs
YXRlPiBDb25maWd1cmVTaGFkb3dPYmplY3RUZW1wbGF0ZSh2ODo6UGVycwogRU5ECiAgICAgfQog
Ci0gICAgIyBmaW5kIHRoZSBzdXBlciBkZXNjcmlwdG9yCi0gICAgbXkgJHBhcmVudENsYXNzVGVt
cGxhdGUgPSAiIjsKLSAgICBmb3JlYWNoIChAeyRkYXRhTm9kZS0+cGFyZW50c30pIHsKLSAgICAg
ICAgbXkgJHBhcmVudCA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkXyk7Ci0gICAgICAg
IGlmICgkcGFyZW50IGVxICJFdmVudFRhcmdldCIpIHsgbmV4dDsgfQotICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJWOCR7cGFyZW50fS5oIn0gPSAxOwotICAgICAgICAkcGFyZW50Q2xhc3NUZW1wbGF0
ZSA9ICJWOCIgLiAkcGFyZW50IC4gIjo6R2V0VGVtcGxhdGUoKSI7Ci0gICAgICAgIGxhc3Q7Ci0g
ICAgfQogICAgIGlmICghJHBhcmVudENsYXNzVGVtcGxhdGUpIHsKICAgICAgICAgJHBhcmVudENs
YXNzVGVtcGxhdGUgPSAidjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCkiOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKaW5kZXggMjY3ZjFmMDliYmM4ZWU4ZDNiMjYyMjZl
MGY4MDc3ZGEzZmE5ZDU4OC4uNTg1Mjk3YzI0ZWYwZDc1NjBlOTgxMGQyNmYxMTEwYTAyOWExMjY1
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1XcmFwcGVyVHlwZUluZm8gVjhUZXN0SW50ZXJmYWNlOjppbmZvID0geyBW
OFRlc3RJbnRlcmZhY2U6OkdldFRlbXBsYXRlLCBWOFRlc3RJbnRlcmZhY2U6OmRlcmVmT2JqZWN0
LCAwIH07CitXcmFwcGVyVHlwZUluZm8gVjhUZXN0SW50ZXJmYWNlOjppbmZvID0geyBWOFRlc3RJ
bnRlcmZhY2U6OkdldFRlbXBsYXRlLCBWOFRlc3RJbnRlcmZhY2U6OmRlcmVmT2JqZWN0LCAwLCAw
IH07CiAKIG5hbWVzcGFjZSBUZXN0SW50ZXJmYWNlSW50ZXJuYWwgewogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5kZXggYWI5ZTZkYjI4ODEzNmZhMjY5
MDkwNmIwOTY5NjQ0ZjBmOTNkODM4ZS4uMDZjNzFjMGU2NzhjMDJhYmIzNTU3YjAyNjU5ZjlmZjU2
Y2MxZmFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cApAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdyYXBwZXJUeXBl
SW5mbyBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjppbmZvID0geyBWOFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1wbGF0ZSwgVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
cjo6ZGVyZWZPYmplY3QsIDAgfTsKK1dyYXBwZXJUeXBlSW5mbyBWOFRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyOjppbmZvID0geyBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1w
bGF0ZSwgVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6ZGVyZWZPYmplY3QsIDAsIDAgfTsK
IAogbmFtZXNwYWNlIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVySW50ZXJuYWwgewogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2Jq
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmou
Y3BwCmluZGV4IDQyOTg3NTY4ZDY3ZDNiNWUwOWQ5MzM2MGMzNzk1YzdhNWIwNzU4YjEuLjQ5YjVi
YmU1Mzc2ZmYxYmEzNmUzZWUxY2I4Y2VjNDQxZDYyNmY2NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC00Niw3
ICs0Niw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV3JhcHBlclR5cGVJbmZvIFY4VGVz
dE9iajo6aW5mbyA9IHsgVjhUZXN0T2JqOjpHZXRUZW1wbGF0ZSwgVjhUZXN0T2JqOjpkZXJlZk9i
amVjdCwgMCB9OworV3JhcHBlclR5cGVJbmZvIFY4VGVzdE9iajo6aW5mbyA9IHsgVjhUZXN0T2Jq
OjpHZXRUZW1wbGF0ZSwgVjhUZXN0T2JqOjpkZXJlZk9iamVjdCwgMCwgMCB9OwogCiBuYW1lc3Bh
Y2UgVGVzdE9iakludGVybmFsIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhH
Q0NvbnRyb2xsZXIuY3BwCmluZGV4IGEzNGRjMjQyNWViZTdmNzkzNWJhMDkxOGIwYzhkMmRjNzgw
Nzk4YzIuLjk0YzVjNGE0MmZkOTY2ZDdiOWZmZjU4MmMyZWNjNDEwMjMyYzNlNTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKQEAgLTM0LDI3ICsz
NCwxOCBAQAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkF0dHIuaCIK
ICNpbmNsdWRlICJET01EYXRhU3RvcmUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1CcmlkZ2UuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhDU1NDaGFyc2V0UnVsZS5oIgotI2luY2x1ZGUgIlY4Q1NT
Rm9udEZhY2VSdWxlLmgiCi0jaW5jbHVkZSAiVjhDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAi
VjhDU1NNZWRpYVJ1bGUuaCIKKyNpbmNsdWRlICJWOENTU1J1bGUuaCIKICNpbmNsdWRlICJWOENT
U1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiVjhDU1NTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVk
ZSAiVjhDU1NTdHlsZVJ1bGUuaCIKLSNpbmNsdWRlICJWOENTU1N0eWxlU2hlZXQuaCIKLSNpbmNs
dWRlICJWOERPTU1hcC5oIgotI2luY2x1ZGUgIlY4SFRNTExpbmtFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiVjhIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhET01JbXBsZW1lbnRhdGlvbi5o
IgogI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnQuaCIKLSNpbmNsdWRlICJWOFByb2Nlc3NpbmdJbnN0
cnVjdGlvbi5oIgotI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJWOFN0eWxlU2hlZXQu
aCIKICNpbmNsdWRlICJWOFN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiV3JhcHBlclR5cGVJ
bmZvLmgiCiAKQEAgLTE5OCwyMTUgKzE4OSwxNTcgQEAgYm9vbCBvcGVyYXRvcjwoY29uc3QgR3Jv
dXBlckl0ZW0mIGEsIGNvbnN0IEdyb3VwZXJJdGVtJiBiKQogCiB0eXBlZGVmIFZlY3RvcjxHcm91
cGVySXRlbT4gR3JvdXBlckxpc3Q7CiAKLXZvaWQgbWFrZVY4T2JqZWN0R3JvdXBzKEdyb3VwZXJM
aXN0JiBncm91cGVyKQorLy8gSWYgdGhlIG5vZGUgaXMgaW4gZG9jdW1lbnQsIHB1dCBpdCBpbiB0
aGUgb3duZXJEb2N1bWVudCdzIG9iamVjdCBncm91cC4KKy8vCisvLyBJZiBhbiBpbWFnZSBlbGVt
ZW50IHdhcyBjcmVhdGVkIGJ5IEphdmFTY3JpcHQgIm5ldyBJbWFnZSIsCisvLyBpdCBpcyBub3Qg
aW4gYSBkb2N1bWVudC4gSG93ZXZlciwgaWYgdGhlIGxvYWQgZXZlbnQgaGFzIG5vdAorLy8gYmVl
biBmaXJlZCAoc3RpbGwgb25sb2FkaW5nKSwgaXQgaXMgdHJlYXRlZCBhcyBpbiB0aGUgZG9jdW1l
bnQuCisvLworLy8gT3RoZXJ3aXNlLCB0aGUgbm9kZSBpcyBwdXQgaW4gYW4gb2JqZWN0IGdyb3Vw
IGlkZW50aWZpZWQgYnkgdGhlIHJvb3QKKy8vIGVsZW1lbnQgb2YgdGhlIHRyZWUgdG8gd2hpY2gg
aXQgYmVsb25ncy4KK3N0YXRpYyB1aW50cHRyX3QgY2FsY3VsYXRlR3JvdXBJZChOb2RlKiBub2Rl
KQogewotICAgIC8vIEdyb3VwIGJ5IHNvcnRpbmcgYnkgdGhlIGdyb3VwIGlkLgotICAgIHN0ZDo6
c29ydChncm91cGVyLmJlZ2luKCksIGdyb3VwZXIuZW5kKCkpOwotCi0gICAgLy8gRklYTUUgU2hv
dWxkIHByb2JhYmx5IHdvcmsgaW4gaXRlcmF0b3JzIGhlcmUsIGJ1dCBpbmRleGVzIHdlcmUgZWFz
aWVyIGZvciBteSBzaW1wbGUgbWluZC4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdyb3Vw
ZXIuc2l6ZSgpOyApIHsKLSAgICAgICAgLy8gU2VlayB0byB0aGUgbmV4dCBrZXkgKG9yIHRoZSBl
bmQgb2YgdGhlIGxpc3QpLgotICAgICAgICBzaXplX3QgbmV4dEtleUluZGV4ID0gZ3JvdXBlci5z
aXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSBpOyBqIDwgZ3JvdXBlci5zaXplKCk7ICsr
aikgewotICAgICAgICAgICAgaWYgKGdyb3VwZXJbaV0uZ3JvdXBJZCgpICE9IGdyb3VwZXJbal0u
Z3JvdXBJZCgpKSB7Ci0gICAgICAgICAgICAgICAgbmV4dEtleUluZGV4ID0gajsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VS
VChuZXh0S2V5SW5kZXggPiBpKTsKKyAgICBpZiAobm9kZS0+aW5Eb2N1bWVudCgpIHx8IChub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nVGFnKSAmJiAhc3RhdGljX2Nhc3Q8SFRNTEltYWdl
RWxlbWVudCo+KG5vZGUpLT5oYXZlRmlyZWRMb2FkRXZlbnQoKSkpCisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+ZG9jdW1lbnQoKSk7CisKKyAgICBOb2Rl
KiByb290ID0gbm9kZTsKKyAgICBpZiAobm9kZS0+aXNBdHRyaWJ1dGVOb2RlKCkpIHsKKyAgICAg
ICAgcm9vdCA9IHN0YXRpY19jYXN0PEF0dHIqPihub2RlKS0+b3duZXJFbGVtZW50KCk7CisgICAg
ICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUgaGFzIG5vIGVsZW1lbnQsIG5vIG5lZWQgdG8gcHV0IGl0
IGluIHRoZSBncm91cCwKKyAgICAgICAgLy8gYmVjYXVzZSBpdCdsbCBhbHdheXMgYmUgYSBncm91
cCBvZiAxLgorICAgICAgICBpZiAoIXJvb3QpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9
IGVsc2UgeworICAgICAgICB3aGlsZSAoTm9kZSogcGFyZW50ID0gcm9vdC0+cGFyZW50Tm9kZSgp
KQorICAgICAgICAgICAgcm9vdCA9IHBhcmVudDsKKyAgICB9CiAKLSAgICAgICAgLy8gV2Ugb25s
eSBjYXJlIGFib3V0IGEgZ3JvdXAgaWYgaXQgaGFzIG1vcmUgdGhhbiBvbmUgb2JqZWN0LiBJZiBp
dCBvbmx5Ci0gICAgICAgIC8vIGhhcyBvbmUgb2JqZWN0LCBpdCBoYXMgbm90aGluZyBlbHNlIHRo
YXQgbmVlZHMgdG8gYmUga2VwdCBhbGl2ZS4KLSAgICAgICAgaWYgKG5leHRLZXlJbmRleCAtIGkg
PD0gMSkgewotICAgICAgICAgICAgaSA9IG5leHRLZXlJbmRleDsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihy
b290KTsKK30KIAotICAgICAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IGdy
b3VwOwotICAgICAgICBncm91cC5yZXNlcnZlQ2FwYWNpdHkobmV4dEtleUluZGV4IC0gaSk7Ci0g
ICAgICAgIGZvciAoOyBpIDwgbmV4dEtleUluZGV4OyArK2kpIHsKLSAgICAgICAgICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpWYWx1ZT4gd3JhcHBlciA9IGdyb3VwZXJbaV0ud3JhcHBlcigpOwotICAg
ICAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBncm91cC5h
cHBlbmQod3JhcHBlcik7Ci0gICAgICAgIH0KK3N0YXRpYyBTdHlsZUJhc2UqIGNhbGN1bGF0ZVJv
b3RTdHlsZVNoZWV0KFN0eWxlQmFzZSogc3R5bGVCYXNlKQoreworICAgIFN0eWxlQmFzZSogcm9v
dCA9IHN0eWxlQmFzZTsKKyAgICB3aGlsZSAoU3R5bGVCYXNlKiBwYXJlbnQgPSByb290LT5wYXJl
bnQoKSkgeworICAgICAgICAvLyBXZSBhc3N1bWUgdGhhdCBubyBzdHlsZSBzaGVldHMgaW4gYmV0
d2VlbiBjYW4gaGF2ZSBvd25lciBub2Rlcy4KKyAgICAgICAgQVNTRVJUKCFyb290LT5pc1N0eWxl
U2hlZXQoKSB8fCAhc3RhdGljX2Nhc3Q8U3R5bGVTaGVldCo+KHJvb3QpLT5vd25lck5vZGUoKSk7
CisgICAgICAgIHJvb3QgPSBwYXJlbnQ7CisgICAgfQorICAgIHJldHVybiByb290OworfQogCi0g
ICAgICAgIGlmIChncm91cC5zaXplKCkgPiAxKQotICAgICAgICAgICAgdjg6OlY4OjpBZGRPYmpl
Y3RHcm91cCgmZ3JvdXBbMF0sIGdyb3VwLnNpemUoKSk7CitzdGF0aWMgdWludHB0cl90IGNhbGN1
bGF0ZUdyb3VwSWQoU3R5bGVCYXNlKiBzdHlsZUJhc2UpCit7CisgICAgU3R5bGVCYXNlKiByb290
ID0gY2FsY3VsYXRlUm9vdFN0eWxlU2hlZXQoc3R5bGVCYXNlKTsKKyAgICBBU1NFUlQocm9vdCk7
CisgICAgaWYgKHJvb3QtPmlzU3R5bGVTaGVldCgpKQorICAgICAgICBpZiAoTm9kZSogb3duZXJO
b2RlID0gc3RhdGljX2Nhc3Q8U3R5bGVTaGVldCo+KHJvb3QpLT5vd25lck5vZGUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBjYWxjdWxhdGVHcm91cElkKG93bmVyTm9kZSk7CiAKLSAgICAgICAgQVNT
RVJUKGkgPT0gbmV4dEtleUluZGV4KTsKLSAgICB9CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Pihyb290KTsKIH0KIAotY2xhc3MgTm9kZUdyb3VwZXJWaXNpdG9yIDogcHVi
bGljIERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3IgeworY2xhc3MgR3JvdXBlclZpc2l0b3Ig
OiBwdWJsaWMgRE9NV3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciwgcHVibGljIERPTVdyYXBwZXJN
YXA8dm9pZD46OlZpc2l0b3IgewogcHVibGljOgotICAgIE5vZGVHcm91cGVyVmlzaXRvcigpCi0g
ICAgewotICAgICAgICAvLyBGSVhNRTogZ3JvdXBlcl8ucmVzZXJ2ZUNhcGFjaXR5KG5vZGVfbWFw
LnNpemUoKSk7ICA/Ci0gICAgfQotCiAgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0
b3JlKiBzdG9yZSwgTm9kZSogbm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBl
cikKICAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBub2RlIGlzIGluIGRvY3VtZW50LCBwdXQgaXQg
aW4gdGhlIG93bmVyRG9jdW1lbnQncyBvYmplY3QgZ3JvdXAuCi0gICAgICAgIC8vCi0gICAgICAg
IC8vIElmIGFuIGltYWdlIGVsZW1lbnQgd2FzIGNyZWF0ZWQgYnkgSmF2YVNjcmlwdCAibmV3IElt
YWdlIiwKLSAgICAgICAgLy8gaXQgaXMgbm90IGluIGEgZG9jdW1lbnQuIEhvd2V2ZXIsIGlmIHRo
ZSBsb2FkIGV2ZW50IGhhcyBub3QKLSAgICAgICAgLy8gYmVlbiBmaXJlZCAoc3RpbGwgb25sb2Fk
aW5nKSwgaXQgaXMgdHJlYXRlZCBhcyBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgIC8vCi0gICAg
ICAgIC8vIE90aGVyd2lzZSwgdGhlIG5vZGUgaXMgcHV0IGluIGFuIG9iamVjdCBncm91cCBpZGVu
dGlmaWVkIGJ5IHRoZSByb290Ci0gICAgICAgIC8vIGVsZW1lbnQgb2YgdGhlIHRyZWUgdG8gd2hp
Y2ggaXQgYmVsb25ncy4KLSAgICAgICAgdWludHB0cl90IGdyb3VwSWQ7Ci0gICAgICAgIGlmIChu
b2RlLT5pbkRvY3VtZW50KCkgfHwgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcp
ICYmICFzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4obm9kZSktPmhhdmVGaXJlZExvYWRF
dmVudCgpKSkKLSAgICAgICAgICAgIGdyb3VwSWQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4obm9kZS0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgTm9kZSog
cm9vdCA9IG5vZGU7Ci0gICAgICAgICAgICBpZiAobm9kZS0+aXNBdHRyaWJ1dGVOb2RlKCkpIHsK
LSAgICAgICAgICAgICAgICByb290ID0gc3RhdGljX2Nhc3Q8QXR0cio+KG5vZGUpLT5vd25lckVs
ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGhhcyBubyBlbGVt
ZW50LCBubyBuZWVkIHRvIHB1dCBpdCBpbiB0aGUgZ3JvdXAsCi0gICAgICAgICAgICAgICAgLy8g
YmVjYXVzZSBpdCdsbCBhbHdheXMgYmUgYSBncm91cCBvZiAxLgotICAgICAgICAgICAgICAgIGlm
ICghcm9vdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICB3aGlsZSAocm9vdC0+cGFyZW50Tm9kZSgpKQotICAgICAgICAg
ICAgICAgICAgICByb290ID0gcm9vdC0+cGFyZW50Tm9kZSgpOwotCi0gICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIG5vZGUgaXMgYWxvbmUgaW4gaXRzIERPTSB0cmVlIChkb2Vzbid0IGhhdmUgYSBw
YXJlbnQgb3IgYW55Ci0gICAgICAgICAgICAgICAgLy8gY2hpbGRyZW4pIHRoZW4gdGhlIGdyb3Vw
IHdpbGwgYmUgZmlsdGVyZWQgb3V0IGxhdGVyIGFueXdheS4KLSAgICAgICAgICAgICAgICBpZiAo
cm9vdCA9PSBub2RlICYmICFub2RlLT5oYXNDaGlsZE5vZGVzKCkgJiYgIW5vZGUtPmhhc0F0dHJp
YnV0ZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihyb290KTsKLSAg
ICAgICAgfQorICAgICAgICB1aW50cHRyX3QgZ3JvdXBJZCA9IGNhbGN1bGF0ZUdyb3VwSWQobm9k
ZSk7CisgICAgICAgIGlmICghZ3JvdXBJZCkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
bV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CisgICAgfQog
Ci0gICAgICAgIC8vIElmIHRoZSBub2RlIGlzIHN0eWxlZCBhbmQgdGhlcmUgaXMgYSB3cmFwcGVy
IGZvciB0aGUgaW5saW5lCi0gICAgICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9uLCB3ZSBuZWVkIHRv
IGtlZXAgdGhhdCBzdHlsZSBkZWNsYXJhdGlvbgotICAgICAgICAvLyB3cmFwcGVyIGFsaXZlIGFz
IHdlbGwsIHNvIHdlIGFkZCBpdCB0byB0aGUgb2JqZWN0IGdyb3VwLgotICAgICAgICBpZiAobm9k
ZS0+aXNTdHlsZWRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIFN0eWxlZEVsZW1lbnQqIGVsZW1l
bnQgPSByZWludGVycHJldF9jYXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgICAg
IGFkZERPTU9iamVjdFRvR3JvdXAoc3RvcmUsIGdyb3VwSWQsIGVsZW1lbnQtPmlubGluZVN0eWxl
RGVjbCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChub2RlLT5pc0RvY3VtZW50Tm9kZSgp
KSB7Ci0gICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSByZWludGVycHJldF9jYXN0PERv
Y3VtZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICBhZGRET01PYmplY3RUb0dyb3VwKHN0b3JlLCBn
cm91cElkLCBkb2N1bWVudC0+c3R5bGVTaGVldHMoKSk7Ci0gICAgICAgICAgICBhZGRET01PYmpl
Y3RUb0dyb3VwKHN0b3JlLCBncm91cElkLCBkb2N1bWVudC0+aW1wbGVtZW50YXRpb24oKSk7Ci0g
ICAgICAgIH0KLQorICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUs
IHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKKyAgICB7
CiAgICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZUluZm8gPSBWOERPTVdyYXBwZXI6OmRvbVdy
YXBwZXJUeXBlKHdyYXBwZXIpOwogCi0gICAgICAgIGlmIChWOEhUTUxMaW5rRWxlbWVudDo6aW5m
by5lcXVhbHModHlwZUluZm8pKSB7Ci0gICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQqIGh0bWxM
aW5rRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudCo+KG5vZGUpOwotICAgICAg
ICAgICAgYWRkRE9NT2JqZWN0VG9Hcm91cChzdG9yZSwgZ3JvdXBJZCwgaHRtbExpbmtFbGVtZW50
LT5zaGVldCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAodHlwZUluZm8tPmlzU3ViY2xhc3Mo
JlY4U3R5bGVTaGVldExpc3Q6OmluZm8pKSB7CisgICAgICAgICAgICBTdHlsZVNoZWV0TGlzdCog
c3R5bGVTaGVldExpc3QgPSBzdGF0aWNfY2FzdDxTdHlsZVNoZWV0TGlzdCo+KG9iamVjdCk7Cisg
ICAgICAgICAgICB1aW50cHRyX3QgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihzdHlsZVNoZWV0TGlzdCk7CisgICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0g
c3R5bGVTaGVldExpc3QtPmRvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgZ3JvdXBJZCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihkb2N1bWVudCk7CisgICAgICAgICAgICBtX2dyb3Vw
ZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIpKTsKIAotICAgICAgICBpZiAo
VjhIVE1MU3R5bGVFbGVtZW50OjppbmZvLmVxdWFscyh0eXBlSW5mbykpIHsKLSAgICAgICAgICAg
IEhUTUxTdHlsZUVsZW1lbnQqIGh0bWxTdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5
bGVFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICBhZGRET01PYmplY3RUb0dyb3VwKHN0b3Jl
LCBncm91cElkLCBodG1sU3R5bGVFbGVtZW50LT5zaGVldCgpKTsKLSAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKHR5cGVJbmZvLT5pc1N1YmNsYXNzKCZWOERPTUltcGxlbWVudGF0aW9uOjpp
bmZvKSkgeworICAgICAgICAgICAgRE9NSW1wbGVtZW50YXRpb24qIGRvbUltcGxlbWVudGF0aW9u
ID0gc3RhdGljX2Nhc3Q8RE9NSW1wbGVtZW50YXRpb24qPihvYmplY3QpOworICAgICAgICAgICAg
dWludHB0cl90IGdyb3VwSWQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZG9tSW1wbGVt
ZW50YXRpb24pOworICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGRvbUltcGxl
bWVudGF0aW9uLT5vd25lckRvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgZ3JvdXBJZCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihkb2N1bWVudCk7CisgICAgICAgICAgICBtX2dyb3Vw
ZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIpKTsKIAotICAgICAgICBpZiAo
VjhQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmluZm8uZXF1YWxzKHR5cGVJbmZvKSkgewotICAgICAg
ICAgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSBzdGF0
aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPihub2RlKTsKLSAgICAgICAgICAgIGFkZERP
TU9iamVjdFRvR3JvdXAoc3RvcmUsIGdyb3VwSWQsIHByb2Nlc3NpbmdJbnN0cnVjdGlvbi0+c2hl
ZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodHlwZUluZm8tPmlz
U3ViY2xhc3MoJlY4U3R5bGVTaGVldDo6aW5mbykgfHwgdHlwZUluZm8tPmlzU3ViY2xhc3MoJlY4
Q1NTUnVsZTo6aW5mbykpIHsKKyAgICAgICAgICAgIG1fZ3JvdXBlci5hcHBlbmQoR3JvdXBlckl0
ZW0oY2FsY3VsYXRlR3JvdXBJZChzdGF0aWNfY2FzdDxTdHlsZUJhc2UqPihvYmplY3QpKSwgd3Jh
cHBlcikpOwogCi0gICAgdm9pZCBhcHBseUdyb3VwaW5nKCkKLSAgICB7Ci0gICAgICAgIG1ha2VW
OE9iamVjdEdyb3VwcyhtX2dyb3VwZXIpOwotICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0eXBl
SW5mby0+aXNTdWJjbGFzcygmVjhDU1NTdHlsZURlY2xhcmF0aW9uOjppbmZvKSkgeworICAgICAg
ICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogY3NzU3R5bGVEZWNsYXJhdGlvbiA9IHN0YXRpY19j
YXN0PENTU1N0eWxlRGVjbGFyYXRpb24qPihvYmplY3QpOwogCi1wcml2YXRlOgotICAgIEdyb3Vw
ZXJMaXN0IG1fZ3JvdXBlcjsKLQotICAgIHZvaWQgYWRkRE9NT2JqZWN0VG9Hcm91cChET01EYXRh
U3RvcmUqIHN0b3JlLCB1aW50cHRyX3QgZ3JvdXBJZCwgdm9pZCogb2JqZWN0KQotICAgIHsKLSAg
ICAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBzdG9yZS0+ZG9tT2JqZWN0TWFwKCkuZ2V0KG9i
amVjdCk7Ci0gICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgICAgICB1aW50
cHRyX3QgZ3JvdXBJZCA9IGNhbGN1bGF0ZUdyb3VwSWQoY3NzU3R5bGVEZWNsYXJhdGlvbik7CiAg
ICAgICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIp
KTsKLSAgICB9Ci19OwotCi1jbGFzcyBET01PYmplY3RHcm91cGVyVmlzaXRvciA6IHB1YmxpYyBE
T01XcmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9yIHsKLXB1YmxpYzoKLSAgICBET01PYmplY3RHcm91
cGVyVmlzaXRvcigpCi0gICAgewotICAgIH0KIAotICAgIHZvaWQgc3RhcnRNYXAoKQotICAgIHsK
LSAgICAgICAgbV9ncm91cGVyLnNocmluaygwKTsKLSAgICB9CisgICAgICAgICAgICAvLyBDU1NQ
cm9wZXJ0eSAodHlwZSBvZiBpdGVtcyBpbiBtdXRhYmxlIHN0eWxlIGRlY2xhcmF0aW9uKSBkb2Vz
bid0IGhhdmUgYSBwb2ludGVyIHRvCisgICAgICAgICAgICAvLyBpdHMgcGFyZW50LiBUaGVyZWZv
cmUgd2UgY2Fubm90IHRyZWF0IHRoZW0gbGlrZSBvdGhlciBvYmplY3RzLS0tdHJhdmVyc2UgdXAg
dG8gdGhlCisgICAgICAgICAgICAvLyByb290IHdoZW4gdmlzaXRpbmcgYSB3cmFwcGVyLS0tYW5k
IG5lZWQgdG8gcHV0IHRoZW0gaW50byB0aGUgZ3JvdXAgZGlyZWN0bHkuCisgICAgICAgICAgICBp
ZiAoY3NzU3R5bGVEZWNsYXJhdGlvbi0+aXNNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpKSB7Cisg
ICAgICAgICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGNzc011dGFibGVTdHls
ZURlY2xhcmF0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPihj
c3NTdHlsZURlY2xhcmF0aW9uKTsKKyAgICAgICAgICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3NzTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24t
PmVuZCgpOworICAgICAgICAgICAgICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3NzTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24tPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgICAgICB3cmFwcGVyID0gc3RvcmUt
PmRvbU9iamVjdE1hcCgpLmdldChpdC0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyb3VwZXIu
YXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CiAKLSAgICB2b2lkIGVuZE1hcCgpCi0gICAgewotICAgICAgICBtYWtl
VjhPYmplY3RHcm91cHMobV9ncm91cGVyKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlSW5mby0+
aXNTdWJjbGFzcygmVjhDU1NSdWxlTGlzdDo6aW5mbykpIHsKKyAgICAgICAgICAgIENTU1J1bGVM
aXN0KiBjc3NSdWxlTGlzdCA9IHN0YXRpY19jYXN0PENTU1J1bGVMaXN0Kj4ob2JqZWN0KTsKKyAg
ICAgICAgICAgIHVpbnRwdHJfdCBncm91cElkID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGNzc1J1bGVMaXN0KTsKKyAgICAgICAgICAgIFN0eWxlTGlzdCogc3R5bGVMaXN0ID0gY3NzUnVs
ZUxpc3QtPnN0eWxlTGlzdCgpOworICAgICAgICAgICAgaWYgKHN0eWxlTGlzdCkKKyAgICAgICAg
ICAgICAgICBncm91cElkID0gY2FsY3VsYXRlR3JvdXBJZChzdHlsZUxpc3QpOworICAgICAgICAg
ICAgbV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CisgICAg
ICAgIH0KICAgICB9CiAKLSAgICB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqIHN0
b3JlLCB2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCisg
ICAgdm9pZCBhcHBseUdyb3VwaW5nKCkKICAgICB7Ci0gICAgICAgIFdyYXBwZXJUeXBlSW5mbyog
dHlwZUluZm8gPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHdyYXBwZXIpOwotICAgICAg
ICAvLyBGSVhNRTogZXh0ZW5kIFdyYXBwZXJUeXBlSW5mbyB3aXRoIGlzU3R5bGUgdG8gc2ltcGxp
ZnkgdGhlIGNoZWNrIGJlbG93IG9yIGNvbnNpZGVyCi0gICAgICAgIC8vIGFkZGluZyBhIHZpcnR1
YWwgbWV0aG9kIHRvIFdyYXBwZXJUeXBlSW5mbyB3aGljaCB3b3VsZCBrbm93IGhvdyB0byBncm91
cCBvYmplY3RzLgotICAgICAgICAvLyBGSVhNRTogY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIFN0
eWxlQmFzZSB3cmFwcGVycyB3ZSBzaG91bGQgY2FyZSBvZi4KLSAgICAgICAgaWYgKFY4Q1NTU3R5
bGVTaGVldDo6aW5mby5lcXVhbHModHlwZUluZm8pCi0gICAgICAgICAgICB8fCBWOENTU1N0eWxl
RGVjbGFyYXRpb246OmluZm8uZXF1YWxzKHR5cGVJbmZvKQotICAgICAgICAgICAgfHwgVjhDU1ND
aGFyc2V0UnVsZTo6aW5mby5lcXVhbHModHlwZUluZm8pCi0gICAgICAgICAgICB8fCBWOENTU0Zv
bnRGYWNlUnVsZTo6aW5mby5lcXVhbHModHlwZUluZm8pCi0gICAgICAgICAgICB8fCBWOENTU1N0
eWxlUnVsZTo6aW5mby5lcXVhbHModHlwZUluZm8pCi0gICAgICAgICAgICB8fCBWOENTU0ltcG9y
dFJ1bGU6OmluZm8uZXF1YWxzKHR5cGVJbmZvKQotICAgICAgICAgICAgfHwgVjhDU1NNZWRpYVJ1
bGU6OmluZm8uZXF1YWxzKHR5cGVJbmZvKSkgewotICAgICAgICAgICAgU3R5bGVCYXNlKiBzdHls
ZUJhc2UgPSBzdGF0aWNfY2FzdDxTdHlsZUJhc2UqPihvYmplY3QpOwotCi0gICAgICAgICAgICAv
LyBXZSBwdXQgdGhlIHdob2xlIHRyZWUgb2Ygc3R5bGUgZWxlbWVudHMgaW50byBhIHNpbmdsZSBv
YmplY3QgZ3JvdXAuCi0gICAgICAgICAgICAvLyBUbyBhY2hpZXZlIHRoYXQgd2UgZ3JvdXAgZWxl
bWVudHMgYnkgdGhlIHJvb3RzIG9mIHRoZWlyIHRyZWVzLgotICAgICAgICAgICAgU3R5bGVCYXNl
KiByb290ID0gc3R5bGVCYXNlOwotICAgICAgICAgICAgQVNTRVJUKHJvb3QpOwotICAgICAgICAg
ICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICBTdHlsZUJhc2UqIHBhcmVudCA9IHJv
b3QtPnBhcmVudCgpOwotICAgICAgICAgICAgICAgIGlmICghcGFyZW50KQorICAgICAgICAvLyBH
cm91cCBieSBzb3J0aW5nIGJ5IHRoZSBncm91cCBpZC4KKyAgICAgICAgc3RkOjpzb3J0KG1fZ3Jv
dXBlci5iZWdpbigpLCBtX2dyb3VwZXIuZW5kKCkpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9ncm91cGVyLnNpemUoKTsgKSB7CisgICAgICAgICAgICAvLyBTZWVrIHRvIHRo
ZSBuZXh0IGtleSAob3IgdGhlIGVuZCBvZiB0aGUgbGlzdCkuCisgICAgICAgICAgICBzaXplX3Qg
bmV4dEtleUluZGV4ID0gbV9ncm91cGVyLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGogPSBpOyBqIDwgbV9ncm91cGVyLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYg
KG1fZ3JvdXBlcltpXS5ncm91cElkKCkgIT0gbV9ncm91cGVyW2pdLmdyb3VwSWQoKSkgeworICAg
ICAgICAgICAgICAgICAgICBuZXh0S2V5SW5kZXggPSBqOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICByb290ID0gcGFyZW50OworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEdyb3VwIGlkIGlzIGFuIGFkZHJlc3Mgb2Yg
dGhlIHJvb3QuCi0gICAgICAgICAgICB1aW50cHRyX3QgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Pihyb290KTsKLSAgICAgICAgICAgIG1fZ3JvdXBlci5hcHBlbmQoR3JvdXBl
ckl0ZW0oZ3JvdXBJZCwgd3JhcHBlcikpOwogCi0gICAgICAgICAgICBpZiAoVjhDU1NTdHlsZURl
Y2xhcmF0aW9uOjppbmZvLmVxdWFscyh0eXBlSW5mbykpIHsKLSAgICAgICAgICAgICAgICBDU1NT
dHlsZURlY2xhcmF0aW9uKiBjc3NTdHlsZURlY2xhcmF0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVEZWNsYXJhdGlvbio+KHN0eWxlQmFzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNzc1N0eWxl
RGVjbGFyYXRpb24tPmlzTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oKSkgewotICAgICAgICAgICAg
ICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogY3NzTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24gPSBzdGF0aWNfY2FzdDxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+KGNzc1N0eWxl
RGVjbGFyYXRpb24pOwotICAgICAgICAgICAgICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3NzTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24tPmVu
ZCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNzc011dGFibGVTdHlsZURlY2xhcmF0aW9uLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIgPSBz
dG9yZS0+ZG9tT2JqZWN0TWFwKCkuZ2V0KGl0LT52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQo
bmV4dEtleUluZGV4ID4gaSk7CisKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBh
IGdyb3VwIGlmIGl0IGhhcyBtb3JlIHRoYW4gb25lIG9iamVjdC4gSWYgaXQgb25seQorICAgICAg
ICAgICAgLy8gaGFzIG9uZSBvYmplY3QsIGl0IGhhcyBub3RoaW5nIGVsc2UgdGhhdCBuZWVkcyB0
byBiZSBrZXB0IGFsaXZlLgorICAgICAgICAgICAgaWYgKG5leHRLZXlJbmRleCAtIGkgPD0gMSkg
eworICAgICAgICAgICAgICAgIGkgPSBuZXh0S2V5SW5kZXg7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVu
dDx2ODo6VmFsdWU+ID4gZ3JvdXA7CisgICAgICAgICAgICBncm91cC5yZXNlcnZlQ2FwYWNpdHko
bmV4dEtleUluZGV4IC0gaSk7CisgICAgICAgICAgICBmb3IgKDsgaSA8IG5leHRLZXlJbmRleDsg
KytpKSB7CisgICAgICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVy
ID0gbV9ncm91cGVyW2ldLndyYXBwZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXdyYXBwZXIu
SXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBncm91cC5hcHBlbmQod3JhcHBlcik7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoVjhTdHlsZVNoZWV0TGlzdDo6aW5mby5l
cXVhbHModHlwZUluZm8pKSB7Ci0gICAgICAgICAgICBhZGRBbGxJdGVtcyhzdG9yZSwgc3RhdGlj
X2Nhc3Q8U3R5bGVTaGVldExpc3QqPihvYmplY3QpLCB3cmFwcGVyKTsKLSAgICAgICAgfSBlbHNl
IGlmIChWOENTU1J1bGVMaXN0OjppbmZvLmVxdWFscyh0eXBlSW5mbykpIHsKLSAgICAgICAgICAg
IGFkZEFsbEl0ZW1zKHN0b3JlLCBzdGF0aWNfY2FzdDxDU1NSdWxlTGlzdCo+KG9iamVjdCksIHdy
YXBwZXIpOworCisgICAgICAgICAgICBpZiAoZ3JvdXAuc2l6ZSgpID4gMSkKKyAgICAgICAgICAg
ICAgICB2ODo6Vjg6OkFkZE9iamVjdEdyb3VwKCZncm91cFswXSwgZ3JvdXAuc2l6ZSgpKTsKKwor
ICAgICAgICAgICAgQVNTRVJUKGkgPT0gbmV4dEtleUluZGV4KTsKICAgICAgICAgfQogICAgIH0K
IAogcHJpdmF0ZToKICAgICBHcm91cGVyTGlzdCBtX2dyb3VwZXI7Ci0KLSAgICB0ZW1wbGF0ZSA8
Y2xhc3MgQz4KLSAgICB2b2lkIGFkZEFsbEl0ZW1zKERPTURhdGFTdG9yZSogc3RvcmUsIEMqIGNv
bGxlY3Rpb24sIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCi0gICAgewotICAg
ICAgICB1aW50cHRyX3QgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb2xs
ZWN0aW9uKTsKLSAgICAgICAgbV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3
cmFwcGVyKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xsZWN0aW9uLT5s
ZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAgICB3cmFwcGVyID0gc3RvcmUtPmRvbU9iamVjdE1h
cCgpLmdldChjb2xsZWN0aW9uLT5pdGVtKGkpKTsKLSAgICAgICAgICAgIGlmICghd3JhcHBlci5J
c0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgbV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShn
cm91cElkLCB3cmFwcGVyKSk7Ci0gICAgICAgIH0KLSAgICB9CiB9OwogCiAvLyBDcmVhdGUgb2Jq
ZWN0IGdyb3VwcyBmb3IgRE9NIHRyZWUgbm9kZXMuCkBAIC00MjUsMTIgKzM1OCwxMCBAQCB2b2lk
IFY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKCkKICAgICB2aXNpdEFjdGl2ZURPTU9iamVjdHNJ
bkN1cnJlbnRUaHJlYWQoJnByb2xvZ3VlVmlzaXRvcik7CiAKICAgICAvLyBDcmVhdGUgb2JqZWN0
IGdyb3Vwcy4KLSAgICBOb2RlR3JvdXBlclZpc2l0b3Igbm9kZUdyb3VwZXJWaXNpdG9yOwotICAg
IHZpc2l0RE9NTm9kZXNJbkN1cnJlbnRUaHJlYWQoJm5vZGVHcm91cGVyVmlzaXRvcik7Ci0gICAg
bm9kZUdyb3VwZXJWaXNpdG9yLmFwcGx5R3JvdXBpbmcoKTsKLQotICAgIERPTU9iamVjdEdyb3Vw
ZXJWaXNpdG9yIGRvbU9iamVjdEdyb3VwZXJWaXNpdG9yOwotICAgIHZpc2l0RE9NT2JqZWN0c0lu
Q3VycmVudFRocmVhZCgmZG9tT2JqZWN0R3JvdXBlclZpc2l0b3IpOworICAgIEdyb3VwZXJWaXNp
dG9yIGdyb3VwZXJWaXNpdG9yOworICAgIHZpc2l0RE9NTm9kZXNJbkN1cnJlbnRUaHJlYWQoJmdy
b3VwZXJWaXNpdG9yKTsKKyAgICB2aXNpdERPTU9iamVjdHNJbkN1cnJlbnRUaHJlYWQoJmdyb3Vw
ZXJWaXNpdG9yKTsKKyAgICBncm91cGVyVmlzaXRvci5hcHBseUdyb3VwaW5nKCk7CiAKICAgICAv
LyBDbGVhbiBzaW5nbGUgZWxlbWVudCBjYWNoZSBmb3Igc3RyaW5nIGNvbnZlcnNpb25zLgogICAg
IGxhc3RTdHJpbmdJbXBsID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1dyYXBwZXJUeXBlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV3JhcHBl
clR5cGVJbmZvLmgKaW5kZXggMWQxY2JmZDQ1YTBkZDhkMmY2MTJlMzZlODFhNjM3MTU2ZjI4NWUx
MS4uZGRkNDRlY2UxMjQzOTc1MzI4NzVjMDMzMGJkYTI5OTI5YTYwY2NjZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmgKQEAgLTYxLDYgKzYxLDE3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHRoaXMg
PT0gdGhhdDsKICAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNTdWJjbGFzcyhjb25zdCBXcmFw
cGVyVHlwZUluZm8qIHRoYXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZm9yIChjb25zdCBXcmFwcGVyVHlwZUluZm8qIGN1cnJlbnQgPSB0aGlzOyBjdXJyZW50
OyBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50Q2xhc3MpIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y3VycmVudCA9PSB0aGF0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZ2V0VGVtcGxh
dGUoKSB7IHJldHVybiBnZXRUZW1wbGF0ZUZ1bmN0aW9uKCk7IH0KICAgICAgICAgCkBAIC04MCw2
ICs5MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3QgR2V0VGVtcGxhdGVG
dW5jdGlvbiBnZXRUZW1wbGF0ZUZ1bmN0aW9uOwogICAgICAgICBjb25zdCBEZXJlZk9iamVjdEZ1
bmN0aW9uIGRlcmVmT2JqZWN0RnVuY3Rpb247CiAgICAgICAgIGNvbnN0IFRvQWN0aXZlRE9NT2Jq
ZWN0RnVuY3Rpb24gdG9BY3RpdmVET01PYmplY3RGdW5jdGlvbjsKKyAgICAgICAgY29uc3QgV3Jh
cHBlclR5cGVJbmZvKiBwYXJlbnRDbGFzczsKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUnVsZUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxl
TGlzdC5oCmluZGV4IGEzNTVjNGE0NDMyNDdmNTVkNmRiNGEwMTViMTUzMWNkM2I4MjU0NDkuLjg3
OTk2YTlmMDFmODg2NzM0ODM2Yjg2ZGYyZjQ1ODJhOWFkMmQxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NSdWxlTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NS
dWxlTGlzdC5oCkBAIC01Myw2ICs1MywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVSdWxl
KHVuc2lnbmVkIGluZGV4KTsKICAgICB2b2lkIGFwcGVuZChDU1NSdWxlKik7CiAKKyAgICBTdHls
ZUxpc3QqIHN0eWxlTGlzdCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9saXN0LmdldCgpOwor
ICAgIH0KKwogcHJpdmF0ZToKICAgICBDU1NSdWxlTGlzdCgpOwogICAgIENTU1J1bGVMaXN0KFN0
eWxlTGlzdCosIGJvb2wgb21pdENoYXJzZXRSdWxlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVTaGVldExpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0
TGlzdC5oCmluZGV4IGE0ODY1MTE2ODc1NmVjMGE3N2VjMTFkYjQ1OWFhM2Y3MzY5MzlhZDAuLmEw
MTk2OTE5ZDhkM2NlZjVkNmViMzU2MDEyZTk5ZWVlMjBjZTY4ODcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVNoZWV0TGlzdC5oCkBAIC01MCw2ICs1MCwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBtX3NoZWV0cy5zd2FwKHNoZWV0cyk7CiAgICAgfQorCisgICAgRG9jdW1lbnQqIGRvY3VtZW50
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RvYzsKKyAgICB9CiAgICAgCiBwcml2YXRlOgog
ICAgIFN0eWxlU2hlZXRMaXN0KERvY3VtZW50Kik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85499</attachid>
            <date>2011-03-11 11:21:53 -0800</date>
            <delta_ts>2011-03-11 12:02:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55399-20110311222151.patch</filename>
            <type>text/plain</type>
            <size>27575</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODA4NDYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjYTg3N2EzYzNjNDc0NWU4
OWZmMDdiZmIwYTE4OGU2MzNiNjZlNzQ1Li5lMmVkM2Y2YzZkNDMzMjY2ZmMxZDY4MWQ4NDMzZDFm
MTNmZDJkZDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMDMtMTEgIEFudG9u
IE11aGluICA8YW50b25tQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbdjhdIFJld29yayBvYmplY3QgZ3JvdXAgYnVpbGRpbmcu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTM5OQor
CisgICAgICAgIEluc3RlYWQgb2YgZ29pbmcgdG9wLWRvd24gKGZyb20gb3duZXIgdG8gb3duZWQg
ZWxlbWVudHMpLCBnbyB1cC0tLWZyb20gb2JqZWN0cworICAgICAgICB0byB0aGVpciBncm91cCBp
ZHMuICBUaGF0IGZpdHMgYmV0dGVyIHRvIHY4J3Mgb2JqZWN0IGdyb3VwaW5nIG1vZGVsIGFuZCBn
dWFyYW50ZWVzCisgICAgICAgIHRoYXQgZWFjaCB3cmFwcGVyIGJlbG9uZ3MgdG8gdGhlIHNpbmds
ZSBncm91cC4KKworICAgICAgICBBbGFzLCB0aGlzIGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBmb3Ig
b25lIGtpbmQgb2Ygb2JqZWN0cy0tLUNTU1Byb3BlcnRpZXMuCisKKyAgICAgICAgUGFydCBvZiBj
b3JlIEdDIGFsZ29yaXRobSBhbmQgdGVzdGVkIGV4dGVuc2l2ZWx5IGJ5IGV4aXNpdGluZyBsYXlv
dXQgdGVzdHMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlR3JvdXBJZCk6CisgICAgICAgIChXZWJDb3JlOjpjYWxj
dWxhdGVSb290U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpHcm91cGVyVmlzaXRvcjo6
dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdyb3VwZXJWaXNpdG9yOjphcHBs
eUdyb3VwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3Vl
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaDoKKyAgICAgICAgKFdl
YkNvcmU6OldyYXBwZXJUeXBlSW5mbzo6aXNTdWJjbGFzcyk6CisgICAgICAgICogY3NzL0NTU1J1
bGVMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NSdWxlTGlzdDo6c3R5bGVMaXN0KToKKyAg
ICAgICAgKiBjc3MvU3R5bGVTaGVldExpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hl
ZXRMaXN0Ojpkb2N1bWVudCk6CisKIDIwMTEtMDMtMTEgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlciBhbmQgQ2hyaXMgTWFy
cmluLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbQppbmRleCBlMmZlMjc3ZjA1MDQ2NjliMWIxYWJjODJiYmQ3YzBjNjM4YjEwN2E4Li45
ZDkwODNlYTEwY2IyZWMzMjg4ODI5MTg2MDRjY2EwYjJmMjFjZmE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMTcxNiw4
ICsxNzE2LDIyIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICBteSAkdG9BY3Rp
dmUgPSBJc0FjdGl2ZURvbVR5cGUoJGludGVyZmFjZU5hbWUpID8gIiR7Y2xhc3NOYW1lfTo6dG9B
Y3RpdmVET01PYmplY3QiIDogIjAiOwogCisgICAgIyBGaW5kIHRoZSBzdXBlciBkZXNjcmlwdG9y
LgorICAgIG15ICRwYXJlbnRDbGFzcyA9ICIiOworICAgIG15ICRwYXJlbnRDbGFzc1RlbXBsYXRl
ID0gIiI7CisgICAgZm9yZWFjaCAoQHskZGF0YU5vZGUtPnBhcmVudHN9KSB7CisgICAgICAgIG15
ICRwYXJlbnQgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJF8pOworICAgICAgICBpZiAo
JHBhcmVudCBlcSAiRXZlbnRUYXJnZXQiKSB7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9
CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4JHtwYXJlbnR9LmgifSA9IDE7CisgICAgICAgICRw
YXJlbnRDbGFzcyA9ICJWOCIgLiAkcGFyZW50OworICAgICAgICAkcGFyZW50Q2xhc3NUZW1wbGF0
ZSA9ICRwYXJlbnRDbGFzcyAuICI6OkdldFRlbXBsYXRlKCkiOworICAgICAgICBsYXN0OworICAg
IH0KICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAibmFtZXNwYWNlIFdlYkNvcmUge1xuXG4i
KTsKLSAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiV3JhcHBlclR5cGVJbmZvICR7Y2xhc3NO
YW1lfTo6aW5mbyA9IHsgJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0ZSwgJHtjbGFzc05hbWV9Ojpk
ZXJlZk9iamVjdCwgJHt0b0FjdGl2ZX0gfTtcblxuIik7ICAgCisgICAgbXkgJHBhcmVudENsYXNz
SW5mbyA9ICRwYXJlbnRDbGFzcyA/ICImJHtwYXJlbnRDbGFzc306OmluZm8iIDogIjAiOworICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICJXcmFwcGVyVHlwZUluZm8gJHtjbGFzc05hbWV9Ojpp
bmZvID0geyAke2NsYXNzTmFtZX06OkdldFRlbXBsYXRlLCAke2NsYXNzTmFtZX06OmRlcmVmT2Jq
ZWN0LCAke3RvQWN0aXZlfSwgJHtwYXJlbnRDbGFzc0luZm99IH07XG5cbiIpOyAgIAogICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICJuYW1lc3BhY2UgJHtpbnRlcmZhY2VOYW1lfUludGVybmFs
IHtcblxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgInRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiB2b2lkIFY4X1VTRShUKSB7IH1cblxuIik7CiAKQEAgLTE5NDEsMTUgKzE5NTUsNiBAQCBz
dGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdFRlbXBsYXRlPiBDb25maWd1cmVTaGFkb3dP
YmplY3RUZW1wbGF0ZSh2ODo6UGVycwogRU5ECiAgICAgfQogCi0gICAgIyBmaW5kIHRoZSBzdXBl
ciBkZXNjcmlwdG9yCi0gICAgbXkgJHBhcmVudENsYXNzVGVtcGxhdGUgPSAiIjsKLSAgICBmb3Jl
YWNoIChAeyRkYXRhTm9kZS0+cGFyZW50c30pIHsKLSAgICAgICAgbXkgJHBhcmVudCA9ICRjb2Rl
R2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkXyk7Ci0gICAgICAgIGlmICgkcGFyZW50IGVxICJFdmVu
dFRhcmdldCIpIHsgbmV4dDsgfQotICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOCR7cGFyZW50fS5o
In0gPSAxOwotICAgICAgICAkcGFyZW50Q2xhc3NUZW1wbGF0ZSA9ICJWOCIgLiAkcGFyZW50IC4g
Ijo6R2V0VGVtcGxhdGUoKSI7Ci0gICAgICAgIGxhc3Q7Ci0gICAgfQogICAgIGlmICghJHBhcmVu
dENsYXNzVGVtcGxhdGUpIHsKICAgICAgICAgJHBhcmVudENsYXNzVGVtcGxhdGUgPSAidjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCkiOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFj
ZS5jcHAKaW5kZXggNGM0MGQ5OGE1NTg4NDA3MTZjNTQ1NmNkYmNlNjdlYmZhMWMyNmE2YS4uN2U1
OTQxNjJiNzU5ODI1MDEzYmQ0MjJmZmRiZGJkYmE3YTJjNTM2NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFj
ZS5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XcmFwcGVy
VHlwZUluZm8gVjhUZXN0SW50ZXJmYWNlOjppbmZvID0geyBWOFRlc3RJbnRlcmZhY2U6OkdldFRl
bXBsYXRlLCBWOFRlc3RJbnRlcmZhY2U6OmRlcmVmT2JqZWN0LCAwIH07CitXcmFwcGVyVHlwZUlu
Zm8gVjhUZXN0SW50ZXJmYWNlOjppbmZvID0geyBWOFRlc3RJbnRlcmZhY2U6OkdldFRlbXBsYXRl
LCBWOFRlc3RJbnRlcmZhY2U6OmRlcmVmT2JqZWN0LCAwLCAwIH07CiAKIG5hbWVzcGFjZSBUZXN0
SW50ZXJmYWNlSW50ZXJuYWwgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5jcHAKaW5kZXggYWI5ZTZkYjI4ODEzNmZhMjY5MDkwNmIwOTY5NjQ0ZjBmOTNkODM4
ZS4uMDZjNzFjMGU2NzhjMDJhYmIzNTU3YjAyNjU5ZjlmZjU2Y2MxZmFiMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtMzMsNyArMzMsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdyYXBwZXJUeXBlSW5mbyBWOFRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyOjppbmZvID0geyBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRU
ZW1wbGF0ZSwgVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6ZGVyZWZPYmplY3QsIDAgfTsK
K1dyYXBwZXJUeXBlSW5mbyBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjppbmZvID0geyBW
OFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1wbGF0ZSwgVjhUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcjo6ZGVyZWZPYmplY3QsIDAsIDAgfTsKIAogbmFtZXNwYWNlIFRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVySW50ZXJuYWwgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmluZGV4IDQyOTg3NTY4ZDY3
ZDNiNWUwOWQ5MzM2MGMzNzk1YzdhNWIwNzU4YjEuLjQ5YjViYmU1Mzc2ZmYxYmEzNmUzZWUxY2I4
Y2VjNDQxZDYyNmY2NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC00Niw3ICs0Niw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotV3JhcHBlclR5cGVJbmZvIFY4VGVzdE9iajo6aW5mbyA9IHsgVjhUZXN0
T2JqOjpHZXRUZW1wbGF0ZSwgVjhUZXN0T2JqOjpkZXJlZk9iamVjdCwgMCB9OworV3JhcHBlclR5
cGVJbmZvIFY4VGVzdE9iajo6aW5mbyA9IHsgVjhUZXN0T2JqOjpHZXRUZW1wbGF0ZSwgVjhUZXN0
T2JqOjpkZXJlZk9iamVjdCwgMCwgMCB9OwogCiBuYW1lc3BhY2UgVGVzdE9iakludGVybmFsIHsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCmluZGV4
IDQ0YzBlNGViNTkxZmFmZWVlOTBkNmNlNThhNDQxMjI4ZDEyNjg3ZjcuLjEwMzJkOTc3NDZiMjJj
Y2M2YzdlYmZiNGMzOWExOThmNmNlYmJiM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEdDQ29udHJvbGxlci5jcHAKQEAgLTM0LDI3ICszNCwxOCBAQAogI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJET01EYXRhU3Rv
cmUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgi
CiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKLSNp
bmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAi
VjhDU1NDaGFyc2V0UnVsZS5oIgotI2luY2x1ZGUgIlY4Q1NTRm9udEZhY2VSdWxlLmgiCi0jaW5j
bHVkZSAiVjhDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiVjhDU1NNZWRpYVJ1bGUuaCIKKyNp
bmNsdWRlICJWOENTU1J1bGUuaCIKICNpbmNsdWRlICJWOENTU1J1bGVMaXN0LmgiCiAjaW5jbHVk
ZSAiVjhDU1NTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiVjhDU1NTdHlsZVJ1bGUuaCIK
LSNpbmNsdWRlICJWOENTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJWOERPTU1hcC5oIgotI2lu
Y2x1ZGUgIlY4SFRNTExpbmtFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MU3R5bGVFbGVtZW50
LmgiCisjaW5jbHVkZSAiVjhET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIlY4TWVzc2Fn
ZVBvcnQuaCIKLSNpbmNsdWRlICJWOFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgotI2luY2x1ZGUg
IlY4UHJveHkuaCIKKyNpbmNsdWRlICJWOFN0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJWOFN0eWxl
U2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCiAKQEAgLTE5OCwxMzYg
KzE4OSwzMyBAQCBib29sIG9wZXJhdG9yPChjb25zdCBHcm91cGVySXRlbSYgYSwgY29uc3QgR3Jv
dXBlckl0ZW0mIGIpCiAKIHR5cGVkZWYgVmVjdG9yPEdyb3VwZXJJdGVtPiBHcm91cGVyTGlzdDsK
IAotdm9pZCBtYWtlVjhPYmplY3RHcm91cHMoR3JvdXBlckxpc3QmIGdyb3VwZXIpCisvLyBJZiB0
aGUgbm9kZSBpcyBpbiBkb2N1bWVudCwgcHV0IGl0IGluIHRoZSBvd25lckRvY3VtZW50J3Mgb2Jq
ZWN0IGdyb3VwLgorLy8KKy8vIElmIGFuIGltYWdlIGVsZW1lbnQgd2FzIGNyZWF0ZWQgYnkgSmF2
YVNjcmlwdCAibmV3IEltYWdlIiwKKy8vIGl0IGlzIG5vdCBpbiBhIGRvY3VtZW50LiBIb3dldmVy
LCBpZiB0aGUgbG9hZCBldmVudCBoYXMgbm90CisvLyBiZWVuIGZpcmVkIChzdGlsbCBvbmxvYWRp
bmcpLCBpdCBpcyB0cmVhdGVkIGFzIGluIHRoZSBkb2N1bWVudC4KKy8vCisvLyBPdGhlcndpc2Us
IHRoZSBub2RlIGlzIHB1dCBpbiBhbiBvYmplY3QgZ3JvdXAgaWRlbnRpZmllZCBieSB0aGUgcm9v
dAorLy8gZWxlbWVudCBvZiB0aGUgdHJlZSB0byB3aGljaCBpdCBiZWxvbmdzLgorc3RhdGljIHVp
bnRwdHJfdCBjYWxjdWxhdGVHcm91cElkKE5vZGUqIG5vZGUpCiB7Ci0gICAgLy8gR3JvdXAgYnkg
c29ydGluZyBieSB0aGUgZ3JvdXAgaWQuCi0gICAgc3RkOjpzb3J0KGdyb3VwZXIuYmVnaW4oKSwg
Z3JvdXBlci5lbmQoKSk7Ci0KLSAgICAvLyBGSVhNRSBTaG91bGQgcHJvYmFibHkgd29yayBpbiBp
dGVyYXRvcnMgaGVyZSwgYnV0IGluZGV4ZXMgd2VyZSBlYXNpZXIgZm9yIG15IHNpbXBsZSBtaW5k
LgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3JvdXBlci5zaXplKCk7ICkgewotICAgICAg
ICAvLyBTZWVrIHRvIHRoZSBuZXh0IGtleSAob3IgdGhlIGVuZCBvZiB0aGUgbGlzdCkuCi0gICAg
ICAgIHNpemVfdCBuZXh0S2V5SW5kZXggPSBncm91cGVyLnNpemUoKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaiA9IGk7IGogPCBncm91cGVyLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBpZiAo
Z3JvdXBlcltpXS5ncm91cElkKCkgIT0gZ3JvdXBlcltqXS5ncm91cElkKCkpIHsKLSAgICAgICAg
ICAgICAgICBuZXh0S2V5SW5kZXggPSBqOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKG5leHRLZXlJbmRleCA+IGkpOwot
Ci0gICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBhIGdyb3VwIGlmIGl0IGhhcyBtb3JlIHRo
YW4gb25lIG9iamVjdC4gSWYgaXQgb25seQotICAgICAgICAvLyBoYXMgb25lIG9iamVjdCwgaXQg
aGFzIG5vdGhpbmcgZWxzZSB0aGF0IG5lZWRzIHRvIGJlIGtlcHQgYWxpdmUuCi0gICAgICAgIGlm
IChuZXh0S2V5SW5kZXggLSBpIDw9IDEpIHsKLSAgICAgICAgICAgIGkgPSBuZXh0S2V5SW5kZXg7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFZlY3Rvcjx2ODo6
UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4gZ3JvdXA7Ci0gICAgICAgIGdyb3VwLnJlc2VydmVDYXBh
Y2l0eShuZXh0S2V5SW5kZXggLSBpKTsKLSAgICAgICAgZm9yICg7IGkgPCBuZXh0S2V5SW5kZXg7
ICsraSkgewotICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyID0g
Z3JvdXBlcltpXS53cmFwcGVyKCk7Ci0gICAgICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChncm91cC5zaXplKCkgPiAxKQotICAgICAgICAgICAgdjg6OlY4OjpBZGRPYmpl
Y3RHcm91cCgmZ3JvdXBbMF0sIGdyb3VwLnNpemUoKSk7Ci0KLSAgICAgICAgQVNTRVJUKGkgPT0g
bmV4dEtleUluZGV4KTsKLSAgICB9Ci19Ci0KLWNsYXNzIE5vZGVHcm91cGVyVmlzaXRvciA6IHB1
YmxpYyBET01XcmFwcGVyTWFwPE5vZGU+OjpWaXNpdG9yIHsKLXB1YmxpYzoKLSAgICBOb2RlR3Jv
dXBlclZpc2l0b3IoKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IGdyb3VwZXJfLnJlc2VydmVD
YXBhY2l0eShub2RlX21hcC5zaXplKCkpOyAgPwotICAgIH0KLQotICAgIHZvaWQgdmlzaXRET01X
cmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUsIE5vZGUqIG5vZGUsIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+IHdyYXBwZXIpCi0gICAgewotICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBpbiBk
b2N1bWVudCwgcHV0IGl0IGluIHRoZSBvd25lckRvY3VtZW50J3Mgb2JqZWN0IGdyb3VwLgotICAg
ICAgICAvLwotICAgICAgICAvLyBJZiBhbiBpbWFnZSBlbGVtZW50IHdhcyBjcmVhdGVkIGJ5IEph
dmFTY3JpcHQgIm5ldyBJbWFnZSIsCi0gICAgICAgIC8vIGl0IGlzIG5vdCBpbiBhIGRvY3VtZW50
LiBIb3dldmVyLCBpZiB0aGUgbG9hZCBldmVudCBoYXMgbm90Ci0gICAgICAgIC8vIGJlZW4gZmly
ZWQgKHN0aWxsIG9ubG9hZGluZyksIGl0IGlzIHRyZWF0ZWQgYXMgaW4gdGhlIGRvY3VtZW50Lgot
ICAgICAgICAvLwotICAgICAgICAvLyBPdGhlcndpc2UsIHRoZSBub2RlIGlzIHB1dCBpbiBhbiBv
YmplY3QgZ3JvdXAgaWRlbnRpZmllZCBieSB0aGUgcm9vdAotICAgICAgICAvLyBlbGVtZW50IG9m
IHRoZSB0cmVlIHRvIHdoaWNoIGl0IGJlbG9uZ3MuCi0gICAgICAgIHVpbnRwdHJfdCBncm91cElk
OwotICAgICAgICBpZiAobm9kZS0+aW5Eb2N1bWVudCgpIHx8IChub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aW1nVGFnKSAmJiAhc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KG5vZGUp
LT5oYXZlRmlyZWRMb2FkRXZlbnQoKSkpCi0gICAgICAgICAgICBncm91cElkID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPmRvY3VtZW50KCkpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIE5vZGUqIHJvb3QgPSBub2RlOwotICAgICAgICAgICAgaWYgKG5vZGUtPmlzQXR0
cmlidXRlTm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgcm9vdCA9IHN0YXRpY19jYXN0PEF0dHIq
Pihub2RlKS0+b3duZXJFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGF0dHJp
YnV0ZSBoYXMgbm8gZWxlbWVudCwgbm8gbmVlZCB0byBwdXQgaXQgaW4gdGhlIGdyb3VwLAotICAg
ICAgICAgICAgICAgIC8vIGJlY2F1c2UgaXQnbGwgYWx3YXlzIGJlIGEgZ3JvdXAgb2YgMS4KLSAg
ICAgICAgICAgICAgICBpZiAoIXJvb3QpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHJvb3QtPnBhcmVudE5v
ZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcm9vdCA9IHJvb3QtPnBhcmVudE5vZGUoKTsKLQot
ICAgICAgICAgICAgICAgIC8vIElmIHRoZSBub2RlIGlzIGFsb25lIGluIGl0cyBET00gdHJlZSAo
ZG9lc24ndCBoYXZlIGEgcGFyZW50IG9yIGFueQotICAgICAgICAgICAgICAgIC8vIGNoaWxkcmVu
KSB0aGVuIHRoZSBncm91cCB3aWxsIGJlIGZpbHRlcmVkIG91dCBsYXRlciBhbnl3YXkuCi0gICAg
ICAgICAgICAgICAgaWYgKHJvb3QgPT0gbm9kZSAmJiAhbm9kZS0+aGFzQ2hpbGROb2RlcygpICYm
ICFub2RlLT5oYXNBdHRyaWJ1dGVzKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGdyb3VwSWQgPSByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4ocm9vdCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9ncm91cGVyLmFwcGVuZChHcm91cGVy
SXRlbShncm91cElkLCB3cmFwcGVyKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXMgc3R5
bGVkIGFuZCB0aGVyZSBpcyBhIHdyYXBwZXIgZm9yIHRoZSBpbmxpbmUKLSAgICAgICAgLy8gc3R5
bGUgZGVjbGFyYXRpb24sIHdlIG5lZWQgdG8ga2VlcCB0aGF0IHN0eWxlIGRlY2xhcmF0aW9uCi0g
ICAgICAgIC8vIHdyYXBwZXIgYWxpdmUgYXMgd2VsbCwgc28gd2UgYWRkIGl0IHRvIHRoZSBvYmpl
Y3QgZ3JvdXAuCi0gICAgICAgIGlmIChub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSkgewotICAgICAg
ICAgICAgU3R5bGVkRWxlbWVudCogZWxlbWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3R5bGVkRWxl
bWVudCo+KG5vZGUpOwotICAgICAgICAgICAgYWRkRE9NT2JqZWN0VG9Hcm91cChzdG9yZSwgZ3Jv
dXBJZCwgZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG5vZGUtPmlzRG9jdW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RG9jdW1lbnQqPihub2RlKTsKLSAgICAgICAgICAgIGFk
ZERPTU9iamVjdFRvR3JvdXAoc3RvcmUsIGdyb3VwSWQsIGRvY3VtZW50LT5zdHlsZVNoZWV0cygp
KTsKLSAgICAgICAgICAgIGFkZERPTU9iamVjdFRvR3JvdXAoc3RvcmUsIGdyb3VwSWQsIGRvY3Vt
ZW50LT5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFdyYXBwZXJUeXBl
SW5mbyogdHlwZUluZm8gPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHdyYXBwZXIpOwot
Ci0gICAgICAgIGlmIChWOEhUTUxMaW5rRWxlbWVudDo6aW5mby5lcXVhbHModHlwZUluZm8pKSB7
Ci0gICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQqIGh0bWxMaW5rRWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxMaW5rRWxlbWVudCo+KG5vZGUpOwotICAgICAgICAgICAgYWRkRE9NT2JqZWN0VG9H
cm91cChzdG9yZSwgZ3JvdXBJZCwgaHRtbExpbmtFbGVtZW50LT5zaGVldCgpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChWOEhUTUxTdHlsZUVsZW1lbnQ6OmluZm8uZXF1YWxzKHR5cGVJbmZv
KSkgewotICAgICAgICAgICAgSFRNTFN0eWxlRWxlbWVudCogaHRtbFN0eWxlRWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgICAgIGFkZERPTU9i
amVjdFRvR3JvdXAoc3RvcmUsIGdyb3VwSWQsIGh0bWxTdHlsZUVsZW1lbnQtPnNoZWV0KCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFY4UHJvY2Vzc2luZ0luc3RydWN0aW9uOjppbmZvLmVx
dWFscyh0eXBlSW5mbykpIHsKLSAgICAgICAgICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcHJv
Y2Vzc2luZ0luc3RydWN0aW9uID0gc3RhdGljX2Nhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uKj4o
bm9kZSk7Ci0gICAgICAgICAgICBhZGRET01PYmplY3RUb0dyb3VwKHN0b3JlLCBncm91cElkLCBw
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24tPnNoZWV0KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
dm9pZCBhcHBseUdyb3VwaW5nKCkKLSAgICB7Ci0gICAgICAgIG1ha2VWOE9iamVjdEdyb3Vwcyht
X2dyb3VwZXIpOworICAgIGlmIChub2RlLT5pbkRvY3VtZW50KCkgfHwgKG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjppbWdUYWcpICYmICFzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4o
bm9kZSktPmhhdmVGaXJlZExvYWRFdmVudCgpKSkKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Pihub2RlLT5kb2N1bWVudCgpKTsKKworICAgIE5vZGUqIHJvb3QgPSBu
b2RlOworICAgIGlmIChub2RlLT5pc0F0dHJpYnV0ZU5vZGUoKSkgeworICAgICAgICByb290ID0g
c3RhdGljX2Nhc3Q8QXR0cio+KG5vZGUpLT5vd25lckVsZW1lbnQoKTsKKyAgICAgICAgLy8gSWYg
dGhlIGF0dHJpYnV0ZSBoYXMgbm8gZWxlbWVudCwgbm8gbmVlZCB0byBwdXQgaXQgaW4gdGhlIGdy
b3VwLAorICAgICAgICAvLyBiZWNhdXNlIGl0J2xsIGFsd2F5cyBiZSBhIGdyb3VwIG9mIDEuCisg
ICAgICAgIGlmICghcm9vdCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHdoaWxlIChOb2RlKiBwYXJlbnQgPSByb290LT5wYXJlbnROb2RlKCkpCisgICAgICAg
ICAgICByb290ID0gcGFyZW50OwogICAgIH0KIAotcHJpdmF0ZToKLSAgICBHcm91cGVyTGlzdCBt
X2dyb3VwZXI7Ci0KLSAgICB2b2lkIGFkZERPTU9iamVjdFRvR3JvdXAoRE9NRGF0YVN0b3JlKiBz
dG9yZSwgdWludHB0cl90IGdyb3VwSWQsIHZvaWQqIG9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlm
ICghb2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PiB3cmFwcGVyID0gc3RvcmUtPmRvbU9iamVjdE1hcCgpLmdldChvYmplY3QpOwot
ICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICAgICAgbV9ncm91cGVyLmFw
cGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7Ci0gICAgfQotfTsKKyAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJvb3QpOworfQogCiBzdGF0aWMgdWludHB0
cl90IGNhbGN1bGF0ZUdyb3VwSWQoU3R5bGVCYXNlKiBzdHlsZUJhc2UpCiB7CkBAIC0zMzUsMTUg
KzIyMywxNiBAQCBzdGF0aWMgdWludHB0cl90IGNhbGN1bGF0ZUdyb3VwSWQoU3R5bGVCYXNlKiBz
dHlsZUJhc2UpCiAgICAgU3R5bGVCYXNlKiBjdXJyZW50ID0gc3R5bGVCYXNlOwogICAgIFN0eWxl
U2hlZXQqIHN0eWxlU2hlZXQgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIC8vIFNw
ZWNpYWwgY2FzZTogQ1NTU3R5bGVEZWNsYXJhdGlvbnMgc2hvdWxkIGhhdmUgQ1NTUnVsZSBhcyBh
IHBhcmVudAotICAgICAgICAvLyB0byBwcm9jZWVkIHdpdGggcGFyZW50IHRyYXZlcnNhbCwgb3Ro
ZXJ3aXNlIHRoZXkgYXJlIGNvbWluZyBmcm9tCi0gICAgICAgIC8vIGlubGluZWQgc3R5bGUgZGVj
bGFyYXRpb24gYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgcm9vdC4KKyAgICAgICAgLy8gU3Bl
Y2lhbCBjYXNlOiBDU1NTdHlsZURlY2xhcmF0aW9ucyBtaWdodCBiZSBlaXRoZXIgaW5saW5lIGFu
ZCBpbiB0aGlzIGNhc2UKKyAgICAgICAgLy8gd2UgbmVlZCB0byBncm91cCB0aGVtIHdpdGggdGhl
aXIgbm9kZSBvciByZWd1bGFyIG9uZXMuCiAgICAgICAgIGlmIChjdXJyZW50LT5pc011dGFibGVT
dHlsZURlY2xhcmF0aW9uKCkpIHsKICAgICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBjc3NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiA9IHN0YXRpY19jYXN0PENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKj4oY3VycmVudCk7Ci0gICAgICAgICAgICBpZiAoQ1NTUnVsZSogcGFy
ZW50UnVsZSA9IGNzc011dGFibGVTdHlsZURlY2xhcmF0aW9uLT5wYXJlbnRSdWxlKCkpCi0gICAg
ICAgICAgICAgICAgY3VycmVudCA9IHBhcmVudFJ1bGU7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjc3NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbik7CisgICAgICAgICAgICBpZiAoY3NzTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24tPmlzSW5saW5lU3R5bGVEZWNsYXJhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGNzc011dGFibGVTdHlsZURlY2xhcmF0aW9uLT5wYXJlbnQoKS0+aXNTdHlsZVNoZWV0KCkp
OworICAgICAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVHcm91cElkKGNzc011dGFibGVTdHls
ZURlY2xhcmF0aW9uLT5ub2RlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRWl0
aGVyIHdlIGhhdmUgbm8gcGFyZW50LCBvciB0aGlzIHBhcmVudCBpcyBhIENTU1J1bGUuCisgICAg
ICAgICAgICBBU1NFUlQoY3NzTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24tPnBhcmVudCgpID09IGNz
c011dGFibGVTdHlsZURlY2xhcmF0aW9uLT5wYXJlbnRSdWxlKCkpOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKGN1cnJlbnQtPmlzU3R5bGVTaGVldCgpKQpAQCAtMzU1LDc5ICsyNDQsMTE5IEBA
IHN0YXRpYyB1aW50cHRyX3QgY2FsY3VsYXRlR3JvdXBJZChTdHlsZUJhc2UqIHN0eWxlQmFzZSkK
ICAgICAgICAgY3VycmVudCA9IHBhcmVudDsKICAgICB9CiAKLSAgICBpZiAoc3R5bGVTaGVldCkK
KyAgICBpZiAoc3R5bGVTaGVldCkgeworICAgICAgICBpZiAoTm9kZSogb3duZXJOb2RlID0gc3R5
bGVTaGVldC0+b3duZXJOb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gY2FsY3VsYXRlR3JvdXBJ
ZChvd25lck5vZGUpOwogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHN0eWxlU2hlZXQpOworICAgIH0KIAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oY3VycmVudCk7CiB9CiAKLWNsYXNzIERPTU9iamVjdEdyb3VwZXJWaXNpdG9yIDogcHVi
bGljIERPTVdyYXBwZXJNYXA8dm9pZD46OlZpc2l0b3IgeworY2xhc3MgR3JvdXBlclZpc2l0b3Ig
OiBwdWJsaWMgRE9NV3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciwgcHVibGljIERPTVdyYXBwZXJN
YXA8dm9pZD46OlZpc2l0b3IgewogcHVibGljOgotICAgIERPTU9iamVjdEdyb3VwZXJWaXNpdG9y
KCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBzdGFydE1hcCgpCi0gICAgewotICAgICAgICBt
X2dyb3VwZXIuc2hyaW5rKDApOwotICAgIH0KLQotICAgIHZvaWQgZW5kTWFwKCkKKyAgICB2b2lk
IHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqIHN0b3JlLCBOb2RlKiBub2RlLCB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogICAgIHsKLSAgICAgICAgbWFrZVY4T2JqZWN0
R3JvdXBzKG1fZ3JvdXBlcik7CisgICAgICAgIHVpbnRwdHJfdCBncm91cElkID0gY2FsY3VsYXRl
R3JvdXBJZChub2RlKTsKKyAgICAgICAgaWYgKCFncm91cElkKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIp
KTsKICAgICB9CiAKICAgICB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqIHN0b3Jl
LCB2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiAgICAg
ewogICAgICAgICBXcmFwcGVyVHlwZUluZm8qIHR5cGVJbmZvID0gVjhET01XcmFwcGVyOjpkb21X
cmFwcGVyVHlwZSh3cmFwcGVyKTsKLSAgICAgICAgLy8gRklYTUU6IGV4dGVuZCBXcmFwcGVyVHlw
ZUluZm8gd2l0aCBpc1N0eWxlIHRvIHNpbXBsaWZ5IHRoZSBjaGVjayBiZWxvdyBvciBjb25zaWRl
cgotICAgICAgICAvLyBhZGRpbmcgYSB2aXJ0dWFsIG1ldGhvZCB0byBXcmFwcGVyVHlwZUluZm8g
d2hpY2ggd291bGQga25vdyBob3cgdG8gZ3JvdXAgb2JqZWN0cy4KLSAgICAgICAgLy8gRklYTUU6
IGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBTdHlsZUJhc2Ugd3JhcHBlcnMgd2Ugc2hvdWxkIGNh
cmUgb2YuCi0gICAgICAgIGlmIChWOENTU1N0eWxlU2hlZXQ6OmluZm8uZXF1YWxzKHR5cGVJbmZv
KQotICAgICAgICAgICAgfHwgVjhDU1NTdHlsZURlY2xhcmF0aW9uOjppbmZvLmVxdWFscyh0eXBl
SW5mbykKLSAgICAgICAgICAgIHx8IFY4Q1NTQ2hhcnNldFJ1bGU6OmluZm8uZXF1YWxzKHR5cGVJ
bmZvKQotICAgICAgICAgICAgfHwgVjhDU1NGb250RmFjZVJ1bGU6OmluZm8uZXF1YWxzKHR5cGVJ
bmZvKQotICAgICAgICAgICAgfHwgVjhDU1NTdHlsZVJ1bGU6OmluZm8uZXF1YWxzKHR5cGVJbmZv
KQotICAgICAgICAgICAgfHwgVjhDU1NJbXBvcnRSdWxlOjppbmZvLmVxdWFscyh0eXBlSW5mbykK
LSAgICAgICAgICAgIHx8IFY4Q1NTTWVkaWFSdWxlOjppbmZvLmVxdWFscyh0eXBlSW5mbykpIHsK
LSAgICAgICAgICAgIFN0eWxlQmFzZSogc3R5bGVCYXNlID0gc3RhdGljX2Nhc3Q8U3R5bGVCYXNl
Kj4ob2JqZWN0KTsKLQotICAgICAgICAgICAgdWludHB0cl90IGdyb3VwSWQgPSBjYWxjdWxhdGVH
cm91cElkKHN0eWxlQmFzZSk7CisKKyAgICAgICAgaWYgKHR5cGVJbmZvLT5pc1N1YmNsYXNzKCZW
OFN0eWxlU2hlZXRMaXN0OjppbmZvKSkgeworICAgICAgICAgICAgU3R5bGVTaGVldExpc3QqIHN0
eWxlU2hlZXRMaXN0ID0gc3RhdGljX2Nhc3Q8U3R5bGVTaGVldExpc3QqPihvYmplY3QpOworICAg
ICAgICAgICAgdWludHB0cl90IGdyb3VwSWQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
c3R5bGVTaGVldExpc3QpOworICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IHN0
eWxlU2hlZXRMaXN0LT5kb2N1bWVudCgpKQorICAgICAgICAgICAgICAgIGdyb3VwSWQgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZG9jdW1lbnQpOworICAgICAgICAgICAgbV9ncm91cGVy
LmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CisKKyAgICAgICAgfSBlbHNl
IGlmICh0eXBlSW5mby0+aXNTdWJjbGFzcygmVjhET01JbXBsZW1lbnRhdGlvbjo6aW5mbykpIHsK
KyAgICAgICAgICAgIERPTUltcGxlbWVudGF0aW9uKiBkb21JbXBsZW1lbnRhdGlvbiA9IHN0YXRp
Y19jYXN0PERPTUltcGxlbWVudGF0aW9uKj4ob2JqZWN0KTsKKyAgICAgICAgICAgIHVpbnRwdHJf
dCBncm91cElkID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRvbUltcGxlbWVudGF0aW9u
KTsKKyAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBkb21JbXBsZW1lbnRhdGlv
bi0+b3duZXJEb2N1bWVudCgpKQorICAgICAgICAgICAgICAgIGdyb3VwSWQgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oZG9jdW1lbnQpOworICAgICAgICAgICAgbV9ncm91cGVyLmFwcGVu
ZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CisKKyAgICAgICAgfSBlbHNlIGlmICh0
eXBlSW5mby0+aXNTdWJjbGFzcygmVjhTdHlsZVNoZWV0OjppbmZvKSB8fCB0eXBlSW5mby0+aXNT
dWJjbGFzcygmVjhDU1NSdWxlOjppbmZvKSkgeworICAgICAgICAgICAgbV9ncm91cGVyLmFwcGVu
ZChHcm91cGVySXRlbShjYWxjdWxhdGVHcm91cElkKHN0YXRpY19jYXN0PFN0eWxlQmFzZSo+KG9i
amVjdCkpLCB3cmFwcGVyKSk7CisKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlSW5mby0+aXNTdWJj
bGFzcygmVjhDU1NTdHlsZURlY2xhcmF0aW9uOjppbmZvKSkgeworICAgICAgICAgICAgQ1NTU3R5
bGVEZWNsYXJhdGlvbiogY3NzU3R5bGVEZWNsYXJhdGlvbiA9IHN0YXRpY19jYXN0PENTU1N0eWxl
RGVjbGFyYXRpb24qPihvYmplY3QpOworCisgICAgICAgICAgICB1aW50cHRyX3QgZ3JvdXBJZCA9
IGNhbGN1bGF0ZUdyb3VwSWQoY3NzU3R5bGVEZWNsYXJhdGlvbik7CiAgICAgICAgICAgICBtX2dy
b3VwZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIpKTsKIAotICAgICAgICAg
ICAgaWYgKFY4Q1NTU3R5bGVEZWNsYXJhdGlvbjo6aW5mby5lcXVhbHModHlwZUluZm8pKSB7Ci0g
ICAgICAgICAgICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogY3NzU3R5bGVEZWNsYXJhdGlvbiA9
IHN0YXRpY19jYXN0PENTU1N0eWxlRGVjbGFyYXRpb24qPihzdHlsZUJhc2UpOwotICAgICAgICAg
ICAgICAgIGlmIChjc3NTdHlsZURlY2xhcmF0aW9uLT5pc011dGFibGVTdHlsZURlY2xhcmF0aW9u
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGNz
c011dGFibGVTdHlsZURlY2xhcmF0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qPihjc3NTdHlsZURlY2xhcmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNzc011dGFibGVT
dHlsZURlY2xhcmF0aW9uLT5lbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjc3NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbi0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB3cmFwcGVyID0gc3RvcmUtPmRvbU9iamVjdE1hcCgpLmdldChpdC0+dmFsdWUoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JvdXBlci5hcHBlbmQoR3JvdXBlckl0ZW0oZ3JvdXBJ
ZCwgd3JhcHBlcikpOwotICAgICAgICAgICAgICAgICAgICB9CisjaWYgMAorICAgICAgICAgICAg
aWYgKGNzc1N0eWxlRGVjbGFyYXRpb24tPmlzTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oKSkgewor
ICAgICAgICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBjc3NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiA9IHN0YXRpY19jYXN0PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4o
Y3NzU3R5bGVEZWNsYXJhdGlvbik7CisKKyAgICAgICAgICAgICAgICAvLyBDU1NWYWx1ZXMgYXJl
IHBhcnRpYWxseSBzaGFyZWQgYWNyb3NzIHRoZSBkb2N1bWVudCBhbmQgaGVuY2UgY2FuIGxlYWQg
dG8gcmV0ZW50aW9uLgorICAgICAgICAgICAgICAgIC8vIFdlJ3JlIHdvcmtpbmcgb24gcHJvcGVy
IGZpeCAob25lLXdheSByZWZlcmVuY2VzKSwgYnV0IGZvciBub3cgbGV0J3MgYWRkIHRob3NlCisg
ICAgICAgICAgICAgICAgLy8gb2JqZWN0cyBpbnRvIHRoZSBvYmplY3QgZ3JvdXAuCisgICAgICAg
ICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGNzc011dGFibGVTdHlsZURlY2xhcmF0aW9uLT5lbmQoKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IGNzc011dGFi
bGVTdHlsZURlY2xhcmF0aW9uLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciA9IHN0b3JlLT5k
b21PYmplY3RNYXAoKS5nZXQoaXQtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAo
IXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncm91cGVyLmFw
cGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKFY4U3R5bGVTaGVldExpc3Q6OmluZm8u
ZXF1YWxzKHR5cGVJbmZvKSkgewotICAgICAgICAgICAgYWRkQWxsSXRlbXMoc3RvcmUsIHN0YXRp
Y19jYXN0PFN0eWxlU2hlZXRMaXN0Kj4ob2JqZWN0KSwgd3JhcHBlcik7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoVjhDU1NSdWxlTGlzdDo6aW5mby5lcXVhbHModHlwZUluZm8pKSB7Ci0gICAgICAgICAg
ICBhZGRBbGxJdGVtcyhzdG9yZSwgc3RhdGljX2Nhc3Q8Q1NTUnVsZUxpc3QqPihvYmplY3QpLCB3
cmFwcGVyKTsKKyNlbmRpZgorCisgICAgICAgIH0gZWxzZSBpZiAodHlwZUluZm8tPmlzU3ViY2xh
c3MoJlY4Q1NTUnVsZUxpc3Q6OmluZm8pKSB7CisgICAgICAgICAgICBDU1NSdWxlTGlzdCogY3Nz
UnVsZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NSdWxlTGlzdCo+KG9iamVjdCk7CisgICAgICAgICAg
ICB1aW50cHRyX3QgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjc3NSdWxl
TGlzdCk7CisgICAgICAgICAgICBTdHlsZUxpc3QqIHN0eWxlTGlzdCA9IGNzc1J1bGVMaXN0LT5z
dHlsZUxpc3QoKTsKKyAgICAgICAgICAgIGlmIChzdHlsZUxpc3QpCisgICAgICAgICAgICAgICAg
Z3JvdXBJZCA9IGNhbGN1bGF0ZUdyb3VwSWQoc3R5bGVMaXN0KTsKKyAgICAgICAgICAgIG1fZ3Jv
dXBlci5hcHBlbmQoR3JvdXBlckl0ZW0oZ3JvdXBJZCwgd3JhcHBlcikpOwogICAgICAgICB9CiAg
ICAgfQogCi1wcml2YXRlOgotICAgIEdyb3VwZXJMaXN0IG1fZ3JvdXBlcjsKLQotICAgIHRlbXBs
YXRlIDxjbGFzcyBDPgotICAgIHZvaWQgYWRkQWxsSXRlbXMoRE9NRGF0YVN0b3JlKiBzdG9yZSwg
QyogY29sbGVjdGlvbiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKKyAgICB2
b2lkIGFwcGx5R3JvdXBpbmcoKQogICAgIHsKLSAgICAgICAgdWludHB0cl90IGdyb3VwSWQgPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY29sbGVjdGlvbik7Ci0gICAgICAgIG1fZ3JvdXBl
ci5hcHBlbmQoR3JvdXBlckl0ZW0oZ3JvdXBJZCwgd3JhcHBlcikpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY29sbGVjdGlvbi0+bGVuZ3RoKCk7IGkrKykgewotICAgICAgICAg
ICAgd3JhcHBlciA9IHN0b3JlLT5kb21PYmplY3RNYXAoKS5nZXQoY29sbGVjdGlvbi0+aXRlbShp
KSk7Ci0gICAgICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICAgICAgICAg
IG1fZ3JvdXBlci5hcHBlbmQoR3JvdXBlckl0ZW0oZ3JvdXBJZCwgd3JhcHBlcikpOworICAgICAg
ICAvLyBHcm91cCBieSBzb3J0aW5nIGJ5IHRoZSBncm91cCBpZC4KKyAgICAgICAgc3RkOjpzb3J0
KG1fZ3JvdXBlci5iZWdpbigpLCBtX2dyb3VwZXIuZW5kKCkpOworCisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9ncm91cGVyLnNpemUoKTsgKSB7CisgICAgICAgICAgICAvLyBTZWVr
IHRvIHRoZSBuZXh0IGtleSAob3IgdGhlIGVuZCBvZiB0aGUgbGlzdCkuCisgICAgICAgICAgICBz
aXplX3QgbmV4dEtleUluZGV4ID0gbV9ncm91cGVyLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGogPSBpOyBqIDwgbV9ncm91cGVyLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JvdXBlcltpXS5ncm91cElkKCkgIT0gbV9ncm91cGVyW2pdLmdyb3VwSWQoKSkg
eworICAgICAgICAgICAgICAgICAgICBuZXh0S2V5SW5kZXggPSBqOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIEFTU0VSVChuZXh0S2V5SW5kZXggPiBpKTsKKworICAgICAgICAgICAgLy8gV2Ugb25seSBj
YXJlIGFib3V0IGEgZ3JvdXAgaWYgaXQgaGFzIG1vcmUgdGhhbiBvbmUgb2JqZWN0LiBJZiBpdCBv
bmx5CisgICAgICAgICAgICAvLyBoYXMgb25lIG9iamVjdCwgaXQgaGFzIG5vdGhpbmcgZWxzZSB0
aGF0IG5lZWRzIHRvIGJlIGtlcHQgYWxpdmUuCisgICAgICAgICAgICBpZiAobmV4dEtleUluZGV4
IC0gaSA8PSAxKSB7CisgICAgICAgICAgICAgICAgaSA9IG5leHRLZXlJbmRleDsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVmVjdG9yPHY4
OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBncm91cDsKKyAgICAgICAgICAgIGdyb3VwLnJlc2Vy
dmVDYXBhY2l0eShuZXh0S2V5SW5kZXggLSBpKTsKKyAgICAgICAgICAgIGZvciAoOyBpIDwgbmV4
dEtleUluZGV4OyArK2kpIHsKKyAgICAgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6VmFs
dWU+IHdyYXBwZXIgPSBtX2dyb3VwZXJbaV0ud3JhcHBlcigpOworICAgICAgICAgICAgICAgIGlm
ICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZCh3
cmFwcGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGdyb3VwLnNpemUoKSA+
IDEpCisgICAgICAgICAgICAgICAgdjg6OlY4OjpBZGRPYmplY3RHcm91cCgmZ3JvdXBbMF0sIGdy
b3VwLnNpemUoKSk7CisKKyAgICAgICAgICAgIEFTU0VSVChpID09IG5leHRLZXlJbmRleCk7CiAg
ICAgICAgIH0KICAgICB9CisKK3ByaXZhdGU6CisgICAgR3JvdXBlckxpc3QgbV9ncm91cGVyOwog
fTsKIAogLy8gQ3JlYXRlIG9iamVjdCBncm91cHMgZm9yIERPTSB0cmVlIG5vZGVzLgpAQCAtNDQ2
LDEyICszNzUsMTAgQEAgdm9pZCBWOEdDQ29udHJvbGxlcjo6Z2NQcm9sb2d1ZSgpCiAgICAgdmlz
aXRBY3RpdmVET01PYmplY3RzSW5DdXJyZW50VGhyZWFkKCZwcm9sb2d1ZVZpc2l0b3IpOwogCiAg
ICAgLy8gQ3JlYXRlIG9iamVjdCBncm91cHMuCi0gICAgTm9kZUdyb3VwZXJWaXNpdG9yIG5vZGVH
cm91cGVyVmlzaXRvcjsKLSAgICB2aXNpdERPTU5vZGVzSW5DdXJyZW50VGhyZWFkKCZub2RlR3Jv
dXBlclZpc2l0b3IpOwotICAgIG5vZGVHcm91cGVyVmlzaXRvci5hcHBseUdyb3VwaW5nKCk7Ci0K
LSAgICBET01PYmplY3RHcm91cGVyVmlzaXRvciBkb21PYmplY3RHcm91cGVyVmlzaXRvcjsKLSAg
ICB2aXNpdERPTU9iamVjdHNJbkN1cnJlbnRUaHJlYWQoJmRvbU9iamVjdEdyb3VwZXJWaXNpdG9y
KTsKKyAgICBHcm91cGVyVmlzaXRvciBncm91cGVyVmlzaXRvcjsKKyAgICB2aXNpdERPTU5vZGVz
SW5DdXJyZW50VGhyZWFkKCZncm91cGVyVmlzaXRvcik7CisgICAgdmlzaXRET01PYmplY3RzSW5D
dXJyZW50VGhyZWFkKCZncm91cGVyVmlzaXRvcik7CisgICAgZ3JvdXBlclZpc2l0b3IuYXBwbHlH
cm91cGluZygpOwogCiAgICAgLy8gQ2xlYW4gc2luZ2xlIGVsZW1lbnQgY2FjaGUgZm9yIHN0cmlu
ZyBjb252ZXJzaW9ucy4KICAgICBsYXN0U3RyaW5nSW1wbCA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1dyYXBwZXJUeXBlSW5mby5oCmluZGV4IDFkMWNiZmQ0NWEwZGQ4ZDJmNjEy
ZTM2ZTgxYTYzNzE1NmYyODVlMTEuLmVkZDc0MGYyMDFhMWYwNGJjYWIwZjBlODgyNGRhZGVkYmFj
MjgxYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dyYXBwZXJUeXBl
SW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dyYXBwZXJUeXBlSW5mby5o
CkBAIC02MSw2ICs2MSwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJldHVybiB0aGlzID09IHRoYXQ7CiAgICAgICAgIH0KKworICAgICAgICBib29sIGlz
U3ViY2xhc3MoY29uc3QgV3JhcHBlclR5cGVJbmZvKiB0aGF0KSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBmb3IgKGNvbnN0IFdyYXBwZXJUeXBlSW5mbyogY3VycmVudCA9IHRoaXM7IGN1
cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnRDbGFzcykgeworICAgICAgICAgICAgICAg
IGlmIChjdXJyZW50ID09IHRoYXQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBnZXRU
ZW1wbGF0ZSgpIHsgcmV0dXJuIGdldFRlbXBsYXRlRnVuY3Rpb24oKTsgfQogICAgICAgICAKQEAg
LTgwLDYgKzkwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBHZXRUZW1w
bGF0ZUZ1bmN0aW9uIGdldFRlbXBsYXRlRnVuY3Rpb247CiAgICAgICAgIGNvbnN0IERlcmVmT2Jq
ZWN0RnVuY3Rpb24gZGVyZWZPYmplY3RGdW5jdGlvbjsKICAgICAgICAgY29uc3QgVG9BY3RpdmVE
T01PYmplY3RGdW5jdGlvbiB0b0FjdGl2ZURPTU9iamVjdEZ1bmN0aW9uOworICAgICAgICBjb25z
dCBXcmFwcGVyVHlwZUluZm8qIHBhcmVudENsYXNzOwogICAgIH07CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDRmMGJh
MTZhYjljNzE5OTAwMzE0YzEzY2E2NjA5NTBiYjhmMzhlYjAuLmFkYzI2YjcwOTA4NThlZjVjOTg0
MzZmNzA3YWI2ODRmYjI3MTBjNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtNDk1LDE0ICs0OTUsMTggQEAgU3RyaW5nIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwg
Ym9vbCBub3RpZnlDaGEKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKK2Jvb2wgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmlzSW5saW5lU3R5bGVEZWNsYXJhdGlvbigpCit7CisgICAgLy8gRklY
TUU6IElkZWFsbHksIHRoaXMgc2hvdWxkIGJlIGZhY3RvcmVkIGJldHRlciBhbmQgdGhlcmUKKyAg
ICAvLyBzaG91bGQgYmUgYSBzdWJjbGFzcyBvZiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiBq
dXN0CisgICAgLy8gZm9yIGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbnMgdGhhdCBoYW5kbGVzIHRo
aXMKKyAgICByZXR1cm4gbV9ub2RlICYmIG1fbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkgJiYgc3Rh
dGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fbm9kZSktPmlubGluZVN0eWxlRGVjbCgpID09IHRo
aXM7Cit9CisKIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldE5lZWRzU3R5bGVS
ZWNhbGMoKQogewogICAgIGlmIChtX25vZGUpIHsKLSAgICAgICAgLy8gRklYTUU6IElkZWFsbHks
IHRoaXMgc2hvdWxkIGJlIGZhY3RvcmVkIGJldHRlciBhbmQgdGhlcmUKLSAgICAgICAgLy8gc2hv
dWxkIGJlIGEgc3ViY2xhc3Mgb2YgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24ganVzdAotICAg
ICAgICAvLyBmb3IgaW5saW5lIHN0eWxlIGRlY2xhcmF0aW9ucyB0aGF0IGhhbmRsZXMgdGhpcwot
ICAgICAgICBib29sIGlzSW5saW5lU3R5bGVEZWNsYXJhdGlvbiA9IG1fbm9kZS0+aXNTdHlsZWRF
bGVtZW50KCkgJiYgdGhpcyA9PSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obV9ub2RlKS0+
aW5saW5lU3R5bGVEZWNsKCk7Ci0gICAgICAgIGlmIChpc0lubGluZVN0eWxlRGVjbGFyYXRpb24p
IHsKKyAgICAgICAgaWYgKGlzSW5saW5lU3R5bGVEZWNsYXJhdGlvbigpKSB7CiAgICAgICAgICAg
ICBtX25vZGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOwogICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fbm9kZSktPmludmFsaWRhdGVTdHls
ZUF0dHJpYnV0ZSgpOwogICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZG9jdW1lbnQoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgKaW5kZXggMGMz
ZGFkMTNiZDNlNmYwMGEzNGViYWIxMTk4MzRkOWQyY2UxYTM5Mi4uY2ExN2YxMTE5ZjgyOWI2MDRk
MGU0NmEwMTM3NTdiNWU3ODQ2MWQ5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uLmgKQEAgLTE0MCw2ICsxNDAsOCBAQCBwdWJsaWM6CiAgICAg
CiAgICAgYm9vbCBwcm9wZXJ0aWVzRXF1YWwoY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qIG8pIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcyA9PSBvLT5tX3Byb3BlcnRpZXM7IH0K
IAorICAgIGJvb2wgaXNJbmxpbmVTdHlsZURlY2xhcmF0aW9uKCk7CisKIHByb3RlY3RlZDoKICAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGVMaXN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUnVsZUxpc3QuaAppbmRleCBhMzU1YzRhNDQzMjQ3ZjU1ZDZkYjRhMDE1YjE1MzFj
ZDNiODI1NDQ5Li44Nzk5NmE5ZjAxZjg4NjczNDgzNmI4NmRmMmY0NTgyYTlhZDJkMWJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZUxpc3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUnVsZUxpc3QuaApAQCAtNTMsNiArNTMsMTEgQEAgcHVibGljOgogICAgIHZv
aWQgZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCk7CiAgICAgdm9pZCBhcHBlbmQoQ1NTUnVsZSop
OwogCisgICAgU3R5bGVMaXN0KiBzdHlsZUxpc3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
bGlzdC5nZXQoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgQ1NTUnVsZUxpc3QoKTsKICAgICBD
U1NSdWxlTGlzdChTdHlsZUxpc3QqLCBib29sIG9taXRDaGFyc2V0UnVsZXMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVTaGVldExpc3QuaAppbmRleCBhNDg2NTExNjg3NTZlYzBhNzdlYzExZGI0NTlhYTNm
NzM2OTM5YWQwLi5hMDE5NjkxOWQ4ZDNjZWY1ZDZlYjM1NjAxMmU5OWVlZTIwY2U2ODg3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuaApAQCAtNTAsNiArNTAsMTEgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgbV9zaGVldHMuc3dhcChzaGVldHMpOwogICAgIH0KKworICAgIERvY3Vt
ZW50KiBkb2N1bWVudCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9kb2M7CisgICAgfQogICAg
IAogcHJpdmF0ZToKICAgICBTdHlsZVNoZWV0TGlzdChEb2N1bWVudCopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85507</attachid>
            <date>2011-03-11 12:02:40 -0800</date>
            <delta_ts>2011-03-14 18:19:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55399-20110311230238.patch</filename>
            <type>text/plain</type>
            <size>28502</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODA4NDYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkOWQ2ODI1OTY1MGQ1MTQ0YzNmNGY2
ZTc3ZDgyNDM2NmU2NDExMDhiLi41MzQ2MDY1ZTk0YmQyMzQ4MTE1ZmQ3NjNhNzhiMzRhZmU5NzVj
NWY1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDMtMTEgIEFudG9uIE11aGluICA8YW50
b25tQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBbdjhdIFJld29yayBvYmplY3QgZ3JvdXAgYnVpbGRpbmcuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTM5OQorCisgICAgICAgIElu
c3RlYWQgb2YgZ29pbmcgdG9wLWRvd24gKGZyb20gb3duZXIgdG8gb3duZWQgZWxlbWVudHMpLCBn
byB1cC0tLWZyb20gb2JqZWN0cworICAgICAgICB0byB0aGVpciBncm91cCBpZHMuICBUaGF0IGZp
dHMgYmV0dGVyIHRvIHY4J3Mgb2JqZWN0IGdyb3VwaW5nIG1vZGVsIGFuZCBndWFyYW50ZWVzCisg
ICAgICAgIHRoYXQgZWFjaCB3cmFwcGVyIGJlbG9uZ3MgdG8gdGhlIHNpbmdsZSBncm91cC4KKwor
ICAgICAgICBBbGFzLCB0aGlzIGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBmb3Igb25lIGtpbmQgb2Yg
b2JqZWN0cy0tLUNTU1Byb3BlcnRpZXMuCisKKyAgICAgICAgUGFydCBvZiBjb3JlIEdDIGFsZ29y
aXRobSBhbmQgdGVzdGVkIGV4dGVuc2l2ZWx5IGJ5IGV4aXNpdGluZyBsYXlvdXQgdGVzdHMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6IFRlbXBv
cmFyeSBzdXBwcmVzcyB0ZXh0IGRpZmZlcmVuY2VzLgorCiAyMDExLTAzLTExICBEZWFuIEphY2tz
b24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIg
YW5kIENocmlzIE1hcnJpbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCBiMGZmZDUzOTEwY2Q2MmQxMWMxYTEzOWI0YTNl
MzM2M2Y5MzhjM2VhLi43YWM1MmMwNzYyNTM0MmJmODM1NTE2YWY2NjM4ZWNmMDQ4NGQzNjcyIDEw
MDc1NQotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9u
cy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlv
bnMudHh0CkBAIC0zMzk5LDYgKzMzOTksOSBAQCBCVUdDUjc1NjMyIExJTlVYIDogc3ZnL1czQy1T
VkctMS4xL3RleHQtdGV4dC0wMy1iLnN2ZyA9IENSQVNIIFBBU1MKIEJVR0NSNzU2MzkgV0lOIExJ
TlVYIDogZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWwgPSBUSU1FT1VU
CiBCVUdDUjc1NjM5IE1BQyBMRU9QQVJEIDogZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXpl
ZC10ZXN0Lmh0bWwgPSBUSU1FT1VUCiAKKy8vIEkgKGFudG9ubSkgYW0gd29ya2luZyBvbiBwcm9w
ZXIgZml4IGZvciBpdC4gIFRlbXBvcmFyeSBzdXBwcmVzc2luZyB0ZXh0IGRpZmZlcmVuY2VzLgor
QlVHV0s1NTM5OSA6IGZhc3QvZG9tL1N0eWxlU2hlZXQvZ2MtaW5saW5lLXN0eWxlLWNzc3ZhbHVl
cy5odG1sID0gVEVYVAorCiAvLyBUZXN0IGNoYW5nZWQgaW4gV2sgcjgwNzQzLCB0aHJvd3MgYW4g
ZXhjZXB0aW9uIHJhdGhlciB0aGFuIHJldHVybmluZyAndHJ1ZScKIEJVR0NSNzU3NDAgOiBmYXN0
L2pzL3JlZ2V4cC10ZXN0LW51bGwtc3RyaW5nLmh0bWwgPSBGQUlMCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBj
YTg3N2EzYzNjNDc0NWU4OWZmMDdiZmIwYTE4OGU2MzNiNjZlNzQ1Li5lMmVkM2Y2YzZkNDMzMjY2
ZmMxZDY4MWQ4NDMzZDFmMTNmZDJkZDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIw
MTEtMDMtMTEgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbdjhdIFJld29yayBvYmplY3Qg
Z3JvdXAgYnVpbGRpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NTM5OQorCisgICAgICAgIEluc3RlYWQgb2YgZ29pbmcgdG9wLWRvd24gKGZyb20g
b3duZXIgdG8gb3duZWQgZWxlbWVudHMpLCBnbyB1cC0tLWZyb20gb2JqZWN0cworICAgICAgICB0
byB0aGVpciBncm91cCBpZHMuICBUaGF0IGZpdHMgYmV0dGVyIHRvIHY4J3Mgb2JqZWN0IGdyb3Vw
aW5nIG1vZGVsIGFuZCBndWFyYW50ZWVzCisgICAgICAgIHRoYXQgZWFjaCB3cmFwcGVyIGJlbG9u
Z3MgdG8gdGhlIHNpbmdsZSBncm91cC4KKworICAgICAgICBBbGFzLCB0aGlzIGNhbm5vdCBiZSBp
bXBsZW1lbnRlZCBmb3Igb25lIGtpbmQgb2Ygb2JqZWN0cy0tLUNTU1Byb3BlcnRpZXMuCisKKyAg
ICAgICAgUGFydCBvZiBjb3JlIEdDIGFsZ29yaXRobSBhbmQgdGVzdGVkIGV4dGVuc2l2ZWx5IGJ5
IGV4aXNpdGluZyBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhHQ0NvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlR3JvdXBJZCk6CisgICAgICAg
IChXZWJDb3JlOjpjYWxjdWxhdGVSb290U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpH
cm91cGVyVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdyb3Vw
ZXJWaXNpdG9yOjphcHBseUdyb3VwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlY4R0NDb250cm9s
bGVyOjpnY1Byb2xvZ3VlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8u
aDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBwZXJUeXBlSW5mbzo6aXNTdWJjbGFzcyk6CisgICAg
ICAgICogY3NzL0NTU1J1bGVMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NSdWxlTGlzdDo6
c3R5bGVMaXN0KToKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldExpc3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlU2hlZXRMaXN0Ojpkb2N1bWVudCk6CisKIDIwMTEtMDMtMTEgIERlYW4gSmFj
a3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNl
ciBhbmQgQ2hyaXMgTWFycmluLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBlMmZlMjc3ZjA1MDQ2NjliMWIxYWJjODJiYmQ3
YzBjNjM4YjEwN2E4Li45ZDkwODNlYTEwY2IyZWMzMjg4ODI5MTg2MDRjY2EwYjJmMjFjZmE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQpAQCAtMTcxNiw4ICsxNzE2LDIyIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAK
ICAgICBteSAkdG9BY3RpdmUgPSBJc0FjdGl2ZURvbVR5cGUoJGludGVyZmFjZU5hbWUpID8gIiR7
Y2xhc3NOYW1lfTo6dG9BY3RpdmVET01PYmplY3QiIDogIjAiOwogCisgICAgIyBGaW5kIHRoZSBz
dXBlciBkZXNjcmlwdG9yLgorICAgIG15ICRwYXJlbnRDbGFzcyA9ICIiOworICAgIG15ICRwYXJl
bnRDbGFzc1RlbXBsYXRlID0gIiI7CisgICAgZm9yZWFjaCAoQHskZGF0YU5vZGUtPnBhcmVudHN9
KSB7CisgICAgICAgIG15ICRwYXJlbnQgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJF8p
OworICAgICAgICBpZiAoJHBhcmVudCBlcSAiRXZlbnRUYXJnZXQiKSB7CisgICAgICAgICAgICBu
ZXh0OworICAgICAgICB9CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4JHtwYXJlbnR9LmgifSA9
IDE7CisgICAgICAgICRwYXJlbnRDbGFzcyA9ICJWOCIgLiAkcGFyZW50OworICAgICAgICAkcGFy
ZW50Q2xhc3NUZW1wbGF0ZSA9ICRwYXJlbnRDbGFzcyAuICI6OkdldFRlbXBsYXRlKCkiOworICAg
ICAgICBsYXN0OworICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAibmFtZXNwYWNl
IFdlYkNvcmUge1xuXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiV3JhcHBlclR5
cGVJbmZvICR7Y2xhc3NOYW1lfTo6aW5mbyA9IHsgJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0ZSwg
JHtjbGFzc05hbWV9OjpkZXJlZk9iamVjdCwgJHt0b0FjdGl2ZX0gfTtcblxuIik7ICAgCisgICAg
bXkgJHBhcmVudENsYXNzSW5mbyA9ICRwYXJlbnRDbGFzcyA/ICImJHtwYXJlbnRDbGFzc306Omlu
Zm8iIDogIjAiOworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJXcmFwcGVyVHlwZUluZm8g
JHtjbGFzc05hbWV9OjppbmZvID0geyAke2NsYXNzTmFtZX06OkdldFRlbXBsYXRlLCAke2NsYXNz
TmFtZX06OmRlcmVmT2JqZWN0LCAke3RvQWN0aXZlfSwgJHtwYXJlbnRDbGFzc0luZm99IH07XG5c
biIpOyAgIAogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJuYW1lc3BhY2UgJHtpbnRlcmZh
Y2VOYW1lfUludGVybmFsIHtcblxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgInRl
bXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIFY4X1VTRShUKSB7IH1cblxuIik7CiAKQEAgLTE5NDEs
MTUgKzE5NTUsNiBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdFRlbXBsYXRlPiBD
b25maWd1cmVTaGFkb3dPYmplY3RUZW1wbGF0ZSh2ODo6UGVycwogRU5ECiAgICAgfQogCi0gICAg
IyBmaW5kIHRoZSBzdXBlciBkZXNjcmlwdG9yCi0gICAgbXkgJHBhcmVudENsYXNzVGVtcGxhdGUg
PSAiIjsKLSAgICBmb3JlYWNoIChAeyRkYXRhTm9kZS0+cGFyZW50c30pIHsKLSAgICAgICAgbXkg
JHBhcmVudCA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkXyk7Ci0gICAgICAgIGlmICgk
cGFyZW50IGVxICJFdmVudFRhcmdldCIpIHsgbmV4dDsgfQotICAgICAgICAkaW1wbEluY2x1ZGVz
eyJWOCR7cGFyZW50fS5oIn0gPSAxOwotICAgICAgICAkcGFyZW50Q2xhc3NUZW1wbGF0ZSA9ICJW
OCIgLiAkcGFyZW50IC4gIjo6R2V0VGVtcGxhdGUoKSI7Ci0gICAgICAgIGxhc3Q7Ci0gICAgfQog
ICAgIGlmICghJHBhcmVudENsYXNzVGVtcGxhdGUpIHsKICAgICAgICAgJHBhcmVudENsYXNzVGVt
cGxhdGUgPSAidjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCkiOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEludGVyZmFjZS5jcHAKaW5kZXggNGM0MGQ5OGE1NTg4NDA3MTZjNTQ1NmNkYmNlNjdl
YmZhMWMyNmE2YS4uN2U1OTQxNjJiNzU5ODI1MDEzYmQ0MjJmZmRiZGJkYmE3YTJjNTM2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdElu
dGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEludGVyZmFjZS5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1XcmFwcGVyVHlwZUluZm8gVjhUZXN0SW50ZXJmYWNlOjppbmZvID0geyBWOFRlc3RJ
bnRlcmZhY2U6OkdldFRlbXBsYXRlLCBWOFRlc3RJbnRlcmZhY2U6OmRlcmVmT2JqZWN0LCAwIH07
CitXcmFwcGVyVHlwZUluZm8gVjhUZXN0SW50ZXJmYWNlOjppbmZvID0geyBWOFRlc3RJbnRlcmZh
Y2U6OkdldFRlbXBsYXRlLCBWOFRlc3RJbnRlcmZhY2U6OmRlcmVmT2JqZWN0LCAwLCAwIH07CiAK
IG5hbWVzcGFjZSBUZXN0SW50ZXJmYWNlSW50ZXJuYWwgewogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5kZXggYWI5ZTZkYjI4ODEzNmZhMjY5MDkwNmIw
OTY5NjQ0ZjBmOTNkODM4ZS4uMDZjNzFjMGU2NzhjMDJhYmIzNTU3YjAyNjU5ZjlmZjU2Y2MxZmFi
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAt
MzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdyYXBwZXJUeXBlSW5mbyBW
OFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjppbmZvID0geyBWOFRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyOjpHZXRUZW1wbGF0ZSwgVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6ZGVy
ZWZPYmplY3QsIDAgfTsKK1dyYXBwZXJUeXBlSW5mbyBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyOjppbmZvID0geyBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1wbGF0ZSwg
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6ZGVyZWZPYmplY3QsIDAsIDAgfTsKIAogbmFt
ZXNwYWNlIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVySW50ZXJuYWwgewogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmlu
ZGV4IDQyOTg3NTY4ZDY3ZDNiNWUwOWQ5MzM2MGMzNzk1YzdhNWIwNzU4YjEuLjQ5YjViYmU1Mzc2
ZmYxYmEzNmUzZWUxY2I4Y2VjNDQxZDYyNmY2NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC00Niw3ICs0Niw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV3JhcHBlclR5cGVJbmZvIFY4VGVzdE9iajo6
aW5mbyA9IHsgVjhUZXN0T2JqOjpHZXRUZW1wbGF0ZSwgVjhUZXN0T2JqOjpkZXJlZk9iamVjdCwg
MCB9OworV3JhcHBlclR5cGVJbmZvIFY4VGVzdE9iajo6aW5mbyA9IHsgVjhUZXN0T2JqOjpHZXRU
ZW1wbGF0ZSwgVjhUZXN0T2JqOjpkZXJlZk9iamVjdCwgMCwgMCB9OwogCiBuYW1lc3BhY2UgVGVz
dE9iakludGVybmFsIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhHQ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRy
b2xsZXIuY3BwCmluZGV4IDQ0YzBlNGViNTkxZmFmZWVlOTBkNmNlNThhNDQxMjI4ZDEyNjg3Zjcu
LjQ4Y2JmNDQwMzNhMTk5MDk4NjhkYzQzZjJmNjhmNTA2ZjhlZDA4NWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKQEAgLTM0LDI3ICszNCwxOCBA
QAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNs
dWRlICJET01EYXRhU3RvcmUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkRPTUlt
cGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1CcmlkZ2UuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5n
LmgiCi0jaW5jbHVkZSAiVjhDU1NDaGFyc2V0UnVsZS5oIgotI2luY2x1ZGUgIlY4Q1NTRm9udEZh
Y2VSdWxlLmgiCi0jaW5jbHVkZSAiVjhDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiVjhDU1NN
ZWRpYVJ1bGUuaCIKKyNpbmNsdWRlICJWOENTU1J1bGUuaCIKICNpbmNsdWRlICJWOENTU1J1bGVM
aXN0LmgiCiAjaW5jbHVkZSAiVjhDU1NTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiVjhD
U1NTdHlsZVJ1bGUuaCIKLSNpbmNsdWRlICJWOENTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJW
OERPTU1hcC5oIgotI2luY2x1ZGUgIlY4SFRNTExpbmtFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhI
VE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhET01JbXBsZW1lbnRhdGlvbi5oIgogI2lu
Y2x1ZGUgIlY4TWVzc2FnZVBvcnQuaCIKLSNpbmNsdWRlICJWOFByb2Nlc3NpbmdJbnN0cnVjdGlv
bi5oIgotI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJWOFN0eWxlU2hlZXQuaCIKICNp
bmNsdWRlICJWOFN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgi
CiAKQEAgLTE5OCwxMzYgKzE4OSwzMyBAQCBib29sIG9wZXJhdG9yPChjb25zdCBHcm91cGVySXRl
bSYgYSwgY29uc3QgR3JvdXBlckl0ZW0mIGIpCiAKIHR5cGVkZWYgVmVjdG9yPEdyb3VwZXJJdGVt
PiBHcm91cGVyTGlzdDsKIAotdm9pZCBtYWtlVjhPYmplY3RHcm91cHMoR3JvdXBlckxpc3QmIGdy
b3VwZXIpCisvLyBJZiB0aGUgbm9kZSBpcyBpbiBkb2N1bWVudCwgcHV0IGl0IGluIHRoZSBvd25l
ckRvY3VtZW50J3Mgb2JqZWN0IGdyb3VwLgorLy8KKy8vIElmIGFuIGltYWdlIGVsZW1lbnQgd2Fz
IGNyZWF0ZWQgYnkgSmF2YVNjcmlwdCAibmV3IEltYWdlIiwKKy8vIGl0IGlzIG5vdCBpbiBhIGRv
Y3VtZW50LiBIb3dldmVyLCBpZiB0aGUgbG9hZCBldmVudCBoYXMgbm90CisvLyBiZWVuIGZpcmVk
IChzdGlsbCBvbmxvYWRpbmcpLCBpdCBpcyB0cmVhdGVkIGFzIGluIHRoZSBkb2N1bWVudC4KKy8v
CisvLyBPdGhlcndpc2UsIHRoZSBub2RlIGlzIHB1dCBpbiBhbiBvYmplY3QgZ3JvdXAgaWRlbnRp
ZmllZCBieSB0aGUgcm9vdAorLy8gZWxlbWVudCBvZiB0aGUgdHJlZSB0byB3aGljaCBpdCBiZWxv
bmdzLgorc3RhdGljIHVpbnRwdHJfdCBjYWxjdWxhdGVHcm91cElkKE5vZGUqIG5vZGUpCiB7Ci0g
ICAgLy8gR3JvdXAgYnkgc29ydGluZyBieSB0aGUgZ3JvdXAgaWQuCi0gICAgc3RkOjpzb3J0KGdy
b3VwZXIuYmVnaW4oKSwgZ3JvdXBlci5lbmQoKSk7Ci0KLSAgICAvLyBGSVhNRSBTaG91bGQgcHJv
YmFibHkgd29yayBpbiBpdGVyYXRvcnMgaGVyZSwgYnV0IGluZGV4ZXMgd2VyZSBlYXNpZXIgZm9y
IG15IHNpbXBsZSBtaW5kLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3JvdXBlci5zaXpl
KCk7ICkgewotICAgICAgICAvLyBTZWVrIHRvIHRoZSBuZXh0IGtleSAob3IgdGhlIGVuZCBvZiB0
aGUgbGlzdCkuCi0gICAgICAgIHNpemVfdCBuZXh0S2V5SW5kZXggPSBncm91cGVyLnNpemUoKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaiA9IGk7IGogPCBncm91cGVyLnNpemUoKTsgKytqKSB7Ci0g
ICAgICAgICAgICBpZiAoZ3JvdXBlcltpXS5ncm91cElkKCkgIT0gZ3JvdXBlcltqXS5ncm91cElk
KCkpIHsKLSAgICAgICAgICAgICAgICBuZXh0S2V5SW5kZXggPSBqOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKG5leHRL
ZXlJbmRleCA+IGkpOwotCi0gICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBhIGdyb3VwIGlm
IGl0IGhhcyBtb3JlIHRoYW4gb25lIG9iamVjdC4gSWYgaXQgb25seQotICAgICAgICAvLyBoYXMg
b25lIG9iamVjdCwgaXQgaGFzIG5vdGhpbmcgZWxzZSB0aGF0IG5lZWRzIHRvIGJlIGtlcHQgYWxp
dmUuCi0gICAgICAgIGlmIChuZXh0S2V5SW5kZXggLSBpIDw9IDEpIHsKLSAgICAgICAgICAgIGkg
PSBuZXh0S2V5SW5kZXg7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4gZ3JvdXA7Ci0gICAgICAgIGdy
b3VwLnJlc2VydmVDYXBhY2l0eShuZXh0S2V5SW5kZXggLSBpKTsKLSAgICAgICAgZm9yICg7IGkg
PCBuZXh0S2V5SW5kZXg7ICsraSkgewotICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZh
bHVlPiB3cmFwcGVyID0gZ3JvdXBlcltpXS53cmFwcGVyKCk7Ci0gICAgICAgICAgICBpZiAoIXdy
YXBwZXIuSXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChncm91cC5zaXplKCkgPiAxKQotICAgICAgICAgICAg
djg6OlY4OjpBZGRPYmplY3RHcm91cCgmZ3JvdXBbMF0sIGdyb3VwLnNpemUoKSk7Ci0KLSAgICAg
ICAgQVNTRVJUKGkgPT0gbmV4dEtleUluZGV4KTsKKyAgICBpZiAobm9kZS0+aW5Eb2N1bWVudCgp
IHx8IChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nVGFnKSAmJiAhc3RhdGljX2Nhc3Q8
SFRNTEltYWdlRWxlbWVudCo+KG5vZGUpLT5oYXZlRmlyZWRMb2FkRXZlbnQoKSkpCisgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+ZG9jdW1lbnQoKSk7CisK
KyAgICBOb2RlKiByb290ID0gbm9kZTsKKyAgICBpZiAobm9kZS0+aXNBdHRyaWJ1dGVOb2RlKCkp
IHsKKyAgICAgICAgcm9vdCA9IHN0YXRpY19jYXN0PEF0dHIqPihub2RlKS0+b3duZXJFbGVtZW50
KCk7CisgICAgICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUgaGFzIG5vIGVsZW1lbnQsIG5vIG5lZWQg
dG8gcHV0IGl0IGluIHRoZSBncm91cCwKKyAgICAgICAgLy8gYmVjYXVzZSBpdCdsbCBhbHdheXMg
YmUgYSBncm91cCBvZiAxLgorICAgICAgICBpZiAoIXJvb3QpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICB9IGVsc2UgeworICAgICAgICB3aGlsZSAoTm9kZSogcGFyZW50ID0gcm9vdC0+cGFy
ZW50Tm9kZSgpKQorICAgICAgICAgICAgcm9vdCA9IHBhcmVudDsKICAgICB9Ci19Ci0KLWNsYXNz
IE5vZGVHcm91cGVyVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPE5vZGU+OjpWaXNpdG9y
IHsKLXB1YmxpYzoKLSAgICBOb2RlR3JvdXBlclZpc2l0b3IoKQotICAgIHsKLSAgICAgICAgLy8g
RklYTUU6IGdyb3VwZXJfLnJlc2VydmVDYXBhY2l0eShub2RlX21hcC5zaXplKCkpOyAgPwotICAg
IH0KLQotICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUsIE5vZGUq
IG5vZGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCi0gICAgewotICAgICAg
ICAvLyBJZiB0aGUgbm9kZSBpcyBpbiBkb2N1bWVudCwgcHV0IGl0IGluIHRoZSBvd25lckRvY3Vt
ZW50J3Mgb2JqZWN0IGdyb3VwLgotICAgICAgICAvLwotICAgICAgICAvLyBJZiBhbiBpbWFnZSBl
bGVtZW50IHdhcyBjcmVhdGVkIGJ5IEphdmFTY3JpcHQgIm5ldyBJbWFnZSIsCi0gICAgICAgIC8v
IGl0IGlzIG5vdCBpbiBhIGRvY3VtZW50LiBIb3dldmVyLCBpZiB0aGUgbG9hZCBldmVudCBoYXMg
bm90Ci0gICAgICAgIC8vIGJlZW4gZmlyZWQgKHN0aWxsIG9ubG9hZGluZyksIGl0IGlzIHRyZWF0
ZWQgYXMgaW4gdGhlIGRvY3VtZW50LgotICAgICAgICAvLwotICAgICAgICAvLyBPdGhlcndpc2Us
IHRoZSBub2RlIGlzIHB1dCBpbiBhbiBvYmplY3QgZ3JvdXAgaWRlbnRpZmllZCBieSB0aGUgcm9v
dAotICAgICAgICAvLyBlbGVtZW50IG9mIHRoZSB0cmVlIHRvIHdoaWNoIGl0IGJlbG9uZ3MuCi0g
ICAgICAgIHVpbnRwdHJfdCBncm91cElkOwotICAgICAgICBpZiAobm9kZS0+aW5Eb2N1bWVudCgp
IHx8IChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nVGFnKSAmJiAhc3RhdGljX2Nhc3Q8
SFRNTEltYWdlRWxlbWVudCo+KG5vZGUpLT5oYXZlRmlyZWRMb2FkRXZlbnQoKSkpCi0gICAgICAg
ICAgICBncm91cElkID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPmRvY3VtZW50
KCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIE5vZGUqIHJvb3QgPSBub2RlOwotICAg
ICAgICAgICAgaWYgKG5vZGUtPmlzQXR0cmlidXRlTm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAg
cm9vdCA9IHN0YXRpY19jYXN0PEF0dHIqPihub2RlKS0+b3duZXJFbGVtZW50KCk7Ci0gICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIGF0dHJpYnV0ZSBoYXMgbm8gZWxlbWVudCwgbm8gbmVlZCB0byBw
dXQgaXQgaW4gdGhlIGdyb3VwLAotICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgaXQnbGwgYWx3
YXlzIGJlIGEgZ3JvdXAgb2YgMS4KLSAgICAgICAgICAgICAgICBpZiAoIXJvb3QpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgd2hpbGUgKHJvb3QtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcm9vdCA9
IHJvb3QtPnBhcmVudE5vZGUoKTsKLQotICAgICAgICAgICAgICAgIC8vIElmIHRoZSBub2RlIGlz
IGFsb25lIGluIGl0cyBET00gdHJlZSAoZG9lc24ndCBoYXZlIGEgcGFyZW50IG9yIGFueQotICAg
ICAgICAgICAgICAgIC8vIGNoaWxkcmVuKSB0aGVuIHRoZSBncm91cCB3aWxsIGJlIGZpbHRlcmVk
IG91dCBsYXRlciBhbnl3YXkuCi0gICAgICAgICAgICAgICAgaWYgKHJvb3QgPT0gbm9kZSAmJiAh
bm9kZS0+aGFzQ2hpbGROb2RlcygpICYmICFub2RlLT5oYXNBdHRyaWJ1dGVzKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdyb3VwSWQg
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocm9vdCk7Ci0gICAgICAgIH0KLSAgICAgICAg
bV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CiAKLSAgICAg
ICAgLy8gSWYgdGhlIG5vZGUgaXMgc3R5bGVkIGFuZCB0aGVyZSBpcyBhIHdyYXBwZXIgZm9yIHRo
ZSBpbmxpbmUKLSAgICAgICAgLy8gc3R5bGUgZGVjbGFyYXRpb24sIHdlIG5lZWQgdG8ga2VlcCB0
aGF0IHN0eWxlIGRlY2xhcmF0aW9uCi0gICAgICAgIC8vIHdyYXBwZXIgYWxpdmUgYXMgd2VsbCwg
c28gd2UgYWRkIGl0IHRvIHRoZSBvYmplY3QgZ3JvdXAuCi0gICAgICAgIGlmIChub2RlLT5pc1N0
eWxlZEVsZW1lbnQoKSkgewotICAgICAgICAgICAgU3R5bGVkRWxlbWVudCogZWxlbWVudCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpOwotICAgICAgICAgICAgYWRkRE9N
T2JqZWN0VG9Hcm91cChzdG9yZSwgZ3JvdXBJZCwgZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5vZGUtPmlzRG9jdW1lbnROb2RlKCkpIHsKLSAg
ICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RG9jdW1lbnQq
Pihub2RlKTsKLSAgICAgICAgICAgIGFkZERPTU9iamVjdFRvR3JvdXAoc3RvcmUsIGdyb3VwSWQs
IGRvY3VtZW50LT5zdHlsZVNoZWV0cygpKTsKLSAgICAgICAgICAgIGFkZERPTU9iamVjdFRvR3Jv
dXAoc3RvcmUsIGdyb3VwSWQsIGRvY3VtZW50LT5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZUluZm8gPSBWOERPTVdyYXBwZXI6OmRv
bVdyYXBwZXJUeXBlKHdyYXBwZXIpOwotCi0gICAgICAgIGlmIChWOEhUTUxMaW5rRWxlbWVudDo6
aW5mby5lcXVhbHModHlwZUluZm8pKSB7Ci0gICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQqIGh0
bWxMaW5rRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudCo+KG5vZGUpOwotICAg
ICAgICAgICAgYWRkRE9NT2JqZWN0VG9Hcm91cChzdG9yZSwgZ3JvdXBJZCwgaHRtbExpbmtFbGVt
ZW50LT5zaGVldCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChWOEhUTUxTdHlsZUVsZW1l
bnQ6OmluZm8uZXF1YWxzKHR5cGVJbmZvKSkgewotICAgICAgICAgICAgSFRNTFN0eWxlRWxlbWVu
dCogaHRtbFN0eWxlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihub2Rl
KTsKLSAgICAgICAgICAgIGFkZERPTU9iamVjdFRvR3JvdXAoc3RvcmUsIGdyb3VwSWQsIGh0bWxT
dHlsZUVsZW1lbnQtPnNoZWV0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFY4UHJvY2Vz
c2luZ0luc3RydWN0aW9uOjppbmZvLmVxdWFscyh0eXBlSW5mbykpIHsKLSAgICAgICAgICAgIFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbiogcHJvY2Vzc2luZ0luc3RydWN0aW9uID0gc3RhdGljX2Nhc3Q8
UHJvY2Vzc2luZ0luc3RydWN0aW9uKj4obm9kZSk7Ci0gICAgICAgICAgICBhZGRET01PYmplY3RU
b0dyb3VwKHN0b3JlLCBncm91cElkLCBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24tPnNoZWV0KCkpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseUdyb3VwaW5nKCkKLSAgICB7Ci0gICAg
ICAgIG1ha2VWOE9iamVjdEdyb3VwcyhtX2dyb3VwZXIpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBHcm91cGVyTGlzdCBtX2dyb3VwZXI7Ci0KLSAgICB2b2lkIGFkZERPTU9iamVjdFRvR3JvdXAo
RE9NRGF0YVN0b3JlKiBzdG9yZSwgdWludHB0cl90IGdyb3VwSWQsIHZvaWQqIG9iamVjdCkKLSAg
ICB7Ci0gICAgICAgIGlmICghb2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gc3RvcmUtPmRvbU9iamVjdE1hcCgp
LmdldChvYmplY3QpOwotICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICAg
ICAgbV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7Ci0gICAg
fQotfTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJvb3QpOworfQog
CiBzdGF0aWMgdWludHB0cl90IGNhbGN1bGF0ZUdyb3VwSWQoU3R5bGVCYXNlKiBzdHlsZUJhc2Up
CiB7CkBAIC0zMzUsMTUgKzIyMywxNiBAQCBzdGF0aWMgdWludHB0cl90IGNhbGN1bGF0ZUdyb3Vw
SWQoU3R5bGVCYXNlKiBzdHlsZUJhc2UpCiAgICAgU3R5bGVCYXNlKiBjdXJyZW50ID0gc3R5bGVC
YXNlOwogICAgIFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgIC8vIFNwZWNpYWwgY2FzZTogQ1NTU3R5bGVEZWNsYXJhdGlvbnMgc2hvdWxkIGhh
dmUgQ1NTUnVsZSBhcyBhIHBhcmVudAotICAgICAgICAvLyB0byBwcm9jZWVkIHdpdGggcGFyZW50
IHRyYXZlcnNhbCwgb3RoZXJ3aXNlIHRoZXkgYXJlIGNvbWluZyBmcm9tCi0gICAgICAgIC8vIGlu
bGluZWQgc3R5bGUgZGVjbGFyYXRpb24gYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgcm9vdC4K
KyAgICAgICAgLy8gU3BlY2lhbCBjYXNlOiBDU1NTdHlsZURlY2xhcmF0aW9ucyBtaWdodCBiZSBl
aXRoZXIgaW5saW5lIGFuZCBpbiB0aGlzIGNhc2UKKyAgICAgICAgLy8gd2UgbmVlZCB0byBncm91
cCB0aGVtIHdpdGggdGhlaXIgbm9kZSBvciByZWd1bGFyIG9uZXMuCiAgICAgICAgIGlmIChjdXJy
ZW50LT5pc011dGFibGVTdHlsZURlY2xhcmF0aW9uKCkpIHsKICAgICAgICAgICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBjc3NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiA9IHN0YXRpY19j
YXN0PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4oY3VycmVudCk7Ci0gICAgICAgICAgICBp
ZiAoQ1NTUnVsZSogcGFyZW50UnVsZSA9IGNzc011dGFibGVTdHlsZURlY2xhcmF0aW9uLT5wYXJl
bnRSdWxlKCkpCi0gICAgICAgICAgICAgICAgY3VycmVudCA9IHBhcmVudFJ1bGU7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pihjc3NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbik7CisgICAgICAgICAgICBpZiAoY3NzTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24tPmlzSW5saW5lU3R5bGVEZWNsYXJhdGlvbigpKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGNzc011dGFibGVTdHlsZURlY2xhcmF0aW9uLT5wYXJlbnQoKS0+
aXNTdHlsZVNoZWV0KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVHcm91cElk
KGNzc011dGFibGVTdHlsZURlY2xhcmF0aW9uLT5ub2RlKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgLy8gRWl0aGVyIHdlIGhhdmUgbm8gcGFyZW50LCBvciB0aGlzIHBhcmVudCBpcyBh
IENTU1J1bGUuCisgICAgICAgICAgICBBU1NFUlQoY3NzTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24t
PnBhcmVudCgpID09IGNzc011dGFibGVTdHlsZURlY2xhcmF0aW9uLT5wYXJlbnRSdWxlKCkpOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKGN1cnJlbnQtPmlzU3R5bGVTaGVldCgpKQpAQCAtMzU1
LDc5ICsyNDQsMTAzIEBAIHN0YXRpYyB1aW50cHRyX3QgY2FsY3VsYXRlR3JvdXBJZChTdHlsZUJh
c2UqIHN0eWxlQmFzZSkKICAgICAgICAgY3VycmVudCA9IHBhcmVudDsKICAgICB9CiAKLSAgICBp
ZiAoc3R5bGVTaGVldCkKKyAgICBpZiAoc3R5bGVTaGVldCkgeworICAgICAgICBpZiAoTm9kZSog
b3duZXJOb2RlID0gc3R5bGVTaGVldC0+b3duZXJOb2RlKCkpCisgICAgICAgICAgICByZXR1cm4g
Y2FsY3VsYXRlR3JvdXBJZChvd25lck5vZGUpOwogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHN0eWxlU2hlZXQpOworICAgIH0KIAogICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oY3VycmVudCk7CiB9CiAKLWNsYXNzIERPTU9iamVjdEdyb3Vw
ZXJWaXNpdG9yIDogcHVibGljIERPTVdyYXBwZXJNYXA8dm9pZD46OlZpc2l0b3IgeworY2xhc3Mg
R3JvdXBlclZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciwgcHVi
bGljIERPTVdyYXBwZXJNYXA8dm9pZD46OlZpc2l0b3IgewogcHVibGljOgotICAgIERPTU9iamVj
dEdyb3VwZXJWaXNpdG9yKCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBzdGFydE1hcCgpCi0g
ICAgewotICAgICAgICBtX2dyb3VwZXIuc2hyaW5rKDApOwotICAgIH0KLQotICAgIHZvaWQgZW5k
TWFwKCkKKyAgICB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqIHN0b3JlLCBOb2Rl
KiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogICAgIHsKLSAgICAg
ICAgbWFrZVY4T2JqZWN0R3JvdXBzKG1fZ3JvdXBlcik7CisgICAgICAgIHVpbnRwdHJfdCBncm91
cElkID0gY2FsY3VsYXRlR3JvdXBJZChub2RlKTsKKyAgICAgICAgaWYgKCFncm91cElkKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdy
b3VwSWQsIHdyYXBwZXIpKTsKICAgICB9CiAKICAgICB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01E
YXRhU3RvcmUqIHN0b3JlLCB2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
IHdyYXBwZXIpCiAgICAgewogICAgICAgICBXcmFwcGVyVHlwZUluZm8qIHR5cGVJbmZvID0gVjhE
T01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKLSAgICAgICAgLy8gRklYTUU6IGV4
dGVuZCBXcmFwcGVyVHlwZUluZm8gd2l0aCBpc1N0eWxlIHRvIHNpbXBsaWZ5IHRoZSBjaGVjayBi
ZWxvdyBvciBjb25zaWRlcgotICAgICAgICAvLyBhZGRpbmcgYSB2aXJ0dWFsIG1ldGhvZCB0byBX
cmFwcGVyVHlwZUluZm8gd2hpY2ggd291bGQga25vdyBob3cgdG8gZ3JvdXAgb2JqZWN0cy4KLSAg
ICAgICAgLy8gRklYTUU6IGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBTdHlsZUJhc2Ugd3JhcHBl
cnMgd2Ugc2hvdWxkIGNhcmUgb2YuCi0gICAgICAgIGlmIChWOENTU1N0eWxlU2hlZXQ6OmluZm8u
ZXF1YWxzKHR5cGVJbmZvKQotICAgICAgICAgICAgfHwgVjhDU1NTdHlsZURlY2xhcmF0aW9uOjpp
bmZvLmVxdWFscyh0eXBlSW5mbykKLSAgICAgICAgICAgIHx8IFY4Q1NTQ2hhcnNldFJ1bGU6Omlu
Zm8uZXF1YWxzKHR5cGVJbmZvKQotICAgICAgICAgICAgfHwgVjhDU1NGb250RmFjZVJ1bGU6Omlu
Zm8uZXF1YWxzKHR5cGVJbmZvKQotICAgICAgICAgICAgfHwgVjhDU1NTdHlsZVJ1bGU6OmluZm8u
ZXF1YWxzKHR5cGVJbmZvKQotICAgICAgICAgICAgfHwgVjhDU1NJbXBvcnRSdWxlOjppbmZvLmVx
dWFscyh0eXBlSW5mbykKLSAgICAgICAgICAgIHx8IFY4Q1NTTWVkaWFSdWxlOjppbmZvLmVxdWFs
cyh0eXBlSW5mbykpIHsKLSAgICAgICAgICAgIFN0eWxlQmFzZSogc3R5bGVCYXNlID0gc3RhdGlj
X2Nhc3Q8U3R5bGVCYXNlKj4ob2JqZWN0KTsKLQotICAgICAgICAgICAgdWludHB0cl90IGdyb3Vw
SWQgPSBjYWxjdWxhdGVHcm91cElkKHN0eWxlQmFzZSk7CisKKyAgICAgICAgaWYgKHR5cGVJbmZv
LT5pc1N1YmNsYXNzKCZWOFN0eWxlU2hlZXRMaXN0OjppbmZvKSkgeworICAgICAgICAgICAgU3R5
bGVTaGVldExpc3QqIHN0eWxlU2hlZXRMaXN0ID0gc3RhdGljX2Nhc3Q8U3R5bGVTaGVldExpc3Qq
PihvYmplY3QpOworICAgICAgICAgICAgdWludHB0cl90IGdyb3VwSWQgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oc3R5bGVTaGVldExpc3QpOworICAgICAgICAgICAgaWYgKERvY3VtZW50
KiBkb2N1bWVudCA9IHN0eWxlU2hlZXRMaXN0LT5kb2N1bWVudCgpKQorICAgICAgICAgICAgICAg
IGdyb3VwSWQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZG9jdW1lbnQpOworICAgICAg
ICAgICAgbV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CisK
KyAgICAgICAgfSBlbHNlIGlmICh0eXBlSW5mby0+aXNTdWJjbGFzcygmVjhET01JbXBsZW1lbnRh
dGlvbjo6aW5mbykpIHsKKyAgICAgICAgICAgIERPTUltcGxlbWVudGF0aW9uKiBkb21JbXBsZW1l
bnRhdGlvbiA9IHN0YXRpY19jYXN0PERPTUltcGxlbWVudGF0aW9uKj4ob2JqZWN0KTsKKyAgICAg
ICAgICAgIHVpbnRwdHJfdCBncm91cElkID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRv
bUltcGxlbWVudGF0aW9uKTsKKyAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBk
b21JbXBsZW1lbnRhdGlvbi0+b3duZXJEb2N1bWVudCgpKQorICAgICAgICAgICAgICAgIGdyb3Vw
SWQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZG9jdW1lbnQpOworICAgICAgICAgICAg
bV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CisKKyAgICAg
ICAgfSBlbHNlIGlmICh0eXBlSW5mby0+aXNTdWJjbGFzcygmVjhTdHlsZVNoZWV0OjppbmZvKSB8
fCB0eXBlSW5mby0+aXNTdWJjbGFzcygmVjhDU1NSdWxlOjppbmZvKSkgeworICAgICAgICAgICAg
bV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShjYWxjdWxhdGVHcm91cElkKHN0YXRpY19jYXN0
PFN0eWxlQmFzZSo+KG9iamVjdCkpLCB3cmFwcGVyKSk7CisKKyAgICAgICAgfSBlbHNlIGlmICh0
eXBlSW5mby0+aXNTdWJjbGFzcygmVjhDU1NTdHlsZURlY2xhcmF0aW9uOjppbmZvKSkgeworICAg
ICAgICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogY3NzU3R5bGVEZWNsYXJhdGlvbiA9IHN0YXRp
Y19jYXN0PENTU1N0eWxlRGVjbGFyYXRpb24qPihvYmplY3QpOworCisgICAgICAgICAgICB1aW50
cHRyX3QgZ3JvdXBJZCA9IGNhbGN1bGF0ZUdyb3VwSWQoY3NzU3R5bGVEZWNsYXJhdGlvbik7Cisg
ICAgICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIp
KTsKKworICAgICAgICB9IGVsc2UgaWYgKHR5cGVJbmZvLT5pc1N1YmNsYXNzKCZWOENTU1J1bGVM
aXN0OjppbmZvKSkgeworICAgICAgICAgICAgQ1NTUnVsZUxpc3QqIGNzc1J1bGVMaXN0ID0gc3Rh
dGljX2Nhc3Q8Q1NTUnVsZUxpc3QqPihvYmplY3QpOworICAgICAgICAgICAgdWludHB0cl90IGdy
b3VwSWQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY3NzUnVsZUxpc3QpOworICAgICAg
ICAgICAgU3R5bGVMaXN0KiBzdHlsZUxpc3QgPSBjc3NSdWxlTGlzdC0+c3R5bGVMaXN0KCk7Cisg
ICAgICAgICAgICBpZiAoc3R5bGVMaXN0KQorICAgICAgICAgICAgICAgIGdyb3VwSWQgPSBjYWxj
dWxhdGVHcm91cElkKHN0eWxlTGlzdCk7CiAgICAgICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdy
b3VwZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIpKTsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAg
ICAgICAgaWYgKFY4Q1NTU3R5bGVEZWNsYXJhdGlvbjo6aW5mby5lcXVhbHModHlwZUluZm8pKSB7
Ci0gICAgICAgICAgICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogY3NzU3R5bGVEZWNsYXJhdGlv
biA9IHN0YXRpY19jYXN0PENTU1N0eWxlRGVjbGFyYXRpb24qPihzdHlsZUJhc2UpOwotICAgICAg
ICAgICAgICAgIGlmIChjc3NTdHlsZURlY2xhcmF0aW9uLT5pc011dGFibGVTdHlsZURlY2xhcmF0
aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IGNzc011dGFibGVTdHlsZURlY2xhcmF0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qPihjc3NTdHlsZURlY2xhcmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNzc011dGFi
bGVTdHlsZURlY2xhcmF0aW9uLT5lbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjc3NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbi0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyID0gc3RvcmUtPmRvbU9iamVjdE1hcCgpLmdldChpdC0+dmFsdWUo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JvdXBlci5hcHBlbmQoR3JvdXBlckl0ZW0oZ3Jv
dXBJZCwgd3JhcHBlcikpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgdm9pZCBhcHBseUdy
b3VwaW5nKCkKKyAgICB7CisgICAgICAgIC8vIEdyb3VwIGJ5IHNvcnRpbmcgYnkgdGhlIGdyb3Vw
IGlkLgorICAgICAgICBzdGQ6OnNvcnQobV9ncm91cGVyLmJlZ2luKCksIG1fZ3JvdXBlci5lbmQo
KSk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyb3VwZXIuc2l6ZSgpOyAp
IHsKKyAgICAgICAgICAgIC8vIFNlZWsgdG8gdGhlIG5leHQga2V5IChvciB0aGUgZW5kIG9mIHRo
ZSBsaXN0KS4KKyAgICAgICAgICAgIHNpemVfdCBuZXh0S2V5SW5kZXggPSBtX2dyb3VwZXIuc2l6
ZSgpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGk7IGogPCBtX2dyb3VwZXIuc2l6ZSgp
OyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAobV9ncm91cGVyW2ldLmdyb3VwSWQoKSAhPSBt
X2dyb3VwZXJbal0uZ3JvdXBJZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG5leHRLZXlJbmRl
eCA9IGo7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChWOFN0eWxlU2hlZXRMaXN0OjppbmZvLmVx
dWFscyh0eXBlSW5mbykpIHsKLSAgICAgICAgICAgIGFkZEFsbEl0ZW1zKHN0b3JlLCBzdGF0aWNf
Y2FzdDxTdHlsZVNoZWV0TGlzdCo+KG9iamVjdCksIHdyYXBwZXIpOwotICAgICAgICB9IGVsc2Ug
aWYgKFY4Q1NTUnVsZUxpc3Q6OmluZm8uZXF1YWxzKHR5cGVJbmZvKSkgewotICAgICAgICAgICAg
YWRkQWxsSXRlbXMoc3RvcmUsIHN0YXRpY19jYXN0PENTU1J1bGVMaXN0Kj4ob2JqZWN0KSwgd3Jh
cHBlcik7CisKKyAgICAgICAgICAgIEFTU0VSVChuZXh0S2V5SW5kZXggPiBpKTsKKworICAgICAg
ICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IGEgZ3JvdXAgaWYgaXQgaGFzIG1vcmUgdGhhbiBv
bmUgb2JqZWN0LiBJZiBpdCBvbmx5CisgICAgICAgICAgICAvLyBoYXMgb25lIG9iamVjdCwgaXQg
aGFzIG5vdGhpbmcgZWxzZSB0aGF0IG5lZWRzIHRvIGJlIGtlcHQgYWxpdmUuCisgICAgICAgICAg
ICBpZiAobmV4dEtleUluZGV4IC0gaSA8PSAxKSB7CisgICAgICAgICAgICAgICAgaSA9IG5leHRL
ZXlJbmRleDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgVmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBncm91cDsKKyAgICAg
ICAgICAgIGdyb3VwLnJlc2VydmVDYXBhY2l0eShuZXh0S2V5SW5kZXggLSBpKTsKKyAgICAgICAg
ICAgIGZvciAoOyBpIDwgbmV4dEtleUluZGV4OyArK2kpIHsKKyAgICAgICAgICAgICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6VmFsdWU+IHdyYXBwZXIgPSBtX2dyb3VwZXJbaV0ud3JhcHBlcigpOwor
ICAgICAgICAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
ICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGdyb3VwLnNpemUoKSA+IDEpCisgICAgICAgICAgICAgICAgdjg6OlY4OjpBZGRPYmplY3RH
cm91cCgmZ3JvdXBbMF0sIGdyb3VwLnNpemUoKSk7CisKKyAgICAgICAgICAgIEFTU0VSVChpID09
IG5leHRLZXlJbmRleCk7CiAgICAgICAgIH0KICAgICB9CiAKIHByaXZhdGU6CiAgICAgR3JvdXBl
ckxpc3QgbV9ncm91cGVyOwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIEM+Ci0gICAgdm9pZCBhZGRB
bGxJdGVtcyhET01EYXRhU3RvcmUqIHN0b3JlLCBDKiBjb2xsZWN0aW9uLCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0PiB3cmFwcGVyKQotICAgIHsKLSAgICAgICAgdWludHB0cl90IGdyb3VwSWQg
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY29sbGVjdGlvbik7Ci0gICAgICAgIG1fZ3Jv
dXBlci5hcHBlbmQoR3JvdXBlckl0ZW0oZ3JvdXBJZCwgd3JhcHBlcikpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sbGVjdGlvbi0+bGVuZ3RoKCk7IGkrKykgewotICAgICAg
ICAgICAgd3JhcHBlciA9IHN0b3JlLT5kb21PYmplY3RNYXAoKS5nZXQoY29sbGVjdGlvbi0+aXRl
bShpKSk7Ci0gICAgICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgIG1fZ3JvdXBlci5hcHBlbmQoR3JvdXBlckl0ZW0oZ3JvdXBJZCwgd3JhcHBlcikpOwotICAg
ICAgICB9Ci0gICAgfQogfTsKIAogLy8gQ3JlYXRlIG9iamVjdCBncm91cHMgZm9yIERPTSB0cmVl
IG5vZGVzLgpAQCAtNDQ2LDEyICszNTksMTAgQEAgdm9pZCBWOEdDQ29udHJvbGxlcjo6Z2NQcm9s
b2d1ZSgpCiAgICAgdmlzaXRBY3RpdmVET01PYmplY3RzSW5DdXJyZW50VGhyZWFkKCZwcm9sb2d1
ZVZpc2l0b3IpOwogCiAgICAgLy8gQ3JlYXRlIG9iamVjdCBncm91cHMuCi0gICAgTm9kZUdyb3Vw
ZXJWaXNpdG9yIG5vZGVHcm91cGVyVmlzaXRvcjsKLSAgICB2aXNpdERPTU5vZGVzSW5DdXJyZW50
VGhyZWFkKCZub2RlR3JvdXBlclZpc2l0b3IpOwotICAgIG5vZGVHcm91cGVyVmlzaXRvci5hcHBs
eUdyb3VwaW5nKCk7Ci0KLSAgICBET01PYmplY3RHcm91cGVyVmlzaXRvciBkb21PYmplY3RHcm91
cGVyVmlzaXRvcjsKLSAgICB2aXNpdERPTU9iamVjdHNJbkN1cnJlbnRUaHJlYWQoJmRvbU9iamVj
dEdyb3VwZXJWaXNpdG9yKTsKKyAgICBHcm91cGVyVmlzaXRvciBncm91cGVyVmlzaXRvcjsKKyAg
ICB2aXNpdERPTU5vZGVzSW5DdXJyZW50VGhyZWFkKCZncm91cGVyVmlzaXRvcik7CisgICAgdmlz
aXRET01PYmplY3RzSW5DdXJyZW50VGhyZWFkKCZncm91cGVyVmlzaXRvcik7CisgICAgZ3JvdXBl
clZpc2l0b3IuYXBwbHlHcm91cGluZygpOwogCiAgICAgLy8gQ2xlYW4gc2luZ2xlIGVsZW1lbnQg
Y2FjaGUgZm9yIHN0cmluZyBjb252ZXJzaW9ucy4KICAgICBsYXN0U3RyaW5nSW1wbCA9IDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dyYXBwZXJUeXBlSW5mby5oCmluZGV4IDFkMWNi
ZmQ0NWEwZGQ4ZDJmNjEyZTM2ZTgxYTYzNzE1NmYyODVlMTEuLmVkZDc0MGYyMDFhMWYwNGJjYWIw
ZjBlODgyNGRhZGVkYmFjMjgxYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1dyYXBwZXJUeXBlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dy
YXBwZXJUeXBlSW5mby5oCkBAIC02MSw2ICs2MSwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzID09IHRoYXQ7CiAgICAgICAgIH0KKwor
ICAgICAgICBib29sIGlzU3ViY2xhc3MoY29uc3QgV3JhcHBlclR5cGVJbmZvKiB0aGF0KSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IFdyYXBwZXJUeXBlSW5mbyogY3Vy
cmVudCA9IHRoaXM7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnRDbGFzcykgewor
ICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IHRoYXQpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBnZXRUZW1wbGF0ZSgpIHsgcmV0dXJuIGdldFRlbXBsYXRlRnVuY3Rpb24oKTsg
fQogICAgICAgICAKQEAgLTgwLDYgKzkwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBjb25zdCBHZXRUZW1wbGF0ZUZ1bmN0aW9uIGdldFRlbXBsYXRlRnVuY3Rpb247CiAgICAgICAg
IGNvbnN0IERlcmVmT2JqZWN0RnVuY3Rpb24gZGVyZWZPYmplY3RGdW5jdGlvbjsKICAgICAgICAg
Y29uc3QgVG9BY3RpdmVET01PYmplY3RGdW5jdGlvbiB0b0FjdGl2ZURPTU9iamVjdEZ1bmN0aW9u
OworICAgICAgICBjb25zdCBXcmFwcGVyVHlwZUluZm8qIHBhcmVudENsYXNzOwogICAgIH07CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24u
Y3BwCmluZGV4IDRmMGJhMTZhYjljNzE5OTAwMzE0YzEzY2E2NjA5NTBiYjhmMzhlYjAuLmFkYzI2
YjcwOTA4NThlZjVjOTg0MzZmNzA3YWI2ODRmYjI3MTBjNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtNDk1LDE0ICs0OTUs
MTggQEAgU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShp
bnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGEKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKK2Jv
b2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmlzSW5saW5lU3R5bGVEZWNsYXJhdGlvbigp
Cit7CisgICAgLy8gRklYTUU6IElkZWFsbHksIHRoaXMgc2hvdWxkIGJlIGZhY3RvcmVkIGJldHRl
ciBhbmQgdGhlcmUKKyAgICAvLyBzaG91bGQgYmUgYSBzdWJjbGFzcyBvZiBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiBqdXN0CisgICAgLy8gZm9yIGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbnMg
dGhhdCBoYW5kbGVzIHRoaXMKKyAgICByZXR1cm4gbV9ub2RlICYmIG1fbm9kZS0+aXNTdHlsZWRF
bGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fbm9kZSktPmlubGluZVN0
eWxlRGVjbCgpID09IHRoaXM7Cit9CisKIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OnNldE5lZWRzU3R5bGVSZWNhbGMoKQogewogICAgIGlmIChtX25vZGUpIHsKLSAgICAgICAgLy8g
RklYTUU6IElkZWFsbHksIHRoaXMgc2hvdWxkIGJlIGZhY3RvcmVkIGJldHRlciBhbmQgdGhlcmUK
LSAgICAgICAgLy8gc2hvdWxkIGJlIGEgc3ViY2xhc3Mgb2YgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24ganVzdAotICAgICAgICAvLyBmb3IgaW5saW5lIHN0eWxlIGRlY2xhcmF0aW9ucyB0aGF0
IGhhbmRsZXMgdGhpcwotICAgICAgICBib29sIGlzSW5saW5lU3R5bGVEZWNsYXJhdGlvbiA9IG1f
bm9kZS0+aXNTdHlsZWRFbGVtZW50KCkgJiYgdGhpcyA9PSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVt
ZW50Kj4obV9ub2RlKS0+aW5saW5lU3R5bGVEZWNsKCk7Ci0gICAgICAgIGlmIChpc0lubGluZVN0
eWxlRGVjbGFyYXRpb24pIHsKKyAgICAgICAgaWYgKGlzSW5saW5lU3R5bGVEZWNsYXJhdGlvbigp
KSB7CiAgICAgICAgICAgICBtX25vZGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVD
aGFuZ2UpOwogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fbm9kZSkt
PmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSgpOwogICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZG9j
dW1lbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uLmgKaW5kZXggMGMzZGFkMTNiZDNlNmYwMGEzNGViYWIxMTk4MzRkOWQyY2UxYTM5Mi4uY2Ex
N2YxMTE5ZjgyOWI2MDRkMGU0NmEwMTM3NTdiNWU3ODQ2MWQ5OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgKQEAgLTE0MCw2ICsxNDAsOCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBwcm9wZXJ0aWVzRXF1YWwoY29uc3QgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qIG8pIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcyA9PSBvLT5t
X3Byb3BlcnRpZXM7IH0KIAorICAgIGJvb2wgaXNJbmxpbmVTdHlsZURlY2xhcmF0aW9uKCk7CisK
IHByb3RlY3RlZDoKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJl
bnRSdWxlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGVMaXN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZUxpc3QuaAppbmRleCBhMzU1YzRhNDQzMjQ3ZjU1
ZDZkYjRhMDE1YjE1MzFjZDNiODI1NDQ5Li44Nzk5NmE5ZjAxZjg4NjczNDgzNmI4NmRmMmY0NTgy
YTlhZDJkMWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZUxpc3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZUxpc3QuaApAQCAtNTMsNiArNTMsMTEgQEAg
cHVibGljOgogICAgIHZvaWQgZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCk7CiAgICAgdm9pZCBh
cHBlbmQoQ1NTUnVsZSopOwogCisgICAgU3R5bGVMaXN0KiBzdHlsZUxpc3QoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fbGlzdC5nZXQoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgQ1NTUnVs
ZUxpc3QoKTsKICAgICBDU1NSdWxlTGlzdChTdHlsZUxpc3QqLCBib29sIG9taXRDaGFyc2V0UnVs
ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuaAppbmRleCBhNDg2NTExNjg3NTZlYzBh
NzdlYzExZGI0NTlhYTNmNzM2OTM5YWQwLi5hMDE5NjkxOWQ4ZDNjZWY1ZDZlYjM1NjAxMmU5OWVl
ZTIwY2U2ODg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuaApAQCAtNTAsNiArNTAs
MTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV9zaGVldHMuc3dhcChzaGVldHMpOwogICAg
IH0KKworICAgIERvY3VtZW50KiBkb2N1bWVudCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9k
b2M7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBTdHlsZVNoZWV0TGlzdChEb2N1bWVudCop
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>