<?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>5578</bug_id>
          
          <creation_ts>2005-10-31 16:12:32 -0800</creation_ts>
          <short_desc>WebKit does not support DOM Level 3 setIsId and isId</short_desc>
          <delta_ts>2021-07-13 11:33:04 -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>DOM</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc>https://dom.spec.whatwg.org/#dom-attr-isid</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>31428</dependson>
    
    <dependson>31560</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>cshu</cc>
    
    <cc>darin</cc>
    
    <cc>gsnedders</cc>
    
    <cc>ian</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
    
    <cc>syoichi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>23411</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-10-31 16:12:32 -0800</bug_when>
    <thetext>WebKit does not support DOM Level 3 setIsId and isId

kdom supports this, and we would like to eventually pick it up (ksvg2 already has the proper hooks).  The 
problem would be performance.  I&apos;m not sure that adding a bool to AttrImpl is the best way, it seems a 
rather expensive route.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23412</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-10-31 16:13:43 -0800</bug_when>
    <thetext>http:://bugzilla.opendarwin.org/show_bug.cgi?id=3249 covers the KSVG2 kdom -&gt; webcore dom merger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25851</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2005-12-12 07:46:07 -0800</bug_when>
    <thetext>One possibility might be to use the m_hasId flag from the node base as the flag, since it is worthless for 
attributes as is.  This, however, would require the AttrImpl to be allocated for each Id attribute.

Another worthwhile question relating to this is whether an Element can have more than one Id attribute, 
and if so, what to do about NamedAttrMapImpl&apos;s id() and setID() methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157276</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-10-23 13:17:52 -0700</bug_when>
    <thetext>*** Bug 30715 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158922</commentid>
    <comment_count>4</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-10-29 09:05:27 -0700</bug_when>
    <thetext>I come up with half-baked code and hope the reviewers help me get it matured. Thanks very much in advance.
Here is the proposal of the code change:
1. introduce isId property in Attr, as specified in spec;
2. introduce setIdAttribute, setIdAttributeNS, setIdAttributeNode in Element, as specified in spec.
3. introduce an AtomicString type &quot;m_IdAttributeName&quot; member variable in Element. It remembers the name of the id attrribute. Its default value is &quot;id&quot; and can be set differently by the setIdAttribute functions.
4. Attr::isId check if its localname matches the m_IdAttributeName in owner element.

The thought of above proposal is to avoid using a bool flag in every Attr to save memory space.

Some excerpt of the code is pasted below:
bool Attr::isId() const
{
    if (!m_element)
        return false;

    return m_attribute-&gt;localName() == m_element-&gt;getIDAttributeName();
}
const AtomicString&amp; Element::getIDAttributeName() const
{
    return m_IdAttributeName;
}
void setIdAttribute(const QualifiedName&amp; qname, bool isId, ExceptionCode&amp;)
{
    if (isId)
        m_IdAttributeName = qname.localName();
    else
        m_IdAttributeName = nullAtom;
}

BTW, the spec also mentioned schema-determined ID and DTD-determined ID. I am not sure how they may have an impact of the implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158936</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-10-29 10:09:44 -0700</bug_when>
    <thetext>&gt; 3. introduce an AtomicString type &quot;m_IdAttributeName&quot; member variable in
&gt; Element.

We shouldn&apos;t be increasing the size of all Element objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159093</commentid>
    <comment_count>6</comment_count>
      <attachid>42148</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-10-29 14:44:13 -0700</bug_when>
    <thetext>Created attachment 42148
patch 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159101</commentid>
    <comment_count>7</comment_count>
      <attachid>42148</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-29 14:55:51 -0700</bug_when>
    <thetext>Comment on attachment 42148
patch 1

&gt; Index: WebCore/dom/Attr.idl
&gt; ===================================================================
&gt; --- WebCore/dom/Attr.idl	(revision 49937)
&gt; +++ WebCore/dom/Attr.idl	(working copy)
&gt; @@ -38,7 +38,10 @@ module core {
&gt;          // DOM Level 2
&gt;  
&gt;          readonly attribute Element ownerElement;
&gt; -        
&gt; +
&gt; +        // DOM Level 3
&gt; +        readonly attribute boolean isId;
&gt; +

Why not keep the formatting consistent? The &quot;DOM Level 2&quot; comment has a blank line after it, so you should do the same.


&gt; +    ElementRareData * data = ensureRareData();

The * here should be next to ElementRareData -- no space before it.

&gt; +void Element::setIdAttributeNS(const AtomicString&amp; namespaceURI, const AtomicString&amp; localName, bool isId, ExceptionCode&amp; ec)
&gt; +{
&gt; +    String sPrefix, sLocalName;
&gt; +    if (!Document::parseQualifiedName(localName, sPrefix, sLocalName, ec))
&gt; +        return;

Why is the argument named &quot;localName&quot; if it&apos;s actually a qualified name?

If it is just a local name, and not a qualified name, then why is it OK to use parseQualifiedName to parse it?

The local variable names should not have these &quot;s&quot; prefixes. We don&apos;t use the Hungarian notation where variable names encode their types with prefixes.

&gt; +    QualifiedName qName(sPrefix, sLocalName, namespaceURI);
&gt; +    setIdAttribute(qName, isId, ec);

I think you should avoid this local variable entirely by putting the expression in the setIdAttribute statement. But if not, I suggest using a name made of words rather than &quot;qName&quot;. &quot;qualifiedName&quot; would do.

&gt; +PassRefPtr&lt;Attr&gt; Element::setIdAttributeNode(Attr* attr, bool isId, ExceptionCode&amp; ec)
&gt; +{
&gt; +    if (!attr) {
&gt; +        ec = TYPE_MISMATCH_ERR;
&gt; +        return 0;
&gt; +    }
&gt; +    setIdAttribute(attr-&gt;qualifiedName(), isId, ec);
&gt; +    return attr;
&gt; +}

This isn’t right. It will add a new attribute with a new Attr, but it will return the Attr you passed in, instead.

I think you need a test case that checks for this.

What&apos;s the point of implementing these functions if they don&apos;t actually affect code that works with the ID attribute? I think the real challenge is having things like this work with getElementById and such. Having these functions, but without them really working, seems like a mistake.

&gt; +    AtomicString m_IdAttributeName;

This should not have a capital &quot;I&quot; in its name.

&gt; Index: LayoutTests/dom/xhtml/level3/core/attrisid04.js
&gt; ===================================================================
&gt; --- LayoutTests/dom/xhtml/level3/core/attrisid04.js	(revision 49937)
&gt; +++ LayoutTests/dom/xhtml/level3/core/attrisid04.js	(working copy)
&gt; @@ -39,7 +39,6 @@ function setUpPage() {
&gt;       //   creates test document builder, may throw exception
&gt;       //
&gt;       builder = createConfiguredBuilder();
&gt; -       setImplementationAttribute(&quot;validating&quot;, true);
&gt;  
&gt;        docsLoaded = 0;
&gt;        
&gt; Index: LayoutTests/dom/xhtml/level3/core/attrisid05.js
&gt; ===================================================================
&gt; --- LayoutTests/dom/xhtml/level3/core/attrisid05.js	(revision 49937)
&gt; +++ LayoutTests/dom/xhtml/level3/core/attrisid05.js	(working copy)
&gt; @@ -39,7 +39,6 @@ function setUpPage() {
&gt;       //   creates test document builder, may throw exception
&gt;       //
&gt;       builder = createConfiguredBuilder();
&gt; -       setImplementationAttribute(&quot;validating&quot;, true);
&gt;  
&gt;        docsLoaded = 0;
&gt;        

Why are you changing the test cases here? Nothing in the change log explains why, and in the past we have tried to avoid that whenever possible.

I think you also need to add some new test cases. The ones from the DOM test suite don&apos;t go far enough. I suspect they don&apos;t cover all the code you added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159110</commentid>
    <comment_count>8</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-10-29 15:20:07 -0700</bug_when>
    <thetext>Darin, thank you for the quick review.

I will make the coding style change as you indicated. And I have some questions regarding your comments.

&gt; &gt; +void Element::setIdAttributeNS(const AtomicString&amp; namespaceURI, const AtomicString&amp; localName, bool isId, ExceptionCode&amp; ec)
&gt; &gt; +{
&gt; &gt; +    String sPrefix, sLocalName;
&gt; &gt; +    if (!Document::parseQualifiedName(localName, sPrefix, sLocalName, ec))
&gt; &gt; +        return;
&gt; 
&gt; Why is the argument named &quot;localName&quot; if it&apos;s actually a qualified name?
&gt; 
&gt; If it is just a local name, and not a qualified name, then why is it OK to use
&gt; parseQualifiedName to parse it?

I was a bit confused too. I basically refer to the implementation in function setAttributeNS where the localName in the arglist is called qualifiedName. However, its type is not QualifiedName but AtomicString. I will make sure I understand this and will make the naming change accordingly.

&gt; &gt; +PassRefPtr&lt;Attr&gt; Element::setIdAttributeNode(Attr* attr, bool isId, ExceptionCode&amp; ec)
&gt; &gt; +{
&gt; &gt; +    if (!attr) {
&gt; &gt; +        ec = TYPE_MISMATCH_ERR;
&gt; &gt; +        return 0;
&gt; &gt; +    }
&gt; &gt; +    setIdAttribute(attr-&gt;qualifiedName(), isId, ec);
&gt; &gt; +    return attr;
&gt; &gt; +}
&gt; 
&gt; This isn’t right. It will add a new attribute with a new Attr, but it will
&gt; return the Attr you passed in, instead.

I will revisit this coding.

&gt; 
&gt; I think you need a test case that checks for this.
&gt; 
&gt; What&apos;s the point of implementing these functions if they don&apos;t actually affect
&gt; code that works with the ID attribute? I think the real challenge is having
&gt; things like this work with getElementById and such. Having these functions, but
&gt; without them really working, seems like a mistake.

These &quot;setIdAttribte&quot; functions indeed affect the ID attribute. They provide different ways of defining user-defined ID attribute and affect isId() calls. But it is true that the current attrisid test cases only cover setIdAttribteNS function. You are also true that I should update functions like getElementById to reflect this enhancement.

&gt; &gt; --- LayoutTests/dom/xhtml/level3/core/attrisid05.js	(revision 49937)
&gt; &gt; +++ LayoutTests/dom/xhtml/level3/core/attrisid05.js	(working copy)
&gt; &gt; @@ -39,7 +39,6 @@ function setUpPage() {
&gt; &gt;       //   creates test document builder, may throw exception
&gt; &gt;       //
&gt; &gt;       builder = createConfiguredBuilder();
&gt; &gt; -       setImplementationAttribute(&quot;validating&quot;, true);
&gt; Why are you changing the test cases here? Nothing in the change log explains
&gt; why, and in the past we have tried to avoid that whenever possible.

I think the ChangeLog said &quot;Enable test cases...&quot;. The fact is if we call &quot;setImplementationAttribute(&quot;validating&quot;, true)&quot;, the running of test case will be skipped. The expected result will expect &quot;Skipped&quot;. I guess this should only be true before the feature is supported. Now, we should change these test cases.

 
&gt; I think you also need to add some new test cases. The ones from the DOM test
&gt; suite don&apos;t go far enough. I suspect they don&apos;t cover all the code you added.

Right. I should probably add test cases to cover areas that DOM test suite don&apos;t cover. Any suggestions on where the test cases should go? Or is it ok I remove the implementation that not necessary for passing the DOM tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159376</commentid>
    <comment_count>9</comment_count>
      <attachid>42220</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-10-30 11:22:26 -0700</bug_when>
    <thetext>Created attachment 42220
patch based on Darin&apos;s review

I updated the patch with changes based on Darin&apos;s review. I haven&apos;t updated the test cases but will do after I understand the requirement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159865</commentid>
    <comment_count>10</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-11-02 11:40:39 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=42220) [details]
&gt; patch based on Darin&apos;s review
&gt; 
&gt; I updated the patch with changes based on Darin&apos;s review. I haven&apos;t updated the
&gt; test cases but will do after I understand the requirement.

The current patch may cause a slight performance degrade. I ran drumaeo.com DOM core tests using the builds with and without patch 2 and got results saved in http://dromaeo.com/?id=76616 and http://dromaeo.com/?id=76620, respectively. I am working on find the root cause of the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161016</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-05 16:40:56 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; I think the ChangeLog said &quot;Enable test cases...&quot;. The fact is if we call
&gt; &quot;setImplementationAttribute(&quot;validating&quot;, true)&quot;, the running of test case will
&gt; be skipped. The expected result will expect &quot;Skipped&quot;. I guess this should only
&gt; be true before the feature is supported. Now, we should change these test
&gt; cases.

For some reason, the person who wrote these test cases thought that they should not run unless the implementation is &quot;validating&quot; and somehow XHTML is not &quot;validating&quot;. I don&apos;t understand why they thought this. I suggest you leave those lines of code in the test, but comment them out and add a comment explaining why we should remove them.

&gt; Right. I should probably add test cases to cover areas that DOM test suite
&gt; don&apos;t cover. Any suggestions on where the test cases should go? Or is it ok I
&gt; remove the implementation that not necessary for passing the DOM tests?

I think adding test cases is the way to go. It&apos;s quite easy to write new test cases if you use the script-tests style, and I think you should add some new tests to fast/dom/Element for this.

What I don&apos;t understand is why there are only XHTML test cases for this and not HTML. If you add this to Element.idl it will add the feature for both XHTML and HTML documents. So if that&apos;s not correct, then we have to figure out why not.

If this does need to work in HTML then we need test cases that are in HTML documents. This can be addressed by doing the script-tests style of test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161017</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-05 16:42:28 -0800</bug_when>
    <thetext>You mentioned in email that the performance problem is due to calling getIDAttributeName() too many times. And that making it an inline function resolved the issue, but you had to include ElementRareData.h in Element.h. There is a good way to resolve this. The trick is to make the inline function check hasRareData and then call a non-inline function for the case where the rare data exists. The non-inline function could be called rareIDAttributeName() or something like that.

We don’t use get in the names of so called “getter functions”, so the name of the function should be idAttributeName(), not getIDAttributeName().

I&apos;m slightly concerned that you&apos;ll have to include HTMLNames.h in Element.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161018</commentid>
    <comment_count>13</comment_count>
      <attachid>42220</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-05 16:43:48 -0800</bug_when>
    <thetext>Comment on attachment 42220
patch based on Darin&apos;s review

Thanks for tackling this!

review- because of the performance regression and insufficient test coverage</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161133</commentid>
    <comment_count>14</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-11-06 06:38:08 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #8)
&gt; &gt; I think the ChangeLog said &quot;Enable test cases...&quot;. The fact is if we call
&gt; &gt; &quot;setImplementationAttribute(&quot;validating&quot;, true)&quot;, the running of test case will
&gt; &gt; be skipped. The expected result will expect &quot;Skipped&quot;. I guess this should only
&gt; &gt; be true before the feature is supported. Now, we should change these test
&gt; &gt; cases.
&gt; 
&gt; For some reason, the person who wrote these test cases thought that they should
&gt; not run unless the implementation is &quot;validating&quot; and somehow XHTML is not
&gt; &quot;validating&quot;. I don&apos;t understand why they thought this. I suggest you leave
&gt; those lines of code in the test, but comment them out and add a comment
&gt; explaining why we should remove them.
&gt; 
&gt; &gt; Right. I should probably add test cases to cover areas that DOM test suite
&gt; &gt; don&apos;t cover. Any suggestions on where the test cases should go? Or is it ok I
&gt; &gt; remove the implementation that not necessary for passing the DOM tests?
&gt; 
&gt; I think adding test cases is the way to go. It&apos;s quite easy to write new test
&gt; cases if you use the script-tests style, and I think you should add some new
&gt; tests to fast/dom/Element for this.
&gt; 
&gt; What I don&apos;t understand is why there are only XHTML test cases for this and not
&gt; HTML. If you add this to Element.idl it will add the feature for both XHTML and
&gt; HTML documents. So if that&apos;s not correct, then we have to figure out why not.
&gt; 
&gt; If this does need to work in HTML then we need test cases that are in HTML
&gt; documents. This can be addressed by doing the script-tests style of test.

Thanks for the comments on the test cases. I will work on that and let you see if they are satisfied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161134</commentid>
    <comment_count>15</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-11-06 06:44:47 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; You mentioned in email that the performance problem is due to calling
&gt; getIDAttributeName() too many times. And that making it an inline function
&gt; resolved the issue, but you had to include ElementRareData.h in Element.h.
&gt; There is a good way to resolve this. The trick is to make the inline function
&gt; check hasRareData and then call a non-inline function for the case where the
&gt; rare data exists. The non-inline function could be called rareIDAttributeName()
&gt; or something like that.
&gt; 
&gt; We don’t use get in the names of so called “getter functions”, so the name of
&gt; the function should be idAttributeName(), not getIDAttributeName().
&gt; 
&gt; I&apos;m slightly concerned that you&apos;ll have to include HTMLNames.h in Element.h.

You know exactly what I have struggled these days. :)
The performance improvement I mentioned was based on making the function inline in cpp file as the major bottleneck is in Element.cpp itself. However, after I was trying to move it to Element.h, I had trouble to compile. Even if I managed to untangle the include files and made linux build work, it still does not compile on Mac (somehow Mac complains failing to find the ElementRareData.h). Anyway, I feel it&apos;s risky and probably against the original design, so I gave up this approach. I instead used two functions: one inline as private function and one for external calls, kind of ugly though. Your &quot;trick&quot; seems more attractive to me and I will try it right away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161147</commentid>
    <comment_count>16</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-11-06 08:20:05 -0800</bug_when>
    <thetext>&gt; Your &quot;trick&quot; seems more
&gt; attractive to me and I will try it right away.

Yes, it works great. It compiles on Linux and the performance is no worse at all. I will see if it compiles on Mac (HTMLNames.h is included in Element.h indeed). Meanwhile, I am working on the test cases. Hopefully to submit the next patch soon. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161595</commentid>
    <comment_count>17</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-11-09 09:04:25 -0800</bug_when>
    <thetext>I am almost done with 3rd patch. However, while I was trying to make all setidattributes test cases pass, I had problem with 2 setidattributeNS test cases. Basically, the problem is that the test case considers attribute &quot;title&quot; with namespace &quot;*&quot; the same as &quot;title&quot; w/o namespace while the current implementation treats them differently. I am not sure if there is a quick resolution for this. Is it Ok I skip these two cases for now and address them in separate bugs?
Btw, the above mentioned test cases are:
dom/xhtml/level3/core/elementsetidattributens05.xhtml
dom/xhtml/level3/core/elementsetidattributens13.xhtml</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161624</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-11-09 09:59:34 -0800</bug_when>
    <thetext>&gt; Is it Ok I skip these two cases for now and address 
&gt; them in separate bugs?

Yes. These tests don&apos;t pass in Firefox either, FWIW.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161700</commentid>
    <comment_count>19</comment_count>
      <attachid>42779</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-11-09 12:26:11 -0800</bug_when>
    <thetext>Created attachment 42779
fix performance issue; pass related test cases

The performance issue was resolved using inline function (Using Darin&apos;s &quot;trick&quot;).
Enabled all existing related test cases and made them pass except two cases due to separate namespace issues.

Darin,
So far I see the existing test cases are pretty comprehensive so I just simply updated the expected results and made them work. If you prefer creating new test cases, I can copy them over to a new place. I just feel the test cases may be duplicated.
Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161824</commentid>
    <comment_count>20</comment_count>
      <attachid>42779</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-09 16:14:36 -0800</bug_when>
    <thetext>Comment on attachment 42779
fix performance issue; pass related test cases

(In reply to comment #19)
&gt; So far I see the existing test cases are pretty comprehensive

That is not so.

The existing test cases don&apos;t even cover using getElementById after using setIdAttribute on an element. Nor do they cover any of the other indirect effects of having an id. The setIdAttribute function can change what the value of the id attribute is by changing its name from an attribute with one value to an attribute with another, so that function needs to trigger the work that StyledElement::parseMappedAttribute does as well as all the same work that Element::updateId does. You need test cases that cover the actual use of elements by id, including things like CSS styling, which works by id, getElementById, and you need to test cases where multiple elements have the same id as well as where exactly one element has the id or zero elements have it. And vary the order. The getElementById function must always return the first element in the document in document order. Even if the node is moved to a different place in the document.

Here are a few things that work by id that should be tested:

    - getElementById
    - CSS styling with a selector that specifies an id like this: #elementid
    - node lists, which can be indexed by an id like this list[&quot;elementid&quot;], for example: document.getElementsByTagName(&quot;a&quot;)[&quot;elementid&quot;]
    - SVG &lt;use&gt; elements

I found these by searching for clients of getIDAttribute and hasID and then figuring out how these clients in turn were used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161873</commentid>
    <comment_count>21</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-11-09 17:49:52 -0800</bug_when>
    <thetext>
Thanks for the detailed comments. I will look into them.

(In reply to comment #20)
&gt; (From update of attachment 42779 [details])
&gt; (In reply to comment #19)
&gt; &gt; So far I see the existing test cases are pretty comprehensive
&gt; 
&gt; That is not so.
&gt; 
&gt; The existing test cases don&apos;t even cover using getElementById after using
&gt; setIdAttribute on an element. Nor do they cover any of the other indirect
&gt; effects of having an id. The setIdAttribute function can change what the value
&gt; of the id attribute is by changing its name from an attribute with one value to
&gt; an attribute with another, so that function needs to trigger the work that
&gt; StyledElement::parseMappedAttribute does as well as all the same work that
&gt; Element::updateId does. You need test cases that cover the actual use of
&gt; elements by id, including things like CSS styling, which works by id,
&gt; getElementById, and you need to test cases where multiple elements have the
&gt; same id as well as where exactly one element has the id or zero elements have
&gt; it. And vary the order. The getElementById function must always return the
&gt; first element in the document in document order. Even if the node is moved to a
&gt; different place in the document.
&gt; 
&gt; Here are a few things that work by id that should be tested:
&gt; 
&gt;     - getElementById
&gt;     - CSS styling with a selector that specifies an id like this: #elementid
&gt;     - node lists, which can be indexed by an id like this list[&quot;elementid&quot;],
&gt; for example: document.getElementsByTagName(&quot;a&quot;)[&quot;elementid&quot;]
&gt;     - SVG &lt;use&gt; elements
&gt; 
&gt; I found these by searching for clients of getIDAttribute and hasID and then
&gt; figuring out how these clients in turn were used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162903</commentid>
    <comment_count>22</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-11-12 07:53:18 -0800</bug_when>
    <thetext>While I was creating a test case for using id as index of node list, I found webkit failed on the following test case:
&lt;body&gt;
&lt;div name=&apos;elem1&apos; id=&apos;attr_value11&apos; attr_name12=&apos;attr_value12&apos;/&gt;
&lt;p   name=&apos;elem4&apos; id=&apos;attr_value21&apos; attr_name42=&apos;attr_value42&apos;/&gt;
&lt;div name=&apos;elem2&apos; id=&apos;attr_value21&apos; attr_name22=&apos;attr_value22&apos;/&gt;
&lt;script&gt;
elems = document.getElementsByTagName(&apos;div&apos;);
elem = elems[&apos;attr_value21&apos;];
shouldBe(&apos;elem.attributes[0].value&apos;, &apos;&quot;elem2&quot;&apos;);
&lt;/script&gt;

Actual result: FAIL elem.attributes[0].value should be elem2. Threw exception TypeError: Result of expression &apos;elem&apos; [undefined] is not an object.

The same test case passes on firefox.

If I remove the line with tag &lt;p&gt;, the test case will pass. Apparently, this &lt;p&gt; element with same id confuses the engine.

Then I found the following code in WebCore/dom/DynamicNodeList.cpp:
Node* DynamicNodeList::itemWithName(const AtomicString&amp; elementId) const
{
    if (m_rootNode-&gt;isDocumentNode() || m_rootNode-&gt;inDocument()) {
        Element* node = m_rootNode-&gt;document()-&gt;getElementById(elementId);
        if (node &amp;&amp; nodeMatches(node)) {
            for (Node* p = node-&gt;parentNode(); p; p = p-&gt;parentNode()) {
                if (p == m_rootNode)
                    return node;
            }
        }
        return 0;
    }

    unsigned length = this-&gt;length();
    for (unsigned i = 0; i &lt; length; i++) {
        Node* node = item(i);
        if (node-&gt;isElementNode() &amp;&amp; static_cast&lt;Element*&gt;(node)-&gt;getIDAttribute() == elementId)
            return node;
    }

    return 0;
}

I am quite confused by the first part of the function, which returns 0 in the above test case. Can anyone explain to me a little bit? Really appreciate it.

--Chang</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162982</commentid>
    <comment_count>23</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-11-12 11:35:04 -0800</bug_when>
    <thetext>IDs must be unique in valid documents. We can consider matching other browsers in this case though, please file a separate bug.

The confusing code in DynamicNodeList::itemWithName() looks like an optimization - it&apos;s faster to call getElementById() than to iterate the whole list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163006</commentid>
    <comment_count>24</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-11-12 12:15:27 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; IDs must be unique in valid documents. We can consider matching other browsers
&gt; in this case though, please file a separate bug.
&gt; 
&gt; The confusing code in DynamicNodeList::itemWithName() looks like an
&gt; optimization - it&apos;s faster to call getElementById() than to iterate the whole
&gt; list.

Understood. Will do the new bug. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171505</commentid>
    <comment_count>25</comment_count>
      <attachid>44812</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-12-14 12:27:48 -0800</bug_when>
    <thetext>Created attachment 44812
new patch to handle isId only

Finally after weeks of scattered work, I finished this patch to implement isId functionality. I basically added the isId interface and implementation in class Element. I also replaced all the instances of idAttr in the code with idAttributeName(), where customized id name may be returned after implementation is done in the next patch. So far, it always returns &quot;id&quot;. For almost each of the above changes, I either created a new test case or used an existing one. These test cases will be enhanced to test customized id names in the next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171643</commentid>
    <comment_count>26</comment_count>
      <attachid>44812</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-14 17:41:28 -0800</bug_when>
    <thetext>Comment on attachment 44812
new patch to handle isId only

&gt; +bool Attr::isId() const
&gt; +{
&gt; +    if (!m_element)
&gt; +        return false;

Do we have a test case that covers this code path?

&gt; +    const QualifiedName&amp; qualifiedName = idAttributeName();
&gt; +    Attribute* oldId = namedAttrMap ? namedAttrMap-&gt;getAttributeItem(qualifiedName) : 0;
&gt; +    Attribute* newId = list ? list-&gt;getAttributeItem(qualifiedName) : 0;

I think this local variable name is strange. I would suggest:

    const QualifiedName&amp; idAttributeName = this-&gt;idAttributeName();

Or something else. But qualifiedName is simply too vague. It’s the name of the type, not the value.

&gt; +++ WebCore/dom/Element.h	(working copy)
&gt; @@ -26,6 +26,7 @@
&gt;  #define Element_h
&gt;  
&gt;  #include &quot;ContainerNode.h&quot;
&gt; +#include &quot;HTMLNames.h&quot;
&gt;  #include &quot;QualifiedName.h&quot;
&gt;  #include &quot;ScrollTypes.h&quot;

Adding this new include to all includers of Element.h is unfortunate. The other approach would be to instead put the idAttributeName inline function into its own header, and have all clients include that header, perhaps called ElementIdAttributeName.h. See NodeRenderStyle.h for an example of this. It’s annoying to have to add a new header file, but perhaps less bad than having everything include HTMLNames.h now when only a few files need to call idAttributeName.

&gt; -        if (e-&gt;isEnumeratable() &amp;&amp; e-&gt;getAttribute(attrName) == name) {
&gt; +        const QualifiedName&amp; attributeName = (attrName == idAttr) ? e-&gt;idAttributeName() : attrName;
&gt; +        if (e-&gt;isEnumeratable() &amp;&amp; e-&gt;getAttribute(attributeName) == name) {

I&apos;m a little concerned about this logic. It seems very strange that the attribute name &quot;id&quot; does not mean &quot;id&quot;, it means whatever the ID attribute is. Are you sure that&apos;s right? What test case can we create for this (later, once we have a way to change the idAttributeName)?

If we really need this strange rule, then I think we might want to control it with a separate boolean, not attrName itself.

&gt; -       setImplementationAttribute(&quot;validating&quot;, true);
&gt; +     // remove the following line otherewise test case skipped.
&gt; +     //setImplementationAttribute(&quot;validating&quot;, true);

Is there a better way to do this?

The new comment you added has a period, but should also start with a capital letter.

In the past we put &quot;WebKit modification&quot; or &quot;WebKit fix&quot; comments into files in any places we modified these tests. See examples in &lt;http://trac.webkit.org/changeset/10362&gt; and &lt;http://trac.webkit.org/changeset/37549&gt;.

Is the issue that there are no tests that should be skipped because we&apos;re not a validating parser, or is it really a mistake just in these tests? If it’s something about all tests, then it could be fixed in the shared JavaScript code instead.

I think this can go as-is, so I&apos;ll say r=me, but I think you could also consider improvements based on my comments above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171652</commentid>
    <comment_count>27</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-12-14 18:13:06 -0800</bug_when>
    <thetext>Thanks for the quick review, Darin. Please see my comments below.

(In reply to comment #26)
&gt; (From update of attachment 44812 [details])
&gt; &gt; +bool Attr::isId() const
&gt; &gt; +{
&gt; &gt; +    if (!m_element)
&gt; &gt; +        return false;
&gt; 
&gt; Do we have a test case that covers this code path?

I don&apos;t explicitly have a test case for this. I think once I have something in mind about this rare case. I need a bit time thinking about it.

&gt; 
&gt; &gt; +    const QualifiedName&amp; qualifiedName = idAttributeName();
&gt; &gt; +    Attribute* oldId = namedAttrMap ? namedAttrMap-&gt;getAttributeItem(qualifiedName) : 0;
&gt; &gt; +    Attribute* newId = list ? list-&gt;getAttributeItem(qualifiedName) : 0;
&gt; 
&gt; I think this local variable name is strange. I would suggest:
&gt; 
&gt;     const QualifiedName&amp; idAttributeName = this-&gt;idAttributeName();
&gt; 
&gt; Or something else. But qualifiedName is simply too vague. It’s the name of the
&gt; type, not the value.

Yep, will do.

&gt; 
&gt; &gt; +++ WebCore/dom/Element.h	(working copy)
&gt; &gt; @@ -26,6 +26,7 @@
&gt; &gt;  #define Element_h
&gt; &gt;  
&gt; &gt;  #include &quot;ContainerNode.h&quot;
&gt; &gt; +#include &quot;HTMLNames.h&quot;
&gt; &gt;  #include &quot;QualifiedName.h&quot;
&gt; &gt;  #include &quot;ScrollTypes.h&quot;
&gt; 
&gt; Adding this new include to all includers of Element.h is unfortunate. The other
&gt; approach would be to instead put the idAttributeName inline function into its
&gt; own header, and have all clients include that header, perhaps called
&gt; ElementIdAttributeName.h. See NodeRenderStyle.h for an example of this. It’s
&gt; annoying to have to add a new header file, but perhaps less bad than having
&gt; everything include HTMLNames.h now when only a few files need to call
&gt; idAttributeName.

Yeah. Once I thought HTMLNames.h was something good to include anyway. But I will do the new include file for I definitely trust your judgment.

&gt; 
&gt; &gt; -        if (e-&gt;isEnumeratable() &amp;&amp; e-&gt;getAttribute(attrName) == name) {
&gt; &gt; +        const QualifiedName&amp; attributeName = (attrName == idAttr) ? e-&gt;idAttributeName() : attrName;
&gt; &gt; +        if (e-&gt;isEnumeratable() &amp;&amp; e-&gt;getAttribute(attributeName) == name) {
&gt; 
&gt; I&apos;m a little concerned about this logic. It seems very strange that the
&gt; attribute name &quot;id&quot; does not mean &quot;id&quot;, it means whatever the ID attribute is.
&gt; Are you sure that&apos;s right? What test case can we create for this (later, once
&gt; we have a way to change the idAttributeName)?

It&apos;s a bit tricky here. The reason I have to do this is because I cannot replace the &quot;idAttr&quot; to idAttributeName() in the caller function as there is no context of element. So I have to replace &quot;id&quot; to its customized name in this function. There should be a test case covering this. I will double-check.

&gt; 
&gt; If we really need this strange rule, then I think we might want to control it
&gt; with a separate boolean, not attrName itself.
&gt; 
&gt; &gt; -       setImplementationAttribute(&quot;validating&quot;, true);
&gt; &gt; +     // remove the following line otherewise test case skipped.
&gt; &gt; +     //setImplementationAttribute(&quot;validating&quot;, true);
&gt; 
&gt; Is there a better way to do this?
&gt; 
&gt; The new comment you added has a period, but should also start with a capital
&gt; letter.

Will do.

&gt; 
&gt; In the past we put &quot;WebKit modification&quot; or &quot;WebKit fix&quot; comments into files in
&gt; any places we modified these tests. See examples in
&gt; &lt;http://trac.webkit.org/changeset/10362&gt; and
&gt; &lt;http://trac.webkit.org/changeset/37549&gt;.
&gt; 
&gt; Is the issue that there are no tests that should be skipped because we&apos;re not a
&gt; validating parser, or is it really a mistake just in these tests? If it’s
&gt; something about all tests, then it could be fixed in the shared JavaScript code
&gt; instead.

I don&apos;t fully understand the meaning of &quot;validating&quot; here. I literally/logically removed the line after I went through the script logic.

&gt; 
&gt; I think this can go as-is, so I&apos;ll say r=me, but I think you could also
&gt; consider improvements based on my comments above

Thanks. I will update the patch based on your comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171753</commentid>
    <comment_count>28</comment_count>
      <attachid>44812</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-15 01:12:46 -0800</bug_when>
    <thetext>Comment on attachment 44812
new patch to handle isId only

Shu Chang has indicated he intends to update the patch, so removing Darin&apos;s r+ so that this isn&apos;t seen a patch needing landing for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171943</commentid>
    <comment_count>29</comment_count>
      <attachid>44890</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-12-15 11:26:53 -0800</bug_when>
    <thetext>Created attachment 44890
minor changes, isId only

I have made changes based on Darin&apos;s last comments. I didn&apos;t create new include file yet and may do later in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171949</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-15 11:31:50 -0800</bug_when>
    <thetext>Attachment 44890 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/dom/NamedAttrMap.cpp:245:  Declaration has space between type name and * in Attribute *oldId  [whitespace/declaration] [3]
WebCore/dom/NamedAttrMap.cpp:246:  Declaration has space between type name and * in Attribute *newId  [whitespace/declaration] [3]
Total errors found: 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171954</commentid>
    <comment_count>31</comment_count>
      <attachid>44892</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-12-15 11:42:12 -0800</bug_when>
    <thetext>Created attachment 44892
minor change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171956</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-15 11:42:46 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44892 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172033</commentid>
    <comment_count>33</comment_count>
      <attachid>44892</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-15 14:18:46 -0800</bug_when>
    <thetext>Comment on attachment 44892
minor change

&gt; +    return qualifiedName().matches(m_element ? m_element-&gt;idAttributeName() : HTMLNames::idAttr);

Normally we&apos;d put &quot;using namespace HTMLNames&quot; at the top of the file rather than qualifying idAttr with it here.

&gt; +    , m_idAttributeName(HTMLNames::idAttr)

Same here.

&gt; Index: WebCore/rendering/RenderLayerBacking.cpp
&gt; ===================================================================
&gt; --- WebCore/rendering/RenderLayerBacking.cpp	(revision 52092)
&gt; +++ WebCore/rendering/RenderLayerBacking.cpp	(working copy)
&gt; @@ -86,7 +86,7 @@ void RenderLayerBacking::createGraphicsL
&gt;              m_graphicsLayer-&gt;setName(&quot;Document Node&quot;);
&gt;          else {
&gt;              if (renderer()-&gt;node()-&gt;isHTMLElement() &amp;&amp; renderer()-&gt;node()-&gt;hasID())
&gt; -                m_graphicsLayer-&gt;setName(renderer()-&gt;renderName() + String(&quot; &quot;) + static_cast&lt;HTMLElement*&gt;(renderer()-&gt;node())-&gt;getAttribute(idAttr));
&gt; +                m_graphicsLayer-&gt;setName(renderer()-&gt;renderName() + String(&quot; &quot;) + static_cast&lt;HTMLElement*&gt;(renderer()-&gt;node())-&gt;getAttribute(idAttributeName()));

I don&apos;t think this will compile. RenderLayerBacking does not have an idAttributeName() member function.

&gt; -       setImplementationAttribute(&quot;validating&quot;, true);
&gt; +     // Remove the following line otherewise test case skipped.
&gt; +     //setImplementationAttribute(&quot;validating&quot;, true);

Typo: &quot;otherewise&quot;.

Should mention this is a WebKit change as I said last time.

&gt; -       setImplementationAttribute(&quot;validating&quot;, true);
&gt; +     // Remove the following line otherewise test case skipped.
&gt; +     //setImplementationAttribute(&quot;validating&quot;, true);

Same typo.

review- because of the broken build of RenderLayerBacking.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172141</commentid>
    <comment_count>34</comment_count>
      <attachid>44934</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-12-15 19:09:10 -0800</bug_when>
    <thetext>Created attachment 44934
fix broken build and some minor changes

I am really sorry the previous patches broke the build. For some reason, RenderLayerBacking.cpp is not in the build on QtLinux so I overlooked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172142</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-15 19:12:11 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44934 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172315</commentid>
    <comment_count>36</comment_count>
      <attachid>44934</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-16 09:11:25 -0800</bug_when>
    <thetext>Comment on attachment 44934
fix broken build and some minor changes

Seems OK. r=me

The tests could go further than just checking that something is non-null. For example, in id-in-param.html you could check that the element returned is the single param element, which you could locate with getElementsByTagName, for example. And also the id-in-frameset tests seems to be a little cryptic. Just doing an alert with the content &quot;1&quot; seems a little weak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172319</commentid>
    <comment_count>37</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-12-16 09:13:51 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; (From update of attachment 44934 [details])
&gt; Seems OK. r=me
&gt; 
&gt; The tests could go further than just checking that something is non-null. For
&gt; example, in id-in-param.html you could check that the element returned is the
&gt; single param element, which you could locate with getElementsByTagName, for
&gt; example. And also the id-in-frameset tests seems to be a little cryptic. Just
&gt; doing an alert with the content &quot;1&quot; seems a little weak.

got it. I will take care of them in future patches. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172334</commentid>
    <comment_count>38</comment_count>
      <attachid>44934</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-16 09:33:47 -0800</bug_when>
    <thetext>Comment on attachment 44934
fix broken build and some minor changes

Rejecting patch 44934 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--exit-after-n-failures=1&apos;, &apos;--quiet&apos;]&quot; exit_code: 1
Running build-dumprendertree
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Testing 11788 test cases.
fast/dom/Element/id-in-svgfont.svg -&gt; failed

Exiting early after 1 failures. 5690 tests run.
82.79s total testing time

5689 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
1 test case (&lt;1%) had stderr output

Full output: http://webkit-commit-queue.appspot.com/results/127602</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172599</commentid>
    <comment_count>39</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-16 17:44:54 -0800</bug_when>
    <thetext>This looks like a related failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172612</commentid>
    <comment_count>40</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-12-16 18:31:19 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; This looks like a related failure.

yes, the failed test case is not text based. Mac generates different pixels than qt-linux. I will try to see if I can use a text-based test case instead so I don&apos;t have to put different expected results for different platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172899</commentid>
    <comment_count>41</comment_count>
      <attachid>45098</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-12-17 11:44:03 -0800</bug_when>
    <thetext>Created attachment 45098
remove new test case fast/dom/Element/id-in-svgfont.svg

The two svg related code changes are covered by existing test case svg/custom/acid3-test-77.html. So no need to create a new test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172903</commentid>
    <comment_count>42</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-17 11:49:25 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45098 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173167</commentid>
    <comment_count>43</comment_count>
      <attachid>45098</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-18 08:41:07 -0800</bug_when>
    <thetext>Comment on attachment 45098
remove new test case fast/dom/Element/id-in-svgfont.svg

Clearing flags on attachment: 45098

Committed r52312: &lt;http://trac.webkit.org/changeset/52312&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173169</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-18 08:41:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173283</commentid>
    <comment_count>45</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-12-18 13:01:08 -0800</bug_when>
    <thetext>The latest patch finished half of the implementation: isId.
setIsId is still undergoing. So reopen the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175568</commentid>
    <comment_count>46</comment_count>
      <attachid>45604</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2009-12-29 08:47:58 -0800</bug_when>
    <thetext>Created attachment 45604
implement setIdAttribute</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175572</commentid>
    <comment_count>47</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-29 08:51:31 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45604 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176082</commentid>
    <comment_count>48</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-12-30 16:33:02 -0800</bug_when>
    <thetext>I don&apos;t think we should support setIsId or isId. Multiple ID attributes are a needless complication. I suggest we WONTFIX this bug. Does anyone disagree? If so, we should discuss it on webkit-dev.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176730</commentid>
    <comment_count>49</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-04 09:50:27 -0800</bug_when>
    <thetext>(In reply to comment #48)
&gt; I don&apos;t think we should support setIsId or isId. Multiple ID attributes are a
&gt; needless complication. I suggest we WONTFIX this bug. Does anyone disagree? If
&gt; so, we should discuss it on webkit-dev.

I agree, and wish I had thought of this earlier. I&apos;ve been helping Chang Shu get the mechanical details right on this. If we do WONTFIX it, I think we may want to undo some of the steps we have already done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176732</commentid>
    <comment_count>50</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2010-01-04 10:06:16 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; (In reply to comment #48)
&gt; &gt; I don&apos;t think we should support setIsId or isId. Multiple ID attributes are a
&gt; &gt; needless complication. I suggest we WONTFIX this bug. Does anyone disagree? If
&gt; &gt; so, we should discuss it on webkit-dev.
&gt; 
&gt; I agree, and wish I had thought of this earlier. I&apos;ve been helping Chang Shu
&gt; get the mechanical details right on this. If we do WONTFIX it, I think we may
&gt; want to undo some of the steps we have already done.

I agree that allowing multiple ID does not make too much sense and the current implementation does support this anyway. However, I think having the ability to customize id attribute is good to have since not all the identification of an element is called &quot;id&quot; by nature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176733</commentid>
    <comment_count>51</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2010-01-04 10:08:02 -0800</bug_when>
    <thetext>(In reply to comment #50)
&gt; (In reply to comment #49)
&gt; &gt; (In reply to comment #48)
&gt; &gt; &gt; I don&apos;t think we should support setIsId or isId. Multiple ID attributes are a
&gt; &gt; &gt; needless complication. I suggest we WONTFIX this bug. Does anyone disagree? If
&gt; &gt; &gt; so, we should discuss it on webkit-dev.
&gt; &gt; 
&gt; &gt; I agree, and wish I had thought of this earlier. I&apos;ve been helping Chang Shu
&gt; &gt; get the mechanical details right on this. If we do WONTFIX it, I think we may
&gt; &gt; want to undo some of the steps we have already done.
&gt; 
&gt; I agree that allowing multiple ID does not make too much sense and the current
&gt; implementation does support this anyway. However, I think having the ability to
&gt; customize id attribute is good to have since not all the identification of an
&gt; element is called &quot;id&quot; by nature.

sorry, this line &quot;the current implementation does support this anyway&quot; should read &quot;the current implementation does NOT support this anyway&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176841</commentid>
    <comment_count>52</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-04 13:26:54 -0800</bug_when>
    <thetext>Maciej said that if you disagree we should discuss on webkit-dev, so if you do, please move the discussion there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176853</commentid>
    <comment_count>53</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2010-01-04 13:31:13 -0800</bug_when>
    <thetext>(In reply to comment #52)
&gt; Maciej said that if you disagree we should discuss on webkit-dev, so if you do,
&gt; please move the discussion there.

Which webkit-dev? Can you make sure I am in the loop? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176856</commentid>
    <comment_count>54</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-04 13:34:39 -0800</bug_when>
    <thetext>(In reply to comment #53)
&gt; (In reply to comment #52)
&gt; &gt; Maciej said that if you disagree we should discuss on webkit-dev, so if you do,
&gt; &gt; please move the discussion there.
&gt; 
&gt; Which webkit-dev? Can you make sure I am in the loop? Thanks!

The webkit-dev mailing list. See this page &lt;http://webkit.org/contact.html&gt; for details.

You could start the discussion there. Then you will definitely be in the loop!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177338</commentid>
    <comment_count>55</comment_count>
      <attachid>45604</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-05 13:10:30 -0800</bug_when>
    <thetext>Comment on attachment 45604
implement setIdAttribute

For now I am clearing the review flag on this patch, pending discussion on webkit-dev. We can flag it for review again once we&apos;ve got consensus on what we want to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178027</commentid>
    <comment_count>56</comment_count>
      <attachid>44934</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-06 23:33:39 -0800</bug_when>
    <thetext>Comment on attachment 44934
fix broken build and some minor changes

Clearing Darin&apos;s r+ from this obsolete patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502947</commentid>
    <comment_count>57</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:03:19 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776695</commentid>
    <comment_count>58</comment_count>
    <who name="Sam Sneddon [:gsnedders]">gsnedders</who>
    <bug_when>2021-07-13 11:33:04 -0700</bug_when>
    <thetext>This has long-since been removed from the DOM spec, and now we&apos;re unambiguously following the WHATWG spec this is hence WONTFIX.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42148</attachid>
            <date>2009-10-29 14:44:13 -0700</date>
            <delta_ts>2009-10-30 11:22:26 -0700</delta_ts>
            <desc>patch 1</desc>
            <filename>bug5578_1.patch</filename>
            <type>text/plain</type>
            <size>10594</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0OTk4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDktMTAtMjkgIFNodSBDaGFuZyAgPENoYW5nLlNodUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50ZWQgaXNJZCBhbmQgc2V0SWRBdHRyaWJ1dGUgYXMgc3BlY2lmaWVkIGJ5IERPTSBMZXZl
bCAzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU3
OAorCisgICAgICAgIDEuIEludHJvZHVjZWQgaXNJZCBwcm9wZXJ0eSBpbiBBdHRyLgorICAgICAg
ICAyLiBJbnRyb2R1Y2VkIHRocmVlIHNldElkQXR0cmlidXRlIGZ1bmN0aW9ucyBpbiBFbGVtZW50
LgorICAgICAgICAzLiBBbiBJZEF0dHJpYnV0ZU5hbWUgaXMgYWRkZWQgaW4gRWxlbWVudFJhcmVE
YXRhIHRvIHNhdmUgdGhlIG5hbWUKKyAgICAgICAgb2YgdGhlIHVzZXItZGVmaW5lZCBJZCBhdHRy
aWJ1dGUuCisKKyAgICAgICAgdGVzdHM6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29y
ZS9hdHRyaXNpZFswMS0wN10ueGh0bWwKKworICAgICAgICAqIGRvbS9BdHRyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF0dHI6OmlzSWQpOgorICAgICAgICAqIGRvbS9BdHRyLmg6CisgICAgICAg
ICogZG9tL0F0dHIuaWRsOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnNldElkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OnNldElkQXR0cmlidXRlTlMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0SWRB
dHRyaWJ1dGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldElEQXR0cmlidXRl
TmFtZSk6CisgICAgICAgICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5p
ZGw6CisgICAgICAgICogZG9tL0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudFJhcmVEYXRhOjpFbGVtZW50UmFyZURhdGEpOgorCiAyMDA5LTEwLTIzICBLZWlzaGkg
SGF0dG9yaSAgPGNhc2V5LmhhdHRvcmlAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFRpbW90aHkgSGF0Y2hlci4KSW5kZXg6IFdlYkNvcmUvZG9tL0F0dHIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0F0dHIuY3BwCShyZXZpc2lvbiA0OTkzNykKKysrIFdlYkNvcmUvZG9t
L0F0dHIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlRleHQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMTY0LDQgKzE2NSwxMiBAQCB2b2lkIEF0dHI6OmNoaWxkcmVuQ2hhbmdl
ZChib29sIGNoYW5nZWRCCiAgICAgICAgIG1fZWxlbWVudC0+YXR0cmlidXRlQ2hhbmdlZChtX2F0
dHJpYnV0ZS5nZXQoKSk7CiB9CiAKK2Jvb2wgQXR0cjo6aXNJZCgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX2F0dHJp
YnV0ZS0+bG9jYWxOYW1lKCkgPT0gbV9lbGVtZW50LT5nZXRJREF0dHJpYnV0ZU5hbWUoKTsKK30K
KwogfQpJbmRleDogV2ViQ29yZS9kb20vQXR0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0F0dHIuaAkocmV2aXNpb24gNDk5MzcpCisrKyBXZWJDb3JlL2RvbS9BdHRyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDYgKzUyLDggQEAgcHVibGljOgogICAgIEF0dHJpYnV0ZSogYXR0cigpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlLmdldCgpOyB9CiAgICAgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgcXVhbGlmaWVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlLT5uYW1lKCk7IH0K
IAorICAgIGJvb2wgaXNJZCgpIGNvbnN0OworCiAgICAgLy8gQW4gZXh0ZW5zaW9uIHRvIGdldCBw
cmVzZW50YXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgYXR0cmlidXRlcy4KICAgICBDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSgpIHsgcmV0dXJuIG1fYXR0cmlidXRlLT5zdHlsZSgpOyB9CiAKSW5k
ZXg6IFdlYkNvcmUvZG9tL0F0dHIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0F0dHIu
aWRsCShyZXZpc2lvbiA0OTkzNykKKysrIFdlYkNvcmUvZG9tL0F0dHIuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw3ICszOCwxMCBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIC8vIERPTSBMZXZl
bCAyCiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEVsZW1lbnQgb3duZXJFbGVtZW50Owot
ICAgICAgICAKKworICAgICAgICAvLyBET00gTGV2ZWwgMworICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgYm9vbGVhbiBpc0lkOworCiAgICAgICAgIC8vIGV4dGVuc2lvbnMKICNpZiAhZGVmaW5l
ZChMQU5HVUFHRV9DT00pIHx8ICFMQU5HVUFHRV9DT00KICAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIENTU1N0eWxlRGVjbGFyYXRpb24gc3R5bGU7CkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gNDk5
MzcpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4MSw2
ICsxMTgxLDU4IEBAIGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlTlMoY29uc3QgU3RyaW4KICAg
ICByZXR1cm4gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
bG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpKTsKIH0KIAordm9pZCBFbGVtZW50OjpzZXRJZEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBxbmFtZSwgYm9vbCBpc0lkLCBFeGNlcHRpb25Db2Rl
JikKK3sKKyAgICBFbGVtZW50UmFyZURhdGEgKiBkYXRhID0gZW5zdXJlUmFyZURhdGEoKTsKKwor
ICAgIGlmIChpc0lkKQorICAgICAgICBkYXRhLT5tX0lkQXR0cmlidXRlTmFtZSA9IHFuYW1lLmxv
Y2FsTmFtZSgpOworICAgIGVsc2UKKyAgICAgICAgZGF0YS0+bV9JZEF0dHJpYnV0ZU5hbWUgPSBu
dWxsQXRvbTsKK30KKwordm9pZCBFbGVtZW50OjpzZXRJZEF0dHJpYnV0ZShjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIGJvb2wgaXNJZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFE
b2N1bWVudDo6aXNWYWxpZE5hbWUobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0NIQVJB
Q1RFUl9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGxvY2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1lLmxv
d2VyKCkgOiBuYW1lOworCisgICAgRWxlbWVudFJhcmVEYXRhICogZGF0YSA9IGVuc3VyZVJhcmVE
YXRhKCk7CisKKyAgICBpZiAoaXNJZCkKKyAgICAgICAgZGF0YS0+bV9JZEF0dHJpYnV0ZU5hbWUg
PSBsb2NhbE5hbWU7CisgICAgZWxzZQorICAgICAgICBkYXRhLT5tX0lkQXR0cmlidXRlTmFtZSA9
IG51bGxBdG9tOworfQorICAgIAordm9pZCBFbGVtZW50OjpzZXRJZEF0dHJpYnV0ZU5TKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFt
ZSwgYm9vbCBpc0lkLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBTdHJpbmcgc1ByZWZpeCwg
c0xvY2FsTmFtZTsKKyAgICBpZiAoIURvY3VtZW50OjpwYXJzZVF1YWxpZmllZE5hbWUobG9jYWxO
YW1lLCBzUHJlZml4LCBzTG9jYWxOYW1lLCBlYykpCisgICAgICAgIHJldHVybjsKKworICAgIFF1
YWxpZmllZE5hbWUgcU5hbWUoc1ByZWZpeCwgc0xvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKTsKKyAg
ICBzZXRJZEF0dHJpYnV0ZShxTmFtZSwgaXNJZCwgZWMpOworfQorCitQYXNzUmVmUHRyPEF0dHI+
IEVsZW1lbnQ6OnNldElkQXR0cmlidXRlTm9kZShBdHRyKiBhdHRyLCBib29sIGlzSWQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGlmICghYXR0cikgeworICAgICAgICBlYyA9IFRZUEVfTUlT
TUFUQ0hfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgc2V0SWRBdHRyaWJ1dGUo
YXR0ci0+cXVhbGlmaWVkTmFtZSgpLCBpc0lkLCBlYyk7CisgICAgcmV0dXJuIGF0dHI7Cit9CisK
K2NvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0SURBdHRyaWJ1dGVOYW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IHJhcmVEYXRhKCktPm1fSWRBdHRyaWJ1dGVO
YW1lIDogaWRBdHRyLmxvY2FsTmFtZSgpOworfQorCiBDU1NTdHlsZURlY2xhcmF0aW9uICpFbGVt
ZW50OjpzdHlsZSgpCiB7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiA0OTkzNykK
KysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiwx
MyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9p
ZCBzZXRBdHRyaWJ1dGVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3Qg
QXRvbWljU3RyaW5nJiBxdWFsaWZpZWROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBF
eGNlcHRpb25Db2RlJik7CiAKKyAgICB2b2lkIHNldElkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHFuYW1lLCBib29sIGlzSWQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldElk
QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBpc0lkLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCBzZXRJZEF0dHJpYnV0ZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgYm9vbCBpc0lkLCBFeGNl
cHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxBdHRyPiBzZXRJZEF0dHJpYnV0ZU5vZGUoQXR0
ciosIGJvb2wgaXNJZCwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBnZXRJREF0dHJpYnV0ZU5hbWUoKSBjb25zdDsKKwogICAgIHZvaWQgc2Nyb2xsSW50b1ZpZXco
Ym9vbCBhbGlnblRvVG9wID0gdHJ1ZSk7CiAgICAgdm9pZCBzY3JvbGxJbnRvVmlld0lmTmVlZGVk
KGJvb2wgY2VudGVySWZOZWVkZWQgPSB0cnVlKTsKIApJbmRleDogV2ViQ29yZS9kb20vRWxlbWVu
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5pZGwJKHJldmlzaW9uIDQ5
OTM3KQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYg
KzY3LDIwIEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW09sZFN0eWxlT2JqQ10gYm9vbGVhbiBo
YXNBdHRyaWJ1dGVOUyhpbiBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBuYW1l
c3BhY2VVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gRE9NU3RyaW5nIGxvY2FsTmFtZSk7CiAKKyAgICAgICAgLy8gRE9NIExldmVsIDMgQ29yZQor
CisgICAgICAgIFtPbGRTdHlsZU9iakNdIHZvaWQgc2V0SWRBdHRyaWJ1dGUoaW4gRE9NU3RyaW5n
IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9v
bGVhbiBpc0lkKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIFtP
bGRTdHlsZU9iakNdIHZvaWQgc2V0SWRBdHRyaWJ1dGVOUyhpbiBbQ29udmVydE51bGxUb051bGxT
dHJpbmddIERPTVN0cmluZyBuYW1lc3BhY2VVUkksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBET01TdHJpbmcgbG9jYWxOYW1lLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gaXNJZCkKKyAgICAg
ICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAKKyAgICAgICAgdm9pZCBzZXRJZEF0dHJp
YnV0ZU5vZGUoaW4gQXR0ciBpZEF0dHIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBib29sZWFuIGlzSWQpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKwog
I2lmICFkZWZpbmVkKExBTkdVQUdFX0NPTSkgfHwgIUxBTkdVQUdFX0NPTQogICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgQ1NTU3R5bGVEZWNsYXJhdGlvbiBzdHlsZTsKICNlbmRpZgpJbmRleDog
V2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RWxlbWVudFJhcmVEYXRhLmgJKHJldmlzaW9uIDQ5OTM3KQorKysgV2ViQ29yZS9kb20vRWxlbWVu
dFJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZpbmUgRWxl
bWVudFJhcmVEYXRhX2gKIAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMzgsNiArMzksNyBAQCBwdWJsaWM6CiAKICAgICBJbnRTaXplIG1fbWluaW11bVNpemVGb3JS
ZXNpemluZzsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fY29tcHV0ZWRTdHlsZTsKKyAgICBB
dG9taWNTdHJpbmcgbV9JZEF0dHJpYnV0ZU5hbWU7CiB9OwogCiBpbmxpbmUgSW50U2l6ZSBkZWZh
dWx0TWluaW11bVNpemVGb3JSZXNpemluZygpCkBAIC00Nyw2ICs0OSw3IEBAIGlubGluZSBJbnRT
aXplIGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2kKIAogaW5saW5lIEVsZW1lbnRSYXJlRGF0YTo6
RWxlbWVudFJhcmVEYXRhKCkKICAgICA6IG1fbWluaW11bVNpemVGb3JSZXNpemluZyhkZWZhdWx0
TWluaW11bVNpemVGb3JSZXNpemluZygpKQorICAgICwgbV9JZEF0dHJpYnV0ZU5hbWUoSFRNTE5h
bWVzOjppZEF0dHIubG9jYWxOYW1lKCkpCiB7CiB9CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDUwMjE2
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYg
QEAKKzIwMDktMTAtMjkgIFNodSBDaGFuZyAgPENoYW5nLlNodUBub2tpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHRoZSBmb2xs
b3dpbmcgdGVzdCBjYXNlcyBhcyBmZWF0dXJlIGltcGxlbWVudGVkLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU3OAorCisgICAgICAgICogZG9tL3ho
dG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94
aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA0LmpzOgorICAgICAgICAoc2V0VXBQYWdlKToKKyAg
ICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNS1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDUuanM6CisgICAgICAgIChz
ZXRVcFBhZ2UpOgorCisyMDA5LTEwLTI4ICBTaHUgQ2hhbmcgIDxDaGFuZy5TaHVAbm9raWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVk
IHNwZWNpYWwgZXhwZWN0ZWQgdGVzdCByZXN1bHQgZm9yIFRpZ2VyIHRvIGZpeCByZWdyZXNzaW9u
IHRlc3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzA4MTEKKworICAgICAgICAqIHBsYXRmb3JtL21hYy10aWdlci9mYXN0L2pzL25hdmlnYXRvci1s
YW5ndWFnZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDA5LTEwLTI4ICBDc2FiYSBPc3p0cm9n
b27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgSG9s
Z2VyIEZyZXl0aGVyLgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0
dHJpc2lkMDQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRt
bC9sZXZlbDMvY29yZS9hdHRyaXNpZDA0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDk5MzcpCisr
KyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNC1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3Jn
LzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNAotU3RhdHVzCXNraXAK
LU1lc3NhZ2UJSFRNTCBsb2FkZXIgZG9lcyBub3Qgc3VwcG9ydCB2YWxpZGF0aW5nPXRydWUKK1N0
YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0
cmlzaWQwNC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2Nv
cmUvYXR0cmlzaWQwNC5qcwkocmV2aXNpb24gNDk5MzcpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0
bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNC5qcwkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzks
NiBAQCBmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CiAgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3Vt
ZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KICAgICAgLy8KICAgICAgYnVpbGRlciA9
IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7Ci0gICAgICAgc2V0SW1wbGVtZW50YXRpb25BdHRy
aWJ1dGUoInZhbGlkYXRpbmciLCB0cnVlKTsKIAogICAgICAgZG9jc0xvYWRlZCA9IDA7CiAgICAg
ICAKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA1LWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2Nv
cmUvYXR0cmlzaWQwNS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDQ5OTM3KQorKysgTGF5b3V0VGVz
dHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDUtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1U
ZXN0LVN1aXRlL2xldmVsMy9jb3JlL2F0dHJpc2lkMDUKLVN0YXR1cwlza2lwCi1NZXNzYWdlCUhU
TUwgbG9hZGVyIGRvZXMgbm90IHN1cHBvcnQgdmFsaWRhdGluZz10cnVlCitTdGF0dXMJU3VjY2Vz
cwpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lk
MDUuanMJKHJldmlzaW9uIDQ5OTM3KQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9j
b3JlL2F0dHJpc2lkMDUuanMJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAgZnVuY3Rp
b24gc2V0VXBQYWdlKCkgewogICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVy
LCBtYXkgdGhyb3cgZXhjZXB0aW9uCiAgICAgIC8vCiAgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25m
aWd1cmVkQnVpbGRlcigpOwotICAgICAgIHNldEltcGxlbWVudGF0aW9uQXR0cmlidXRlKCJ2YWxp
ZGF0aW5nIiwgdHJ1ZSk7CiAKICAgICAgIGRvY3NMb2FkZWQgPSAwOwogICAgICAgCg==
</data>
<flag name="review"
          id="23651"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42220</attachid>
            <date>2009-10-30 11:22:26 -0700</date>
            <delta_ts>2009-11-09 12:26:11 -0800</delta_ts>
            <desc>patch based on Darin&apos;s review</desc>
            <filename>bug5578_2.patch</filename>
            <type>text/plain</type>
            <size>13973</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDMxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDktMTAtMjkgIFNodSBDaGFuZyAgPENoYW5nLlNodUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50ZWQgaXNJZCBhbmQgc2V0SWRBdHRyaWJ1dGUgYXMgc3BlY2lmaWVkIGJ5IERPTSBMZXZl
bCAzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU3
OAorCisgICAgICAgIDEuIEludHJvZHVjZWQgaXNJZCBwcm9wZXJ0eSBpbiBBdHRyLgorICAgICAg
ICAyLiBJbnRyb2R1Y2VkIHRocmVlIHNldElkQXR0cmlidXRlIGZ1bmN0aW9ucyBpbiBFbGVtZW50
LgorICAgICAgICAzLiBBbiBJZEF0dHJpYnV0ZU5hbWUgd2FzIGFkZGVkIGluIEVsZW1lbnRSYXJl
RGF0YSB0byBzYXZlIHRoZSBuYW1lCisgICAgICAgIG9mIHRoZSB1c2VyLWRlZmluZWQgSWQgYXR0
cmlidXRlLgorCisgICAgICAgIHRlc3RzOiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2Nv
cmUvYXR0cmlzaWRbMDEtMDddLnhodG1sCisKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBdHRyOjppc0lkKToKKyAgICAgICAgKiBkb20vQXR0ci5oOgorICAgICAg
ICAqIGRvbS9BdHRyLmlkbDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjpzZXRJZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpzZXRJZEF0dHJpYnV0ZU5TKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldElk
QXR0cmlidXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRJREF0dHJpYnV0
ZU5hbWUpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9tL0VsZW1lbnQu
aWRsOgorICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnRSYXJlRGF0YTo6RWxlbWVudFJhcmVEYXRhKToKKwogMjAwOS0xMC0yOSAgRW5yaWNh
IENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgpJbmRleDogV2ViQ29yZS9kb20vQXR0ci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vQXR0ci5jcHAJKHJldmlzaW9uIDQ5OTM3KQorKysgV2ViQ29yZS9kb20vQXR0ci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0xNjQsNCArMTY1LDEyIEBAIHZvaWQgQXR0cjo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hh
bmdlZEIKICAgICAgICAgbV9lbGVtZW50LT5hdHRyaWJ1dGVDaGFuZ2VkKG1fYXR0cmlidXRlLmdl
dCgpKTsKIH0KIAorYm9vbCBBdHRyOjppc0lkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHF1YWxpZmllZE5hbWUoKS5t
YXRjaGVzKG1fZWxlbWVudC0+Z2V0SURBdHRyaWJ1dGVOYW1lKCkpOworfQorCiB9CkluZGV4OiBX
ZWJDb3JlL2RvbS9BdHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQXR0ci5oCShyZXZp
c2lvbiA0OTkzNykKKysrIFdlYkNvcmUvZG9tL0F0dHIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
NiArNTIsOCBAQCBwdWJsaWM6CiAgICAgQXR0cmlidXRlKiBhdHRyKCkgY29uc3QgeyByZXR1cm4g
bV9hdHRyaWJ1dGUuZ2V0KCk7IH0KICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBxdWFsaWZpZWRO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGUtPm5hbWUoKTsgfQogCisgICAgYm9vbCBp
c0lkKCkgY29uc3Q7CisKICAgICAvLyBBbiBleHRlbnNpb24gdG8gZ2V0IHByZXNlbnRhdGlvbmFs
IGluZm9ybWF0aW9uIGZvciBhdHRyaWJ1dGVzLgogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKCkgeyByZXR1cm4gbV9hdHRyaWJ1dGUtPnN0eWxlKCk7IH0KIApJbmRleDogV2ViQ29yZS9k
b20vQXR0ci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQXR0ci5pZGwJKHJldmlzaW9u
IDQ5OTM3KQorKysgV2ViQ29yZS9kb20vQXR0ci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDExIEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgLy8gRE9NIExldmVsIDIKIAogICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRWxlbWVudCBvd25lckVsZW1lbnQ7Ci0gICAgICAgIAorCisg
ICAgICAgIC8vIERPTSBMZXZlbCAzCisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xl
YW4gaXNJZDsKKwogICAgICAgICAvLyBleHRlbnNpb25zCiAjaWYgIWRlZmluZWQoTEFOR1VBR0Vf
Q09NKSB8fCAhTEFOR1VBR0VfQ09NCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDU1NTdHls
ZURlY2xhcmF0aW9uIHN0eWxlOwpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ5OTM3KQorKysgV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMyw3ICs1MjMsNyBAQCB2
b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTCiAKICAgICBkb2N1bWVudCgp
LT5pbmNET01UcmVlVmVyc2lvbigpOwogCi0gICAgaWYgKGxvY2FsTmFtZSA9PSBpZEF0dHIubG9j
YWxOYW1lKCkpCisgICAgaWYgKGxvY2FsTmFtZSA9PSBnZXRJREF0dHJpYnV0ZU5hbWUoKS5sb2Nh
bE5hbWUoKSkKICAgICAgICAgdXBkYXRlSWQob2xkID8gb2xkLT52YWx1ZSgpIDogbnVsbEF0b20s
IHZhbHVlKTsKICAgICAKICAgICBpZiAob2xkICYmIHZhbHVlLmlzTnVsbCgpKQpAQCAtNTQzLDcg
KzU0Myw3IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmkKICAgICAv
LyBhbGxvY2F0ZSBhdHRyaWJ1dGVtYXAgaWYgbmVjZXNzYXJ5CiAgICAgQXR0cmlidXRlKiBvbGQg
PSBhdHRyaWJ1dGVzKGZhbHNlKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsKIAotICAgIGlmIChu
YW1lID09IGlkQXR0cikKKyAgICBpZiAobmFtZSA9PSBnZXRJREF0dHJpYnV0ZU5hbWUoKSkKICAg
ICAgICAgdXBkYXRlSWQob2xkID8gb2xkLT52YWx1ZSgpIDogbnVsbEF0b20sIHZhbHVlKTsKICAg
ICAKICAgICBpZiAob2xkICYmIHZhbHVlLmlzTnVsbCgpKQpAQCAtNTk4LDggKzU5OCw4IEBAIHZv
aWQgRWxlbWVudDo6c2V0QXR0cmlidXRlTWFwKFBhc3NSZWZQdHIKIAogICAgIC8vIElmIHNldHRp
bmcgdGhlIHdob2xlIG1hcCBjaGFuZ2VzIHRoZSBpZCBhdHRyaWJ1dGUsIHdlIG5lZWQgdG8gY2Fs
bCB1cGRhdGVJZC4KIAotICAgIEF0dHJpYnV0ZSogb2xkSWQgPSBuYW1lZEF0dHJNYXAgPyBuYW1l
ZEF0dHJNYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaWRBdHRyKSA6IDA7Ci0gICAgQXR0cmlidXRlKiBu
ZXdJZCA9IGxpc3QgPyBsaXN0LT5nZXRBdHRyaWJ1dGVJdGVtKGlkQXR0cikgOiAwOworICAgIEF0
dHJpYnV0ZSogb2xkSWQgPSBuYW1lZEF0dHJNYXAgPyBuYW1lZEF0dHJNYXAtPmdldEF0dHJpYnV0
ZUl0ZW0oZ2V0SURBdHRyaWJ1dGVOYW1lKCkpIDogMDsKKyAgICBBdHRyaWJ1dGUqIG5ld0lkID0g
bGlzdCA/IGxpc3QtPmdldEF0dHJpYnV0ZUl0ZW0oZ2V0SURBdHRyaWJ1dGVOYW1lKCkpIDogMDsK
IAogICAgIGlmIChvbGRJZCB8fCBuZXdJZCkKICAgICAgICAgdXBkYXRlSWQob2xkSWQgPyBvbGRJ
ZC0+dmFsdWUoKSA6IG51bGxBdG9tLCBuZXdJZCA/IG5ld0lkLT52YWx1ZSgpIDogbnVsbEF0b20p
OwpAQCAtNzA0LDcgKzcwNCw3IEBAIHZvaWQgRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQo
KQogCiAgICAgaWYgKGhhc0lEKCkpIHsKICAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cnMg
PSBuYW1lZEF0dHJNYXAuZ2V0KCkpIHsKLSAgICAgICAgICAgIEF0dHJpYnV0ZSogaWRJdGVtID0g
YXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oaWRBdHRyKTsKKyAgICAgICAgICAgIEF0dHJpYnV0ZSog
aWRJdGVtID0gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oZ2V0SURBdHRyaWJ1dGVOYW1lKCkpOwog
ICAgICAgICAgICAgaWYgKGlkSXRlbSAmJiAhaWRJdGVtLT5pc051bGwoKSkKICAgICAgICAgICAg
ICAgICB1cGRhdGVJZChudWxsQXRvbSwgaWRJdGVtLT52YWx1ZSgpKTsKICAgICAgICAgfQpAQCAt
NzE1LDcgKzcxNSw3IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCiB7CiAg
ICAgaWYgKGhhc0lEKCkpIHsKICAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cnMgPSBuYW1l
ZEF0dHJNYXAuZ2V0KCkpIHsKLSAgICAgICAgICAgIEF0dHJpYnV0ZSogaWRJdGVtID0gYXR0cnMt
PmdldEF0dHJpYnV0ZUl0ZW0oaWRBdHRyKTsKKyAgICAgICAgICAgIEF0dHJpYnV0ZSogaWRJdGVt
ID0gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oZ2V0SURBdHRyaWJ1dGVOYW1lKCkpOwogICAgICAg
ICAgICAgaWYgKGlkSXRlbSAmJiAhaWRJdGVtLT5pc051bGwoKSkKICAgICAgICAgICAgICAgICB1
cGRhdGVJZChpZEl0ZW0tPnZhbHVlKCksIG51bGxBdG9tKTsKICAgICAgICAgfQpAQCAtMTA1OCw3
ICsxMDU4LDcgQEAgdm9pZCBFbGVtZW50Ojpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidQogICAg
ICAgICByZXN1bHQgKz0gczsKICAgICB9CiAgICAgICAgICAgCi0gICAgcyA9IGdldEF0dHJpYnV0
ZShpZEF0dHIpOworICAgIHMgPSBnZXRBdHRyaWJ1dGUoZ2V0SURBdHRyaWJ1dGVOYW1lKCkpOwog
ICAgIGlmIChzLmxlbmd0aCgpID4gMCkgewogICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpID4g
MCkKICAgICAgICAgICAgIHJlc3VsdCArPSAiOyAiOwpAQCAtMTE4MSw2ICsxMTgxLDUyIEBAIGJv
b2wgRWxlbWVudDo6aGFzQXR0cmlidXRlTlMoY29uc3QgU3RyaW4KICAgICByZXR1cm4gYXR0cnMt
PmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1l
c3BhY2VVUkkpKTsKIH0KIAordm9pZCBFbGVtZW50OjpzZXRJZEF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBxdWFsaWZpZWROYW1lLCBib29sIGlzSWQpCit7CisgICAgRWxlbWVudFJhcmVE
YXRhKiBkYXRhID0gZW5zdXJlUmFyZURhdGEoKTsKKworICAgIGlmIChpc0lkKQorICAgICAgICBk
YXRhLT5tX2lkQXR0cmlidXRlTmFtZSA9IHF1YWxpZmllZE5hbWU7CisgICAgZWxzZQorICAgICAg
ICBkYXRhLT5tX2lkQXR0cmlidXRlTmFtZSA9IFF1YWxpZmllZE5hbWUobnVsbEF0b20sIG51bGxB
dG9tLCBudWxsQXRvbSk7Cit9CisKK3ZvaWQgRWxlbWVudDo6c2V0SWRBdHRyaWJ1dGUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sIGlzSWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICgh
RG9jdW1lbnQ6OmlzVmFsaWROYW1lKG5hbWUpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9DSEFS
QUNURVJfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2NhbE5hbWUgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpID8gbmFtZS5s
b3dlcigpIDogbmFtZTsKKworICAgIEVsZW1lbnRSYXJlRGF0YSAqIGRhdGEgPSBlbnN1cmVSYXJl
RGF0YSgpOworCisgICAgaWYgKGlzSWQpCisgICAgICAgIGRhdGEtPm1faWRBdHRyaWJ1dGVOYW1l
ID0gUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBudWxsQXRvbSk7CisgICAgZWxz
ZQorICAgICAgICBkYXRhLT5tX2lkQXR0cmlidXRlTmFtZSA9IFF1YWxpZmllZE5hbWUobnVsbEF0
b20sIG51bGxBdG9tLCBudWxsQXRvbSk7Cit9CisgICAgCit2b2lkIEVsZW1lbnQ6OnNldElkQXR0
cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxO
YW1lLCBib29sIGlzSWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldElkQXR0cmlidXRl
KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKSwgaXNJZCk7
Cit9CisKK3ZvaWQgRWxlbWVudDo6c2V0SWRBdHRyaWJ1dGVOb2RlKEF0dHIqIGF0dHIsIGJvb2wg
aXNJZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFhdHRyKSB7CisgICAgICAgIGVj
ID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2V0SWRB
dHRyaWJ1dGUoYXR0ci0+cXVhbGlmaWVkTmFtZSgpLCBpc0lkKTsKK30KKworY29uc3QgUXVhbGlm
aWVkTmFtZSYgRWxlbWVudDo6Z2V0SURBdHRyaWJ1dGVOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaGFzUmFyZURhdGEoKSA/IHJhcmVEYXRhKCktPm1faWRBdHRyaWJ1dGVOYW1lIDogaWRBdHRy
OworfQorCiBDU1NTdHlsZURlY2xhcmF0aW9uICpFbGVtZW50OjpzdHlsZSgpCiB7CiAgICAgcmV0
dXJuIDA7CkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiA0OTkzNykKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVOUyhjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBxdWFsaWZpZWRO
YW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CiAKKyAgICB2
b2lkIHNldElkQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBpc0lkLCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCBzZXRJZEF0dHJpYnV0ZU5TKGNvbnN0IFN0cmluZyYgbmFtZXNw
YWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSwgYm9vbCBpc0lkLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCBzZXRJZEF0dHJpYnV0ZU5vZGUoQXR0ciosIGJvb2wgaXNJZCwgRXhjZXB0
aW9uQ29kZSYpOworCisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgZ2V0SURBdHRyaWJ1dGVOYW1l
KCkgY29uc3Q7CisKICAgICB2b2lkIHNjcm9sbEludG9WaWV3KGJvb2wgYWxpZ25Ub1RvcCA9IHRy
dWUpOwogICAgIHZvaWQgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChib29sIGNlbnRlcklmTmVlZGVk
ID0gdHJ1ZSk7CiAKQEAgLTE2Nyw2ICsxNzMsNyBAQCBwdWJsaWM6CiAgICAgLy8gY29udmVuaWVu
Y2UgbWV0aG9kcyB3aGljaCBpZ25vcmUgZXhjZXB0aW9ucwogICAgIHZvaWQgc2V0QXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKICAgICB2
b2lkIHNldEJvb2xlYW5BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgYm9vbCk7
CisgICAgdm9pZCBzZXRJZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBxdWFsaWZpZWRO
YW1lLCBib29sIGlzSWQpOwogCiAgICAgdmlydHVhbCBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMo
KSBjb25zdDsKICAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMoYm9vbCByZWFkb25seSkgY29u
c3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9FbGVtZW50LmlkbAkocmV2aXNpb24gNDk5MzcpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMTkgQEAgbW9kdWxlIGNvcmUgewogICAg
ICAgICBbT2xkU3R5bGVPYmpDXSBib29sZWFuIGhhc0F0dHJpYnV0ZU5TKGluIFtDb252ZXJ0TnVs
bFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBET01TdHJpbmcgbG9jYWxOYW1lKTsKIAor
ICAgICAgICAvLyBET00gTGV2ZWwgMyBDb3JlCisKKyAgICAgICAgdm9pZCBzZXRJZEF0dHJpYnV0
ZShpbiBET01TdHJpbmcgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29s
ZWFuIGlzSWQpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgdm9p
ZCBzZXRJZEF0dHJpYnV0ZU5TKGluIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5n
IG5hbWVzcGFjZVVSSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIERPTVN0cmlu
ZyBsb2NhbE5hbWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBp
c0lkKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgc2V0
SWRBdHRyaWJ1dGVOb2RlKGluIEF0dHIgaWRBdHRyLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW4gYm9vbGVhbiBpc0lkKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlv
bik7CisKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9DT00pIHx8ICFMQU5HVUFHRV9DT00KICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIENTU1N0eWxlRGVjbGFyYXRpb24gc3R5bGU7CiAjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCShyZXZpc2lvbiA0OTkzNykKKysrIFdlYkNvcmUvZG9t
L0VsZW1lbnRSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVm
aW5lIEVsZW1lbnRSYXJlRGF0YV9oCiAKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTM4LDYgKzM5LDcgQEAgcHVibGljOgogCiAgICAgSW50U2l6ZSBtX21pbmltdW1T
aXplRm9yUmVzaXppbmc7CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX2NvbXB1dGVkU3R5bGU7
CisgICAgUXVhbGlmaWVkTmFtZSBtX2lkQXR0cmlidXRlTmFtZTsKIH07CiAKIGlubGluZSBJbnRT
aXplIGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkKQEAgLTQ3LDYgKzQ5LDcgQEAgaW5s
aW5lIEludFNpemUgZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaQogCiBpbmxpbmUgRWxlbWVudFJh
cmVEYXRhOjpFbGVtZW50UmFyZURhdGEoKQogICAgIDogbV9taW5pbXVtU2l6ZUZvclJlc2l6aW5n
KGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkpCisgICAgLCBtX2lkQXR0cmlidXRlTmFt
ZShIVE1MTmFtZXM6OmlkQXR0cikKIHsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vTmFtZWRBdHRy
TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuY3BwCShyZXZp
c2lvbiA0OTkzNykKKysrIFdlYkNvcmUvZG9tL05hbWVkQXR0ck1hcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6c2V0
TmFtZWRJCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmIChhLT5uYW1lKCkgPT0g
aWRBdHRyKQorICAgIGlmIChhdHRyLT5pc0lkKCkpCiAgICAgICAgIG1fZWxlbWVudC0+dXBkYXRl
SWQob2xkID8gb2xkLT52YWx1ZSgpIDogbnVsbEF0b20sIGEtPnZhbHVlKCkpOwogCiAgICAgLy8g
IyMjIHNsaWdodGx5IGluZWZmaWNpZW50IC0gcmVzaXplcyBhdHRyaWJ1dGUgYXJyYXkgdHdpY2Uu
CkBAIC0xNTUsOSArMTU1LDkgQEAgUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OnJlbW92
ZU5hbQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8Tm9kZT4gciA9IGEt
PmNyZWF0ZUF0dHJJZk5lZWRlZChtX2VsZW1lbnQpOworICAgIFJlZlB0cjxBdHRyPiByID0gYS0+
Y3JlYXRlQXR0cklmTmVlZGVkKG1fZWxlbWVudCk7CiAKLSAgICBpZiAobmFtZSA9PSBpZEF0dHIp
CisgICAgaWYgKHItPmlzSWQoKSkKICAgICAgICAgbV9lbGVtZW50LT51cGRhdGVJZChhLT52YWx1
ZSgpLCBudWxsQXRvbSk7CiAKICAgICByZW1vdmVBdHRyaWJ1dGUobmFtZSk7CkBAIC0yMjAsOCAr
MjIwLDggQEAgdm9pZCBOYW1lZE5vZGVNYXA6OnNldEF0dHJpYnV0ZXMoY29uc3QgTgogCiAgICAg
Ly8gSWYgYXNzaWduaW5nIHRoZSBtYXAgY2hhbmdlcyB0aGUgaWQgYXR0cmlidXRlLCB3ZSBuZWVk
IHRvIGNhbGwKICAgICAvLyB1cGRhdGVJZC4KLSAgICBBdHRyaWJ1dGUgKm9sZElkID0gZ2V0QXR0
cmlidXRlSXRlbShpZEF0dHIpOwotICAgIEF0dHJpYnV0ZSAqbmV3SWQgPSBvdGhlci5nZXRBdHRy
aWJ1dGVJdGVtKGlkQXR0cik7CisgICAgQXR0cmlidXRlICpvbGRJZCA9IGdldEF0dHJpYnV0ZUl0
ZW0obV9lbGVtZW50LT5nZXRJREF0dHJpYnV0ZU5hbWUoKSk7CisgICAgQXR0cmlidXRlICpuZXdJ
ZCA9IG90aGVyLmdldEF0dHJpYnV0ZUl0ZW0obV9lbGVtZW50LT5nZXRJREF0dHJpYnV0ZU5hbWUo
KSk7CiAKICAgICBpZiAob2xkSWQgfHwgbmV3SWQpCiAgICAgICAgIG1fZWxlbWVudC0+dXBkYXRl
SWQob2xkSWQgPyBvbGRJZC0+dmFsdWUoKSA6IG51bGxBdG9tLCBuZXdJZCA/IG5ld0lkLT52YWx1
ZSgpIDogbnVsbEF0b20pOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTAzNDUpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAwOS0xMC0zMCAg
U2h1IENoYW5nICA8Q2hhbmcuU2h1QG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUgdGhlIGZvbGxvd2luZyB0ZXN0IGNhc2Vz
IGFzIGZlYXR1cmUgaW1wbGVtZW50ZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NTc4CisKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUv
YXR0cmlzaWQwNC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3Jl
L2F0dHJpc2lkMDQuanM6CisgICAgICAgIChzZXRVcFBhZ2UpOgorICAgICAgICAqIGRvbS94aHRt
bC9sZXZlbDMvY29yZS9hdHRyaXNpZDA1LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0
bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNS5qczoKKyAgICAgICAgKHNldFVwUGFnZSk6CisKIDIw
MDktMTAtMzAgIFNoaW5pY2hpcm8gSGFtYWppICA8aGFtYWppQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRt
bC9sZXZlbDMvY29yZS9hdHRyaXNpZDA0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDQ5OTM3KQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJp
c2lkMDQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlo
dHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL2F0dHJpc2lk
MDQKLVN0YXR1cwlza2lwCi1NZXNzYWdlCUhUTUwgbG9hZGVyIGRvZXMgbm90IHN1cHBvcnQgdmFs
aWRhdGluZz10cnVlCitTdGF0dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1s
L2xldmVsMy9jb3JlL2F0dHJpc2lkMDQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9t
L3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQuanMJKHJldmlzaW9uIDQ5OTM3KQorKysgTGF5
b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDcgKzM5LDYgQEAgZnVuY3Rpb24gc2V0VXBQYWdlKCkgewogICAgICAvLyAgIGNy
ZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCiAgICAgIC8v
CiAgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOwotICAgICAgIHNldElt
cGxlbWVudGF0aW9uQXR0cmlidXRlKCJ2YWxpZGF0aW5nIiwgdHJ1ZSk7CiAKICAgICAgIGRvY3NM
b2FkZWQgPSAwOwogICAgICAgCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2Nv
cmUvYXR0cmlzaWQwNS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9t
L3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA0OTkz
NykKKysrIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA1LWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53
My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS9hdHRyaXNpZDA1Ci1TdGF0dXMJ
c2tpcAotTWVzc2FnZQlIVE1MIGxvYWRlciBkb2VzIG5vdCBzdXBwb3J0IHZhbGlkYXRpbmc9dHJ1
ZQorU3RhdHVzCVN1Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29y
ZS9hdHRyaXNpZDA1LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZl
bDMvY29yZS9hdHRyaXNpZDA1LmpzCShyZXZpc2lvbiA0OTkzNykKKysrIExheW91dFRlc3RzL2Rv
bS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA1LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3
ICszOSw2IEBAIGZ1bmN0aW9uIHNldFVwUGFnZSgpIHsKICAgICAgLy8gICBjcmVhdGVzIHRlc3Qg
ZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgogICAgICAvLwogICAgICBidWls
ZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKLSAgICAgICBzZXRJbXBsZW1lbnRhdGlv
bkF0dHJpYnV0ZSgidmFsaWRhdGluZyIsIHRydWUpOwogCiAgICAgICBkb2NzTG9hZGVkID0gMDsK
ICAgICAgIAo=
</data>
<flag name="review"
          id="23723"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42779</attachid>
            <date>2009-11-09 12:26:11 -0800</date>
            <delta_ts>2009-12-14 12:27:48 -0800</delta_ts>
            <desc>fix performance issue; pass related test cases</desc>
            <filename>bug5578_3.patch</filename>
            <type>text/plain</type>
            <size>33359</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDY2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDktMTEtMDkgIFNodSBDaGFuZyAgPENoYW5nLlNodUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50ZWQgaXNJZCBhbmQgc2V0SWRBdHRyaWJ1dGUgYXMgc3BlY2lmaWVkIGJ5IERPTSBMZXZl
bCAzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU3
OAorCisgICAgICAgIDEuIEludHJvZHVjZWQgaXNJZCBwcm9wZXJ0eSBpbiBBdHRyLmlkbC4KKyAg
ICAgICAgMi4gSW50cm9kdWNlZCB0aHJlZSBzZXRJZEF0dHJpYnV0ZSBmdW5jdGlvbnMgaW4gRWxl
bWVudC5pZGwuCisgICAgICAgIDMuIFVzZWQgRWxlbWVudFJhcmVEYXRhIHRvIHN0b3JlIHVzZXIt
ZGVmaW5lZCBJZCBhdHRyaWJ1dGUuCisgICAgICAgIDQuIFJlcGxhY2VkIGhhcmQtY29kZWQgaWRB
dHRyIHdpdGggZnVuY3Rpb24gaWRBdHRyaWJ1dGVOYW1lKCkuCisKKyAgICAgICAgVGVzdHM6IExh
eW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZFswMS0wN10ueGh0bWwKKyAg
ICAgICAgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJp
YnV0ZVswMS0xMV0ueGh0bWwKKyAgICAgICAgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9j
b3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGVbMDEtMTBdLnhodG1sCisgICAgICAgIExheW91
dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuc1swMS0x
NF0ueGh0bWwKKworICAgICAgICAqIGRvbS9BdHRyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF0
dHI6OmlzSWQpOgorICAgICAgICAqIGRvbS9BdHRyLmg6CisgICAgICAgICogZG9tL0F0dHIuaWRs
OgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OnNldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRyaWJ1dGVN
YXApOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50Ojpmb3JtYXRGb3JEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpzZXRJZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpz
ZXRJZEF0dHJpYnV0ZU5TKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldElkQXR0cmli
dXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyYXJlSURBdHRyaWJ1dGVOYW1l
KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
aWRBdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5pZGw6CisgICAgICAgICog
ZG9tL0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRh
OjpFbGVtZW50UmFyZURhdGEpOgorICAgICAgICAqIGRvbS9OYW1lZEF0dHJNYXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjpzZXROYW1lZEl0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6TmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
TmFtZWROb2RlTWFwOjpzZXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisKIDIwMDktMTEtMDkgIEtldmluIFdhdHRlcnMgIDxrZXZpbndhdHRlcnNAZ21haWwu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9k
b20vQXR0ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQXR0ci5jcHAJKHJldmlzaW9u
IDUwMzAyKQorKysgV2ViQ29yZS9kb20vQXR0ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw0
ICsxNjQsMTIgQEAgdm9pZCBBdHRyOjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQgogICAg
ICAgICBtX2VsZW1lbnQtPmF0dHJpYnV0ZUNoYW5nZWQobV9hdHRyaWJ1dGUuZ2V0KCkpOwogfQog
Citib29sIEF0dHI6OmlzSWQoKSBjb25zdAoreworICAgIGlmICghbV9lbGVtZW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcXVhbGlmaWVkTmFtZSgpLm1hdGNoZXMobV9l
bGVtZW50LT5pZEF0dHJpYnV0ZU5hbWUoKSk7Cit9CisKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0F0
dHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9BdHRyLmgJKHJldmlzaW9uIDUwMzAyKQor
KysgV2ViQ29yZS9kb20vQXR0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw4IEBAIHB1
YmxpYzoKICAgICBBdHRyaWJ1dGUqIGF0dHIoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZS5n
ZXQoKTsgfQogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHF1YWxpZmllZE5hbWUoKSBjb25zdCB7
IHJldHVybiBtX2F0dHJpYnV0ZS0+bmFtZSgpOyB9CiAKKyAgICBib29sIGlzSWQoKSBjb25zdDsK
KwogICAgIC8vIEFuIGV4dGVuc2lvbiB0byBnZXQgcHJlc2VudGF0aW9uYWwgaW5mb3JtYXRpb24g
Zm9yIGF0dHJpYnV0ZXMuCiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSB7IHJldHVy
biBtX2F0dHJpYnV0ZS0+c3R5bGUoKTsgfQogCkluZGV4OiBXZWJDb3JlL2RvbS9BdHRyLmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9BdHRyLmlkbAkocmV2aXNpb24gNTAzMDIpCisrKyBX
ZWJDb3JlL2RvbS9BdHRyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsMTEgQEAgbW9k
dWxlIGNvcmUgewogICAgICAgICAvLyBET00gTGV2ZWwgMgogCiAgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBFbGVtZW50IG93bmVyRWxlbWVudDsKLSAgICAgICAgCisKKyAgICAgICAgLy8gRE9N
IExldmVsIDMKKworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBpc0lkOworCiAg
ICAgICAgIC8vIGV4dGVuc2lvbnMKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9DT00pIHx8ICFMQU5H
VUFHRV9DT00KICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENTU1N0eWxlRGVjbGFyYXRpb24g
c3R5bGU7CkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gNTAzMDIpCisrKyBXZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIzLDcgKzUyMyw3IEBAIHZvaWQgRWxlbWVudDo6
c2V0QXR0cmlidXRlKGNvbnN0IEF0b21pY1MKIAogICAgIGRvY3VtZW50KCktPmluY0RPTVRyZWVW
ZXJzaW9uKCk7CiAKLSAgICBpZiAobG9jYWxOYW1lID09IGlkQXR0ci5sb2NhbE5hbWUoKSkKKyAg
ICBpZiAobG9jYWxOYW1lID09IGlkQXR0cmlidXRlTmFtZSgpLmxvY2FsTmFtZSgpKQogICAgICAg
ICB1cGRhdGVJZChvbGQgPyBvbGQtPnZhbHVlKCkgOiBudWxsQXRvbSwgdmFsdWUpOwogICAgIAog
ICAgIGlmIChvbGQgJiYgdmFsdWUuaXNOdWxsKCkpCkBAIC01NDMsNyArNTQzLDcgQEAgdm9pZCBF
bGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaQogICAgIC8vIGFsbG9jYXRlIGF0dHJp
YnV0ZW1hcCBpZiBuZWNlc3NhcnkKICAgICBBdHRyaWJ1dGUqIG9sZCA9IGF0dHJpYnV0ZXMoZmFs
c2UpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOwogCi0gICAgaWYgKG5hbWUgPT0gaWRBdHRyKQor
ICAgIGlmIChuYW1lID09IGlkQXR0cmlidXRlTmFtZSgpKQogICAgICAgICB1cGRhdGVJZChvbGQg
PyBvbGQtPnZhbHVlKCkgOiBudWxsQXRvbSwgdmFsdWUpOwogICAgIAogICAgIGlmIChvbGQgJiYg
dmFsdWUuaXNOdWxsKCkpCkBAIC01OTgsOCArNTk4LDkgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRy
aWJ1dGVNYXAoUGFzc1JlZlB0cgogCiAgICAgLy8gSWYgc2V0dGluZyB0aGUgd2hvbGUgbWFwIGNo
YW5nZXMgdGhlIGlkIGF0dHJpYnV0ZSwgd2UgbmVlZCB0byBjYWxsIHVwZGF0ZUlkLgogCi0gICAg
QXR0cmlidXRlKiBvbGRJZCA9IG5hbWVkQXR0ck1hcCA/IG5hbWVkQXR0ck1hcC0+Z2V0QXR0cmli
dXRlSXRlbShpZEF0dHIpIDogMDsKLSAgICBBdHRyaWJ1dGUqIG5ld0lkID0gbGlzdCA/IGxpc3Qt
PmdldEF0dHJpYnV0ZUl0ZW0oaWRBdHRyKSA6IDA7CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYg
cXVhbGlmaWVkTmFtZSA9IGlkQXR0cmlidXRlTmFtZSgpOworICAgIEF0dHJpYnV0ZSogb2xkSWQg
PSBuYW1lZEF0dHJNYXAgPyBuYW1lZEF0dHJNYXAtPmdldEF0dHJpYnV0ZUl0ZW0ocXVhbGlmaWVk
TmFtZSkgOiAwOworICAgIEF0dHJpYnV0ZSogbmV3SWQgPSBsaXN0ID8gbGlzdC0+Z2V0QXR0cmli
dXRlSXRlbShxdWFsaWZpZWROYW1lKSA6IDA7CiAKICAgICBpZiAob2xkSWQgfHwgbmV3SWQpCiAg
ICAgICAgIHVwZGF0ZUlkKG9sZElkID8gb2xkSWQtPnZhbHVlKCkgOiBudWxsQXRvbSwgbmV3SWQg
PyBuZXdJZC0+dmFsdWUoKSA6IG51bGxBdG9tKTsKQEAgLTcwNCw3ICs3MDUsNyBAQCB2b2lkIEVs
ZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIAogICAgIGlmIChoYXNJRCgpKSB7CiAgICAg
ICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gbmFtZWRBdHRyTWFwLmdldCgpKSB7Ci0gICAg
ICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IGF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKGlkQXR0
cik7CisgICAgICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IGF0dHJzLT5nZXRBdHRyaWJ1dGVJ
dGVtKGlkQXR0cmlidXRlTmFtZSgpKTsKICAgICAgICAgICAgIGlmIChpZEl0ZW0gJiYgIWlkSXRl
bS0+aXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgdXBkYXRlSWQobnVsbEF0b20sIGlkSXRlbS0+
dmFsdWUoKSk7CiAgICAgICAgIH0KQEAgLTcxNSw3ICs3MTYsNyBAQCB2b2lkIEVsZW1lbnQ6OnJl
bW92ZWRGcm9tRG9jdW1lbnQoKQogewogICAgIGlmIChoYXNJRCgpKSB7CiAgICAgICAgIGlmIChO
YW1lZE5vZGVNYXAqIGF0dHJzID0gbmFtZWRBdHRyTWFwLmdldCgpKSB7Ci0gICAgICAgICAgICBB
dHRyaWJ1dGUqIGlkSXRlbSA9IGF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKGlkQXR0cik7CisgICAg
ICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IGF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKGlkQXR0
cmlidXRlTmFtZSgpKTsKICAgICAgICAgICAgIGlmIChpZEl0ZW0gJiYgIWlkSXRlbS0+aXNOdWxs
KCkpCiAgICAgICAgICAgICAgICAgdXBkYXRlSWQoaWRJdGVtLT52YWx1ZSgpLCBudWxsQXRvbSk7
CiAgICAgICAgIH0KQEAgLTEwNTgsNyArMTA1OSw3IEBAIHZvaWQgRWxlbWVudDo6Zm9ybWF0Rm9y
RGVidWdnZXIoY2hhciogYnUKICAgICAgICAgcmVzdWx0ICs9IHM7CiAgICAgfQogICAgICAgICAg
IAotICAgIHMgPSBnZXRBdHRyaWJ1dGUoaWRBdHRyKTsKKyAgICBzID0gZ2V0QXR0cmlidXRlKGlk
QXR0cmlidXRlTmFtZSgpKTsKICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKICAgICAgICAgaWYg
KHJlc3VsdC5sZW5ndGgoKSA+IDApCiAgICAgICAgICAgICByZXN1bHQgKz0gIjsgIjsKQEAgLTEx
ODEsNiArMTE4Miw1MSBAQCBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZU5TKGNvbnN0IFN0cmlu
CiAgICAgcmV0dXJuIGF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0
b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKSk7CiB9CiAKK3ZvaWQgRWxlbWVudDo6c2V0SWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgcXVhbGlmaWVkTmFtZSwgYm9vbCBpc0lkKQor
eworICAgIEVsZW1lbnRSYXJlRGF0YSogZGF0YSA9IGVuc3VyZVJhcmVEYXRhKCk7CisKKyAgICBp
ZiAoaXNJZCkgeworICAgICAgICBkYXRhLT5tX2lkQXR0cmlidXRlTmFtZSA9IHF1YWxpZmllZE5h
bWU7CisgICAgICAgIHNldEhhc0lEKGhhc0F0dHJpYnV0ZShxdWFsaWZpZWROYW1lKSk7CisgICAg
ICAgIGluc2VydGVkSW50b0RvY3VtZW50KCk7CisgICAgfWVsc2UgeworICAgICAgICBkYXRhLT5t
X2lkQXR0cmlidXRlTmFtZSA9IFF1YWxpZmllZE5hbWUobnVsbEF0b20sIG51bGxBdG9tLCBudWxs
QXRvbSk7CisgICAgICAgIHNldEhhc0lEKGZhbHNlKTsKKyAgICAgICAgcmVtb3ZlZEZyb21Eb2N1
bWVudCgpOworICAgIH0KK30KKwordm9pZCBFbGVtZW50OjpzZXRJZEF0dHJpYnV0ZShjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wgaXNJZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFE
b2N1bWVudDo6aXNWYWxpZE5hbWUobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0NIQVJB
Q1RFUl9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGxvY2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1lLmxv
d2VyKCkgOiBuYW1lOworCisgICAgc2V0SWRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRv
bSwgbG9jYWxOYW1lLCBudWxsQXRvbSksIGlzSWQpOworfQorICAgIAordm9pZCBFbGVtZW50Ojpz
ZXRJZEF0dHJpYnV0ZU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcm
IGxvY2FsTmFtZSwgYm9vbCBpc0lkLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBzZXRJZEF0dHJp
YnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSksIGlz
SWQpOworfQorCit2b2lkIEVsZW1lbnQ6OnNldElkQXR0cmlidXRlTm9kZShBdHRyKiBhdHRyLCBi
b29sIGlzSWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghYXR0cikgeworICAgICAg
ICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlm
IChhdHRyLT5vd25lckVsZW1lbnQoKSAhPSB0aGlzKSB7CisgICAgICAgIGVjID0gTk9UX0ZPVU5E
X0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzZXRJZEF0dHJpYnV0ZShhdHRyLT5x
dWFsaWZpZWROYW1lKCksIGlzSWQpOworfQorCiBDU1NTdHlsZURlY2xhcmF0aW9uICpFbGVtZW50
OjpzdHlsZSgpCiB7CiAgICAgcmV0dXJuIDA7CkBAIC0xNDE3LDQgKzE0NjMsOSBAQCBLVVJMIEVs
ZW1lbnQ6OmdldFVSTEF0dHJpYnV0ZShjb25zdCBRdWFsCiAgICAgcmV0dXJuIGRvY3VtZW50KCkt
PmNvbXBsZXRlVVJMKGRlcHJlY2F0ZWRQYXJzZVVSTChnZXRBdHRyaWJ1dGUobmFtZSkpKTsKIH0K
IAorY29uc3QgUXVhbGlmaWVkTmFtZSYgRWxlbWVudDo6cmFyZUlEQXR0cmlidXRlTmFtZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHJhcmVEYXRhKCktPm1faWRBdHRyaWJ1dGVOYW1lOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiA1MDMwMikKKysrIFdlYkNv
cmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2RlZmlu
ZSBFbGVtZW50X2gKIAogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKKyNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlw
ZXMuaCIKIApAQCAtMTA2LDYgKzEwNywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBdHRyaWJ1
dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVOUyhjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBxdWFsaWZpZWROYW1lLCBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CiAKKyAgICB2b2lkIHNldElk
QXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBpc0lkLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCBzZXRJZEF0dHJpYnV0ZU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBj
b25zdCBTdHJpbmcmIGxvY2FsTmFtZSwgYm9vbCBpc0lkLCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCBzZXRJZEF0dHJpYnV0ZU5vZGUoQXR0ciosIGJvb2wgaXNJZCwgRXhjZXB0aW9uQ29kZSYp
OworCisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgaWRBdHRyaWJ1dGVOYW1lKCkgY29uc3Q7CisK
ICAgICB2b2lkIHNjcm9sbEludG9WaWV3KGJvb2wgYWxpZ25Ub1RvcCA9IHRydWUpOwogICAgIHZv
aWQgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChib29sIGNlbnRlcklmTmVlZGVkID0gdHJ1ZSk7CiAK
QEAgLTE2Nyw2ICsxNzQsNyBAQCBwdWJsaWM6CiAgICAgLy8gY29udmVuaWVuY2UgbWV0aG9kcyB3
aGljaCBpZ25vcmUgZXhjZXB0aW9ucwogICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKICAgICB2b2lkIHNldEJvb2xl
YW5BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgYm9vbCk7CisgICAgdm9pZCBz
ZXRJZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBxdWFsaWZpZWROYW1lLCBib29sIGlz
SWQpOwogCiAgICAgdmlydHVhbCBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMoKSBjb25zdDsKICAg
ICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMoYm9vbCByZWFkb25seSkgY29uc3Q7CkBAIC0yNzQs
NiArMjgyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZChO
b2RlVHlwZSk7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBjcmVhdGVBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwor
ICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHJhcmVJREF0dHJpYnV0ZU5hbWUoKSBjb25zdDsKICAg
ICAKICNpZm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNo
YXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKQEAgLTMzMSw2ICszNDAsMTEgQEAg
aW5saW5lIEVsZW1lbnQqIE5vZGU6OnBhcmVudEVsZW1lbnQoKSBjbwogICAgIHJldHVybiBwYXJl
bnQgJiYgcGFyZW50LT5pc0VsZW1lbnROb2RlKCkgPyBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ocGFy
ZW50KSA6IDA7CiB9CiAKK2lubGluZSBjb25zdCBRdWFsaWZpZWROYW1lJiBFbGVtZW50OjppZEF0
dHJpYnV0ZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZUlE
QXR0cmlidXRlTmFtZSgpIDogSFRNTE5hbWVzOjppZEF0dHI7Cit9CisKIH0gLy9uYW1lc3BhY2UK
IAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9FbGVtZW50LmlkbAkocmV2aXNpb24gNTAzMDIpCisrKyBXZWJDb3JlL2RvbS9F
bGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMTkgQEAgbW9kdWxlIGNvcmUg
ewogICAgICAgICBbT2xkU3R5bGVPYmpDXSBib29sZWFuIGhhc0F0dHJpYnV0ZU5TKGluIFtDb252
ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBET01TdHJpbmcgbG9jYWxOYW1l
KTsKIAorICAgICAgICAvLyBET00gTGV2ZWwgMyBDb3JlCisKKyAgICAgICAgdm9pZCBzZXRJZEF0
dHJpYnV0ZShpbiBET01TdHJpbmcgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBib29sZWFuIGlzSWQpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAg
ICAgdm9pZCBzZXRJZEF0dHJpYnV0ZU5TKGluIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9N
U3RyaW5nIG5hbWVzcGFjZVVSSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIERP
TVN0cmluZyBsb2NhbE5hbWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9v
bGVhbiBpc0lkKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZv
aWQgc2V0SWRBdHRyaWJ1dGVOb2RlKGluIEF0dHIgaWRBdHRyLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBpc0lkKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CisKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9DT00pIHx8ICFMQU5HVUFHRV9DT00K
ICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENTU1N0eWxlRGVjbGFyYXRpb24gc3R5bGU7CiAj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCShyZXZpc2lvbiA1MDMwMikKKysrIFdlYkNv
cmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBA
IHB1YmxpYzoKIAogICAgIEludFNpemUgbV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nOwogICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gbV9jb21wdXRlZFN0eWxlOworICAgIFF1YWxpZmllZE5hbWUgbV9p
ZEF0dHJpYnV0ZU5hbWU7CiB9OwogCiBpbmxpbmUgSW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVG
b3JSZXNpemluZygpCkBAIC00Nyw2ICs0OCw3IEBAIGlubGluZSBJbnRTaXplIGRlZmF1bHRNaW5p
bXVtU2l6ZUZvclJlc2kKIAogaW5saW5lIEVsZW1lbnRSYXJlRGF0YTo6RWxlbWVudFJhcmVEYXRh
KCkKICAgICA6IG1fbWluaW11bVNpemVGb3JSZXNpemluZyhkZWZhdWx0TWluaW11bVNpemVGb3JS
ZXNpemluZygpKQorICAgICwgbV9pZEF0dHJpYnV0ZU5hbWUoSFRNTE5hbWVzOjppZEF0dHIpCiB7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL05hbWVkQXR0ck1hcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmNwcAkocmV2aXNpb24gNTAzMDIpCisrKyBXZWJDb3Jl
L2RvbS9OYW1lZEF0dHJNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAg
UGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OnNldE5hbWVkSQogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKLSAgICBpZiAoYS0+bmFtZSgpID09IGlkQXR0cikKKyAgICBpZiAoYXR0ci0+
aXNJZCgpKQogICAgICAgICBtX2VsZW1lbnQtPnVwZGF0ZUlkKG9sZCA/IG9sZC0+dmFsdWUoKSA6
IG51bGxBdG9tLCBhLT52YWx1ZSgpKTsKIAogICAgIC8vICMjIyBzbGlnaHRseSBpbmVmZmljaWVu
dCAtIHJlc2l6ZXMgYXR0cmlidXRlIGFycmF5IHR3aWNlLgpAQCAtMTU1LDkgKzE1NSw5IEBAIFBh
c3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW0KICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCi0gICAgUmVmUHRyPE5vZGU+IHIgPSBhLT5jcmVhdGVBdHRySWZOZWVkZWQobV9l
bGVtZW50KTsKKyAgICBSZWZQdHI8QXR0cj4gciA9IGEtPmNyZWF0ZUF0dHJJZk5lZWRlZChtX2Vs
ZW1lbnQpOwogCi0gICAgaWYgKG5hbWUgPT0gaWRBdHRyKQorICAgIGlmIChyLT5pc0lkKCkpCiAg
ICAgICAgIG1fZWxlbWVudC0+dXBkYXRlSWQoYS0+dmFsdWUoKSwgbnVsbEF0b20pOwogCiAgICAg
cmVtb3ZlQXR0cmlidXRlKG5hbWUpOwpAQCAtMjIwLDggKzIyMCw4IEBAIHZvaWQgTmFtZWROb2Rl
TWFwOjpzZXRBdHRyaWJ1dGVzKGNvbnN0IE4KIAogICAgIC8vIElmIGFzc2lnbmluZyB0aGUgbWFw
IGNoYW5nZXMgdGhlIGlkIGF0dHJpYnV0ZSwgd2UgbmVlZCB0byBjYWxsCiAgICAgLy8gdXBkYXRl
SWQuCi0gICAgQXR0cmlidXRlICpvbGRJZCA9IGdldEF0dHJpYnV0ZUl0ZW0oaWRBdHRyKTsKLSAg
ICBBdHRyaWJ1dGUgKm5ld0lkID0gb3RoZXIuZ2V0QXR0cmlidXRlSXRlbShpZEF0dHIpOworICAg
IEF0dHJpYnV0ZSAqb2xkSWQgPSBnZXRBdHRyaWJ1dGVJdGVtKG1fZWxlbWVudC0+aWRBdHRyaWJ1
dGVOYW1lKCkpOworICAgIEF0dHJpYnV0ZSAqbmV3SWQgPSBvdGhlci5nZXRBdHRyaWJ1dGVJdGVt
KG1fZWxlbWVudC0+aWRBdHRyaWJ1dGVOYW1lKCkpOwogCiAgICAgaWYgKG9sZElkIHx8IG5ld0lk
KQogICAgICAgICBtX2VsZW1lbnQtPnVwZGF0ZUlkKG9sZElkID8gb2xkSWQtPnZhbHVlKCkgOiBu
dWxsQXRvbSwgbmV3SWQgPyBuZXdJZC0+dmFsdWUoKSA6IG51bGxBdG9tKTsKSW5kZXg6IFdlYkNv
cmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1N0eWxl
ZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA1MDMwMikKKysrIFdlYkNvcmUvZG9tL1N0eWxlZEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNyArMjM0LDcgQEAgdm9pZCBTdHlsZWRFbGVt
ZW50OjpjbGFzc0F0dHJpYnV0ZUNoYW5nZQogCiB2b2lkIFN0eWxlZEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IGlkQXR0cikgeworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyaWJ1dGVOYW1l
KCkpIHsKICAgICAgICAgLy8gdW5pcXVlIGlkCiAgICAgICAgIHNldEhhc0lEKCFhdHRyLT5pc051
bGwoKSk7CiAgICAgICAgIGlmIChuYW1lZEF0dHJNYXApIHsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDUw
NjY4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NTEgQEAKKzIwMDktMTEtMDkgIFNodSBDaGFuZyAgPENoYW5nLlNodUBub2tpYS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlZCByZWxh
dGVkIHRlc3QgY2FzZXMgYWZ0ZXIgaW1wbGVtZW50YXRpb24gb2YgaXNJZCBhbmQgc2V0SWRBdHRy
aWJ1dGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NTc4CisKKyAgICAgICAgTm90ZTogZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0
dHJpYnV0ZW5zMDUtZXhwZWN0ZWQudHh0CisgICAgICAgIGFuZCBkb20veGh0bWwvbGV2ZWwzL2Nv
cmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMxMy1leHBlY3RlZC50eHQgZmFpbGVkIHRvCisgICAg
ICAgIHBhc3MgZHVlIHRvIHNlcGFyYXRlIGlzc3Vlcy4KKworICAgICAgICAqIGRvbS94aHRtbC9s
ZXZlbDMvY29yZS9hdHRyaXNpZDAyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwv
bGV2ZWwzL2NvcmUvYXR0cmlzaWQwMy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1s
L2xldmVsMy9jb3JlL2F0dHJpc2lkMDQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRt
bC9sZXZlbDMvY29yZS9hdHRyaXNpZDA0LmpzOgorICAgICAgICAoc2V0VXBQYWdlKToKKyAgICAg
ICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNS1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDUuanM6CisgICAgICAgIChzZXRV
cFBhZ2UpOgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA3LWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0
cmlidXRlMDEtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9l
bGVtZW50c2V0aWRhdHRyaWJ1dGUwMy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1s
L2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTA0LWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlMDctZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRy
aWJ1dGUwOC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2Vs
ZW1lbnRzZXRpZGF0dHJpYnV0ZTA5LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwv
bGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlMTAtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUxMS1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJp
YnV0ZW5vZGUwMS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3Jl
L2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwMi1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9t
L3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwMy1leHBlY3RlZC50
eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0
ZW5vZGUwNC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2Vs
ZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwNS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3ho
dG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwNi1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5v
ZGUwNy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1l
bnRzZXRpZGF0dHJpYnV0ZW5vZGUwOC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1s
L2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUxMC1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMDEt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0
aWRhdHRyaWJ1dGVuczAyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwz
L2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMwMy1leHBlY3RlZC50eHQ6CisgICAgICAgICog
ZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMDQtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1
dGVuczA1LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxl
bWVudHNldGlkYXR0cmlidXRlbnMxMC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1s
L2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMTEtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczEyLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlk
YXR0cmlidXRlbnMxMy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9j
b3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMTQtZXhwZWN0ZWQudHh0OgorCiAyMDA5LTExLTA5
ICBNYXJrIE1lbnRvdmFpICA8bWFya0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29y
ZS9hdHRyaXNpZDAyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20v
eGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUwMzAy
KQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDItZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3Lncz
Lm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL2F0dHJpc2lkMDIKLVN0YXR1cwll
cnJvcgotTWVzc2FnZQlMaW5lIDEwNzogVHlwZUVycm9yCitTdGF0dXMJU3VjY2VzcwpJbmRleDog
TGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDMtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNp
ZDAzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTAzMDIpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0
bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwMy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
bGV2ZWwzL2NvcmUvYXR0cmlzaWQwMwotU3RhdHVzCWVycm9yCi1NZXNzYWdlCUxpbmUgMTA1OiBU
eXBlRXJyb3IKK1N0YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2
ZWwzL2NvcmUvYXR0cmlzaWQwNC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biA1MDMwMikKKysrIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA0
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDov
L3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS9hdHRyaXNpZDA0Ci1T
dGF0dXMJc2tpcAotTWVzc2FnZQlIVE1MIGxvYWRlciBkb2VzIG5vdCBzdXBwb3J0IHZhbGlkYXRp
bmc9dHJ1ZQorU3RhdHVzCVN1Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZl
bDMvY29yZS9hdHRyaXNpZDA0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRt
bC9sZXZlbDMvY29yZS9hdHRyaXNpZDA0LmpzCShyZXZpc2lvbiA1MDMwMikKKysrIExheW91dFRl
c3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA0LmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw3ICszOSw4IEBAIGZ1bmN0aW9uIHNldFVwUGFnZSgpIHsKICAgICAgLy8gICBjcmVhdGVz
IHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgogICAgICAvLwogICAg
ICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKLSAgICAgICBzZXRJbXBsZW1l
bnRhdGlvbkF0dHJpYnV0ZSgidmFsaWRhdGluZyIsIHRydWUpOworICAgICAvLyByZW1vdmUgdGhl
IGZvbGxvd2luZyBsaW5lIG90aGVyZXdpc2UgdGVzdCBjYXNlIHNraXBwZWQuCisgICAgIC8vc2V0
SW1wbGVtZW50YXRpb25BdHRyaWJ1dGUoInZhbGlkYXRpbmciLCB0cnVlKTsKIAogICAgICAgZG9j
c0xvYWRlZCA9IDA7CiAgICAgICAKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMv
Y29yZS9hdHRyaXNpZDA1LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9k
b20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUw
MzAyKQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDUtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3
LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL2F0dHJpc2lkMDUKLVN0YXR1
cwlza2lwCi1NZXNzYWdlCUhUTUwgbG9hZGVyIGRvZXMgbm90IHN1cHBvcnQgdmFsaWRhdGluZz10
cnVlCitTdGF0dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9j
b3JlL2F0dHJpc2lkMDUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xl
dmVsMy9jb3JlL2F0dHJpc2lkMDUuanMJKHJldmlzaW9uIDUwMzAyKQorKysgTGF5b3V0VGVzdHMv
ZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDUuanMJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDcgKzM5LDggQEAgZnVuY3Rpb24gc2V0VXBQYWdlKCkgewogICAgICAvLyAgIGNyZWF0ZXMgdGVz
dCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCiAgICAgIC8vCiAgICAgIGJ1
aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOwotICAgICAgIHNldEltcGxlbWVudGF0
aW9uQXR0cmlidXRlKCJ2YWxpZGF0aW5nIiwgdHJ1ZSk7CisgICAgIC8vIHJlbW92ZSB0aGUgZm9s
bG93aW5nIGxpbmUgb3RoZXJld2lzZSB0ZXN0IGNhc2Ugc2tpcHBlZC4KKyAgICAgLy9zZXRJbXBs
ZW1lbnRhdGlvbkF0dHJpYnV0ZSgidmFsaWRhdGluZyIsIHRydWUpOwogCiAgICAgICBkb2NzTG9h
ZGVkID0gMDsKICAgICAgIApJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3Jl
L2F0dHJpc2lkMDctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94
aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA3LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTAzMDIp
CisrKyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNy1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNwotU3RhdHVzCWVy
cm9yCi1NZXNzYWdlCUxpbmUgMTEzOiBUeXBlRXJyb3IKK1N0YXR1cwlTdWNjZXNzCkluZGV4OiBM
YXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlMDEt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMv
Y29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUwMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUwMzAy
KQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJp
YnV0ZTAxLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJ
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS9lbGVtZW50
c2V0aWRhdHRyaWJ1dGUwMQotU3RhdHVzCWVycm9yCi1NZXNzYWdlCUxpbmUgMTA1OiBUeXBlRXJy
b3IKK1N0YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2Nv
cmUvZWxlbWVudHNldGlkYXR0cmlidXRlMDMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUwMy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDUwMzAyKQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xl
dmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTAzLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVz
dC1TdWl0ZS9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUwMwotU3RhdHVzCWVycm9y
Ci1NZXNzYWdlCUxpbmUgMTA2OiBUeXBlRXJyb3IKK1N0YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlv
dXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlMDQtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29y
ZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUwNC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUwMzAyKQor
KysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0
ZTA0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0
cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS9lbGVtZW50c2V0
aWRhdHRyaWJ1dGUwNAotU3RhdHVzCWVycm9yCi1NZXNzYWdlCUxpbmUgMTA2OiBUeXBlRXJyb3IK
K1N0YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUv
ZWxlbWVudHNldGlkYXR0cmlidXRlMDctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUwNy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDUwMzAyKQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVs
My9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTA3LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1T
dWl0ZS9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUwNwotU3RhdHVzCWVycm9yCi1N
ZXNzYWdlCUxpbmUgMTA4OiBUeXBlRXJyb3IKK1N0YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRU
ZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlMDgtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9l
bGVtZW50c2V0aWRhdHRyaWJ1dGUwOC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUwMzAyKQorKysg
TGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTA4
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDov
L3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRh
dHRyaWJ1dGUwOAotU3RhdHVzCWVycm9yCi1NZXNzYWdlCUxpbmUgMTA4OiBUeXBlRXJyb3IKK1N0
YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxl
bWVudHNldGlkYXR0cmlidXRlMDktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUwOS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDUwMzAyKQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9j
b3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTA5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0
ZS9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUwOQotU3RhdHVzCWVycm9yCi1NZXNz
YWdlCUxpbmUgMTExOiBUeXBlRXJyb3IKK1N0YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0
cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlMTAtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVt
ZW50c2V0aWRhdHRyaWJ1dGUxMC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUwMzAyKQorKysgTGF5
b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTEwLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3
dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRy
aWJ1dGUxMAotU3RhdHVzCWVycm9yCi1NZXNzYWdlCUxpbmUgMTA0OiBUeXBlRXJyb3IKK1N0YXR1
cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVu
dHNldGlkYXR0cmlidXRlMTEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUxMS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDUwMzAyKQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3Jl
L2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTExLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9s
ZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUxMQotU3RhdHVzCWVycm9yCi1NZXNzYWdl
CUxpbmUgMTA1OiBUeXBlRXJyb3IKK1N0YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9k
b20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbm9kZTAxLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxl
bWVudHNldGlkYXR0cmlidXRlbm9kZTAxLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTAzMDIpCisr
KyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRl
bm9kZTAxLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJ
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS9lbGVtZW50
c2V0aWRhdHRyaWJ1dGVub2RlMDEKLVN0YXR1cwllcnJvcgotTWVzc2FnZQlMaW5lIDEwODogVHlw
ZUVycm9yCitTdGF0dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVs
My9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwMi1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJp
YnV0ZW5vZGUwMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUwMzAyKQorKysgTGF5b3V0VGVzdHMv
ZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwMi1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRl
bm9kZTAyCi1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJTGluZSAxMDg6IFR5cGVFcnJvcgorU3RhdHVz
CVN1Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50
c2V0aWRhdHRyaWJ1dGVub2RlMDMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiA1MDMwMikKKysrIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZl
bDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDMtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1U
ZXN0LVN1aXRlL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwMwotU3RhdHVz
CWVycm9yCi1NZXNzYWdlCUxpbmUgMTEwOiBUeXBlRXJyb3IKK1N0YXR1cwlTdWNjZXNzCkluZGV4
OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRl
bm9kZTA0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwv
bGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbm9kZTA0LWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNTAzMDIpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVu
dHNldGlkYXR0cmlidXRlbm9kZTA0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZl
bDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDQKLVN0YXR1cwllcnJvcgotTWVzc2Fn
ZQlMaW5lIDExMDogVHlwZUVycm9yCitTdGF0dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMv
ZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwNS1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2Vs
ZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwNS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUwMzAyKQor
KysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0
ZW5vZGUwNS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyIEBACiBUZXN0
CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvZWxlbWVu
dHNldGlkYXR0cmlidXRlbm9kZTA1Ci1TdGF0dXMJZmFpbHVyZQotTWVzc2FnZQl0aHJvd19OT1Rf
Rk9VTkRfRVJSOiBhc3NlcnRUcnVlIGZhaWxlZAorU3RhdHVzCVN1Y2Nlc3MKSW5kZXg6IExheW91
dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDYt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMv
Y29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDYtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1
MDMwMikKKysrIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRh
dHRyaWJ1dGVub2RlMDYtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBA
QAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3Jl
L2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwNgotU3RhdHVzCWZhaWx1cmUKLU1lc3NhZ2UJdGhy
b3dfTk9UX0ZPVU5EX0VSUjogYXNzZXJ0VHJ1ZSBmYWlsZWQKK1N0YXR1cwlTdWNjZXNzCkluZGV4
OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRl
bm9kZTA3LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwv
bGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbm9kZTA3LWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNTAzMDIpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVu
dHNldGlkYXR0cmlidXRlbm9kZTA3LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZl
bDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDcKLVN0YXR1cwllcnJvcgotTWVzc2Fn
ZQlMaW5lIDExMTogVHlwZUVycm9yCitTdGF0dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMv
ZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwOC1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2Vs
ZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwOC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUwMzAyKQor
KysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0
ZW5vZGUwOC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyIEBACiBUZXN0
CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvZWxlbWVu
dHNldGlkYXR0cmlidXRlbm9kZTA4Ci1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJTGluZSAxMTY6IFR5
cGVFcnJvcgorU3RhdHVzCVN1Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZl
bDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMTAtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRy
aWJ1dGVub2RlMTAtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1MDMwMikKKysrIExheW91dFRlc3Rz
L2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMTAtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3Lncz
Lm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0
ZW5vZGUxMAotU3RhdHVzCWVycm9yCi1NZXNzYWdlCUxpbmUgMTEzOiBUeXBlRXJyb3IKK1N0YXR1
cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVu
dHNldGlkYXR0cmlidXRlbnMwMS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMDEtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiA1MDMwMikKKysrIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMv
Y29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczAxLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1T
dWl0ZS9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczAxCi1TdGF0dXMJZXJyb3IK
LU1lc3NhZ2UJTGluZSAxMDY6IFR5cGVFcnJvcgorU3RhdHVzCVN1Y2Nlc3MKSW5kZXg6IExheW91
dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczAyLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2Nv
cmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMwMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUwMzAy
KQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJp
YnV0ZW5zMDItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVz
dAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL2VsZW1l
bnRzZXRpZGF0dHJpYnV0ZW5zMDIKLVN0YXR1cwllcnJvcgotTWVzc2FnZQlMaW5lIDEwNzogVHlw
ZUVycm9yCitTdGF0dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVs
My9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMDMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1
dGVuczAzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTAzMDIpCisrKyBMYXlvdXRUZXN0cy9kb20v
eGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMwMy1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIw
MDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMwMwot
U3RhdHVzCWVycm9yCi1NZXNzYWdlCUxpbmUgMTA2OiBUeXBlRXJyb3IKK1N0YXR1cwlTdWNjZXNz
CkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0
cmlidXRlbnMwNC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3ho
dG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMDQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiA1MDMwMikKKysrIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVt
ZW50c2V0aWRhdHRyaWJ1dGVuczA0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZl
bDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczA0Ci1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJ
TGluZSAxMTE6IFR5cGVFcnJvcgorU3RhdHVzCVN1Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2Rv
bS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczA1LWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVu
dHNldGlkYXR0cmlidXRlbnMwNS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUwMzAyKQorKysgTGF5
b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMDUt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMyBAQAogVGVzdAlodHRwOi8v
d3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0
dHJpYnV0ZW5zMDUKLVN0YXR1cwllcnJvcgotTWVzc2FnZQlMaW5lIDExMTogVHlwZUVycm9yCitT
dGF0dXMJZmFpbHVyZQorTWVzc2FnZQllbGVtZW50c2V0aWRhdHRyaWJ1dGVuc0lzSWRUcnVlMDU6
IGFzc2VydFRydWUgZmFpbGVkCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2Nv
cmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMxMC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5z
MTAtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1MDMwMikKKysrIExheW91dFRlc3RzL2RvbS94aHRt
bC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczEwLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9E
T00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczEwCi1TdGF0
dXMJZXJyb3IKLU1lc3NhZ2UJTGluZSAxMTE6IFR5cGVFcnJvcgorU3RhdHVzCVN1Y2Nlc3MKSW5k
ZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1
dGVuczExLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwv
bGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMxMS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDUwMzAyKQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRz
ZXRpZGF0dHJpYnV0ZW5zMTEtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9j
b3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMTEKLVN0YXR1cwllcnJvcgotTWVzc2FnZQlMaW5l
IDExMTogVHlwZUVycm9yCitTdGF0dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3ho
dG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMTItZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0
aWRhdHRyaWJ1dGVuczEyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTAzMDIpCisrKyBMYXlvdXRU
ZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMxMi1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmli
dXRlbnMxMgotU3RhdHVzCWVycm9yCi1NZXNzYWdlCUxpbmUgMTE1OiBUeXBlRXJyb3IKK1N0YXR1
cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVu
dHNldGlkYXR0cmlidXRlbnMxMy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMTMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiA1MDMwMikKKysrIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMv
Y29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczEzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDMgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1T
dWl0ZS9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczEzCi1TdGF0dXMJZXJyb3IK
LU1lc3NhZ2UJTGluZSAxMDc6IFR5cGVFcnJvcgorU3RhdHVzCWZhaWx1cmUKK01lc3NhZ2UJdGhy
b3dfTk9UX0ZPVU5EX0VSUjogYXNzZXJ0VHJ1ZSBmYWlsZWQKSW5kZXg6IExheW91dFRlc3RzL2Rv
bS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczE0LWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVu
dHNldGlkYXR0cmlidXRlbnMxNC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUwMzAyKQorKysgTGF5
b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMTQt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8v
d3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0
dHJpYnV0ZW5zMTQKLVN0YXR1cwllcnJvcgotTWVzc2FnZQlMaW5lIDExMjogVHlwZUVycm9yCitT
dGF0dXMJU3VjY2Vzcwo=
</data>
<flag name="review"
          id="24355"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44812</attachid>
            <date>2009-12-14 12:27:48 -0800</date>
            <delta_ts>2009-12-15 11:26:53 -0800</delta_ts>
            <desc>new patch to handle isId only</desc>
            <filename>bug5578_4.patch</filename>
            <type>text/plain</type>
            <size>53248</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODcgQEAKKzIwMDktMTItMTQgIFNodSBDaGFuZyAgPENoYW5nLlNodUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50ZWQgaXNJZCBhcyBzcGVjaWZpZWQgYnkgRE9NIExldmVsIDMuIFNlZSBkZXRhaWxlZCBk
ZXNjcmlwdGlvbiBiZWxvdy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU1NzgKKworICAgICAgICBBZGRlZCBpc0lkIHByb3BlcnR5IGFuZCBpbXBsZW1l
bnRhdGlvbjoKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdHRy
Ojppc0lkKToKKyAgICAgICAgKiBkb20vQXR0ci5oOgorICAgICAgICAqIGRvbS9BdHRyLmlkbDoK
KworICAgICAgICBSZXBsYWNlZCBpbnN0YW5jZXMgb2YgSFRNTE5hbWVzOjppZEF0dHIgd2l0aCBF
bGVtZW50OjppZEF0dHJpYnV0ZU5hbWUoKQorICAgICAgICBmb3IgdGhlIHJlYXNvbiB0aGF0IGlk
IGF0dHJpYnV0ZSBuYW1lIGNvdWxkIGJlIGN1c3RvbWl6ZWQgdG8gYSBkaWZmZXJlbnQKKyAgICAg
ICAgc3RyaW5nIG90aGVyIHRoYW4gImlkIi4gQSB0ZXN0IGNhc2UgaXMgYXNzb2NpYXRlZCB0byBl
YWNoIGNvZGUgY2hhbmdlLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6Z2V0RWxlbWVudEJ5SWQpOiBUZXN0OiBmYXN0L2RvbS9FbGVtZW50
L2lkLWluLWdldGVsZW1lbnQwMS5odG1sCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOiBUZXN0
czogZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDEtMDcueGh0bWwKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpzZXRBdHRyaWJ1dGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpmb3JtYXRGb3JEZWJ1Z2dlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyYXJlSURBdHRyaWJ1dGVOYW1lKToKKyAgICAgICAg
KiBkb20vRWxlbWVudC5oOiBBZGRlZCBmdW5jdGlvbiBpZEF0dHJpYnV0ZU5hbWUoKS4KKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmlkQXR0cmlidXRlTmFtZSk6CisgICAgICAgICogZG9tL0Vs
ZW1lbnRSYXJlRGF0YS5oOiBBZGRlZCBtZW1iZXIgdmFyaWFibGUgdG8gc3RvcmUgY3VzdG9taXpl
ZCBpZCBuYW1lIGluIEVsZW1lbnRSYXJlRGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRS
YXJlRGF0YTo6RWxlbWVudFJhcmVEYXRhKToKKyAgICAgICAgKiBkb20vTmFtZWRBdHRyTWFwLmNw
cDogVGVzdHM6IGRvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDAxLTA3LnhodG1sCisgICAg
ICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnNldE5hbWVkSXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpOYW1lZE5vZGVNYXA6OnJlbW92ZU5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpO
YW1lZE5vZGVNYXA6OnNldEF0dHJpYnV0ZXMpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDogUmVt
b3ZlZCBBU1NFUlQgYXMgaXQgbWF5IG5vdCBob2xkIGFueSBtb3JlLgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6cXVlcnlTZWxlY3Rvcik6CisgICAgICAgICogZG9tL1NlbGVjdG9yTm9kZUxpc3Qu
Y3BwOiBSZW1vdmVkIEFTU0VSVCBhcyBpdCBtYXkgbm90IGhvbGQgYW55IG1vcmUuCisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVTZWxlY3Rvck5vZGVMaXN0KToKKyAgICAgICAgKiBkb20vU3R5bGVk
RWxlbWVudC5jcHA6IFRlc3RzOiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwMS0wNy54
aHRtbAorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHA6IFRlc3Q6
IGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZGVsZXRlYnV0dG9uLmh0bWwKKyAgICAgICAgKFdlYkNv
cmU6OkRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OmNyZWF0ZURlbGV0aW9uVUkpOgorICAgICAgICAq
IGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4t
aW5zZXJ0LWhyLmh0bWwKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVJbnNlcnRIb3Jpem9udGFs
UnVsZSk6CisgICAgICAgICogaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHA6IFRlc3Q6IGZhc3Qv
ZG9tL0VsZW1lbnQvaWQtaW4tYXBwbGV0Lmh0bWwKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcHBs
ZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
QXBwbGV0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxl
Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OmNoZWNrRm9yTmFt
ZU1hdGNoKTogVGVzdDogZmFzdC9mb3Jtcy9zZWxlY3QtbmFtZWRJdGVtLmh0bWwKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUpOiBUZXN0OiBmYXN0L2Rv
bS9jb2xsZWN0aW9uLW5hbWVkSXRlbS12aWEtaXRlbS5odG1sCisgICAgICAgICogaHRtbC9IVE1M
RGF0YUdyaWRDb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEYXRhR3JpZENv
bEVsZW1lbnQ6OmVuc3VyZUNvbHVtbik6IFRlc3Q6IGZhc3QvZG9tL0hUTUxEYXRhR3JpZEVsZW1l
bnQvRGF0YUdyaWRDb2x1bW5zLWRvbS5odG1sCisgICAgICAgIChXZWJDb3JlOjpIVE1MRGF0YUdy
aWRDb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6IFRlc3Q6IGZhc3QvZG9tL0hUTUxE
YXRhR3JpZEVsZW1lbnQvRGF0YUdyaWRDb2x1bW5zLWRvbS1hdHRyaWJ1dGVzLmh0bWwKKyAgICAg
ICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbGxlY3Rp
b24uY3BwOiBUZXN0OiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLWZvcm1jb2xsZWN0aW9uLmh0bWwK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVjdGlvbjo6Z2V0TmFtZWRGb3JtSXRlbSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246Om5leHROYW1lZEl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUpOgor
ICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwOiBUZXN0OiBmYXN0L2RvbS9F
bGVtZW50L2lkLWluLWZyYW1lLmh0bWwKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1l
bnRCYXNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJh
bWVFbGVtZW50QmFzZTo6c2V0TmFtZUFuZE9wZW5VUkwpOgorICAgICAgICAqIGh0bWwvSFRNTElt
YWdlRWxlbWVudC5jcHA6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZGVsZXRlYnV0dG9u
Lmh0bWwKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXBFbGVtZW50LmNwcDogVGVzdDogZmFzdC9k
b20vRWxlbWVudC9pZC1pbi1tYXAuaHRtbAorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxOYW1lQ29sbGVj
dGlvbi5jcHA6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWVzZXQuaHRtbAorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE5hbWVDb2xsZWN0aW9uOjppdGVtQWZ0ZXIpOgorICAgICAgICAq
IGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOiBUZXN0OiBmYXN0L2RvbS9IVE1MRG9jdW1lbnQv
b2JqZWN0LWJ5LW5hbWUtb3ItaWQuaHRtbAorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxQYXJhbUVs
ZW1lbnQuY3BwOiBUZXN0OiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLXBhcmFtLmh0bWwKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAg
ICAgICAgKiBsb2FkZXIvQ2FjaGVkRm9udC5jcHA6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQvaWQt
aW4tc3ZnZm9udC5zdmcKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEZvbnQ6OmdldFNWR0ZvbnRC
eUlkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6Y3JlYXRlR3JhcGhpY3NMYXllcik6IERl
YnVnLW9ubHkgY29kZQorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cDogVGVzdDogc3ZnL3RleHQvdGV4dC1ncmFkaWVudC1wb3NpdGlvbmluZy5zdmcKKyAgICAgICAg
KFdlYkNvcmU6OndyaXRlUmVuZGVyUmVzb3VyY2VzKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVu
dC5jcHA6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tc3ZnZm9udC5zdmcKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0VsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAgICAgICAgKiBz
dmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6IFRlc3Q6IHN2Zy9jdXN0b20vanMtdXBkYXRlLWltYWdl
LWFuZC1kaXNwbGF5LnN2ZworICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6aXNL
bm93bkF0dHJpYnV0ZSk6CisgICAgICAgICogd21sL1dNTEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V01MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorCiAyMDA5LTEyLTE0
ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIFF1YXJ0ekNv
cmUtcmVsYXRlZCBidWlsZCBzZXR0aW5ncyBpbnRvIGEgdnNwcm9wcyBmaWxlCkluZGV4OiBXZWJD
b3JlL2RvbS9BdHRyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9BdHRyLmNwcAkocmV2
aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2RvbS9BdHRyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY0LDQgKzE2NCwxMiBAQCB2b2lkIEF0dHI6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRC
CiAgICAgICAgIG1fZWxlbWVudC0+YXR0cmlidXRlQ2hhbmdlZChtX2F0dHJpYnV0ZS5nZXQoKSk7
CiB9CiAKK2Jvb2wgQXR0cjo6aXNJZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBxdWFsaWZpZWROYW1lKCkubWF0Y2hl
cyhtX2VsZW1lbnQtPmlkQXR0cmlidXRlTmFtZSgpKTsKK30KKwogfQpJbmRleDogV2ViQ29yZS9k
b20vQXR0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0F0dHIuaAkocmV2aXNpb24gNTIw
OTIpCisrKyBXZWJDb3JlL2RvbS9BdHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDgg
QEAgcHVibGljOgogICAgIEF0dHJpYnV0ZSogYXR0cigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmli
dXRlLmdldCgpOyB9CiAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgcXVhbGlmaWVkTmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlLT5uYW1lKCk7IH0KIAorICAgIGJvb2wgaXNJZCgpIGNv
bnN0OworCiAgICAgLy8gQW4gZXh0ZW5zaW9uIHRvIGdldCBwcmVzZW50YXRpb25hbCBpbmZvcm1h
dGlvbiBmb3IgYXR0cmlidXRlcy4KICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIHsg
cmV0dXJuIG1fYXR0cmlidXRlLT5zdHlsZSgpOyB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0F0dHIu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0F0dHIuaWRsCShyZXZpc2lvbiA1MjA5MikK
KysrIFdlYkNvcmUvZG9tL0F0dHIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCwxMSBA
QCBtb2R1bGUgY29yZSB7CiAgICAgICAgIC8vIERPTSBMZXZlbCAyCiAKICAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIEVsZW1lbnQgb3duZXJFbGVtZW50OwotICAgICAgICAKKworICAgICAgICAv
LyBET00gTGV2ZWwgMworCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGlzSWQ7
CisKICAgICAgICAgLy8gZXh0ZW5zaW9ucwogI2lmICFkZWZpbmVkKExBTkdVQUdFX0NPTSkgfHwg
IUxBTkdVQUdFX0NPTQogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NTU3R5bGVEZWNsYXJh
dGlvbiBzdHlsZTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTYsNyArODU2LDcgQEAgRWxlbWVu
dCogRG9jdW1lbnQ6OmdldEVsZW1lbnRCeUlkKGNvbnN0IAogICAgICAgICBmb3IgKE5vZGUgKm4g
PSB0cmF2ZXJzZU5leHROb2RlKCk7IG4gIT0gMDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkg
ewogICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICAgICAgICAg
IGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICAgICAgaWYg
KGVsZW1lbnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+Z2V0QXR0cmlidXRlKGlkQXR0cikgPT0gZWxl
bWVudElkKSB7CisgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgZWxlbWVu
dC0+Z2V0QXR0cmlidXRlKGVsZW1lbnQtPmlkQXR0cmlidXRlTmFtZSgpKSA9PSBlbGVtZW50SWQp
IHsKICAgICAgICAgICAgICAgICAgICAgbV9kdXBsaWNhdGVJZHMucmVtb3ZlKGVsZW1lbnRJZC5p
bXBsKCkpOwogICAgICAgICAgICAgICAgICAgICBtX2VsZW1lbnRzQnlJZC5zZXQoZWxlbWVudElk
LmltcGwoKSwgZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwpJ
bmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzMiw3ICs1MzIsNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJp
YnV0ZShjb25zdCBBdG9taWNTCiAKICAgICBkb2N1bWVudCgpLT5pbmNET01UcmVlVmVyc2lvbigp
OwogCi0gICAgaWYgKGxvY2FsTmFtZSA9PSBpZEF0dHIubG9jYWxOYW1lKCkpCisgICAgaWYgKGxv
Y2FsTmFtZSA9PSBpZEF0dHJpYnV0ZU5hbWUoKS5sb2NhbE5hbWUoKSkKICAgICAgICAgdXBkYXRl
SWQob2xkID8gb2xkLT52YWx1ZSgpIDogbnVsbEF0b20sIHZhbHVlKTsKICAgICAKICAgICBpZiAo
b2xkICYmIHZhbHVlLmlzTnVsbCgpKQpAQCAtNTUyLDcgKzU1Miw3IEBAIHZvaWQgRWxlbWVudDo6
c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmkKICAgICAvLyBhbGxvY2F0ZSBhdHRyaWJ1dGVtYXAg
aWYgbmVjZXNzYXJ5CiAgICAgQXR0cmlidXRlKiBvbGQgPSBhdHRyaWJ1dGVzKGZhbHNlKS0+Z2V0
QXR0cmlidXRlSXRlbShuYW1lKTsKIAotICAgIGlmIChuYW1lID09IGlkQXR0cikKKyAgICBpZiAo
bmFtZSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSkKICAgICAgICAgdXBkYXRlSWQob2xkID8gb2xkLT52
YWx1ZSgpIDogbnVsbEF0b20sIHZhbHVlKTsKICAgICAKICAgICBpZiAob2xkICYmIHZhbHVlLmlz
TnVsbCgpKQpAQCAtNjA3LDggKzYwNyw5IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlTWFw
KFBhc3NSZWZQdHIKIAogICAgIC8vIElmIHNldHRpbmcgdGhlIHdob2xlIG1hcCBjaGFuZ2VzIHRo
ZSBpZCBhdHRyaWJ1dGUsIHdlIG5lZWQgdG8gY2FsbCB1cGRhdGVJZC4KIAotICAgIEF0dHJpYnV0
ZSogb2xkSWQgPSBuYW1lZEF0dHJNYXAgPyBuYW1lZEF0dHJNYXAtPmdldEF0dHJpYnV0ZUl0ZW0o
aWRBdHRyKSA6IDA7Ci0gICAgQXR0cmlidXRlKiBuZXdJZCA9IGxpc3QgPyBsaXN0LT5nZXRBdHRy
aWJ1dGVJdGVtKGlkQXR0cikgOiAwOworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHF1YWxpZmll
ZE5hbWUgPSBpZEF0dHJpYnV0ZU5hbWUoKTsKKyAgICBBdHRyaWJ1dGUqIG9sZElkID0gbmFtZWRB
dHRyTWFwID8gbmFtZWRBdHRyTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKHF1YWxpZmllZE5hbWUpIDog
MDsKKyAgICBBdHRyaWJ1dGUqIG5ld0lkID0gbGlzdCA/IGxpc3QtPmdldEF0dHJpYnV0ZUl0ZW0o
cXVhbGlmaWVkTmFtZSkgOiAwOwogCiAgICAgaWYgKG9sZElkIHx8IG5ld0lkKQogICAgICAgICB1
cGRhdGVJZChvbGRJZCA/IG9sZElkLT52YWx1ZSgpIDogbnVsbEF0b20sIG5ld0lkID8gbmV3SWQt
PnZhbHVlKCkgOiBudWxsQXRvbSk7CkBAIC03MTMsNyArNzE0LDcgQEAgdm9pZCBFbGVtZW50Ojpp
bnNlcnRlZEludG9Eb2N1bWVudCgpCiAKICAgICBpZiAoaGFzSUQoKSkgewogICAgICAgICBpZiAo
TmFtZWROb2RlTWFwKiBhdHRycyA9IG5hbWVkQXR0ck1hcC5nZXQoKSkgewotICAgICAgICAgICAg
QXR0cmlidXRlKiBpZEl0ZW0gPSBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShpZEF0dHIpOworICAg
ICAgICAgICAgQXR0cmlidXRlKiBpZEl0ZW0gPSBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShpZEF0
dHJpYnV0ZU5hbWUoKSk7CiAgICAgICAgICAgICBpZiAoaWRJdGVtICYmICFpZEl0ZW0tPmlzTnVs
bCgpKQogICAgICAgICAgICAgICAgIHVwZGF0ZUlkKG51bGxBdG9tLCBpZEl0ZW0tPnZhbHVlKCkp
OwogICAgICAgICB9CkBAIC03MjQsNyArNzI1LDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJv
bURvY3VtZW50KCkKIHsKICAgICBpZiAoaGFzSUQoKSkgewogICAgICAgICBpZiAoTmFtZWROb2Rl
TWFwKiBhdHRycyA9IG5hbWVkQXR0ck1hcC5nZXQoKSkgewotICAgICAgICAgICAgQXR0cmlidXRl
KiBpZEl0ZW0gPSBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShpZEF0dHIpOworICAgICAgICAgICAg
QXR0cmlidXRlKiBpZEl0ZW0gPSBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShpZEF0dHJpYnV0ZU5h
bWUoKSk7CiAgICAgICAgICAgICBpZiAoaWRJdGVtICYmICFpZEl0ZW0tPmlzTnVsbCgpKQogICAg
ICAgICAgICAgICAgIHVwZGF0ZUlkKGlkSXRlbS0+dmFsdWUoKSwgbnVsbEF0b20pOwogICAgICAg
ICB9CkBAIC0xMDczLDcgKzEwNzQsNyBAQCB2b2lkIEVsZW1lbnQ6OmZvcm1hdEZvckRlYnVnZ2Vy
KGNoYXIqIGJ1CiAgICAgICAgIHJlc3VsdCArPSBzOwogICAgIH0KICAgICAgICAgICAKLSAgICBz
ID0gZ2V0QXR0cmlidXRlKGlkQXR0cik7CisgICAgcyA9IGdldEF0dHJpYnV0ZShpZEF0dHJpYnV0
ZU5hbWUoKSk7CiAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7CiAgICAgICAgIGlmIChyZXN1bHQu
bGVuZ3RoKCkgPiAwKQogICAgICAgICAgICAgcmVzdWx0ICs9ICI7ICI7CkBAIC0xNDMyLDQgKzE0
MzMsOSBAQCBLVVJMIEVsZW1lbnQ6OmdldFVSTEF0dHJpYnV0ZShjb25zdCBRdWFsCiAgICAgcmV0
dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGRlcHJlY2F0ZWRQYXJzZVVSTChnZXRBdHRyaWJ1
dGUobmFtZSkpKTsKIH0KIAorY29uc3QgUXVhbGlmaWVkTmFtZSYgRWxlbWVudDo6cmFyZUlEQXR0
cmlidXRlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJhcmVEYXRhKCktPm1faWRBdHRyaWJ1
dGVOYW1lOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiA1
MjA5MikKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2RlZmluZSBFbGVtZW50X2gKIAogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIK
KyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsVHlwZXMuaCIKIApAQCAtMTExLDYgKzExMiw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldEF0dHJpYnV0ZU5TKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIHF1YWxp
ZmllZE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKIAor
ICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGlkQXR0cmlidXRlTmFtZSgpIGNvbnN0OworCiAgICAg
dm9pZCBzY3JvbGxJbnRvVmlldyhib29sIGFsaWduVG9Ub3AgPSB0cnVlKTsKICAgICB2b2lkIHNj
cm9sbEludG9WaWV3SWZOZWVkZWQoYm9vbCBjZW50ZXJJZk5lZWRlZCA9IHRydWUpOwogCkBAIC0y
ODIsNiArMjg1LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dl
ZChOb2RlVHlwZSk7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBjcmVhdGVB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
OworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHJhcmVJREF0dHJpYnV0ZU5hbWUoKSBjb25zdDsK
ICAgICAKICNpZm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCB2b2lkIGZvcm1hdEZvckRlYnVnZ2Vy
KGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKQEAgLTMzOSw2ICszNDMsMTEg
QEAgaW5saW5lIEVsZW1lbnQqIE5vZGU6OnBhcmVudEVsZW1lbnQoKSBjbwogICAgIHJldHVybiBw
YXJlbnQgJiYgcGFyZW50LT5pc0VsZW1lbnROb2RlKCkgPyBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
cGFyZW50KSA6IDA7CiB9CiAKK2lubGluZSBjb25zdCBRdWFsaWZpZWROYW1lJiBFbGVtZW50Ojpp
ZEF0dHJpYnV0ZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFy
ZUlEQXR0cmlidXRlTmFtZSgpIDogSFRNTE5hbWVzOjppZEF0dHI7Cit9CisKIH0gLy9uYW1lc3Bh
Y2UKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAkocmV2aXNpb24gNTIwOTIpCisr
KyBXZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiAr
MzgsNyBAQCBwdWJsaWM6CiAKICAgICBJbnRTaXplIG1fbWluaW11bVNpemVGb3JSZXNpemluZzsK
ICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fY29tcHV0ZWRTdHlsZTsKKyAgICBRdWFsaWZpZWRO
YW1lIG1faWRBdHRyaWJ1dGVOYW1lOwogfTsKIAogaW5saW5lIEludFNpemUgZGVmYXVsdE1pbmlt
dW1TaXplRm9yUmVzaXppbmcoKQpAQCAtNDcsNiArNDgsNyBAQCBpbmxpbmUgSW50U2l6ZSBkZWZh
dWx0TWluaW11bVNpemVGb3JSZXNpCiAKIGlubGluZSBFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRS
YXJlRGF0YSgpCiAgICAgOiBtX21pbmltdW1TaXplRm9yUmVzaXppbmcoZGVmYXVsdE1pbmltdW1T
aXplRm9yUmVzaXppbmcoKSkKKyAgICAsIG1faWRBdHRyaWJ1dGVOYW1lKEhUTUxOYW1lczo6aWRB
dHRyKQogewogfQogCkluZGV4OiBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL05hbWVkQXR0ck1hcC5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysg
V2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEz
MCw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFwOjpzZXROYW1lZEkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKGEtPm5hbWUoKSA9PSBpZEF0dHIpCisgICAgaWYg
KGF0dHItPmlzSWQoKSkKICAgICAgICAgbV9lbGVtZW50LT51cGRhdGVJZChvbGQgPyBvbGQtPnZh
bHVlKCkgOiBudWxsQXRvbSwgYS0+dmFsdWUoKSk7CiAKICAgICAvLyAjIyMgc2xpZ2h0bHkgaW5l
ZmZpY2llbnQgLSByZXNpemVzIGF0dHJpYnV0ZSBhcnJheSB0d2ljZS4KQEAgLTE1NSw5ICsxNTUs
OSBAQCBQYXNzUmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtCiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAotICAgIFJlZlB0cjxOb2RlPiByID0gYS0+Y3JlYXRlQXR0cklmTmVl
ZGVkKG1fZWxlbWVudCk7CisgICAgUmVmUHRyPEF0dHI+IHIgPSBhLT5jcmVhdGVBdHRySWZOZWVk
ZWQobV9lbGVtZW50KTsKIAotICAgIGlmIChuYW1lID09IGlkQXR0cikKKyAgICBpZiAoci0+aXNJ
ZCgpKQogICAgICAgICBtX2VsZW1lbnQtPnVwZGF0ZUlkKGEtPnZhbHVlKCksIG51bGxBdG9tKTsK
IAogICAgIHJlbW92ZUF0dHJpYnV0ZShuYW1lKTsKQEAgLTI0Miw4ICsyNDIsOCBAQCB2b2lkIE5h
bWVkTm9kZU1hcDo6c2V0QXR0cmlidXRlcyhjb25zdCBOCiAKICAgICAvLyBJZiBhc3NpZ25pbmcg
dGhlIG1hcCBjaGFuZ2VzIHRoZSBpZCBhdHRyaWJ1dGUsIHdlIG5lZWQgdG8gY2FsbAogICAgIC8v
IHVwZGF0ZUlkLgotICAgIEF0dHJpYnV0ZSAqb2xkSWQgPSBnZXRBdHRyaWJ1dGVJdGVtKGlkQXR0
cik7Ci0gICAgQXR0cmlidXRlICpuZXdJZCA9IG90aGVyLmdldEF0dHJpYnV0ZUl0ZW0oaWRBdHRy
KTsKKyAgICBBdHRyaWJ1dGUgKm9sZElkID0gZ2V0QXR0cmlidXRlSXRlbShtX2VsZW1lbnQtPmlk
QXR0cmlidXRlTmFtZSgpKTsKKyAgICBBdHRyaWJ1dGUgKm5ld0lkID0gb3RoZXIuZ2V0QXR0cmli
dXRlSXRlbShtX2VsZW1lbnQtPmlkQXR0cmlidXRlTmFtZSgpKTsKIAogICAgIGlmIChvbGRJZCB8
fCBuZXdJZCkKICAgICAgICAgbV9lbGVtZW50LT51cGRhdGVJZChvbGRJZCA/IG9sZElkLT52YWx1
ZSgpIDogbnVsbEF0b20sIG5ld0lkID8gbmV3SWQtPnZhbHVlKCkgOiBudWxsQXRvbSk7CkluZGV4
OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNw
cAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY1Miw3ICsxNjUyLDYgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBOb2RlOjpxdWVyeVNl
bGVjdG9yKAogCiAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGFsc28gb3B0aW1pemUgZm9yIHRoZSB0
aGUgW2lkPSJmb28iXSBjYXNlCiAgICAgaWYgKHN0cmljdFBhcnNpbmcgJiYgaW5Eb2N1bWVudCgp
ICYmIHF1ZXJ5U2VsZWN0b3JMaXN0Lmhhc09uZVNlbGVjdG9yKCkgJiYgcXVlcnlTZWxlY3Rvckxp
c3QuZmlyc3QoKS0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsKLSAgICAgICAgQVNTRVJU
KHF1ZXJ5U2VsZWN0b3JMaXN0LmZpcnN0KCktPmF0dHJpYnV0ZSgpID09IGlkQXR0cik7CiAgICAg
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChxdWVyeVNl
bGVjdG9yTGlzdC5maXJzdCgpLT5tX3ZhbHVlKTsKICAgICAgICAgaWYgKGVsZW1lbnQgJiYgKGlz
RG9jdW1lbnROb2RlKCkgfHwgZWxlbWVudC0+aXNEZXNjZW5kYW50T2YodGhpcykpICYmIHNlbGVj
dG9yQ2hlY2tlci5jaGVja1NlbGVjdG9yKHF1ZXJ5U2VsZWN0b3JMaXN0LmZpcnN0KCksIGVsZW1l
bnQpKQogICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CkluZGV4OiBXZWJDb3JlL2RvbS9TZWxl
Y3Rvck5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVM
aXN0LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVMaXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCBQYXNzUmVmUHRyPFN0YXRpY05v
ZGVMaXN0PiBjcmVhdGVTZWxlY3RvCiAgICAgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVj
a2VyIHNlbGVjdG9yQ2hlY2tlcihkb2N1bWVudCwgc3RyaWN0UGFyc2luZyk7CiAKICAgICBpZiAo
c3RyaWN0UGFyc2luZyAmJiByb290Tm9kZS0+aW5Eb2N1bWVudCgpICYmIG9ubHlTZWxlY3RvciAm
JiBvbmx5U2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkICYmICFkb2N1bWVudC0+
Y29udGFpbnNNdWx0aXBsZUVsZW1lbnRzV2l0aElkKG9ubHlTZWxlY3Rvci0+bV92YWx1ZSkpIHsK
LSAgICAgICAgQVNTRVJUKHF1ZXJ5U2VsZWN0b3JMaXN0LmZpcnN0KCktPmF0dHJpYnV0ZSgpID09
IGlkQXR0cik7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudC0+Z2V0RWxlbWVu
dEJ5SWQob25seVNlbGVjdG9yLT5tX3ZhbHVlKTsKICAgICAgICAgaWYgKGVsZW1lbnQgJiYgKHJv
b3ROb2RlLT5pc0RvY3VtZW50Tm9kZSgpIHx8IGVsZW1lbnQtPmlzRGVzY2VuZGFudE9mKHJvb3RO
b2RlKSkgJiYgc2VsZWN0b3JDaGVja2VyLmNoZWNrU2VsZWN0b3Iob25seVNlbGVjdG9yLCBlbGVt
ZW50KSkKICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChlbGVtZW50KTsKSW5kZXg6IFdlYkNvcmUv
ZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1N0eWxlZEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNyArMjM0LDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50
OjpjbGFzc0F0dHJpYnV0ZUNoYW5nZQogCiB2b2lkIFN0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IGlkQXR0cikgeworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyaWJ1dGVOYW1lKCkp
IHsKICAgICAgICAgLy8gdW5pcXVlIGlkCiAgICAgICAgIHNldEhhc0lEKCFhdHRyLT5pc051bGwo
KSk7CiAgICAgICAgIGlmIChuYW1lZEF0dHJNYXApIHsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9E
ZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
RGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcs
NyArMTg3LDcgQEAgdm9pZCBEZWxldGVCdXR0b25Db250cm9sbGVyOjpyZXNwb25kVG9DaAogdm9p
ZCBEZWxldGVCdXR0b25Db250cm9sbGVyOjpjcmVhdGVEZWxldGlvblVJKCkKIHsKICAgICBSZWZQ
dHI8SFRNTERpdkVsZW1lbnQ+IGNvbnRhaW5lciA9IG5ldyBIVE1MRGl2RWxlbWVudChkaXZUYWcs
IG1fdGFyZ2V0LT5kb2N1bWVudCgpKTsKLSAgICBjb250YWluZXItPnNldEF0dHJpYnV0ZShpZEF0
dHIsIGNvbnRhaW5lckVsZW1lbnRJZGVudGlmaWVyKTsKKyAgICBjb250YWluZXItPnNldEF0dHJp
YnV0ZShjb250YWluZXItPmlkQXR0cmlidXRlTmFtZSgpLCBjb250YWluZXJFbGVtZW50SWRlbnRp
Zmllcik7CiAKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBjb250YWlu
ZXItPmdldElubGluZVN0eWxlRGVjbCgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVdlYmtpdFVzZXJEcmFnLCBDU1NWYWx1ZU5vbmUpOwpAQCAtMjAyLDcgKzIwMiw3IEBAIHZv
aWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6Y3JlYXRlRGVsZXQKICAgICBzdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlMZWZ0LCAiMCIpOwogCiAgICAgUmVmUHRyPEhUTUxEaXZFbGVtZW50
PiBvdXRsaW5lID0gbmV3IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgbV90YXJnZXQtPmRvY3VtZW50
KCkpOwotICAgIG91dGxpbmUtPnNldEF0dHJpYnV0ZShpZEF0dHIsIG91dGxpbmVFbGVtZW50SWRl
bnRpZmllcik7CisgICAgb3V0bGluZS0+c2V0QXR0cmlidXRlKG91dGxpbmUtPmlkQXR0cmlidXRl
TmFtZSgpLCBvdXRsaW5lRWxlbWVudElkZW50aWZpZXIpOwogCiAgICAgY29uc3QgaW50IGJvcmRl
cldpZHRoID0gNDsKICAgICBjb25zdCBpbnQgYm9yZGVyUmFkaXVzID0gNjsKQEAgLTIyNSw3ICsy
MjUsNyBAQCB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OmNyZWF0ZURlbGV0CiAgICAgICAg
IHJldHVybjsKIAogICAgIFJlZlB0cjxEZWxldGVCdXR0b24+IGJ1dHRvbiA9IG5ldyBEZWxldGVC
dXR0b24obV90YXJnZXQtPmRvY3VtZW50KCkpOwotICAgIGJ1dHRvbi0+c2V0QXR0cmlidXRlKGlk
QXR0ciwgYnV0dG9uRWxlbWVudElkZW50aWZpZXIpOworICAgIGJ1dHRvbi0+c2V0QXR0cmlidXRl
KGJ1dHRvbi0+aWRBdHRyaWJ1dGVOYW1lKCksIGJ1dHRvbkVsZW1lbnRJZGVudGlmaWVyKTsKIAog
ICAgIGNvbnN0IGludCBidXR0b25XaWR0aCA9IDMwOwogICAgIGNvbnN0IGludCBidXR0b25IZWln
aHQgPSAzMDsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDUyMDky
KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NzEsNyArNDcxLDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydEhvcml6b250YWxSdWxl
KAogewogICAgIFJlZlB0cjxIVE1MSFJFbGVtZW50PiBociA9IG5ldyBIVE1MSFJFbGVtZW50KGhy
VGFnLCBmcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCi0gICAg
ICAgIGhyLT5zZXRBdHRyaWJ1dGUoaWRBdHRyLCB2YWx1ZSk7CisgICAgICAgIGhyLT5zZXRBdHRy
aWJ1dGUoaHItPmlkQXR0cmlidXRlTmFtZSgpLCB2YWx1ZSk7CiAgICAgcmV0dXJuIGV4ZWN1dGVJ
bnNlcnROb2RlKGZyYW1lLCBoci5yZWxlYXNlKCkpOwogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEFwcGxldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXBw
bGV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9odG1sL0hUTUxBcHBs
ZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEhUTUxB
cHBsZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAgICAgICAgICAgICBkb2N1bWVudC0+YWRk
TmFtZWRJdGVtKG5ld05hbWUpOwogICAgICAgICB9CiAgICAgICAgIG1fbmFtZSA9IG5ld05hbWU7
Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyKSB7CisgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyaWJ1dGVOYW1lKCkpIHsKICAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBuZXdJZCA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmIChpbkRvY3VtZW50
KCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICAgICAgSFRNTERv
Y3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KHRoaXMtPmRvY3Vt
ZW50KCkpOwpAQCAtMTE4LDcgKzExOCw3IEBAIFJlbmRlck9iamVjdCogSFRNTEFwcGxldEVsZW1l
bnQ6OmNyZWF0ZVIKICAgICAgICAgaWYgKCFjb2RlQmFzZS5pc051bGwoKSkKICAgICAgICAgICAg
IGFyZ3Muc2V0KCJjb2RlQmFzZSIsIGNvZGVCYXNlKTsKIAotICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUgPSBnZXRBdHRyaWJ1dGUoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSA/
IG5hbWVBdHRyIDogaWRBdHRyKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0g
Z2V0QXR0cmlidXRlKGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkgPyBuYW1lQXR0ciA6IGlk
QXR0cmlidXRlTmFtZSgpKTsKICAgICAgICAgaWYgKCFuYW1lLmlzTnVsbCgpKQogICAgICAgICAg
ICAgYXJncy5zZXQoIm5hbWUiLCBuYW1lKTsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBh
cmNoaXZlID0gZ2V0QXR0cmlidXRlKGFyY2hpdmVBdHRyKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0
aW9uLmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgYm9vbCBIVE1MQ29sbGVjdGlv
bjo6Y2hlY2tGb3JOYW1lTWF0Y2goRQogICAgIAogICAgIEhUTUxFbGVtZW50KiBlID0gc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnQqPihlbGVtZW50KTsKICAgICBpZiAoIWNoZWNrTmFtZSkKLSAgICAg
ICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpID09IG5hbWU7CisgICAgICAgIHJldHVy
biBlLT5nZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IG5hbWU7CiAKICAgICAv
LyBkb2N1bWVudC5hbGwgcmV0dXJucyBvbmx5IGltYWdlcywgZm9ybXMsIGFwcGxldHMsIG9iamVj
dHMgYW5kIGVtYmVkcwogICAgIC8vIGJ5IG5hbWUgKHRob3VnaCBldmVyeXRoaW5nIGJ5IGlkKQpA
QCAtMjc3LDcgKzI3Nyw3IEBAIGJvb2wgSFRNTENvbGxlY3Rpb246OmNoZWNrRm9yTmFtZU1hdGNo
KEUKICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoc2VsZWN0VGFnKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG5hbWUg
JiYgZS0+Z2V0QXR0cmlidXRlKGlkQXR0cikgIT0gbmFtZTsKKyAgICByZXR1cm4gZS0+Z2V0QXR0
cmlidXRlKG5hbWVBdHRyKSA9PSBuYW1lICYmIGUtPmdldEF0dHJpYnV0ZShlLT5pZEF0dHJpYnV0
ZU5hbWUoKSkgIT0gbmFtZTsKIH0KIAogTm9kZSogSFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CkBAIC0zMTksNyArMzE5LDcgQEAgdm9pZCBI
VE1MQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlKCkgYwogICAgICAgICBpZiAoIWVsZW1lbnQt
PmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBIVE1MRWxl
bWVudCogZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oZWxlbWVudCk7Ci0gICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKGlkQXR0cik7Cisg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKGUt
PmlkQXR0cmlidXRlTmFtZSgpKTsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0
clZhbCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgICAgIGlmICghaWRBdHRyVmFs
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gYWRkIHRvIGlkIGNhY2hlCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTERhdGFHcmlkQ29sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxEYXRhR3JpZENvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdl
YkNvcmUvaHRtbC9IVE1MRGF0YUdyaWRDb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNyArNTUsNyBAQCB2b2lkIEhUTUxEYXRhR3JpZENvbEVsZW1lbnQ6OmVuc3VyZUNvbHVtCiB7
CiAgICAgaWYgKG1fY29sdW1uKQogICAgICAgICByZXR1cm47Ci0gICAgbV9jb2x1bW4gPSBEYXRh
R3JpZENvbHVtbjo6Y3JlYXRlKGdldEF0dHJpYnV0ZShpZEF0dHIpLCBsYWJlbCgpLCB0eXBlKCks
IHByaW1hcnkoKSwgc29ydGFibGUoKSk7CisgICAgbV9jb2x1bW4gPSBEYXRhR3JpZENvbHVtbjo6
Y3JlYXRlKGdldEF0dHJpYnV0ZShpZEF0dHJpYnV0ZU5hbWUoKSksIGxhYmVsKCksIHR5cGUoKSwg
cHJpbWFyeSgpLCBzb3J0YWJsZSgpKTsKIH0KIAogdm9pZCBIVE1MRGF0YUdyaWRDb2xFbGVtZW50
OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKQEAgLTE2Miw4ICsxNjIsOCBAQCB2b2lkIEhU
TUxEYXRhR3JpZENvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkCiAgICAgICAgIGNvbHVtbigpLT5zZXRT
b3J0YWJsZShzb3J0YWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc29ydGRp
cmVjdGlvbkF0dHIpCiAgICAgICAgIGNvbHVtbigpLT5zZXRTb3J0RGlyZWN0aW9uKHNvcnREaXJl
Y3Rpb24oKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cikKLSAgICAgICAg
Y29sdW1uKCktPnNldElkKGdldEF0dHJpYnV0ZShpZEF0dHIpKTsKKyAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gaWRBdHRyaWJ1dGVOYW1lKCkpCisgICAgICAgIGNvbHVtbigpLT5zZXRJZChn
ZXRBdHRyaWJ1dGUoaWRBdHRyaWJ1dGVOYW1lKCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUv
aHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBi
b29sIEhUTUxFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpCiAgICAgCiB2b2lkIEhUTUxF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7Ci0g
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHIgfHwgYXR0ci0+bmFtZSgpID09IGNsYXNzQXR0
ciB8fCBhdHRyLT5uYW1lKCkgPT0gc3R5bGVBdHRyKQorICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
aWRBdHRyaWJ1dGVOYW1lKCkgfHwgYXR0ci0+bmFtZSgpID09IGNsYXNzQXR0ciB8fCBhdHRyLT5u
YW1lKCkgPT0gc3R5bGVBdHRyKQogICAgICAgICByZXR1cm4gU3R5bGVkRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAKICAgICBTdHJpbmcgaW5kZXhzdHJpbmc7CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzEx
MCw4IEBAIEVsZW1lbnQqIEhUTUxGb3JtQ29sbGVjdGlvbjo6Z2V0TmFtZWRGb3IKICAgICBib29s
IGZvdW5kSW5wdXRFbGVtZW50cyA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmb3JtLT5mb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEZvcm1Db250
cm9sRWxlbWVudCogZSA9IGZvcm0tPmZvcm1FbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGUtPmlz
RW51bWVyYXRhYmxlKCkgJiYgZS0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1lKSB7Cisg
ICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSAoYXR0ck5hbWUgPT0g
aWRBdHRyKSA/IGUtPmlkQXR0cmlidXRlTmFtZSgpIDogYXR0ck5hbWU7CisgICAgICAgIGlmIChl
LT5pc0VudW1lcmF0YWJsZSgpICYmIGUtPmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA9PSBu
YW1lKSB7CiAgICAgICAgICAgICBmb3VuZElucHV0RWxlbWVudHMgPSB0cnVlOwogICAgICAgICAg
ICAgaWYgKCFkdXBsaWNhdGVOdW1iZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGU7CkBAIC0x
MjEsNyArMTIyLDggQEAgRWxlbWVudCogSFRNTEZvcm1Db2xsZWN0aW9uOjpnZXROYW1lZEZvcgog
ICAgIGlmICghZm91bmRJbnB1dEVsZW1lbnRzKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBmb3JtLT5pbWdFbGVtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgSFRN
TEltYWdlRWxlbWVudCogZSA9IGZvcm0tPmltZ0VsZW1lbnRzW2ldOwotICAgICAgICAgICAgaWYg
KGUtPmdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkgeworICAgICAgICAgICAgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSA9IChhdHRyTmFtZSA9PSBpZEF0dHIpID8gZS0+
aWRBdHRyaWJ1dGVOYW1lKCkgOiBhdHRyTmFtZTsKKyAgICAgICAgICAgIGlmIChlLT5nZXRBdHRy
aWJ1dGUoYXR0cmlidXRlTmFtZSkgPT0gbmFtZSkgewogICAgICAgICAgICAgICAgIGlmICghZHVw
bGljYXRlTnVtYmVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICAgICAg
ICAgICAtLWR1cGxpY2F0ZU51bWJlcjsKQEAgLTE3MSwxMCArMTczLDEwIEBAIE5vZGUqIEhUTUxG
b3JtQ29sbGVjdGlvbjo6bmV4dE5hbWVkSXRlbSgKICAgICAvLyBUaGUgbmV4dE5hbWVkSXRlbUlu
dGVybmFsIGZ1bmN0aW9uIGNhbiByZXR1cm4gdGhlIHNhbWUgaXRlbSB0d2ljZSBpZiBpdCBoYXMK
ICAgICAvLyBib3RoIGFuIGlkIGFuZCBuYW1lIHRoYXQgYXJlIGVxdWFsIHRvIHRoZSBuYW1lIHBh
cmFtZXRlci4gU28gdGhpcyBmdW5jdGlvbgogICAgIC8vIGNoZWNrcyBpZiB3ZSBhcmUgb24gdGhl
IG5hbWVBdHRyIGhhbGYgb2YgdGhlIGl0ZXJhdGlvbiBhbmQgc2tpcHMgb3ZlciBhbnkKLSAgICAv
LyB0aGF0IGFsc28gaGF2ZSB0aGUgc2FtZSBpZEF0dHIuCisgICAgLy8gdGhhdCBhbHNvIGhhdmUg
dGhlIHNhbWUgaWRBdHRyaWJ1dGVOYW1lLgogICAgIEVsZW1lbnQqIGltcGwgPSBuZXh0TmFtZWRJ
dGVtSW50ZXJuYWwobmFtZSk7CiAgICAgaWYgKG1faWRzRG9uZSkKLSAgICAgICAgd2hpbGUgKGlt
cGwgJiYgaW1wbC0+Z2V0QXR0cmlidXRlKGlkQXR0cikgPT0gbmFtZSkKKyAgICAgICAgd2hpbGUg
KGltcGwgJiYgaW1wbC0+Z2V0QXR0cmlidXRlKGltcGwtPmlkQXR0cmlidXRlTmFtZSgpKSA9PSBu
YW1lKQogICAgICAgICAgICAgaW1wbCA9IG5leHROYW1lZEl0ZW1JbnRlcm5hbChuYW1lKTsKICAg
ICByZXR1cm4gaW1wbDsKIH0KQEAgLTE5MSw3ICsxOTMsNyBAQCB2b2lkIEhUTUxGb3JtQ29sbGVj
dGlvbjo6dXBkYXRlTmFtZUNhY2hlCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPmZv
cm1FbGVtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
KiBlID0gZi0+Zm9ybUVsZW1lbnRzW2ldOwogICAgICAgICBpZiAoZS0+aXNFbnVtZXJhdGFibGUo
KSkgewotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRB
dHRyaWJ1dGUoaWRBdHRyKTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRy
VmFsID0gZS0+Z2V0QXR0cmlidXRlKGUtPmlkQXR0cmlidXRlTmFtZSgpKTsKICAgICAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0
dHIpOwogICAgICAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gYWRkIHRvIGlkIGNhY2hlCkBAIC0yMTgsNyArMjIwLDcgQEAgdm9pZCBIVE1MRm9y
bUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGYtPmltZ0VsZW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1l
bnQqIGUgPSBmLT5pbWdFbGVtZW50c1tpXTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBp
ZEF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKTsKKyAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkp
OwogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZS0+Z2V0QXR0cmli
dXRlKG5hbWVBdHRyKTsKICAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpICYmICFmb3Vu
ZElucHV0RWxlbWVudHMuY29udGFpbnMoaWRBdHRyVmFsLmltcGwoKSkpIHsKICAgICAgICAgICAg
IC8vIGFkZCB0byBpZCBjYWNoZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRC
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2Uu
Y3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIEhUTUxGcmFtZUVs
ZW1lbnRCYXNlOjpwYXJzZU1hcHBlZEF0CiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBzcmNB
dHRyKQogICAgICAgICBzZXRMb2NhdGlvbihkZXByZWNhdGVkUGFyc2VVUkwoYXR0ci0+dmFsdWUo
KSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHIpIHsKKyAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyaWJ1dGVOYW1lKCkpIHsKICAgICAgICAgLy8gSW1wb3J0
YW50IHRvIGNhbGwgdGhyb3VnaCB0byBiYXNlIGZvciB0aGUgaWQgYXR0cmlidXRlIHNvIHRoZSBo
YXNJRCBiaXQgZ2V0cyBzZXQuCiAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAgICAgICAgIG1fZnJhbWVOYW1lID0gYXR0ci0+dmFsdWUo
KTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzZXROYW1l
QW5kT3BlCiB7CiAgICAgbV9mcmFtZU5hbWUgPSBnZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwogICAg
IGlmIChtX2ZyYW1lTmFtZS5pc051bGwoKSkKLSAgICAgICAgbV9mcmFtZU5hbWUgPSBnZXRBdHRy
aWJ1dGUoaWRBdHRyKTsKKyAgICAgICAgbV9mcmFtZU5hbWUgPSBnZXRBdHRyaWJ1dGUoaWRBdHRy
aWJ1dGVOYW1lKCkpOwogICAgIAogICAgIGlmIChGcmFtZSogcGFyZW50RnJhbWUgPSBkb2N1bWVu
dCgpLT5mcmFtZSgpKQogICAgICAgICBtX2ZyYW1lTmFtZSA9IHBhcmVudEZyYW1lLT50cmVlKCkt
PnVuaXF1ZUNoaWxkTmFtZShtX2ZyYW1lTmFtZSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElt
YWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgSFRNTEltYWdlRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgICAgIGRvY3VtZW50LT5hZGROYW1lZEl0
ZW0obmV3TmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgbV9uYW1lID0gbmV3TmFtZTsKLSAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHIpIHsKKyAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSkgewogICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIG5ld0lkID0gYXR0ci0+dmFsdWUoKTsKICAgICAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiBk
b2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgICAgICBIVE1MRG9jdW1lbnQq
IGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4odGhpcy0+ZG9jdW1lbnQoKSk7
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsOSArNzgsOSBA
QCBib29sIEhUTUxNYXBFbGVtZW50OjptYXBNb3VzZUV2ZW50KGludCB4CiB2b2lkIEhUTUxNYXBF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAg
ICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCk7Ci0gICAgaWYg
KGF0dHJOYW1lID09IGlkQXR0ciB8fCBhdHRyTmFtZSA9PSBuYW1lQXR0cikgeworICAgIGlmIChh
dHRyTmFtZSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSB8fCBhdHRyTmFtZSA9PSBuYW1lQXR0cikgewog
ICAgICAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAgICAgICAgaWYgKGF0dHJOYW1l
ID09IGlkQXR0cikgeworICAgICAgICBpZiAoYXR0ck5hbWUgPT0gaWRBdHRyaWJ1dGVOYW1lKCkp
IHsKICAgICAgICAgICAgIC8vIENhbGwgYmFzZSBjbGFzcyBzbyB0aGF0IGhhc0lEIGJpdCBnZXRz
IHNldC4KICAgICAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKICAgICAgICAgICAgIGlmIChkb2MtPmlzSFRNTERvY3VtZW50KCkpCkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTE5hbWVDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTE5hbWVDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBF
bGVtZW50KiBIVE1MTmFtZUNvbGxlY3Rpb246Oml0ZW1BZnRlcihFCiAgICAgICAgICAgICAgICAg
ICAgIGUtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKICAgICAgICAgICAgICAgICAgICAgaWYgKGUt
PmdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9uYW1lKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGU7Ci0gICAgICAgICAgICAgICAgaWYgKGUtPmdldEF0dHJpYnV0ZShpZEF0dHIp
ID09IG1fbmFtZSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+Z2V0QXR0cmlidXRlKGUtPmlkQXR0
cmlidXRlTmFtZSgpKSA9PSBtX25hbWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE5hbWVkSXRl
bXM6CkBAIC03NCwxNCArNzQsMTQgQEAgRWxlbWVudCogSFRNTE5hbWVDb2xsZWN0aW9uOjppdGVt
QWZ0ZXIoRQogICAgICAgICAgICAgICAgICAgICBpZiAoZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRy
KSA9PSBtX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGUtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUgfHwgZS0+
Z2V0QXR0cmlidXRlKGlkQXR0cikgPT0gbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiAo
ZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUgfHwgZS0+Z2V0QXR0cmlidXRlKGUt
PmlkQXR0cmlidXRlTmFtZSgpKSA9PSBtX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUtPmhhc1RhZ05hbWUob2JqZWN0
VGFnKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoKGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0
cikgPT0gbV9uYW1lIHx8IGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpID09IG1fbmFtZSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKChlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1fbmFtZSB8
fCBlLT5nZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IG1fbmFtZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudCo+
KGUpLT5pc0RvY05hbWVkSXRlbSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLT5oYXNUYWdOYW1lKGltZ1RhZykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9uYW1l
IHx8IChlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBtX25hbWUgJiYgZS0+aGFzQXR0cmlidXRl
KG5hbWVBdHRyKSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1dGUobmFt
ZUF0dHIpID09IG1fbmFtZSB8fCAoZS0+Z2V0QXR0cmlidXRlKGUtPmlkQXR0cmlidXRlTmFtZSgp
KSA9PSBtX25hbWUgJiYgZS0+aGFzQXR0cmlidXRlKG5hbWVBdHRyKSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
YnJlYWs7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDUyMDky
KQorKysgV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmkKICAgICAgICAgICAgIGRvY3VtZW50LT5hZGROYW1lZEl0ZW0obmV3TmFtZSk7CiAgICAgICAg
IH0KICAgICAgICAgbV9uYW1lID0gbmV3TmFtZTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBpZEF0dHIpIHsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0
ZU5hbWUoKSkgewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkID0gYXR0ci0+dmFs
dWUoKTsKICAgICAgICAgaWYgKGlzRG9jTmFtZWRJdGVtKCkgJiYgaW5Eb2N1bWVudCgpICYmIGRv
Y3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgICAgIEhUTUxEb2N1bWVudCog
ZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPih0aGlzLT5kb2N1bWVudCgpKTsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2Vi
Q29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0
Myw3IEBAIEhUTUxQYXJhbUVsZW1lbnQ6On5IVE1MUGFyYW1FbGVtZW50KCkKIAogdm9pZCBIVE1M
UGFyYW1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIp
CiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHIpIHsKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IGlkQXR0cmlidXRlTmFtZSgpKSB7CiAgICAgICAgIC8vIE11c3QgY2FsbCBiYXNlIGNs
YXNzIHNvIHRoYXQgaGFzSUQgYml0IGdldHMgc2V0LgogICAgICAgICBIVE1MRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAgICAgICAgIGlmIChkb2N1bWVudCgpLT5pc0hUTUxE
b2N1bWVudCgpKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkRm9udC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkRm9udC5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysg
V2ViQ29yZS9sb2FkZXIvQ2FjaGVkRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsx
NjUsNyBAQCBTVkdGb250RWxlbWVudCogQ2FjaGVkRm9udDo6Z2V0U1ZHRm9udEJ5CiAgICAgICAg
IE5vZGUqIG5vZGUgPSBsaXN0LT5pdGVtKGkpOwogICAgICAgICBBU1NFUlQobm9kZSk7CiAKLSAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKEhUTUxO
YW1lczo6aWRBdHRyKSAhPSBmb250TmFtZSkKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aWRB
dHRyaWJ1dGVOYW1lKCkpICE9IGZvbnROYW1lKQogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgQVNTRVJUKG5vZGUtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZvbnRUYWcpKTsKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gNTIwOTIp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjcmVhdGVHcmFw
aGljc0wKICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0TmFtZSgiRG9jdW1lbnQgTm9k
ZSIpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpLT5ub2RlKCkt
PmlzSFRNTEVsZW1lbnQoKSAmJiByZW5kZXJlcigpLT5ub2RlKCktPmhhc0lEKCkpCi0gICAgICAg
ICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXROYW1lKHJlbmRlcmVyKCktPnJlbmRlck5hbWUo
KSArIFN0cmluZygiICIpICsgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihyZW5kZXJlcigpLT5u
b2RlKCkpLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaGlj
c0xheWVyLT5zZXROYW1lKHJlbmRlcmVyKCktPnJlbmRlck5hbWUoKSArIFN0cmluZygiICIpICsg
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihyZW5kZXJlcigpLT5ub2RlKCkpLT5nZXRBdHRyaWJ1
dGUoaWRBdHRyaWJ1dGVOYW1lKCkpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICBtX2dyYXBoaWNzTGF5ZXItPnNldE5hbWUocmVuZGVyZXIoKS0+cmVuZGVyTmFtZSgpKTsKICAg
ICAgICAgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJ
KHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyNSw3ICs1MjUsNyBAQCB2b2lkIHdyaXRlUmVuZGVy
UmVzb3VyY2VzKFRleHRTdHJlYW0mIHRzCiAgICAgICAgIGlmICghcmVzb3VyY2UpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBTdHJpbmcgZWxlbWVudElkID0gc3ZnRWxlbWVudC0+
Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKTsKKyAgICAgICAgU3RyaW5nIGVsZW1lbnRJ
ZCA9IHN2Z0VsZW1lbnQtPmdldEF0dHJpYnV0ZShzdmdFbGVtZW50LT5pZEF0dHJpYnV0ZU5hbWUo
KSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGVzZSBuYW1lcyBhcmUgbGllcyEKICAgICAgICAgaWYg
KHJlc291cmNlLT5pc1BhaW50U2VydmVyKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxTVkdQYWlu
dFNlcnZlcj4gcGFpbnRTZXJ2ZXIgPSBXVEY6OnN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHUGFpbnRT
ZXJ2ZXI+KHJlc291cmNlKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA1MjA5MikKKysr
IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNyArMjM0
LDcgQEAgdm9pZCBTVkdFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiAgICAgU3R5bGVk
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICBTVkdEb2N1bWVudEV4dGVuc2lv
bnMqIGV4dGVuc2lvbnMgPSBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCk7CiAKLSAg
ICBTdHJpbmcgcmVzb3VyY2VJZCA9IFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KGdldEF0dHJp
YnV0ZShpZEF0dHIpKTsKKyAgICBTdHJpbmcgcmVzb3VyY2VJZCA9IFNWR1VSSVJlZmVyZW5jZTo6
Z2V0VGFyZ2V0KGdldEF0dHJpYnV0ZShpZEF0dHJpYnV0ZU5hbWUoKSkpOwogICAgIGlmIChleHRl
bnNpb25zLT5pc1BlbmRpbmdSZXNvdXJjZShyZXNvdXJjZUlkKSkgewogICAgICAgICBzdGQ6OmF1
dG9fcHRyPEhhc2hTZXQ8U1ZHU3R5bGVkRWxlbWVudCo+ID4gY2xpZW50cyhleHRlbnNpb25zLT5y
ZW1vdmVQZW5kaW5nUmVzb3VyY2UocmVzb3VyY2VJZCkpOwogICAgICAgICBpZiAoY2xpZW50cy0+
aXNFbXB0eSgpKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDUyMDky
KQorKysgV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4OSw3ICsxODksNyBAQCBib29sIFNWR1N0eWxlZEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUo
CiAgICAgaWYgKHByb3BJZCA+IDApCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJu
IChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OmlkQXR0ciB8fCBhdHRyTmFtZSA9PSBIVE1MTmFtZXM6
OnN0eWxlQXR0cik7IAorICAgIHJldHVybiAoYXR0ck5hbWUgPT0gaWRBdHRyaWJ1dGVOYW1lKCkg
fHwgYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpzdHlsZUF0dHIpOyAKIH0KIAogdm9pZCBTVkdTdHls
ZWRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQpJbmRleDogV2ViQ29yZS93bWwvV01MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS93bWwvV01MRWxlbWVudC5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS93bWwv
V01MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgYm9vbCBXTUxF
bGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZgogICAgIAogdm9pZCBXTUxFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBIVE1MTmFtZXM6OmlkQXR0cgorICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
aWRBdHRyaWJ1dGVOYW1lKCkKICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09IEhUTUxOYW1lczo6
Y2xhc3NBdHRyCiAgICAgICAgIHx8IGF0dHItPm5hbWUoKSA9PSBIVE1MTmFtZXM6OnN0eWxlQXR0
cikKICAgICAgICAgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTIxMDYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAwOS0xMi0xNCAgU2h1IENoYW5nICA8
Q2hhbmcuU2h1QG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBOZXcgdGVzdCBjYXNlcyBmb3IgaXNJZCBzdXBwb3J0LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU3OAorCisgICAgICAgICog
ZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGRvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA0LmpzOgorICAgICAgICAoc2V0VXBQYWdl
KToKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNS1leHBlY3RlZC50
eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDUuanM6CisgICAg
ICAgIChzZXRVcFBhZ2UpOgorICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tYXBwbGV0
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1h
cHBsZXQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1kZWxl
dGVidXR0b24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50
L2lkLWluLWRlbGV0ZWJ1dHRvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVt
ZW50L2lkLWluLWZvcm1jb2xsZWN0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mb3JtY29sbGVjdGlvbi5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLWZyYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLWZyYW1lc2V0LWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZXNldC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLWdldGVsZW1lbnQwMS1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZ2V0ZWxlbWVudDAx
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4taW5zZXJ0LWhy
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1p
bnNlcnQtaHIuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1t
YXAtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWlu
LW1hcC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLXBhcmFt
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1w
YXJhbS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2Zv
bnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWlu
LXN2Z2ZvbnQuc3ZnOiBBZGRlZC4KKwogMjAwOS0xMi0xNCAgRXJpYyBDYXJsc29uICA8ZXJpYy5j
YXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQsIGJ1aWxkIGZpeC4KSW5k
ZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA0LWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0
cmlzaWQwNC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUyMDkyKQorKysgTGF5b3V0VGVzdHMvZG9t
L3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1
aXRlL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQKLVN0YXR1cwlza2lwCi1NZXNzYWdlCUhUTUwgbG9h
ZGVyIGRvZXMgbm90IHN1cHBvcnQgdmFsaWRhdGluZz10cnVlCitTdGF0dXMJU3VjY2VzcwpJbmRl
eDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQuanMJ
KHJldmlzaW9uIDUyMDkyKQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0
dHJpc2lkMDQuanMJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDggQEAgZnVuY3Rpb24gc2V0
VXBQYWdlKCkgewogICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkg
dGhyb3cgZXhjZXB0aW9uCiAgICAgIC8vCiAgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVk
QnVpbGRlcigpOwotICAgICAgIHNldEltcGxlbWVudGF0aW9uQXR0cmlidXRlKCJ2YWxpZGF0aW5n
IiwgdHJ1ZSk7CisgICAgIC8vIHJlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgb3RoZXJld2lzZSB0
ZXN0IGNhc2Ugc2tpcHBlZC4KKyAgICAgLy9zZXRJbXBsZW1lbnRhdGlvbkF0dHJpYnV0ZSgidmFs
aWRhdGluZyIsIHRydWUpOwogCiAgICAgICBkb2NzTG9hZGVkID0gMDsKICAgICAgIApJbmRleDog
TGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDUtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNp
ZDA1LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTIwOTIpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0
bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
bGV2ZWwzL2NvcmUvYXR0cmlzaWQwNQotU3RhdHVzCXNraXAKLU1lc3NhZ2UJSFRNTCBsb2FkZXIg
ZG9lcyBub3Qgc3VwcG9ydCB2YWxpZGF0aW5nPXRydWUKK1N0YXR1cwlTdWNjZXNzCkluZGV4OiBM
YXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNS5qcwkocmV2
aXNpb24gNTIwOTIpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlz
aWQwNS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOCBAQCBmdW5jdGlvbiBzZXRVcFBh
Z2UoKSB7CiAgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJv
dyBleGNlcHRpb24KICAgICAgLy8KICAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWls
ZGVyKCk7Ci0gICAgICAgc2V0SW1wbGVtZW50YXRpb25BdHRyaWJ1dGUoInZhbGlkYXRpbmciLCB0
cnVlKTsKKyAgICAgLy8gcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBvdGhlcmV3aXNlIHRlc3Qg
Y2FzZSBza2lwcGVkLgorICAgICAvL3NldEltcGxlbWVudGF0aW9uQXR0cmlidXRlKCJ2YWxpZGF0
aW5nIiwgdHJ1ZSk7CiAKICAgICAgIGRvY3NMb2FkZWQgPSAwOwogICAgICAgCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWFwcGxldC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1hcHBsZXQtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1p
bi1hcHBsZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0
IHVzaW5nIGlkIGluIGFwcGxldCBlbGVtZW50CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcHBsZXQxIikgaXMgbm9uLW51bGwu
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1hcHBsZXQuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWFwcGxldC5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1hcHBsZXQu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8YXBwbGV0IGlkPSJhcHBsZXQxIiB3aWR0aD0iMTAiIGhl
aWdodD0iMTAiPjwvYXBwbGV0PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdXNpbmcg
aWQgaW4gYXBwbGV0IGVsZW1lbnQiKTsKKworc2hvdWxkQmVOb25OdWxsKCdkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiYXBwbGV0MSIpJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9FbGVtZW50L2lkLWluLWRlbGV0ZWJ1dHRvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1kZWxldGVidXR0b24tZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1p
bi1kZWxldGVidXR0b24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBA
CitUZXN0IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJXZWJLaXQtRWRpdGluZy1EZWxldGUtQnV0
dG9uIikKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZGVsZXRlQnV0dG9u
IGlzIG5vbi1udWxsLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisxCisyCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4t
ZGVsZXRlYnV0dG9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxl
bWVudC9pZC1pbi1kZWxldGVidXR0b24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZGVsZXRlYnV0dG9uLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjkgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KworPGRpdiBjb250ZW50ZWRpdGFibGU9InRydWUiPgorPHVsIGNsYXNzPSJuZWVkc0RlbGV0aW9u
VUkiPjxsaT4xPC9saT48bGkgaWQ9ImxpIj4yPC9saT48L3VsPgorCis8c2NyaXB0PgorZGVzY3Jp
cHRpb24oJ1Rlc3QgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIldlYktpdC1FZGl0aW5nLURlbGV0
ZS1CdXR0b24iKScpOworCitzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CitsaSA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJsaSIpOworc2VsLnNldFBvc2l0aW9uKGxpLCAwKTsKKworaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGRlbGV0ZUJ1dHRvbiA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJXZWJLaXQtRWRpdGluZy1EZWxldGUtQnV0dG9uIik7CisgICAg
c2hvdWxkQmVOb25OdWxsKCdkZWxldGVCdXR0b24nKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZm9ybWNvbGxlY3Rpb24tZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZm9ybWNv
bGxlY3Rpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9k
b20vRWxlbWVudC9pZC1pbi1mb3JtY29sbGVjdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgdXNpbmcgaWQgaW4gSFRNTEZvcm1Db2xsZWN0aW9uCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGVsZW1zKCJpZHMxIiwxKS5nZXRB
dHRyaWJ1dGUoIm5hbWUiKSBpcyAibmFtZTIiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKyAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1l
bnQvaWQtaW4tZm9ybWNvbGxlY3Rpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9FbGVtZW50L2lkLWluLWZvcm1jb2xsZWN0aW9uLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWZvcm1jb2xsZWN0aW9uLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjUgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKworPGZvcm0gaWQ9ImlkZjEiPgorPHNlbGVjdCBpZD0iaWRzMSIgbmFt
ZT0ibmFtZTEiPjxvcHRpb24gc2VsZWN0ZWQ+RkFJTFVSRTwvb3B0aW9uPjwvc2VsZWN0PgorPHNl
bGVjdCBpZD0iaWRzMSIgbmFtZT0ibmFtZTIiPjxvcHRpb24gc2VsZWN0ZWQ+RkFJTFVSRTwvb3B0
aW9uPjwvc2VsZWN0PgorPC9mb3JtPgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdXNp
bmcgaWQgaW4gSFRNTEZvcm1Db2xsZWN0aW9uIik7CisKK3ZhciBlbGVtcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJpZGYxIikuZWxlbWVudHM7CitzaG91bGRCZSgnZWxlbXMoImlkczEiLDEp
LmdldEF0dHJpYnV0ZSgibmFtZSIpJywgJyJuYW1lMiInKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWUtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWUtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1m
cmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgdXNp
bmcgaWQgaW4gZnJhbWUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRoZWZyYW1lIikgaXMgbm9uLW51bGwuCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWUuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdXNpbmcgaWQgaW4gZnJhbWUiKTsK
KyAgICAKK3ZhciBwYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKK3Bh
cmVudC5pZCA9ICd0aGVmcmFtZSc7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBhcmVudCk7
CisKK3Nob3VsZEJlTm9uTnVsbCgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRoZWZyYW1lIikn
KTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJh
bWVzZXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0Vs
ZW1lbnQvaWQtaW4tZnJhbWVzZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZXNldC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMiBAQAorQUxFUlQ6IDEKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZXNldC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWVzZXQuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWVzZXQuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+CisKKzxmcmFtZXNldCBpZD0iZnJhbWVzZXQi
PgorICA8ZnJhbWUgbmFtZT0iZnJhbWUyIiBzcmM9ImFib3V0OmJsYW5rIj4KKyAgPGZyYW1lIG5h
bWU9ImZyYW1lMSIgc3JjPSJqYXZhc2NyaXB0OgorICAgIGZ1bmN0aW9uIGxvZyhzKQorICAgIHsK
KyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGFsZXJ0KHMp
OworICAgICAgZWxzZQorICAgICAgICB0b3AuZnJhbWUxLmRvY3VtZW50LndyaXRlKCc8cD4nICsg
cyArICc8L3A+Jyk7CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgIHRvcC5m
cmFtZXNldC5yZW1vdmVDaGlsZCh0b3AuZnJhbWUyLmZyYW1lRWxlbWVudCk7CisgICAgbG9nKHRv
cC5mcmFtZXNldC5jaGlsZHJlbi5sZW5ndGgpOworICAiPgorCisgIDxmcmFtZSBuYW1lPSJmcmFt
ZTMiIHNyYz0iYWJvdXQ6YmxhbmsiPgorPC9mcmFtZXNldD4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZ2V0ZWxlbWVudDAxLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWdldGVsZW1l
bnQwMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9F
bGVtZW50L2lkLWluLWdldGVsZW1lbnQwMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTIgQEAKK1Rlc3QgZ2V0RWxlbWVudEJ5SWQKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgZWxlbS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSBpcyAibmFtZTEiCitQQVNT
IGVsZW0uZ2V0QXR0cmlidXRlKCJuYW1lIikgaXMgIm5hbWUyIgorUEFTUyBlbGVtIGlzIG51bGwK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWdldGVsZW1lbnQwMS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZ2V0ZWxlbWVu
dDAxLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lk
LWluLWdldGVsZW1lbnQwMS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACis8aHRt
bD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxkaXYgbmFtZT0nbmFtZTEn
IGlkPSdpZDEnLz4KKzxkaXYgbmFtZT0nbmFtZTInIGlkPSdpZDInLz4KKzxkaXYgbmFtZT0nbmFt
ZTMnIGlkPSdpZDInLz4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IGdldEVsZW1lbnRC
eUlkIik7CisKK3ZhciBlbGVtOworCisvLyBlbGVtZW50IGZvdW5kIHdpdGggZXhhY3QgbWF0Y2gK
K2VsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWQxJyk7CitzaG91bGRCZSgnZWxlbS5n
ZXRBdHRyaWJ1dGUoIm5hbWUiKScsICcibmFtZTEiJyk7CisKKy8vIG11bHRpcGxlIGVsZW1lbnRz
IGhhdmluZyBzYW1lIGlkIHJldHVybiB0aGUgZmlyc3Qgb25lCitlbGVtID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2lkMicpOworc2hvdWxkQmUoJ2VsZW0uZ2V0QXR0cmlidXRlKCJuYW1lIikn
LCAnIm5hbWUyIicpOworCisvLyBlbGVtZW50IHdpdGggaWQgbm90IGZvdW5kCitlbGVtID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMycpOworc2hvdWxkQmVOdWxsKCdlbGVtJyk7CisKK3Zh
ciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWluc2VydC1oci1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9p
ZC1pbi1pbnNlcnQtaHItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1pbnNlcnQtaHItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwIEBACitUZXN0IHVzaW5nIGlkIGluIGV4ZWNDb21tYW5kKEluc2VydEhv
cml6b250YWxSdWxlKQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBociBp
cyBub24tbnVsbC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorZm9vYmFyCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWlu
c2VydC1oci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQv
aWQtaW4taW5zZXJ0LWhyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9FbGVtZW50L2lkLWluLWluc2VydC1oci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5
IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlk
PSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxkaXYgaWQ9
InRlc3QxIiBjb250ZW50ZWRpdGFibGU9InRydWUiPmZvb2JhcjwvZGl2PgorCis8c2NyaXB0Pgor
ZGVzY3JpcHRpb24oIlRlc3QgdXNpbmcgaWQgaW4gZXhlY0NvbW1hbmQoSW5zZXJ0SG9yaXpvbnRh
bFJ1bGUpIik7CisKK3ZhciBzID0gd2luZG93LmdldFNlbGVjdGlvbigpOwordmFyIGUgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdDEiKTsKK3Muc2V0UG9zaXRpb24oZSwgMCk7CisKK3Zh
ciBpZCA9ICJociI7Citkb2N1bWVudC5leGVjQ29tbWFuZCgiSW5zZXJ0SG9yaXpvbnRhbFJ1bGUi
LCBmYWxzZSwgaWQpOwordmFyIGhyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworCitz
aG91bGRCZU5vbk51bGwoJ2hyJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9FbGVtZW50L2lkLWluLW1hcC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1tYXAtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1tYXAtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0IHVzaW5nIGlkIGluIG1hcCBlbGVtZW50
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiZmlyc3RtYXAiKSBpcyBub24tbnVsbC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9F
bGVtZW50L2lkLWluLW1hcC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9t
L0VsZW1lbnQvaWQtaW4tbWFwLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9FbGVtZW50L2lkLWluLW1hcC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBA
Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJk
ZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxtYXAgdGl0bGU9
Im1hcCIgaWQ9ImZpcnN0bWFwIj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IHVzaW5n
IGlkIGluIG1hcCBlbGVtZW50LiIpOworICAgIAorc2hvdWxkQmVOb25OdWxsKCdkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiZmlyc3RtYXAiKScpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1wYXJhbS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1wYXJhbS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXBhcmFtLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdCB1c2luZyBpZCBp
biBwYXJhbSBlbGVtZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWQxIikgaXMgbm9uLW51bGwuCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1wYXJhbS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tcGFyYW0uaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tcGFyYW0uaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorICAgIAorPG9iamVjdCB3aWR0aD0xMDAgaGVpZ2h0PTEwMD4KKyAgPHBhcmFtIG5hbWU9Im1v
dmllIiBpZD0iaWQxIj4KKzwvb2JqZWN0PiAgICAKKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJU
ZXN0IHVzaW5nIGlkIGluIHBhcmFtIGVsZW1lbnQuIik7CisKK3Nob3VsZEJlTm9uTnVsbCgnZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkMSIpJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2ZvbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tc3ZnZm9udC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2
Z2ZvbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK2xheWVyIGF0
ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAor
bGF5ZXIgYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgIFJlbmRlclNWR1Jvb3Qge3N2Z30gYXQgKDAs
LTMpIHNpemUgNDB4MworICAgIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lciB7ZGVmc30gYXQgKDAs
MCkgc2l6ZSAweDAKKyAgICAgIFJlbmRlclBhdGgge3BhdGh9IGF0ICgwLDApIHNpemUgNDcyN3g1
OCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDAwMDAwXX1dIFtkYXRhPSJNIDAgMEwgMCA0
MkwgMTYgNThMIDQ3MjcgNTgiXQorICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNp
emUgNDB4MyBjb250YWlucyAxIGNodW5rKHMpCisgICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0IHsj
dGV4dH0gYXQgKDAsLTMpIHNpemUgNDB4MworICAgICAgICBjaHVuayAxIHRleHQgcnVuIDEgYXQg
KDAuMDAsMC4wMCkgc3RhcnRPZmZzZXQgMCBlbmRPZmZzZXQgMSB3aWR0aCA0MC4wMDogIlgiCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2ZvbnQuc3ZnCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tc3ZnZm9udC5zdmcJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2Zv
bnQuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAi
Pz4KKzw/eG1sLXN0eWxlc2hlZXQgaHJlZj0iZGF0YTp0ZXh0L2Nzcyx0ZXh0JTdCZm9udC1mYW1p
bHklM0FBQ0lEM3N2Z2ZvbnQlN0QiPz4KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9
IjEwMCIgaGVpZ2h0PSIxMDAiPgorICAgIDxkZWZzPgorICAgICAgICA8Zm9udC1mYWNlIGZvbnQt
ZmFtaWx5PSJBQ0lEM3N2Z2ZvbnQiPgorICAgICAgICAgICAgPGZvbnQtZmFjZS1zcmM+CisgICAg
ICAgICAgICAgICAgPGZvbnQtZmFjZS11cmkgeGxpbms6aHJlZj0iLi4vLi4vLi4vc3ZnL2N1c3Rv
bS9yZXNvdXJjZXMvQWNpZDNGb250LnN2ZyNtaW5pIi8+CisgICAgICAgICAgICA8L2ZvbnQtZmFj
ZS1zcmM+CisgICAgICAgIDwvZm9udC1mYWNlPgorICAgICAgICA8cGF0aCBpZD0icGF0aCIgZD0i
TTAgMGwwIDQybDE2IDE2bDQ3MTEgMCIvPgorICAgIDwvZGVmcz4KKyAgICA8dGV4dD5YPC90ZXh0
PgorPC9zdmc+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44890</attachid>
            <date>2009-12-15 11:26:53 -0800</date>
            <delta_ts>2009-12-15 11:42:12 -0800</delta_ts>
            <desc>minor changes, isId only</desc>
            <filename>bug5578_5.patch</filename>
            <type>text/plain</type>
            <size>54901</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODkgQEAKKzIwMDktMTItMTQgIFNodSBDaGFuZyAgPENoYW5nLlNodUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50ZWQgaXNJZCBhcyBzcGVjaWZpZWQgYnkgRE9NIExldmVsIDMuIFNlZSBkZXRhaWxlZCBk
ZXNjcmlwdGlvbiBiZWxvdy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU1NzgKKworICAgICAgICBBZGRlZCBpc0lkIHByb3BlcnR5IGFuZCBpbXBsZW1l
bnRhdGlvbjoKKyAgICAgICAgVGVzdHM6IGRvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDAx
LTA3LnhodG1sCisgICAgICAgICAgICAgICBmYXN0L2RvbS9FbGVtZW50L2F0dHJpc2lkLWV4dHJh
MDEuaHRtbAorICAgICAgICAqIGRvbS9BdHRyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF0dHI6
OmlzSWQpOgorICAgICAgICAqIGRvbS9BdHRyLmg6CisgICAgICAgICogZG9tL0F0dHIuaWRsOgor
CisgICAgICAgIFJlcGxhY2VkIGluc3RhbmNlcyBvZiBIVE1MTmFtZXM6OmlkQXR0ciB3aXRoIEVs
ZW1lbnQ6OmlkQXR0cmlidXRlTmFtZSgpCisgICAgICAgIGZvciB0aGUgcmVhc29uIHRoYXQgaWQg
YXR0cmlidXRlIG5hbWUgY291bGQgYmUgY3VzdG9taXplZCB0byBhIGRpZmZlcmVudAorICAgICAg
ICBzdHJpbmcgb3RoZXIgdGhhbiAiaWQiLiBBIHRlc3QgY2FzZSBpcyBhc3NvY2lhdGVkIHRvIGVh
Y2ggY29kZSBjaGFuZ2UuCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpnZXRFbGVtZW50QnlJZCk6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQv
aWQtaW4tZ2V0ZWxlbWVudDAxLmh0bWwKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6IFRlc3Rz
OiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwMS0wNy54aHRtbAorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OnNldEF0dHJpYnV0ZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjppbnNlcnRlZElu
dG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbURvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmZvcm1hdEZvckRlYnVnZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJhcmVJREF0dHJpYnV0ZU5hbWUpOgorICAgICAgICAq
IGRvbS9FbGVtZW50Lmg6IEFkZGVkIGZ1bmN0aW9uIGlkQXR0cmlidXRlTmFtZSgpLgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6aWRBdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgKiBkb20vRWxl
bWVudFJhcmVEYXRhLmg6IEFkZGVkIG1lbWJlciB2YXJpYWJsZSB0byBzdG9yZSBjdXN0b21pemVk
IGlkIG5hbWUgaW4gRWxlbWVudFJhcmVEYXRhLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJh
cmVEYXRhOjpFbGVtZW50UmFyZURhdGEpOgorICAgICAgICAqIGRvbS9OYW1lZEF0dHJNYXAuY3Bw
OiBUZXN0czogZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDEtMDcueGh0bWwKKyAgICAg
ICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok5h
bWVkTm9kZU1hcDo6c2V0QXR0cmlidXRlcyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOiBSZW1v
dmVkIEFTU0VSVCBhcyBpdCBtYXkgbm90IGhvbGQgYW55IG1vcmUuCisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpxdWVyeVNlbGVjdG9yKToKKyAgICAgICAgKiBkb20vU2VsZWN0b3JOb2RlTGlzdC5j
cHA6IFJlbW92ZWQgQVNTRVJUIGFzIGl0IG1heSBub3QgaG9sZCBhbnkgbW9yZS4KKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZVNlbGVjdG9yTm9kZUxpc3QpOgorICAgICAgICAqIGRvbS9TdHlsZWRF
bGVtZW50LmNwcDogVGVzdHM6IGRvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDAxLTA3Lnho
dG1sCisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZSk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcDogVGVzdDog
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1kZWxldGVidXR0b24uaHRtbAorICAgICAgICAoV2ViQ29y
ZTo6RGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6Y3JlYXRlRGVsZXRpb25VSSk6CisgICAgICAgICog
ZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1p
bnNlcnQtaHIuaHRtbAorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZUluc2VydEhvcml6b250YWxS
dWxlKToKKyAgICAgICAgKiBodG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcDogVGVzdDogZmFzdC9k
b20vRWxlbWVudC9pZC1pbi1hcHBsZXQuaHRtbAorICAgICAgICAoV2ViQ29yZTo6SFRNTEFwcGxl
dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxB
cHBsZXRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogaHRtbC9IVE1MQ29sbGVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6Y2hlY2tGb3JOYW1l
TWF0Y2gpOiBUZXN0OiBmYXN0L2Zvcm1zL3NlbGVjdC1uYW1lZEl0ZW0uaHRtbAorICAgICAgICAo
V2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6IFRlc3Q6IGZhc3QvZG9t
L2NvbGxlY3Rpb24tbmFtZWRJdGVtLXZpYS1pdGVtLmh0bWwKKyAgICAgICAgKiBodG1sL0hUTUxE
YXRhR3JpZENvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERhdGFHcmlkQ29s
RWxlbWVudDo6ZW5zdXJlQ29sdW1uKTogVGVzdDogZmFzdC9kb20vSFRNTERhdGFHcmlkRWxlbWVu
dC9EYXRhR3JpZENvbHVtbnMtZG9tLmh0bWwKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEYXRhR3Jp
ZENvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogVGVzdDogZmFzdC9kb20vSFRNTERh
dGFHcmlkRWxlbWVudC9EYXRhR3JpZENvbHVtbnMtZG9tLWF0dHJpYnV0ZXMuaHRtbAorICAgICAg
ICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29sbGVjdGlv
bi5jcHA6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZm9ybWNvbGxlY3Rpb24uaHRtbAor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db2xsZWN0aW9uOjpnZXROYW1lZEZvcm1JdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVjdGlvbjo6bmV4dE5hbWVkSXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6IFRlc3Q6IGZhc3QvZG9tL0Vs
ZW1lbnQvaWQtaW4tZnJhbWUuaHRtbAorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVu
dEJhc2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFt
ZUVsZW1lbnRCYXNlOjpzZXROYW1lQW5kT3BlblVSTCk6CisgICAgICAgICogaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1kZWxldGVidXR0b24u
aHRtbAorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuY3BwOiBUZXN0OiBmYXN0L2Rv
bS9FbGVtZW50L2lkLWluLW1hcC5odG1sCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE5hbWVDb2xsZWN0
aW9uLmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZXNldC5odG1sCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTmFtZUNvbGxlY3Rpb246Oml0ZW1BZnRlcik6CisgICAgICAgICog
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6IFRlc3Q6IGZhc3QvZG9tL0hUTUxEb2N1bWVudC9v
YmplY3QtYnktbmFtZS1vci1pZC5odG1sCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTFBhcmFtRWxl
bWVudC5jcHA6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tcGFyYW0uaHRtbAorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFBhcmFtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAqIGxvYWRlci9DYWNoZWRGb250LmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1p
bi1zdmdmb250LnN2ZworICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkRm9udDo6Z2V0U1ZHRm9udEJ5
SWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjcmVhdGVHcmFwaGljc0xheWVyKTogRGVi
dWctb25seSBjb2RlCisgICAgICAgICogcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
OiBUZXN0OiBzdmcvdGV4dC90ZXh0LWdyYWRpZW50LXBvc2l0aW9uaW5nLnN2ZworICAgICAgICAo
V2ViQ29yZTo6d3JpdGVSZW5kZXJSZXNvdXJjZXMpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50
LmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1zdmdmb250LnN2ZworICAgICAgICAo
V2ViQ29yZTo6U1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAgICAqIHN2
Zy9TVkdTdHlsZWRFbGVtZW50LmNwcDogVGVzdDogc3ZnL2N1c3RvbS9qcy11cGRhdGUtaW1hZ2Ut
YW5kLWRpc3BsYXkuc3ZnCisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50Ojppc0tu
b3duQXR0cmlidXRlKToKKyAgICAgICAgKiB3bWwvV01MRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisKIDIwMDktMTItMTQg
IEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgUXVhcnR6Q29y
ZS1yZWxhdGVkIGJ1aWxkIHNldHRpbmdzIGludG8gYSB2c3Byb3BzIGZpbGUKSW5kZXg6IFdlYkNv
cmUvZG9tL0F0dHIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0F0dHIuY3BwCShyZXZp
c2lvbiA1MjA5MikKKysrIFdlYkNvcmUvZG9tL0F0dHIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjQsNCArMTY0LDkgQEAgdm9pZCBBdHRyOjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQgog
ICAgICAgICBtX2VsZW1lbnQtPmF0dHJpYnV0ZUNoYW5nZWQobV9hdHRyaWJ1dGUuZ2V0KCkpOwog
fQogCitib29sIEF0dHI6OmlzSWQoKSBjb25zdAoreworICAgIHJldHVybiBxdWFsaWZpZWROYW1l
KCkubWF0Y2hlcyhtX2VsZW1lbnQgPyBtX2VsZW1lbnQtPmlkQXR0cmlidXRlTmFtZSgpIDogSFRN
TE5hbWVzOjppZEF0dHIpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9BdHRyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vQXR0ci5oCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUv
ZG9tL0F0dHIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOCBAQCBwdWJsaWM6CiAgICAg
QXR0cmlidXRlKiBhdHRyKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGUuZ2V0KCk7IH0KICAg
ICBjb25zdCBRdWFsaWZpZWROYW1lJiBxdWFsaWZpZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9h
dHRyaWJ1dGUtPm5hbWUoKTsgfQogCisgICAgYm9vbCBpc0lkKCkgY29uc3Q7CisKICAgICAvLyBB
biBleHRlbnNpb24gdG8gZ2V0IHByZXNlbnRhdGlvbmFsIGluZm9ybWF0aW9uIGZvciBhdHRyaWJ1
dGVzLgogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgeyByZXR1cm4gbV9hdHRyaWJ1
dGUtPnN0eWxlKCk7IH0KIApJbmRleDogV2ViQ29yZS9kb20vQXR0ci5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vQXR0ci5pZGwJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9kb20v
QXR0ci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDExIEBAIG1vZHVsZSBjb3JlIHsK
ICAgICAgICAgLy8gRE9NIExldmVsIDIKIAogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRWxl
bWVudCBvd25lckVsZW1lbnQ7Ci0gICAgICAgIAorCisgICAgICAgIC8vIERPTSBMZXZlbCAzCisK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gaXNJZDsKKwogICAgICAgICAvLyBl
eHRlbnNpb25zCiAjaWYgIWRlZmluZWQoTEFOR1VBR0VfQ09NKSB8fCAhTEFOR1VBR0VfQ09NCiAg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDU1NTdHlsZURlY2xhcmF0aW9uIHN0eWxlOwpJbmRl
eDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg1Niw3ICs4NTYsNyBAQCBFbGVtZW50KiBEb2N1bWVudDo6Z2V0
RWxlbWVudEJ5SWQoY29uc3QgCiAgICAgICAgIGZvciAoTm9kZSAqbiA9IHRyYXZlcnNlTmV4dE5v
ZGUoKTsgbiAhPSAwOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICBp
ZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudCA9IHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzSUQo
KSAmJiBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBlbGVtZW50SWQpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5nZXRBdHRyaWJ1dGUo
ZWxlbWVudC0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IGVsZW1lbnRJZCkgewogICAgICAgICAgICAg
ICAgICAgICBtX2R1cGxpY2F0ZUlkcy5yZW1vdmUoZWxlbWVudElkLmltcGwoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIG1fZWxlbWVudHNCeUlkLnNldChlbGVtZW50SWQuaW1wbCgpLCBlbGVtZW50
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CkluZGV4OiBXZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2
aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTMyLDcgKzUzMiw3IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IEF0b21p
Y1MKIAogICAgIGRvY3VtZW50KCktPmluY0RPTVRyZWVWZXJzaW9uKCk7CiAKLSAgICBpZiAobG9j
YWxOYW1lID09IGlkQXR0ci5sb2NhbE5hbWUoKSkKKyAgICBpZiAobG9jYWxOYW1lID09IGlkQXR0
cmlidXRlTmFtZSgpLmxvY2FsTmFtZSgpKQogICAgICAgICB1cGRhdGVJZChvbGQgPyBvbGQtPnZh
bHVlKCkgOiBudWxsQXRvbSwgdmFsdWUpOwogICAgIAogICAgIGlmIChvbGQgJiYgdmFsdWUuaXNO
dWxsKCkpCkBAIC01NTIsNyArNTUyLDcgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaQogICAgIC8vIGFsbG9jYXRlIGF0dHJpYnV0ZW1hcCBpZiBuZWNlc3NhcnkKICAg
ICBBdHRyaWJ1dGUqIG9sZCA9IGF0dHJpYnV0ZXMoZmFsc2UpLT5nZXRBdHRyaWJ1dGVJdGVtKG5h
bWUpOwogCi0gICAgaWYgKG5hbWUgPT0gaWRBdHRyKQorICAgIGlmIChuYW1lID09IGlkQXR0cmli
dXRlTmFtZSgpKQogICAgICAgICB1cGRhdGVJZChvbGQgPyBvbGQtPnZhbHVlKCkgOiBudWxsQXRv
bSwgdmFsdWUpOwogICAgIAogICAgIGlmIChvbGQgJiYgdmFsdWUuaXNOdWxsKCkpCkBAIC02MDcs
OCArNjA3LDkgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGVNYXAoUGFzc1JlZlB0cgogCiAg
ICAgLy8gSWYgc2V0dGluZyB0aGUgd2hvbGUgbWFwIGNoYW5nZXMgdGhlIGlkIGF0dHJpYnV0ZSwg
d2UgbmVlZCB0byBjYWxsIHVwZGF0ZUlkLgogCi0gICAgQXR0cmlidXRlKiBvbGRJZCA9IG5hbWVk
QXR0ck1hcCA/IG5hbWVkQXR0ck1hcC0+Z2V0QXR0cmlidXRlSXRlbShpZEF0dHIpIDogMDsKLSAg
ICBBdHRyaWJ1dGUqIG5ld0lkID0gbGlzdCA/IGxpc3QtPmdldEF0dHJpYnV0ZUl0ZW0oaWRBdHRy
KSA6IDA7CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgaWROYW1lID0gaWRBdHRyaWJ1dGVOYW1l
KCk7CisgICAgQXR0cmlidXRlKiBvbGRJZCA9IG5hbWVkQXR0ck1hcCA/IG5hbWVkQXR0ck1hcC0+
Z2V0QXR0cmlidXRlSXRlbShpZE5hbWUpIDogMDsKKyAgICBBdHRyaWJ1dGUqIG5ld0lkID0gbGlz
dCA/IGxpc3QtPmdldEF0dHJpYnV0ZUl0ZW0oaWROYW1lKSA6IDA7CiAKICAgICBpZiAob2xkSWQg
fHwgbmV3SWQpCiAgICAgICAgIHVwZGF0ZUlkKG9sZElkID8gb2xkSWQtPnZhbHVlKCkgOiBudWxs
QXRvbSwgbmV3SWQgPyBuZXdJZC0+dmFsdWUoKSA6IG51bGxBdG9tKTsKQEAgLTcxMyw3ICs3MTQs
NyBAQCB2b2lkIEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIAogICAgIGlmIChoYXNJ
RCgpKSB7CiAgICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gbmFtZWRBdHRyTWFwLmdl
dCgpKSB7Ci0gICAgICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IGF0dHJzLT5nZXRBdHRyaWJ1
dGVJdGVtKGlkQXR0cik7CisgICAgICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IGF0dHJzLT5n
ZXRBdHRyaWJ1dGVJdGVtKGlkQXR0cmlidXRlTmFtZSgpKTsKICAgICAgICAgICAgIGlmIChpZEl0
ZW0gJiYgIWlkSXRlbS0+aXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgdXBkYXRlSWQobnVsbEF0
b20sIGlkSXRlbS0+dmFsdWUoKSk7CiAgICAgICAgIH0KQEAgLTcyNCw3ICs3MjUsNyBAQCB2b2lk
IEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQogewogICAgIGlmIChoYXNJRCgpKSB7CiAg
ICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gbmFtZWRBdHRyTWFwLmdldCgpKSB7Ci0g
ICAgICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IGF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKGlk
QXR0cik7CisgICAgICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IGF0dHJzLT5nZXRBdHRyaWJ1
dGVJdGVtKGlkQXR0cmlidXRlTmFtZSgpKTsKICAgICAgICAgICAgIGlmIChpZEl0ZW0gJiYgIWlk
SXRlbS0+aXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgdXBkYXRlSWQoaWRJdGVtLT52YWx1ZSgp
LCBudWxsQXRvbSk7CiAgICAgICAgIH0KQEAgLTEwNzMsNyArMTA3NCw3IEBAIHZvaWQgRWxlbWVu
dDo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnUKICAgICAgICAgcmVzdWx0ICs9IHM7CiAgICAg
fQogICAgICAgICAgIAotICAgIHMgPSBnZXRBdHRyaWJ1dGUoaWRBdHRyKTsKKyAgICBzID0gZ2V0
QXR0cmlidXRlKGlkQXR0cmlidXRlTmFtZSgpKTsKICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsK
ICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSA+IDApCiAgICAgICAgICAgICByZXN1bHQgKz0g
IjsgIjsKQEAgLTE0MzIsNCArMTQzMyw5IEBAIEtVUkwgRWxlbWVudDo6Z2V0VVJMQXR0cmlidXRl
KGNvbnN0IFF1YWwKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZGVwcmVjYXRl
ZFBhcnNlVVJMKGdldEF0dHJpYnV0ZShuYW1lKSkpOwogfQogCitjb25zdCBRdWFsaWZpZWROYW1l
JiBFbGVtZW50OjpyYXJlSURBdHRyaWJ1dGVOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmFy
ZURhdGEoKS0+bV9pZEF0dHJpYnV0ZU5hbWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9F
bGVtZW50LmgJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjZGVmaW5lIEVsZW1lbnRfaAogCiAjaW5jbHVk
ZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlF1
YWxpZmllZE5hbWUuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogCkBAIC0xMTEsNiArMTEy
LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZv
aWQgc2V0QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0
IEF0b21pY1N0cmluZyYgcXVhbGlmaWVkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwg
RXhjZXB0aW9uQ29kZSYpOwogCisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgaWRBdHRyaWJ1dGVO
YW1lKCkgY29uc3Q7CisKICAgICB2b2lkIHNjcm9sbEludG9WaWV3KGJvb2wgYWxpZ25Ub1RvcCA9
IHRydWUpOwogICAgIHZvaWQgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChib29sIGNlbnRlcklmTmVl
ZGVkID0gdHJ1ZSk7CiAKQEAgLTI4Miw2ICsyODUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCBjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlKTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxBdHRyaWJ1dGU+IGNyZWF0ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSk7CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgcmFyZUlEQXR0
cmlidXRlTmFtZSgpIGNvbnN0OwogICAgIAogI2lmbmRlZiBOREVCVUcKICAgICB2aXJ0dWFsIHZv
aWQgZm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0
OwpAQCAtMzM5LDYgKzM0MywxMSBAQCBpbmxpbmUgRWxlbWVudCogTm9kZTo6cGFyZW50RWxlbWVu
dCgpIGNvCiAgICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSA/IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihwYXJlbnQpIDogMDsKIH0KIAoraW5saW5lIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIEVsZW1lbnQ6OmlkQXR0cmlidXRlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGhhc1JhcmVEYXRhKCkgPyByYXJlSURBdHRyaWJ1dGVOYW1lKCkgOiBIVE1MTmFtZXM6OmlkQXR0
cjsKK30KKwogfSAvL25hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1l
bnRSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5o
CShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIHB1YmxpYzoKIAogICAgIEludFNpemUgbV9taW5p
bXVtU2l6ZUZvclJlc2l6aW5nOwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9jb21wdXRlZFN0
eWxlOworICAgIFF1YWxpZmllZE5hbWUgbV9pZEF0dHJpYnV0ZU5hbWU7CiB9OwogCiBpbmxpbmUg
SW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpCkBAIC00Nyw2ICs0OCw3IEBA
IGlubGluZSBJbnRTaXplIGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2kKIAogaW5saW5lIEVsZW1l
bnRSYXJlRGF0YTo6RWxlbWVudFJhcmVEYXRhKCkKICAgICA6IG1fbWluaW11bVNpemVGb3JSZXNp
emluZyhkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpKQorICAgICwgbV9pZEF0dHJpYnV0
ZU5hbWUoSFRNTE5hbWVzOjppZEF0dHIpCiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL05hbWVk
QXR0ck1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmNwcAko
cmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6
OnNldE5hbWVkSQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpZiAoYS0+bmFtZSgp
ID09IGlkQXR0cikKKyAgICBpZiAoYXR0ci0+aXNJZCgpKQogICAgICAgICBtX2VsZW1lbnQtPnVw
ZGF0ZUlkKG9sZCA/IG9sZC0+dmFsdWUoKSA6IG51bGxBdG9tLCBhLT52YWx1ZSgpKTsKIAogICAg
IC8vICMjIyBzbGlnaHRseSBpbmVmZmljaWVudCAtIHJlc2l6ZXMgYXR0cmlidXRlIGFycmF5IHR3
aWNlLgpAQCAtMTU1LDkgKzE1NSw5IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFwOjpy
ZW1vdmVOYW0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgUmVmUHRyPE5vZGU+IHIg
PSBhLT5jcmVhdGVBdHRySWZOZWVkZWQobV9lbGVtZW50KTsKKyAgICBSZWZQdHI8QXR0cj4gciA9
IGEtPmNyZWF0ZUF0dHJJZk5lZWRlZChtX2VsZW1lbnQpOwogCi0gICAgaWYgKG5hbWUgPT0gaWRB
dHRyKQorICAgIGlmIChyLT5pc0lkKCkpCiAgICAgICAgIG1fZWxlbWVudC0+dXBkYXRlSWQoYS0+
dmFsdWUoKSwgbnVsbEF0b20pOwogCiAgICAgcmVtb3ZlQXR0cmlidXRlKG5hbWUpOwpAQCAtMjQy
LDggKzI0Miw4IEBAIHZvaWQgTmFtZWROb2RlTWFwOjpzZXRBdHRyaWJ1dGVzKGNvbnN0IE4KIAog
ICAgIC8vIElmIGFzc2lnbmluZyB0aGUgbWFwIGNoYW5nZXMgdGhlIGlkIGF0dHJpYnV0ZSwgd2Ug
bmVlZCB0byBjYWxsCiAgICAgLy8gdXBkYXRlSWQuCi0gICAgQXR0cmlidXRlICpvbGRJZCA9IGdl
dEF0dHJpYnV0ZUl0ZW0oaWRBdHRyKTsKLSAgICBBdHRyaWJ1dGUgKm5ld0lkID0gb3RoZXIuZ2V0
QXR0cmlidXRlSXRlbShpZEF0dHIpOworICAgIEF0dHJpYnV0ZSAqb2xkSWQgPSBnZXRBdHRyaWJ1
dGVJdGVtKG1fZWxlbWVudC0+aWRBdHRyaWJ1dGVOYW1lKCkpOworICAgIEF0dHJpYnV0ZSAqbmV3
SWQgPSBvdGhlci5nZXRBdHRyaWJ1dGVJdGVtKG1fZWxlbWVudC0+aWRBdHRyaWJ1dGVOYW1lKCkp
OwogCiAgICAgaWYgKG9sZElkIHx8IG5ld0lkKQogICAgICAgICBtX2VsZW1lbnQtPnVwZGF0ZUlk
KG9sZElkID8gb2xkSWQtPnZhbHVlKCkgOiBudWxsQXRvbSwgbmV3SWQgPyBuZXdJZC0+dmFsdWUo
KSA6IG51bGxBdG9tKTsKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvZG9tL05v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUyLDcgKzE2NTIsNiBAQCBQYXNzUmVmUHRyPEVs
ZW1lbnQ+IE5vZGU6OnF1ZXJ5U2VsZWN0b3IoCiAKICAgICAvLyBGSVhNRTogd2UgY291bGQgYWxz
byBvcHRpbWl6ZSBmb3IgdGhlIHRoZSBbaWQ9ImZvbyJdIGNhc2UKICAgICBpZiAoc3RyaWN0UGFy
c2luZyAmJiBpbkRvY3VtZW50KCkgJiYgcXVlcnlTZWxlY3Rvckxpc3QuaGFzT25lU2VsZWN0b3Io
KSAmJiBxdWVyeVNlbGVjdG9yTGlzdC5maXJzdCgpLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJ
ZCkgewotICAgICAgICBBU1NFUlQocXVlcnlTZWxlY3Rvckxpc3QuZmlyc3QoKS0+YXR0cmlidXRl
KCkgPT0gaWRBdHRyKTsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50KCktPmdl
dEVsZW1lbnRCeUlkKHF1ZXJ5U2VsZWN0b3JMaXN0LmZpcnN0KCktPm1fdmFsdWUpOwogICAgICAg
ICBpZiAoZWxlbWVudCAmJiAoaXNEb2N1bWVudE5vZGUoKSB8fCBlbGVtZW50LT5pc0Rlc2NlbmRh
bnRPZih0aGlzKSkgJiYgc2VsZWN0b3JDaGVja2VyLmNoZWNrU2VsZWN0b3IocXVlcnlTZWxlY3Rv
ckxpc3QuZmlyc3QoKSwgZWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKSW5k
ZXg6IFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUv
ZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw2IEBA
IFBhc3NSZWZQdHI8U3RhdGljTm9kZUxpc3Q+IGNyZWF0ZVNlbGVjdG8KICAgICBDU1NTdHlsZVNl
bGVjdG9yOjpTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGRvY3VtZW50LCBzdHJpY3RQ
YXJzaW5nKTsKIAogICAgIGlmIChzdHJpY3RQYXJzaW5nICYmIHJvb3ROb2RlLT5pbkRvY3VtZW50
KCkgJiYgb25seVNlbGVjdG9yICYmIG9ubHlTZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6SWQgJiYgIWRvY3VtZW50LT5jb250YWluc011bHRpcGxlRWxlbWVudHNXaXRoSWQob25seVNl
bGVjdG9yLT5tX3ZhbHVlKSkgewotICAgICAgICBBU1NFUlQocXVlcnlTZWxlY3Rvckxpc3QuZmly
c3QoKS0+YXR0cmlidXRlKCkgPT0gaWRBdHRyKTsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9
IGRvY3VtZW50LT5nZXRFbGVtZW50QnlJZChvbmx5U2VsZWN0b3ItPm1fdmFsdWUpOwogICAgICAg
ICBpZiAoZWxlbWVudCAmJiAocm9vdE5vZGUtPmlzRG9jdW1lbnROb2RlKCkgfHwgZWxlbWVudC0+
aXNEZXNjZW5kYW50T2Yocm9vdE5vZGUpKSAmJiBzZWxlY3RvckNoZWNrZXIuY2hlY2tTZWxlY3Rv
cihvbmx5U2VsZWN0b3IsIGVsZW1lbnQpKQogICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGVsZW1l
bnQpOwpJbmRleDogV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29y
ZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw3ICsyMzQsNyBA
QCB2b2lkIFN0eWxlZEVsZW1lbnQ6OmNsYXNzQXR0cmlidXRlQ2hhbmdlCiAKIHZvaWQgU3R5bGVk
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewot
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyKSB7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBpZEF0dHJpYnV0ZU5hbWUoKSkgewogICAgICAgICAvLyB1bmlxdWUgaWQKICAgICAgICAgc2V0
SGFzSUQoIWF0dHItPmlzTnVsbCgpKTsKICAgICAgICAgaWYgKG5hbWVkQXR0ck1hcCkgewpJbmRl
eDogV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAkocmV2aXNpb24g
NTIwOTIpCisrKyBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xs
ZXI6OnJlc3BvbmRUb0NoCiB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OmNyZWF0ZURlbGV0
aW9uVUkoKQogewogICAgIFJlZlB0cjxIVE1MRGl2RWxlbWVudD4gY29udGFpbmVyID0gbmV3IEhU
TUxEaXZFbGVtZW50KGRpdlRhZywgbV90YXJnZXQtPmRvY3VtZW50KCkpOwotICAgIGNvbnRhaW5l
ci0+c2V0QXR0cmlidXRlKGlkQXR0ciwgY29udGFpbmVyRWxlbWVudElkZW50aWZpZXIpOworICAg
IGNvbnRhaW5lci0+c2V0QXR0cmlidXRlKGNvbnRhaW5lci0+aWRBdHRyaWJ1dGVOYW1lKCksIGNv
bnRhaW5lckVsZW1lbnRJZGVudGlmaWVyKTsKIAogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSA9IGNvbnRhaW5lci0+Z2V0SW5saW5lU3R5bGVEZWNsKCk7CiAgICAgc3R5bGUt
PnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWcsIENTU1ZhbHVlTm9uZSk7CkBA
IC0yMDIsNyArMjAyLDcgQEAgdm9pZCBEZWxldGVCdXR0b25Db250cm9sbGVyOjpjcmVhdGVEZWxl
dAogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsICIwIik7CiAKICAgICBS
ZWZQdHI8SFRNTERpdkVsZW1lbnQ+IG91dGxpbmUgPSBuZXcgSFRNTERpdkVsZW1lbnQoZGl2VGFn
LCBtX3RhcmdldC0+ZG9jdW1lbnQoKSk7Ci0gICAgb3V0bGluZS0+c2V0QXR0cmlidXRlKGlkQXR0
ciwgb3V0bGluZUVsZW1lbnRJZGVudGlmaWVyKTsKKyAgICBvdXRsaW5lLT5zZXRBdHRyaWJ1dGUo
b3V0bGluZS0+aWRBdHRyaWJ1dGVOYW1lKCksIG91dGxpbmVFbGVtZW50SWRlbnRpZmllcik7CiAK
ICAgICBjb25zdCBpbnQgYm9yZGVyV2lkdGggPSA0OwogICAgIGNvbnN0IGludCBib3JkZXJSYWRp
dXMgPSA2OwpAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6
Y3JlYXRlRGVsZXQKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPERlbGV0ZUJ1dHRvbj4g
YnV0dG9uID0gbmV3IERlbGV0ZUJ1dHRvbihtX3RhcmdldC0+ZG9jdW1lbnQoKSk7Ci0gICAgYnV0
dG9uLT5zZXRBdHRyaWJ1dGUoaWRBdHRyLCBidXR0b25FbGVtZW50SWRlbnRpZmllcik7CisgICAg
YnV0dG9uLT5zZXRBdHRyaWJ1dGUoYnV0dG9uLT5pZEF0dHJpYnV0ZU5hbWUoKSwgYnV0dG9uRWxl
bWVudElkZW50aWZpZXIpOwogCiAgICAgY29uc3QgaW50IGJ1dHRvbldpZHRoID0gMzA7CiAgICAg
Y29uc3QgaW50IGJ1dHRvbkhlaWdodCA9IDMwOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5k
LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MSw3ICs0NzEsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRl
SW5zZXJ0SG9yaXpvbnRhbFJ1bGUoCiB7CiAgICAgUmVmUHRyPEhUTUxIUkVsZW1lbnQ+IGhyID0g
bmV3IEhUTUxIUkVsZW1lbnQoaHJUYWcsIGZyYW1lLT5kb2N1bWVudCgpKTsKICAgICBpZiAoIXZh
bHVlLmlzRW1wdHkoKSkKLSAgICAgICAgaHItPnNldEF0dHJpYnV0ZShpZEF0dHIsIHZhbHVlKTsK
KyAgICAgICAgaHItPnNldEF0dHJpYnV0ZShoci0+aWRBdHRyaWJ1dGVOYW1lKCksIHZhbHVlKTsK
ICAgICByZXR1cm4gZXhlY3V0ZUluc2VydE5vZGUoZnJhbWUsIGhyLnJlbGVhc2UoKSk7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3
ICs2Myw3IEBAIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAg
ICAgICAgIGRvY3VtZW50LT5hZGROYW1lZEl0ZW0obmV3TmFtZSk7CiAgICAgICAgIH0KICAgICAg
ICAgbV9uYW1lID0gbmV3TmFtZTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0
dHIpIHsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSkg
ewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkID0gYXR0ci0+dmFsdWUoKTsKICAg
ICAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7
CiAgICAgICAgICAgICBIVE1MRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTERv
Y3VtZW50Kj4odGhpcy0+ZG9jdW1lbnQoKSk7CkBAIC0xMTgsNyArMTE4LDcgQEAgUmVuZGVyT2Jq
ZWN0KiBIVE1MQXBwbGV0RWxlbWVudDo6Y3JlYXRlUgogICAgICAgICBpZiAoIWNvZGVCYXNlLmlz
TnVsbCgpKQogICAgICAgICAgICAgYXJncy5zZXQoImNvZGVCYXNlIiwgY29kZUJhc2UpOwogCi0g
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGdldEF0dHJpYnV0ZShkb2N1bWVudCgp
LT5pc0hUTUxEb2N1bWVudCgpID8gbmFtZUF0dHIgOiBpZEF0dHIpOworICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUgPSBnZXRBdHRyaWJ1dGUoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1l
bnQoKSA/IG5hbWVBdHRyIDogaWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgICAgICBpZiAoIW5hbWUu
aXNOdWxsKCkpCiAgICAgICAgICAgICBhcmdzLnNldCgibmFtZSIsIG5hbWUpOwogICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGFyY2hpdmUgPSBnZXRBdHRyaWJ1dGUoYXJjaGl2ZUF0dHIpOwpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUv
aHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw3ICsyNjYsNyBA
QCBib29sIEhUTUxDb2xsZWN0aW9uOjpjaGVja0Zvck5hbWVNYXRjaChFCiAgICAgCiAgICAgSFRN
TEVsZW1lbnQqIGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGVsZW1lbnQpOwogICAgIGlm
ICghY2hlY2tOYW1lKQotICAgICAgICByZXR1cm4gZS0+Z2V0QXR0cmlidXRlKGlkQXR0cikgPT0g
bmFtZTsKKyAgICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShlLT5pZEF0dHJpYnV0ZU5hbWUo
KSkgPT0gbmFtZTsKIAogICAgIC8vIGRvY3VtZW50LmFsbCByZXR1cm5zIG9ubHkgaW1hZ2VzLCBm
b3JtcywgYXBwbGV0cywgb2JqZWN0cyBhbmQgZW1iZWRzCiAgICAgLy8gYnkgbmFtZSAodGhvdWdo
IGV2ZXJ5dGhpbmcgYnkgaWQpCkBAIC0yNzcsNyArMjc3LDcgQEAgYm9vbCBIVE1MQ29sbGVjdGlv
bjo6Y2hlY2tGb3JOYW1lTWF0Y2goRQogICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShzZWxlY3RU
YWcpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0
ZShuYW1lQXR0cikgPT0gbmFtZSAmJiBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSAhPSBuYW1lOwor
ICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG5hbWUgJiYgZS0+Z2V0QXR0
cmlidXRlKGUtPmlkQXR0cmlidXRlTmFtZSgpKSAhPSBuYW1lOwogfQogCiBOb2RlKiBIVE1MQ29s
bGVjdGlvbjo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKQEAgLTMx
OSw3ICszMTksNyBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUoKSBjCiAg
ICAgICAgIGlmICghZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihl
bGVtZW50KTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRB
dHRyaWJ1dGUoaWRBdHRyKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwg
PSBlLT5nZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKICAg
ICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBhZGQgdG8g
aWQgY2FjaGUKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRGF0YUdyaWRDb2xFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTERhdGFHcmlkQ29sRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9odG1sL0hUTUxEYXRhR3JpZENvbEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgSFRNTERhdGFHcmlkQ29sRWxl
bWVudDo6ZW5zdXJlQ29sdW0KIHsKICAgICBpZiAobV9jb2x1bW4pCiAgICAgICAgIHJldHVybjsK
LSAgICBtX2NvbHVtbiA9IERhdGFHcmlkQ29sdW1uOjpjcmVhdGUoZ2V0QXR0cmlidXRlKGlkQXR0
ciksIGxhYmVsKCksIHR5cGUoKSwgcHJpbWFyeSgpLCBzb3J0YWJsZSgpKTsKKyAgICBtX2NvbHVt
biA9IERhdGFHcmlkQ29sdW1uOjpjcmVhdGUoZ2V0QXR0cmlidXRlKGlkQXR0cmlidXRlTmFtZSgp
KSwgbGFiZWwoKSwgdHlwZSgpLCBwcmltYXJ5KCksIHNvcnRhYmxlKCkpOwogfQogCiB2b2lkIEhU
TUxEYXRhR3JpZENvbEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQpAQCAtMTYy
LDggKzE2Miw4IEBAIHZvaWQgSFRNTERhdGFHcmlkQ29sRWxlbWVudDo6cGFyc2VNYXBwZWQKICAg
ICAgICAgY29sdW1uKCktPnNldFNvcnRhYmxlKHNvcnRhYmxlKCkpOwogICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBzb3J0ZGlyZWN0aW9uQXR0cikKICAgICAgICAgY29sdW1uKCktPnNldFNv
cnREaXJlY3Rpb24oc29ydERpcmVjdGlvbigpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gaWRBdHRyKQotICAgICAgICBjb2x1bW4oKS0+c2V0SWQoZ2V0QXR0cmlidXRlKGlkQXR0cikp
OworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSkKKyAgICAg
ICAgY29sdW1uKCktPnNldElkKGdldEF0dHJpYnV0ZShpZEF0dHJpYnV0ZU5hbWUoKSkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9u
IDUyMDkyKQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE0LDcgKzExNCw3IEBAIGJvb2wgSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVh
bGkKICAgICAKIHZvaWQgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0ciB8fCBhdHRy
LT5uYW1lKCkgPT0gY2xhc3NBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBzdHlsZUF0dHIpCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSB8fCBhdHRyLT5uYW1lKCkgPT0g
Y2xhc3NBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBzdHlsZUF0dHIpCiAgICAgICAgIHJldHVybiBT
dHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIAogICAgIFN0cmluZyBp
bmRleHN0cmluZzsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCShyZXZpc2lv
biA1MjA5MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTAsNyArMTEwLDggQEAgRWxlbWVudCogSFRNTEZvcm1Db2xsZWN0aW9uOjpn
ZXROYW1lZEZvcgogICAgIGJvb2wgZm91bmRJbnB1dEVsZW1lbnRzID0gZmFsc2U7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0tPmZvcm1FbGVtZW50cy5zaXplKCk7ICsraSkgewog
ICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlID0gZm9ybS0+Zm9ybUVsZW1lbnRzW2ld
OwotICAgICAgICBpZiAoZS0+aXNFbnVtZXJhdGFibGUoKSAmJiBlLT5nZXRBdHRyaWJ1dGUoYXR0
ck5hbWUpID09IG5hbWUpIHsKKyAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
TmFtZSA9IChhdHRyTmFtZSA9PSBpZEF0dHIpID8gZS0+aWRBdHRyaWJ1dGVOYW1lKCkgOiBhdHRy
TmFtZTsKKyAgICAgICAgaWYgKGUtPmlzRW51bWVyYXRhYmxlKCkgJiYgZS0+Z2V0QXR0cmlidXRl
KGF0dHJpYnV0ZU5hbWUpID09IG5hbWUpIHsKICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50
cyA9IHRydWU7CiAgICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZU51bWJlcikKICAgICAgICAgICAg
ICAgICByZXR1cm4gZTsKQEAgLTEyMSw3ICsxMjIsOCBAQCBFbGVtZW50KiBIVE1MRm9ybUNvbGxl
Y3Rpb246OmdldE5hbWVkRm9yCiAgICAgaWYgKCFmb3VuZElucHV0RWxlbWVudHMpIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0tPmltZ0VsZW1lbnRzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBlID0gZm9ybS0+aW1nRWxlbWVudHNb
aV07Ci0gICAgICAgICAgICBpZiAoZS0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1lKSB7
CisgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lID0gKGF0dHJO
YW1lID09IGlkQXR0cikgPyBlLT5pZEF0dHJpYnV0ZU5hbWUoKSA6IGF0dHJOYW1lOworICAgICAg
ICAgICAgaWYgKGUtPmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA9PSBuYW1lKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGVOdW1iZXIpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlOwogICAgICAgICAgICAgICAgIC0tZHVwbGljYXRlTnVtYmVyOwpAQCAtMTcxLDEwICsx
NzMsMTAgQEAgTm9kZSogSFRNTEZvcm1Db2xsZWN0aW9uOjpuZXh0TmFtZWRJdGVtKAogICAgIC8v
IFRoZSBuZXh0TmFtZWRJdGVtSW50ZXJuYWwgZnVuY3Rpb24gY2FuIHJldHVybiB0aGUgc2FtZSBp
dGVtIHR3aWNlIGlmIGl0IGhhcwogICAgIC8vIGJvdGggYW4gaWQgYW5kIG5hbWUgdGhhdCBhcmUg
ZXF1YWwgdG8gdGhlIG5hbWUgcGFyYW1ldGVyLiBTbyB0aGlzIGZ1bmN0aW9uCiAgICAgLy8gY2hl
Y2tzIGlmIHdlIGFyZSBvbiB0aGUgbmFtZUF0dHIgaGFsZiBvZiB0aGUgaXRlcmF0aW9uIGFuZCBz
a2lwcyBvdmVyIGFueQotICAgIC8vIHRoYXQgYWxzbyBoYXZlIHRoZSBzYW1lIGlkQXR0ci4KKyAg
ICAvLyB0aGF0IGFsc28gaGF2ZSB0aGUgc2FtZSBpZEF0dHJpYnV0ZU5hbWUuCiAgICAgRWxlbWVu
dCogaW1wbCA9IG5leHROYW1lZEl0ZW1JbnRlcm5hbChuYW1lKTsKICAgICBpZiAobV9pZHNEb25l
KQotICAgICAgICB3aGlsZSAoaW1wbCAmJiBpbXBsLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBu
YW1lKQorICAgICAgICB3aGlsZSAoaW1wbCAmJiBpbXBsLT5nZXRBdHRyaWJ1dGUoaW1wbC0+aWRB
dHRyaWJ1dGVOYW1lKCkpID09IG5hbWUpCiAgICAgICAgICAgICBpbXBsID0gbmV4dE5hbWVkSXRl
bUludGVybmFsKG5hbWUpOwogICAgIHJldHVybiBpbXBsOwogfQpAQCAtMTkxLDcgKzE5Myw3IEBA
IHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZi0+Zm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqIGUgPSBmLT5mb3JtRWxlbWVudHNbaV07CiAgICAgICAgIGlm
IChlLT5pc0VudW1lcmF0YWJsZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGlkQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpOworICAgICAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVO
YW1lKCkpOwogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGUt
PmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBhZGQgdG8gaWQgY2FjaGUKQEAgLTIxOCw3ICsy
MjAsNyBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlCiAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+aW1nRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgSFRNTEltYWdlRWxlbWVudCogZSA9IGYtPmltZ0VsZW1lbnRzW2ldOwotICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpOwor
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShl
LT5pZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0
dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwogICAgICAgICBpZiAoIWlkQXR0clZh
bC5pc0VtcHR5KCkgJiYgIWZvdW5kSW5wdXRFbGVtZW50cy5jb250YWlucyhpZEF0dHJWYWwuaW1w
bCgpKSkgewogICAgICAgICAgICAgLy8gYWRkIHRvIGlkIGNhY2hlCkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9odG1s
L0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3
IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnBhcnNlTWFwcGVkQXQKIHsKICAgICBpZiAo
YXR0ci0+bmFtZSgpID09IHNyY0F0dHIpCiAgICAgICAgIHNldExvY2F0aW9uKGRlcHJlY2F0ZWRQ
YXJzZVVSTChhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlk
QXR0cikgeworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSkg
ewogICAgICAgICAvLyBJbXBvcnRhbnQgdG8gY2FsbCB0aHJvdWdoIHRvIGJhc2UgZm9yIHRoZSBp
ZCBhdHRyaWJ1dGUgc28gdGhlIGhhc0lEIGJpdCBnZXRzIHNldC4KICAgICAgICAgSFRNTEZyYW1l
T3duZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKICAgICAgICAgbV9mcmFt
ZU5hbWUgPSBhdHRyLT52YWx1ZSgpOwpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgSFRNTEZyYW1l
RWxlbWVudEJhc2U6OnNldE5hbWVBbmRPcGUKIHsKICAgICBtX2ZyYW1lTmFtZSA9IGdldEF0dHJp
YnV0ZShuYW1lQXR0cik7CiAgICAgaWYgKG1fZnJhbWVOYW1lLmlzTnVsbCgpKQotICAgICAgICBt
X2ZyYW1lTmFtZSA9IGdldEF0dHJpYnV0ZShpZEF0dHIpOworICAgICAgICBtX2ZyYW1lTmFtZSA9
IGdldEF0dHJpYnV0ZShpZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgCiAgICAgaWYgKEZyYW1lKiBw
YXJlbnRGcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIG1fZnJhbWVOYW1lID0g
cGFyZW50RnJhbWUtPnRyZWUoKS0+dW5pcXVlQ2hpbGROYW1lKG1fZnJhbWVOYW1lKTsKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcg
QEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAgICAgICAgICAg
ZG9jdW1lbnQtPmFkZE5hbWVkSXRlbShuZXdOYW1lKTsKICAgICAgICAgfQogICAgICAgICBtX25h
bWUgPSBuZXdOYW1lOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cikgewor
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cmlidXRlTmFtZSgpKSB7CiAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQgPSBhdHRyLT52YWx1ZSgpOwogICAgICAgICBp
ZiAoaW5Eb2N1bWVudCgpICYmIGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAg
ICAgICAgIEhUTUxEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQq
Pih0aGlzLT5kb2N1bWVudCgpKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkocmV2aXNp
b24gNTIwOTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OCw5ICs3OCw5IEBAIGJvb2wgSFRNTE1hcEVsZW1lbnQ6Om1hcE1vdXNlRXZlbnQo
aW50IHgKIHZvaWQgSFRNTE1hcEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0
dHItPm5hbWUoKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gaWRBdHRyIHx8IGF0dHJOYW1lID09IG5h
bWVBdHRyKSB7CisgICAgaWYgKGF0dHJOYW1lID09IGlkQXR0cmlidXRlTmFtZSgpIHx8IGF0dHJO
YW1lID09IG5hbWVBdHRyKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOwot
ICAgICAgICBpZiAoYXR0ck5hbWUgPT0gaWRBdHRyKSB7CisgICAgICAgIGlmIChhdHRyTmFtZSA9
PSBpZEF0dHJpYnV0ZU5hbWUoKSkgewogICAgICAgICAgICAgLy8gQ2FsbCBiYXNlIGNsYXNzIHNv
IHRoYXQgaGFzSUQgYml0IGdldHMgc2V0LgogICAgICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOwogICAgICAgICAgICAgaWYgKGRvYy0+aXNIVE1MRG9jdW1l
bnQoKSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiA1MjA5
MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw3ICs2Myw3IEBAIEVsZW1lbnQqIEhUTUxOYW1lQ29sbGVjdGlvbjo6aXRlbUFmdGVy
KEUKICAgICAgICAgICAgICAgICAgICAgZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQogICAgICAg
ICAgICAgICAgICAgICBpZiAoZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTsKLSAgICAgICAgICAgICAgICBpZiAoZS0+
Z2V0QXR0cmlidXRlKGlkQXR0cikgPT0gbV9uYW1lKQorICAgICAgICAgICAgICAgIGlmIChlLT5n
ZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IG1fbmFtZSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIERvY3VtZW50TmFtZWRJdGVtczoKQEAgLTc0LDE0ICs3NCwxNCBAQCBFbGVtZW50KiBIVE1M
TmFtZUNvbGxlY3Rpb246Oml0ZW1BZnRlcihFCiAgICAgICAgICAgICAgICAgICAgIGlmIChlLT5n
ZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1fbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS0+aGFzVGFnTmFtZShhcHBs
ZXRUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1dGUobmFtZUF0
dHIpID09IG1fbmFtZSB8fCBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBtX25hbWUpCisgICAg
ICAgICAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1fbmFtZSB8
fCBlLT5nZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IG1fbmFtZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
ZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoZS0+
Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUgfHwgZS0+Z2V0QXR0cmlidXRlKGlkQXR0
cikgPT0gbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiAoKGUtPmdldEF0dHJpYnV0ZShu
YW1lQXR0cikgPT0gbV9uYW1lIHx8IGUtPmdldEF0dHJpYnV0ZShlLT5pZEF0dHJpYnV0ZU5hbWUo
KSkgPT0gbV9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0
PEhUTUxPYmplY3RFbGVtZW50Kj4oZSktPmlzRG9jTmFtZWRJdGVtKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUtPmhhc1Rh
Z05hbWUoaW1nVGFnKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZS0+Z2V0QXR0cmlidXRl
KG5hbWVBdHRyKSA9PSBtX25hbWUgfHwgKGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpID09IG1fbmFt
ZSAmJiBlLT5oYXNBdHRyaWJ1dGUobmFtZUF0dHIpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9uYW1lIHx8IChlLT5nZXRBdHRyaWJ1dGUo
ZS0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IG1fbmFtZSAmJiBlLT5oYXNBdHRyaWJ1dGUobmFtZUF0
dHIpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50
LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBIVE1MT2JqZWN0RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICAgICAgZG9jdW1lbnQtPmFkZE5hbWVkSXRl
bShuZXdOYW1lKTsKICAgICAgICAgfQogICAgICAgICBtX25hbWUgPSBuZXdOYW1lOwotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IGlkQXR0cmlidXRlTmFtZSgpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmV3SWQgPSBhdHRyLT52YWx1ZSgpOwogICAgICAgICBpZiAoaXNEb2NOYW1lZEl0ZW0oKSAm
JiBpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAg
ICAgICAgSFRNTERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+
KHRoaXMtPmRvY3VtZW50KCkpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNwcAkocmV2
aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgSFRNTFBhcmFtRWxlbWVudDo6fkhUTUxQYXJhbUVs
ZW1lbnQoKQogCiB2b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cikg
eworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyaWJ1dGVOYW1lKCkpIHsKICAgICAgICAg
Ly8gTXVzdCBjYWxsIGJhc2UgY2xhc3Mgc28gdGhhdCBoYXNJRCBiaXQgZ2V0cyBzZXQuCiAgICAg
ICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKICAgICAgICAgaWYg
KGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNo
ZWRGb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250LmNwcAko
cmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBAIFNWR0ZvbnRFbGVtZW50KiBDYWNoZWRGb250Ojpn
ZXRTVkdGb250QnkKICAgICAgICAgTm9kZSogbm9kZSA9IGxpc3QtPml0ZW0oaSk7CiAgICAgICAg
IEFTU0VSVChub2RlKTsKIAotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUp
LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpICE9IGZvbnROYW1lKQorICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpLT5pZEF0dHJpYnV0ZU5hbWUoKSkgIT0gZm9udE5hbWUpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICBBU1NFUlQobm9kZS0+aGFzVGFnTmFtZShTVkdOYW1l
czo6Zm9udFRhZykpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OmNyZWF0ZUdyYXBoaWNzTAogICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5z
ZXROYW1lKCJEb2N1bWVudCBOb2RlIik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYg
KHJlbmRlcmVyKCktPm5vZGUoKS0+aXNIVE1MRWxlbWVudCgpICYmIHJlbmRlcmVyKCktPm5vZGUo
KS0+aGFzSUQoKSkKLSAgICAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldE5hbWUocmVu
ZGVyZXIoKS0+cmVuZGVyTmFtZSgpICsgU3RyaW5nKCIgIikgKyBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudCo+KHJlbmRlcmVyKCktPm5vZGUoKSktPmdldEF0dHJpYnV0ZShpZEF0dHIpKTsKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldE5hbWUocmVuZGVyZXIoKS0+cmVuZGVyTmFt
ZSgpICsgU3RyaW5nKCIgIikgKyBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KHJlbmRlcmVyKCkt
Pm5vZGUoKSktPmdldEF0dHJpYnV0ZShpZEF0dHJpYnV0ZU5hbWUoKSkpOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0TmFtZShyZW5kZXJlcigp
LT5yZW5kZXJOYW1lKCkpOwogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI1LDcgKzUyNSw3
IEBAIHZvaWQgd3JpdGVSZW5kZXJSZXNvdXJjZXMoVGV4dFN0cmVhbSYgdHMKICAgICAgICAgaWYg
KCFyZXNvdXJjZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFN0cmluZyBlbGVt
ZW50SWQgPSBzdmdFbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpOworICAg
ICAgICBTdHJpbmcgZWxlbWVudElkID0gc3ZnRWxlbWVudC0+Z2V0QXR0cmlidXRlKHN2Z0VsZW1l
bnQtPmlkQXR0cmlidXRlTmFtZSgpKTsKICAgICAgICAgLy8gRklYTUU6IFRoZXNlIG5hbWVzIGFy
ZSBsaWVzIQogICAgICAgICBpZiAocmVzb3VyY2UtPmlzUGFpbnRTZXJ2ZXIoKSkgewogICAgICAg
ICAgICAgUmVmUHRyPFNWR1BhaW50U2VydmVyPiBwYWludFNlcnZlciA9IFdURjo6c3RhdGljX3Bv
aW50ZXJfY2FzdDxTVkdQYWludFNlcnZlcj4ocmVzb3VyY2UpOwpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50b0Rv
Y3VtZW50KCkKICAgICBTdHlsZWRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAg
IFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IGRvY3VtZW50KCktPmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKTsKIAotICAgIFN0cmluZyByZXNvdXJjZUlkID0gU1ZHVVJJUmVmZXJlbmNl
OjpnZXRUYXJnZXQoZ2V0QXR0cmlidXRlKGlkQXR0cikpOworICAgIFN0cmluZyByZXNvdXJjZUlk
ID0gU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQoZ2V0QXR0cmlidXRlKGlkQXR0cmlidXRlTmFt
ZSgpKSk7CiAgICAgaWYgKGV4dGVuc2lvbnMtPmlzUGVuZGluZ1Jlc291cmNlKHJlc291cmNlSWQp
KSB7CiAgICAgICAgIHN0ZDo6YXV0b19wdHI8SGFzaFNldDxTVkdTdHlsZWRFbGVtZW50Kj4gPiBj
bGllbnRzKGV4dGVuc2lvbnMtPnJlbW92ZVBlbmRpbmdSZXNvdXJjZShyZXNvdXJjZUlkKSk7CiAg
ICAgICAgIGlmIChjbGllbnRzLT5pc0VtcHR5KCkpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHls
ZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50
LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDcgKzE4OSw3IEBAIGJvb2wgU1ZHU3R5bGVkRWxlbWVu
dDo6aXNLbm93bkF0dHJpYnV0ZSgKICAgICBpZiAocHJvcElkID4gMCkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICByZXR1cm4gKGF0dHJOYW1lID09IEhUTUxOYW1lczo6aWRBdHRyIHx8IGF0
dHJOYW1lID09IEhUTUxOYW1lczo6c3R5bGVBdHRyKTsgCisgICAgcmV0dXJuIChhdHRyTmFtZSA9
PSBpZEF0dHJpYnV0ZU5hbWUoKSB8fCBhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OnN0eWxlQXR0cik7
IAogfQogCiB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNwcAkocmV2aXNpb24gNTIw
OTIpCisrKyBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAs
NyArNjAsNyBAQCBib29sIFdNTEVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmCiAgICAg
CiB2b2lkIFdNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSog
YXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IEhUTUxOYW1lczo6aWRBdHRyCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKQogICAgICAgICB8fCBhdHRyLT5u
YW1lKCkgPT0gSFRNTE5hbWVzOjpjbGFzc0F0dHIKICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09
IEhUTUxOYW1lczo6c3R5bGVBdHRyKQogICAgICAgICByZXR1cm4gU3R5bGVkRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MjEwNikKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDA5
LTEyLTE0ICBTaHUgQ2hhbmcgIDxDaGFuZy5TaHVAbm9raWEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyB0ZXN0IGNhc2VzIGZvciBpc0lk
IHN1cHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NTc4CisKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNC1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQuanM6
CisgICAgICAgIChzZXRVcFBhZ2UpOgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9h
dHRyaXNpZDA1LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUv
YXR0cmlzaWQwNS5qczoKKyAgICAgICAgKHNldFVwUGFnZSk6CisgICAgICAgICogZmFzdC9kb20v
RWxlbWVudC9hdHRyaXNpZC1leHRyYTAxLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vRWxlbWVudC9hdHRyaXNpZC1leHRyYTAxLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tYXBwbGV0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1hcHBsZXQuaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1kZWxldGVidXR0b24tZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLWRlbGV0ZWJ1dHRvbi5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLWZvcm1jb2xsZWN0aW9uLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mb3Jt
Y29sbGVjdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWlu
LWZyYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9p
ZC1pbi1mcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWlu
LWZyYW1lc2V0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVu
dC9pZC1pbi1mcmFtZXNldC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50
L2lkLWluLWdldGVsZW1lbnQwMS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZG9tL0VsZW1lbnQvaWQtaW4tZ2V0ZWxlbWVudDAxLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZG9tL0VsZW1lbnQvaWQtaW4taW5zZXJ0LWhyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1pbnNlcnQtaHIuaHRtbDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1tYXAtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLW1hcC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLXBhcmFtLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1wYXJhbS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2ZvbnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2ZvbnQuc3ZnOiBBZGRlZC4KKwogMjAw
OS0xMi0xNCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBOb3QgcmV2aWV3ZWQsIGJ1aWxkIGZpeC4KSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9s
ZXZlbDMvY29yZS9hdHRyaXNpZDA0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDUyMDkyKQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lk
MDQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRw
Oi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQK
LVN0YXR1cwlza2lwCi1NZXNzYWdlCUhUTUwgbG9hZGVyIGRvZXMgbm90IHN1cHBvcnQgdmFsaWRh
dGluZz10cnVlCitTdGF0dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xl
dmVsMy9jb3JlL2F0dHJpc2lkMDQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3ho
dG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQuanMJKHJldmlzaW9uIDUyMDkyKQorKysgTGF5b3V0
VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQuanMJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDcgKzM5LDggQEAgZnVuY3Rpb24gc2V0VXBQYWdlKCkgewogICAgICAvLyAgIGNyZWF0
ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCiAgICAgIC8vCiAg
ICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOwotICAgICAgIHNldEltcGxl
bWVudGF0aW9uQXR0cmlidXRlKCJ2YWxpZGF0aW5nIiwgdHJ1ZSk7CisgICAgIC8vIFJlbW92ZSB0
aGUgZm9sbG93aW5nIGxpbmUgb3RoZXJld2lzZSB0ZXN0IGNhc2Ugc2tpcHBlZC4KKyAgICAgLy9z
ZXRJbXBsZW1lbnRhdGlvbkF0dHJpYnV0ZSgidmFsaWRhdGluZyIsIHRydWUpOwogCiAgICAgICBk
b2NzTG9hZGVkID0gMDsKICAgICAgIApJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVs
My9jb3JlL2F0dHJpc2lkMDUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2RvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA1LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
NTIwOTIpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNS1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93
d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNQotU3Rh
dHVzCXNraXAKLU1lc3NhZ2UJSFRNTCBsb2FkZXIgZG9lcyBub3Qgc3VwcG9ydCB2YWxpZGF0aW5n
PXRydWUKK1N0YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwz
L2NvcmUvYXR0cmlzaWQwNS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwv
bGV2ZWwzL2NvcmUvYXR0cmlzaWQwNS5qcwkocmV2aXNpb24gNTIwOTIpCisrKyBMYXlvdXRUZXN0
cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksOCBAQCBmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CiAgICAgIC8vICAgY3JlYXRlcyB0
ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KICAgICAgLy8KICAgICAg
YnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7Ci0gICAgICAgc2V0SW1wbGVtZW50
YXRpb25BdHRyaWJ1dGUoInZhbGlkYXRpbmciLCB0cnVlKTsKKyAgICAgLy8gUmVtb3ZlIHRoZSBm
b2xsb3dpbmcgbGluZSBvdGhlcmV3aXNlIHRlc3QgY2FzZSBza2lwcGVkLgorICAgICAvL3NldElt
cGxlbWVudGF0aW9uQXR0cmlidXRlKCJ2YWxpZGF0aW5nIiwgdHJ1ZSk7CiAKICAgICAgIGRvY3NM
b2FkZWQgPSAwOwogICAgICAgCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2F0
dHJpc2lkLWV4dHJhMDEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZG9tL0VsZW1lbnQvYXR0cmlzaWQtZXh0cmEwMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2F0dHJpc2lkLWV4dHJhMDEtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACitUZXN0IEF0dHIuaXNJZCB3aGVy
ZSBBdHRyIGlzIGNyZWF0ZWQgd2l0aG91dCBlbGVtZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworUEFTUyBhdHRyLmlzSWQgaXMgZmFsc2UKK1BBU1MgYXR0ci5pc0lkIGlzIHRy
dWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2F0dHJpc2lkLWV4dHJhMDEuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2F0dHJpc2lkLWV4dHJh
MDEuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvYXR0
cmlzaWQtZXh0cmEwMS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACis8aHRtbD4K
KzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlv
bigiVGVzdCBBdHRyLmlzSWQgd2hlcmUgQXR0ciBpcyBjcmVhdGVkIHdpdGhvdXQgZWxlbWVudC4i
KTsKKyAgICAKK3ZhciBhdHRyID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlTlMoImh0dHA6Ly93
d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpsYW5nIik7CitzaG91bGRCZUZhbHNl
KCdhdHRyLmlzSWQnKTsKKwordmFyIGF0dHIgPSBkb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGVOUygi
IiwiaWQiKTsKK3Nob3VsZEJlVHJ1ZSgnYXR0ci5pc0lkJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWFwcGxldC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1hcHBsZXQtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1p
bi1hcHBsZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0
IHVzaW5nIGlkIGluIGFwcGxldCBlbGVtZW50CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcHBsZXQxIikgaXMgbm9uLW51bGwu
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1hcHBsZXQuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWFwcGxldC5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1hcHBsZXQu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8YXBwbGV0IGlkPSJhcHBsZXQxIiB3aWR0aD0iMTAiIGhl
aWdodD0iMTAiPjwvYXBwbGV0PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdXNpbmcg
aWQgaW4gYXBwbGV0IGVsZW1lbnQiKTsKKworc2hvdWxkQmVOb25OdWxsKCdkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiYXBwbGV0MSIpJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9FbGVtZW50L2lkLWluLWRlbGV0ZWJ1dHRvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1kZWxldGVidXR0b24tZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1p
bi1kZWxldGVidXR0b24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBA
CitUZXN0IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJXZWJLaXQtRWRpdGluZy1EZWxldGUtQnV0
dG9uIikKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZGVsZXRlQnV0dG9u
IGlzIG5vbi1udWxsLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisxCisyCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4t
ZGVsZXRlYnV0dG9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxl
bWVudC9pZC1pbi1kZWxldGVidXR0b24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZGVsZXRlYnV0dG9uLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjkgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KworPGRpdiBjb250ZW50ZWRpdGFibGU9InRydWUiPgorPHVsIGNsYXNzPSJuZWVkc0RlbGV0aW9u
VUkiPjxsaT4xPC9saT48bGkgaWQ9ImxpIj4yPC9saT48L3VsPgorCis8c2NyaXB0PgorZGVzY3Jp
cHRpb24oJ1Rlc3QgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIldlYktpdC1FZGl0aW5nLURlbGV0
ZS1CdXR0b24iKScpOworCitzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CitsaSA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJsaSIpOworc2VsLnNldFBvc2l0aW9uKGxpLCAwKTsKKworaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGRlbGV0ZUJ1dHRvbiA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJXZWJLaXQtRWRpdGluZy1EZWxldGUtQnV0dG9uIik7CisgICAg
c2hvdWxkQmVOb25OdWxsKCdkZWxldGVCdXR0b24nKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZm9ybWNvbGxlY3Rpb24tZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZm9ybWNv
bGxlY3Rpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9k
b20vRWxlbWVudC9pZC1pbi1mb3JtY29sbGVjdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgdXNpbmcgaWQgaW4gSFRNTEZvcm1Db2xsZWN0aW9uCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGVsZW1zKCJpZHMxIiwxKS5nZXRB
dHRyaWJ1dGUoIm5hbWUiKSBpcyAibmFtZTIiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKyAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1l
bnQvaWQtaW4tZm9ybWNvbGxlY3Rpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9FbGVtZW50L2lkLWluLWZvcm1jb2xsZWN0aW9uLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWZvcm1jb2xsZWN0aW9uLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjUgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKworPGZvcm0gaWQ9ImlkZjEiPgorPHNlbGVjdCBpZD0iaWRzMSIgbmFt
ZT0ibmFtZTEiPjxvcHRpb24gc2VsZWN0ZWQ+RkFJTFVSRTwvb3B0aW9uPjwvc2VsZWN0PgorPHNl
bGVjdCBpZD0iaWRzMSIgbmFtZT0ibmFtZTIiPjxvcHRpb24gc2VsZWN0ZWQ+RkFJTFVSRTwvb3B0
aW9uPjwvc2VsZWN0PgorPC9mb3JtPgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdXNp
bmcgaWQgaW4gSFRNTEZvcm1Db2xsZWN0aW9uIik7CisKK3ZhciBlbGVtcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJpZGYxIikuZWxlbWVudHM7CitzaG91bGRCZSgnZWxlbXMoImlkczEiLDEp
LmdldEF0dHJpYnV0ZSgibmFtZSIpJywgJyJuYW1lMiInKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWUtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWUtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1m
cmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgdXNp
bmcgaWQgaW4gZnJhbWUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRoZWZyYW1lIikgaXMgbm9uLW51bGwuCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWUuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdXNpbmcgaWQgaW4gZnJhbWUiKTsK
KyAgICAKK3ZhciBwYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKK3Bh
cmVudC5pZCA9ICd0aGVmcmFtZSc7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBhcmVudCk7
CisKK3Nob3VsZEJlTm9uTnVsbCgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRoZWZyYW1lIikn
KTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJh
bWVzZXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0Vs
ZW1lbnQvaWQtaW4tZnJhbWVzZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZXNldC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMiBAQAorQUxFUlQ6IDEKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZXNldC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWVzZXQuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWVzZXQuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+CisKKzxmcmFtZXNldCBpZD0iZnJhbWVzZXQi
PgorICA8ZnJhbWUgbmFtZT0iZnJhbWUyIiBzcmM9ImFib3V0OmJsYW5rIj4KKyAgPGZyYW1lIG5h
bWU9ImZyYW1lMSIgc3JjPSJqYXZhc2NyaXB0OgorICAgIGZ1bmN0aW9uIGxvZyhzKQorICAgIHsK
KyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGFsZXJ0KHMp
OworICAgICAgZWxzZQorICAgICAgICB0b3AuZnJhbWUxLmRvY3VtZW50LndyaXRlKCc8cD4nICsg
cyArICc8L3A+Jyk7CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgIHRvcC5m
cmFtZXNldC5yZW1vdmVDaGlsZCh0b3AuZnJhbWUyLmZyYW1lRWxlbWVudCk7CisgICAgbG9nKHRv
cC5mcmFtZXNldC5jaGlsZHJlbi5sZW5ndGgpOworICAiPgorCisgIDxmcmFtZSBuYW1lPSJmcmFt
ZTMiIHNyYz0iYWJvdXQ6YmxhbmsiPgorPC9mcmFtZXNldD4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZ2V0ZWxlbWVudDAxLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWdldGVsZW1l
bnQwMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9F
bGVtZW50L2lkLWluLWdldGVsZW1lbnQwMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTIgQEAKK1Rlc3QgZ2V0RWxlbWVudEJ5SWQKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgZWxlbS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSBpcyAibmFtZTEiCitQQVNT
IGVsZW0uZ2V0QXR0cmlidXRlKCJuYW1lIikgaXMgIm5hbWUyIgorUEFTUyBlbGVtIGlzIG51bGwK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWdldGVsZW1lbnQwMS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZ2V0ZWxlbWVu
dDAxLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lk
LWluLWdldGVsZW1lbnQwMS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACis8aHRt
bD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxkaXYgbmFtZT0nbmFtZTEn
IGlkPSdpZDEnLz4KKzxkaXYgbmFtZT0nbmFtZTInIGlkPSdpZDInLz4KKzxkaXYgbmFtZT0nbmFt
ZTMnIGlkPSdpZDInLz4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IGdldEVsZW1lbnRC
eUlkIik7CisKK3ZhciBlbGVtOworCisvLyBlbGVtZW50IGZvdW5kIHdpdGggZXhhY3QgbWF0Y2gK
K2VsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWQxJyk7CitzaG91bGRCZSgnZWxlbS5n
ZXRBdHRyaWJ1dGUoIm5hbWUiKScsICcibmFtZTEiJyk7CisKKy8vIG11bHRpcGxlIGVsZW1lbnRz
IGhhdmluZyBzYW1lIGlkIHJldHVybiB0aGUgZmlyc3Qgb25lCitlbGVtID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2lkMicpOworc2hvdWxkQmUoJ2VsZW0uZ2V0QXR0cmlidXRlKCJuYW1lIikn
LCAnIm5hbWUyIicpOworCisvLyBlbGVtZW50IHdpdGggaWQgbm90IGZvdW5kCitlbGVtID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMycpOworc2hvdWxkQmVOdWxsKCdlbGVtJyk7CisKK3Zh
ciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWluc2VydC1oci1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9p
ZC1pbi1pbnNlcnQtaHItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1pbnNlcnQtaHItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwIEBACitUZXN0IHVzaW5nIGlkIGluIGV4ZWNDb21tYW5kKEluc2VydEhv
cml6b250YWxSdWxlKQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBociBp
cyBub24tbnVsbC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorZm9vYmFyCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWlu
c2VydC1oci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQv
aWQtaW4taW5zZXJ0LWhyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9FbGVtZW50L2lkLWluLWluc2VydC1oci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5
IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlk
PSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxkaXYgaWQ9
InRlc3QxIiBjb250ZW50ZWRpdGFibGU9InRydWUiPmZvb2JhcjwvZGl2PgorCis8c2NyaXB0Pgor
ZGVzY3JpcHRpb24oIlRlc3QgdXNpbmcgaWQgaW4gZXhlY0NvbW1hbmQoSW5zZXJ0SG9yaXpvbnRh
bFJ1bGUpIik7CisKK3ZhciBzID0gd2luZG93LmdldFNlbGVjdGlvbigpOwordmFyIGUgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdDEiKTsKK3Muc2V0UG9zaXRpb24oZSwgMCk7CisKK3Zh
ciBpZCA9ICJociI7Citkb2N1bWVudC5leGVjQ29tbWFuZCgiSW5zZXJ0SG9yaXpvbnRhbFJ1bGUi
LCBmYWxzZSwgaWQpOwordmFyIGhyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworCitz
aG91bGRCZU5vbk51bGwoJ2hyJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9FbGVtZW50L2lkLWluLW1hcC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1tYXAtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1tYXAtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0IHVzaW5nIGlkIGluIG1hcCBlbGVtZW50
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiZmlyc3RtYXAiKSBpcyBub24tbnVsbC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9F
bGVtZW50L2lkLWluLW1hcC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9t
L0VsZW1lbnQvaWQtaW4tbWFwLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9FbGVtZW50L2lkLWluLW1hcC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBA
Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJk
ZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxtYXAgdGl0bGU9
Im1hcCIgaWQ9ImZpcnN0bWFwIj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IHVzaW5n
IGlkIGluIG1hcCBlbGVtZW50LiIpOworICAgIAorc2hvdWxkQmVOb25OdWxsKCdkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiZmlyc3RtYXAiKScpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1wYXJhbS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1wYXJhbS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXBhcmFtLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdCB1c2luZyBpZCBp
biBwYXJhbSBlbGVtZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWQxIikgaXMgbm9uLW51bGwuCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1wYXJhbS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tcGFyYW0uaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tcGFyYW0uaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorICAgIAorPG9iamVjdCB3aWR0aD0xMDAgaGVpZ2h0PTEwMD4KKyAgPHBhcmFtIG5hbWU9Im1v
dmllIiBpZD0iaWQxIj4KKzwvb2JqZWN0PiAgICAKKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJU
ZXN0IHVzaW5nIGlkIGluIHBhcmFtIGVsZW1lbnQuIik7CisKK3Nob3VsZEJlTm9uTnVsbCgnZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkMSIpJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2ZvbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tc3ZnZm9udC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2
Z2ZvbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK2xheWVyIGF0
ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAor
bGF5ZXIgYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgIFJlbmRlclNWR1Jvb3Qge3N2Z30gYXQgKDAs
LTMpIHNpemUgNDB4MworICAgIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lciB7ZGVmc30gYXQgKDAs
MCkgc2l6ZSAweDAKKyAgICAgIFJlbmRlclBhdGgge3BhdGh9IGF0ICgwLDApIHNpemUgNDcyN3g1
OCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDAwMDAwXX1dIFtkYXRhPSJNIDAgMEwgMCA0
MkwgMTYgNThMIDQ3MjcgNTgiXQorICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNp
emUgNDB4MyBjb250YWlucyAxIGNodW5rKHMpCisgICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0IHsj
dGV4dH0gYXQgKDAsLTMpIHNpemUgNDB4MworICAgICAgICBjaHVuayAxIHRleHQgcnVuIDEgYXQg
KDAuMDAsMC4wMCkgc3RhcnRPZmZzZXQgMCBlbmRPZmZzZXQgMSB3aWR0aCA0MC4wMDogIlgiCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2ZvbnQuc3ZnCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tc3ZnZm9udC5zdmcJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2Zv
bnQuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAi
Pz4KKzw/eG1sLXN0eWxlc2hlZXQgaHJlZj0iZGF0YTp0ZXh0L2Nzcyx0ZXh0JTdCZm9udC1mYW1p
bHklM0FBQ0lEM3N2Z2ZvbnQlN0QiPz4KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9
IjEwMCIgaGVpZ2h0PSIxMDAiPgorICAgIDxkZWZzPgorICAgICAgICA8Zm9udC1mYWNlIGZvbnQt
ZmFtaWx5PSJBQ0lEM3N2Z2ZvbnQiPgorICAgICAgICAgICAgPGZvbnQtZmFjZS1zcmM+CisgICAg
ICAgICAgICAgICAgPGZvbnQtZmFjZS11cmkgeGxpbms6aHJlZj0iLi4vLi4vLi4vc3ZnL2N1c3Rv
bS9yZXNvdXJjZXMvQWNpZDNGb250LnN2ZyNtaW5pIi8+CisgICAgICAgICAgICA8L2ZvbnQtZmFj
ZS1zcmM+CisgICAgICAgIDwvZm9udC1mYWNlPgorICAgICAgICA8cGF0aCBpZD0icGF0aCIgZD0i
TTAgMGwwIDQybDE2IDE2bDQ3MTEgMCIvPgorICAgIDwvZGVmcz4KKyAgICA8dGV4dD5YPC90ZXh0
PgorPC9zdmc+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44892</attachid>
            <date>2009-12-15 11:42:12 -0800</date>
            <delta_ts>2009-12-15 19:09:10 -0800</delta_ts>
            <desc>minor change</desc>
            <filename>bug5578_5.patch</filename>
            <type>text/plain</type>
            <size>54901</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODkgQEAKKzIwMDktMTItMTQgIFNodSBDaGFuZyAgPENoYW5nLlNodUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50ZWQgaXNJZCBhcyBzcGVjaWZpZWQgYnkgRE9NIExldmVsIDMuIFNlZSBkZXRhaWxlZCBk
ZXNjcmlwdGlvbiBiZWxvdy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU1NzgKKworICAgICAgICBBZGRlZCBpc0lkIHByb3BlcnR5IGFuZCBpbXBsZW1l
bnRhdGlvbjoKKyAgICAgICAgVGVzdHM6IGRvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDAx
LTA3LnhodG1sCisgICAgICAgICAgICAgICBmYXN0L2RvbS9FbGVtZW50L2F0dHJpc2lkLWV4dHJh
MDEuaHRtbAorICAgICAgICAqIGRvbS9BdHRyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF0dHI6
OmlzSWQpOgorICAgICAgICAqIGRvbS9BdHRyLmg6CisgICAgICAgICogZG9tL0F0dHIuaWRsOgor
CisgICAgICAgIFJlcGxhY2VkIGluc3RhbmNlcyBvZiBIVE1MTmFtZXM6OmlkQXR0ciB3aXRoIEVs
ZW1lbnQ6OmlkQXR0cmlidXRlTmFtZSgpCisgICAgICAgIGZvciB0aGUgcmVhc29uIHRoYXQgaWQg
YXR0cmlidXRlIG5hbWUgY291bGQgYmUgY3VzdG9taXplZCB0byBhIGRpZmZlcmVudAorICAgICAg
ICBzdHJpbmcgb3RoZXIgdGhhbiAiaWQiLiBBIHRlc3QgY2FzZSBpcyBhc3NvY2lhdGVkIHRvIGVh
Y2ggY29kZSBjaGFuZ2UuCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpnZXRFbGVtZW50QnlJZCk6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQv
aWQtaW4tZ2V0ZWxlbWVudDAxLmh0bWwKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6IFRlc3Rz
OiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwMS0wNy54aHRtbAorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OnNldEF0dHJpYnV0ZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjppbnNlcnRlZElu
dG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbURvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmZvcm1hdEZvckRlYnVnZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJhcmVJREF0dHJpYnV0ZU5hbWUpOgorICAgICAgICAq
IGRvbS9FbGVtZW50Lmg6IEFkZGVkIGZ1bmN0aW9uIGlkQXR0cmlidXRlTmFtZSgpLgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6aWRBdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgKiBkb20vRWxl
bWVudFJhcmVEYXRhLmg6IEFkZGVkIG1lbWJlciB2YXJpYWJsZSB0byBzdG9yZSBjdXN0b21pemVk
IGlkIG5hbWUgaW4gRWxlbWVudFJhcmVEYXRhLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJh
cmVEYXRhOjpFbGVtZW50UmFyZURhdGEpOgorICAgICAgICAqIGRvbS9OYW1lZEF0dHJNYXAuY3Bw
OiBUZXN0czogZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDEtMDcueGh0bWwKKyAgICAg
ICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok5h
bWVkTm9kZU1hcDo6c2V0QXR0cmlidXRlcyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOiBSZW1v
dmVkIEFTU0VSVCBhcyBpdCBtYXkgbm90IGhvbGQgYW55IG1vcmUuCisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpxdWVyeVNlbGVjdG9yKToKKyAgICAgICAgKiBkb20vU2VsZWN0b3JOb2RlTGlzdC5j
cHA6IFJlbW92ZWQgQVNTRVJUIGFzIGl0IG1heSBub3QgaG9sZCBhbnkgbW9yZS4KKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZVNlbGVjdG9yTm9kZUxpc3QpOgorICAgICAgICAqIGRvbS9TdHlsZWRF
bGVtZW50LmNwcDogVGVzdHM6IGRvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDAxLTA3Lnho
dG1sCisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZSk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcDogVGVzdDog
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1kZWxldGVidXR0b24uaHRtbAorICAgICAgICAoV2ViQ29y
ZTo6RGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6Y3JlYXRlRGVsZXRpb25VSSk6CisgICAgICAgICog
ZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1p
bnNlcnQtaHIuaHRtbAorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZUluc2VydEhvcml6b250YWxS
dWxlKToKKyAgICAgICAgKiBodG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcDogVGVzdDogZmFzdC9k
b20vRWxlbWVudC9pZC1pbi1hcHBsZXQuaHRtbAorICAgICAgICAoV2ViQ29yZTo6SFRNTEFwcGxl
dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxB
cHBsZXRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogaHRtbC9IVE1MQ29sbGVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6Y2hlY2tGb3JOYW1l
TWF0Y2gpOiBUZXN0OiBmYXN0L2Zvcm1zL3NlbGVjdC1uYW1lZEl0ZW0uaHRtbAorICAgICAgICAo
V2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6IFRlc3Q6IGZhc3QvZG9t
L2NvbGxlY3Rpb24tbmFtZWRJdGVtLXZpYS1pdGVtLmh0bWwKKyAgICAgICAgKiBodG1sL0hUTUxE
YXRhR3JpZENvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERhdGFHcmlkQ29s
RWxlbWVudDo6ZW5zdXJlQ29sdW1uKTogVGVzdDogZmFzdC9kb20vSFRNTERhdGFHcmlkRWxlbWVu
dC9EYXRhR3JpZENvbHVtbnMtZG9tLmh0bWwKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEYXRhR3Jp
ZENvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogVGVzdDogZmFzdC9kb20vSFRNTERh
dGFHcmlkRWxlbWVudC9EYXRhR3JpZENvbHVtbnMtZG9tLWF0dHJpYnV0ZXMuaHRtbAorICAgICAg
ICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29sbGVjdGlv
bi5jcHA6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZm9ybWNvbGxlY3Rpb24uaHRtbAor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db2xsZWN0aW9uOjpnZXROYW1lZEZvcm1JdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVjdGlvbjo6bmV4dE5hbWVkSXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6IFRlc3Q6IGZhc3QvZG9tL0Vs
ZW1lbnQvaWQtaW4tZnJhbWUuaHRtbAorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVu
dEJhc2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFt
ZUVsZW1lbnRCYXNlOjpzZXROYW1lQW5kT3BlblVSTCk6CisgICAgICAgICogaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1kZWxldGVidXR0b24u
aHRtbAorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuY3BwOiBUZXN0OiBmYXN0L2Rv
bS9FbGVtZW50L2lkLWluLW1hcC5odG1sCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE5hbWVDb2xsZWN0
aW9uLmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZXNldC5odG1sCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTmFtZUNvbGxlY3Rpb246Oml0ZW1BZnRlcik6CisgICAgICAgICog
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6IFRlc3Q6IGZhc3QvZG9tL0hUTUxEb2N1bWVudC9v
YmplY3QtYnktbmFtZS1vci1pZC5odG1sCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTFBhcmFtRWxl
bWVudC5jcHA6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tcGFyYW0uaHRtbAorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFBhcmFtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAqIGxvYWRlci9DYWNoZWRGb250LmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1p
bi1zdmdmb250LnN2ZworICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkRm9udDo6Z2V0U1ZHRm9udEJ5
SWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjcmVhdGVHcmFwaGljc0xheWVyKTogRGVi
dWctb25seSBjb2RlCisgICAgICAgICogcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
OiBUZXN0OiBzdmcvdGV4dC90ZXh0LWdyYWRpZW50LXBvc2l0aW9uaW5nLnN2ZworICAgICAgICAo
V2ViQ29yZTo6d3JpdGVSZW5kZXJSZXNvdXJjZXMpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50
LmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1zdmdmb250LnN2ZworICAgICAgICAo
V2ViQ29yZTo6U1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAgICAqIHN2
Zy9TVkdTdHlsZWRFbGVtZW50LmNwcDogVGVzdDogc3ZnL2N1c3RvbS9qcy11cGRhdGUtaW1hZ2Ut
YW5kLWRpc3BsYXkuc3ZnCisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50Ojppc0tu
b3duQXR0cmlidXRlKToKKyAgICAgICAgKiB3bWwvV01MRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisKIDIwMDktMTItMTQg
IEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgUXVhcnR6Q29y
ZS1yZWxhdGVkIGJ1aWxkIHNldHRpbmdzIGludG8gYSB2c3Byb3BzIGZpbGUKSW5kZXg6IFdlYkNv
cmUvZG9tL0F0dHIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0F0dHIuY3BwCShyZXZp
c2lvbiA1MjA5MikKKysrIFdlYkNvcmUvZG9tL0F0dHIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjQsNCArMTY0LDkgQEAgdm9pZCBBdHRyOjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQgog
ICAgICAgICBtX2VsZW1lbnQtPmF0dHJpYnV0ZUNoYW5nZWQobV9hdHRyaWJ1dGUuZ2V0KCkpOwog
fQogCitib29sIEF0dHI6OmlzSWQoKSBjb25zdAoreworICAgIHJldHVybiBxdWFsaWZpZWROYW1l
KCkubWF0Y2hlcyhtX2VsZW1lbnQgPyBtX2VsZW1lbnQtPmlkQXR0cmlidXRlTmFtZSgpIDogSFRN
TE5hbWVzOjppZEF0dHIpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9BdHRyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vQXR0ci5oCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUv
ZG9tL0F0dHIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOCBAQCBwdWJsaWM6CiAgICAg
QXR0cmlidXRlKiBhdHRyKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGUuZ2V0KCk7IH0KICAg
ICBjb25zdCBRdWFsaWZpZWROYW1lJiBxdWFsaWZpZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9h
dHRyaWJ1dGUtPm5hbWUoKTsgfQogCisgICAgYm9vbCBpc0lkKCkgY29uc3Q7CisKICAgICAvLyBB
biBleHRlbnNpb24gdG8gZ2V0IHByZXNlbnRhdGlvbmFsIGluZm9ybWF0aW9uIGZvciBhdHRyaWJ1
dGVzLgogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgeyByZXR1cm4gbV9hdHRyaWJ1
dGUtPnN0eWxlKCk7IH0KIApJbmRleDogV2ViQ29yZS9kb20vQXR0ci5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vQXR0ci5pZGwJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9kb20v
QXR0ci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDExIEBAIG1vZHVsZSBjb3JlIHsK
ICAgICAgICAgLy8gRE9NIExldmVsIDIKIAogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRWxl
bWVudCBvd25lckVsZW1lbnQ7Ci0gICAgICAgIAorCisgICAgICAgIC8vIERPTSBMZXZlbCAzCisK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gaXNJZDsKKwogICAgICAgICAvLyBl
eHRlbnNpb25zCiAjaWYgIWRlZmluZWQoTEFOR1VBR0VfQ09NKSB8fCAhTEFOR1VBR0VfQ09NCiAg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDU1NTdHlsZURlY2xhcmF0aW9uIHN0eWxlOwpJbmRl
eDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg1Niw3ICs4NTYsNyBAQCBFbGVtZW50KiBEb2N1bWVudDo6Z2V0
RWxlbWVudEJ5SWQoY29uc3QgCiAgICAgICAgIGZvciAoTm9kZSAqbiA9IHRyYXZlcnNlTmV4dE5v
ZGUoKTsgbiAhPSAwOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICBp
ZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudCA9IHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzSUQo
KSAmJiBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBlbGVtZW50SWQpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5nZXRBdHRyaWJ1dGUo
ZWxlbWVudC0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IGVsZW1lbnRJZCkgewogICAgICAgICAgICAg
ICAgICAgICBtX2R1cGxpY2F0ZUlkcy5yZW1vdmUoZWxlbWVudElkLmltcGwoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIG1fZWxlbWVudHNCeUlkLnNldChlbGVtZW50SWQuaW1wbCgpLCBlbGVtZW50
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CkluZGV4OiBXZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2
aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTMyLDcgKzUzMiw3IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IEF0b21p
Y1MKIAogICAgIGRvY3VtZW50KCktPmluY0RPTVRyZWVWZXJzaW9uKCk7CiAKLSAgICBpZiAobG9j
YWxOYW1lID09IGlkQXR0ci5sb2NhbE5hbWUoKSkKKyAgICBpZiAobG9jYWxOYW1lID09IGlkQXR0
cmlidXRlTmFtZSgpLmxvY2FsTmFtZSgpKQogICAgICAgICB1cGRhdGVJZChvbGQgPyBvbGQtPnZh
bHVlKCkgOiBudWxsQXRvbSwgdmFsdWUpOwogICAgIAogICAgIGlmIChvbGQgJiYgdmFsdWUuaXNO
dWxsKCkpCkBAIC01NTIsNyArNTUyLDcgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaQogICAgIC8vIGFsbG9jYXRlIGF0dHJpYnV0ZW1hcCBpZiBuZWNlc3NhcnkKICAg
ICBBdHRyaWJ1dGUqIG9sZCA9IGF0dHJpYnV0ZXMoZmFsc2UpLT5nZXRBdHRyaWJ1dGVJdGVtKG5h
bWUpOwogCi0gICAgaWYgKG5hbWUgPT0gaWRBdHRyKQorICAgIGlmIChuYW1lID09IGlkQXR0cmli
dXRlTmFtZSgpKQogICAgICAgICB1cGRhdGVJZChvbGQgPyBvbGQtPnZhbHVlKCkgOiBudWxsQXRv
bSwgdmFsdWUpOwogICAgIAogICAgIGlmIChvbGQgJiYgdmFsdWUuaXNOdWxsKCkpCkBAIC02MDcs
OCArNjA3LDkgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGVNYXAoUGFzc1JlZlB0cgogCiAg
ICAgLy8gSWYgc2V0dGluZyB0aGUgd2hvbGUgbWFwIGNoYW5nZXMgdGhlIGlkIGF0dHJpYnV0ZSwg
d2UgbmVlZCB0byBjYWxsIHVwZGF0ZUlkLgogCi0gICAgQXR0cmlidXRlKiBvbGRJZCA9IG5hbWVk
QXR0ck1hcCA/IG5hbWVkQXR0ck1hcC0+Z2V0QXR0cmlidXRlSXRlbShpZEF0dHIpIDogMDsKLSAg
ICBBdHRyaWJ1dGUqIG5ld0lkID0gbGlzdCA/IGxpc3QtPmdldEF0dHJpYnV0ZUl0ZW0oaWRBdHRy
KSA6IDA7CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgaWROYW1lID0gaWRBdHRyaWJ1dGVOYW1l
KCk7CisgICAgQXR0cmlidXRlKiBvbGRJZCA9IG5hbWVkQXR0ck1hcCA/IG5hbWVkQXR0ck1hcC0+
Z2V0QXR0cmlidXRlSXRlbShpZE5hbWUpIDogMDsKKyAgICBBdHRyaWJ1dGUqIG5ld0lkID0gbGlz
dCA/IGxpc3QtPmdldEF0dHJpYnV0ZUl0ZW0oaWROYW1lKSA6IDA7CiAKICAgICBpZiAob2xkSWQg
fHwgbmV3SWQpCiAgICAgICAgIHVwZGF0ZUlkKG9sZElkID8gb2xkSWQtPnZhbHVlKCkgOiBudWxs
QXRvbSwgbmV3SWQgPyBuZXdJZC0+dmFsdWUoKSA6IG51bGxBdG9tKTsKQEAgLTcxMyw3ICs3MTQs
NyBAQCB2b2lkIEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIAogICAgIGlmIChoYXNJ
RCgpKSB7CiAgICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gbmFtZWRBdHRyTWFwLmdl
dCgpKSB7Ci0gICAgICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IGF0dHJzLT5nZXRBdHRyaWJ1
dGVJdGVtKGlkQXR0cik7CisgICAgICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IGF0dHJzLT5n
ZXRBdHRyaWJ1dGVJdGVtKGlkQXR0cmlidXRlTmFtZSgpKTsKICAgICAgICAgICAgIGlmIChpZEl0
ZW0gJiYgIWlkSXRlbS0+aXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgdXBkYXRlSWQobnVsbEF0
b20sIGlkSXRlbS0+dmFsdWUoKSk7CiAgICAgICAgIH0KQEAgLTcyNCw3ICs3MjUsNyBAQCB2b2lk
IEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQogewogICAgIGlmIChoYXNJRCgpKSB7CiAg
ICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gbmFtZWRBdHRyTWFwLmdldCgpKSB7Ci0g
ICAgICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IGF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKGlk
QXR0cik7CisgICAgICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IGF0dHJzLT5nZXRBdHRyaWJ1
dGVJdGVtKGlkQXR0cmlidXRlTmFtZSgpKTsKICAgICAgICAgICAgIGlmIChpZEl0ZW0gJiYgIWlk
SXRlbS0+aXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgdXBkYXRlSWQoaWRJdGVtLT52YWx1ZSgp
LCBudWxsQXRvbSk7CiAgICAgICAgIH0KQEAgLTEwNzMsNyArMTA3NCw3IEBAIHZvaWQgRWxlbWVu
dDo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnUKICAgICAgICAgcmVzdWx0ICs9IHM7CiAgICAg
fQogICAgICAgICAgIAotICAgIHMgPSBnZXRBdHRyaWJ1dGUoaWRBdHRyKTsKKyAgICBzID0gZ2V0
QXR0cmlidXRlKGlkQXR0cmlidXRlTmFtZSgpKTsKICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsK
ICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSA+IDApCiAgICAgICAgICAgICByZXN1bHQgKz0g
IjsgIjsKQEAgLTE0MzIsNCArMTQzMyw5IEBAIEtVUkwgRWxlbWVudDo6Z2V0VVJMQXR0cmlidXRl
KGNvbnN0IFF1YWwKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZGVwcmVjYXRl
ZFBhcnNlVVJMKGdldEF0dHJpYnV0ZShuYW1lKSkpOwogfQogCitjb25zdCBRdWFsaWZpZWROYW1l
JiBFbGVtZW50OjpyYXJlSURBdHRyaWJ1dGVOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmFy
ZURhdGEoKS0+bV9pZEF0dHJpYnV0ZU5hbWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9F
bGVtZW50LmgJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjZGVmaW5lIEVsZW1lbnRfaAogCiAjaW5jbHVk
ZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlF1
YWxpZmllZE5hbWUuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogCkBAIC0xMTEsNiArMTEy
LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZv
aWQgc2V0QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0
IEF0b21pY1N0cmluZyYgcXVhbGlmaWVkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwg
RXhjZXB0aW9uQ29kZSYpOwogCisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgaWRBdHRyaWJ1dGVO
YW1lKCkgY29uc3Q7CisKICAgICB2b2lkIHNjcm9sbEludG9WaWV3KGJvb2wgYWxpZ25Ub1RvcCA9
IHRydWUpOwogICAgIHZvaWQgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChib29sIGNlbnRlcklmTmVl
ZGVkID0gdHJ1ZSk7CiAKQEAgLTI4Miw2ICsyODUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCBjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlKTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxBdHRyaWJ1dGU+IGNyZWF0ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSk7CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgcmFyZUlEQXR0
cmlidXRlTmFtZSgpIGNvbnN0OwogICAgIAogI2lmbmRlZiBOREVCVUcKICAgICB2aXJ0dWFsIHZv
aWQgZm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0
OwpAQCAtMzM5LDYgKzM0MywxMSBAQCBpbmxpbmUgRWxlbWVudCogTm9kZTo6cGFyZW50RWxlbWVu
dCgpIGNvCiAgICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSA/IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihwYXJlbnQpIDogMDsKIH0KIAoraW5saW5lIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIEVsZW1lbnQ6OmlkQXR0cmlidXRlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGhhc1JhcmVEYXRhKCkgPyByYXJlSURBdHRyaWJ1dGVOYW1lKCkgOiBIVE1MTmFtZXM6OmlkQXR0
cjsKK30KKwogfSAvL25hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1l
bnRSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5o
CShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIHB1YmxpYzoKIAogICAgIEludFNpemUgbV9taW5p
bXVtU2l6ZUZvclJlc2l6aW5nOwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9jb21wdXRlZFN0
eWxlOworICAgIFF1YWxpZmllZE5hbWUgbV9pZEF0dHJpYnV0ZU5hbWU7CiB9OwogCiBpbmxpbmUg
SW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpCkBAIC00Nyw2ICs0OCw3IEBA
IGlubGluZSBJbnRTaXplIGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2kKIAogaW5saW5lIEVsZW1l
bnRSYXJlRGF0YTo6RWxlbWVudFJhcmVEYXRhKCkKICAgICA6IG1fbWluaW11bVNpemVGb3JSZXNp
emluZyhkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpKQorICAgICwgbV9pZEF0dHJpYnV0
ZU5hbWUoSFRNTE5hbWVzOjppZEF0dHIpCiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL05hbWVk
QXR0ck1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmNwcAko
cmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6
OnNldE5hbWVkSQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpZiAoYS0+bmFtZSgp
ID09IGlkQXR0cikKKyAgICBpZiAoYXR0ci0+aXNJZCgpKQogICAgICAgICBtX2VsZW1lbnQtPnVw
ZGF0ZUlkKG9sZCA/IG9sZC0+dmFsdWUoKSA6IG51bGxBdG9tLCBhLT52YWx1ZSgpKTsKIAogICAg
IC8vICMjIyBzbGlnaHRseSBpbmVmZmljaWVudCAtIHJlc2l6ZXMgYXR0cmlidXRlIGFycmF5IHR3
aWNlLgpAQCAtMTU1LDkgKzE1NSw5IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFwOjpy
ZW1vdmVOYW0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgUmVmUHRyPE5vZGU+IHIg
PSBhLT5jcmVhdGVBdHRySWZOZWVkZWQobV9lbGVtZW50KTsKKyAgICBSZWZQdHI8QXR0cj4gciA9
IGEtPmNyZWF0ZUF0dHJJZk5lZWRlZChtX2VsZW1lbnQpOwogCi0gICAgaWYgKG5hbWUgPT0gaWRB
dHRyKQorICAgIGlmIChyLT5pc0lkKCkpCiAgICAgICAgIG1fZWxlbWVudC0+dXBkYXRlSWQoYS0+
dmFsdWUoKSwgbnVsbEF0b20pOwogCiAgICAgcmVtb3ZlQXR0cmlidXRlKG5hbWUpOwpAQCAtMjQy
LDggKzI0Miw4IEBAIHZvaWQgTmFtZWROb2RlTWFwOjpzZXRBdHRyaWJ1dGVzKGNvbnN0IE4KIAog
ICAgIC8vIElmIGFzc2lnbmluZyB0aGUgbWFwIGNoYW5nZXMgdGhlIGlkIGF0dHJpYnV0ZSwgd2Ug
bmVlZCB0byBjYWxsCiAgICAgLy8gdXBkYXRlSWQuCi0gICAgQXR0cmlidXRlICpvbGRJZCA9IGdl
dEF0dHJpYnV0ZUl0ZW0oaWRBdHRyKTsKLSAgICBBdHRyaWJ1dGUgKm5ld0lkID0gb3RoZXIuZ2V0
QXR0cmlidXRlSXRlbShpZEF0dHIpOworICAgIEF0dHJpYnV0ZSogb2xkSWQgPSBnZXRBdHRyaWJ1
dGVJdGVtKG1fZWxlbWVudC0+aWRBdHRyaWJ1dGVOYW1lKCkpOworICAgIEF0dHJpYnV0ZSogbmV3
SWQgPSBvdGhlci5nZXRBdHRyaWJ1dGVJdGVtKG1fZWxlbWVudC0+aWRBdHRyaWJ1dGVOYW1lKCkp
OwogCiAgICAgaWYgKG9sZElkIHx8IG5ld0lkKQogICAgICAgICBtX2VsZW1lbnQtPnVwZGF0ZUlk
KG9sZElkID8gb2xkSWQtPnZhbHVlKCkgOiBudWxsQXRvbSwgbmV3SWQgPyBuZXdJZC0+dmFsdWUo
KSA6IG51bGxBdG9tKTsKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvZG9tL05v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUyLDcgKzE2NTIsNiBAQCBQYXNzUmVmUHRyPEVs
ZW1lbnQ+IE5vZGU6OnF1ZXJ5U2VsZWN0b3IoCiAKICAgICAvLyBGSVhNRTogd2UgY291bGQgYWxz
byBvcHRpbWl6ZSBmb3IgdGhlIHRoZSBbaWQ9ImZvbyJdIGNhc2UKICAgICBpZiAoc3RyaWN0UGFy
c2luZyAmJiBpbkRvY3VtZW50KCkgJiYgcXVlcnlTZWxlY3Rvckxpc3QuaGFzT25lU2VsZWN0b3Io
KSAmJiBxdWVyeVNlbGVjdG9yTGlzdC5maXJzdCgpLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJ
ZCkgewotICAgICAgICBBU1NFUlQocXVlcnlTZWxlY3Rvckxpc3QuZmlyc3QoKS0+YXR0cmlidXRl
KCkgPT0gaWRBdHRyKTsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50KCktPmdl
dEVsZW1lbnRCeUlkKHF1ZXJ5U2VsZWN0b3JMaXN0LmZpcnN0KCktPm1fdmFsdWUpOwogICAgICAg
ICBpZiAoZWxlbWVudCAmJiAoaXNEb2N1bWVudE5vZGUoKSB8fCBlbGVtZW50LT5pc0Rlc2NlbmRh
bnRPZih0aGlzKSkgJiYgc2VsZWN0b3JDaGVja2VyLmNoZWNrU2VsZWN0b3IocXVlcnlTZWxlY3Rv
ckxpc3QuZmlyc3QoKSwgZWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKSW5k
ZXg6IFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUv
ZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw2IEBA
IFBhc3NSZWZQdHI8U3RhdGljTm9kZUxpc3Q+IGNyZWF0ZVNlbGVjdG8KICAgICBDU1NTdHlsZVNl
bGVjdG9yOjpTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGRvY3VtZW50LCBzdHJpY3RQ
YXJzaW5nKTsKIAogICAgIGlmIChzdHJpY3RQYXJzaW5nICYmIHJvb3ROb2RlLT5pbkRvY3VtZW50
KCkgJiYgb25seVNlbGVjdG9yICYmIG9ubHlTZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6SWQgJiYgIWRvY3VtZW50LT5jb250YWluc011bHRpcGxlRWxlbWVudHNXaXRoSWQob25seVNl
bGVjdG9yLT5tX3ZhbHVlKSkgewotICAgICAgICBBU1NFUlQocXVlcnlTZWxlY3Rvckxpc3QuZmly
c3QoKS0+YXR0cmlidXRlKCkgPT0gaWRBdHRyKTsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9
IGRvY3VtZW50LT5nZXRFbGVtZW50QnlJZChvbmx5U2VsZWN0b3ItPm1fdmFsdWUpOwogICAgICAg
ICBpZiAoZWxlbWVudCAmJiAocm9vdE5vZGUtPmlzRG9jdW1lbnROb2RlKCkgfHwgZWxlbWVudC0+
aXNEZXNjZW5kYW50T2Yocm9vdE5vZGUpKSAmJiBzZWxlY3RvckNoZWNrZXIuY2hlY2tTZWxlY3Rv
cihvbmx5U2VsZWN0b3IsIGVsZW1lbnQpKQogICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGVsZW1l
bnQpOwpJbmRleDogV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29y
ZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw3ICsyMzQsNyBA
QCB2b2lkIFN0eWxlZEVsZW1lbnQ6OmNsYXNzQXR0cmlidXRlQ2hhbmdlCiAKIHZvaWQgU3R5bGVk
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewot
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyKSB7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBpZEF0dHJpYnV0ZU5hbWUoKSkgewogICAgICAgICAvLyB1bmlxdWUgaWQKICAgICAgICAgc2V0
SGFzSUQoIWF0dHItPmlzTnVsbCgpKTsKICAgICAgICAgaWYgKG5hbWVkQXR0ck1hcCkgewpJbmRl
eDogV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAkocmV2aXNpb24g
NTIwOTIpCisrKyBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xs
ZXI6OnJlc3BvbmRUb0NoCiB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OmNyZWF0ZURlbGV0
aW9uVUkoKQogewogICAgIFJlZlB0cjxIVE1MRGl2RWxlbWVudD4gY29udGFpbmVyID0gbmV3IEhU
TUxEaXZFbGVtZW50KGRpdlRhZywgbV90YXJnZXQtPmRvY3VtZW50KCkpOwotICAgIGNvbnRhaW5l
ci0+c2V0QXR0cmlidXRlKGlkQXR0ciwgY29udGFpbmVyRWxlbWVudElkZW50aWZpZXIpOworICAg
IGNvbnRhaW5lci0+c2V0QXR0cmlidXRlKGNvbnRhaW5lci0+aWRBdHRyaWJ1dGVOYW1lKCksIGNv
bnRhaW5lckVsZW1lbnRJZGVudGlmaWVyKTsKIAogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSA9IGNvbnRhaW5lci0+Z2V0SW5saW5lU3R5bGVEZWNsKCk7CiAgICAgc3R5bGUt
PnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWcsIENTU1ZhbHVlTm9uZSk7CkBA
IC0yMDIsNyArMjAyLDcgQEAgdm9pZCBEZWxldGVCdXR0b25Db250cm9sbGVyOjpjcmVhdGVEZWxl
dAogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsICIwIik7CiAKICAgICBS
ZWZQdHI8SFRNTERpdkVsZW1lbnQ+IG91dGxpbmUgPSBuZXcgSFRNTERpdkVsZW1lbnQoZGl2VGFn
LCBtX3RhcmdldC0+ZG9jdW1lbnQoKSk7Ci0gICAgb3V0bGluZS0+c2V0QXR0cmlidXRlKGlkQXR0
ciwgb3V0bGluZUVsZW1lbnRJZGVudGlmaWVyKTsKKyAgICBvdXRsaW5lLT5zZXRBdHRyaWJ1dGUo
b3V0bGluZS0+aWRBdHRyaWJ1dGVOYW1lKCksIG91dGxpbmVFbGVtZW50SWRlbnRpZmllcik7CiAK
ICAgICBjb25zdCBpbnQgYm9yZGVyV2lkdGggPSA0OwogICAgIGNvbnN0IGludCBib3JkZXJSYWRp
dXMgPSA2OwpAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6
Y3JlYXRlRGVsZXQKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPERlbGV0ZUJ1dHRvbj4g
YnV0dG9uID0gbmV3IERlbGV0ZUJ1dHRvbihtX3RhcmdldC0+ZG9jdW1lbnQoKSk7Ci0gICAgYnV0
dG9uLT5zZXRBdHRyaWJ1dGUoaWRBdHRyLCBidXR0b25FbGVtZW50SWRlbnRpZmllcik7CisgICAg
YnV0dG9uLT5zZXRBdHRyaWJ1dGUoYnV0dG9uLT5pZEF0dHJpYnV0ZU5hbWUoKSwgYnV0dG9uRWxl
bWVudElkZW50aWZpZXIpOwogCiAgICAgY29uc3QgaW50IGJ1dHRvbldpZHRoID0gMzA7CiAgICAg
Y29uc3QgaW50IGJ1dHRvbkhlaWdodCA9IDMwOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5k
LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MSw3ICs0NzEsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRl
SW5zZXJ0SG9yaXpvbnRhbFJ1bGUoCiB7CiAgICAgUmVmUHRyPEhUTUxIUkVsZW1lbnQ+IGhyID0g
bmV3IEhUTUxIUkVsZW1lbnQoaHJUYWcsIGZyYW1lLT5kb2N1bWVudCgpKTsKICAgICBpZiAoIXZh
bHVlLmlzRW1wdHkoKSkKLSAgICAgICAgaHItPnNldEF0dHJpYnV0ZShpZEF0dHIsIHZhbHVlKTsK
KyAgICAgICAgaHItPnNldEF0dHJpYnV0ZShoci0+aWRBdHRyaWJ1dGVOYW1lKCksIHZhbHVlKTsK
ICAgICByZXR1cm4gZXhlY3V0ZUluc2VydE5vZGUoZnJhbWUsIGhyLnJlbGVhc2UoKSk7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3
ICs2Myw3IEBAIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAg
ICAgICAgIGRvY3VtZW50LT5hZGROYW1lZEl0ZW0obmV3TmFtZSk7CiAgICAgICAgIH0KICAgICAg
ICAgbV9uYW1lID0gbmV3TmFtZTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0
dHIpIHsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSkg
ewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkID0gYXR0ci0+dmFsdWUoKTsKICAg
ICAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7
CiAgICAgICAgICAgICBIVE1MRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTERv
Y3VtZW50Kj4odGhpcy0+ZG9jdW1lbnQoKSk7CkBAIC0xMTgsNyArMTE4LDcgQEAgUmVuZGVyT2Jq
ZWN0KiBIVE1MQXBwbGV0RWxlbWVudDo6Y3JlYXRlUgogICAgICAgICBpZiAoIWNvZGVCYXNlLmlz
TnVsbCgpKQogICAgICAgICAgICAgYXJncy5zZXQoImNvZGVCYXNlIiwgY29kZUJhc2UpOwogCi0g
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGdldEF0dHJpYnV0ZShkb2N1bWVudCgp
LT5pc0hUTUxEb2N1bWVudCgpID8gbmFtZUF0dHIgOiBpZEF0dHIpOworICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUgPSBnZXRBdHRyaWJ1dGUoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1l
bnQoKSA/IG5hbWVBdHRyIDogaWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgICAgICBpZiAoIW5hbWUu
aXNOdWxsKCkpCiAgICAgICAgICAgICBhcmdzLnNldCgibmFtZSIsIG5hbWUpOwogICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGFyY2hpdmUgPSBnZXRBdHRyaWJ1dGUoYXJjaGl2ZUF0dHIpOwpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUv
aHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw3ICsyNjYsNyBA
QCBib29sIEhUTUxDb2xsZWN0aW9uOjpjaGVja0Zvck5hbWVNYXRjaChFCiAgICAgCiAgICAgSFRN
TEVsZW1lbnQqIGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGVsZW1lbnQpOwogICAgIGlm
ICghY2hlY2tOYW1lKQotICAgICAgICByZXR1cm4gZS0+Z2V0QXR0cmlidXRlKGlkQXR0cikgPT0g
bmFtZTsKKyAgICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShlLT5pZEF0dHJpYnV0ZU5hbWUo
KSkgPT0gbmFtZTsKIAogICAgIC8vIGRvY3VtZW50LmFsbCByZXR1cm5zIG9ubHkgaW1hZ2VzLCBm
b3JtcywgYXBwbGV0cywgb2JqZWN0cyBhbmQgZW1iZWRzCiAgICAgLy8gYnkgbmFtZSAodGhvdWdo
IGV2ZXJ5dGhpbmcgYnkgaWQpCkBAIC0yNzcsNyArMjc3LDcgQEAgYm9vbCBIVE1MQ29sbGVjdGlv
bjo6Y2hlY2tGb3JOYW1lTWF0Y2goRQogICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShzZWxlY3RU
YWcpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0
ZShuYW1lQXR0cikgPT0gbmFtZSAmJiBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSAhPSBuYW1lOwor
ICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG5hbWUgJiYgZS0+Z2V0QXR0
cmlidXRlKGUtPmlkQXR0cmlidXRlTmFtZSgpKSAhPSBuYW1lOwogfQogCiBOb2RlKiBIVE1MQ29s
bGVjdGlvbjo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKQEAgLTMx
OSw3ICszMTksNyBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUoKSBjCiAg
ICAgICAgIGlmICghZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihl
bGVtZW50KTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRB
dHRyaWJ1dGUoaWRBdHRyKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwg
PSBlLT5nZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKICAg
ICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBhZGQgdG8g
aWQgY2FjaGUKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRGF0YUdyaWRDb2xFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTERhdGFHcmlkQ29sRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9odG1sL0hUTUxEYXRhR3JpZENvbEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgSFRNTERhdGFHcmlkQ29sRWxl
bWVudDo6ZW5zdXJlQ29sdW0KIHsKICAgICBpZiAobV9jb2x1bW4pCiAgICAgICAgIHJldHVybjsK
LSAgICBtX2NvbHVtbiA9IERhdGFHcmlkQ29sdW1uOjpjcmVhdGUoZ2V0QXR0cmlidXRlKGlkQXR0
ciksIGxhYmVsKCksIHR5cGUoKSwgcHJpbWFyeSgpLCBzb3J0YWJsZSgpKTsKKyAgICBtX2NvbHVt
biA9IERhdGFHcmlkQ29sdW1uOjpjcmVhdGUoZ2V0QXR0cmlidXRlKGlkQXR0cmlidXRlTmFtZSgp
KSwgbGFiZWwoKSwgdHlwZSgpLCBwcmltYXJ5KCksIHNvcnRhYmxlKCkpOwogfQogCiB2b2lkIEhU
TUxEYXRhR3JpZENvbEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQpAQCAtMTYy
LDggKzE2Miw4IEBAIHZvaWQgSFRNTERhdGFHcmlkQ29sRWxlbWVudDo6cGFyc2VNYXBwZWQKICAg
ICAgICAgY29sdW1uKCktPnNldFNvcnRhYmxlKHNvcnRhYmxlKCkpOwogICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBzb3J0ZGlyZWN0aW9uQXR0cikKICAgICAgICAgY29sdW1uKCktPnNldFNv
cnREaXJlY3Rpb24oc29ydERpcmVjdGlvbigpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gaWRBdHRyKQotICAgICAgICBjb2x1bW4oKS0+c2V0SWQoZ2V0QXR0cmlidXRlKGlkQXR0cikp
OworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSkKKyAgICAg
ICAgY29sdW1uKCktPnNldElkKGdldEF0dHJpYnV0ZShpZEF0dHJpYnV0ZU5hbWUoKSkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9u
IDUyMDkyKQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE0LDcgKzExNCw3IEBAIGJvb2wgSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVh
bGkKICAgICAKIHZvaWQgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0ciB8fCBhdHRy
LT5uYW1lKCkgPT0gY2xhc3NBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBzdHlsZUF0dHIpCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSB8fCBhdHRyLT5uYW1lKCkgPT0g
Y2xhc3NBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBzdHlsZUF0dHIpCiAgICAgICAgIHJldHVybiBT
dHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIAogICAgIFN0cmluZyBp
bmRleHN0cmluZzsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCShyZXZpc2lv
biA1MjA5MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTAsNyArMTEwLDggQEAgRWxlbWVudCogSFRNTEZvcm1Db2xsZWN0aW9uOjpn
ZXROYW1lZEZvcgogICAgIGJvb2wgZm91bmRJbnB1dEVsZW1lbnRzID0gZmFsc2U7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0tPmZvcm1FbGVtZW50cy5zaXplKCk7ICsraSkgewog
ICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlID0gZm9ybS0+Zm9ybUVsZW1lbnRzW2ld
OwotICAgICAgICBpZiAoZS0+aXNFbnVtZXJhdGFibGUoKSAmJiBlLT5nZXRBdHRyaWJ1dGUoYXR0
ck5hbWUpID09IG5hbWUpIHsKKyAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
TmFtZSA9IChhdHRyTmFtZSA9PSBpZEF0dHIpID8gZS0+aWRBdHRyaWJ1dGVOYW1lKCkgOiBhdHRy
TmFtZTsKKyAgICAgICAgaWYgKGUtPmlzRW51bWVyYXRhYmxlKCkgJiYgZS0+Z2V0QXR0cmlidXRl
KGF0dHJpYnV0ZU5hbWUpID09IG5hbWUpIHsKICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50
cyA9IHRydWU7CiAgICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZU51bWJlcikKICAgICAgICAgICAg
ICAgICByZXR1cm4gZTsKQEAgLTEyMSw3ICsxMjIsOCBAQCBFbGVtZW50KiBIVE1MRm9ybUNvbGxl
Y3Rpb246OmdldE5hbWVkRm9yCiAgICAgaWYgKCFmb3VuZElucHV0RWxlbWVudHMpIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0tPmltZ0VsZW1lbnRzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBlID0gZm9ybS0+aW1nRWxlbWVudHNb
aV07Ci0gICAgICAgICAgICBpZiAoZS0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1lKSB7
CisgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lID0gKGF0dHJO
YW1lID09IGlkQXR0cikgPyBlLT5pZEF0dHJpYnV0ZU5hbWUoKSA6IGF0dHJOYW1lOworICAgICAg
ICAgICAgaWYgKGUtPmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA9PSBuYW1lKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGVOdW1iZXIpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlOwogICAgICAgICAgICAgICAgIC0tZHVwbGljYXRlTnVtYmVyOwpAQCAtMTcxLDEwICsx
NzMsMTAgQEAgTm9kZSogSFRNTEZvcm1Db2xsZWN0aW9uOjpuZXh0TmFtZWRJdGVtKAogICAgIC8v
IFRoZSBuZXh0TmFtZWRJdGVtSW50ZXJuYWwgZnVuY3Rpb24gY2FuIHJldHVybiB0aGUgc2FtZSBp
dGVtIHR3aWNlIGlmIGl0IGhhcwogICAgIC8vIGJvdGggYW4gaWQgYW5kIG5hbWUgdGhhdCBhcmUg
ZXF1YWwgdG8gdGhlIG5hbWUgcGFyYW1ldGVyLiBTbyB0aGlzIGZ1bmN0aW9uCiAgICAgLy8gY2hl
Y2tzIGlmIHdlIGFyZSBvbiB0aGUgbmFtZUF0dHIgaGFsZiBvZiB0aGUgaXRlcmF0aW9uIGFuZCBz
a2lwcyBvdmVyIGFueQotICAgIC8vIHRoYXQgYWxzbyBoYXZlIHRoZSBzYW1lIGlkQXR0ci4KKyAg
ICAvLyB0aGF0IGFsc28gaGF2ZSB0aGUgc2FtZSBpZEF0dHJpYnV0ZU5hbWUuCiAgICAgRWxlbWVu
dCogaW1wbCA9IG5leHROYW1lZEl0ZW1JbnRlcm5hbChuYW1lKTsKICAgICBpZiAobV9pZHNEb25l
KQotICAgICAgICB3aGlsZSAoaW1wbCAmJiBpbXBsLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBu
YW1lKQorICAgICAgICB3aGlsZSAoaW1wbCAmJiBpbXBsLT5nZXRBdHRyaWJ1dGUoaW1wbC0+aWRB
dHRyaWJ1dGVOYW1lKCkpID09IG5hbWUpCiAgICAgICAgICAgICBpbXBsID0gbmV4dE5hbWVkSXRl
bUludGVybmFsKG5hbWUpOwogICAgIHJldHVybiBpbXBsOwogfQpAQCAtMTkxLDcgKzE5Myw3IEBA
IHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZi0+Zm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqIGUgPSBmLT5mb3JtRWxlbWVudHNbaV07CiAgICAgICAgIGlm
IChlLT5pc0VudW1lcmF0YWJsZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGlkQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpOworICAgICAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVO
YW1lKCkpOwogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGUt
PmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBhZGQgdG8gaWQgY2FjaGUKQEAgLTIxOCw3ICsy
MjAsNyBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlCiAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+aW1nRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgSFRNTEltYWdlRWxlbWVudCogZSA9IGYtPmltZ0VsZW1lbnRzW2ldOwotICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpOwor
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShl
LT5pZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0
dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwogICAgICAgICBpZiAoIWlkQXR0clZh
bC5pc0VtcHR5KCkgJiYgIWZvdW5kSW5wdXRFbGVtZW50cy5jb250YWlucyhpZEF0dHJWYWwuaW1w
bCgpKSkgewogICAgICAgICAgICAgLy8gYWRkIHRvIGlkIGNhY2hlCkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9odG1s
L0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3
IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnBhcnNlTWFwcGVkQXQKIHsKICAgICBpZiAo
YXR0ci0+bmFtZSgpID09IHNyY0F0dHIpCiAgICAgICAgIHNldExvY2F0aW9uKGRlcHJlY2F0ZWRQ
YXJzZVVSTChhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlk
QXR0cikgeworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSkg
ewogICAgICAgICAvLyBJbXBvcnRhbnQgdG8gY2FsbCB0aHJvdWdoIHRvIGJhc2UgZm9yIHRoZSBp
ZCBhdHRyaWJ1dGUgc28gdGhlIGhhc0lEIGJpdCBnZXRzIHNldC4KICAgICAgICAgSFRNTEZyYW1l
T3duZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKICAgICAgICAgbV9mcmFt
ZU5hbWUgPSBhdHRyLT52YWx1ZSgpOwpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgSFRNTEZyYW1l
RWxlbWVudEJhc2U6OnNldE5hbWVBbmRPcGUKIHsKICAgICBtX2ZyYW1lTmFtZSA9IGdldEF0dHJp
YnV0ZShuYW1lQXR0cik7CiAgICAgaWYgKG1fZnJhbWVOYW1lLmlzTnVsbCgpKQotICAgICAgICBt
X2ZyYW1lTmFtZSA9IGdldEF0dHJpYnV0ZShpZEF0dHIpOworICAgICAgICBtX2ZyYW1lTmFtZSA9
IGdldEF0dHJpYnV0ZShpZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgCiAgICAgaWYgKEZyYW1lKiBw
YXJlbnRGcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIG1fZnJhbWVOYW1lID0g
cGFyZW50RnJhbWUtPnRyZWUoKS0+dW5pcXVlQ2hpbGROYW1lKG1fZnJhbWVOYW1lKTsKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcg
QEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAgICAgICAgICAg
ZG9jdW1lbnQtPmFkZE5hbWVkSXRlbShuZXdOYW1lKTsKICAgICAgICAgfQogICAgICAgICBtX25h
bWUgPSBuZXdOYW1lOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cikgewor
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cmlidXRlTmFtZSgpKSB7CiAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQgPSBhdHRyLT52YWx1ZSgpOwogICAgICAgICBp
ZiAoaW5Eb2N1bWVudCgpICYmIGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAg
ICAgICAgIEhUTUxEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQq
Pih0aGlzLT5kb2N1bWVudCgpKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkocmV2aXNp
b24gNTIwOTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OCw5ICs3OCw5IEBAIGJvb2wgSFRNTE1hcEVsZW1lbnQ6Om1hcE1vdXNlRXZlbnQo
aW50IHgKIHZvaWQgSFRNTE1hcEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0
dHItPm5hbWUoKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gaWRBdHRyIHx8IGF0dHJOYW1lID09IG5h
bWVBdHRyKSB7CisgICAgaWYgKGF0dHJOYW1lID09IGlkQXR0cmlidXRlTmFtZSgpIHx8IGF0dHJO
YW1lID09IG5hbWVBdHRyKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOwot
ICAgICAgICBpZiAoYXR0ck5hbWUgPT0gaWRBdHRyKSB7CisgICAgICAgIGlmIChhdHRyTmFtZSA9
PSBpZEF0dHJpYnV0ZU5hbWUoKSkgewogICAgICAgICAgICAgLy8gQ2FsbCBiYXNlIGNsYXNzIHNv
IHRoYXQgaGFzSUQgYml0IGdldHMgc2V0LgogICAgICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOwogICAgICAgICAgICAgaWYgKGRvYy0+aXNIVE1MRG9jdW1l
bnQoKSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiA1MjA5
MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw3ICs2Myw3IEBAIEVsZW1lbnQqIEhUTUxOYW1lQ29sbGVjdGlvbjo6aXRlbUFmdGVy
KEUKICAgICAgICAgICAgICAgICAgICAgZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQogICAgICAg
ICAgICAgICAgICAgICBpZiAoZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTsKLSAgICAgICAgICAgICAgICBpZiAoZS0+
Z2V0QXR0cmlidXRlKGlkQXR0cikgPT0gbV9uYW1lKQorICAgICAgICAgICAgICAgIGlmIChlLT5n
ZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IG1fbmFtZSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIERvY3VtZW50TmFtZWRJdGVtczoKQEAgLTc0LDE0ICs3NCwxNCBAQCBFbGVtZW50KiBIVE1M
TmFtZUNvbGxlY3Rpb246Oml0ZW1BZnRlcihFCiAgICAgICAgICAgICAgICAgICAgIGlmIChlLT5n
ZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1fbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS0+aGFzVGFnTmFtZShhcHBs
ZXRUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1dGUobmFtZUF0
dHIpID09IG1fbmFtZSB8fCBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBtX25hbWUpCisgICAg
ICAgICAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1fbmFtZSB8
fCBlLT5nZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IG1fbmFtZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
ZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoZS0+
Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUgfHwgZS0+Z2V0QXR0cmlidXRlKGlkQXR0
cikgPT0gbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiAoKGUtPmdldEF0dHJpYnV0ZShu
YW1lQXR0cikgPT0gbV9uYW1lIHx8IGUtPmdldEF0dHJpYnV0ZShlLT5pZEF0dHJpYnV0ZU5hbWUo
KSkgPT0gbV9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0
PEhUTUxPYmplY3RFbGVtZW50Kj4oZSktPmlzRG9jTmFtZWRJdGVtKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUtPmhhc1Rh
Z05hbWUoaW1nVGFnKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZS0+Z2V0QXR0cmlidXRl
KG5hbWVBdHRyKSA9PSBtX25hbWUgfHwgKGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpID09IG1fbmFt
ZSAmJiBlLT5oYXNBdHRyaWJ1dGUobmFtZUF0dHIpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9uYW1lIHx8IChlLT5nZXRBdHRyaWJ1dGUo
ZS0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IG1fbmFtZSAmJiBlLT5oYXNBdHRyaWJ1dGUobmFtZUF0
dHIpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50
LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBIVE1MT2JqZWN0RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICAgICAgZG9jdW1lbnQtPmFkZE5hbWVkSXRl
bShuZXdOYW1lKTsKICAgICAgICAgfQogICAgICAgICBtX25hbWUgPSBuZXdOYW1lOwotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IGlkQXR0cmlidXRlTmFtZSgpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmV3SWQgPSBhdHRyLT52YWx1ZSgpOwogICAgICAgICBpZiAoaXNEb2NOYW1lZEl0ZW0oKSAm
JiBpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAg
ICAgICAgSFRNTERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+
KHRoaXMtPmRvY3VtZW50KCkpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNwcAkocmV2
aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgSFRNTFBhcmFtRWxlbWVudDo6fkhUTUxQYXJhbUVs
ZW1lbnQoKQogCiB2b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cikg
eworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyaWJ1dGVOYW1lKCkpIHsKICAgICAgICAg
Ly8gTXVzdCBjYWxsIGJhc2UgY2xhc3Mgc28gdGhhdCBoYXNJRCBiaXQgZ2V0cyBzZXQuCiAgICAg
ICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKICAgICAgICAgaWYg
KGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNo
ZWRGb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250LmNwcAko
cmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBAIFNWR0ZvbnRFbGVtZW50KiBDYWNoZWRGb250Ojpn
ZXRTVkdGb250QnkKICAgICAgICAgTm9kZSogbm9kZSA9IGxpc3QtPml0ZW0oaSk7CiAgICAgICAg
IEFTU0VSVChub2RlKTsKIAotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUp
LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpICE9IGZvbnROYW1lKQorICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpLT5pZEF0dHJpYnV0ZU5hbWUoKSkgIT0gZm9udE5hbWUpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICBBU1NFUlQobm9kZS0+aGFzVGFnTmFtZShTVkdOYW1l
czo6Zm9udFRhZykpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OmNyZWF0ZUdyYXBoaWNzTAogICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5z
ZXROYW1lKCJEb2N1bWVudCBOb2RlIik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYg
KHJlbmRlcmVyKCktPm5vZGUoKS0+aXNIVE1MRWxlbWVudCgpICYmIHJlbmRlcmVyKCktPm5vZGUo
KS0+aGFzSUQoKSkKLSAgICAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldE5hbWUocmVu
ZGVyZXIoKS0+cmVuZGVyTmFtZSgpICsgU3RyaW5nKCIgIikgKyBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudCo+KHJlbmRlcmVyKCktPm5vZGUoKSktPmdldEF0dHJpYnV0ZShpZEF0dHIpKTsKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldE5hbWUocmVuZGVyZXIoKS0+cmVuZGVyTmFt
ZSgpICsgU3RyaW5nKCIgIikgKyBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KHJlbmRlcmVyKCkt
Pm5vZGUoKSktPmdldEF0dHJpYnV0ZShpZEF0dHJpYnV0ZU5hbWUoKSkpOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0TmFtZShyZW5kZXJlcigp
LT5yZW5kZXJOYW1lKCkpOwogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI1LDcgKzUyNSw3
IEBAIHZvaWQgd3JpdGVSZW5kZXJSZXNvdXJjZXMoVGV4dFN0cmVhbSYgdHMKICAgICAgICAgaWYg
KCFyZXNvdXJjZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFN0cmluZyBlbGVt
ZW50SWQgPSBzdmdFbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpOworICAg
ICAgICBTdHJpbmcgZWxlbWVudElkID0gc3ZnRWxlbWVudC0+Z2V0QXR0cmlidXRlKHN2Z0VsZW1l
bnQtPmlkQXR0cmlidXRlTmFtZSgpKTsKICAgICAgICAgLy8gRklYTUU6IFRoZXNlIG5hbWVzIGFy
ZSBsaWVzIQogICAgICAgICBpZiAocmVzb3VyY2UtPmlzUGFpbnRTZXJ2ZXIoKSkgewogICAgICAg
ICAgICAgUmVmUHRyPFNWR1BhaW50U2VydmVyPiBwYWludFNlcnZlciA9IFdURjo6c3RhdGljX3Bv
aW50ZXJfY2FzdDxTVkdQYWludFNlcnZlcj4ocmVzb3VyY2UpOwpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50b0Rv
Y3VtZW50KCkKICAgICBTdHlsZWRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAg
IFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IGRvY3VtZW50KCktPmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKTsKIAotICAgIFN0cmluZyByZXNvdXJjZUlkID0gU1ZHVVJJUmVmZXJlbmNl
OjpnZXRUYXJnZXQoZ2V0QXR0cmlidXRlKGlkQXR0cikpOworICAgIFN0cmluZyByZXNvdXJjZUlk
ID0gU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQoZ2V0QXR0cmlidXRlKGlkQXR0cmlidXRlTmFt
ZSgpKSk7CiAgICAgaWYgKGV4dGVuc2lvbnMtPmlzUGVuZGluZ1Jlc291cmNlKHJlc291cmNlSWQp
KSB7CiAgICAgICAgIHN0ZDo6YXV0b19wdHI8SGFzaFNldDxTVkdTdHlsZWRFbGVtZW50Kj4gPiBj
bGllbnRzKGV4dGVuc2lvbnMtPnJlbW92ZVBlbmRpbmdSZXNvdXJjZShyZXNvdXJjZUlkKSk7CiAg
ICAgICAgIGlmIChjbGllbnRzLT5pc0VtcHR5KCkpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHls
ZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50
LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDcgKzE4OSw3IEBAIGJvb2wgU1ZHU3R5bGVkRWxlbWVu
dDo6aXNLbm93bkF0dHJpYnV0ZSgKICAgICBpZiAocHJvcElkID4gMCkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICByZXR1cm4gKGF0dHJOYW1lID09IEhUTUxOYW1lczo6aWRBdHRyIHx8IGF0
dHJOYW1lID09IEhUTUxOYW1lczo6c3R5bGVBdHRyKTsgCisgICAgcmV0dXJuIChhdHRyTmFtZSA9
PSBpZEF0dHJpYnV0ZU5hbWUoKSB8fCBhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OnN0eWxlQXR0cik7
IAogfQogCiB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNwcAkocmV2aXNpb24gNTIw
OTIpCisrKyBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAs
NyArNjAsNyBAQCBib29sIFdNTEVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmCiAgICAg
CiB2b2lkIFdNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSog
YXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IEhUTUxOYW1lczo6aWRBdHRyCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKQogICAgICAgICB8fCBhdHRyLT5u
YW1lKCkgPT0gSFRNTE5hbWVzOjpjbGFzc0F0dHIKICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09
IEhUTUxOYW1lczo6c3R5bGVBdHRyKQogICAgICAgICByZXR1cm4gU3R5bGVkRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MjEwNikKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDA5
LTEyLTE0ICBTaHUgQ2hhbmcgIDxDaGFuZy5TaHVAbm9raWEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyB0ZXN0IGNhc2VzIGZvciBpc0lk
IHN1cHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NTc4CisKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNC1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQuanM6
CisgICAgICAgIChzZXRVcFBhZ2UpOgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9h
dHRyaXNpZDA1LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUv
YXR0cmlzaWQwNS5qczoKKyAgICAgICAgKHNldFVwUGFnZSk6CisgICAgICAgICogZmFzdC9kb20v
RWxlbWVudC9hdHRyaXNpZC1leHRyYTAxLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vRWxlbWVudC9hdHRyaXNpZC1leHRyYTAxLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tYXBwbGV0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1hcHBsZXQuaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1kZWxldGVidXR0b24tZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLWRlbGV0ZWJ1dHRvbi5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLWZvcm1jb2xsZWN0aW9uLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mb3Jt
Y29sbGVjdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWlu
LWZyYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9p
ZC1pbi1mcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWlu
LWZyYW1lc2V0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVu
dC9pZC1pbi1mcmFtZXNldC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50
L2lkLWluLWdldGVsZW1lbnQwMS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZG9tL0VsZW1lbnQvaWQtaW4tZ2V0ZWxlbWVudDAxLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZG9tL0VsZW1lbnQvaWQtaW4taW5zZXJ0LWhyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1pbnNlcnQtaHIuaHRtbDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1tYXAtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLW1hcC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLXBhcmFtLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1wYXJhbS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2ZvbnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2ZvbnQuc3ZnOiBBZGRlZC4KKwogMjAw
OS0xMi0xNCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBOb3QgcmV2aWV3ZWQsIGJ1aWxkIGZpeC4KSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9s
ZXZlbDMvY29yZS9hdHRyaXNpZDA0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDUyMDkyKQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lk
MDQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRw
Oi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQK
LVN0YXR1cwlza2lwCi1NZXNzYWdlCUhUTUwgbG9hZGVyIGRvZXMgbm90IHN1cHBvcnQgdmFsaWRh
dGluZz10cnVlCitTdGF0dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xl
dmVsMy9jb3JlL2F0dHJpc2lkMDQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3ho
dG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQuanMJKHJldmlzaW9uIDUyMDkyKQorKysgTGF5b3V0
VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQuanMJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDcgKzM5LDggQEAgZnVuY3Rpb24gc2V0VXBQYWdlKCkgewogICAgICAvLyAgIGNyZWF0
ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCiAgICAgIC8vCiAg
ICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOwotICAgICAgIHNldEltcGxl
bWVudGF0aW9uQXR0cmlidXRlKCJ2YWxpZGF0aW5nIiwgdHJ1ZSk7CisgICAgIC8vIFJlbW92ZSB0
aGUgZm9sbG93aW5nIGxpbmUgb3RoZXJld2lzZSB0ZXN0IGNhc2Ugc2tpcHBlZC4KKyAgICAgLy9z
ZXRJbXBsZW1lbnRhdGlvbkF0dHJpYnV0ZSgidmFsaWRhdGluZyIsIHRydWUpOwogCiAgICAgICBk
b2NzTG9hZGVkID0gMDsKICAgICAgIApJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVs
My9jb3JlL2F0dHJpc2lkMDUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2RvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA1LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
NTIwOTIpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNS1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93
d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNQotU3Rh
dHVzCXNraXAKLU1lc3NhZ2UJSFRNTCBsb2FkZXIgZG9lcyBub3Qgc3VwcG9ydCB2YWxpZGF0aW5n
PXRydWUKK1N0YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwz
L2NvcmUvYXR0cmlzaWQwNS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwv
bGV2ZWwzL2NvcmUvYXR0cmlzaWQwNS5qcwkocmV2aXNpb24gNTIwOTIpCisrKyBMYXlvdXRUZXN0
cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksOCBAQCBmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CiAgICAgIC8vICAgY3JlYXRlcyB0
ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KICAgICAgLy8KICAgICAg
YnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7Ci0gICAgICAgc2V0SW1wbGVtZW50
YXRpb25BdHRyaWJ1dGUoInZhbGlkYXRpbmciLCB0cnVlKTsKKyAgICAgLy8gUmVtb3ZlIHRoZSBm
b2xsb3dpbmcgbGluZSBvdGhlcmV3aXNlIHRlc3QgY2FzZSBza2lwcGVkLgorICAgICAvL3NldElt
cGxlbWVudGF0aW9uQXR0cmlidXRlKCJ2YWxpZGF0aW5nIiwgdHJ1ZSk7CiAKICAgICAgIGRvY3NM
b2FkZWQgPSAwOwogICAgICAgCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2F0
dHJpc2lkLWV4dHJhMDEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZG9tL0VsZW1lbnQvYXR0cmlzaWQtZXh0cmEwMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2F0dHJpc2lkLWV4dHJhMDEtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACitUZXN0IEF0dHIuaXNJZCB3aGVy
ZSBBdHRyIGlzIGNyZWF0ZWQgd2l0aG91dCBlbGVtZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworUEFTUyBhdHRyLmlzSWQgaXMgZmFsc2UKK1BBU1MgYXR0ci5pc0lkIGlzIHRy
dWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2F0dHJpc2lkLWV4dHJhMDEuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2F0dHJpc2lkLWV4dHJh
MDEuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvYXR0
cmlzaWQtZXh0cmEwMS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACis8aHRtbD4K
KzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlv
bigiVGVzdCBBdHRyLmlzSWQgd2hlcmUgQXR0ciBpcyBjcmVhdGVkIHdpdGhvdXQgZWxlbWVudC4i
KTsKKyAgICAKK3ZhciBhdHRyID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlTlMoImh0dHA6Ly93
d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpsYW5nIik7CitzaG91bGRCZUZhbHNl
KCdhdHRyLmlzSWQnKTsKKwordmFyIGF0dHIgPSBkb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGVOUygi
IiwiaWQiKTsKK3Nob3VsZEJlVHJ1ZSgnYXR0ci5pc0lkJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWFwcGxldC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1hcHBsZXQtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1p
bi1hcHBsZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0
IHVzaW5nIGlkIGluIGFwcGxldCBlbGVtZW50CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcHBsZXQxIikgaXMgbm9uLW51bGwu
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1hcHBsZXQuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWFwcGxldC5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1hcHBsZXQu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8YXBwbGV0IGlkPSJhcHBsZXQxIiB3aWR0aD0iMTAiIGhl
aWdodD0iMTAiPjwvYXBwbGV0PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdXNpbmcg
aWQgaW4gYXBwbGV0IGVsZW1lbnQiKTsKKworc2hvdWxkQmVOb25OdWxsKCdkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiYXBwbGV0MSIpJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9FbGVtZW50L2lkLWluLWRlbGV0ZWJ1dHRvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1kZWxldGVidXR0b24tZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1p
bi1kZWxldGVidXR0b24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBA
CitUZXN0IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJXZWJLaXQtRWRpdGluZy1EZWxldGUtQnV0
dG9uIikKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZGVsZXRlQnV0dG9u
IGlzIG5vbi1udWxsLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisxCisyCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4t
ZGVsZXRlYnV0dG9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxl
bWVudC9pZC1pbi1kZWxldGVidXR0b24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZGVsZXRlYnV0dG9uLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjkgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KworPGRpdiBjb250ZW50ZWRpdGFibGU9InRydWUiPgorPHVsIGNsYXNzPSJuZWVkc0RlbGV0aW9u
VUkiPjxsaT4xPC9saT48bGkgaWQ9ImxpIj4yPC9saT48L3VsPgorCis8c2NyaXB0PgorZGVzY3Jp
cHRpb24oJ1Rlc3QgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIldlYktpdC1FZGl0aW5nLURlbGV0
ZS1CdXR0b24iKScpOworCitzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CitsaSA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJsaSIpOworc2VsLnNldFBvc2l0aW9uKGxpLCAwKTsKKworaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGRlbGV0ZUJ1dHRvbiA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJXZWJLaXQtRWRpdGluZy1EZWxldGUtQnV0dG9uIik7CisgICAg
c2hvdWxkQmVOb25OdWxsKCdkZWxldGVCdXR0b24nKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZm9ybWNvbGxlY3Rpb24tZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZm9ybWNv
bGxlY3Rpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9k
b20vRWxlbWVudC9pZC1pbi1mb3JtY29sbGVjdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgdXNpbmcgaWQgaW4gSFRNTEZvcm1Db2xsZWN0aW9uCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGVsZW1zKCJpZHMxIiwxKS5nZXRB
dHRyaWJ1dGUoIm5hbWUiKSBpcyAibmFtZTIiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKyAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1l
bnQvaWQtaW4tZm9ybWNvbGxlY3Rpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9FbGVtZW50L2lkLWluLWZvcm1jb2xsZWN0aW9uLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWZvcm1jb2xsZWN0aW9uLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjUgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKworPGZvcm0gaWQ9ImlkZjEiPgorPHNlbGVjdCBpZD0iaWRzMSIgbmFt
ZT0ibmFtZTEiPjxvcHRpb24gc2VsZWN0ZWQ+RkFJTFVSRTwvb3B0aW9uPjwvc2VsZWN0PgorPHNl
bGVjdCBpZD0iaWRzMSIgbmFtZT0ibmFtZTIiPjxvcHRpb24gc2VsZWN0ZWQ+RkFJTFVSRTwvb3B0
aW9uPjwvc2VsZWN0PgorPC9mb3JtPgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdXNp
bmcgaWQgaW4gSFRNTEZvcm1Db2xsZWN0aW9uIik7CisKK3ZhciBlbGVtcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJpZGYxIikuZWxlbWVudHM7CitzaG91bGRCZSgnZWxlbXMoImlkczEiLDEp
LmdldEF0dHJpYnV0ZSgibmFtZSIpJywgJyJuYW1lMiInKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWUtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWUtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1m
cmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgdXNp
bmcgaWQgaW4gZnJhbWUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRoZWZyYW1lIikgaXMgbm9uLW51bGwuCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWUuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdXNpbmcgaWQgaW4gZnJhbWUiKTsK
KyAgICAKK3ZhciBwYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKK3Bh
cmVudC5pZCA9ICd0aGVmcmFtZSc7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBhcmVudCk7
CisKK3Nob3VsZEJlTm9uTnVsbCgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRoZWZyYW1lIikn
KTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJh
bWVzZXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0Vs
ZW1lbnQvaWQtaW4tZnJhbWVzZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZXNldC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMiBAQAorQUxFUlQ6IDEKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZXNldC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWVzZXQuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWVzZXQuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+CisKKzxmcmFtZXNldCBpZD0iZnJhbWVzZXQi
PgorICA8ZnJhbWUgbmFtZT0iZnJhbWUyIiBzcmM9ImFib3V0OmJsYW5rIj4KKyAgPGZyYW1lIG5h
bWU9ImZyYW1lMSIgc3JjPSJqYXZhc2NyaXB0OgorICAgIGZ1bmN0aW9uIGxvZyhzKQorICAgIHsK
KyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGFsZXJ0KHMp
OworICAgICAgZWxzZQorICAgICAgICB0b3AuZnJhbWUxLmRvY3VtZW50LndyaXRlKCc8cD4nICsg
cyArICc8L3A+Jyk7CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgIHRvcC5m
cmFtZXNldC5yZW1vdmVDaGlsZCh0b3AuZnJhbWUyLmZyYW1lRWxlbWVudCk7CisgICAgbG9nKHRv
cC5mcmFtZXNldC5jaGlsZHJlbi5sZW5ndGgpOworICAiPgorCisgIDxmcmFtZSBuYW1lPSJmcmFt
ZTMiIHNyYz0iYWJvdXQ6YmxhbmsiPgorPC9mcmFtZXNldD4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZ2V0ZWxlbWVudDAxLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWdldGVsZW1l
bnQwMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9F
bGVtZW50L2lkLWluLWdldGVsZW1lbnQwMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTIgQEAKK1Rlc3QgZ2V0RWxlbWVudEJ5SWQKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgZWxlbS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSBpcyAibmFtZTEiCitQQVNT
IGVsZW0uZ2V0QXR0cmlidXRlKCJuYW1lIikgaXMgIm5hbWUyIgorUEFTUyBlbGVtIGlzIG51bGwK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWdldGVsZW1lbnQwMS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZ2V0ZWxlbWVu
dDAxLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lk
LWluLWdldGVsZW1lbnQwMS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACis8aHRt
bD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxkaXYgbmFtZT0nbmFtZTEn
IGlkPSdpZDEnLz4KKzxkaXYgbmFtZT0nbmFtZTInIGlkPSdpZDInLz4KKzxkaXYgbmFtZT0nbmFt
ZTMnIGlkPSdpZDInLz4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IGdldEVsZW1lbnRC
eUlkIik7CisKK3ZhciBlbGVtOworCisvLyBlbGVtZW50IGZvdW5kIHdpdGggZXhhY3QgbWF0Y2gK
K2VsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWQxJyk7CitzaG91bGRCZSgnZWxlbS5n
ZXRBdHRyaWJ1dGUoIm5hbWUiKScsICcibmFtZTEiJyk7CisKKy8vIG11bHRpcGxlIGVsZW1lbnRz
IGhhdmluZyBzYW1lIGlkIHJldHVybiB0aGUgZmlyc3Qgb25lCitlbGVtID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2lkMicpOworc2hvdWxkQmUoJ2VsZW0uZ2V0QXR0cmlidXRlKCJuYW1lIikn
LCAnIm5hbWUyIicpOworCisvLyBlbGVtZW50IHdpdGggaWQgbm90IGZvdW5kCitlbGVtID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMycpOworc2hvdWxkQmVOdWxsKCdlbGVtJyk7CisKK3Zh
ciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWluc2VydC1oci1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9p
ZC1pbi1pbnNlcnQtaHItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1pbnNlcnQtaHItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwIEBACitUZXN0IHVzaW5nIGlkIGluIGV4ZWNDb21tYW5kKEluc2VydEhv
cml6b250YWxSdWxlKQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBociBp
cyBub24tbnVsbC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorZm9vYmFyCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWlu
c2VydC1oci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQv
aWQtaW4taW5zZXJ0LWhyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9FbGVtZW50L2lkLWluLWluc2VydC1oci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5
IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlk
PSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxkaXYgaWQ9
InRlc3QxIiBjb250ZW50ZWRpdGFibGU9InRydWUiPmZvb2JhcjwvZGl2PgorCis8c2NyaXB0Pgor
ZGVzY3JpcHRpb24oIlRlc3QgdXNpbmcgaWQgaW4gZXhlY0NvbW1hbmQoSW5zZXJ0SG9yaXpvbnRh
bFJ1bGUpIik7CisKK3ZhciBzID0gd2luZG93LmdldFNlbGVjdGlvbigpOwordmFyIGUgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdDEiKTsKK3Muc2V0UG9zaXRpb24oZSwgMCk7CisKK3Zh
ciBpZCA9ICJociI7Citkb2N1bWVudC5leGVjQ29tbWFuZCgiSW5zZXJ0SG9yaXpvbnRhbFJ1bGUi
LCBmYWxzZSwgaWQpOwordmFyIGhyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworCitz
aG91bGRCZU5vbk51bGwoJ2hyJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9FbGVtZW50L2lkLWluLW1hcC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1tYXAtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1tYXAtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0IHVzaW5nIGlkIGluIG1hcCBlbGVtZW50
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiZmlyc3RtYXAiKSBpcyBub24tbnVsbC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9F
bGVtZW50L2lkLWluLW1hcC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9t
L0VsZW1lbnQvaWQtaW4tbWFwLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9FbGVtZW50L2lkLWluLW1hcC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBA
Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJk
ZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxtYXAgdGl0bGU9
Im1hcCIgaWQ9ImZpcnN0bWFwIj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IHVzaW5n
IGlkIGluIG1hcCBlbGVtZW50LiIpOworICAgIAorc2hvdWxkQmVOb25OdWxsKCdkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiZmlyc3RtYXAiKScpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1wYXJhbS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1wYXJhbS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXBhcmFtLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdCB1c2luZyBpZCBp
biBwYXJhbSBlbGVtZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWQxIikgaXMgbm9uLW51bGwuCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1wYXJhbS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tcGFyYW0uaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tcGFyYW0uaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorICAgIAorPG9iamVjdCB3aWR0aD0xMDAgaGVpZ2h0PTEwMD4KKyAgPHBhcmFtIG5hbWU9Im1v
dmllIiBpZD0iaWQxIj4KKzwvb2JqZWN0PiAgICAKKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJU
ZXN0IHVzaW5nIGlkIGluIHBhcmFtIGVsZW1lbnQuIik7CisKK3Nob3VsZEJlTm9uTnVsbCgnZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkMSIpJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2ZvbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tc3ZnZm9udC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2
Z2ZvbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK2xheWVyIGF0
ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAor
bGF5ZXIgYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgIFJlbmRlclNWR1Jvb3Qge3N2Z30gYXQgKDAs
LTMpIHNpemUgNDB4MworICAgIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lciB7ZGVmc30gYXQgKDAs
MCkgc2l6ZSAweDAKKyAgICAgIFJlbmRlclBhdGgge3BhdGh9IGF0ICgwLDApIHNpemUgNDcyN3g1
OCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDAwMDAwXX1dIFtkYXRhPSJNIDAgMEwgMCA0
MkwgMTYgNThMIDQ3MjcgNTgiXQorICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNp
emUgNDB4MyBjb250YWlucyAxIGNodW5rKHMpCisgICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0IHsj
dGV4dH0gYXQgKDAsLTMpIHNpemUgNDB4MworICAgICAgICBjaHVuayAxIHRleHQgcnVuIDEgYXQg
KDAuMDAsMC4wMCkgc3RhcnRPZmZzZXQgMCBlbmRPZmZzZXQgMSB3aWR0aCA0MC4wMDogIlgiCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2ZvbnQuc3ZnCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tc3ZnZm9udC5zdmcJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2Zv
bnQuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAi
Pz4KKzw/eG1sLXN0eWxlc2hlZXQgaHJlZj0iZGF0YTp0ZXh0L2Nzcyx0ZXh0JTdCZm9udC1mYW1p
bHklM0FBQ0lEM3N2Z2ZvbnQlN0QiPz4KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9
IjEwMCIgaGVpZ2h0PSIxMDAiPgorICAgIDxkZWZzPgorICAgICAgICA8Zm9udC1mYWNlIGZvbnQt
ZmFtaWx5PSJBQ0lEM3N2Z2ZvbnQiPgorICAgICAgICAgICAgPGZvbnQtZmFjZS1zcmM+CisgICAg
ICAgICAgICAgICAgPGZvbnQtZmFjZS11cmkgeGxpbms6aHJlZj0iLi4vLi4vLi4vc3ZnL2N1c3Rv
bS9yZXNvdXJjZXMvQWNpZDNGb250LnN2ZyNtaW5pIi8+CisgICAgICAgICAgICA8L2ZvbnQtZmFj
ZS1zcmM+CisgICAgICAgIDwvZm9udC1mYWNlPgorICAgICAgICA8cGF0aCBpZD0icGF0aCIgZD0i
TTAgMGwwIDQybDE2IDE2bDQ3MTEgMCIvPgorICAgIDwvZGVmcz4KKyAgICA8dGV4dD5YPC90ZXh0
PgorPC9zdmc+Cg==
</data>
<flag name="review"
          id="26820"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44934</attachid>
            <date>2009-12-15 19:09:10 -0800</date>
            <delta_ts>2010-01-06 23:33:38 -0800</delta_ts>
            <desc>fix broken build and some minor changes</desc>
            <filename>bug5578_6.patch</filename>
            <type>text/plain</type>
            <size>55457</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODkgQEAKKzIwMDktMTItMTQgIFNodSBDaGFuZyAgPENoYW5nLlNodUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50ZWQgaXNJZCBhcyBzcGVjaWZpZWQgYnkgRE9NIExldmVsIDMuIFNlZSBkZXRhaWxlZCBk
ZXNjcmlwdGlvbiBiZWxvdy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU1NzgKKworICAgICAgICBBZGRlZCBpc0lkIHByb3BlcnR5IGFuZCBpbXBsZW1l
bnRhdGlvbjoKKyAgICAgICAgVGVzdHM6IGRvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDAx
LTA3LnhodG1sCisgICAgICAgICAgICAgICBmYXN0L2RvbS9FbGVtZW50L2F0dHJpc2lkLWV4dHJh
MDEuaHRtbAorICAgICAgICAqIGRvbS9BdHRyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF0dHI6
OmlzSWQpOgorICAgICAgICAqIGRvbS9BdHRyLmg6CisgICAgICAgICogZG9tL0F0dHIuaWRsOgor
CisgICAgICAgIFJlcGxhY2VkIGluc3RhbmNlcyBvZiBIVE1MTmFtZXM6OmlkQXR0ciB3aXRoIEVs
ZW1lbnQ6OmlkQXR0cmlidXRlTmFtZSgpCisgICAgICAgIGZvciB0aGUgcmVhc29uIHRoYXQgaWQg
YXR0cmlidXRlIG5hbWUgY291bGQgYmUgY3VzdG9taXplZCB0byBhIGRpZmZlcmVudAorICAgICAg
ICBzdHJpbmcgb3RoZXIgdGhhbiAiaWQiLiBBIHRlc3QgY2FzZSBpcyBhc3NvY2lhdGVkIHRvIGVh
Y2ggY29kZSBjaGFuZ2UuCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpnZXRFbGVtZW50QnlJZCk6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQv
aWQtaW4tZ2V0ZWxlbWVudDAxLmh0bWwKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6IFRlc3Rz
OiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwMS0wNy54aHRtbAorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OnNldEF0dHJpYnV0ZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjppbnNlcnRlZElu
dG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbURvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmZvcm1hdEZvckRlYnVnZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJhcmVJREF0dHJpYnV0ZU5hbWUpOgorICAgICAgICAq
IGRvbS9FbGVtZW50Lmg6IEFkZGVkIGZ1bmN0aW9uIGlkQXR0cmlidXRlTmFtZSgpLgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6aWRBdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgKiBkb20vRWxl
bWVudFJhcmVEYXRhLmg6IEFkZGVkIG1lbWJlciB2YXJpYWJsZSB0byBzdG9yZSBjdXN0b21pemVk
IGlkIG5hbWUgaW4gRWxlbWVudFJhcmVEYXRhLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJh
cmVEYXRhOjpFbGVtZW50UmFyZURhdGEpOgorICAgICAgICAqIGRvbS9OYW1lZEF0dHJNYXAuY3Bw
OiBUZXN0czogZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDEtMDcueGh0bWwKKyAgICAg
ICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok5h
bWVkTm9kZU1hcDo6c2V0QXR0cmlidXRlcyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOiBSZW1v
dmVkIEFTU0VSVCBhcyBpdCBtYXkgbm90IGhvbGQgYW55IG1vcmUuCisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpxdWVyeVNlbGVjdG9yKToKKyAgICAgICAgKiBkb20vU2VsZWN0b3JOb2RlTGlzdC5j
cHA6IFJlbW92ZWQgQVNTRVJUIGFzIGl0IG1heSBub3QgaG9sZCBhbnkgbW9yZS4KKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZVNlbGVjdG9yTm9kZUxpc3QpOgorICAgICAgICAqIGRvbS9TdHlsZWRF
bGVtZW50LmNwcDogVGVzdHM6IGRvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDAxLTA3Lnho
dG1sCisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZSk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcDogVGVzdDog
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1kZWxldGVidXR0b24uaHRtbAorICAgICAgICAoV2ViQ29y
ZTo6RGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6Y3JlYXRlRGVsZXRpb25VSSk6CisgICAgICAgICog
ZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1p
bnNlcnQtaHIuaHRtbAorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZUluc2VydEhvcml6b250YWxS
dWxlKToKKyAgICAgICAgKiBodG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcDogVGVzdDogZmFzdC9k
b20vRWxlbWVudC9pZC1pbi1hcHBsZXQuaHRtbAorICAgICAgICAoV2ViQ29yZTo6SFRNTEFwcGxl
dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxB
cHBsZXRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogaHRtbC9IVE1MQ29sbGVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6Y2hlY2tGb3JOYW1l
TWF0Y2gpOiBUZXN0OiBmYXN0L2Zvcm1zL3NlbGVjdC1uYW1lZEl0ZW0uaHRtbAorICAgICAgICAo
V2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6IFRlc3Q6IGZhc3QvZG9t
L2NvbGxlY3Rpb24tbmFtZWRJdGVtLXZpYS1pdGVtLmh0bWwKKyAgICAgICAgKiBodG1sL0hUTUxE
YXRhR3JpZENvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERhdGFHcmlkQ29s
RWxlbWVudDo6ZW5zdXJlQ29sdW1uKTogVGVzdDogZmFzdC9kb20vSFRNTERhdGFHcmlkRWxlbWVu
dC9EYXRhR3JpZENvbHVtbnMtZG9tLmh0bWwKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEYXRhR3Jp
ZENvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogVGVzdDogZmFzdC9kb20vSFRNTERh
dGFHcmlkRWxlbWVudC9EYXRhR3JpZENvbHVtbnMtZG9tLWF0dHJpYnV0ZXMuaHRtbAorICAgICAg
ICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29sbGVjdGlv
bi5jcHA6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZm9ybWNvbGxlY3Rpb24uaHRtbAor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db2xsZWN0aW9uOjpnZXROYW1lZEZvcm1JdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVjdGlvbjo6bmV4dE5hbWVkSXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6IFRlc3Q6IGZhc3QvZG9tL0Vs
ZW1lbnQvaWQtaW4tZnJhbWUuaHRtbAorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVu
dEJhc2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFt
ZUVsZW1lbnRCYXNlOjpzZXROYW1lQW5kT3BlblVSTCk6CisgICAgICAgICogaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1kZWxldGVidXR0b24u
aHRtbAorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuY3BwOiBUZXN0OiBmYXN0L2Rv
bS9FbGVtZW50L2lkLWluLW1hcC5odG1sCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE5hbWVDb2xsZWN0
aW9uLmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZXNldC5odG1sCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTmFtZUNvbGxlY3Rpb246Oml0ZW1BZnRlcik6CisgICAgICAgICog
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6IFRlc3Q6IGZhc3QvZG9tL0hUTUxEb2N1bWVudC9v
YmplY3QtYnktbmFtZS1vci1pZC5odG1sCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTFBhcmFtRWxl
bWVudC5jcHA6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tcGFyYW0uaHRtbAorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFBhcmFtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAqIGxvYWRlci9DYWNoZWRGb250LmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1p
bi1zdmdmb250LnN2ZworICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkRm9udDo6Z2V0U1ZHRm9udEJ5
SWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjcmVhdGVHcmFwaGljc0xheWVyKTogRGVi
dWctb25seSBjb2RlCisgICAgICAgICogcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
OiBUZXN0OiBzdmcvdGV4dC90ZXh0LWdyYWRpZW50LXBvc2l0aW9uaW5nLnN2ZworICAgICAgICAo
V2ViQ29yZTo6d3JpdGVSZW5kZXJSZXNvdXJjZXMpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50
LmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1zdmdmb250LnN2ZworICAgICAgICAo
V2ViQ29yZTo6U1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAgICAqIHN2
Zy9TVkdTdHlsZWRFbGVtZW50LmNwcDogVGVzdDogc3ZnL2N1c3RvbS9qcy11cGRhdGUtaW1hZ2Ut
YW5kLWRpc3BsYXkuc3ZnCisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50Ojppc0tu
b3duQXR0cmlidXRlKToKKyAgICAgICAgKiB3bWwvV01MRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisKIDIwMDktMTItMTQg
IEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgUXVhcnR6Q29y
ZS1yZWxhdGVkIGJ1aWxkIHNldHRpbmdzIGludG8gYSB2c3Byb3BzIGZpbGUKSW5kZXg6IFdlYkNv
cmUvZG9tL0F0dHIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0F0dHIuY3BwCShyZXZp
c2lvbiA1MjA5MikKKysrIFdlYkNvcmUvZG9tL0F0dHIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKKwogaW5saW5lIEF0dHI6OkF0dHIoRWxlbWVudCogZWxlbWVudCwgRG9jdW1lbnQq
IGRvY3VtZW50LCBQYXNzUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlKQogICAgIDogQ29udGFp
bmVyTm9kZShkb2N1bWVudCkKICAgICAsIG1fZWxlbWVudChlbGVtZW50KQpAQCAtMTY0LDQgKzE2
Niw5IEBAIHZvaWQgQXR0cjo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEIKICAgICAgICAg
bV9lbGVtZW50LT5hdHRyaWJ1dGVDaGFuZ2VkKG1fYXR0cmlidXRlLmdldCgpKTsKIH0KIAorYm9v
bCBBdHRyOjppc0lkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcXVhbGlmaWVkTmFtZSgpLm1hdGNo
ZXMobV9lbGVtZW50ID8gbV9lbGVtZW50LT5pZEF0dHJpYnV0ZU5hbWUoKSA6IGlkQXR0cik7Cit9
CisKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0F0dHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9BdHRyLmgJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9kb20vQXR0ci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw2ICs1Miw4IEBAIHB1YmxpYzoKICAgICBBdHRyaWJ1dGUqIGF0dHIoKSBj
b25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZS5nZXQoKTsgfQogICAgIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHF1YWxpZmllZE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZS0+bmFtZSgpOyB9
CiAKKyAgICBib29sIGlzSWQoKSBjb25zdDsKKwogICAgIC8vIEFuIGV4dGVuc2lvbiB0byBnZXQg
cHJlc2VudGF0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGF0dHJpYnV0ZXMuCiAgICAgQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUoKSB7IHJldHVybiBtX2F0dHJpYnV0ZS0+c3R5bGUoKTsgfQogCklu
ZGV4OiBXZWJDb3JlL2RvbS9BdHRyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9BdHRy
LmlkbAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2RvbS9BdHRyLmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNyArMzgsMTEgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICAvLyBET00gTGV2
ZWwgMgogCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBFbGVtZW50IG93bmVyRWxlbWVudDsK
LSAgICAgICAgCisKKyAgICAgICAgLy8gRE9NIExldmVsIDMKKworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgYm9vbGVhbiBpc0lkOworCiAgICAgICAgIC8vIGV4dGVuc2lvbnMKICNpZiAhZGVm
aW5lZChMQU5HVUFHRV9DT00pIHx8ICFMQU5HVUFHRV9DT00KICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIENTU1N0eWxlRGVjbGFyYXRpb24gc3R5bGU7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lv
biA1MjA5MikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODU2LDcgKzg1Niw3IEBAIEVsZW1lbnQqIERvY3VtZW50OjpnZXRFbGVtZW50QnlJZChjb25zdCAK
ICAgICAgICAgZm9yIChOb2RlICpuID0gdHJhdmVyc2VOZXh0Tm9kZSgpOyBuICE9IDA7IG4gPSBu
LT50cmF2ZXJzZU5leHROb2RlKCkpIHsKICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2Rl
KCkpIHsKICAgICAgICAgICAgICAgICBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4p
OwotICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmdldEF0
dHJpYnV0ZShpZEF0dHIpID09IGVsZW1lbnRJZCkgeworICAgICAgICAgICAgICAgIGlmIChlbGVt
ZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmdldEF0dHJpYnV0ZShlbGVtZW50LT5pZEF0dHJpYnV0
ZU5hbWUoKSkgPT0gZWxlbWVudElkKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fZHVwbGljYXRl
SWRzLnJlbW92ZShlbGVtZW50SWQuaW1wbCgpKTsKICAgICAgICAgICAgICAgICAgICAgbV9lbGVt
ZW50c0J5SWQuc2V0KGVsZW1lbnRJZC5pbXBsKCksIGVsZW1lbnQpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbWVudDsKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzIsNyArNTMyLDcgQEAg
dm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljUwogCiAgICAgZG9jdW1lbnQo
KS0+aW5jRE9NVHJlZVZlcnNpb24oKTsKIAotICAgIGlmIChsb2NhbE5hbWUgPT0gaWRBdHRyLmxv
Y2FsTmFtZSgpKQorICAgIGlmIChsb2NhbE5hbWUgPT0gaWRBdHRyaWJ1dGVOYW1lKCkubG9jYWxO
YW1lKCkpCiAgICAgICAgIHVwZGF0ZUlkKG9sZCA/IG9sZC0+dmFsdWUoKSA6IG51bGxBdG9tLCB2
YWx1ZSk7CiAgICAgCiAgICAgaWYgKG9sZCAmJiB2YWx1ZS5pc051bGwoKSkKQEAgLTU1Miw3ICs1
NTIsNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpCiAgICAgLy8g
YWxsb2NhdGUgYXR0cmlidXRlbWFwIGlmIG5lY2Vzc2FyeQogICAgIEF0dHJpYnV0ZSogb2xkID0g
YXR0cmlidXRlcyhmYWxzZSktPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7CiAKLSAgICBpZiAobmFt
ZSA9PSBpZEF0dHIpCisgICAgaWYgKG5hbWUgPT0gaWRBdHRyaWJ1dGVOYW1lKCkpCiAgICAgICAg
IHVwZGF0ZUlkKG9sZCA/IG9sZC0+dmFsdWUoKSA6IG51bGxBdG9tLCB2YWx1ZSk7CiAgICAgCiAg
ICAgaWYgKG9sZCAmJiB2YWx1ZS5pc051bGwoKSkKQEAgLTYwNyw4ICs2MDcsOSBAQCB2b2lkIEVs
ZW1lbnQ6OnNldEF0dHJpYnV0ZU1hcChQYXNzUmVmUHRyCiAKICAgICAvLyBJZiBzZXR0aW5nIHRo
ZSB3aG9sZSBtYXAgY2hhbmdlcyB0aGUgaWQgYXR0cmlidXRlLCB3ZSBuZWVkIHRvIGNhbGwgdXBk
YXRlSWQuCiAKLSAgICBBdHRyaWJ1dGUqIG9sZElkID0gbmFtZWRBdHRyTWFwID8gbmFtZWRBdHRy
TWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGlkQXR0cikgOiAwOwotICAgIEF0dHJpYnV0ZSogbmV3SWQg
PSBsaXN0ID8gbGlzdC0+Z2V0QXR0cmlidXRlSXRlbShpZEF0dHIpIDogMDsKKyAgICBjb25zdCBR
dWFsaWZpZWROYW1lJiBpZE5hbWUgPSBpZEF0dHJpYnV0ZU5hbWUoKTsKKyAgICBBdHRyaWJ1dGUq
IG9sZElkID0gbmFtZWRBdHRyTWFwID8gbmFtZWRBdHRyTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGlk
TmFtZSkgOiAwOworICAgIEF0dHJpYnV0ZSogbmV3SWQgPSBsaXN0ID8gbGlzdC0+Z2V0QXR0cmli
dXRlSXRlbShpZE5hbWUpIDogMDsKIAogICAgIGlmIChvbGRJZCB8fCBuZXdJZCkKICAgICAgICAg
dXBkYXRlSWQob2xkSWQgPyBvbGRJZC0+dmFsdWUoKSA6IG51bGxBdG9tLCBuZXdJZCA/IG5ld0lk
LT52YWx1ZSgpIDogbnVsbEF0b20pOwpAQCAtNzEzLDcgKzcxNCw3IEBAIHZvaWQgRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogCiAgICAgaWYgKGhhc0lEKCkpIHsKICAgICAgICAgaWYg
KE5hbWVkTm9kZU1hcCogYXR0cnMgPSBuYW1lZEF0dHJNYXAuZ2V0KCkpIHsKLSAgICAgICAgICAg
IEF0dHJpYnV0ZSogaWRJdGVtID0gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oaWRBdHRyKTsKKyAg
ICAgICAgICAgIEF0dHJpYnV0ZSogaWRJdGVtID0gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oaWRB
dHRyaWJ1dGVOYW1lKCkpOwogICAgICAgICAgICAgaWYgKGlkSXRlbSAmJiAhaWRJdGVtLT5pc051
bGwoKSkKICAgICAgICAgICAgICAgICB1cGRhdGVJZChudWxsQXRvbSwgaWRJdGVtLT52YWx1ZSgp
KTsKICAgICAgICAgfQpAQCAtNzI0LDcgKzcyNSw3IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZy
b21Eb2N1bWVudCgpCiB7CiAgICAgaWYgKGhhc0lEKCkpIHsKICAgICAgICAgaWYgKE5hbWVkTm9k
ZU1hcCogYXR0cnMgPSBuYW1lZEF0dHJNYXAuZ2V0KCkpIHsKLSAgICAgICAgICAgIEF0dHJpYnV0
ZSogaWRJdGVtID0gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oaWRBdHRyKTsKKyAgICAgICAgICAg
IEF0dHJpYnV0ZSogaWRJdGVtID0gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oaWRBdHRyaWJ1dGVO
YW1lKCkpOwogICAgICAgICAgICAgaWYgKGlkSXRlbSAmJiAhaWRJdGVtLT5pc051bGwoKSkKICAg
ICAgICAgICAgICAgICB1cGRhdGVJZChpZEl0ZW0tPnZhbHVlKCksIG51bGxBdG9tKTsKICAgICAg
ICAgfQpAQCAtMTA3Myw3ICsxMDc0LDcgQEAgdm9pZCBFbGVtZW50Ojpmb3JtYXRGb3JEZWJ1Z2dl
cihjaGFyKiBidQogICAgICAgICByZXN1bHQgKz0gczsKICAgICB9CiAgICAgICAgICAgCi0gICAg
cyA9IGdldEF0dHJpYnV0ZShpZEF0dHIpOworICAgIHMgPSBnZXRBdHRyaWJ1dGUoaWRBdHRyaWJ1
dGVOYW1lKCkpOwogICAgIGlmIChzLmxlbmd0aCgpID4gMCkgewogICAgICAgICBpZiAocmVzdWx0
Lmxlbmd0aCgpID4gMCkKICAgICAgICAgICAgIHJlc3VsdCArPSAiOyAiOwpAQCAtMTQzMiw0ICsx
NDMzLDkgQEAgS1VSTCBFbGVtZW50OjpnZXRVUkxBdHRyaWJ1dGUoY29uc3QgUXVhbAogICAgIHJl
dHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChkZXByZWNhdGVkUGFyc2VVUkwoZ2V0QXR0cmli
dXRlKG5hbWUpKSk7CiB9CiAKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEVsZW1lbnQ6OnJhcmVJREF0
dHJpYnV0ZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiByYXJlRGF0YSgpLT5tX2lkQXR0cmli
dXRlTmFtZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20v
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkocmV2aXNpb24g
NTIwOTIpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKICNkZWZpbmUgRWxlbWVudF9oCiAKICNpbmNsdWRlICJDb250YWluZXJOb2RlLmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2lu
Y2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAKQEAgLTExMSw2ICsxMTIsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVOUyhj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBxdWFs
aWZpZWROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CiAK
KyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBpZEF0dHJpYnV0ZU5hbWUoKSBjb25zdDsKKwogICAg
IHZvaWQgc2Nyb2xsSW50b1ZpZXcoYm9vbCBhbGlnblRvVG9wID0gdHJ1ZSk7CiAgICAgdm9pZCBz
Y3JvbGxJbnRvVmlld0lmTmVlZGVkKGJvb2wgY2VudGVySWZOZWVkZWQgPSB0cnVlKTsKIApAQCAt
MjgyLDYgKzI4NSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93
ZWQoTm9kZVR5cGUpOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEF0dHJpYnV0ZT4gY3JlYXRl
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
KTsKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiByYXJlSURBdHRyaWJ1dGVOYW1lKCkgY29uc3Q7
CiAgICAgCiAjaWZuZGVmIE5ERUJVRwogICAgIHZpcnR1YWwgdm9pZCBmb3JtYXRGb3JEZWJ1Z2dl
cihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CkBAIC0zMzksNiArMzQzLDEx
IEBAIGlubGluZSBFbGVtZW50KiBOb2RlOjpwYXJlbnRFbGVtZW50KCkgY28KICAgICByZXR1cm4g
cGFyZW50ICYmIHBhcmVudC0+aXNFbGVtZW50Tm9kZSgpID8gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KHBhcmVudCkgOiAwOwogfQogCitpbmxpbmUgY29uc3QgUXVhbGlmaWVkTmFtZSYgRWxlbWVudDo6
aWRBdHRyaWJ1dGVOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IHJh
cmVJREF0dHJpYnV0ZU5hbWUoKSA6IEhUTUxOYW1lczo6aWRBdHRyOworfQorCiB9IC8vbmFtZXNw
YWNlCiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgJKHJldmlzaW9uIDUyMDkyKQor
KysgV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOworCiBjbGFzcyBFbGVtZW50UmFyZURhdGEgOiBwdWJsaWMgTm9kZVJhcmVEYXRhIHsKIHB1
YmxpYzoKICAgICBFbGVtZW50UmFyZURhdGEoKTsKQEAgLTM4LDYgKzQwLDcgQEAgcHVibGljOgog
CiAgICAgSW50U2l6ZSBtX21pbmltdW1TaXplRm9yUmVzaXppbmc7CiAgICAgUmVmUHRyPFJlbmRl
clN0eWxlPiBtX2NvbXB1dGVkU3R5bGU7CisgICAgUXVhbGlmaWVkTmFtZSBtX2lkQXR0cmlidXRl
TmFtZTsKIH07CiAKIGlubGluZSBJbnRTaXplIGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5n
KCkKQEAgLTQ3LDYgKzUwLDcgQEAgaW5saW5lIEludFNpemUgZGVmYXVsdE1pbmltdW1TaXplRm9y
UmVzaQogCiBpbmxpbmUgRWxlbWVudFJhcmVEYXRhOjpFbGVtZW50UmFyZURhdGEoKQogICAgIDog
bV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nKGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkp
CisgICAgLCBtX2lkQXR0cmlidXRlTmFtZShpZEF0dHIpCiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
ZG9tL05hbWVkQXR0ck1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZWRBdHRy
TWFwLmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBOYW1l
ZE5vZGVNYXA6OnNldE5hbWVkSQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpZiAo
YS0+bmFtZSgpID09IGlkQXR0cikKKyAgICBpZiAoYXR0ci0+aXNJZCgpKQogICAgICAgICBtX2Vs
ZW1lbnQtPnVwZGF0ZUlkKG9sZCA/IG9sZC0+dmFsdWUoKSA6IG51bGxBdG9tLCBhLT52YWx1ZSgp
KTsKIAogICAgIC8vICMjIyBzbGlnaHRseSBpbmVmZmljaWVudCAtIHJlc2l6ZXMgYXR0cmlidXRl
IGFycmF5IHR3aWNlLgpAQCAtMTU1LDkgKzE1NSw5IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWRO
b2RlTWFwOjpyZW1vdmVOYW0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgUmVmUHRy
PE5vZGU+IHIgPSBhLT5jcmVhdGVBdHRySWZOZWVkZWQobV9lbGVtZW50KTsKKyAgICBSZWZQdHI8
QXR0cj4gciA9IGEtPmNyZWF0ZUF0dHJJZk5lZWRlZChtX2VsZW1lbnQpOwogCi0gICAgaWYgKG5h
bWUgPT0gaWRBdHRyKQorICAgIGlmIChyLT5pc0lkKCkpCiAgICAgICAgIG1fZWxlbWVudC0+dXBk
YXRlSWQoYS0+dmFsdWUoKSwgbnVsbEF0b20pOwogCiAgICAgcmVtb3ZlQXR0cmlidXRlKG5hbWUp
OwpAQCAtMjQyLDggKzI0Miw4IEBAIHZvaWQgTmFtZWROb2RlTWFwOjpzZXRBdHRyaWJ1dGVzKGNv
bnN0IE4KIAogICAgIC8vIElmIGFzc2lnbmluZyB0aGUgbWFwIGNoYW5nZXMgdGhlIGlkIGF0dHJp
YnV0ZSwgd2UgbmVlZCB0byBjYWxsCiAgICAgLy8gdXBkYXRlSWQuCi0gICAgQXR0cmlidXRlICpv
bGRJZCA9IGdldEF0dHJpYnV0ZUl0ZW0oaWRBdHRyKTsKLSAgICBBdHRyaWJ1dGUgKm5ld0lkID0g
b3RoZXIuZ2V0QXR0cmlidXRlSXRlbShpZEF0dHIpOworICAgIEF0dHJpYnV0ZSogb2xkSWQgPSBn
ZXRBdHRyaWJ1dGVJdGVtKG1fZWxlbWVudC0+aWRBdHRyaWJ1dGVOYW1lKCkpOworICAgIEF0dHJp
YnV0ZSogbmV3SWQgPSBvdGhlci5nZXRBdHRyaWJ1dGVJdGVtKG1fZWxlbWVudC0+aWRBdHRyaWJ1
dGVOYW1lKCkpOwogCiAgICAgaWYgKG9sZElkIHx8IG5ld0lkKQogICAgICAgICBtX2VsZW1lbnQt
PnVwZGF0ZUlkKG9sZElkID8gb2xkSWQtPnZhbHVlKCkgOiBudWxsQXRvbSwgbmV3SWQgPyBuZXdJ
ZC0+dmFsdWUoKSA6IG51bGxBdG9tKTsKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNv
cmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUyLDcgKzE2NTIsNiBAQCBQYXNz
UmVmUHRyPEVsZW1lbnQ+IE5vZGU6OnF1ZXJ5U2VsZWN0b3IoCiAKICAgICAvLyBGSVhNRTogd2Ug
Y291bGQgYWxzbyBvcHRpbWl6ZSBmb3IgdGhlIHRoZSBbaWQ9ImZvbyJdIGNhc2UKICAgICBpZiAo
c3RyaWN0UGFyc2luZyAmJiBpbkRvY3VtZW50KCkgJiYgcXVlcnlTZWxlY3Rvckxpc3QuaGFzT25l
U2VsZWN0b3IoKSAmJiBxdWVyeVNlbGVjdG9yTGlzdC5maXJzdCgpLT5tX21hdGNoID09IENTU1Nl
bGVjdG9yOjpJZCkgewotICAgICAgICBBU1NFUlQocXVlcnlTZWxlY3Rvckxpc3QuZmlyc3QoKS0+
YXR0cmlidXRlKCkgPT0gaWRBdHRyKTsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvY3Vt
ZW50KCktPmdldEVsZW1lbnRCeUlkKHF1ZXJ5U2VsZWN0b3JMaXN0LmZpcnN0KCktPm1fdmFsdWUp
OwogICAgICAgICBpZiAoZWxlbWVudCAmJiAoaXNEb2N1bWVudE5vZGUoKSB8fCBlbGVtZW50LT5p
c0Rlc2NlbmRhbnRPZih0aGlzKSkgJiYgc2VsZWN0b3JDaGVja2VyLmNoZWNrU2VsZWN0b3IocXVl
cnlTZWxlY3Rvckxpc3QuZmlyc3QoKSwgZWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gZWxl
bWVudDsKSW5kZXg6IFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwCShyZXZpc2lvbiA1MjA5MikKKysr
IFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3
ICs1MCw2IEBAIFBhc3NSZWZQdHI8U3RhdGljTm9kZUxpc3Q+IGNyZWF0ZVNlbGVjdG8KICAgICBD
U1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGRvY3VtZW50
LCBzdHJpY3RQYXJzaW5nKTsKIAogICAgIGlmIChzdHJpY3RQYXJzaW5nICYmIHJvb3ROb2RlLT5p
bkRvY3VtZW50KCkgJiYgb25seVNlbGVjdG9yICYmIG9ubHlTZWxlY3Rvci0+bV9tYXRjaCA9PSBD
U1NTZWxlY3Rvcjo6SWQgJiYgIWRvY3VtZW50LT5jb250YWluc011bHRpcGxlRWxlbWVudHNXaXRo
SWQob25seVNlbGVjdG9yLT5tX3ZhbHVlKSkgewotICAgICAgICBBU1NFUlQocXVlcnlTZWxlY3Rv
ckxpc3QuZmlyc3QoKS0+YXR0cmlidXRlKCkgPT0gaWRBdHRyKTsKICAgICAgICAgRWxlbWVudCog
ZWxlbWVudCA9IGRvY3VtZW50LT5nZXRFbGVtZW50QnlJZChvbmx5U2VsZWN0b3ItPm1fdmFsdWUp
OwogICAgICAgICBpZiAoZWxlbWVudCAmJiAocm9vdE5vZGUtPmlzRG9jdW1lbnROb2RlKCkgfHwg
ZWxlbWVudC0+aXNEZXNjZW5kYW50T2Yocm9vdE5vZGUpKSAmJiBzZWxlY3RvckNoZWNrZXIuY2hl
Y2tTZWxlY3Rvcihvbmx5U2VsZWN0b3IsIGVsZW1lbnQpKQogICAgICAgICAgICAgbm9kZXMuYXBw
ZW5kKGVsZW1lbnQpOwpJbmRleDogV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDUyMDkyKQor
KysgV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw3
ICsyMzQsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OmNsYXNzQXR0cmlidXRlQ2hhbmdlCiAKIHZv
aWQgU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICph
dHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyKSB7CisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSkgewogICAgICAgICAvLyB1bmlxdWUgaWQKICAg
ICAgICAgc2V0SGFzSUQoIWF0dHItPmlzTnVsbCgpKTsKICAgICAgICAgaWYgKG5hbWVkQXR0ck1h
cCkgewpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAko
cmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIERlbGV0ZUJ1dHRv
bkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoCiB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OmNy
ZWF0ZURlbGV0aW9uVUkoKQogewogICAgIFJlZlB0cjxIVE1MRGl2RWxlbWVudD4gY29udGFpbmVy
ID0gbmV3IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgbV90YXJnZXQtPmRvY3VtZW50KCkpOwotICAg
IGNvbnRhaW5lci0+c2V0QXR0cmlidXRlKGlkQXR0ciwgY29udGFpbmVyRWxlbWVudElkZW50aWZp
ZXIpOworICAgIGNvbnRhaW5lci0+c2V0QXR0cmlidXRlKGNvbnRhaW5lci0+aWRBdHRyaWJ1dGVO
YW1lKCksIGNvbnRhaW5lckVsZW1lbnRJZGVudGlmaWVyKTsKIAogICAgIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSA9IGNvbnRhaW5lci0+Z2V0SW5saW5lU3R5bGVEZWNsKCk7CiAg
ICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWcsIENTU1ZhbHVl
Tm9uZSk7CkBAIC0yMDIsNyArMjAyLDcgQEAgdm9pZCBEZWxldGVCdXR0b25Db250cm9sbGVyOjpj
cmVhdGVEZWxldAogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsICIwIik7
CiAKICAgICBSZWZQdHI8SFRNTERpdkVsZW1lbnQ+IG91dGxpbmUgPSBuZXcgSFRNTERpdkVsZW1l
bnQoZGl2VGFnLCBtX3RhcmdldC0+ZG9jdW1lbnQoKSk7Ci0gICAgb3V0bGluZS0+c2V0QXR0cmli
dXRlKGlkQXR0ciwgb3V0bGluZUVsZW1lbnRJZGVudGlmaWVyKTsKKyAgICBvdXRsaW5lLT5zZXRB
dHRyaWJ1dGUob3V0bGluZS0+aWRBdHRyaWJ1dGVOYW1lKCksIG91dGxpbmVFbGVtZW50SWRlbnRp
Zmllcik7CiAKICAgICBjb25zdCBpbnQgYm9yZGVyV2lkdGggPSA0OwogICAgIGNvbnN0IGludCBi
b3JkZXJSYWRpdXMgPSA2OwpAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29u
dHJvbGxlcjo6Y3JlYXRlRGVsZXQKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPERlbGV0
ZUJ1dHRvbj4gYnV0dG9uID0gbmV3IERlbGV0ZUJ1dHRvbihtX3RhcmdldC0+ZG9jdW1lbnQoKSk7
Ci0gICAgYnV0dG9uLT5zZXRBdHRyaWJ1dGUoaWRBdHRyLCBidXR0b25FbGVtZW50SWRlbnRpZmll
cik7CisgICAgYnV0dG9uLT5zZXRBdHRyaWJ1dGUoYnV0dG9uLT5pZEF0dHJpYnV0ZU5hbWUoKSwg
YnV0dG9uRWxlbWVudElkZW50aWZpZXIpOwogCiAgICAgY29uc3QgaW50IGJ1dHRvbldpZHRoID0g
MzA7CiAgICAgY29uc3QgaW50IGJ1dHRvbkhlaWdodCA9IDMwOwpJbmRleDogV2ViQ29yZS9lZGl0
aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9y
Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MSw3ICs0NzEsNyBAQCBzdGF0aWMgYm9v
bCBleGVjdXRlSW5zZXJ0SG9yaXpvbnRhbFJ1bGUoCiB7CiAgICAgUmVmUHRyPEhUTUxIUkVsZW1l
bnQ+IGhyID0gbmV3IEhUTUxIUkVsZW1lbnQoaHJUYWcsIGZyYW1lLT5kb2N1bWVudCgpKTsKICAg
ICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgaHItPnNldEF0dHJpYnV0ZShpZEF0dHIs
IHZhbHVlKTsKKyAgICAgICAgaHItPnNldEF0dHJpYnV0ZShoci0+aWRBdHRyaWJ1dGVOYW1lKCks
IHZhbHVlKTsKICAgICByZXR1cm4gZXhlY3V0ZUluc2VydE5vZGUoZnJhbWUsIGhyLnJlbGVhc2Uo
KSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAkocmV2aXNpb24gNTIw
OTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmkKICAgICAgICAgICAgIGRvY3VtZW50LT5hZGROYW1lZEl0ZW0obmV3TmFtZSk7CiAgICAgICAg
IH0KICAgICAgICAgbV9uYW1lID0gbmV3TmFtZTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBpZEF0dHIpIHsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0
ZU5hbWUoKSkgewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkID0gYXR0ci0+dmFs
dWUoKTsKICAgICAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1
bWVudCgpKSB7CiAgICAgICAgICAgICBIVE1MRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTERvY3VtZW50Kj4odGhpcy0+ZG9jdW1lbnQoKSk7CkBAIC0xMTgsNyArMTE4LDcgQEAg
UmVuZGVyT2JqZWN0KiBIVE1MQXBwbGV0RWxlbWVudDo6Y3JlYXRlUgogICAgICAgICBpZiAoIWNv
ZGVCYXNlLmlzTnVsbCgpKQogICAgICAgICAgICAgYXJncy5zZXQoImNvZGVCYXNlIiwgY29kZUJh
c2UpOwogCi0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGdldEF0dHJpYnV0ZShk
b2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpID8gbmFtZUF0dHIgOiBpZEF0dHIpOworICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBnZXRBdHRyaWJ1dGUoZG9jdW1lbnQoKS0+aXNI
VE1MRG9jdW1lbnQoKSA/IG5hbWVBdHRyIDogaWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgICAgICBp
ZiAoIW5hbWUuaXNOdWxsKCkpCiAgICAgICAgICAgICBhcmdzLnNldCgibmFtZSIsIG5hbWUpOwog
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyY2hpdmUgPSBnZXRBdHRyaWJ1dGUoYXJjaGl2
ZUF0dHIpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiA1MjA5MikKKysr
IFdlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw3
ICsyNjYsNyBAQCBib29sIEhUTUxDb2xsZWN0aW9uOjpjaGVja0Zvck5hbWVNYXRjaChFCiAgICAg
CiAgICAgSFRNTEVsZW1lbnQqIGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGVsZW1lbnQp
OwogICAgIGlmICghY2hlY2tOYW1lKQotICAgICAgICByZXR1cm4gZS0+Z2V0QXR0cmlidXRlKGlk
QXR0cikgPT0gbmFtZTsKKyAgICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShlLT5pZEF0dHJp
YnV0ZU5hbWUoKSkgPT0gbmFtZTsKIAogICAgIC8vIGRvY3VtZW50LmFsbCByZXR1cm5zIG9ubHkg
aW1hZ2VzLCBmb3JtcywgYXBwbGV0cywgb2JqZWN0cyBhbmQgZW1iZWRzCiAgICAgLy8gYnkgbmFt
ZSAodGhvdWdoIGV2ZXJ5dGhpbmcgYnkgaWQpCkBAIC0yNzcsNyArMjc3LDcgQEAgYm9vbCBIVE1M
Q29sbGVjdGlvbjo6Y2hlY2tGb3JOYW1lTWF0Y2goRQogICAgICAgICAgIGUtPmhhc0xvY2FsTmFt
ZShzZWxlY3RUYWcpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGUtPmdl
dEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbmFtZSAmJiBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSAh
PSBuYW1lOworICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG5hbWUgJiYg
ZS0+Z2V0QXR0cmlidXRlKGUtPmlkQXR0cmlidXRlTmFtZSgpKSAhPSBuYW1lOwogfQogCiBOb2Rl
KiBIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29u
c3QKQEAgLTMxOSw3ICszMTksNyBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2Fj
aGUoKSBjCiAgICAgICAgIGlmICghZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlID0gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnQqPihlbGVtZW50KTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwg
PSBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBp
ZEF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVB
dHRyKTsKICAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAv
LyBhZGQgdG8gaWQgY2FjaGUKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRGF0YUdyaWRDb2xFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTERhdGFHcmlkQ29sRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9odG1sL0hUTUxEYXRhR3JpZENvbEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgSFRNTERhdGFH
cmlkQ29sRWxlbWVudDo6ZW5zdXJlQ29sdW0KIHsKICAgICBpZiAobV9jb2x1bW4pCiAgICAgICAg
IHJldHVybjsKLSAgICBtX2NvbHVtbiA9IERhdGFHcmlkQ29sdW1uOjpjcmVhdGUoZ2V0QXR0cmli
dXRlKGlkQXR0ciksIGxhYmVsKCksIHR5cGUoKSwgcHJpbWFyeSgpLCBzb3J0YWJsZSgpKTsKKyAg
ICBtX2NvbHVtbiA9IERhdGFHcmlkQ29sdW1uOjpjcmVhdGUoZ2V0QXR0cmlidXRlKGlkQXR0cmli
dXRlTmFtZSgpKSwgbGFiZWwoKSwgdHlwZSgpLCBwcmltYXJ5KCksIHNvcnRhYmxlKCkpOwogfQog
CiB2b2lkIEhUTUxEYXRhR3JpZENvbEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVw
KQpAQCAtMTYyLDggKzE2Miw4IEBAIHZvaWQgSFRNTERhdGFHcmlkQ29sRWxlbWVudDo6cGFyc2VN
YXBwZWQKICAgICAgICAgY29sdW1uKCktPnNldFNvcnRhYmxlKHNvcnRhYmxlKCkpOwogICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzb3J0ZGlyZWN0aW9uQXR0cikKICAgICAgICAgY29sdW1u
KCktPnNldFNvcnREaXJlY3Rpb24oc29ydERpcmVjdGlvbigpKTsKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gaWRBdHRyKQotICAgICAgICBjb2x1bW4oKS0+c2V0SWQoZ2V0QXR0cmlidXRl
KGlkQXR0cikpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUo
KSkKKyAgICAgICAgY29sdW1uKCktPnNldElkKGdldEF0dHJpYnV0ZShpZEF0dHJpYnV0ZU5hbWUo
KSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIGJvb2wgSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnko
Y29uc3QgUXVhbGkKICAgICAKIHZvaWQgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0
ciB8fCBhdHRyLT5uYW1lKCkgPT0gY2xhc3NBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBzdHlsZUF0
dHIpCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSB8fCBhdHRyLT5u
YW1lKCkgPT0gY2xhc3NBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBzdHlsZUF0dHIpCiAgICAgICAg
IHJldHVybiBTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIAogICAg
IFN0cmluZyBpbmRleHN0cmluZzsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3Bw
CShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDggQEAgRWxlbWVudCogSFRNTEZvcm1Db2xs
ZWN0aW9uOjpnZXROYW1lZEZvcgogICAgIGJvb2wgZm91bmRJbnB1dEVsZW1lbnRzID0gZmFsc2U7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0tPmZvcm1FbGVtZW50cy5zaXplKCk7
ICsraSkgewogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlID0gZm9ybS0+Zm9ybUVs
ZW1lbnRzW2ldOwotICAgICAgICBpZiAoZS0+aXNFbnVtZXJhdGFibGUoKSAmJiBlLT5nZXRBdHRy
aWJ1dGUoYXR0ck5hbWUpID09IG5hbWUpIHsKKyAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0cmlidXRlTmFtZSA9IChhdHRyTmFtZSA9PSBpZEF0dHIpID8gZS0+aWRBdHRyaWJ1dGVOYW1l
KCkgOiBhdHRyTmFtZTsKKyAgICAgICAgaWYgKGUtPmlzRW51bWVyYXRhYmxlKCkgJiYgZS0+Z2V0
QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpID09IG5hbWUpIHsKICAgICAgICAgICAgIGZvdW5kSW5w
dXRFbGVtZW50cyA9IHRydWU7CiAgICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZU51bWJlcikKICAg
ICAgICAgICAgICAgICByZXR1cm4gZTsKQEAgLTEyMSw3ICsxMjIsOCBAQCBFbGVtZW50KiBIVE1M
Rm9ybUNvbGxlY3Rpb246OmdldE5hbWVkRm9yCiAgICAgaWYgKCFmb3VuZElucHV0RWxlbWVudHMp
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0tPmltZ0VsZW1lbnRzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBlID0gZm9ybS0+aW1n
RWxlbWVudHNbaV07Ci0gICAgICAgICAgICBpZiAoZS0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKSA9
PSBuYW1lKSB7CisgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1l
ID0gKGF0dHJOYW1lID09IGlkQXR0cikgPyBlLT5pZEF0dHJpYnV0ZU5hbWUoKSA6IGF0dHJOYW1l
OworICAgICAgICAgICAgaWYgKGUtPmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA9PSBuYW1l
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGVOdW1iZXIpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlOwogICAgICAgICAgICAgICAgIC0tZHVwbGljYXRlTnVtYmVyOwpAQCAt
MTcxLDEwICsxNzMsMTAgQEAgTm9kZSogSFRNTEZvcm1Db2xsZWN0aW9uOjpuZXh0TmFtZWRJdGVt
KAogICAgIC8vIFRoZSBuZXh0TmFtZWRJdGVtSW50ZXJuYWwgZnVuY3Rpb24gY2FuIHJldHVybiB0
aGUgc2FtZSBpdGVtIHR3aWNlIGlmIGl0IGhhcwogICAgIC8vIGJvdGggYW4gaWQgYW5kIG5hbWUg
dGhhdCBhcmUgZXF1YWwgdG8gdGhlIG5hbWUgcGFyYW1ldGVyLiBTbyB0aGlzIGZ1bmN0aW9uCiAg
ICAgLy8gY2hlY2tzIGlmIHdlIGFyZSBvbiB0aGUgbmFtZUF0dHIgaGFsZiBvZiB0aGUgaXRlcmF0
aW9uIGFuZCBza2lwcyBvdmVyIGFueQotICAgIC8vIHRoYXQgYWxzbyBoYXZlIHRoZSBzYW1lIGlk
QXR0ci4KKyAgICAvLyB0aGF0IGFsc28gaGF2ZSB0aGUgc2FtZSBpZEF0dHJpYnV0ZU5hbWUuCiAg
ICAgRWxlbWVudCogaW1wbCA9IG5leHROYW1lZEl0ZW1JbnRlcm5hbChuYW1lKTsKICAgICBpZiAo
bV9pZHNEb25lKQotICAgICAgICB3aGlsZSAoaW1wbCAmJiBpbXBsLT5nZXRBdHRyaWJ1dGUoaWRB
dHRyKSA9PSBuYW1lKQorICAgICAgICB3aGlsZSAoaW1wbCAmJiBpbXBsLT5nZXRBdHRyaWJ1dGUo
aW1wbC0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IG5hbWUpCiAgICAgICAgICAgICBpbXBsID0gbmV4
dE5hbWVkSXRlbUludGVybmFsKG5hbWUpOwogICAgIHJldHVybiBpbXBsOwogfQpAQCAtMTkxLDcg
KzE5Myw3IEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+Zm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGUgPSBmLT5mb3JtRWxlbWVudHNbaV07CiAg
ICAgICAgIGlmIChlLT5pc0VudW1lcmF0YWJsZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpOworICAgICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUoZS0+aWRB
dHRyaWJ1dGVOYW1lKCkpOwogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0
clZhbCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgICAgICAgICBpZiAoIWlkQXR0
clZhbC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBhZGQgdG8gaWQgY2FjaGUKQEAg
LTIxOCw3ICsyMjAsNyBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hl
CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+aW1nRWxlbWVudHMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogZSA9IGYtPmltZ0VsZW1lbnRzW2ldOwot
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShp
ZEF0dHIpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldEF0
dHJpYnV0ZShlLT5pZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZUF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwogICAgICAgICBpZiAo
IWlkQXR0clZhbC5pc0VtcHR5KCkgJiYgIWZvdW5kSW5wdXRFbGVtZW50cy5jb250YWlucyhpZEF0
dHJWYWwuaW1wbCgpKSkgewogICAgICAgICAgICAgLy8gYWRkIHRvIGlkIGNhY2hlCkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2Vi
Q29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEx
LDcgKzExMSw3IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnBhcnNlTWFwcGVkQXQKIHsK
ICAgICBpZiAoYXR0ci0+bmFtZSgpID09IHNyY0F0dHIpCiAgICAgICAgIHNldExvY2F0aW9uKGRl
cHJlY2F0ZWRQYXJzZVVSTChhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IGlkQXR0cikgeworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0
ZU5hbWUoKSkgewogICAgICAgICAvLyBJbXBvcnRhbnQgdG8gY2FsbCB0aHJvdWdoIHRvIGJhc2Ug
Zm9yIHRoZSBpZCBhdHRyaWJ1dGUgc28gdGhlIGhhc0lEIGJpdCBnZXRzIHNldC4KICAgICAgICAg
SFRNTEZyYW1lT3duZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKICAgICAg
ICAgbV9mcmFtZU5hbWUgPSBhdHRyLT52YWx1ZSgpOwpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQg
SFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldE5hbWVBbmRPcGUKIHsKICAgICBtX2ZyYW1lTmFtZSA9
IGdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgaWYgKG1fZnJhbWVOYW1lLmlzTnVsbCgpKQot
ICAgICAgICBtX2ZyYW1lTmFtZSA9IGdldEF0dHJpYnV0ZShpZEF0dHIpOworICAgICAgICBtX2Zy
YW1lTmFtZSA9IGdldEF0dHJpYnV0ZShpZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgCiAgICAgaWYg
KEZyYW1lKiBwYXJlbnRGcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIG1fZnJh
bWVOYW1lID0gcGFyZW50RnJhbWUtPnRyZWUoKS0+dW5pcXVlQ2hpbGROYW1lKG1fZnJhbWVOYW1l
KTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysg
V2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEs
NyArMTMxLDcgQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAg
ICAgICAgICAgZG9jdW1lbnQtPmFkZE5hbWVkSXRlbShuZXdOYW1lKTsKICAgICAgICAgfQogICAg
ICAgICBtX25hbWUgPSBuZXdOYW1lOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlk
QXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cmlidXRlTmFtZSgp
KSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQgPSBhdHRyLT52YWx1ZSgpOwog
ICAgICAgICBpZiAoaW5Eb2N1bWVudCgpICYmIGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkp
IHsKICAgICAgICAgICAgIEhUTUxEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1M
RG9jdW1lbnQqPih0aGlzLT5kb2N1bWVudCgpKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWFw
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNw
cAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw5ICs3OCw5IEBAIGJvb2wgSFRNTE1hcEVsZW1lbnQ6Om1hcE1v
dXNlRXZlbnQoaW50IHgKIHZvaWQgSFRNTE1hcEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSA9IGF0dHItPm5hbWUoKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gaWRBdHRyIHx8IGF0dHJO
YW1lID09IG5hbWVBdHRyKSB7CisgICAgaWYgKGF0dHJOYW1lID09IGlkQXR0cmlidXRlTmFtZSgp
IHx8IGF0dHJOYW1lID09IG5hbWVBdHRyKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2MgPSBkb2N1
bWVudCgpOwotICAgICAgICBpZiAoYXR0ck5hbWUgPT0gaWRBdHRyKSB7CisgICAgICAgIGlmIChh
dHRyTmFtZSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSkgewogICAgICAgICAgICAgLy8gQ2FsbCBiYXNl
IGNsYXNzIHNvIHRoYXQgaGFzSUQgYml0IGdldHMgc2V0LgogICAgICAgICAgICAgSFRNTEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogICAgICAgICAgICAgaWYgKGRvYy0+aXNI
VE1MRG9jdW1lbnQoKSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCShyZXZp
c2lvbiA1MjA5MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIEVsZW1lbnQqIEhUTUxOYW1lQ29sbGVjdGlvbjo6
aXRlbUFmdGVyKEUKICAgICAgICAgICAgICAgICAgICAgZS0+aGFzVGFnTmFtZShvYmplY3RUYWcp
KQogICAgICAgICAgICAgICAgICAgICBpZiAoZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBt
X25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTsKLSAgICAgICAgICAgICAg
ICBpZiAoZS0+Z2V0QXR0cmlidXRlKGlkQXR0cikgPT0gbV9uYW1lKQorICAgICAgICAgICAgICAg
IGlmIChlLT5nZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IG1fbmFtZSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIERvY3VtZW50TmFtZWRJdGVtczoKQEAgLTc0LDE0ICs3NCwxNCBAQCBFbGVt
ZW50KiBIVE1MTmFtZUNvbGxlY3Rpb246Oml0ZW1BZnRlcihFCiAgICAgICAgICAgICAgICAgICAg
IGlmIChlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1fbmFtZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS0+aGFzVGFn
TmFtZShhcHBsZXRUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1
dGUobmFtZUF0dHIpID09IG1fbmFtZSB8fCBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBtX25h
bWUpCisgICAgICAgICAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09
IG1fbmFtZSB8fCBlLT5nZXRBdHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IG1fbmFt
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICgoZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUgfHwgZS0+Z2V0QXR0cmli
dXRlKGlkQXR0cikgPT0gbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiAoKGUtPmdldEF0
dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9uYW1lIHx8IGUtPmdldEF0dHJpYnV0ZShlLT5pZEF0dHJp
YnV0ZU5hbWUoKSkgPT0gbV9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHN0
YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50Kj4oZSktPmlzRG9jTmFtZWRJdGVtKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGUtPmhhc1RhZ05hbWUoaW1nVGFnKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZS0+Z2V0
QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUgfHwgKGUtPmdldEF0dHJpYnV0ZShpZEF0dHIp
ID09IG1fbmFtZSAmJiBlLT5oYXNBdHRyaWJ1dGUobmFtZUF0dHIpKSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9uYW1lIHx8IChlLT5nZXRB
dHRyaWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkpID09IG1fbmFtZSAmJiBlLT5oYXNBdHRyaWJ1
dGUobmFtZUF0dHIpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MT2JqZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9iamVj
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBIVE1M
T2JqZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICAgICAgZG9jdW1lbnQtPmFk
ZE5hbWVkSXRlbShuZXdOYW1lKTsKICAgICAgICAgfQogICAgICAgICBtX25hbWUgPSBuZXdOYW1l
OwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cikgeworICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cmlidXRlTmFtZSgpKSB7CiAgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbmV3SWQgPSBhdHRyLT52YWx1ZSgpOwogICAgICAgICBpZiAoaXNEb2NOYW1l
ZEl0ZW0oKSAmJiBpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkg
ewogICAgICAgICAgICAgSFRNTERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxE
b2N1bWVudCo+KHRoaXMtPmRvY3VtZW50KCkpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQYXJh
bUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVtZW50
LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgSFRNTFBhcmFtRWxlbWVudDo6fkhU
TUxQYXJhbUVsZW1lbnQoKQogCiB2b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09
IGlkQXR0cikgeworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyaWJ1dGVOYW1lKCkpIHsK
ICAgICAgICAgLy8gTXVzdCBjYWxsIGJhc2UgY2xhc3Mgc28gdGhhdCBoYXNJRCBiaXQgZ2V0cyBz
ZXQuCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKICAg
ICAgICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9DYWNoZWRGb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRG
b250LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBAIFNWR0ZvbnRFbGVtZW50KiBDYWNo
ZWRGb250OjpnZXRTVkdGb250QnkKICAgICAgICAgTm9kZSogbm9kZSA9IGxpc3QtPml0ZW0oaSk7
CiAgICAgICAgIEFTU0VSVChub2RlKTsKIAotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpICE9IGZvbnROYW1lKQor
ICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5pZEF0dHJpYnV0ZU5hbWUoKSkgIT0gZm9udE5hbWUp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBBU1NFUlQobm9kZS0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6Zm9udFRhZykpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBS
ZW5kZXJMYXllckJhY2tpbmc6OmNyZWF0ZUdyYXBoaWNzTAogICAgICAgICAgICAgbV9ncmFwaGlj
c0xheWVyLT5zZXROYW1lKCJEb2N1bWVudCBOb2RlIik7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgaWYgKHJlbmRlcmVyKCktPm5vZGUoKS0+aXNIVE1MRWxlbWVudCgpICYmIHJlbmRlcmVy
KCktPm5vZGUoKS0+aGFzSUQoKSkKLSAgICAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNl
dE5hbWUocmVuZGVyZXIoKS0+cmVuZGVyTmFtZSgpICsgU3RyaW5nKCIgIikgKyBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KHJlbmRlcmVyKCktPm5vZGUoKSktPmdldEF0dHJpYnV0ZShpZEF0dHIp
KTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldE5hbWUocmVuZGVyZXIoKS0+
cmVuZGVyTmFtZSgpICsgU3RyaW5nKCIgIikgKyBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KHJl
bmRlcmVyKCktPm5vZGUoKSktPmdldElEQXR0cmlidXRlKCkpOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0TmFtZShyZW5kZXJlcigpLT5yZW5k
ZXJOYW1lKCkpOwogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI1LDcgKzUyNSw3IEBAIHZv
aWQgd3JpdGVSZW5kZXJSZXNvdXJjZXMoVGV4dFN0cmVhbSYgdHMKICAgICAgICAgaWYgKCFyZXNv
dXJjZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFN0cmluZyBlbGVtZW50SWQg
PSBzdmdFbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpOworICAgICAgICBT
dHJpbmcgZWxlbWVudElkID0gc3ZnRWxlbWVudC0+Z2V0QXR0cmlidXRlKHN2Z0VsZW1lbnQtPmlk
QXR0cmlidXRlTmFtZSgpKTsKICAgICAgICAgLy8gRklYTUU6IFRoZXNlIG5hbWVzIGFyZSBsaWVz
IQogICAgICAgICBpZiAocmVzb3VyY2UtPmlzUGFpbnRTZXJ2ZXIoKSkgewogICAgICAgICAgICAg
UmVmUHRyPFNWR1BhaW50U2VydmVyPiBwYWludFNlcnZlciA9IFdURjo6c3RhdGljX3BvaW50ZXJf
Y2FzdDxTVkdQYWludFNlcnZlcj4ocmVzb3VyY2UpOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlz
aW9uIDUyMDkyKQorKysgV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50
KCkKICAgICBTdHlsZWRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVu
c2lvbnMoKTsKIAotICAgIFN0cmluZyByZXNvdXJjZUlkID0gU1ZHVVJJUmVmZXJlbmNlOjpnZXRU
YXJnZXQoZ2V0QXR0cmlidXRlKGlkQXR0cikpOworICAgIFN0cmluZyByZXNvdXJjZUlkID0gU1ZH
VVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQoZ2V0QXR0cmlidXRlKGlkQXR0cmlidXRlTmFtZSgpKSk7
CiAgICAgaWYgKGV4dGVuc2lvbnMtPmlzUGVuZGluZ1Jlc291cmNlKHJlc291cmNlSWQpKSB7CiAg
ICAgICAgIHN0ZDo6YXV0b19wdHI8SGFzaFNldDxTVkdTdHlsZWRFbGVtZW50Kj4gPiBjbGllbnRz
KGV4dGVuc2lvbnMtPnJlbW92ZVBlbmRpbmdSZXNvdXJjZShyZXNvdXJjZUlkKSk7CiAgICAgICAg
IGlmIChjbGllbnRzLT5pc0VtcHR5KCkpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAko
cmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg5LDcgKzE4OSw3IEBAIGJvb2wgU1ZHU3R5bGVkRWxlbWVudDo6aXNL
bm93bkF0dHJpYnV0ZSgKICAgICBpZiAocHJvcElkID4gMCkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICByZXR1cm4gKGF0dHJOYW1lID09IEhUTUxOYW1lczo6aWRBdHRyIHx8IGF0dHJOYW1l
ID09IEhUTUxOYW1lczo6c3R5bGVBdHRyKTsgCisgICAgcmV0dXJuIChhdHRyTmFtZSA9PSBpZEF0
dHJpYnV0ZU5hbWUoKSB8fCBhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OnN0eWxlQXR0cik7IAogfQog
CiB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNwcAkocmV2aXNpb24gNTIwOTIpCisr
KyBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAs
NyBAQCBib29sIFdNTEVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmCiAgICAgCiB2b2lk
IFdNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikK
IHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IEhUTUxOYW1lczo6aWRBdHRyCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKQogICAgICAgICB8fCBhdHRyLT5uYW1lKCkg
PT0gSFRNTE5hbWVzOjpjbGFzc0F0dHIKICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09IEhUTUxO
YW1lczo6c3R5bGVBdHRyKQogICAgICAgICByZXR1cm4gU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cik7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MjEwNikKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDA5LTEyLTE0
ICBTaHUgQ2hhbmcgIDxDaGFuZy5TaHVAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyB0ZXN0IGNhc2VzIGZvciBpc0lkIHN1cHBv
cnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTc4
CisKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNC1leHBlY3RlZC50
eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQuanM6CisgICAg
ICAgIChzZXRVcFBhZ2UpOgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNp
ZDA1LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlz
aWQwNS5qczoKKyAgICAgICAgKHNldFVwUGFnZSk6CisgICAgICAgICogZmFzdC9kb20vRWxlbWVu
dC9hdHRyaXNpZC1leHRyYTAxLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9k
b20vRWxlbWVudC9hdHRyaXNpZC1leHRyYTAxLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZG9tL0VsZW1lbnQvaWQtaW4tYXBwbGV0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1hcHBsZXQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9kb20vRWxlbWVudC9pZC1pbi1kZWxldGVidXR0b24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLWRlbGV0ZWJ1dHRvbi5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLWZvcm1jb2xsZWN0aW9uLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mb3JtY29sbGVj
dGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLWZyYW1l
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1m
cmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLWZyYW1l
c2V0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1p
bi1mcmFtZXNldC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWlu
LWdldGVsZW1lbnQwMS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0Vs
ZW1lbnQvaWQtaW4tZ2V0ZWxlbWVudDAxLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9t
L0VsZW1lbnQvaWQtaW4taW5zZXJ0LWhyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1pbnNlcnQtaHIuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1tYXAtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLW1hcC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9FbGVtZW50L2lkLWluLXBhcmFtLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1wYXJhbS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9FbGVtZW50L2lkLWluLXN2Z2ZvbnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2ZvbnQuc3ZnOiBBZGRlZC4KKwogMjAwOS0xMi0x
NCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBOb3Qg
cmV2aWV3ZWQsIGJ1aWxkIGZpeC4KSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMv
Y29yZS9hdHRyaXNpZDA0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9k
b20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUy
MDkyKQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3
LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQKLVN0YXR1
cwlza2lwCi1NZXNzYWdlCUhUTUwgbG9hZGVyIGRvZXMgbm90IHN1cHBvcnQgdmFsaWRhdGluZz10
cnVlCitTdGF0dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9j
b3JlL2F0dHJpc2lkMDQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xl
dmVsMy9jb3JlL2F0dHJpc2lkMDQuanMJKHJldmlzaW9uIDUyMDkyKQorKysgTGF5b3V0VGVzdHMv
ZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDQuanMJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDcgKzM5LDE2IEBAIGZ1bmN0aW9uIHNldFVwUGFnZSgpIHsKICAgICAgLy8gICBjcmVhdGVzIHRl
c3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgogICAgICAvLwogICAgICBi
dWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKLSAgICAgICBzZXRJbXBsZW1lbnRh
dGlvbkF0dHJpYnV0ZSgidmFsaWRhdGluZyIsIHRydWUpOworCisgICAgIC8vCisgICAgIC8vIFdl
YktpdCBtb2RpZmljYXRpb246CisgICAgIC8vCisgICAgIC8vIFJlbW92ZSB0aGUgZm9sbG93aW5n
IGxpbmUgb3RoZXJ3aXNlIHRlc3QgY2FzZSBza2lwcGVkLgorICAgICAvLworICAgICAvL3NldElt
cGxlbWVudGF0aW9uQXR0cmlidXRlKCJ2YWxpZGF0aW5nIiwgdHJ1ZSk7CisgICAgIC8vCisgICAg
IC8vIEVuZCBXZWJLaXQgbW9kaWZpY2F0aW9uCisgICAgIC8vCiAKICAgICAgIGRvY3NMb2FkZWQg
PSAwOwogICAgICAgCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0
cmlzaWQwNS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3hodG1s
L2xldmVsMy9jb3JlL2F0dHJpc2lkMDUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1MjA5MikKKysr
IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA1LWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcv
MjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS9hdHRyaXNpZDA1Ci1TdGF0dXMJc2tpcAot
TWVzc2FnZQlIVE1MIGxvYWRlciBkb2VzIG5vdCBzdXBwb3J0IHZhbGlkYXRpbmc9dHJ1ZQorU3Rh
dHVzCVN1Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRy
aXNpZDA1LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29y
ZS9hdHRyaXNpZDA1LmpzCShyZXZpc2lvbiA1MjA5MikKKysrIExheW91dFRlc3RzL2RvbS94aHRt
bC9sZXZlbDMvY29yZS9hdHRyaXNpZDA1LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSwx
NiBAQCBmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CiAgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3Vt
ZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KICAgICAgLy8KICAgICAgYnVpbGRlciA9
IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7Ci0gICAgICAgc2V0SW1wbGVtZW50YXRpb25BdHRy
aWJ1dGUoInZhbGlkYXRpbmciLCB0cnVlKTsKKworICAgICAvLworICAgICAvLyBXZWJLaXQgbW9k
aWZpY2F0aW9uOgorICAgICAvLworICAgICAvLyBSZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIG90
aGVyd2lzZSB0ZXN0IGNhc2Ugc2tpcHBlZC4KKyAgICAgLy8KKyAgICAgLy9zZXRJbXBsZW1lbnRh
dGlvbkF0dHJpYnV0ZSgidmFsaWRhdGluZyIsIHRydWUpOworICAgICAvLworICAgICAvLyBFbmQg
V2ViS2l0IG1vZGlmaWNhdGlvbgorICAgICAvLwogCiAgICAgICBkb2NzTG9hZGVkID0gMDsKICAg
ICAgIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9hdHRyaXNpZC1leHRyYTAx
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50
L2F0dHJpc2lkLWV4dHJhMDEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9kb20vRWxlbWVudC9hdHRyaXNpZC1leHRyYTAxLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMSBAQAorVGVzdCBBdHRyLmlzSWQgd2hlcmUgQXR0ciBpcyBjcmVh
dGVkIHdpdGhvdXQgZWxlbWVudC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BB
U1MgYXR0ci5pc0lkIGlzIGZhbHNlCitQQVNTIGF0dHIuaXNJZCBpcyB0cnVlCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vRWxlbWVudC9hdHRyaXNpZC1leHRyYTAxLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9hdHRyaXNpZC1leHRyYTAxLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2F0dHJpc2lkLWV4dHJhMDEu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgQXR0ci5p
c0lkIHdoZXJlIEF0dHIgaXMgY3JlYXRlZCB3aXRob3V0IGVsZW1lbnQuIik7CisgICAgCit2YXIg
YXR0ciA9IGRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwv
MTk5OC9uYW1lc3BhY2UiLCJ4bWw6bGFuZyIpOworc2hvdWxkQmVGYWxzZSgnYXR0ci5pc0lkJyk7
CisKK3ZhciBhdHRyID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlTlMoIiIsImlkIik7CitzaG91
bGRCZVRydWUoJ2F0dHIuaXNJZCcpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
Kzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9k
b20vRWxlbWVudC9pZC1pbi1hcHBsZXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tYXBwbGV0LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tYXBwbGV0LWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdCB1c2luZyBpZCBpbiBh
cHBsZXQgZWxlbWVudAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwbGV0MSIpIGlzIG5vbi1udWxsLgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tYXBwbGV0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1hcHBsZXQuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tYXBwbGV0Lmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjEgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKworPGFwcGxldCBpZD0iYXBwbGV0MSIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEwIj48L2Fw
cGxldD4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IHVzaW5nIGlkIGluIGFwcGxldCBl
bGVtZW50Iik7CisKK3Nob3VsZEJlTm9uTnVsbCgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFw
cGxldDEiKScpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9p
ZC1pbi1kZWxldGVidXR0b24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZGVsZXRlYnV0dG9uLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZGVsZXRlYnV0dG9u
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorVGVzdCBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiV2ViS2l0LUVkaXRpbmctRGVsZXRlLUJ1dHRvbiIpCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRlbGV0ZUJ1dHRvbiBpcyBub24tbnVsbC4K
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorMQorMgor
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWRlbGV0ZWJ1dHRvbi5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZGVs
ZXRlYnV0dG9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVt
ZW50L2lkLWluLWRlbGV0ZWJ1dHRvbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5IEBA
Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJk
ZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxkaXYgY29udGVu
dGVkaXRhYmxlPSJ0cnVlIj4KKzx1bCBjbGFzcz0ibmVlZHNEZWxldGlvblVJIj48bGk+MTwvbGk+
PGxpIGlkPSJsaSI+MjwvbGk+PC91bD4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCdUZXN0IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJXZWJLaXQtRWRpdGluZy1EZWxldGUtQnV0dG9uIiknKTsK
Kworc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOworbGkgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgibGkiKTsKK3NlbC5zZXRQb3NpdGlvbihsaSwgMCk7CisKK2lmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIHsKKyAgICBkZWxldGVCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiV2ViS2l0LUVkaXRpbmctRGVsZXRlLUJ1dHRvbiIpOworICAgIHNob3VsZEJlTm9uTnVs
bCgnZGVsZXRlQnV0dG9uJyk7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9FbGVtZW50L2lkLWluLWZvcm1jb2xsZWN0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWZvcm1jb2xsZWN0aW9uLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQt
aW4tZm9ybWNvbGxlY3Rpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEw
IEBACitUZXN0IHVzaW5nIGlkIGluIEhUTUxGb3JtQ29sbGVjdGlvbgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBlbGVtcygiaWRzMSIsMSkuZ2V0QXR0cmlidXRlKCJuYW1l
IikgaXMgIm5hbWUyIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisgCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWZvcm1j
b2xsZWN0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVu
dC9pZC1pbi1mb3JtY29sbGVjdGlvbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mb3JtY29sbGVjdGlvbi5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI1IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
CisKKzxmb3JtIGlkPSJpZGYxIj4KKzxzZWxlY3QgaWQ9ImlkczEiIG5hbWU9Im5hbWUxIj48b3B0
aW9uIHNlbGVjdGVkPkZBSUxVUkU8L29wdGlvbj48L3NlbGVjdD4KKzxzZWxlY3QgaWQ9ImlkczEi
IG5hbWU9Im5hbWUyIj48b3B0aW9uIHNlbGVjdGVkPkZBSUxVUkU8L29wdGlvbj48L3NlbGVjdD4K
KzwvZm9ybT4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IHVzaW5nIGlkIGluIEhUTUxG
b3JtQ29sbGVjdGlvbiIpOworCit2YXIgZWxlbXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
aWRmMSIpLmVsZW1lbnRzOworc2hvdWxkQmUoJ2VsZW1zKCJpZHMxIiwxKS5nZXRBdHRyaWJ1dGUo
Im5hbWUiKScsICcibmFtZTIiJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9FbGVtZW50L2lkLWluLWZyYW1lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWZyYW1lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWUtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0IHVzaW5nIGlkIGluIGZyYW1l
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJ0aGVmcmFtZSIpIGlzIG5vbi1udWxsLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0Vs
ZW1lbnQvaWQtaW4tZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9FbGVtZW50L2lkLWluLWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9FbGVtZW50L2lkLWluLWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjMgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlw
dD4KK2Rlc2NyaXB0aW9uKCJUZXN0IHVzaW5nIGlkIGluIGZyYW1lIik7CisgICAgCit2YXIgcGFy
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CitwYXJlbnQuaWQgPSAndGhl
ZnJhbWUnOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwYXJlbnQpOworCitzaG91bGRCZU5v
bk51bGwoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0aGVmcmFtZSIpJyk7CisKK3ZhciBzdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWZyYW1lc2V0LWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWZy
YW1lc2V0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9t
L0VsZW1lbnQvaWQtaW4tZnJhbWVzZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDIgQEAKK0FMRVJUOiAxCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQv
aWQtaW4tZnJhbWVzZXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9F
bGVtZW50L2lkLWluLWZyYW1lc2V0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9FbGVtZW50L2lkLWluLWZyYW1lc2V0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjMgQEAKKzxodG1sPgorCis8ZnJhbWVzZXQgaWQ9ImZyYW1lc2V0Ij4KKyAgPGZyYW1lIG5h
bWU9ImZyYW1lMiIgc3JjPSJhYm91dDpibGFuayI+CisgIDxmcmFtZSBuYW1lPSJmcmFtZTEiIHNy
Yz0iamF2YXNjcmlwdDoKKyAgICBmdW5jdGlvbiBsb2cocykKKyAgICB7CisgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBhbGVydChzKTsKKyAgICAgIGVsc2UK
KyAgICAgICAgdG9wLmZyYW1lMS5kb2N1bWVudC53cml0ZSgnPHA+JyArIHMgKyAnPC9wPicpOwor
ICAgIH0KKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICB0b3AuZnJhbWVzZXQucmVtb3Zl
Q2hpbGQodG9wLmZyYW1lMi5mcmFtZUVsZW1lbnQpOworICAgIGxvZyh0b3AuZnJhbWVzZXQuY2hp
bGRyZW4ubGVuZ3RoKTsKKyAgIj4KKworICA8ZnJhbWUgbmFtZT0iZnJhbWUzIiBzcmM9ImFib3V0
OmJsYW5rIj4KKzwvZnJhbWVzZXQ+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9FbGVtZW50L2lkLWluLWdldGVsZW1lbnQwMS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1nZXRlbGVtZW50MDEtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1n
ZXRlbGVtZW50MDEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACitU
ZXN0IGdldEVsZW1lbnRCeUlkCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNT
IGVsZW0uZ2V0QXR0cmlidXRlKCJuYW1lIikgaXMgIm5hbWUxIgorUEFTUyBlbGVtLmdldEF0dHJp
YnV0ZSgibmFtZSIpIGlzICJuYW1lMiIKK1BBU1MgZWxlbSBpcyBudWxsCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1nZXRlbGVtZW50MDEuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWdldGVsZW1lbnQwMS5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1nZXRlbGVtZW50
MDEuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8ZGl2IG5hbWU9J25hbWUxJyBpZD0naWQxJy8+Cis8
ZGl2IG5hbWU9J25hbWUyJyBpZD0naWQyJy8+Cis8ZGl2IG5hbWU9J25hbWUzJyBpZD0naWQyJy8+
CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBnZXRFbGVtZW50QnlJZCIpOworCit2YXIg
ZWxlbTsKKworLy8gZWxlbWVudCBmb3VuZCB3aXRoIGV4YWN0IG1hdGNoCitlbGVtID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMScpOworc2hvdWxkQmUoJ2VsZW0uZ2V0QXR0cmlidXRlKCJu
YW1lIiknLCAnIm5hbWUxIicpOworCisvLyBtdWx0aXBsZSBlbGVtZW50cyBoYXZpbmcgc2FtZSBp
ZCByZXR1cm4gdGhlIGZpcnN0IG9uZQorZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdp
ZDInKTsKK3Nob3VsZEJlKCdlbGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpJywgJyJuYW1lMiInKTsK
KworLy8gZWxlbWVudCB3aXRoIGlkIG5vdCBmb3VuZAorZWxlbSA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdpZDMnKTsKK3Nob3VsZEJlTnVsbCgnZWxlbScpOworCit2YXIgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1pbnNlcnQtaHItZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4taW5zZXJ0LWhy
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1l
bnQvaWQtaW4taW5zZXJ0LWhyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MCBAQAorVGVzdCB1c2luZyBpZCBpbiBleGVjQ29tbWFuZChJbnNlcnRIb3Jpem9udGFsUnVsZSkK
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgaHIgaXMgbm9uLW51bGwuCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK2Zvb2JhcgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1pbnNlcnQtaHIuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWluc2VydC1o
ci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1p
bi1pbnNlcnQtaHIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24i
PjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8ZGl2IGlkPSJ0ZXN0MSIgY29udGVu
dGVkaXRhYmxlPSJ0cnVlIj5mb29iYXI8L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJU
ZXN0IHVzaW5nIGlkIGluIGV4ZWNDb21tYW5kKEluc2VydEhvcml6b250YWxSdWxlKSIpOworCit2
YXIgcyA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKK3ZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInRlc3QxIik7CitzLnNldFBvc2l0aW9uKGUsIDApOworCit2YXIgaWQgPSAiaHIiOwor
ZG9jdW1lbnQuZXhlY0NvbW1hbmQoIkluc2VydEhvcml6b250YWxSdWxlIiwgZmFsc2UsIGlkKTsK
K3ZhciBociA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKworc2hvdWxkQmVOb25OdWxs
KCdocicpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1p
bi1tYXAtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0Vs
ZW1lbnQvaWQtaW4tbWFwLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tbWFwLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMCBAQAorVGVzdCB1c2luZyBpZCBpbiBtYXAgZWxlbWVudC4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpcnN0
bWFwIikgaXMgbm9uLW51bGwuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1t
YXAuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWlu
LW1hcC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9p
ZC1pbi1tYXAuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorPGh0bWw+Cis8aGVh
ZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8bWFwIHRpdGxlPSJtYXAiIGlkPSJmaXJz
dG1hcCI+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCB1c2luZyBpZCBpbiBtYXAgZWxl
bWVudC4iKTsKKyAgICAKK3Nob3VsZEJlTm9uTnVsbCgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImZpcnN0bWFwIiknKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1l
bnQvaWQtaW4tcGFyYW0tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZG9tL0VsZW1lbnQvaWQtaW4tcGFyYW0tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1wYXJhbS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgdXNpbmcgaWQgaW4gcGFyYW0gZWxlbWVu
dC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImlkMSIpIGlzIG5vbi1udWxsLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1l
bnQvaWQtaW4tcGFyYW0uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9F
bGVtZW50L2lkLWluLXBhcmFtLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9FbGVtZW50L2lkLWluLXBhcmFtLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMg
QEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKyAgICAKKzxvYmpl
Y3Qgd2lkdGg9MTAwIGhlaWdodD0xMDA+CisgIDxwYXJhbSBuYW1lPSJtb3ZpZSIgaWQ9ImlkMSI+
Cis8L29iamVjdD4gICAgCisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCB1c2luZyBpZCBp
biBwYXJhbSBlbGVtZW50LiIpOworCitzaG91bGRCZU5vbk51bGwoJ2RvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJpZDEiKScpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxl
bWVudC9pZC1pbi1zdmdmb250LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2ZvbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1zdmdmb250LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgw
MHg2MDAKKyAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDAp
IHNpemUgMTAweDEwMAorICBSZW5kZXJTVkdSb290IHtzdmd9IGF0ICgwLC0zKSBzaXplIDQweDMK
KyAgICBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIge2RlZnN9IGF0ICgwLDApIHNpemUgMHgwCisg
ICAgICBSZW5kZXJQYXRoIHtwYXRofSBhdCAoMCwwKSBzaXplIDQ3Mjd4NTggW2ZpbGw9e1t0eXBl
PVNPTElEXSBbY29sb3I9IzAwMDAwMF19XSBbZGF0YT0iTSAwIDBMIDAgNDJMIDE2IDU4TCA0NzI3
IDU4Il0KKyAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDQweDMgY29udGFp
bnMgMSBjaHVuayhzKQorICAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCB7I3RleHR9IGF0ICgwLC0z
KSBzaXplIDQweDMKKyAgICAgICAgY2h1bmsgMSB0ZXh0IHJ1biAxIGF0ICgwLjAwLDAuMDApIHN0
YXJ0T2Zmc2V0IDAgZW5kT2Zmc2V0IDEgd2lkdGggNDAuMDA6ICJYIgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1zdmdmb250LnN2Zwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLXN2Z2ZvbnQuc3ZnCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1zdmdmb250LnN2ZwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8P3htbC1zdHls
ZXNoZWV0IGhyZWY9ImRhdGE6dGV4dC9jc3MsdGV4dCU3QmZvbnQtZmFtaWx5JTNBQUNJRDNzdmdm
b250JTdEIj8+Cis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6
eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIxMDAiIGhlaWdodD0i
MTAwIj4KKyAgICA8ZGVmcz4KKyAgICAgICAgPGZvbnQtZmFjZSBmb250LWZhbWlseT0iQUNJRDNz
dmdmb250Ij4KKyAgICAgICAgICAgIDxmb250LWZhY2Utc3JjPgorICAgICAgICAgICAgICAgIDxm
b250LWZhY2UtdXJpIHhsaW5rOmhyZWY9Ii4uLy4uLy4uL3N2Zy9jdXN0b20vcmVzb3VyY2VzL0Fj
aWQzRm9udC5zdmcjbWluaSIvPgorICAgICAgICAgICAgPC9mb250LWZhY2Utc3JjPgorICAgICAg
ICA8L2ZvbnQtZmFjZT4KKyAgICAgICAgPHBhdGggaWQ9InBhdGgiIGQ9Ik0wIDBsMCA0MmwxNiAx
Nmw0NzExIDAiLz4KKyAgICA8L2RlZnM+CisgICAgPHRleHQ+WDwvdGV4dD4KKzwvc3ZnPgo=
</data>
<flag name="commit-queue"
          id="26925"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45098</attachid>
            <date>2009-12-17 11:44:03 -0800</date>
            <delta_ts>2010-06-11 15:33:17 -0700</delta_ts>
            <desc>remove new test case fast/dom/Element/id-in-svgfont.svg</desc>
            <filename>bug5578_7.patch</filename>
            <type>text/plain</type>
            <size>53707</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODkgQEAKKzIwMDktMTItMTQgIFNodSBDaGFuZyAgPENoYW5nLlNodUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50ZWQgaXNJZCBhcyBzcGVjaWZpZWQgYnkgRE9NIExldmVsIDMuIFNlZSBkZXRhaWxlZCBk
ZXNjcmlwdGlvbiBiZWxvdy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU1NzgKKworICAgICAgICBBZGRlZCBpc0lkIHByb3BlcnR5IGFuZCBpbXBsZW1l
bnRhdGlvbjoKKyAgICAgICAgVGVzdHM6IGRvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDAx
LTA3LnhodG1sCisgICAgICAgICAgICAgICBmYXN0L2RvbS9FbGVtZW50L2F0dHJpc2lkLWV4dHJh
MDEuaHRtbAorICAgICAgICAqIGRvbS9BdHRyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF0dHI6
OmlzSWQpOgorICAgICAgICAqIGRvbS9BdHRyLmg6CisgICAgICAgICogZG9tL0F0dHIuaWRsOgor
CisgICAgICAgIFJlcGxhY2VkIGluc3RhbmNlcyBvZiBIVE1MTmFtZXM6OmlkQXR0ciB3aXRoIEVs
ZW1lbnQ6OmlkQXR0cmlidXRlTmFtZSgpCisgICAgICAgIGZvciB0aGUgcmVhc29uIHRoYXQgaWQg
YXR0cmlidXRlIG5hbWUgY291bGQgYmUgY3VzdG9taXplZCB0byBhIGRpZmZlcmVudAorICAgICAg
ICBzdHJpbmcgb3RoZXIgdGhhbiAiaWQiLiBBIHRlc3QgY2FzZSBpcyBhc3NvY2lhdGVkIHRvIGVh
Y2ggY29kZSBjaGFuZ2UuCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpnZXRFbGVtZW50QnlJZCk6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQv
aWQtaW4tZ2V0ZWxlbWVudDAxLmh0bWwKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6IFRlc3Rz
OiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwMS0wNy54aHRtbAorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OnNldEF0dHJpYnV0ZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjppbnNlcnRlZElu
dG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbURvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmZvcm1hdEZvckRlYnVnZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJhcmVJREF0dHJpYnV0ZU5hbWUpOgorICAgICAgICAq
IGRvbS9FbGVtZW50Lmg6IEFkZGVkIGZ1bmN0aW9uIGlkQXR0cmlidXRlTmFtZSgpLgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6aWRBdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgKiBkb20vRWxl
bWVudFJhcmVEYXRhLmg6IEFkZGVkIG1lbWJlciB2YXJpYWJsZSB0byBzdG9yZSBjdXN0b21pemVk
IGlkIG5hbWUgaW4gRWxlbWVudFJhcmVEYXRhLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJh
cmVEYXRhOjpFbGVtZW50UmFyZURhdGEpOgorICAgICAgICAqIGRvbS9OYW1lZEF0dHJNYXAuY3Bw
OiBUZXN0czogZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDEtMDcueGh0bWwKKyAgICAg
ICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok5h
bWVkTm9kZU1hcDo6c2V0QXR0cmlidXRlcyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOiBSZW1v
dmVkIEFTU0VSVCBhcyBpdCBtYXkgbm90IGhvbGQgYW55IG1vcmUuCisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpxdWVyeVNlbGVjdG9yKToKKyAgICAgICAgKiBkb20vU2VsZWN0b3JOb2RlTGlzdC5j
cHA6IFJlbW92ZWQgQVNTRVJUIGFzIGl0IG1heSBub3QgaG9sZCBhbnkgbW9yZS4KKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZVNlbGVjdG9yTm9kZUxpc3QpOgorICAgICAgICAqIGRvbS9TdHlsZWRF
bGVtZW50LmNwcDogVGVzdHM6IGRvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDAxLTA3Lnho
dG1sCisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZSk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcDogVGVzdDog
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1kZWxldGVidXR0b24uaHRtbAorICAgICAgICAoV2ViQ29y
ZTo6RGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6Y3JlYXRlRGVsZXRpb25VSSk6CisgICAgICAgICog
ZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1p
bnNlcnQtaHIuaHRtbAorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZUluc2VydEhvcml6b250YWxS
dWxlKToKKyAgICAgICAgKiBodG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcDogVGVzdDogZmFzdC9k
b20vRWxlbWVudC9pZC1pbi1hcHBsZXQuaHRtbAorICAgICAgICAoV2ViQ29yZTo6SFRNTEFwcGxl
dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxB
cHBsZXRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogaHRtbC9IVE1MQ29sbGVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6Y2hlY2tGb3JOYW1l
TWF0Y2gpOiBUZXN0OiBmYXN0L2Zvcm1zL3NlbGVjdC1uYW1lZEl0ZW0uaHRtbAorICAgICAgICAo
V2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6IFRlc3Q6IGZhc3QvZG9t
L2NvbGxlY3Rpb24tbmFtZWRJdGVtLXZpYS1pdGVtLmh0bWwKKyAgICAgICAgKiBodG1sL0hUTUxE
YXRhR3JpZENvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERhdGFHcmlkQ29s
RWxlbWVudDo6ZW5zdXJlQ29sdW1uKTogVGVzdDogZmFzdC9kb20vSFRNTERhdGFHcmlkRWxlbWVu
dC9EYXRhR3JpZENvbHVtbnMtZG9tLmh0bWwKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEYXRhR3Jp
ZENvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogVGVzdDogZmFzdC9kb20vSFRNTERh
dGFHcmlkRWxlbWVudC9EYXRhR3JpZENvbHVtbnMtZG9tLWF0dHJpYnV0ZXMuaHRtbAorICAgICAg
ICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29sbGVjdGlv
bi5jcHA6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZm9ybWNvbGxlY3Rpb24uaHRtbAor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db2xsZWN0aW9uOjpnZXROYW1lZEZvcm1JdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVjdGlvbjo6bmV4dE5hbWVkSXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6IFRlc3Q6IGZhc3QvZG9tL0Vs
ZW1lbnQvaWQtaW4tZnJhbWUuaHRtbAorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVu
dEJhc2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFt
ZUVsZW1lbnRCYXNlOjpzZXROYW1lQW5kT3BlblVSTCk6CisgICAgICAgICogaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1kZWxldGVidXR0b24u
aHRtbAorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuY3BwOiBUZXN0OiBmYXN0L2Rv
bS9FbGVtZW50L2lkLWluLW1hcC5odG1sCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE5hbWVDb2xsZWN0
aW9uLmNwcDogVGVzdDogZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZXNldC5odG1sCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTmFtZUNvbGxlY3Rpb246Oml0ZW1BZnRlcik6CisgICAgICAgICog
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6IFRlc3Q6IGZhc3QvZG9tL0hUTUxEb2N1bWVudC9v
YmplY3QtYnktbmFtZS1vci1pZC5odG1sCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTFBhcmFtRWxl
bWVudC5jcHA6IFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tcGFyYW0uaHRtbAorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFBhcmFtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAqIGxvYWRlci9DYWNoZWRGb250LmNwcDogVGVzdDogc3ZnL2N1c3RvbS9hY2lkMy10ZXN0
LTc3Lmh0bWwKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEZvbnQ6OmdldFNWR0ZvbnRCeUlkKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6Y3JlYXRlR3JhcGhpY3NMYXllcik6IERlYnVnLW9u
bHkgY29kZQorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDogVGVz
dDogc3ZnL3RleHQvdGV4dC1ncmFkaWVudC1wb3NpdGlvbmluZy5zdmcKKyAgICAgICAgKFdlYkNv
cmU6OndyaXRlUmVuZGVyUmVzb3VyY2VzKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6
IFRlc3Q6IHN2Zy9jdXN0b20vYWNpZDMtdGVzdC03Ny5odG1sCisgICAgICAgIChXZWJDb3JlOjpT
VkdFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgICogc3ZnL1NWR1N0eWxl
ZEVsZW1lbnQuY3BwOiBUZXN0OiBzdmcvY3VzdG9tL2pzLXVwZGF0ZS1pbWFnZS1hbmQtZGlzcGxh
eS5zdmcKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1
dGUpOgorICAgICAgICAqIHdtbC9XTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldN
TEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKwogMjAwOS0xMi0xNCAgQWRhbSBSb2Jl
biAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBRdWFydHpDb3JlLXJlbGF0ZWQg
YnVpbGQgc2V0dGluZ3MgaW50byBhIHZzcHJvcHMgZmlsZQpJbmRleDogV2ViQ29yZS9kb20vQXR0
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQXR0ci5jcHAJKHJldmlzaW9uIDUyMDky
KQorKysgV2ViQ29yZS9kb20vQXR0ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDgg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwor
CiBpbmxpbmUgQXR0cjo6QXR0cihFbGVtZW50KiBlbGVtZW50LCBEb2N1bWVudCogZG9jdW1lbnQs
IFBhc3NSZWZQdHI8QXR0cmlidXRlPiBhdHRyaWJ1dGUpCiAgICAgOiBDb250YWluZXJOb2RlKGRv
Y3VtZW50KQogICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCkBAIC0xNjQsNCArMTY2LDkgQEAgdm9p
ZCBBdHRyOjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQgogICAgICAgICBtX2VsZW1lbnQt
PmF0dHJpYnV0ZUNoYW5nZWQobV9hdHRyaWJ1dGUuZ2V0KCkpOwogfQogCitib29sIEF0dHI6Omlz
SWQoKSBjb25zdAoreworICAgIHJldHVybiBxdWFsaWZpZWROYW1lKCkubWF0Y2hlcyhtX2VsZW1l
bnQgPyBtX2VsZW1lbnQtPmlkQXR0cmlidXRlTmFtZSgpIDogaWRBdHRyKTsKK30KKwogfQpJbmRl
eDogV2ViQ29yZS9kb20vQXR0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0F0dHIuaAko
cmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2RvbS9BdHRyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDYgKzUyLDggQEAgcHVibGljOgogICAgIEF0dHJpYnV0ZSogYXR0cigpIGNvbnN0IHsgcmV0
dXJuIG1fYXR0cmlidXRlLmdldCgpOyB9CiAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgcXVhbGlm
aWVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlLT5uYW1lKCk7IH0KIAorICAgIGJv
b2wgaXNJZCgpIGNvbnN0OworCiAgICAgLy8gQW4gZXh0ZW5zaW9uIHRvIGdldCBwcmVzZW50YXRp
b25hbCBpbmZvcm1hdGlvbiBmb3IgYXR0cmlidXRlcy4KICAgICBDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSgpIHsgcmV0dXJuIG1fYXR0cmlidXRlLT5zdHlsZSgpOyB9CiAKSW5kZXg6IFdlYkNv
cmUvZG9tL0F0dHIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0F0dHIuaWRsCShyZXZp
c2lvbiA1MjA5MikKKysrIFdlYkNvcmUvZG9tL0F0dHIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw3ICszOCwxMSBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIC8vIERPTSBMZXZlbCAyCiAKICAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEVsZW1lbnQgb3duZXJFbGVtZW50OwotICAgICAgICAK
KworICAgICAgICAvLyBET00gTGV2ZWwgMworCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBi
b29sZWFuIGlzSWQ7CisKICAgICAgICAgLy8gZXh0ZW5zaW9ucwogI2lmICFkZWZpbmVkKExBTkdV
QUdFX0NPTSkgfHwgIUxBTkdVQUdFX0NPTQogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NT
U3R5bGVEZWNsYXJhdGlvbiBzdHlsZTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDUyMDkyKQor
KysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTYsNyArODU2
LDcgQEAgRWxlbWVudCogRG9jdW1lbnQ6OmdldEVsZW1lbnRCeUlkKGNvbnN0IAogICAgICAgICBm
b3IgKE5vZGUgKm4gPSB0cmF2ZXJzZU5leHROb2RlKCk7IG4gIT0gMDsgbiA9IG4tPnRyYXZlcnNl
TmV4dE5vZGUoKSkgewogICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewogICAg
ICAgICAgICAgICAgIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAg
ICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+Z2V0QXR0cmlidXRlKGlk
QXR0cikgPT0gZWxlbWVudElkKSB7CisgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0lE
KCkgJiYgZWxlbWVudC0+Z2V0QXR0cmlidXRlKGVsZW1lbnQtPmlkQXR0cmlidXRlTmFtZSgpKSA9
PSBlbGVtZW50SWQpIHsKICAgICAgICAgICAgICAgICAgICAgbV9kdXBsaWNhdGVJZHMucmVtb3Zl
KGVsZW1lbnRJZC5pbXBsKCkpOwogICAgICAgICAgICAgICAgICAgICBtX2VsZW1lbnRzQnlJZC5z
ZXQoZWxlbWVudElkLmltcGwoKSwgZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlbGVtZW50OwpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMiw3ICs1MzIsNyBAQCB2b2lkIEVsZW1l
bnQ6OnNldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTCiAKICAgICBkb2N1bWVudCgpLT5pbmNET01U
cmVlVmVyc2lvbigpOwogCi0gICAgaWYgKGxvY2FsTmFtZSA9PSBpZEF0dHIubG9jYWxOYW1lKCkp
CisgICAgaWYgKGxvY2FsTmFtZSA9PSBpZEF0dHJpYnV0ZU5hbWUoKS5sb2NhbE5hbWUoKSkKICAg
ICAgICAgdXBkYXRlSWQob2xkID8gb2xkLT52YWx1ZSgpIDogbnVsbEF0b20sIHZhbHVlKTsKICAg
ICAKICAgICBpZiAob2xkICYmIHZhbHVlLmlzTnVsbCgpKQpAQCAtNTUyLDcgKzU1Miw3IEBAIHZv
aWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmkKICAgICAvLyBhbGxvY2F0ZSBh
dHRyaWJ1dGVtYXAgaWYgbmVjZXNzYXJ5CiAgICAgQXR0cmlidXRlKiBvbGQgPSBhdHRyaWJ1dGVz
KGZhbHNlKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsKIAotICAgIGlmIChuYW1lID09IGlkQXR0
cikKKyAgICBpZiAobmFtZSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSkKICAgICAgICAgdXBkYXRlSWQo
b2xkID8gb2xkLT52YWx1ZSgpIDogbnVsbEF0b20sIHZhbHVlKTsKICAgICAKICAgICBpZiAob2xk
ICYmIHZhbHVlLmlzTnVsbCgpKQpAQCAtNjA3LDggKzYwNyw5IEBAIHZvaWQgRWxlbWVudDo6c2V0
QXR0cmlidXRlTWFwKFBhc3NSZWZQdHIKIAogICAgIC8vIElmIHNldHRpbmcgdGhlIHdob2xlIG1h
cCBjaGFuZ2VzIHRoZSBpZCBhdHRyaWJ1dGUsIHdlIG5lZWQgdG8gY2FsbCB1cGRhdGVJZC4KIAot
ICAgIEF0dHJpYnV0ZSogb2xkSWQgPSBuYW1lZEF0dHJNYXAgPyBuYW1lZEF0dHJNYXAtPmdldEF0
dHJpYnV0ZUl0ZW0oaWRBdHRyKSA6IDA7Ci0gICAgQXR0cmlidXRlKiBuZXdJZCA9IGxpc3QgPyBs
aXN0LT5nZXRBdHRyaWJ1dGVJdGVtKGlkQXR0cikgOiAwOworICAgIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGlkTmFtZSA9IGlkQXR0cmlidXRlTmFtZSgpOworICAgIEF0dHJpYnV0ZSogb2xkSWQgPSBu
YW1lZEF0dHJNYXAgPyBuYW1lZEF0dHJNYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaWROYW1lKSA6IDA7
CisgICAgQXR0cmlidXRlKiBuZXdJZCA9IGxpc3QgPyBsaXN0LT5nZXRBdHRyaWJ1dGVJdGVtKGlk
TmFtZSkgOiAwOwogCiAgICAgaWYgKG9sZElkIHx8IG5ld0lkKQogICAgICAgICB1cGRhdGVJZChv
bGRJZCA/IG9sZElkLT52YWx1ZSgpIDogbnVsbEF0b20sIG5ld0lkID8gbmV3SWQtPnZhbHVlKCkg
OiBudWxsQXRvbSk7CkBAIC03MTMsNyArNzE0LDcgQEAgdm9pZCBFbGVtZW50OjppbnNlcnRlZElu
dG9Eb2N1bWVudCgpCiAKICAgICBpZiAoaGFzSUQoKSkgewogICAgICAgICBpZiAoTmFtZWROb2Rl
TWFwKiBhdHRycyA9IG5hbWVkQXR0ck1hcC5nZXQoKSkgewotICAgICAgICAgICAgQXR0cmlidXRl
KiBpZEl0ZW0gPSBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShpZEF0dHIpOworICAgICAgICAgICAg
QXR0cmlidXRlKiBpZEl0ZW0gPSBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShpZEF0dHJpYnV0ZU5h
bWUoKSk7CiAgICAgICAgICAgICBpZiAoaWRJdGVtICYmICFpZEl0ZW0tPmlzTnVsbCgpKQogICAg
ICAgICAgICAgICAgIHVwZGF0ZUlkKG51bGxBdG9tLCBpZEl0ZW0tPnZhbHVlKCkpOwogICAgICAg
ICB9CkBAIC03MjQsNyArNzI1LDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50
KCkKIHsKICAgICBpZiAoaGFzSUQoKSkgewogICAgICAgICBpZiAoTmFtZWROb2RlTWFwKiBhdHRy
cyA9IG5hbWVkQXR0ck1hcC5nZXQoKSkgewotICAgICAgICAgICAgQXR0cmlidXRlKiBpZEl0ZW0g
PSBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShpZEF0dHIpOworICAgICAgICAgICAgQXR0cmlidXRl
KiBpZEl0ZW0gPSBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShpZEF0dHJpYnV0ZU5hbWUoKSk7CiAg
ICAgICAgICAgICBpZiAoaWRJdGVtICYmICFpZEl0ZW0tPmlzTnVsbCgpKQogICAgICAgICAgICAg
ICAgIHVwZGF0ZUlkKGlkSXRlbS0+dmFsdWUoKSwgbnVsbEF0b20pOwogICAgICAgICB9CkBAIC0x
MDczLDcgKzEwNzQsNyBAQCB2b2lkIEVsZW1lbnQ6OmZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1
CiAgICAgICAgIHJlc3VsdCArPSBzOwogICAgIH0KICAgICAgICAgICAKLSAgICBzID0gZ2V0QXR0
cmlidXRlKGlkQXR0cik7CisgICAgcyA9IGdldEF0dHJpYnV0ZShpZEF0dHJpYnV0ZU5hbWUoKSk7
CiAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7CiAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoKCkg
PiAwKQogICAgICAgICAgICAgcmVzdWx0ICs9ICI7ICI7CkBAIC0xNDMyLDQgKzE0MzMsOSBAQCBL
VVJMIEVsZW1lbnQ6OmdldFVSTEF0dHJpYnV0ZShjb25zdCBRdWFsCiAgICAgcmV0dXJuIGRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKGRlcHJlY2F0ZWRQYXJzZVVSTChnZXRBdHRyaWJ1dGUobmFtZSkp
KTsKIH0KIAorY29uc3QgUXVhbGlmaWVkTmFtZSYgRWxlbWVudDo6cmFyZUlEQXR0cmlidXRlTmFt
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJhcmVEYXRhKCktPm1faWRBdHRyaWJ1dGVOYW1lOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiA1MjA5MikKKysr
IFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAog
I2RlZmluZSBFbGVtZW50X2gKIAogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKKyNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsVHlwZXMuaCIKIApAQCAtMTExLDYgKzExMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEF0
dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldEF0dHJpYnV0ZU5TKGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIHF1YWxpZmllZE5hbWUs
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGlkQXR0cmlidXRlTmFtZSgpIGNvbnN0OworCiAgICAgdm9pZCBzY3Jv
bGxJbnRvVmlldyhib29sIGFsaWduVG9Ub3AgPSB0cnVlKTsKICAgICB2b2lkIHNjcm9sbEludG9W
aWV3SWZOZWVkZWQoYm9vbCBjZW50ZXJJZk5lZWRlZCA9IHRydWUpOwogCkBAIC0yODIsNiArMjg1
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZChOb2RlVHlw
ZSk7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBjcmVhdGVBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOworICAgIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHJhcmVJREF0dHJpYnV0ZU5hbWUoKSBjb25zdDsKICAgICAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1
ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKQEAgLTMzOSw2ICszNDMsMTEgQEAgaW5saW5l
IEVsZW1lbnQqIE5vZGU6OnBhcmVudEVsZW1lbnQoKSBjbwogICAgIHJldHVybiBwYXJlbnQgJiYg
cGFyZW50LT5pc0VsZW1lbnROb2RlKCkgPyBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ocGFyZW50KSA6
IDA7CiB9CiAKK2lubGluZSBjb25zdCBRdWFsaWZpZWROYW1lJiBFbGVtZW50OjppZEF0dHJpYnV0
ZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZUlEQXR0cmli
dXRlTmFtZSgpIDogSFRNTE5hbWVzOjppZEF0dHI7Cit9CisKIH0gLy9uYW1lc3BhY2UKIAogI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3Jl
L2RvbS9FbGVtZW50UmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKIGNs
YXNzIEVsZW1lbnRSYXJlRGF0YSA6IHB1YmxpYyBOb2RlUmFyZURhdGEgewogcHVibGljOgogICAg
IEVsZW1lbnRSYXJlRGF0YSgpOwpAQCAtMzgsNiArNDAsNyBAQCBwdWJsaWM6CiAKICAgICBJbnRT
aXplIG1fbWluaW11bVNpemVGb3JSZXNpemluZzsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1f
Y29tcHV0ZWRTdHlsZTsKKyAgICBRdWFsaWZpZWROYW1lIG1faWRBdHRyaWJ1dGVOYW1lOwogfTsK
IAogaW5saW5lIEludFNpemUgZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKQpAQCAtNDcs
NiArNTAsNyBAQCBpbmxpbmUgSW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpCiAKIGlu
bGluZSBFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRSYXJlRGF0YSgpCiAgICAgOiBtX21pbmltdW1T
aXplRm9yUmVzaXppbmcoZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKSkKKyAgICAsIG1f
aWRBdHRyaWJ1dGVOYW1lKGlkQXR0cikKIHsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vTmFtZWRB
dHRyTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuY3BwCShy
ZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvZG9tL05hbWVkQXR0ck1hcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6
c2V0TmFtZWRJCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmIChhLT5uYW1lKCkg
PT0gaWRBdHRyKQorICAgIGlmIChhdHRyLT5pc0lkKCkpCiAgICAgICAgIG1fZWxlbWVudC0+dXBk
YXRlSWQob2xkID8gb2xkLT52YWx1ZSgpIDogbnVsbEF0b20sIGEtPnZhbHVlKCkpOwogCiAgICAg
Ly8gIyMjIHNsaWdodGx5IGluZWZmaWNpZW50IC0gcmVzaXplcyBhdHRyaWJ1dGUgYXJyYXkgdHdp
Y2UuCkBAIC0xNTUsOSArMTU1LDkgQEAgUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OnJl
bW92ZU5hbQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8Tm9kZT4gciA9
IGEtPmNyZWF0ZUF0dHJJZk5lZWRlZChtX2VsZW1lbnQpOworICAgIFJlZlB0cjxBdHRyPiByID0g
YS0+Y3JlYXRlQXR0cklmTmVlZGVkKG1fZWxlbWVudCk7CiAKLSAgICBpZiAobmFtZSA9PSBpZEF0
dHIpCisgICAgaWYgKHItPmlzSWQoKSkKICAgICAgICAgbV9lbGVtZW50LT51cGRhdGVJZChhLT52
YWx1ZSgpLCBudWxsQXRvbSk7CiAKICAgICByZW1vdmVBdHRyaWJ1dGUobmFtZSk7CkBAIC0yNDIs
OCArMjQyLDggQEAgdm9pZCBOYW1lZE5vZGVNYXA6OnNldEF0dHJpYnV0ZXMoY29uc3QgTgogCiAg
ICAgLy8gSWYgYXNzaWduaW5nIHRoZSBtYXAgY2hhbmdlcyB0aGUgaWQgYXR0cmlidXRlLCB3ZSBu
ZWVkIHRvIGNhbGwKICAgICAvLyB1cGRhdGVJZC4KLSAgICBBdHRyaWJ1dGUgKm9sZElkID0gZ2V0
QXR0cmlidXRlSXRlbShpZEF0dHIpOwotICAgIEF0dHJpYnV0ZSAqbmV3SWQgPSBvdGhlci5nZXRB
dHRyaWJ1dGVJdGVtKGlkQXR0cik7CisgICAgQXR0cmlidXRlKiBvbGRJZCA9IGdldEF0dHJpYnV0
ZUl0ZW0obV9lbGVtZW50LT5pZEF0dHJpYnV0ZU5hbWUoKSk7CisgICAgQXR0cmlidXRlKiBuZXdJ
ZCA9IG90aGVyLmdldEF0dHJpYnV0ZUl0ZW0obV9lbGVtZW50LT5pZEF0dHJpYnV0ZU5hbWUoKSk7
CiAKICAgICBpZiAob2xkSWQgfHwgbmV3SWQpCiAgICAgICAgIG1fZWxlbWVudC0+dXBkYXRlSWQo
b2xkSWQgPyBvbGRJZC0+dmFsdWUoKSA6IG51bGxBdG9tLCBuZXdJZCA/IG5ld0lkLT52YWx1ZSgp
IDogbnVsbEF0b20pOwpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9kb20vTm9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NTIsNyArMTY1Miw2IEBAIFBhc3NSZWZQdHI8RWxl
bWVudD4gTm9kZTo6cXVlcnlTZWxlY3RvcigKIAogICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBhbHNv
IG9wdGltaXplIGZvciB0aGUgdGhlIFtpZD0iZm9vIl0gY2FzZQogICAgIGlmIChzdHJpY3RQYXJz
aW5nICYmIGluRG9jdW1lbnQoKSAmJiBxdWVyeVNlbGVjdG9yTGlzdC5oYXNPbmVTZWxlY3Rvcigp
ICYmIHF1ZXJ5U2VsZWN0b3JMaXN0LmZpcnN0KCktPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6Oklk
KSB7Ci0gICAgICAgIEFTU0VSVChxdWVyeVNlbGVjdG9yTGlzdC5maXJzdCgpLT5hdHRyaWJ1dGUo
KSA9PSBpZEF0dHIpOwogICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQoKS0+Z2V0
RWxlbWVudEJ5SWQocXVlcnlTZWxlY3Rvckxpc3QuZmlyc3QoKS0+bV92YWx1ZSk7CiAgICAgICAg
IGlmIChlbGVtZW50ICYmIChpc0RvY3VtZW50Tm9kZSgpIHx8IGVsZW1lbnQtPmlzRGVzY2VuZGFu
dE9mKHRoaXMpKSAmJiBzZWxlY3RvckNoZWNrZXIuY2hlY2tTZWxlY3RvcihxdWVyeVNlbGVjdG9y
TGlzdC5maXJzdCgpLCBlbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwpJbmRl
eDogV2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9k
b20vU2VsZWN0b3JOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAg
UGFzc1JlZlB0cjxTdGF0aWNOb2RlTGlzdD4gY3JlYXRlU2VsZWN0bwogICAgIENTU1N0eWxlU2Vs
ZWN0b3I6OlNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQsIHN0cmljdFBh
cnNpbmcpOwogCiAgICAgaWYgKHN0cmljdFBhcnNpbmcgJiYgcm9vdE5vZGUtPmluRG9jdW1lbnQo
KSAmJiBvbmx5U2VsZWN0b3IgJiYgb25seVNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpJZCAmJiAhZG9jdW1lbnQtPmNvbnRhaW5zTXVsdGlwbGVFbGVtZW50c1dpdGhJZChvbmx5U2Vs
ZWN0b3ItPm1fdmFsdWUpKSB7Ci0gICAgICAgIEFTU0VSVChxdWVyeVNlbGVjdG9yTGlzdC5maXJz
dCgpLT5hdHRyaWJ1dGUoKSA9PSBpZEF0dHIpOwogICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0g
ZG9jdW1lbnQtPmdldEVsZW1lbnRCeUlkKG9ubHlTZWxlY3Rvci0+bV92YWx1ZSk7CiAgICAgICAg
IGlmIChlbGVtZW50ICYmIChyb290Tm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBlbGVtZW50LT5p
c0Rlc2NlbmRhbnRPZihyb290Tm9kZSkpICYmIHNlbGVjdG9yQ2hlY2tlci5jaGVja1NlbGVjdG9y
KG9ubHlTZWxlY3RvciwgZWxlbWVudCkpCiAgICAgICAgICAgICBub2Rlcy5hcHBlbmQoZWxlbWVu
dCk7CkluZGV4OiBXZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3Jl
L2RvbS9TdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDcgKzIzNCw3IEBA
IHZvaWQgU3R5bGVkRWxlbWVudDo6Y2xhc3NBdHRyaWJ1dGVDaGFuZ2UKIAogdm9pZCBTdHlsZWRF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7Ci0g
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHIpIHsKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09
IGlkQXR0cmlidXRlTmFtZSgpKSB7CiAgICAgICAgIC8vIHVuaXF1ZSBpZAogICAgICAgICBzZXRI
YXNJRCghYXR0ci0+aXNOdWxsKCkpOwogICAgICAgICBpZiAobmFtZWRBdHRyTWFwKSB7CkluZGV4
OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA1
MjA5MikKKysrIFdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxl
cjo6cmVzcG9uZFRvQ2gKIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6Y3JlYXRlRGVsZXRp
b25VSSgpCiB7CiAgICAgUmVmUHRyPEhUTUxEaXZFbGVtZW50PiBjb250YWluZXIgPSBuZXcgSFRN
TERpdkVsZW1lbnQoZGl2VGFnLCBtX3RhcmdldC0+ZG9jdW1lbnQoKSk7Ci0gICAgY29udGFpbmVy
LT5zZXRBdHRyaWJ1dGUoaWRBdHRyLCBjb250YWluZXJFbGVtZW50SWRlbnRpZmllcik7CisgICAg
Y29udGFpbmVyLT5zZXRBdHRyaWJ1dGUoY29udGFpbmVyLT5pZEF0dHJpYnV0ZU5hbWUoKSwgY29u
dGFpbmVyRWxlbWVudElkZW50aWZpZXIpOwogCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qIHN0eWxlID0gY29udGFpbmVyLT5nZXRJbmxpbmVTdHlsZURlY2woKTsKICAgICBzdHlsZS0+
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRVc2VyRHJhZywgQ1NTVmFsdWVOb25lKTsKQEAg
LTIwMiw3ICsyMDIsNyBAQCB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OmNyZWF0ZURlbGV0
CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwgIjAiKTsKIAogICAgIFJl
ZlB0cjxIVE1MRGl2RWxlbWVudD4gb3V0bGluZSA9IG5ldyBIVE1MRGl2RWxlbWVudChkaXZUYWcs
IG1fdGFyZ2V0LT5kb2N1bWVudCgpKTsKLSAgICBvdXRsaW5lLT5zZXRBdHRyaWJ1dGUoaWRBdHRy
LCBvdXRsaW5lRWxlbWVudElkZW50aWZpZXIpOworICAgIG91dGxpbmUtPnNldEF0dHJpYnV0ZShv
dXRsaW5lLT5pZEF0dHJpYnV0ZU5hbWUoKSwgb3V0bGluZUVsZW1lbnRJZGVudGlmaWVyKTsKIAog
ICAgIGNvbnN0IGludCBib3JkZXJXaWR0aCA9IDQ7CiAgICAgY29uc3QgaW50IGJvcmRlclJhZGl1
cyA9IDY7CkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBEZWxldGVCdXR0b25Db250cm9sbGVyOjpj
cmVhdGVEZWxldAogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8RGVsZXRlQnV0dG9uPiBi
dXR0b24gPSBuZXcgRGVsZXRlQnV0dG9uKG1fdGFyZ2V0LT5kb2N1bWVudCgpKTsKLSAgICBidXR0
b24tPnNldEF0dHJpYnV0ZShpZEF0dHIsIGJ1dHRvbkVsZW1lbnRJZGVudGlmaWVyKTsKKyAgICBi
dXR0b24tPnNldEF0dHJpYnV0ZShidXR0b24tPmlkQXR0cmlidXRlTmFtZSgpLCBidXR0b25FbGVt
ZW50SWRlbnRpZmllcik7CiAKICAgICBjb25zdCBpbnQgYnV0dG9uV2lkdGggPSAzMDsKICAgICBj
b25zdCBpbnQgYnV0dG9uSGVpZ2h0ID0gMzA7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9y
Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQu
Y3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcxLDcgKzQ3MSw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVJ
bnNlcnRIb3Jpem9udGFsUnVsZSgKIHsKICAgICBSZWZQdHI8SFRNTEhSRWxlbWVudD4gaHIgPSBu
ZXcgSFRNTEhSRWxlbWVudChoclRhZywgZnJhbWUtPmRvY3VtZW50KCkpOwogICAgIGlmICghdmFs
dWUuaXNFbXB0eSgpKQotICAgICAgICBoci0+c2V0QXR0cmlidXRlKGlkQXR0ciwgdmFsdWUpOwor
ICAgICAgICBoci0+c2V0QXR0cmlidXRlKGhyLT5pZEF0dHJpYnV0ZU5hbWUoKSwgdmFsdWUpOwog
ICAgIHJldHVybiBleGVjdXRlSW5zZXJ0Tm9kZShmcmFtZSwgaHIucmVsZWFzZSgpKTsKIH0KIApJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdl
YkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcg
KzYzLDcgQEAgdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAg
ICAgICAgZG9jdW1lbnQtPmFkZE5hbWVkSXRlbShuZXdOYW1lKTsKICAgICAgICAgfQogICAgICAg
ICBtX25hbWUgPSBuZXdOYW1lOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0
cikgeworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cmlidXRlTmFtZSgpKSB7
CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQgPSBhdHRyLT52YWx1ZSgpOwogICAg
ICAgICBpZiAoaW5Eb2N1bWVudCgpICYmIGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsK
ICAgICAgICAgICAgIEhUTUxEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRG9j
dW1lbnQqPih0aGlzLT5kb2N1bWVudCgpKTsKQEAgLTExOCw3ICsxMTgsNyBAQCBSZW5kZXJPYmpl
Y3QqIEhUTUxBcHBsZXRFbGVtZW50OjpjcmVhdGVSCiAgICAgICAgIGlmICghY29kZUJhc2UuaXNO
dWxsKCkpCiAgICAgICAgICAgICBhcmdzLnNldCgiY29kZUJhc2UiLCBjb2RlQmFzZSk7CiAKLSAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gZ2V0QXR0cmlidXRlKGRvY3VtZW50KCkt
PmlzSFRNTERvY3VtZW50KCkgPyBuYW1lQXR0ciA6IGlkQXR0cik7CisgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSA9IGdldEF0dHJpYnV0ZShkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVu
dCgpID8gbmFtZUF0dHIgOiBpZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgICAgIGlmICghbmFtZS5p
c051bGwoKSkKICAgICAgICAgICAgIGFyZ3Muc2V0KCJuYW1lIiwgbmFtZSk7CiAgICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgYXJjaGl2ZSA9IGdldEF0dHJpYnV0ZShhcmNoaXZlQXR0cik7Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDcgKzI2Niw3IEBA
IGJvb2wgSFRNTENvbGxlY3Rpb246OmNoZWNrRm9yTmFtZU1hdGNoKEUKICAgICAKICAgICBIVE1M
RWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oZWxlbWVudCk7CiAgICAgaWYg
KCFjaGVja05hbWUpCi0gICAgICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBu
YW1lOworICAgICAgICByZXR1cm4gZS0+Z2V0QXR0cmlidXRlKGUtPmlkQXR0cmlidXRlTmFtZSgp
KSA9PSBuYW1lOwogCiAgICAgLy8gZG9jdW1lbnQuYWxsIHJldHVybnMgb25seSBpbWFnZXMsIGZv
cm1zLCBhcHBsZXRzLCBvYmplY3RzIGFuZCBlbWJlZHMKICAgICAvLyBieSBuYW1lICh0aG91Z2gg
ZXZlcnl0aGluZyBieSBpZCkKQEAgLTI3Nyw3ICsyNzcsNyBAQCBib29sIEhUTUxDb2xsZWN0aW9u
OjpjaGVja0Zvck5hbWVNYXRjaChFCiAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKHNlbGVjdFRh
ZykpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZS0+Z2V0QXR0cmlidXRl
KG5hbWVBdHRyKSA9PSBuYW1lICYmIGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpICE9IG5hbWU7Cisg
ICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbmFtZSAmJiBlLT5nZXRBdHRy
aWJ1dGUoZS0+aWRBdHRyaWJ1dGVOYW1lKCkpICE9IG5hbWU7CiB9CiAKIE5vZGUqIEhUTUxDb2xs
ZWN0aW9uOjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdApAQCAtMzE5
LDcgKzMxOSw3IEBAIHZvaWQgSFRNTENvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSgpIGMKICAg
ICAgICAgaWYgKCFlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgSFRNTEVsZW1lbnQqIGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGVs
ZW1lbnQpOwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldEF0
dHJpYnV0ZShpZEF0dHIpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9
IGUtPmdldEF0dHJpYnV0ZShlLT5pZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwogICAg
ICAgICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIGFkZCB0byBp
ZCBjYWNoZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxEYXRhR3JpZENvbEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRGF0YUdyaWRDb2xFbGVtZW50LmNwcAkocmV2
aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERhdGFHcmlkQ29sRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBIVE1MRGF0YUdyaWRDb2xFbGVt
ZW50OjplbnN1cmVDb2x1bQogewogICAgIGlmIChtX2NvbHVtbikKICAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29sdW1uID0gRGF0YUdyaWRDb2x1bW46OmNyZWF0ZShnZXRBdHRyaWJ1dGUoaWRBdHRy
KSwgbGFiZWwoKSwgdHlwZSgpLCBwcmltYXJ5KCksIHNvcnRhYmxlKCkpOworICAgIG1fY29sdW1u
ID0gRGF0YUdyaWRDb2x1bW46OmNyZWF0ZShnZXRBdHRyaWJ1dGUoaWRBdHRyaWJ1dGVOYW1lKCkp
LCBsYWJlbCgpLCB0eXBlKCksIHByaW1hcnkoKSwgc29ydGFibGUoKSk7CiB9CiAKIHZvaWQgSFRN
TERhdGFHcmlkQ29sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCkBAIC0xNjIs
OCArMTYyLDggQEAgdm9pZCBIVE1MRGF0YUdyaWRDb2xFbGVtZW50OjpwYXJzZU1hcHBlZAogICAg
ICAgICBjb2x1bW4oKS0+c2V0U29ydGFibGUoc29ydGFibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IHNvcnRkaXJlY3Rpb25BdHRyKQogICAgICAgICBjb2x1bW4oKS0+c2V0U29y
dERpcmVjdGlvbihzb3J0RGlyZWN0aW9uKCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBpZEF0dHIpCi0gICAgICAgIGNvbHVtbigpLT5zZXRJZChnZXRBdHRyaWJ1dGUoaWRBdHRyKSk7
CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cmlidXRlTmFtZSgpKQorICAgICAg
ICBjb2x1bW4oKS0+c2V0SWQoZ2V0QXR0cmlidXRlKGlkQXR0cmlidXRlTmFtZSgpKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24g
NTIwOTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTQsNyArMTE0LDcgQEAgYm9vbCBIVE1MRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFs
aQogICAgIAogdm9pZCBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlICphdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyIHx8IGF0dHIt
Pm5hbWUoKSA9PSBjbGFzc0F0dHIgfHwgYXR0ci0+bmFtZSgpID09IHN0eWxlQXR0cikKKyAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cmlidXRlTmFtZSgpIHx8IGF0dHItPm5hbWUoKSA9PSBj
bGFzc0F0dHIgfHwgYXR0ci0+bmFtZSgpID09IHN0eWxlQXR0cikKICAgICAgICAgcmV0dXJuIFN0
eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogCiAgICAgU3RyaW5nIGlu
ZGV4c3RyaW5nOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9u
IDUyMDkyKQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMCw3ICsxMTAsOCBAQCBFbGVtZW50KiBIVE1MRm9ybUNvbGxlY3Rpb246Omdl
dE5hbWVkRm9yCiAgICAgYm9vbCBmb3VuZElucHV0RWxlbWVudHMgPSBmYWxzZTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybS0+Zm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGUgPSBmb3JtLT5mb3JtRWxlbWVudHNbaV07
Ci0gICAgICAgIGlmIChlLT5pc0VudW1lcmF0YWJsZSgpICYmIGUtPmdldEF0dHJpYnV0ZShhdHRy
TmFtZSkgPT0gbmFtZSkgeworICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVO
YW1lID0gKGF0dHJOYW1lID09IGlkQXR0cikgPyBlLT5pZEF0dHJpYnV0ZU5hbWUoKSA6IGF0dHJO
YW1lOworICAgICAgICBpZiAoZS0+aXNFbnVtZXJhdGFibGUoKSAmJiBlLT5nZXRBdHRyaWJ1dGUo
YXR0cmlidXRlTmFtZSkgPT0gbmFtZSkgewogICAgICAgICAgICAgZm91bmRJbnB1dEVsZW1lbnRz
ID0gdHJ1ZTsKICAgICAgICAgICAgIGlmICghZHVwbGljYXRlTnVtYmVyKQogICAgICAgICAgICAg
ICAgIHJldHVybiBlOwpAQCAtMTIxLDcgKzEyMiw4IEBAIEVsZW1lbnQqIEhUTUxGb3JtQ29sbGVj
dGlvbjo6Z2V0TmFtZWRGb3IKICAgICBpZiAoIWZvdW5kSW5wdXRFbGVtZW50cykgewogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybS0+aW1nRWxlbWVudHMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGUgPSBmb3JtLT5pbWdFbGVtZW50c1tp
XTsKLSAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpID09IG5hbWUpIHsK
KyAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSAoYXR0ck5h
bWUgPT0gaWRBdHRyKSA/IGUtPmlkQXR0cmlidXRlTmFtZSgpIDogYXR0ck5hbWU7CisgICAgICAg
ICAgICBpZiAoZS0+Z2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpID09IG5hbWUpIHsKICAgICAg
ICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZU51bWJlcikKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGU7CiAgICAgICAgICAgICAgICAgLS1kdXBsaWNhdGVOdW1iZXI7CkBAIC0xNzEsMTAgKzE3
MywxMCBAQCBOb2RlKiBIVE1MRm9ybUNvbGxlY3Rpb246Om5leHROYW1lZEl0ZW0oCiAgICAgLy8g
VGhlIG5leHROYW1lZEl0ZW1JbnRlcm5hbCBmdW5jdGlvbiBjYW4gcmV0dXJuIHRoZSBzYW1lIGl0
ZW0gdHdpY2UgaWYgaXQgaGFzCiAgICAgLy8gYm90aCBhbiBpZCBhbmQgbmFtZSB0aGF0IGFyZSBl
cXVhbCB0byB0aGUgbmFtZSBwYXJhbWV0ZXIuIFNvIHRoaXMgZnVuY3Rpb24KICAgICAvLyBjaGVj
a3MgaWYgd2UgYXJlIG9uIHRoZSBuYW1lQXR0ciBoYWxmIG9mIHRoZSBpdGVyYXRpb24gYW5kIHNr
aXBzIG92ZXIgYW55Ci0gICAgLy8gdGhhdCBhbHNvIGhhdmUgdGhlIHNhbWUgaWRBdHRyLgorICAg
IC8vIHRoYXQgYWxzbyBoYXZlIHRoZSBzYW1lIGlkQXR0cmlidXRlTmFtZS4KICAgICBFbGVtZW50
KiBpbXBsID0gbmV4dE5hbWVkSXRlbUludGVybmFsKG5hbWUpOwogICAgIGlmIChtX2lkc0RvbmUp
Ci0gICAgICAgIHdoaWxlIChpbXBsICYmIGltcGwtPmdldEF0dHJpYnV0ZShpZEF0dHIpID09IG5h
bWUpCisgICAgICAgIHdoaWxlIChpbXBsICYmIGltcGwtPmdldEF0dHJpYnV0ZShpbXBsLT5pZEF0
dHJpYnV0ZU5hbWUoKSkgPT0gbmFtZSkKICAgICAgICAgICAgIGltcGwgPSBuZXh0TmFtZWRJdGVt
SW50ZXJuYWwobmFtZSk7CiAgICAgcmV0dXJuIGltcGw7CiB9CkBAIC0xOTEsNyArMTkzLDcgQEAg
dm9pZCBIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZQogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBmLT5mb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSFRN
TEZvcm1Db250cm9sRWxlbWVudCogZSA9IGYtPmZvcm1FbGVtZW50c1tpXTsKICAgICAgICAgaWYg
KGUtPmlzRW51bWVyYXRhYmxlKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
aWRBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKGlkQXR0cik7CisgICAgICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShlLT5pZEF0dHJpYnV0ZU5h
bWUoKSk7CiAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZS0+
Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKICAgICAgICAgICAgIGlmICghaWRBdHRyVmFsLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgICAgIC8vIGFkZCB0byBpZCBjYWNoZQpAQCAtMjE4LDcgKzIy
MCw3IEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUKIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBmLT5pbWdFbGVtZW50cy5zaXplKCk7ICsraSkgewogICAg
ICAgICBIVE1MSW1hZ2VFbGVtZW50KiBlID0gZi0+aW1nRWxlbWVudHNbaV07Ci0gICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKGlkQXR0cik7Cisg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKGUt
PmlkQXR0cmlidXRlTmFtZSgpKTsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0
clZhbCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgICAgIGlmICghaWRBdHRyVmFs
LmlzRW1wdHkoKSAmJiAhZm91bmRJbnB1dEVsZW1lbnRzLmNvbnRhaW5zKGlkQXR0clZhbC5pbXBs
KCkpKSB7CiAgICAgICAgICAgICAvLyBhZGQgdG8gaWQgY2FjaGUKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcg
QEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6cGFyc2VNYXBwZWRBdAogewogICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gc3JjQXR0cikKICAgICAgICAgc2V0TG9jYXRpb24oZGVwcmVjYXRlZFBh
cnNlVVJMKGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRB
dHRyKSB7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cmlidXRlTmFtZSgpKSB7
CiAgICAgICAgIC8vIEltcG9ydGFudCB0byBjYWxsIHRocm91Z2ggdG8gYmFzZSBmb3IgdGhlIGlk
IGF0dHJpYnV0ZSBzbyB0aGUgaGFzSUQgYml0IGdldHMgc2V0LgogICAgICAgICBIVE1MRnJhbWVP
d25lckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogICAgICAgICBtX2ZyYW1l
TmFtZSA9IGF0dHItPnZhbHVlKCk7CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBIVE1MRnJhbWVF
bGVtZW50QmFzZTo6c2V0TmFtZUFuZE9wZQogewogICAgIG1fZnJhbWVOYW1lID0gZ2V0QXR0cmli
dXRlKG5hbWVBdHRyKTsKICAgICBpZiAobV9mcmFtZU5hbWUuaXNOdWxsKCkpCi0gICAgICAgIG1f
ZnJhbWVOYW1lID0gZ2V0QXR0cmlidXRlKGlkQXR0cik7CisgICAgICAgIG1fZnJhbWVOYW1lID0g
Z2V0QXR0cmlidXRlKGlkQXR0cmlidXRlTmFtZSgpKTsKICAgICAKICAgICBpZiAoRnJhbWUqIHBh
cmVudEZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgbV9mcmFtZU5hbWUgPSBw
YXJlbnRGcmFtZS0+dHJlZSgpLT51bmlxdWVDaGlsZE5hbWUobV9mcmFtZU5hbWUpOwpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gNTIwOTIpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEsNyBA
QCB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgICAgICBk
b2N1bWVudC0+YWRkTmFtZWRJdGVtKG5ld05hbWUpOwogICAgICAgICB9CiAgICAgICAgIG1fbmFt
ZSA9IG5ld05hbWU7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyKSB7Cisg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyaWJ1dGVOYW1lKCkpIHsKICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdJZCA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlm
IChpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAg
ICAgICAgSFRNTERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+
KHRoaXMtPmRvY3VtZW50KCkpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCShyZXZpc2lv
biA1MjA5MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc4LDkgKzc4LDkgQEAgYm9vbCBIVE1MTWFwRWxlbWVudDo6bWFwTW91c2VFdmVudChp
bnQgeAogdm9pZCBIVE1MTWFwRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lID0gYXR0
ci0+bmFtZSgpOwotICAgIGlmIChhdHRyTmFtZSA9PSBpZEF0dHIgfHwgYXR0ck5hbWUgPT0gbmFt
ZUF0dHIpIHsKKyAgICBpZiAoYXR0ck5hbWUgPT0gaWRBdHRyaWJ1dGVOYW1lKCkgfHwgYXR0ck5h
bWUgPT0gbmFtZUF0dHIpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7Ci0g
ICAgICAgIGlmIChhdHRyTmFtZSA9PSBpZEF0dHIpIHsKKyAgICAgICAgaWYgKGF0dHJOYW1lID09
IGlkQXR0cmlidXRlTmFtZSgpKSB7CiAgICAgICAgICAgICAvLyBDYWxsIGJhc2UgY2xhc3Mgc28g
dGhhdCBoYXNJRCBiaXQgZ2V0cyBzZXQuCiAgICAgICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAgICAgICAgICAgICBpZiAoZG9jLT5pc0hUTUxEb2N1bWVu
dCgpKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDUyMDky
KQorKysgV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDcgKzYzLDcgQEAgRWxlbWVudCogSFRNTE5hbWVDb2xsZWN0aW9uOjppdGVtQWZ0ZXIo
RQogICAgICAgICAgICAgICAgICAgICBlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCiAgICAgICAg
ICAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1fbmFtZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlOwotICAgICAgICAgICAgICAgIGlmIChlLT5n
ZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBtX25hbWUpCisgICAgICAgICAgICAgICAgaWYgKGUtPmdl
dEF0dHJpYnV0ZShlLT5pZEF0dHJpYnV0ZU5hbWUoKSkgPT0gbV9uYW1lKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgRG9jdW1lbnROYW1lZEl0ZW1zOgpAQCAtNzQsMTQgKzc0LDE0IEBAIEVsZW1lbnQqIEhUTUxO
YW1lQ29sbGVjdGlvbjo6aXRlbUFmdGVyKEUKICAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmdl
dEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLT5oYXNUYWdOYW1lKGFwcGxl
dFRhZykpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0
cikgPT0gbV9uYW1lIHx8IGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpID09IG1fbmFtZSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9uYW1lIHx8
IGUtPmdldEF0dHJpYnV0ZShlLT5pZEF0dHJpYnV0ZU5hbWUoKSkgPT0gbV9uYW1lKQogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChl
LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChlLT5n
ZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1fbmFtZSB8fCBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRy
KSA9PSBtX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmICgoZS0+Z2V0QXR0cmlidXRlKG5h
bWVBdHRyKSA9PSBtX25hbWUgfHwgZS0+Z2V0QXR0cmlidXRlKGUtPmlkQXR0cmlidXRlTmFtZSgp
KSA9PSBtX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8
SFRNTE9iamVjdEVsZW1lbnQqPihlKS0+aXNEb2NOYW1lZEl0ZW0oKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS0+aGFzVGFn
TmFtZShpbWdUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1dGUo
bmFtZUF0dHIpID09IG1fbmFtZSB8fCAoZS0+Z2V0QXR0cmlidXRlKGlkQXR0cikgPT0gbV9uYW1l
ICYmIGUtPmhhc0F0dHJpYnV0ZShuYW1lQXR0cikpKQorICAgICAgICAgICAgICAgICAgICBpZiAo
ZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUgfHwgKGUtPmdldEF0dHJpYnV0ZShl
LT5pZEF0dHJpYnV0ZU5hbWUoKSkgPT0gbV9uYW1lICYmIGUtPmhhc0F0dHJpYnV0ZShuYW1lQXR0
cikpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxPYmplY3RF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAgICAgICAgICAgICBkb2N1bWVudC0+YWRkTmFtZWRJdGVt
KG5ld05hbWUpOwogICAgICAgICB9CiAgICAgICAgIG1fbmFtZSA9IG5ld05hbWU7Ci0gICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyKSB7CisgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gaWRBdHRyaWJ1dGVOYW1lKCkpIHsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBuZXdJZCA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmIChpc0RvY05hbWVkSXRlbSgpICYm
IGluRG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAg
ICAgICBIVE1MRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4o
dGhpcy0+ZG9jdW1lbnQoKSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwCShyZXZp
c2lvbiA1MjA5MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBIVE1MUGFyYW1FbGVtZW50Ojp+SFRNTFBhcmFtRWxl
bWVudCgpCiAKIHZvaWQgSFRNTFBhcmFtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyKSB7
CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHJpYnV0ZU5hbWUoKSkgewogICAgICAgICAv
LyBNdXN0IGNhbGwgYmFzZSBjbGFzcyBzbyB0aGF0IGhhc0lEIGJpdCBnZXRzIHNldC4KICAgICAg
ICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogICAgICAgICBpZiAo
ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hl
ZEZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCShy
ZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgU1ZHRm9udEVsZW1lbnQqIENhY2hlZEZvbnQ6Omdl
dFNWR0ZvbnRCeQogICAgICAgICBOb2RlKiBub2RlID0gbGlzdC0+aXRlbShpKTsKICAgICAgICAg
QVNTRVJUKG5vZGUpOwogCi0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSkt
PmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0cikgIT0gZm9udE5hbWUpCisgICAgICAgIGlm
IChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdldEF0dHJpYnV0ZShzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obm9kZSktPmlkQXR0cmlidXRlTmFtZSgpKSAhPSBmb250TmFtZSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIEFTU0VSVChub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVz
Ojpmb250VGFnKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAJKHJldmlzaW9uIDUyMDkyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCB2b2lkIFJlbmRlckxheWVy
QmFja2luZzo6Y3JlYXRlR3JhcGhpY3NMCiAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNl
dE5hbWUoIkRvY3VtZW50IE5vZGUiKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAo
cmVuZGVyZXIoKS0+bm9kZSgpLT5pc0hUTUxFbGVtZW50KCkgJiYgcmVuZGVyZXIoKS0+bm9kZSgp
LT5oYXNJRCgpKQotICAgICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0TmFtZShyZW5k
ZXJlcigpLT5yZW5kZXJOYW1lKCkgKyBTdHJpbmcoIiAiKSArIHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50Kj4ocmVuZGVyZXIoKS0+bm9kZSgpKS0+Z2V0QXR0cmlidXRlKGlkQXR0cikpOworICAgICAg
ICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0TmFtZShyZW5kZXJlcigpLT5yZW5kZXJOYW1l
KCkgKyBTdHJpbmcoIiAiKSArIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4ocmVuZGVyZXIoKS0+
bm9kZSgpKS0+Z2V0SURBdHRyaWJ1dGUoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXROYW1lKHJlbmRlcmVyKCktPnJlbmRlck5hbWUoKSk7
CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQu
Y3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjUsNyArNTI1LDcgQEAgdm9pZCB3cml0ZVJl
bmRlclJlc291cmNlcyhUZXh0U3RyZWFtJiB0cwogICAgICAgICBpZiAoIXJlc291cmNlKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgU3RyaW5nIGVsZW1lbnRJZCA9IHN2Z0VsZW1l
bnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0cik7CisgICAgICAgIFN0cmluZyBlbGVt
ZW50SWQgPSBzdmdFbGVtZW50LT5nZXRBdHRyaWJ1dGUoc3ZnRWxlbWVudC0+aWRBdHRyaWJ1dGVO
YW1lKCkpOwogICAgICAgICAvLyBGSVhNRTogVGhlc2UgbmFtZXMgYXJlIGxpZXMhCiAgICAgICAg
IGlmIChyZXNvdXJjZS0+aXNQYWludFNlcnZlcigpKSB7CiAgICAgICAgICAgICBSZWZQdHI8U1ZH
UGFpbnRTZXJ2ZXI+IHBhaW50U2VydmVyID0gV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR1Bh
aW50U2VydmVyPihyZXNvdXJjZSk7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24gNTIwOTIp
CisrKyBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDcg
KzIzNCw3IEBAIHZvaWQgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogICAgIFN0
eWxlZEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zKiBleHRlbnNpb25zID0gZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpOwog
Ci0gICAgU3RyaW5nIHJlc291cmNlSWQgPSBTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldChnZXRB
dHRyaWJ1dGUoaWRBdHRyKSk7CisgICAgU3RyaW5nIHJlc291cmNlSWQgPSBTVkdVUklSZWZlcmVu
Y2U6OmdldFRhcmdldChnZXRBdHRyaWJ1dGUoaWRBdHRyaWJ1dGVOYW1lKCkpKTsKICAgICBpZiAo
ZXh0ZW5zaW9ucy0+aXNQZW5kaW5nUmVzb3VyY2UocmVzb3VyY2VJZCkpIHsKICAgICAgICAgc3Rk
OjphdXRvX3B0cjxIYXNoU2V0PFNWR1N0eWxlZEVsZW1lbnQqPiA+IGNsaWVudHMoZXh0ZW5zaW9u
cy0+cmVtb3ZlUGVuZGluZ1Jlc291cmNlKHJlc291cmNlSWQpKTsKICAgICAgICAgaWYgKGNsaWVu
dHMtPmlzRW1wdHkoKSkKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA1
MjA5MikKKysrIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODksNyArMTg5LDcgQEAgYm9vbCBTVkdTdHlsZWRFbGVtZW50Ojppc0tub3duQXR0cmli
dXRlKAogICAgIGlmIChwcm9wSWQgPiAwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJl
dHVybiAoYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjppZEF0dHIgfHwgYXR0ck5hbWUgPT0gSFRNTE5h
bWVzOjpzdHlsZUF0dHIpOyAKKyAgICByZXR1cm4gKGF0dHJOYW1lID09IGlkQXR0cmlidXRlTmFt
ZSgpIHx8IGF0dHJOYW1lID09IEhUTUxOYW1lczo6c3R5bGVBdHRyKTsgCiB9CiAKIHZvaWQgU1ZH
U3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvd21sL1dNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA1MjA5MikKKysrIFdlYkNvcmUv
d21sL1dNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIGJvb2wg
V01MRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWYKICAgICAKIHZvaWQgV01MRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gSFRNTE5hbWVzOjppZEF0dHIKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IGlkQXR0cmlidXRlTmFtZSgpCiAgICAgICAgIHx8IGF0dHItPm5hbWUoKSA9PSBIVE1MTmFt
ZXM6OmNsYXNzQXR0cgogICAgICAgICB8fCBhdHRyLT5uYW1lKCkgPT0gSFRNTE5hbWVzOjpzdHls
ZUF0dHIpCiAgICAgICAgIHJldHVybiBTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDUyMTA2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMDktMTItMTQgIFNodSBDaGFu
ZyAgPENoYW5nLlNodUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTmV3IHRlc3QgY2FzZXMgZm9yIGlzSWQgc3VwcG9ydC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NzgKKworICAgICAg
ICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA0LWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNC5qczoKKyAgICAgICAgKHNldFVw
UGFnZSk6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDUtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA1LmpzOgor
ICAgICAgICAoc2V0VXBQYWdlKToKKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2F0dHJpc2lk
LWV4dHJhMDEtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50
L2F0dHJpc2lkLWV4dHJhMDEuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVu
dC9pZC1pbi1hcHBsZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9F
bGVtZW50L2lkLWluLWFwcGxldC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVt
ZW50L2lkLWluLWRlbGV0ZWJ1dHRvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZG9tL0VsZW1lbnQvaWQtaW4tZGVsZXRlYnV0dG9uLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZm9ybWNvbGxlY3Rpb24tZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLWZvcm1jb2xsZWN0aW9uLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWUtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLWZyYW1lLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWVzZXQtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2lkLWluLWZyYW1lc2V0
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZ2V0ZWxlbWVu
dDAxLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9pZC1p
bi1nZXRlbGVtZW50MDEuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9p
ZC1pbi1pbnNlcnQtaHItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9F
bGVtZW50L2lkLWluLWluc2VydC1oci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9F
bGVtZW50L2lkLWluLW1hcC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9t
L0VsZW1lbnQvaWQtaW4tbWFwLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0VsZW1l
bnQvaWQtaW4tcGFyYW0tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9F
bGVtZW50L2lkLWluLXBhcmFtLmh0bWw6IEFkZGVkLgorCiAyMDA5LTEyLTE0ICBFcmljIENhcmxz
b24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIE5vdCByZXZpZXdlZCwgYnVp
bGQgZml4LgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lk
MDQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZl
bDMvY29yZS9hdHRyaXNpZDA0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTIwOTIpCisrKyBMYXlv
dXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNC1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIwMDEv
RE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwNAotU3RhdHVzCXNraXAKLU1lc3Nh
Z2UJSFRNTCBsb2FkZXIgZG9lcyBub3Qgc3VwcG9ydCB2YWxpZGF0aW5nPXRydWUKK1N0YXR1cwlT
dWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQw
NC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0
cmlzaWQwNC5qcwkocmV2aXNpb24gNTIwOTIpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2
ZWwzL2NvcmUvYXR0cmlzaWQwNC5qcwkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksMTYgQEAg
ZnVuY3Rpb24gc2V0VXBQYWdlKCkgewogICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBi
dWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCiAgICAgIC8vCiAgICAgIGJ1aWxkZXIgPSBjcmVh
dGVDb25maWd1cmVkQnVpbGRlcigpOwotICAgICAgIHNldEltcGxlbWVudGF0aW9uQXR0cmlidXRl
KCJ2YWxpZGF0aW5nIiwgdHJ1ZSk7CisKKyAgICAgLy8KKyAgICAgLy8gV2ViS2l0IG1vZGlmaWNh
dGlvbjoKKyAgICAgLy8KKyAgICAgLy8gUmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBvdGhlcndp
c2UgdGVzdCBjYXNlIHNraXBwZWQuCisgICAgIC8vCisgICAgIC8vc2V0SW1wbGVtZW50YXRpb25B
dHRyaWJ1dGUoInZhbGlkYXRpbmciLCB0cnVlKTsKKyAgICAgLy8KKyAgICAgLy8gRW5kIFdlYktp
dCBtb2RpZmljYXRpb24KKyAgICAgLy8KIAogICAgICAgZG9jc0xvYWRlZCA9IDA7CiAgICAgICAK
SW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA1LWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUv
YXR0cmlzaWQwNS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUyMDkyKQorKysgTGF5b3V0VGVzdHMv
ZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0
LVN1aXRlL2xldmVsMy9jb3JlL2F0dHJpc2lkMDUKLVN0YXR1cwlza2lwCi1NZXNzYWdlCUhUTUwg
bG9hZGVyIGRvZXMgbm90IHN1cHBvcnQgdmFsaWRhdGluZz10cnVlCitTdGF0dXMJU3VjY2VzcwpJ
bmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDUuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDUu
anMJKHJldmlzaW9uIDUyMDkyKQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3Jl
L2F0dHJpc2lkMDUuanMJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDE2IEBAIGZ1bmN0aW9u
IHNldFVwUGFnZSgpIHsKICAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwg
bWF5IHRocm93IGV4Y2VwdGlvbgogICAgICAvLwogICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmln
dXJlZEJ1aWxkZXIoKTsKLSAgICAgICBzZXRJbXBsZW1lbnRhdGlvbkF0dHJpYnV0ZSgidmFsaWRh
dGluZyIsIHRydWUpOworCisgICAgIC8vCisgICAgIC8vIFdlYktpdCBtb2RpZmljYXRpb246Cisg
ICAgIC8vCisgICAgIC8vIFJlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgb3RoZXJ3aXNlIHRlc3Qg
Y2FzZSBza2lwcGVkLgorICAgICAvLworICAgICAvL3NldEltcGxlbWVudGF0aW9uQXR0cmlidXRl
KCJ2YWxpZGF0aW5nIiwgdHJ1ZSk7CisgICAgIC8vCisgICAgIC8vIEVuZCBXZWJLaXQgbW9kaWZp
Y2F0aW9uCisgICAgIC8vCiAKICAgICAgIGRvY3NMb2FkZWQgPSAwOwogICAgICAgCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2F0dHJpc2lkLWV4dHJhMDEtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvYXR0cmlzaWQtZXh0
cmEwMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9F
bGVtZW50L2F0dHJpc2lkLWV4dHJhMDEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDExIEBACitUZXN0IEF0dHIuaXNJZCB3aGVyZSBBdHRyIGlzIGNyZWF0ZWQgd2l0aG91dCBl
bGVtZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBhdHRyLmlzSWQg
aXMgZmFsc2UKK1BBU1MgYXR0ci5pc0lkIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9F
bGVtZW50L2F0dHJpc2lkLWV4dHJhMDEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9FbGVtZW50L2F0dHJpc2lkLWV4dHJhMDEuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvYXR0cmlzaWQtZXh0cmEwMS5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIzIEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBBdHRyLmlzSWQgd2hlcmUgQXR0
ciBpcyBjcmVhdGVkIHdpdGhvdXQgZWxlbWVudC4iKTsKKyAgICAKK3ZhciBhdHRyID0gZG9jdW1l
bnQuY3JlYXRlQXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFj
ZSIsInhtbDpsYW5nIik7CitzaG91bGRCZUZhbHNlKCdhdHRyLmlzSWQnKTsKKwordmFyIGF0dHIg
PSBkb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGVOUygiIiwiaWQiKTsKK3Nob3VsZEJlVHJ1ZSgnYXR0
ci5pc0lkJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lk
LWluLWFwcGxldC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9k
b20vRWxlbWVudC9pZC1pbi1hcHBsZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1hcHBsZXQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0IHVzaW5nIGlkIGluIGFwcGxldCBlbGVtZW50
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJhcHBsZXQxIikgaXMgbm9uLW51bGwuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxl
bWVudC9pZC1pbi1hcHBsZXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9FbGVtZW50L2lkLWluLWFwcGxldC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9kb20vRWxlbWVudC9pZC1pbi1hcHBsZXQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8YXBw
bGV0IGlkPSJhcHBsZXQxIiB3aWR0aD0iMTAiIGhlaWdodD0iMTAiPjwvYXBwbGV0PgorCis8c2Ny
aXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdXNpbmcgaWQgaW4gYXBwbGV0IGVsZW1lbnQiKTsKKwor
c2hvdWxkQmVOb25OdWxsKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwbGV0MSIpJyk7CisK
K3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWRlbGV0ZWJ1
dHRvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxl
bWVudC9pZC1pbi1kZWxldGVidXR0b24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1kZWxldGVidXR0b24tZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACitUZXN0IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJXZWJLaXQtRWRpdGluZy1EZWxldGUtQnV0dG9uIikKKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1MgZGVsZXRlQnV0dG9uIGlzIG5vbi1udWxsLgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisxCisyCisKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZGVsZXRlYnV0dG9uLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1kZWxldGVidXR0b24uaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZGVs
ZXRlYnV0dG9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKKzxodG1sPgorPGhl
YWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48
L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPGRpdiBjb250ZW50ZWRpdGFibGU9InRy
dWUiPgorPHVsIGNsYXNzPSJuZWVkc0RlbGV0aW9uVUkiPjxsaT4xPC9saT48bGkgaWQ9ImxpIj4y
PC9saT48L3VsPgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ1Rlc3QgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoIldlYktpdC1FZGl0aW5nLURlbGV0ZS1CdXR0b24iKScpOworCitzZWwgPSB3aW5k
b3cuZ2V0U2VsZWN0aW9uKCk7CitsaSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsaSIpOwor
c2VsLnNldFBvc2l0aW9uKGxpLCAwKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgIGRlbGV0ZUJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJXZWJLaXQt
RWRpdGluZy1EZWxldGUtQnV0dG9uIik7CisgICAgc2hvdWxkQmVOb25OdWxsKCdkZWxldGVCdXR0
b24nKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQt
aW4tZm9ybWNvbGxlY3Rpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZm9ybWNvbGxlY3Rpb24tZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mb3JtY29sbGVj
dGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgdXNp
bmcgaWQgaW4gSFRNTEZvcm1Db2xsZWN0aW9uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIGVsZW1zKCJpZHMxIiwxKS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSBpcyAibmFtZTIi
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKyAKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZm9ybWNvbGxlY3Rpb24uaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWZvcm1j
b2xsZWN0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVt
ZW50L2lkLWluLWZvcm1jb2xsZWN0aW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjUg
QEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPGZvcm0gaWQ9
ImlkZjEiPgorPHNlbGVjdCBpZD0iaWRzMSIgbmFtZT0ibmFtZTEiPjxvcHRpb24gc2VsZWN0ZWQ+
RkFJTFVSRTwvb3B0aW9uPjwvc2VsZWN0PgorPHNlbGVjdCBpZD0iaWRzMSIgbmFtZT0ibmFtZTIi
PjxvcHRpb24gc2VsZWN0ZWQ+RkFJTFVSRTwvb3B0aW9uPjwvc2VsZWN0PgorPC9mb3JtPgorCis8
c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdXNpbmcgaWQgaW4gSFRNTEZvcm1Db2xsZWN0aW9u
Iik7CisKK3ZhciBlbGVtcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZGYxIikuZWxlbWVu
dHM7CitzaG91bGRCZSgnZWxlbXMoImlkczEiLDEpLmdldEF0dHJpYnV0ZSgibmFtZSIpJywgJyJu
YW1lMiInKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQt
aW4tZnJhbWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9t
L0VsZW1lbnQvaWQtaW4tZnJhbWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgdXNpbmcgaWQgaW4gZnJhbWUKKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRoZWZy
YW1lIikgaXMgbm9uLW51bGwuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1m
cmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQt
aW4tZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1l
bnQvaWQtaW4tZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+
Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRp
b24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRp
b24oIlRlc3QgdXNpbmcgaWQgaW4gZnJhbWUiKTsKKyAgICAKK3ZhciBwYXJlbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKK3BhcmVudC5pZCA9ICd0aGVmcmFtZSc7Citkb2N1
bWVudC5ib2R5LmFwcGVuZENoaWxkKHBhcmVudCk7CisKK3Nob3VsZEJlTm9uTnVsbCgnZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInRoZWZyYW1lIiknKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWVzZXQtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZnJhbWVzZXQtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1p
bi1mcmFtZXNldC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorQUxF
UlQ6IDEKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mcmFtZXNl
dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4t
ZnJhbWVzZXQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1l
bnQvaWQtaW4tZnJhbWVzZXQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorPGh0
bWw+CisKKzxmcmFtZXNldCBpZD0iZnJhbWVzZXQiPgorICA8ZnJhbWUgbmFtZT0iZnJhbWUyIiBz
cmM9ImFib3V0OmJsYW5rIj4KKyAgPGZyYW1lIG5hbWU9ImZyYW1lMSIgc3JjPSJqYXZhc2NyaXB0
OgorICAgIGZ1bmN0aW9uIGxvZyhzKQorICAgIHsKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgIGFsZXJ0KHMpOworICAgICAgZWxzZQorICAgICAgICB0b3Au
ZnJhbWUxLmRvY3VtZW50LndyaXRlKCc8cD4nICsgcyArICc8L3A+Jyk7CisgICAgfQorCisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKworICAgIHRvcC5mcmFtZXNldC5yZW1vdmVDaGlsZCh0b3AuZnJh
bWUyLmZyYW1lRWxlbWVudCk7CisgICAgbG9nKHRvcC5mcmFtZXNldC5jaGlsZHJlbi5sZW5ndGgp
OworICAiPgorCisgIDxmcmFtZSBuYW1lPSJmcmFtZTMiIHNyYz0iYWJvdXQ6YmxhbmsiPgorPC9m
cmFtZXNldD4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQt
aW4tZ2V0ZWxlbWVudDAxLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9FbGVtZW50L2lkLWluLWdldGVsZW1lbnQwMS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWdldGVsZW1lbnQwMS1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3QgZ2V0RWxlbWVu
dEJ5SWQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZWxlbS5nZXRBdHRy
aWJ1dGUoIm5hbWUiKSBpcyAibmFtZTEiCitQQVNTIGVsZW0uZ2V0QXR0cmlidXRlKCJuYW1lIikg
aXMgIm5hbWUyIgorUEFTUyBlbGVtIGlzIG51bGwKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVt
ZW50L2lkLWluLWdldGVsZW1lbnQwMS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZG9tL0VsZW1lbnQvaWQtaW4tZ2V0ZWxlbWVudDAxLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWdldGVsZW1lbnQwMS5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+CisKKzxkaXYgbmFtZT0nbmFtZTEnIGlkPSdpZDEnLz4KKzxkaXYgbmFtZT0nbmFt
ZTInIGlkPSdpZDInLz4KKzxkaXYgbmFtZT0nbmFtZTMnIGlkPSdpZDInLz4KKworPHNjcmlwdD4K
K2Rlc2NyaXB0aW9uKCJUZXN0IGdldEVsZW1lbnRCeUlkIik7CisKK3ZhciBlbGVtOworCisvLyBl
bGVtZW50IGZvdW5kIHdpdGggZXhhY3QgbWF0Y2gKK2VsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnaWQxJyk7CitzaG91bGRCZSgnZWxlbS5nZXRBdHRyaWJ1dGUoIm5hbWUiKScsICcibmFt
ZTEiJyk7CisKKy8vIG11bHRpcGxlIGVsZW1lbnRzIGhhdmluZyBzYW1lIGlkIHJldHVybiB0aGUg
Zmlyc3Qgb25lCitlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMicpOworc2hvdWxk
QmUoJ2VsZW0uZ2V0QXR0cmlidXRlKCJuYW1lIiknLCAnIm5hbWUyIicpOworCisvLyBlbGVtZW50
IHdpdGggaWQgbm90IGZvdW5kCitlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMycp
Oworc2hvdWxkQmVOdWxsKCdlbGVtJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9FbGVtZW50L2lkLWluLWluc2VydC1oci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1pbnNlcnQtaHItZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1pbnNl
cnQtaHItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0IHVz
aW5nIGlkIGluIGV4ZWNDb21tYW5kKEluc2VydEhvcml6b250YWxSdWxlKQorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBociBpcyBub24tbnVsbC4KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorZm9vYmFyCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWluc2VydC1oci5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4taW5zZXJ0LWhyLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWluc2VydC1oci5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+CisKKzxkaXYgaWQ9InRlc3QxIiBjb250ZW50ZWRpdGFibGU9InRy
dWUiPmZvb2JhcjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdXNpbmcgaWQg
aW4gZXhlY0NvbW1hbmQoSW5zZXJ0SG9yaXpvbnRhbFJ1bGUpIik7CisKK3ZhciBzID0gd2luZG93
LmdldFNlbGVjdGlvbigpOwordmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdDEi
KTsKK3Muc2V0UG9zaXRpb24oZSwgMCk7CisKK3ZhciBpZCA9ICJociI7Citkb2N1bWVudC5leGVj
Q29tbWFuZCgiSW5zZXJ0SG9yaXpvbnRhbFJ1bGUiLCBmYWxzZSwgaWQpOwordmFyIGhyID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworCitzaG91bGRCZU5vbk51bGwoJ2hyJyk7CisKK3Zh
ciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLW1hcC1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1t
YXAtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxl
bWVudC9pZC1pbi1tYXAtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBA
CitUZXN0IHVzaW5nIGlkIGluIG1hcCBlbGVtZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlyc3RtYXAiKSBpcyBub24t
bnVsbC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLW1hcC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4tbWFwLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLW1hcC5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3Mi
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+CisKKzxtYXAgdGl0bGU9Im1hcCIgaWQ9ImZpcnN0bWFwIj4KKworPHNj
cmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IHVzaW5nIGlkIGluIG1hcCBlbGVtZW50LiIpOworICAg
IAorc2hvdWxkQmVOb25OdWxsKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlyc3RtYXAiKScp
OworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1wYXJh
bS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVu
dC9pZC1pbi1wYXJhbS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9FbGVtZW50L2lkLWluLXBhcmFtLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMCBAQAorVGVzdCB1c2luZyBpZCBpbiBwYXJhbSBlbGVtZW50LgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWQx
IikgaXMgbm9uLW51bGwuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1wYXJh
bS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvaWQtaW4t
cGFyYW0uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQv
aWQtaW4tcGFyYW0uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24i
PjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorICAgIAorPG9iamVjdCB3aWR0aD0xMDAg
aGVpZ2h0PTEwMD4KKyAgPHBhcmFtIG5hbWU9Im1vdmllIiBpZD0iaWQxIj4KKzwvb2JqZWN0PiAg
ICAKKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IHVzaW5nIGlkIGluIHBhcmFtIGVsZW1l
bnQuIik7CisKK3Nob3VsZEJlTm9uTnVsbCgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkMSIp
Jyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45604</attachid>
            <date>2009-12-29 08:47:58 -0800</date>
            <delta_ts>2010-01-05 13:10:29 -0800</delta_ts>
            <desc>implement setIdAttribute</desc>
            <filename>bug5578s_1.patch</filename>
            <type>text/plain</type>
            <size>28824</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjYwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDktMTItMjggIFNodSBDaGFuZyAgPENoYW5nLlNodUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50ZWQgc2V0SWRBdHRyaWJ1dGUgYXMgc3BlY2lmaWVkIGJ5IERPTSBMZXZlbCAzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU3OAorCisgICAg
ICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0SWRB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0SWRBdHRyaWJ1dGVOUyk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRJZEF0dHJpYnV0ZU5vZGUpOgorICAgICAg
ICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9tL0VsZW1lbnQuaWRsOgorCiAyMDA5LTEy
LTI4ICBMYXN6bG8gR29tYm9zICA8bGFzemxvLjEuZ29tYm9zQG5va2lhLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDUyNDE4KQor
KysgV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOTcsNiArMTE5
Nyw1MyBAQCBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZU5TKGNvbnN0IFN0cmluCiAgICAgcmV0
dXJuIGF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2Fs
TmFtZSwgbmFtZXNwYWNlVVJJKSk7CiB9CiAKK3ZvaWQgRWxlbWVudDo6c2V0SWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgaWRBdHRyaWJ1dGVOYW1lLCBib29sIGlzSWQsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIGlmICghaGFzQXR0cmlidXRlKGlkQXR0cmlidXRlTmFtZSkpIHsK
KyAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgRWxlbWVudFJhcmVEYXRhKiBkYXRhID0gZW5zdXJlUmFyZURhdGEoKTsKKworICAgIGlmIChp
c0lkKSB7CisgICAgICAgIGRhdGEtPm1faWRBdHRyaWJ1dGVOYW1lID0gaWRBdHRyaWJ1dGVOYW1l
OworICAgICAgICBzZXRIYXNJRCh0cnVlKTsKKyAgICAgICAgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBkYXRhLT5tX2lkQXR0cmlidXRlTmFtZSA9IFF1YWxp
ZmllZE5hbWUobnVsbEF0b20sIG51bGxBdG9tLCBudWxsQXRvbSk7CisgICAgICAgIHNldEhhc0lE
KGZhbHNlKTsKKyAgICAgICAgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOworICAgIH0KK30KKwordm9p
ZCBFbGVtZW50OjpzZXRJZEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgaXNJZCwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUg
PSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpID8gbmFtZS5sb3dlcigpIDogbmFtZTsK
KyAKKyAgICBzZXRJZEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUs
IG51bGxBdG9tKSwgaXNJZCwgZWMpOworfQorCit2b2lkIEVsZW1lbnQ6OnNldElkQXR0cmlidXRl
TlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lLCBi
b29sIGlzSWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldElkQXR0cmlidXRlKFF1YWxp
ZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKSwgaXNJZCwgZWMpOwor
fQorIAordm9pZCBFbGVtZW50OjpzZXRJZEF0dHJpYnV0ZU5vZGUoQXR0ciogYXR0ciwgYm9vbCBp
c0lkLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWF0dHIpIHsKKyAgICAgICAgZWMg
PSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
dHRyLT5vd25lckVsZW1lbnQoKSAhPSB0aGlzKSB7CisgICAgICAgIGVjID0gTk9UX0ZPVU5EX0VS
UjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNldElkQXR0cmlidXRlKGF0dHItPnF1
YWxpZmllZE5hbWUoKSwgaXNJZCwgZWMpOworfQorCiBDU1NTdHlsZURlY2xhcmF0aW9uICpFbGVt
ZW50OjpzdHlsZSgpCiB7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiA1MjQxOCkK
KysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCwx
MCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBpZEF0dHJpYnV0ZU5hbWUo
KSBjb25zdDsKIAorICAgIHZvaWQgc2V0SWRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sIGlzSWQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldElkQXR0cmlidXRlTlMoY29u
c3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lLCBib29sIGlz
SWQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldElkQXR0cmlidXRlTm9kZShBdHRyKiwg
Ym9vbCBpc0lkLCBFeGNlcHRpb25Db2RlJik7CisKICAgICB2b2lkIHNjcm9sbEludG9WaWV3KGJv
b2wgYWxpZ25Ub1RvcCA9IHRydWUpOwogICAgIHZvaWQgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChi
b29sIGNlbnRlcklmTmVlZGVkID0gdHJ1ZSk7CiAKQEAgLTE3OCw3ICsxODIsOCBAQCBwdWJsaWM6
CiAgICAgLy8gUGxlYXNlIGRvbid0IHVzZSBzZXRDU3RyaW5nQXR0cmlidXRlIGluIHBlcmZvcm1h
bmNlLXNlbnNpdGl2ZSBjb2RlOwogICAgIC8vIHVzZSBhIHN0YXRpYyBBdG9taWNTdHJpbmcgdmFs
dWUgaW5zdGVhZCB0byBhdm9pZCB0aGUgY29udmVyc2lvbiBvdmVyaGVhZC4KICAgICB2b2lkIHNl
dENTdHJpbmdBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IGNoYXIqIGNTdHJp
bmdWYWx1ZSk7Ci0KKyAgICB2b2lkIHNldElkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGlkQXR0cmlidXRlTmFtZSwgYm9vbCBpc0lkLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgCiAgICAg
dmlydHVhbCBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMoKSBjb25zdDsKICAgICBOYW1lZE5vZGVN
YXAqIGF0dHJpYnV0ZXMoYm9vbCByZWFkb25seSkgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUvZG9t
L0VsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuaWRsCShyZXZp
c2lvbiA1MjQxOCkKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC02Nyw2ICs2NywxOSBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtPbGRTdHlsZU9iakNdIGJv
b2xlYW4gaGFzQXR0cmlidXRlTlMoaW4gW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJp
bmcgbmFtZXNwYWNlVVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluIERPTVN0cmluZyBsb2NhbE5hbWUpOwogCisgICAgICAgIC8vIERPTSBMZXZlbCAz
IENvcmUKKworICAgICAgICB2b2lkIHNldElkQXR0cmlidXRlKGluIERPTVN0cmluZyBuYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gaXNJZCkKKyAgICAgICAgICAg
IHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICB2b2lkIHNldElkQXR0cmlidXRlTlMoaW4g
W0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgbmFtZXNwYWNlVVJJLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW4gRE9NU3RyaW5nIGxvY2FsTmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gaXNJZCkKKyAgICAgICAgICAgIHJhaXNl
cyhET01FeGNlcHRpb24pOworICAgICAgICB2b2lkIHNldElkQXR0cmlidXRlTm9kZShpbiBBdHRy
IGlkQXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBpc0lk
KQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisKICNpZiAhZGVmaW5lZChMQU5H
VUFHRV9DT00pIHx8ICFMQU5HVUFHRV9DT00KICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENT
U1N0eWxlRGVjbGFyYXRpb24gc3R5bGU7CiAjZW5kaWYKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDUyNjIy
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEg
QEAKKzIwMDktMTItMjkgIFNodSBDaGFuZyAgPENoYW5nLlNodUBub2tpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBleHBlY3Rl
ZCByZXN1bHRzIHRvIHN1Y2Nlc3MgYWZ0ZXIgc2V0SWRBdHRyaWJ1dGUKKyAgICAgICAgaW1wbGVt
ZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NTc4CisKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwMi1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDMtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNpZDA3LWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlk
YXR0cmlidXRlMDEtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29y
ZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUwMy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3ho
dG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTA0LWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlMDUtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRh
dHRyaWJ1dGUwNi1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3Jl
L2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTA3LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0
bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlMDgtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUwOS1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0
dHJpYnV0ZTEwLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUv
ZWxlbWVudHNldGlkYXR0cmlidXRlMTEtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRt
bC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDEtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2Rl
MDItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50
c2V0aWRhdHRyaWJ1dGVub2RlMDMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9s
ZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDQtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDUt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0
aWRhdHRyaWJ1dGVub2RlMDYtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZl
bDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDctZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDgtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRh
dHRyaWJ1dGVub2RlMTAtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMv
Y29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczAxLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBk
b20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMwMi1leHBlY3RlZC50
eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0
ZW5zMDMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVt
ZW50c2V0aWRhdHRyaWJ1dGVuczA0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwv
bGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMwNS1leHBlY3RlZC50eHQ6IFRoaXMg
dGVzdCBpcyBleHBlY3RlZCB0byBmYWlsIGZvciBsYWNrIG9mIG5hbWVzcGFjZSBzdXBwb3J0IGlu
IERPTS4KKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmli
dXRlbnMwNi1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2Vs
ZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMDctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRt
bC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczA4LWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMxMC1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRp
ZGF0dHJpYnV0ZW5zMTEtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMv
Y29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczEyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBk
b20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMxMy1leHBlY3RlZC50
eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0
ZW5zMTQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvaWQtaW4tZm9y
bWNvbGxlY3Rpb24tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvaWQt
aW4tZm9ybWNvbGxlY3Rpb24uaHRtbDogQWRkZWQgbmV3IHRlc3RzLgorICAgICAgICAqIGZhc3Qv
ZG9tL2RvbUxpc3RFbnVtZXJhdGlvbi1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9kb20v
c2NyaXB0LXRlc3RzL2RvbUxpc3RFbnVtZXJhdGlvbi5qczogVXBkYXRlZCBlbnVtZXJhdGlvbiBy
ZXN1bHRzIGZvciAzIG5ldyBzZXRJZEF0dHJpYnV0ZSBwcm9wZXJ0aWVzLgorCiAyMDA5LTEyLTI5
ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBNYWNpZWogU3RhY2hvd2lhay4KSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMv
Y29yZS9hdHRyaXNpZDAyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9k
b20veGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUy
NDE4KQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDItZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3
LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL2F0dHJpc2lkMDIKLVN0YXR1
cwllcnJvcgotTWVzc2FnZQlMaW5lIDEwNzogVHlwZUVycm9yCitTdGF0dXMJU3VjY2VzcwpJbmRl
eDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDMtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRy
aXNpZDAzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTI0MTgpCisrKyBMYXlvdXRUZXN0cy9kb20v
eGh0bWwvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwMy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3Vp
dGUvbGV2ZWwzL2NvcmUvYXR0cmlzaWQwMwotU3RhdHVzCWVycm9yCi1NZXNzYWdlCUxpbmUgMTA1
OiBUeXBlRXJyb3IKK1N0YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwv
bGV2ZWwzL2NvcmUvYXR0cmlzaWQwNy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2F0dHJpc2lkMDctZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiA1MjQxOCkKKysrIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9hdHRyaXNp
ZDA3LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0
cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS9hdHRyaXNpZDA3
Ci1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJTGluZSAxMTM6IFR5cGVFcnJvcgorU3RhdHVzCVN1Y2Nl
c3MKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRh
dHRyaWJ1dGUwMS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3ho
dG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTAxLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNTI0MTgpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVu
dHNldGlkYXR0cmlidXRlMDEtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9j
b3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTAxCi1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJTGluZSAx
MDU6IFR5cGVFcnJvcgorU3RhdHVzCVN1Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRt
bC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUwMy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0
dHJpYnV0ZTAzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTI0MTgpCisrKyBMYXlvdXRUZXN0cy9k
b20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlMDMtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8y
MDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTAzCi1T
dGF0dXMJZXJyb3IKLU1lc3NhZ2UJTGluZSAxMDY6IFR5cGVFcnJvcgorU3RhdHVzCVN1Y2Nlc3MK
SW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRy
aWJ1dGUwNC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3hodG1s
L2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTA0LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gNTI0MTgpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNl
dGlkYXR0cmlidXRlMDQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBA
QAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3Jl
L2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTA0Ci1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJTGluZSAxMDY6
IFR5cGVFcnJvcgorU3RhdHVzCVN1Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9s
ZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUwNS1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJp
YnV0ZTA1LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTI0MTgpCisrKyBMYXlvdXRUZXN0cy9kb20v
eGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlMDUtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAx
L0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTA1Ci1TdGF0
dXMJZmFpbHVyZQotTWVzc2FnZQl0aHJvd19OT1RfRk9VTkRfRVJSOiBhc3NlcnRUcnVlIGZhaWxl
ZAorU3RhdHVzCVN1Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29y
ZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUwNi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTA2LWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gNTI0MTgpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2
ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlMDYtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0
LVN1aXRlL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTA2Ci1TdGF0dXMJZmFpbHVy
ZQotTWVzc2FnZQl0aHJvd19OT1RfRk9VTkRfRVJSOiBhc3NlcnRUcnVlIGZhaWxlZAorU3RhdHVz
CVN1Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50
c2V0aWRhdHRyaWJ1dGUwNy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTA3LWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gNTI0MTgpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUv
ZWxlbWVudHNldGlkYXR0cmlidXRlMDctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xl
dmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTA3Ci1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJ
TGluZSAxMDg6IFR5cGVFcnJvcgorU3RhdHVzCVN1Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2Rv
bS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUwOC1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRz
ZXRpZGF0dHJpYnV0ZTA4LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTI0MTgpCisrKyBMYXlvdXRU
ZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlMDgtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3Lncz
Lm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0
ZTA4Ci1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJTGluZSAxMDg6IFR5cGVFcnJvcgorU3RhdHVzCVN1
Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0
aWRhdHRyaWJ1dGUwOS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9t
L3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTA5LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gNTI0MTgpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxl
bWVudHNldGlkYXR0cmlidXRlMDktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVs
My9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTA5Ci1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJTGlu
ZSAxMTE6IFR5cGVFcnJvcgorU3RhdHVzCVN1Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2RvbS94
aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGUxMC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRp
ZGF0dHJpYnV0ZTEwLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTI0MTgpCisrKyBMYXlvdXRUZXN0
cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlMTAtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9y
Zy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTEw
Ci1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJTGluZSAxMDQ6IFR5cGVFcnJvcgorU3RhdHVzCVN1Y2Nl
c3MKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRh
dHRyaWJ1dGUxMS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3ho
dG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTExLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNTI0MTgpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVu
dHNldGlkYXR0cmlidXRlMTEtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9j
b3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZTExCi1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJTGluZSAx
MDU6IFR5cGVFcnJvcgorU3RhdHVzCVN1Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRt
bC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDEtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0
aWRhdHRyaWJ1dGVub2RlMDEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1MjQxOCkKKysrIExheW91
dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDEt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8v
d3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0
dHJpYnV0ZW5vZGUwMQotU3RhdHVzCWVycm9yCi1NZXNzYWdlCUxpbmUgMTA4OiBUeXBlRXJyb3IK
K1N0YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUv
ZWxlbWVudHNldGlkYXR0cmlidXRlbm9kZTAyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbm9k
ZTAyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTI0MTgpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0
bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbm9kZTAyLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDIK
LVN0YXR1cwllcnJvcgotTWVzc2FnZQlMaW5lIDEwODogVHlwZUVycm9yCitTdGF0dXMJU3VjY2Vz
cwpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0
dHJpYnV0ZW5vZGUwMy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9t
L3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwMy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDUyNDE4KQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3Jl
L2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwMy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3Vp
dGUvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbm9kZTAzCi1TdGF0dXMJZXJyb3IK
LU1lc3NhZ2UJTGluZSAxMTA6IFR5cGVFcnJvcgorU3RhdHVzCVN1Y2Nlc3MKSW5kZXg6IExheW91
dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDQt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMv
Y29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1
MjQxOCkKKysrIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRh
dHRyaWJ1dGVub2RlMDQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBA
QAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3Jl
L2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwNAotU3RhdHVzCWVycm9yCi1NZXNzYWdlCUxpbmUg
MTEwOiBUeXBlRXJyb3IKK1N0YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0
bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbm9kZTA1LWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNl
dGlkYXR0cmlidXRlbm9kZTA1LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTI0MTgpCisrKyBMYXlv
dXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbm9kZTA1
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDov
L3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRh
dHRyaWJ1dGVub2RlMDUKLVN0YXR1cwlmYWlsdXJlCi1NZXNzYWdlCXRocm93X05PVF9GT1VORF9F
UlI6IGFzc2VydFRydWUgZmFpbGVkCitTdGF0dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMv
ZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwNi1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2Vs
ZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwNi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUyNDE4KQor
KysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0
ZW5vZGUwNi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyIEBACiBUZXN0
CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvZWxlbWVu
dHNldGlkYXR0cmlidXRlbm9kZTA2Ci1TdGF0dXMJZmFpbHVyZQotTWVzc2FnZQl0aHJvd19OT1Rf
Rk9VTkRfRVJSOiBhc3NlcnRUcnVlIGZhaWxlZAorU3RhdHVzCVN1Y2Nlc3MKSW5kZXg6IExheW91
dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDct
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMv
Y29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVub2RlMDctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1
MjQxOCkKKysrIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRh
dHRyaWJ1dGVub2RlMDctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBA
QAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3Jl
L2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUwNwotU3RhdHVzCWVycm9yCi1NZXNzYWdlCUxpbmUg
MTExOiBUeXBlRXJyb3IKK1N0YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0
bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbm9kZTA4LWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNl
dGlkYXR0cmlidXRlbm9kZTA4LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTI0MTgpCisrKyBMYXlv
dXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbm9kZTA4
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDov
L3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRh
dHRyaWJ1dGVub2RlMDgKLVN0YXR1cwllcnJvcgotTWVzc2FnZQlMaW5lIDExNjogVHlwZUVycm9y
CitTdGF0dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3Jl
L2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUxMC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5v
ZGUxMC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUyNDE4KQorKysgTGF5b3V0VGVzdHMvZG9tL3ho
dG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5vZGUxMC1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIw
MDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbm9kZTEw
Ci1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJTGluZSAxMTM6IFR5cGVFcnJvcgorU3RhdHVzCVN1Y2Nl
c3MKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRh
dHRyaWJ1dGVuczAxLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20v
eGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMwMS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDUyNDE4KQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2Vs
ZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMDEtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xl
dmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMDEKLVN0YXR1cwllcnJvcgotTWVzc2Fn
ZQlMaW5lIDEwNjogVHlwZUVycm9yCitTdGF0dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMv
ZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMDItZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVt
ZW50c2V0aWRhdHRyaWJ1dGVuczAyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTI0MTgpCisrKyBM
YXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMw
Mi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6
Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlk
YXR0cmlidXRlbnMwMgotU3RhdHVzCWVycm9yCi1NZXNzYWdlCUxpbmUgMTA3OiBUeXBlRXJyb3IK
K1N0YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUv
ZWxlbWVudHNldGlkYXR0cmlidXRlbnMwMy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMDMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1MjQxOCkKKysrIExheW91dFRlc3RzL2RvbS94aHRtbC9s
ZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczAzLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00t
VGVzdC1TdWl0ZS9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczAzCi1TdGF0dXMJ
ZXJyb3IKLU1lc3NhZ2UJTGluZSAxMDY6IFR5cGVFcnJvcgorU3RhdHVzCVN1Y2Nlc3MKSW5kZXg6
IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVu
czA0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2
ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMwNC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDUyNDE4KQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRp
ZGF0dHJpYnV0ZW5zMDQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBA
QAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3Jl
L2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMDQKLVN0YXR1cwllcnJvcgotTWVzc2FnZQlMaW5lIDEx
MTogVHlwZUVycm9yCitTdGF0dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1s
L2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMDUtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRh
dHRyaWJ1dGVuczA1LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTI0MTgpCisrKyBMYXlvdXRUZXN0
cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMwNS1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzIEBACiBUZXN0CWh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRl
bnMwNQotU3RhdHVzCWVycm9yCi1NZXNzYWdlCUxpbmUgMTExOiBUeXBlRXJyb3IKK1N0YXR1cwlm
YWlsdXJlCitNZXNzYWdlCWVsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zSXNJZFRydWUwNTogYXNzZXJ0
VHJ1ZSBmYWlsZWQKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVt
ZW50c2V0aWRhdHRyaWJ1dGVuczA2LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMwNi1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDUyNDE4KQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVs
My9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMDYtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0
LVN1aXRlL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMDYKLVN0YXR1cwlmYWls
dXJlCi1NZXNzYWdlCXRocm93X05PVF9GT1VORF9FUlI6IGFzc2VydFRydWUgZmFpbGVkCitTdGF0
dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1l
bnRzZXRpZGF0dHJpYnV0ZW5zMDctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczA3LWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gNTI0MTgpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwz
L2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMwNy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3Qt
U3VpdGUvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMwNwotU3RhdHVzCWZhaWx1
cmUKLU1lc3NhZ2UJdGhyb3dfTk9UX0ZPVU5EX0VSUjogYXNzZXJ0VHJ1ZSBmYWlsZWQKK1N0YXR1
cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVu
dHNldGlkYXR0cmlidXRlbnMwOC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMDgtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiA1MjQxOCkKKysrIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMv
Y29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczA4LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1T
dWl0ZS9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczA4Ci1TdGF0dXMJZmFpbHVy
ZQotTWVzc2FnZQl0aHJvd19OT1RfRk9VTkRfRVJSOiBhc3NlcnRUcnVlIGZhaWxlZAorU3RhdHVz
CVN1Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50
c2V0aWRhdHRyaWJ1dGVuczEwLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMxMC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDUyNDE4KQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9j
b3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMTAtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1
aXRlL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMTAKLVN0YXR1cwllcnJvcgot
TWVzc2FnZQlMaW5lIDExMTogVHlwZUVycm9yCitTdGF0dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0
VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMTEtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29y
ZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczExLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTI0MTgp
CisrKyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmli
dXRlbnMxMS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyIEBACiBUZXN0
CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvZWxlbWVu
dHNldGlkYXR0cmlidXRlbnMxMQotU3RhdHVzCWVycm9yCi1NZXNzYWdlCUxpbmUgMTExOiBUeXBl
RXJyb3IKK1N0YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwz
L2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMxMi1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0
ZW5zMTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1MjQxOCkKKysrIExheW91dFRlc3RzL2RvbS94
aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczEyLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRyaWJ1dGVuczEyCi1T
dGF0dXMJZXJyb3IKLU1lc3NhZ2UJTGluZSAxMTU6IFR5cGVFcnJvcgorU3RhdHVzCVN1Y2Nlc3MK
SW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50c2V0aWRhdHRy
aWJ1dGVuczEzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0
bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMxMy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDUyNDE4KQorKysgTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL2VsZW1l
bnRzZXRpZGF0dHJpYnV0ZW5zMTMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVs
My9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMTMKLVN0YXR1cwllcnJvcgotTWVzc2FnZQlM
aW5lIDEwNzogVHlwZUVycm9yCitTdGF0dXMJU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMvZG9t
L3hodG1sL2xldmVsMy9jb3JlL2VsZW1lbnRzZXRpZGF0dHJpYnV0ZW5zMTQtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9lbGVtZW50
c2V0aWRhdHRyaWJ1dGVuczE0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTI0MTgpCisrKyBMYXlv
dXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0cmlidXRlbnMxNC1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93
d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvZWxlbWVudHNldGlkYXR0
cmlidXRlbnMxNAotU3RhdHVzCWVycm9yCi1NZXNzYWdlCUxpbmUgMTEyOiBUeXBlRXJyb3IKK1N0
YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9kb21MaXN0RW51bWVyYXRp
b24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL2RvbUxp
c3RFbnVtZXJhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUyNDE4KQorKysgTGF5b3V0VGVz
dHMvZmFzdC9kb20vZG9tTGlzdEVudW1lcmF0aW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsNyBAQCBQQVNTIHJlc3VsdEFycmF5WzJdLmkgaXMgJzInCiBQQVNTIHJl
c3VsdEFycmF5WzJdLml0ZW0gaXMgbmFtZWROb2RlTWFwLml0ZW0oMikKIAogW29iamVjdCBIVE1M
Rm9ybUVsZW1lbnRdCi1QQVNTIHJlc3VsdEFycmF5Lmxlbmd0aCBpcyAxMzQKK1BBU1MgcmVzdWx0
QXJyYXkubGVuZ3RoIGlzIDEzNwogUEFTUyByZXN1bHRBcnJheVswXS5pIGlzICcwJwogUEFTUyBy
ZXN1bHRBcnJheVswXS5pdGVtIGlzIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxl
Y3QnKVswXQogUEFTUyByZXN1bHRBcnJheVsxXS5pIGlzICcxJwpAQCAtNDEsNyArNDEsNyBAQCBQ
QVNTIHJlc3VsdEFycmF5WzJdLmkgaXMgJzInCiBQQVNTIHJlc3VsdEFycmF5WzJdLml0ZW0gaXMg
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NlbGVjdCcpWzJdCiAKIFtvYmplY3QgSFRN
TFNlbGVjdEVsZW1lbnRdCi1QQVNTIHJlc3VsdEFycmF5Lmxlbmd0aCBpcyAxNDEKK1BBU1MgcmVz
dWx0QXJyYXkubGVuZ3RoIGlzIDE0NAogUEFTUyByZXN1bHRBcnJheVswXS5pIGlzICcwJwogUEFT
UyByZXN1bHRBcnJheVswXS5pdGVtIGlzIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdv
cHRpb24nKVswXQogUEFTUyByZXN1bHRBcnJheVsxXS5pIGlzICcxJwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mb3JtY29sbGVjdGlvbi1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1mb3JtY29sbGVj
dGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUyNDE4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9k
b20vRWxlbWVudC9pZC1pbi1mb3JtY29sbGVjdGlvbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTQsNyArNCw5IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEEKIAogCiBQQVNTIGVsZW1zKCJpZHMxIiwxKS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSBpcyAibmFt
ZTIiCitQQVNTIGVsZW1zMigiaWRzMiIsMSkuZ2V0QXR0cmlidXRlKCJuYW1lIikgaXMgIm5hbWU0
IgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCiAgCisg
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2lkLWluLWZvcm1jb2xsZWN0aW9u
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9pZC1pbi1m
b3JtY29sbGVjdGlvbi5odG1sCShyZXZpc2lvbiA1MjQxOCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
ZG9tL0VsZW1lbnQvaWQtaW4tZm9ybWNvbGxlY3Rpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MTIsMTIgKzEyLDIyIEBACiA8c2VsZWN0IGlkPSJpZHMxIiBuYW1lPSJuYW1lMiI+PG9wdGlvbiBz
ZWxlY3RlZD5GQUlMVVJFPC9vcHRpb24+PC9zZWxlY3Q+CiA8L2Zvcm0+CiAKKzxmb3JtIGlkPSJp
ZGYyIj4KKzxzZWxlY3QgbXlpZD0iaWRzMiIgbmFtZT0ibmFtZTMiPjxvcHRpb24gc2VsZWN0ZWQ+
RkFJTFVSRTwvb3B0aW9uPjwvc2VsZWN0PgorPHNlbGVjdCBteWlkPSJpZHMyIiBuYW1lPSJuYW1l
NCI+PG9wdGlvbiBzZWxlY3RlZD5GQUlMVVJFPC9vcHRpb24+PC9zZWxlY3Q+Cis8L2Zvcm0+CisK
IDxzY3JpcHQ+CiBkZXNjcmlwdGlvbigiVGVzdCB1c2luZyBpZCBpbiBIVE1MRm9ybUNvbGxlY3Rp
b24iKTsKIAogdmFyIGVsZW1zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkZjEiKS5lbGVt
ZW50czsKIHNob3VsZEJlKCdlbGVtcygiaWRzMSIsMSkuZ2V0QXR0cmlidXRlKCJuYW1lIiknLCAn
Im5hbWUyIicpOwogCit2YXIgZWxlbXMyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkZjIi
KS5lbGVtZW50czsKK2VsZW1zMlswXS5zZXRJZEF0dHJpYnV0ZSgibXlpZCIsIHRydWUpOworZWxl
bXMyWzFdLnNldElkQXR0cmlidXRlKCJteWlkIiwgdHJ1ZSk7CitzaG91bGRCZSgnZWxlbXMyKCJp
ZHMyIiwxKS5nZXRBdHRyaWJ1dGUoIm5hbWUiKScsICcibmFtZTQiJyk7CisKIHZhciBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOwogPC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9zY3JpcHQtdGVzdHMvZG9tTGlzdEVudW1lcmF0aW9uLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC10ZXN0cy9kb21MaXN0RW51bWVyYXRpb24uanMJKHJl
dmlzaW9uIDUyNDE4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LXRlc3RzL2RvbUxp
c3RFbnVtZXJhdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHNob3Vs
ZEJlKCJyZXN1bHRBcnJheVsyXS5pdGVtIiwgIm5hbWVkTm8KIC8vIEhUTUxGb3JtRWxlbWVudAog
dmFyIGh0bWxGb3JtRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmb3Jt
JylbMF07CiByZXN1bHRBcnJheSA9IGl0ZXJhdGVMaXN0KGh0bWxGb3JtRWxlbWVudCk7Ci1zaG91
bGRCZSgicmVzdWx0QXJyYXkubGVuZ3RoIiwgIjEzNCIpOworc2hvdWxkQmUoInJlc3VsdEFycmF5
Lmxlbmd0aCIsICIxMzciKTsKIHNob3VsZEJlKCJyZXN1bHRBcnJheVswXS5pIiwgIicwJyIpOwog
c2hvdWxkQmUoInJlc3VsdEFycmF5WzBdLml0ZW0iLCAiZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJ3NlbGVjdCcpWzBdIik7CiBzaG91bGRCZSgicmVzdWx0QXJyYXlbMV0uaSIsICInMSci
KTsKQEAgLTE0MSw3ICsxNDEsNyBAQCBzaG91bGRCZSgicmVzdWx0QXJyYXlbMl0uaXRlbSIsICJk
b2N1bWVuCiAvLyBIVE1MU2VsZWN0RWxlbWVudAogdmFyIGh0bWxTZWxlY3RFbGVtZW50ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NlbGVjdCcpWzBdOwogcmVzdWx0QXJyYXkgPSBp
dGVyYXRlTGlzdChodG1sU2VsZWN0RWxlbWVudCk7Ci1zaG91bGRCZSgicmVzdWx0QXJyYXkubGVu
Z3RoIiwgIjE0MSIpOworc2hvdWxkQmUoInJlc3VsdEFycmF5Lmxlbmd0aCIsICIxNDQiKTsKIHNo
b3VsZEJlKCJyZXN1bHRBcnJheVswXS5pIiwgIicwJyIpOwogc2hvdWxkQmUoInJlc3VsdEFycmF5
WzBdLml0ZW0iLCAiZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29wdGlvbicpWzBdIik7
CiBzaG91bGRCZSgicmVzdWx0QXJyYXlbMV0uaSIsICInMSciKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>