<?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>43683</bug_id>
          
          <creation_ts>2010-08-07 16:02:40 -0700</creation_ts>
          <short_desc>Implement iframe.srcdoc</short_desc>
          <delta_ts>2012-04-03 13:41:09 -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>Frames</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>82991</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Justin Schuh">jschuh</reporter>
          <assigned_to name="Justin Schuh">jschuh</assigned_to>
          <cc>abarth</cc>
    
    <cc>annevk</cc>
    
    <cc>jschuh</cc>
    
    <cc>peter</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>261799</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Schuh">jschuh</who>
    <bug_when>2010-08-07 16:02:40 -0700</bug_when>
    <thetext>Implement iframe.srcdoc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261800</commentid>
    <comment_count>1</comment_count>
      <attachid>63833</attachid>
    <who name="Justin Schuh">jschuh</who>
    <bug_when>2010-08-07 16:04:35 -0700</bug_when>
    <thetext>Created attachment 63833
Patch

This patch is just for discussion right now. I still have to figure out the double onload events, XSS auditor hooks, history, write several more tests, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261804</commentid>
    <comment_count>2</comment_count>
    <who name="Justin Schuh">jschuh</who>
    <bug_when>2010-08-07 16:12:34 -0700</bug_when>
    <thetext>Adam, the test you asked about was: LayoutTests/fast/frames/iframe-srcdoc-frame-onload.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261806</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-07 16:19:01 -0700</bug_when>
    <thetext>*** Bug 42507 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261963</commentid>
    <comment_count>4</comment_count>
      <attachid>63856</attachid>
    <who name="Justin Schuh">jschuh</who>
    <bug_when>2010-08-08 20:08:46 -0700</bug_when>
    <thetext>Created attachment 63856
Patch

Cleaned up some obvious mistakes, but still trying to work out exactly when to load the content; the current spot is definitely not right. Once again, just posting this for discussion purposes right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263332</commentid>
    <comment_count>5</comment_count>
    <who name="Justin Schuh">jschuh</who>
    <bug_when>2010-08-11 10:38:18 -0700</bug_when>
    <thetext>The only way I see to get events and navigation right is to inject this into the network stack, just like data: URL does. I&apos;ve pinged the whatwg list on why about:srcdoc was chosen as the location address, because it seems better to use the data URL and should make implementation simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264942</commentid>
    <comment_count>6</comment_count>
      <attachid>64467</attachid>
    <who name="Justin Schuh">jschuh</who>
    <bug_when>2010-08-15 22:51:19 -0700</bug_when>
    <thetext>Created attachment 64467
Patch

Adam, can you let me know if this is a reasonable strategy? I hooked @srcdoc into FrameLoader via SubstituteData, so it loads asynch and all the events and navigation work out correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264946</commentid>
    <comment_count>7</comment_count>
      <attachid>64467</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-15 23:29:30 -0700</bug_when>
    <thetext>Comment on attachment 64467
Patch

WebCore/html/HTMLFrameOwnerElement.cpp:102
 +              return SubstituteData(data.release(), document()-&gt;isXHTMLDocument() ? &quot;text/xml&quot; : &quot;text/html&quot;, &quot;UTF-8&quot;, KURL(), srcdocURL());
text/xml, really?  I thought srcdoc was always text/html.

WebCore/html/HTMLFrameOwnerElement.cpp:100
 +              const CString srcdocUtf8 = srcdoc.string().utf8();
Lame that we need to convert to UTF8.  Can&apos;t we just use UTF16 the whole time?

WebCore/html/HTMLIFrameElement.cpp:133
 +              setLocation(getAttribute(srcAttr), false);
Isn&apos;t false implied?

WebCore/html/HTMLIFrameElement.cpp:135
 +              setLocation(srcdocURL(), true);
Should we use an enum instead of true/false?  Maybe we just need a new method setLocationToSrcdoc?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264947</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-15 23:29:44 -0700</bug_when>
    <thetext>Yeah, that&apos;s a nice approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265153</commentid>
    <comment_count>9</comment_count>
    <who name="Justin Schuh">jschuh</who>
    <bug_when>2010-08-16 10:10:07 -0700</bug_when>
    <thetext>Thanks for the detailed feedback; I didn&apos;t think I&apos;d get more than a &quot;yes&quot; or &quot;no&quot; on the approach at this stage.

(In reply to comment #7)
&gt; (From update of attachment 64467 [details])
&gt; WebCore/html/HTMLFrameOwnerElement.cpp:102
&gt;  +              return SubstituteData(data.release(), document()-&gt;isXHTMLDocument() ? &quot;text/xml&quot; : &quot;text/html&quot;, &quot;UTF-8&quot;, KURL(), srcdocURL());
&gt; text/xml, really?  I thought srcdoc was always text/html.

I think I misread the standard here. It looks like you are correct and it should always be text/html. Hooray for easier!

&gt; WebCore/html/HTMLFrameOwnerElement.cpp:100
&gt;  +              const CString srcdocUtf8 = srcdoc.string().utf8();
&gt; Lame that we need to convert to UTF8.  Can&apos;t we just use UTF16 the whole time?

We can use UTF16 (as long as I account for byte-ordering). However, I&apos;m not sure it matters much because we&apos;ll be copying the string regardless. Maybe I should just make SubstituteData smart enough to avoid the copying and conversion for strings?

&gt; WebCore/html/HTMLIFrameElement.cpp:133
&gt;  +              setLocation(getAttribute(srcAttr), false);
&gt; Isn&apos;t false implied?
&gt; 
&gt; WebCore/html/HTMLIFrameElement.cpp:135
&gt;  +              setLocation(srcdocURL(), true);
&gt; Should we use an enum instead of true/false?  Maybe we just need a new method setLocationToSrcdoc?

Yeah, setLocationToSrcdoc sounds like a much better idea than the boolean argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265224</commentid>
    <comment_count>10</comment_count>
    <who name="Anne van Kesteren">annevk</who>
    <bug_when>2010-08-16 13:56:00 -0700</bug_when>
    <thetext>srcdoc is either HTML or XML depending on whether the document the srcdoc &lt;iframe&gt; is in is HTML or XML. You were correct.

The specification states quite clearly:

&quot;For iframe elements in HTML documents, the attribute, ...&quot;

&quot;For iframe elements in XML documents, the attribute, ...&quot;

(I&apos;m not sure whether this is ideal, but that is what it says. And is similar to e.g. the &quot;semantics&quot; of innerHTML.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267915</commentid>
    <comment_count>11</comment_count>
      <attachid>65121</attachid>
    <who name="Justin Schuh">jschuh</who>
    <bug_when>2010-08-23 08:13:49 -0700</bug_when>
    <thetext>Created attachment 65121
Patch

I think the implentation is done, but I&apos;m still trying to figure out more tests. I&apos;ve added implicit sandboxing in this version. Tab is raising the question with WHATWG, but we can&apos;t think of any use case for @srcdoc that doesn&apos;t include the sandbox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271294</commentid>
    <comment_count>12</comment_count>
      <attachid>65877</attachid>
    <who name="Justin Schuh">jschuh</who>
    <bug_when>2010-08-29 22:23:40 -0700</bug_when>
    <thetext>Created attachment 65877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271315</commentid>
    <comment_count>13</comment_count>
      <attachid>65877</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-29 23:45:00 -0700</bug_when>
    <thetext>Comment on attachment 65877
Patch

&gt; +    if (attr-&gt;name() == srcAttr) {
&gt; +        if (!hasTagName(iframeTag) || getAttribute(srcdocAttr).isNull())
&gt; +            setLocation(deprecatedParseURL(attr-&gt;value()));

It&apos;s bad layering to have iframe-specific code in HTMLFrameElementBase and then check hasTagName(iframeTag). Instead, iframe-specific code should go in HTMLIFrameElement. If we need a hook for iframe, we can add a virtual function, but it should ask a question, not &quot;is this an iframe&quot;.

To check if an attribute exists, we should use hasAttribute, not getAttribute().isNull(). It&apos;s more efficient. But also, is null the only value that matters? I&apos;d like to see test cases covering values like empty string or all whitespace for the srcdoc attribute.

Code like this that works with one attribute looking at the value of the other usually is a problem because there&apos;s no guarantee the src attribute will be parsed before the srcdoc attribute. I need to see how this will work in either order, and we&apos;d want to make sure we had test cases that covered both.

&gt;  KURL HTMLFrameElementBase::location() const
&gt;  {
&gt; +    if (hasTagName(iframeTag) &amp;&amp; !getAttribute(srcdocAttr).isEmpty())
&gt; +        return srcdocURL();
&gt;      return document()-&gt;completeURL(getAttribute(srcAttr));
&gt;  }

Again, not good to have iframe-specific code in HTMLFrameElementBase. Should be factored differently. Same comment about getAttribute(srcdocAttr) too.

&gt; +    if (str == srcdocURL().string())
&gt; +        return;

Is it OK that this is a case-sensitive comparison? I would like to see test cases with &quot;ABOUT:SRCDOC&quot; too.

&gt; +void HTMLFrameElementBase::setLocationToSrcdoc()
&gt; +{
&gt; +    m_URL = srcdocURL().string();
&gt; +
&gt; +    if (inDocument())
&gt; +        openURL(false, false);
&gt; +}

It&apos;s bad for long term maintenance to copy and paste the last part of setLocation into this separate function. Even though it&apos;s just a single function call, I&apos;d like to factor things so the code is shared.

&gt; +SubstituteData HTMLFrameOwnerElement::srcdocSubstituteData(const KURL&amp; url) const
&gt; +{
&gt; +    if (url == srcdocURL() &amp;&amp; hasTagName(HTMLNames::iframeTag)) {
&gt; +        const String srcdoc = getAttribute(HTMLNames::srcdocAttr);
&gt; +        if (!srcdoc.isNull())
&gt; +            return SubstituteData(srcdoc, document()-&gt;isXHTMLDocument() ? &quot;text/xml&quot; : &quot;text/html&quot;, KURL(), url);
&gt; +    }
&gt; +    return SubstituteData();
&gt; +}

It&apos;s not appropriate to have the frame owner element have this logic that&apos;s specific to iframe. Just as with HTMLFrameElementBase, this needs to be based on virtual functions, not &quot;is iframe&quot; checks in the base class.

The result of getAttribute is a const AtomicString&amp;, not a String. Putting it into a String causes a bit of unnecessary reference count churn.

&gt; +        // Navigate using @src if @srcdoc is getting cleared.

The use of &quot;@&quot; here is not normal for comments in Webit.

&gt; +        if (attr-&gt;isNull())
&gt; +            setLocation(getAttribute(srcAttr));
&gt; +        else {
&gt; +#if ENABLE(SANDBOX)
&gt; +            SandboxFlags flags = sandboxFlags();
&gt; +            if (flags == SandboxNone)
&gt; +                setSandboxFlags(SandboxAll);
&gt; +#endif
&gt; +            setLocationToSrcdoc();
&gt; +        }

It&apos;s important that this logic be localized in a single class. We don&apos;t want this part in one class and the rest in another. While other classes can forward things here, the logic specific to the srcdoc attribute should be localized all in a single class, HTMLIFrameElement. The other classes should not even know the name of the attribute.

Also note that you can call fastGetAttribute in this case.

It&apos;s a factoring warning sigh that this needs its own extra sandboxing logic. Is there any way to share this with the normal code path? Also, this is good place for a &quot;why&quot; comment. I see what is happening to the sandbox flags, but not why, and I am not the only one.

I don&apos;t see any point to putting the flags into a local variable here.

&gt; +        attribute [Reflect] DOMString srcdoc;

If the srcdoc attribute is a URL, then it needs to be &quot;[Reflect, URL]&quot; and needs to be covered by the URL reflection test, and you&apos;ll also need to override isURLAttribute to pass that test.

&gt; +        Frame* realParentFrame = m_frame-&gt;tree()-&gt;parent();
&gt; +        if (realParentFrame) {
&gt; +            // Walk a srcdoc hierarchy to a parent with a real encoding
&gt; +            const HTMLFrameOwnerElement* owner = realParentFrame-&gt;ownerElement();
&gt; +            while (owner &amp;&amp; owner-&gt;hasTagName(HTMLNames::iframeTag) &amp;&amp; owner-&gt;hasAttribute(HTMLNames::srcdocAttr)) {
&gt; +                realParentFrame = realParentFrame-&gt;tree()-&gt;parent();
&gt; +                owner = realParentFrame ? realParentFrame-&gt;ownerElement() : 0;
&gt; +            }
&gt; +        }

This logic should go into a separate helper function. Adding it in to DocumentWriter::createDecoderIfNeeded is not good factoring. Further, why is determining the encoding the one place where we need this &quot;real parent&quot; logic that skips srcdoc frames? What other calls to parent() might want this? Maybe FrameTree itself should know about this. Again, the logic should not check iframeTag and srcdocAttr. It should use a virtual function -- only the HTMLIFrameElement class itself should know about srcdocAttr.

&gt; -    RefPtr&lt;DocumentLoader&gt; loader = m_client-&gt;createDocumentLoader(request, SubstituteData());
&gt; +    SubstituteData substituteData = m_frame-&gt;ownerElement() ? m_frame-&gt;ownerElement()-&gt;srcdocSubstituteData(request.url()) : SubstituteData();
&gt; +    RefPtr&lt;DocumentLoader&gt; loader = m_client-&gt;createDocumentLoader(request, substituteData);

The way it&apos;s used here makes it clear that srcdocSubstituteData is not the right name for this function. While the frame only uses this when a srcdoc is involved, the actual name should simply state that this is SubstituteData to be used when loading the frame.

&gt; -    if (!SecurityOrigin::canLoad(url, referrer, 0)) {
&gt; +    if (!SecurityOrigin::canLoad(url, referrer, ownerElement-&gt;document())) {

Why this change? What test covers it? Can this go in by itself?

&gt; -        SubstituteData(PassRefPtr&lt;SharedBuffer&gt; content, const String&amp; mimeType, const String&amp; textEncoding, const KURL&amp; failingURL, const KURL&amp; responseURL = KURL())
&gt; -            : m_content(content)
&gt; -            , m_mimeType(mimeType)
&gt; +        
&gt; +        SubstituteData(PassRefPtr&lt;SharedBuffer&gt; dataBuffer, const String&amp; mimeType, const String&amp; textEncoding, const KURL&amp; failingURL, const KURL&amp; responseURL = KURL())

The term &quot;data buffer&quot; here doesn&apos;t seem very good. I think just &quot;buffer&quot; is probably OK given the context.

&gt; +            : m_mimeType(mimeType)
&gt;              , m_textEncoding(textEncoding)
&gt;              , m_failingURL(failingURL)
&gt;              , m_responseURL(responseURL)
&gt;          {
&gt; +            m_content = adoptRef(new SubstituteContentBuffer(dataBuffer));
&gt;          }

Why is m_content being set up in an assignment instead of initialization? It should be initialization. It&apos;s OK to call a function in an initializer.

In new code, you should be using a create function, not a direct call to adoptRef(new).

&gt; +#if defined(WTF_CPU_BIG_ENDIAN) || defined(WTF_CPU_MIDDLE_ENDIAN)
&gt; +            , m_textEncoding(&quot;UTF-16BE&quot;)
&gt; +#else
&gt; +            , m_textEncoding(&quot;UTF-16LE&quot;)
&gt; +#endif

This is really weak way to do this. Can we find a cleaner way to accomplish it? I think we might want to offer a function that returns a suitable TextEncoding for UChar without looking up the encoding name as a string each time.

Also, the WTF_XXX macros aren&apos;t intended to be used directly with defined. If you were going to do the #if it would be #if CPU(BIG_ENDIAN). But there has to be a better way to handle it.

&gt; +            m_content = adoptRef(new SubstituteContentString(dataString));

Same comments as above about assignment, adoptRef, and create.

&gt; +            virtual ~SubstituteContent() {};

No semicolon needed here. Also, we put a space between braces in cases like this.

&gt; +            SubstituteContentBuffer(PassRefPtr&lt;SharedBuffer&gt; dataBuffer) : m_dataBuffer(dataBuffer) {}

Put space between the braces in cases like this.

&gt; +            const char* data() const { return m_dataBuffer-&gt;data(); }
&gt; +            unsigned size() const { return m_dataBuffer-&gt;size(); }

Please make these private and mark them virtual. We like to be explicit when we are overriding virtual functions and repeat the virtual, and it would be inefficient for someone to call these virtual functions if they knew the concrete type; making the functions private makes it more likely we&apos;d catch that mistake.

The word data in m_dataBuffer doesn&apos;t add much.

Is unsigned OK for size? Elsewhere we often use size_t for such sizes.

&gt; +            const char* data() const { return reinterpret_cast&lt;const char *&gt;(m_dataString.characters()); }

There should not be a space before the &quot;*&quot;. This needs a comment connecting this otherwise-unwise cast to the text encoding names that make it OK.

&gt; +        private:
&gt; +            String m_dataString;
&gt; +        };

The word &quot;data&quot; in m_dataString doesn&apos;t add much.

&gt; +        
&gt;      };
&gt; -
&gt;  }
&gt;  
&gt;  #endif // SubstituteData_h

Please don&apos;t remove that blank line. We want a blank line there.

Do the test cases cover all the code changes here?

review- because you&apos;ll want to fix at least some of the things I mentioned above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275126</commentid>
    <comment_count>14</comment_count>
    <who name="Justin Schuh">jschuh</who>
    <bug_when>2010-09-07 10:19:01 -0700</bug_when>
    <thetext>I meant to respond sooner, but I was buried under other tasks. Please assume anything I&apos;m not responding to inline is just me agreeing and it will be fixed in the next patch.


(In reply to comment #13)
&gt;It&apos;s a factoring warning sigh that this needs its own extra sandboxing logic. Is there any way to share this with the normal code path? Also, this is good place for a &quot;why&quot; comment. I see what is happening to the sandbox flags, but not why, and I am not the only one.

There&apos;s a a discussion on whatwg about whether the sandbox should be implicit for srcdoc:
http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-August/028274.html

I&apos;m strongly in favor of the implicit sandbox, and the additional logic here is the implementation. However, if it&apos;s a major sticking point I can take it out for now and submit it as a separate patch later (depending on the results of the whatwg discussion).


&gt; &gt; +        attribute [Reflect] DOMString srcdoc;
&gt; 
&gt; If the srcdoc attribute is a URL, then it needs to be &quot;[Reflect, URL]&quot; and needs to be covered by the URL reflection test, and you&apos;ll also need to override isURLAttribute to pass that test.

I might be mistaken on how the IDL URL extension works. However, the srcdoc attribute isn&apos;t a URL, it&apos;s used as the content of the frame. So, I would think it shouldn&apos;t be be tagged as a URL.


&gt; &gt; +        Frame* realParentFrame = m_frame-&gt;tree()-&gt;parent();
&gt; &gt; +        if (realParentFrame) {
&gt; &gt; +            // Walk a srcdoc hierarchy to a parent with a real encoding
&gt; &gt; +            const HTMLFrameOwnerElement* owner = realParentFrame-&gt;ownerElement();
&gt; &gt; +            while (owner &amp;&amp; owner-&gt;hasTagName(HTMLNames::iframeTag) &amp;&amp; owner-&gt;hasAttribute(HTMLNames::srcdocAttr)) {
&gt; &gt; +                realParentFrame = realParentFrame-&gt;tree()-&gt;parent();
&gt; &gt; +                owner = realParentFrame ? realParentFrame-&gt;ownerElement() : 0;
&gt; &gt; +            }
&gt; &gt; +        }
&gt; 
&gt; This logic should go into a separate helper function. Adding it in to DocumentWriter::createDecoderIfNeeded is not good factoring. Further, why is determining the encoding the one place where we need this &quot;real parent&quot; logic that skips srcdoc frames? What other calls to parent() might want this? Maybe FrameTree itself should know about this. Again, the logic should not check iframeTag and srcdocAttr. It should use a virtual function -- only the HTMLIFrameElement class itself should know about srcdocAttr.

Sorry. After looking back I realized this is definitely the wrong place for this logic. What&apos;s actually going on is that I modified SubstituteData to avoid redundant conversions back and forth between UTF-8 and UTF-16. The problem occurs when the encoding sniffing sees the current frame as UTF-16 and defaults to the same encoding type for subframes. What I think I need to do is add a way to tell the document that it shouldn&apos;t use it&apos;s own encoding for hinting purposes, and instead use the encoding of it&apos;s parent (which would recurse all the way up to whatever parent is a real document and not a srcdoc).


&gt; &gt; -    if (!SecurityOrigin::canLoad(url, referrer, 0)) {
&gt; &gt; +    if (!SecurityOrigin::canLoad(url, referrer, ownerElement-&gt;document())) {
&gt; 
&gt; Why this change? What test covers it? Can this go in by itself?

I moved this and another unrelated change out to their own patches, which landed last week. Sorry for accidentally mixing them in.


&gt; &gt; +#if defined(WTF_CPU_BIG_ENDIAN) || defined(WTF_CPU_MIDDLE_ENDIAN)
&gt; &gt; +            , m_textEncoding(&quot;UTF-16BE&quot;)
&gt; &gt; +#else
&gt; &gt; +            , m_textEncoding(&quot;UTF-16LE&quot;)
&gt; &gt; +#endif
&gt; 
&gt; This is really weak way to do this. Can we find a cleaner way to accomplish it? I think we might want to offer a function that returns a suitable TextEncoding for UChar without looking up the encoding name as a string each time.
&gt; Also, the WTF_XXX macros aren&apos;t intended to be used directly with defined. If you were going to do the #if it would be #if CPU(BIG_ENDIAN). But there has to be a better way to handle it.

Is it reasonable to just add a static function that provides a constant String with the native encoding for the platform (I didn&apos;t find one)? And if so, any suggestions on where that should live? It seems like it really shouldn&apos;t live in SubstituteData.

&gt; Do the test cases cover all the code changes here?

One of your comments pointed out that I do need tests for explicit navigation to about:srcdoc. I think I have the rest covered, but I&apos;ll do another round and double check if there&apos;s anything I&apos;m missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277800</commentid>
    <comment_count>15</comment_count>
      <attachid>67319</attachid>
    <who name="Justin Schuh">jschuh</who>
    <bug_when>2010-09-11 17:46:36 -0700</bug_when>
    <thetext>Created attachment 67319
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277806</commentid>
    <comment_count>16</comment_count>
      <attachid>67319</attachid>
    <who name="Justin Schuh">jschuh</who>
    <bug_when>2010-09-11 18:03:24 -0700</bug_when>
    <thetext>Comment on attachment 67319
Patch

I think I&apos;ve addressed the layering issues in this version. Also, Adam and I discussed the issue of whether about:srcdoc should be navigable. We decided that there&apos;s good reason to make it navigable (and it would be extremely difficult to do otherwise). So I&apos;m sending an email to whatwg to have the standard modified (since I anticipate other implementors will reach the same conclusion).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277808</commentid>
    <comment_count>17</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-09-11 18:15:15 -0700</bug_when>
    <thetext>Attachment 67319 did not build on qt:
Build output: http://queues.webkit.org/results/3918416</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277832</commentid>
    <comment_count>18</comment_count>
      <attachid>67328</attachid>
    <who name="Justin Schuh">jschuh</who>
    <bug_when>2010-09-11 20:24:46 -0700</bug_when>
    <thetext>Created attachment 67328
Patch

Just a minor tweak to fix QT breakage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280237</commentid>
    <comment_count>19</comment_count>
      <attachid>67328</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-16 11:44:07 -0700</bug_when>
    <thetext>Comment on attachment 67328
Patch

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

You should also do the parts in the parser.

&gt; WebCore/html/HTMLIFrameElement.cpp:76
&gt; -        return SandboxNone;
&gt; +        return hasAttribute(srcdocAttr) ? SandboxAll : SandboxNone;

Is this what the WG decided?

&gt; WebCore/html/HTMLIFrameElement.cpp:140
&gt; +#if ENABLE(SANDBOX)

We should get rid of this ifdef, but that&apos;s for another patch.

&gt; WebCore/html/HTMLIFrameElement.cpp:190
&gt; +        const String srcdoc = fastGetAttribute(HTMLNames::srcdocAttr);

We don&apos;t use const here.  Also, we&apos;re probably using the HTMLNames namespace.  No need to be explicit here.

&gt; WebCore/html/HTMLIFrameElement.cpp:200
&gt; +    if (!hasAttribute(srcdocAttr))
&gt; +        return srcdocURL();

This not seems wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594834</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-04-03 13:41:09 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 82991 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63833</attachid>
            <date>2010-08-07 16:04:35 -0700</date>
            <delta_ts>2010-08-08 20:08:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43683-20100807160434.patch</filename>
            <type>text/plain</type>
            <size>11967</size>
            <attacher name="Justin Schuh">jschuh</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDkyNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMTAtMDgtMDcgIEp1c3RpbiBTY2h1aCAgPGpzY2h1aEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50IGlmcmFtZS5zcmNkb2MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQzNjgzCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZnJhbWVzL2lmcmFt
ZS1zcmNkb2MtZnJhbWUtb25sb2FkLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZnJhbWVzL2lm
cmFtZS1zcmNkb2Mtc3RhdGljLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZnJhbWVzL2lmcmFt
ZS1zcmNkb2Mtd2luZG93LW9ubG9hZC5odG1sCisKKyAgICAgICAgKiBodG1sL0hUTUxBdHRyaWJ1
dGVOYW1lcy5pbjoKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpvcGVuVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpsb2NhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0TG9jYXRpb24pOgorICAgICAgICAqIGh0bWwv
SFRNTEZyYW1lT3duZXJFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25l
ckVsZW1lbnQ6OnNyY2RvY0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJF
bGVtZW50OjpzZXRTcmNkb2NEYXRhKToKKyAgICAgICAgKiBodG1sL0hUTUxJRnJhbWVFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5pZGw6CisgICAgICAg
ICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1l
TG9hZGVyOjpyZXF1ZXN0RnJhbWUpOgorICAgICAgICAqIHBsYXRmb3JtL0tVUkwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c3JjZG9jVVJMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzcmNk
b2NVUkwpOgorCiAyMDEwLTA4LTA3ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
QXR0cmlidXRlTmFtZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1
dGVOYW1lcy5pbgkocmV2aXNpb24gNjQ5MTQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0
ZU5hbWVzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksNiArMjU5LDcgQEAgc3Bhbgogc3BlZWNo
CiBzcGVsbGNoZWNrCiBzcmMKK3NyY2RvYwogc3RhbmRieQogc3RhcnQKIHN0ZXAKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkocmV2aXNpb24gNjQ5MTQpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw5
ICs5NywxMSBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpvcGVuVVJMKGJvb2wgCiAgICAg
aWYgKCFpc1VSTEFsbG93ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fVVJMLmlz
RW1wdHkoKSkKKyAgICBpZiAoIXNyY2RvY0RhdGEoKS5pc0VtcHR5KCkpCisgICAgICAgIG1fVVJM
ID0gc3JjZG9jVVJMKCkuc3RyaW5nKCk7CisgICAgZWxzZSBpZiAobV9VUkwuaXNFbXB0eSgpKQog
ICAgICAgICBtX1VSTCA9IGJsYW5rVVJMKCkuc3RyaW5nKCk7Ci0KKyAgICAKICAgICBGcmFtZSog
cGFyZW50RnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIGlmICghcGFyZW50RnJhbWUp
CiAgICAgICAgIHJldHVybjsKQEAgLTIxOSw2ICsyMjEsOCBAQCB2b2lkIEhUTUxGcmFtZUVsZW1l
bnRCYXNlOjphdHRhY2goKQogCiBLVVJMIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpsb2NhdGlvbigp
IGNvbnN0CiB7CisgICAgaWYgKCFzcmNkb2NEYXRhKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gc3JjZG9jVVJMKCk7CiAgICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0
dHJpYnV0ZShzcmNBdHRyKSk7CiB9CiAKQEAgLTIyOCw3ICsyMzIsMTAgQEAgdm9pZCBIVE1MRnJh
bWVFbGVtZW50QmFzZTo6c2V0TG9jYXRpb24oYwogICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5n
cy0+bmVlZHNBY3JvYmF0RnJhbWVSZWxvYWRpbmdRdWlyaygpICYmIG1fVVJMID09IHN0cikKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9VUkwgPSBBdG9taWNTdHJpbmcoc3RyKTsKKyAgICBpZiAo
IXNyY2RvY0RhdGEoKS5pc0VtcHR5KCkpCisgICAgICAgIG1fVVJMID0gQXRvbWljU3RyaW5nKHNy
Y2RvY1VSTCgpLnN0cmluZygpKTsKKyAgICBlbHNlCisgICAgICAgIG1fVVJMID0gQXRvbWljU3Ry
aW5nKHN0cik7CiAKICAgICBpZiAoaW5Eb2N1bWVudCgpKQogICAgICAgICBvcGVuVVJMKGZhbHNl
LCBmYWxzZSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCShyZXZpc2lv
biA2NDkxNCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDE2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNjcm9sbGJh
ck1vZGUgc2Nyb2xsaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFNjcm9sbGJhckF1dG87IH0KIAog
ICAgIFNhbmRib3hGbGFncyBzYW5kYm94RmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3NhbmRib3hG
bGFnczsgfQorICAgIAorICAgIFN0cmluZyBzcmNkb2NEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9z
cmNkb2M7IH07CiAKIHByb3RlY3RlZDoKICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKIAogICAgIHZvaWQgc2V0U2FuZGJv
eEZsYWdzKFNhbmRib3hGbGFncyk7CiAKKyAgICB2b2lkIHNldFNyY2RvY0RhdGEoY29uc3QgU3Ry
aW5nJiBzcmNkb2MpIHsgbV9zcmNkb2MgPSBzcmNkb2M7IH07CisKICAgICB2aXJ0dWFsIHZvaWQg
d2lsbFJlbW92ZSgpOwogCiBwcml2YXRlOgpAQCAtNjUsNiArNjksNyBAQCBwcml2YXRlOgogCiAg
ICAgRnJhbWUqIG1fY29udGVudEZyYW1lOwogICAgIFNhbmRib3hGbGFncyBtX3NhbmRib3hGbGFn
czsKKyAgICBBdG9taWNTdHJpbmcgbV9zcmNkb2M7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5jcHAJKHJldmlzaW9uIDY0OTE0KQor
KysgV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTI3LDYgKzEyNyw5IEBAIHZvaWQgSFRNTElGcmFtZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkK
ICAgICAgICAgaWYgKCFhdHRyLT5pc051bGwoKSAmJiAhYXR0ci0+dmFsdWUoKS50b0ludCgpKQog
ICAgICAgICAgICAgLy8gQWRkIGEgcnVsZSB0aGF0IG51bGxzIG91dCBvdXIgYm9yZGVyIHdpZHRo
LgogICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgs
ICIwIik7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc3JjZG9jQXR0cikgeworICAg
ICAgICBzZXRTcmNkb2NEYXRhKGF0dHItPnZhbHVlKCkpOworICAgICAgICBzZXRMb2NhdGlvbihz
cmNkb2NVUkwoKSk7CiAgICAgfQogI2lmIEVOQUJMRShTQU5EQk9YKQogICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBzYW5kYm94QXR0cikKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSUZyYW1l
RWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50
LmlkbAkocmV2aXNpb24gNjQ5MTQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAg
ICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgc2Nyb2xsaW5nOwogICAgICAgICBhdHRy
aWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBzcmM7CiAgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVj
dF0gRE9NU3RyaW5nIHdpZHRoOworICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmlu
ZyBzcmNkb2M7CiAKICAgICAgICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDaGVja0ZyYW1lU2VjdXJpdHldIERvY3VtZW50IGNvbnRl
bnREb2N1bWVudDsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDY0
OTE0KQorKysgV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NCw3ICs4NCwxMSBAQCBib29sIFN1YmZyYW1lTG9hZGVyOjpyZXF1ZXN0RnJhbWUoSFRN
TEZyCiAgICAgLy8gU3VwcG9ydCBmb3IgPGZyYW1lIHNyYz0iamF2YXNjcmlwdDpzdHJpbmciPgog
ICAgIEtVUkwgc2NyaXB0VVJMOwogICAgIEtVUkwgdXJsOwotICAgIGlmIChwcm90b2NvbElzSmF2
YVNjcmlwdCh1cmxTdHJpbmcpKSB7CisgICAgQXRvbWljU3RyaW5nIHNyY2RvYyA9IG93bmVyRWxl
bWVudC0+c3JjZG9jRGF0YSgpOworICAgIAorICAgIGlmICghc3JjZG9jLmlzRW1wdHkoKSkgewor
ICAgICAgICB1cmwgPSBzcmNkb2NVUkwoKTsKKyAgICB9IGVsc2UgaWYgKHByb3RvY29sSXNKYXZh
U2NyaXB0KHVybFN0cmluZykpIHsKICAgICAgICAgc2NyaXB0VVJMID0gY29tcGxldGVVUkwodXJs
U3RyaW5nKTsgLy8gY29tcGxldGVVUkwoKSBlbmNvZGVzIHRoZSBVUkwuCiAgICAgICAgIHVybCA9
IGJsYW5rVVJMKCk7CiAgICAgfSBlbHNlCkBAIC05OSw3ICsxMDMsOSBAQCBib29sIFN1YmZyYW1l
TG9hZGVyOjpyZXF1ZXN0RnJhbWUoSFRNTEZyCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKCFzY3JpcHRVUkwuaXNFbXB0eSgpKQorICAgIGlmICghc3Jj
ZG9jLmlzRW1wdHkoKSkKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT53cml0ZXIoKS0+cmVwbGFj
ZURvY3VtZW50KHNyY2RvYyk7CisgICAgZWxzZSBpZiAoIXNjcmlwdFVSTC5pc0VtcHR5KCkpCiAg
ICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZUlmSmF2YVNjcmlwdFVSTChzY3JpcHRVUkwp
OwogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlzaW9uIDY0OTE0KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxNyw2ICsx
ODE3LDEyIEBAIGNvbnN0IEtVUkwmIGJsYW5rVVJMKCkKICAgICByZXR1cm4gc3RhdGljQmxhbmtV
Ukw7CiB9CiAKK2NvbnN0IEtVUkwmIHNyY2RvY1VSTCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChLVVJMLCBzdGF0aWNCbGFua1VSTCwgKFBhcnNlZFVSTFN0cmluZywgImFib3V0OnNyY2Rv
YyIpKTsKKyAgICByZXR1cm4gc3RhdGljQmxhbmtVUkw7Cit9CisKICNpZm5kZWYgTkRFQlVHCiB2
b2lkIEtVUkw6OnByaW50KCkgY29uc3QKIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5oCShyZXZpc2lvbiA2NDkxNCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsNiArMjU1
LDcgQEAgYm9vbCBlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKGNvbgogYm9vbCBwcm90
b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsKICAgICAK
IGNvbnN0IEtVUkwmIGJsYW5rVVJMKCk7Citjb25zdCBLVVJMJiBzcmNkb2NVUkwoKTsKIAogLy8g
RnVuY3Rpb25zIHRvIGRvIFVSTCBvcGVyYXRpb25zIG9uIHN0cmluZ3MuCiAvLyBUaGVzZSBhcmUg
b3BlcmF0aW9ucyB0aGF0IGFyZW4ndCBmYXN0ZXIgb24gYSBwYXJzZWQgVVJMLgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL0tVUkxHb29nbGUuY3BwCShyZXZpc2lvbiA2NDkxNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
S1VSTEdvb2dsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODAsNiArMTA4MCwxMiBAQCBjb25z
dCBLVVJMJiBibGFua1VSTCgpCiAgICAgcmV0dXJuIHN0YXRpY0JsYW5rVVJMOwogfQogCitjb25z
dCBLVVJMJiBzcmNkb2NVUkwoKQoreworICAgIHN0YXRpYyBLVVJMIHN0YXRpY0JsYW5rVVJMKFBh
cnNlZFVSTFN0cmluZywgImFib3V0OnNyY2RvYyIpOworICAgIHJldHVybiBzdGF0aWNCbGFua1VS
TDsKK30KKwogYm9vbCBwcm90b2NvbElzKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBjaGFyKiBw
cm90b2NvbCkKIHsKICAgICAvLyBEbyB0aGUgY29tcGFyaXNvbiB3aXRob3V0IG1ha2luZyBhIG5l
dyBzdHJpbmcgb2JqZWN0LgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjQ5MjYpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wOC0wNyAg
SnVzdGluIFNjaHVoICA8anNjaHVoQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgaWZyYW1lLnNyY2RvYworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM2ODMKKworICAg
ICAgICAqIGZhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtZnJhbWUtb25sb2FkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2Mtc3RhdGljLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2Mtd2luZG93LW9ubG9hZC5odG1s
OiBBZGRlZC4KKwogMjAxMC0wOC0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtZnJhbWUtb25sb2FkLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1mcmFtZS1vbmxvYWQuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtZnJh
bWUtb25sb2FkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9uIGxvZyhzKSB7CisgICAg
bG9nZ2VyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZyIpOworICAgIGxvZ2dlci5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzKSk7CisgICAgbG9nZ2VyLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOworfQorCit3aW5kb3cub25sb2FkID0g
ZnVuY3Rpb24oKSB7CisJZnVuY3Rpb24gc2V0ZnJhbWUgKGlkLCB1cmwpIHsKKyAgICAgICAgdmFy
IGYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICAgICAgZi5vbmxvYWQg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGYub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgbG9nKCJGcmFtZSAiICsgaWQgKyAiIGxvY2F0aW9uOiAiICsgZi5jb250ZW50
V2luZG93LmxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBsb2coIkZyYW1lICIgKyBpZCArICIg
c3JjOiAiICsgZi5zcmMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZi5zcmNkb2MgPSAi
PGh0bWw+PGJvZHk+SW5uZXIgRnJhbWUgIiArIGlkICsgIjwvYm9keT48L2h0bWw+IjsKKyAgICAg
ICAgICAgIGlmICh1cmwpCisgICAgICAgICAgICAgICAgZi5zcmMgPSB1cmw7CisgICAgICAgIH0K
KyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmFwcGVuZENoaWxkKGYpOworICAg
IH0KKworCXNldGZyYW1lKCJmMSIsICJodHRwOi8vZXhhbXBsZS5jb20vIik7CisJc2V0ZnJhbWUo
ImYyIiwgbnVsbCk7Cit9Cis8L3NjcmlwdD4KKzxoZWFkPgorPGJvZHk+CitPdXRlciBmcmFtZSBh
Ym92ZTxicj4KKzxkaXYgaWQ9ImYxIj48L2Rpdj4KK091dGVyIGZyYW1lIG1pZGRsZTxicj4KKzxk
aXYgaWQ9ImYyIj48L2Rpdj4KK091dGVyIGZyYW1lIGJlbG93PGJyPgorPHByZSBpZD0ibG9nIj5M
b2c6Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZnJh
bWVzL2lmcmFtZS1zcmNkb2Mtc3RhdGljLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1zdGF0aWMuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2Mtc3RhdGljLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMzQgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisKK2Z1bmN0aW9uIGxvZyhzKSB7CisgICAgbG9nZ2VyID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImxvZyIpOworICAgIGxvZ2dlci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZShzKSk7CisgICAgbG9nZ2VyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImJyIikpOworfQorCit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7CisJdmFyIGYgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZjEiKTsKKyAgICBsb2coIkZyYW1lIGYxIGxvY2F0aW9u
OiAiICsgZi5jb250ZW50V2luZG93LmxvY2F0aW9uKTsKKyAgICBsb2coIkZyYW1lIGYxIHNyYzog
IiArIGYuc3JjKTsKKworCWYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZjIiKTsKKyAgICBs
b2coIkZyYW1lIGYyIGxvY2F0aW9uOiAiICsgZi5jb250ZW50V2luZG93LmxvY2F0aW9uKTsKKyAg
ICBsb2coIkZyYW1lIGYyIHNyYzogIiArIGYuc3JjKTsKK30KKworPC9zY3JpcHQ+Cis8aGVhZD4K
Kzxib2R5PgorT3V0ZXIgZnJhbWUgYWJvdmU8YnI+Cis8aWZyYW1lIHNyY2RvYz0iPGh0bWw+PGJv
ZHk+SW5uZXIgRnJhbWUgMTwvYm9keT48L2h0bWw+IiBzcmM9Imh0dHA6Ly9leGFtcGxlLmNvbS8i
IGlkPSJmMSI+PC9pZnJhbWU+PGJyPgorT3V0ZXIgZnJhbWUgbWlkZGxlPGJyPgorPGlmcmFtZSBz
cmNkb2M9IjxodG1sPjxib2R5PklubmVyIEZyYW1lIDI8L2JvZHk+PC9odG1sPiIgaWQ9ImYyIj48
L2lmcmFtZT48YnI+CitPdXRlciBmcmFtZSBiZWxvdzxicj4KKzxwcmUgaWQ9ImxvZyI+TG9nOgor
PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9p
ZnJhbWUtc3JjZG9jLXdpbmRvdy1vbmxvYWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLXdpbmRvdy1vbmxvYWQuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2Mtd2luZG93LW9ubG9h
ZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBsb2cocykgeworICAgIGxvZ2dlciA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKTsKKyAgICBsb2dnZXIuYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocykpOworICAgIGxvZ2dlci5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKK30KKword2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9u
KCkgeworCWZ1bmN0aW9uIG1ha2VmcmFtZSAoaWQsIHVybCkgeworICAgICAgICB2YXIgZiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworCSAgICBmLm9ubG9hZCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIGxvZygiRnJhbWUgIiArIGlkICsgIiBsb2NhdGlvbjogIiArIGYu
Y29udGVudFdpbmRvdy5sb2NhdGlvbik7CisgICAgICAgICAgICBsb2coIkZyYW1lICIgKyBpZCAr
ICIgc3JjOiAiICsgZi5zcmMpOworICAgICAgICB9CisgICAgICAgIGYuc3JjZG9jID0gIjxodG1s
Pjxib2R5PklubmVyIEZyYW1lICIgKyBpZCArICI8L2JvZHk+PC9odG1sPiI7CisgICAgICAgIGlm
ICh1cmwpCisJCQlmLnNyYyA9IHVybDsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
aWQpLmFwcGVuZENoaWxkKGYpOworICAgIH0KKwltYWtlZnJhbWUoImYxIiwgImh0dHA6Ly9leGFt
cGxlLmNvbS8iKTsKKwltYWtlZnJhbWUoImYyIiwgbnVsbCk7Cit9Cis8L3NjcmlwdD4KKzxoZWFk
PgorPGJvZHk+CitPdXRlciBmcmFtZSBhYm92ZTxicj4KKzxkaXYgaWQ9ImYxIj48L2Rpdj4KK091
dGVyIGZyYW1lIG1pZGRsZTxicj4KKzxkaXYgaWQ9ImYyIj48L2Rpdj4KK091dGVyIGZyYW1lIGJl
bG93PGJyPgorPHByZSBpZD0ibG9nIj5Mb2c6Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63856</attachid>
            <date>2010-08-08 20:08:46 -0700</date>
            <delta_ts>2010-08-15 22:51:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43683-20100808200845.patch</filename>
            <type>text/plain</type>
            <size>12154</size>
            <attacher name="Justin Schuh">jschuh</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDk2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMDgtMDggIEp1c3RpbiBTY2h1aCAgPGpzY2h1aEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50IGlmcmFtZS5zcmNkb2MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQzNjgzCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZnJhbWVzL2lmcmFt
ZS1zcmNkb2MtZnJhbWUtb25sb2FkLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZnJhbWVzL2lm
cmFtZS1zcmNkb2Mtc3RhdGljLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZnJhbWVzL2lmcmFt
ZS1zcmNkb2Mtd2luZG93LW9ubG9hZC5odG1sCisKKyAgICAgICAgKiBodG1sL0hUTUxBdHRyaWJ1
dGVOYW1lcy5pbjoKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6bG9jYXRpb24pOgor
ICAgICAgICAqIGh0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudDo6SFRNTEZyYW1lT3duZXJFbGVtZW50KToKKyAgICAg
ICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZyYW1lT3duZXJFbGVtZW50Ojppc1NyY2RvYyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJh
bWVPd25lckVsZW1lbnQ6OnNldElzU3JjZG9jKToKKyAgICAgICAgKiBodG1sL0hUTUxJRnJhbWVF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5pZGw6Cisg
ICAgICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1
YmZyYW1lTG9hZGVyOjpsb2FkU3ViZnJhbWUpOgorICAgICAgICAqIHBsYXRmb3JtL0tVUkwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c3JjZG9jVVJMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJM
Lmg6CisgICAgICAgICogcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzcmNkb2NVUkwpOgorCiAyMDEwLTA4LTA4ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVv
bGxpdmllcnMuY29tPgogCiAgICAgICAgIFt3eF0gQnVpbGQgZml4LCBhZGQgbWVtYmVyIG5lZWRl
ZCB0byBjb21waWxlIE1hYy1zcGVjaWZpYyBmb250IGNvZGUuCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEF0dHJpYnV0ZU5hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXR0
cmlidXRlTmFtZXMuaW4JKHJldmlzaW9uIDY0OTYwKQorKysgV2ViQ29yZS9odG1sL0hUTUxBdHRy
aWJ1dGVOYW1lcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjU5LDYgKzI1OSw3IEBAIHNwYW4KIHNw
ZWVjaAogc3BlbGxjaGVjawogc3JjCitzcmNkb2MKIHN0YW5kYnkKIHN0YXJ0CiBzdGVwCkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHJldmlzaW9uIDY0OTYwKQorKysg
V2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTExLDkgKzExMSwxMCBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpvcGVuVVJMKGJvb2wg
CiAKIHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHNyY0F0dHIpCi0gICAgICAg
IHNldExvY2F0aW9uKGRlcHJlY2F0ZWRQYXJzZVVSTChhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxz
ZSBpZiAoaXNJZEF0dHJpYnV0ZU5hbWUoYXR0ci0+bmFtZSgpKSkgeworICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gc3JjQXR0cikgeworICAgICAgICBpZiAoIWlzU3JjZG9jKCkgfHwgcHJvdG9jb2xJ
c0phdmFTY3JpcHQoYXR0ci0+dmFsdWUoKSkpCisgICAgICAgICAgICBzZXRMb2NhdGlvbihkZXBy
ZWNhdGVkUGFyc2VVUkwoYXR0ci0+dmFsdWUoKSkpOworICAgIH0gZWxzZSBpZiAoaXNJZEF0dHJp
YnV0ZU5hbWUoYXR0ci0+bmFtZSgpKSkgewogICAgICAgICAvLyBJbXBvcnRhbnQgdG8gY2FsbCB0
aHJvdWdoIHRvIGJhc2UgZm9yIHRoZSBpZCBhdHRyaWJ1dGUgc28gdGhlIGhhc0lEIGJpdCBnZXRz
IHNldC4KICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKICAgICAgICAgbV9mcmFtZU5hbWUgPSBhdHRyLT52YWx1ZSgpOwpAQCAtMjE5LDYg
KzIyMCw4IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmF0dGFjaCgpCiAKIEtVUkwgSFRN
TEZyYW1lRWxlbWVudEJhc2U6OmxvY2F0aW9uKCkgY29uc3QKIHsKKyAgICBpZiAoaXNTcmNkb2Mo
KSkKKyAgICAgICAgcmV0dXJuIHNyY2RvY1VSTCgpOwogICAgIHJldHVybiBkb2N1bWVudCgpLT5j
b21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoc3JjQXR0cikpOwogfQogCkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAkocmV2aXNpb24gNjQ5NjApCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
NyBAQCBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OkhUTUxGcmFtZU93bmVyRWxlCiAgICAgOiBIVE1M
RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKICAgICAsIG1fY29udGVudEZyYW1lKDApCiAgICAg
LCBtX3NhbmRib3hGbGFncyhTYW5kYm94Tm9uZSkKKyAgICAsIG1faXNTcmNkb2MoZmFsc2UpCiB7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgJKHJldmlzaW9uIDY0
OTYwKQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCwxMiArNDgsMTYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU2Nyb2xsYmFyTW9k
ZSBzY3JvbGxpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gU2Nyb2xsYmFyQXV0bzsgfQogCiAgICAg
U2FuZGJveEZsYWdzIHNhbmRib3hGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fc2FuZGJveEZsYWdz
OyB9CisgICAgCisgICAgYm9vbCBpc1NyY2RvYygpIGNvbnN0IHsgcmV0dXJuIG1faXNTcmNkb2M7
IH07CiAKIHByb3RlY3RlZDoKICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKIAogICAgIHZvaWQgc2V0U2FuZGJveEZsYWdz
KFNhbmRib3hGbGFncyk7CiAKKyAgICB2b2lkIHNldElzU3JjZG9jKGJvb2wgaXNTcmNkb2MpIHsg
bV9pc1NyY2RvYyA9IGlzU3JjZG9jOyB9OworCiAgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmUo
KTsKIAogcHJpdmF0ZToKQEAgLTY1LDYgKzY5LDcgQEAgcHJpdmF0ZToKIAogICAgIEZyYW1lKiBt
X2NvbnRlbnRGcmFtZTsKICAgICBTYW5kYm94RmxhZ3MgbV9zYW5kYm94RmxhZ3M7CisgICAgYm9v
bCBtX2lzU3JjZG9jOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTElGcmFtZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NDk2MCkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MSUZyYW1lRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsOSBAQCB2
b2lkIEhUTUxJRnJhbWVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAgICAgICAgIGlmICghYXR0
ci0+aXNOdWxsKCkgJiYgIWF0dHItPnZhbHVlKCkudG9JbnQoKSkKICAgICAgICAgICAgIC8vIEFk
ZCBhIHJ1bGUgdGhhdCBudWxscyBvdXQgb3VyIGJvcmRlciB3aWR0aC4KICAgICAgICAgICAgIGFk
ZENTU0xlbmd0aChhdHRyLCBDU1NQcm9wZXJ0eUJvcmRlcldpZHRoLCAiMCIpOworICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IHNyY2RvY0F0dHIpIHsKKyAgICAgICAgc2V0SXNTcmNkb2Mo
IWF0dHItPmlzRW1wdHkoKSk7CisgICAgICAgIHNldExvY2F0aW9uKGF0dHItPmlzRW1wdHkoKSA/
IHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZz4oZ2V0QXR0cmlidXRlKHNyY0F0dHIpKSA6IHNyY2Rv
Y1VSTCgpKTsKICAgICB9CiAjaWYgRU5BQkxFKFNBTkRCT1gpCiAgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IHNhbmRib3hBdHRyKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVt
ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuaWRs
CShyZXZpc2lvbiA2NDk2MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICBh
dHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBzY3JvbGxpbmc7CiAgICAgICAgIGF0dHJpYnV0
ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIHNyYzsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBE
T01TdHJpbmcgd2lkdGg7CisgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIHNy
Y2RvYzsKIAogICAgICAgICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyOgogICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgW0NoZWNrRnJhbWVTZWN1cml0eV0gRG9jdW1lbnQgY29udGVudERv
Y3VtZW50OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNjQ5NjAp
CisrKyBXZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3NCw2ICsyNzQsMTAgQEAgRnJhbWUqIFN1YmZyYW1lTG9hZGVyOjpsb2FkU3ViZnJhbWUoSFRN
TAogICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNXaWRnZXQoKSAmJiB2aWV3KQogICAg
ICAgICB0b1JlbmRlcldpZGdldChyZW5kZXJlciktPnNldFdpZGdldCh2aWV3KTsKICAgICAKKyAg
ICAvLyBpZnJhbWUuc3JjZG9jCisgICAgaWYgKG93bmVyRWxlbWVudC0+aXNTcmNkb2MoKSAmJiB1
cmwgPT0gc3JjZG9jVVJMKCkpCisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPnJl
cGxhY2VEb2N1bWVudChvd25lckVsZW1lbnQtPmdldEF0dHJpYnV0ZShzcmNkb2NBdHRyKSk7Cisg
ICAgCiAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNoZWNrQ2FsbEltcGxpY2l0Q2xvc2UoKTsKICAg
ICAKICAgICAvLyBTb21lIGxvYWRzIGFyZSBwZXJmb3JtZWQgc3luY2hyb25vdXNseSAoZS5nLiwg
YWJvdXQ6YmxhbmsgYW5kIGxvYWRzCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlzaW9uIDY0OTYwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxNyw2ICsx
ODE3LDEyIEBAIGNvbnN0IEtVUkwmIGJsYW5rVVJMKCkKICAgICByZXR1cm4gc3RhdGljQmxhbmtV
Ukw7CiB9CiAKK2NvbnN0IEtVUkwmIHNyY2RvY1VSTCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChLVVJMLCBzdGF0aWNTcmNkb2NVUkwsIChQYXJzZWRVUkxTdHJpbmcsICJhYm91dDpzcmNk
b2MiKSk7CisgICAgcmV0dXJuIHN0YXRpY1NyY2RvY1VSTDsKK30KKwogI2lmbmRlZiBOREVCVUcK
IHZvaWQgS1VSTDo6cHJpbnQoKSBjb25zdAogewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJM
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJKHJldmlzaW9uIDY0OTYw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw2ICsy
NTUsNyBAQCBib29sIGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIoY29uCiBib29sIHBy
b3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOwogICAg
IAogY29uc3QgS1VSTCYgYmxhbmtVUkwoKTsKK2NvbnN0IEtVUkwmIHNyY2RvY1VSTCgpOwogCiAv
LyBGdW5jdGlvbnMgdG8gZG8gVVJMIG9wZXJhdGlvbnMgb24gc3RyaW5ncy4KIC8vIFRoZXNlIGFy
ZSBvcGVyYXRpb25zIHRoYXQgYXJlbid0IGZhc3RlciBvbiBhIHBhcnNlZCBVUkwuCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL0tVUkxHb29nbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vS1VSTEdvb2dsZS5jcHAJKHJldmlzaW9uIDY0OTYwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9LVVJMR29vZ2xlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4MCw2ICsxMDgwLDEyIEBAIGNv
bnN0IEtVUkwmIGJsYW5rVVJMKCkKICAgICByZXR1cm4gc3RhdGljQmxhbmtVUkw7CiB9CiAKK2Nv
bnN0IEtVUkwmIHNyY2RvY1VSTCgpCit7CisgICAgc3RhdGljIEtVUkwgc3RhdGljU3JjZG9jVVJM
KFBhcnNlZFVSTFN0cmluZywgImFib3V0OnNyY2RvYyIpOworICAgIHJldHVybiBzdGF0aWNTcmNk
b2NVUkw7Cit9CisKIGJvb2wgcHJvdG9jb2xJcyhjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgY2hh
ciogcHJvdG9jb2wpCiB7CiAgICAgLy8gRG8gdGhlIGNvbXBhcmlzb24gd2l0aG91dCBtYWtpbmcg
YSBuZXcgc3RyaW5nIG9iamVjdC4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0OTYwKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDgt
MDggIEp1c3RpbiBTY2h1aCAgPGpzY2h1aEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGlmcmFtZS5zcmNkb2MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNjgzCisK
KyAgICAgICAgKiBmYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLWZyYW1lLW9ubG9hZC5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLXN0YXRpYy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLXdpbmRvdy1vbmxvYWQu
aHRtbDogQWRkZWQuCisKIDIwMTAtMDgtMDggIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHRlc3QgZXhwZWN0YXRpb24gdXBkYXRlCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLWZyYW1lLW9ubG9hZC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtZnJh
bWUtb25sb2FkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9p
ZnJhbWUtc3JjZG9jLWZyYW1lLW9ubG9hZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQy
IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlv
biBsb2cocykgeworICAgIGxvZ2dlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKTsK
KyAgICBsb2dnZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocykpOworICAg
IGxvZ2dlci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKK30KKwor
d2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworCWZ1bmN0aW9uIHNldGZyYW1lIChpZCwgdXJs
KSB7CisgICAgICAgIHZhciBmID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Cisg
ICAgICAgIGYub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBmLm9ubG9hZCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGxvZygiRnJhbWUgIiArIGlkICsgIiBsb2NhdGlv
bjogIiArIGYuY29udGVudFdpbmRvdy5sb2NhdGlvbik7CisgICAgICAgICAgICAgICAgbG9nKCJG
cmFtZSAiICsgaWQgKyAiIHNyYzogIiArIGYuc3JjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGYuc3JjZG9jID0gIjxodG1sPjxib2R5PklubmVyIEZyYW1lICIgKyBpZCArICI8L2JvZHk+
PC9odG1sPiI7CisgICAgICAgICAgICBpZiAodXJsKQorICAgICAgICAgICAgICAgIGYuc3JjID0g
dXJsOworICAgICAgICB9CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5hcHBl
bmRDaGlsZChmKTsKKyAgICB9CisKKwlzZXRmcmFtZSgiZjEiLCAiaHR0cDovL2V4YW1wbGUuY29t
LyIpOworCXNldGZyYW1lKCJmMiIsIG51bGwpOworfQorPC9zY3JpcHQ+Cis8aGVhZD4KKzxib2R5
PgorT3V0ZXIgZnJhbWUgYWJvdmU8YnI+Cis8ZGl2IGlkPSJmMSI+PC9kaXY+CitPdXRlciBmcmFt
ZSBtaWRkbGU8YnI+Cis8ZGl2IGlkPSJmMiI+PC9kaXY+CitPdXRlciBmcmFtZSBiZWxvdzxicj4K
KzxwcmUgaWQ9ImxvZyI+TG9nOgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLXN0YXRpYy5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2Mtc3RhdGljLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLXN0YXRp
Yy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0IEBACis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBsb2cocykgeworICAgIGxvZ2dlciA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKTsKKyAgICBsb2dnZXIuYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocykpOworICAgIGxvZ2dlci5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKK30KKword2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9u
KCkgeworCXZhciBmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImYxIik7CisgICAgbG9nKCJG
cmFtZSBmMSBsb2NhdGlvbjogIiArIGYuY29udGVudFdpbmRvdy5sb2NhdGlvbik7CisgICAgbG9n
KCJGcmFtZSBmMSBzcmM6ICIgKyBmLnNyYyk7CisKKwlmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImYyIik7CisgICAgbG9nKCJGcmFtZSBmMiBsb2NhdGlvbjogIiArIGYuY29udGVudFdpbmRv
dy5sb2NhdGlvbik7CisgICAgbG9nKCJGcmFtZSBmMiBzcmM6ICIgKyBmLnNyYyk7Cit9CisKKzwv
c2NyaXB0PgorPGhlYWQ+Cis8Ym9keT4KK091dGVyIGZyYW1lIGFib3ZlPGJyPgorPGlmcmFtZSBz
cmNkb2M9IjxodG1sPjxib2R5PklubmVyIEZyYW1lIDE8L2JvZHk+PC9odG1sPiIgc3JjPSJodHRw
Oi8vZXhhbXBsZS5jb20vIiBpZD0iZjEiPjwvaWZyYW1lPjxicj4KK091dGVyIGZyYW1lIG1pZGRs
ZTxicj4KKzxpZnJhbWUgc3JjZG9jPSI8aHRtbD48Ym9keT5Jbm5lciBGcmFtZSAyPC9ib2R5Pjwv
aHRtbD4iIGlkPSJmMiI+PC9pZnJhbWU+PGJyPgorT3V0ZXIgZnJhbWUgYmVsb3c8YnI+Cis8cHJl
IGlkPSJsb2ciPkxvZzoKKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy13aW5kb3ctb25sb2FkLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy13aW5kb3ctb25sb2Fk
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3Jj
ZG9jLXdpbmRvdy1vbmxvYWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gbG9nKHMp
IHsKKyAgICBsb2dnZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nIik7CisgICAgbG9n
Z2VyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMpKTsKKyAgICBsb2dnZXIu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7Cit9CisKK3dpbmRvdy5v
bmxvYWQgPSBmdW5jdGlvbigpIHsKKwlmdW5jdGlvbiBtYWtlZnJhbWUgKGlkLCB1cmwpIHsKKyAg
ICAgICAgdmFyIGYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKwkgICAgZi5v
bmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBsb2coIkZyYW1lICIgKyBpZCArICIg
bG9jYXRpb246ICIgKyBmLmNvbnRlbnRXaW5kb3cubG9jYXRpb24pOworICAgICAgICAgICAgbG9n
KCJGcmFtZSAiICsgaWQgKyAiIHNyYzogIiArIGYuc3JjKTsKKyAgICAgICAgfQorICAgICAgICBm
LnNyY2RvYyA9ICI8aHRtbD48Ym9keT5Jbm5lciBGcmFtZSAiICsgaWQgKyAiPC9ib2R5PjwvaHRt
bD4iOworICAgICAgICBpZiAodXJsKQorCQkJZi5zcmMgPSB1cmw7CisgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKGlkKS5hcHBlbmRDaGlsZChmKTsKKyAgICB9CisJbWFrZWZyYW1lKCJm
MSIsICJodHRwOi8vZXhhbXBsZS5jb20vIik7CisJbWFrZWZyYW1lKCJmMiIsIG51bGwpOworfQor
PC9zY3JpcHQ+Cis8aGVhZD4KKzxib2R5PgorT3V0ZXIgZnJhbWUgYWJvdmU8YnI+Cis8ZGl2IGlk
PSJmMSI+PC9kaXY+CitPdXRlciBmcmFtZSBtaWRkbGU8YnI+Cis8ZGl2IGlkPSJmMiI+PC9kaXY+
CitPdXRlciBmcmFtZSBiZWxvdzxicj4KKzxwcmUgaWQ9ImxvZyI+TG9nOgorPC9wcmU+Cis8L2Jv
ZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64467</attachid>
            <date>2010-08-15 22:51:19 -0700</date>
            <delta_ts>2010-08-23 08:13:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43683-20100815225118.patch</filename>
            <type>text/plain</type>
            <size>9555</size>
            <attacher name="Justin Schuh">jschuh</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTM5MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDgtMTUgIEp1c3RpbiBTY2h1aCAgPGpzY2h1aEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50IGlmcmFtZS5zcmNkb2MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQzNjgzCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisK
KyAgICAgICAgKiBodG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbjoKKyAgICAgICAgKiBodG1sL0hU
TUxGcmFtZUVsZW1lbnRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1l
bnRCYXNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJh
bWVFbGVtZW50QmFzZTo6bG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxl
bWVudEJhc2U6OnNldExvY2F0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnRC
YXNlLmg6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50OjpzcmNkb2NTdWJzdGl0dXRlRGF0YSk6
CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxJRnJhbWVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MSUZyYW1lRWxl
bWVudC5pZGw6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkV2l0aE5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICAq
IHBsYXRmb3JtL0tVUkwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3JjZG9jVVJMKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9LVVJMLmg6CisgICAgICAgICogcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpzcmNkb2NVUkwpOgorCiAyMDEwLTA4LTE1ICBSeXVhbiBDaG9p
ICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbnRvbmlv
IEdvbWVzLgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiA2NTM2
OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4JKHdvcmtpbmcgY29weSkK
QEAgLTI1OSw2ICsyNTksNyBAQCBzcGFuCiBzcGVlY2gKIHNwZWxsY2hlY2sKIHNyYworc3JjZG9j
CiBzdGFuZGJ5CiBzdGFydAogc3RlcApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1l
bnRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJh
c2UuY3BwCShyZXZpc2lvbiA2NTM2OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50
QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw5ICsxMTEsMTAgQEAgdm9pZCBIVE1MRnJh
bWVFbGVtZW50QmFzZTo6b3BlblVSTChib29sIAogCiB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNl
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBzcmNBdHRyKQotICAgICAgICBzZXRMb2NhdGlvbihkZXByZWNhdGVkUGFyc2VV
UkwoYXR0ci0+dmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKGlzSWRBdHRyaWJ1dGVOYW1lKGF0dHIt
Pm5hbWUoKSkpIHsKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IHNyY0F0dHIpIHsKKyAgICAgICAg
aWYgKCFoYXNUYWdOYW1lKGlmcmFtZVRhZykgfHwgZ2V0QXR0cmlidXRlKHNyY2RvY0F0dHIpLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHNldExvY2F0aW9uKGRlcHJlY2F0ZWRQYXJzZVVSTChhdHRy
LT52YWx1ZSgpKSk7CisgICAgfSBlbHNlIGlmIChpc0lkQXR0cmlidXRlTmFtZShhdHRyLT5uYW1l
KCkpKSB7CiAgICAgICAgIC8vIEltcG9ydGFudCB0byBjYWxsIHRocm91Z2ggdG8gYmFzZSBmb3Ig
dGhlIGlkIGF0dHJpYnV0ZSBzbyB0aGUgaGFzSUQgYml0IGdldHMgc2V0LgogICAgICAgICBIVE1M
RnJhbWVPd25lckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogICAgICAgICBt
X2ZyYW1lTmFtZSA9IGF0dHItPnZhbHVlKCk7CkBAIC0yMTksMTUgKzIyMCwyMCBAQCB2b2lkIEhU
TUxGcmFtZUVsZW1lbnRCYXNlOjphdHRhY2goKQogCiBLVVJMIEhUTUxGcmFtZUVsZW1lbnRCYXNl
Ojpsb2NhdGlvbigpIGNvbnN0CiB7CisgICAgaWYgKGhhc1RhZ05hbWUoaWZyYW1lVGFnKSAmJiAh
Z2V0QXR0cmlidXRlKHNyY2RvY0F0dHIpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHNyY2Rv
Y1VSTCgpOwogICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUo
c3JjQXR0cikpOwogfQogCi12b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzZXRMb2NhdGlvbihj
b25zdCBTdHJpbmcmIHN0cikKK3ZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldExvY2F0aW9u
KGNvbnN0IFN0cmluZyYgc3RyLCBib29sIGFsbG93U3JjZG9jKQogewogICAgIFNldHRpbmdzKiBz
ZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7CiAgICAgaWYgKHNldHRpbmdzICYmIHNl
dHRpbmdzLT5uZWVkc0Fjcm9iYXRGcmFtZVJlbG9hZGluZ1F1aXJrKCkgJiYgbV9VUkwgPT0gc3Ry
KQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoIWFsbG93U3JjZG9jICYmIHN0ciA9PSBzcmNk
b2NVUkwoKS5zdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAogICAgIG1fVVJMID0gQXRv
bWljU3RyaW5nKHN0cik7CiAKICAgICBpZiAoaW5Eb2N1bWVudCgpKQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxGcmFtZUVsZW1lbnRCYXNlLmgJKHJldmlzaW9uIDY1MzY4KQorKysgV2ViQ29yZS9odG1sL0hU
TUxGcmFtZUVsZW1lbnRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTEZyYW1lRWxlbWVudEJhc2UgOiBwdWJsaWMgSFRN
TEZyYW1lT3duZXJFbGVtZW50IHsKIHB1YmxpYzoKICAgICBLVVJMIGxvY2F0aW9uKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldExvY2F0
aW9uKGNvbnN0IFN0cmluZyYsIGJvb2wgYWxsb3dTcmNkb2MgPSBmYWxzZSk7CiAKICAgICB2aXJ0
dWFsIFNjcm9sbGJhck1vZGUgc2Nyb2xsaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xs
aW5nOyB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAko
cmV2aXNpb24gNjUzNjgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjEsOSArMjEsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJTdWJzdGl0dXRlRGF0YS5oIgogCiAjaWYgRU5BQkxFKFNW
RykKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCkBAIC04OCw0ICs5MiwxNyBAQCBTVkdEb2N1
bWVudCogSFRNTEZyYW1lT3duZXJFbGVtZW50OjpnZXRTCiB9CiAjZW5kaWYKIAorU3Vic3RpdHV0
ZURhdGEgSFRNTEZyYW1lT3duZXJFbGVtZW50OjpzcmNkb2NTdWJzdGl0dXRlRGF0YShjb25zdCBL
VVJMJiB1cmwpIGNvbnN0Cit7CisgICAgaWYgKHVybCA9PSBzcmNkb2NVUkwoKSAmJiBoYXNUYWdO
YW1lKEhUTUxOYW1lczo6aWZyYW1lVGFnKSkgeworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcg
c3JjZG9jID0gZ2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjZG9jQXR0cik7CisgICAgICAgIGlm
ICghc3JjZG9jLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgY29uc3QgQ1N0cmluZyBzcmNkb2NV
dGY4ID0gc3JjZG9jLnN0cmluZygpLnV0ZjgoKTsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRC
dWZmZXI+IGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShzcmNkb2NVdGY4LmRhdGEoKSwgc3Jj
ZG9jVXRmOC5sZW5ndGgoKSk7CisgICAgICAgICAgICByZXR1cm4gU3Vic3RpdHV0ZURhdGEoZGF0
YS5yZWxlYXNlKCksIGRvY3VtZW50KCktPmlzWEhUTUxEb2N1bWVudCgpID8gInRleHQveG1sIiA6
ICJ0ZXh0L2h0bWwiLCAiVVRGLTgiLCBLVVJMKCksIHNyY2RvY1VSTCgpKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gU3Vic3RpdHV0ZURhdGEoKTsKK30gICAgCisgICAgCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCShy
ZXZpc2lvbiA2NTM2OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIERPTVdpbmRvdzsKIGNsYXNzIEZyYW1lOworY2xhc3MgU3Vic3RpdHV0ZURhdGE7CiAKICNp
ZiBFTkFCTEUoU1ZHKQogY2xhc3MgU1ZHRG9jdW1lbnQ7CkBAIC00OCw2ICs0OSw4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFNjcm9sbGJhck1vZGUgc2Nyb2xsaW5nTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIFNjcm9sbGJhckF1dG87IH0KIAogICAgIFNhbmRib3hGbGFncyBzYW5kYm94RmxhZ3MoKSBj
b25zdCB7IHJldHVybiBtX3NhbmRib3hGbGFnczsgfQorICAgIAorICAgIFN1YnN0aXR1dGVEYXRh
IHNyY2RvY1N1YnN0aXR1dGVEYXRhKGNvbnN0IEtVUkwmKSBjb25zdDsKIAogcHJvdGVjdGVkOgog
ICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCopOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2
NTM2OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNyw2ICsxMjcsMTIgQEAgdm9pZCBIVE1MSUZyYW1lRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaQogICAgICAgICBpZiAoIWF0dHItPmlzTnVsbCgpICYmICFhdHRyLT52YWx1ZSgpLnRv
SW50KCkpCiAgICAgICAgICAgICAvLyBBZGQgYSBydWxlIHRoYXQgbnVsbHMgb3V0IG91ciBib3Jk
ZXIgd2lkdGguCiAgICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTUHJvcGVydHlCb3Jk
ZXJXaWR0aCwgIjAiKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzcmNkb2NBdHRy
KSB7CisgICAgICAgIC8vIE5hdmlnYXRlIHVzaW5nIEBzcmMgaWYgQHNyY2RvYyBpcyBnZXR0aW5n
IGNsZWFyZWQuCisgICAgICAgIGlmIChhdHRyLT5pc0VtcHR5KCkpCisgICAgICAgICAgICBzZXRM
b2NhdGlvbihnZXRBdHRyaWJ1dGUoc3JjQXR0ciksIGZhbHNlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc2V0TG9jYXRpb24oc3JjZG9jVVJMKCksIHRydWUpOwogICAgIH0KICNpZiBFTkFC
TEUoU0FOREJPWCkKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc2FuZGJveEF0dHIpCklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5pZGwJKHJldmlzaW9uIDY1MzY4KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3Ry
aW5nIHNjcm9sbGluZzsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgc3Jj
OwogICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyB3aWR0aDsKKyAgICAgICAg
YXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgc3JjZG9jOwogCiAgICAgICAgIC8vIEludHJv
ZHVjZWQgaW4gRE9NIExldmVsIDI6CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ2hlY2tG
cmFtZVNlY3VyaXR5XSBEb2N1bWVudCBjb250ZW50RG9jdW1lbnQ7CkluZGV4OiBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCShyZXZpc2lvbiA2NTM2OCkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5MCw3ICsxMzkwLDggQEAgdm9pZCBGcmFtZUxvYWRl
cjo6bG9hZChjb25zdCBSZXNvdXJjZVJlcQogCiB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkV2l0aE5h
dmlnYXRpb25BY3Rpb24oY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBOYXZp
Z2F0aW9uQWN0aW9uJiBhY3Rpb24sIGJvb2wgbG9ja0hpc3RvcnksIEZyYW1lTG9hZFR5cGUgdHlw
ZSwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSkKIHsKLSAgICBSZWZQdHI8RG9jdW1l
bnRMb2FkZXI+IGxvYWRlciA9IG1fY2xpZW50LT5jcmVhdGVEb2N1bWVudExvYWRlcihyZXF1ZXN0
LCBTdWJzdGl0dXRlRGF0YSgpKTsKKyAgICBTdWJzdGl0dXRlRGF0YSBzdWJzdGl0dXRlRGF0YSA9
IG1fZnJhbWUtPm93bmVyRWxlbWVudCgpID8gbV9mcmFtZS0+b3duZXJFbGVtZW50KCktPnNyY2Rv
Y1N1YnN0aXR1dGVEYXRhKHJlcXVlc3QudXJsKCkpIDogU3Vic3RpdHV0ZURhdGEoKTsKKyAgICBS
ZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGxvYWRlciA9IG1fY2xpZW50LT5jcmVhdGVEb2N1bWVudExv
YWRlcihyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSk7CiAgICAgaWYgKGxvY2tIaXN0b3J5ICYmIG1f
ZG9jdW1lbnRMb2FkZXIpCiAgICAgICAgIGxvYWRlci0+c2V0Q2xpZW50UmVkaXJlY3RTb3VyY2VG
b3JIaXN0b3J5KG1fZG9jdW1lbnRMb2FkZXItPmRpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeSgp
ID8gbV9kb2N1bWVudExvYWRlci0+dXJsRm9ySGlzdG9yeSgpIDogbV9kb2N1bWVudExvYWRlci0+
Y2xpZW50UmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5KCkpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL0tVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJl
dmlzaW9uIDY1MzY4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTgxNyw2ICsxODE3LDEyIEBAIGNvbnN0IEtVUkwmIGJsYW5rVVJMKCkKICAgICByZXR1
cm4gc3RhdGljQmxhbmtVUkw7CiB9CiAKK2NvbnN0IEtVUkwmIHNyY2RvY1VSTCgpCit7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChLVVJMLCBzdGF0aWNTcmNkb2NVUkwsIChQYXJzZWRVUkxTdHJp
bmcsICJhYm91dDpzcmNkb2MiKSk7CisgICAgcmV0dXJuIHN0YXRpY1NyY2RvY1VSTDsKK30KKwog
I2lmbmRlZiBOREVCVUcKIHZvaWQgS1VSTDo6cHJpbnQoKSBjb25zdAogewpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9LVVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJ
KHJldmlzaW9uIDY1MzY4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1NSw2ICsyNTUsNyBAQCBib29sIGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZp
ZXIoY29uCiBib29sIHByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChjb25zdCBLVVJMJiwgY29u
c3QgS1VSTCYpOwogICAgIAogY29uc3QgS1VSTCYgYmxhbmtVUkwoKTsKK2NvbnN0IEtVUkwmIHNy
Y2RvY1VSTCgpOwogCiAvLyBGdW5jdGlvbnMgdG8gZG8gVVJMIG9wZXJhdGlvbnMgb24gc3RyaW5n
cy4KIC8vIFRoZXNlIGFyZSBvcGVyYXRpb25zIHRoYXQgYXJlbid0IGZhc3RlciBvbiBhIHBhcnNl
ZCBVUkwuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0tVUkxHb29nbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHAJKHJldmlzaW9uIDY1MzY4KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4MCw2
ICsxMDgwLDEyIEBAIGNvbnN0IEtVUkwmIGJsYW5rVVJMKCkKICAgICByZXR1cm4gc3RhdGljQmxh
bmtVUkw7CiB9CiAKK2NvbnN0IEtVUkwmIHNyY2RvY1VSTCgpCit7CisgICAgc3RhdGljIEtVUkwg
c3RhdGljU3JjZG9jVVJMKFBhcnNlZFVSTFN0cmluZywgImFib3V0OnNyY2RvYyIpOworICAgIHJl
dHVybiBzdGF0aWNTcmNkb2NVUkw7Cit9CisKIGJvb2wgcHJvdG9jb2xJcyhjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgY2hhciogcHJvdG9jb2wpCiB7CiAgICAgLy8gRG8gdGhlIGNvbXBhcmlzb24g
d2l0aG91dCBtYWtpbmcgYSBuZXcgc3RyaW5nIG9iamVjdC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65121</attachid>
            <date>2010-08-23 08:13:49 -0700</date>
            <delta_ts>2010-08-29 22:23:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43683-20100823081348.patch</filename>
            <type>text/plain</type>
            <size>25361</size>
            <attacher name="Justin Schuh">jschuh</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTgxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMTAtMDgtMjMgIEp1c3RpbiBTY2h1aCAgPGpzY2h1aEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50IGlmcmFtZS5zcmNkb2MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQzNjgzCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZnJhbWVzL2lmcmFt
ZS1zcmNkb2MtbG9hZC1keW5hbWljLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZnJhbWVzL2lm
cmFtZS1zcmNkb2MtbG9hZC1yZXBsYWNlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZnJhbWVz
L2lmcmFtZS1zcmNkb2MtbG9hZC1zdGF0aWMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9mcmFt
ZXMvaWZyYW1lLXNyY2RvYy1uYXZpZ2F0aW9uLmh0bWwKKworICAgICAgICAqIGh0bWwvSFRNTEF0
dHJpYnV0ZU5hbWVzLmluOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpsb2NhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0TG9jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldExvY2F0aW9uVG9T
cmNkb2MpOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuaDoKKyAgICAgICAg
KiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RnJhbWVPd25lckVsZW1lbnQ6OnNyY2RvY1N1YnN0aXR1dGVEYXRhKToKKyAgICAgICAgKiBodG1s
L0hUTUxGcmFtZU93bmVyRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTElGcmFtZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbDoKKyAgICAg
ICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmxvYWRXaXRoTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgICogbG9hZGVyL1N1YnN0aXR1
dGVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpTdWJzdGl0dXRlRGF0YTo6U3Vic3RpdHV0ZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGE6OlN1YnN0aXR1dGVDb250ZW50
Ojp+U3Vic3RpdHV0ZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGE6
OmNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGE6OlN1YnN0aXR1dGVD
b250ZW50QnVmZmVyOjpTdWJzdGl0dXRlQ29udGVudEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTdWJzdGl0dXRlRGF0YTo6U3Vic3RpdHV0ZUNvbnRlbnRCdWZmZXI6OmRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGE6OlN1YnN0aXR1dGVDb250ZW50QnVmZmVyOjpzaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN1YnN0aXR1dGVEYXRhOjpTdWJzdGl0dXRlQ29udGVudFN0
cmluZzo6U3Vic3RpdHV0ZUNvbnRlbnRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3Vic3Rp
dHV0ZURhdGE6OlN1YnN0aXR1dGVDb250ZW50U3RyaW5nOjpkYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlN1YnN0aXR1dGVEYXRhOjpTdWJzdGl0dXRlQ29udGVudFN0cmluZzo6c2l6ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vS1VSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzcmNkb2NVUkwpOgor
ICAgICAgICAqIHBsYXRmb3JtL0tVUkwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMR29vZ2xl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNyY2RvY1VSTCk6CisKIDIwMTAtMDgtMjMgIFBhdmVs
IFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgkocmV2
aXNpb24gNjU3OTEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTksNiArMjU5LDcgQEAgc3Bhbgogc3BlZWNoCiBzcGVsbGNoZWNrCiBz
cmMKK3NyY2RvYwogc3RhbmRieQogc3RhcnQKIHN0ZXAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
RnJhbWVFbGVtZW50QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFt
ZUVsZW1lbnRCYXNlLmNwcAkocmV2aXNpb24gNjU3OTEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZy
YW1lRWxlbWVudEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOSArMTExLDEwIEBAIHZv
aWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6Om9wZW5VUkwoYm9vbCAKIAogdm9pZCBIVE1MRnJhbWVF
bGVtZW50QmFzZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cikKLSAgICAgICAgc2V0TG9jYXRpb24oZGVwcmVj
YXRlZFBhcnNlVVJMKGF0dHItPnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChpc0lkQXR0cmlidXRl
TmFtZShhdHRyLT5uYW1lKCkpKSB7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBzcmNBdHRyKSB7
CisgICAgICAgIGlmICghaGFzVGFnTmFtZShpZnJhbWVUYWcpIHx8IGdldEF0dHJpYnV0ZShzcmNk
b2NBdHRyKS5pc051bGwoKSkKKyAgICAgICAgICAgIHNldExvY2F0aW9uKGRlcHJlY2F0ZWRQYXJz
ZVVSTChhdHRyLT52YWx1ZSgpKSk7CisgICAgfSBlbHNlIGlmIChpc0lkQXR0cmlidXRlTmFtZShh
dHRyLT5uYW1lKCkpKSB7CiAgICAgICAgIC8vIEltcG9ydGFudCB0byBjYWxsIHRocm91Z2ggdG8g
YmFzZSBmb3IgdGhlIGlkIGF0dHJpYnV0ZSBzbyB0aGUgaGFzSUQgYml0IGdldHMgc2V0LgogICAg
ICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwog
ICAgICAgICBtX2ZyYW1lTmFtZSA9IGF0dHItPnZhbHVlKCk7CkBAIC0yMTksNiArMjIwLDggQEAg
dm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6YXR0YWNoKCkKIAogS1VSTCBIVE1MRnJhbWVFbGVt
ZW50QmFzZTo6bG9jYXRpb24oKSBjb25zdAogeworICAgIGlmIChoYXNUYWdOYW1lKGlmcmFtZVRh
ZykgJiYgIWdldEF0dHJpYnV0ZShzcmNkb2NBdHRyKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBzcmNkb2NVUkwoKTsKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0
cmlidXRlKHNyY0F0dHIpKTsKIH0KIApAQCAtMjI4LDExICsyMzEsMjIgQEAgdm9pZCBIVE1MRnJh
bWVFbGVtZW50QmFzZTo6c2V0TG9jYXRpb24oYwogICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5n
cy0+bmVlZHNBY3JvYmF0RnJhbWVSZWxvYWRpbmdRdWlyaygpICYmIG1fVVJMID09IHN0cikKICAg
ICAgICAgcmV0dXJuOwogCisgICAgaWYgKHN0ciA9PSBzcmNkb2NVUkwoKS5zdHJpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAogICAgIG1fVVJMID0gQXRvbWljU3RyaW5nKHN0cik7CiAKICAg
ICBpZiAoaW5Eb2N1bWVudCgpKQogICAgICAgICBvcGVuVVJMKGZhbHNlLCBmYWxzZSk7CiB9Cisg
Cit2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzZXRMb2NhdGlvblRvU3JjZG9jKCkKK3sKKyAg
ICBtX1VSTCA9IHNyY2RvY1VSTCgpLnN0cmluZygpOworCisgICAgaWYgKGluRG9jdW1lbnQoKSkK
KyAgICAgICAgb3BlblVSTChmYWxzZSwgZmFsc2UpOworfQogCiBib29sIEhUTUxGcmFtZUVsZW1l
bnRCYXNlOjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
RnJhbWVFbGVtZW50QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVF
bGVtZW50QmFzZS5oCShyZXZpc2lvbiA2NTc5MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVF
bGVtZW50QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBAIGNsYXNzIEhUTUxG
cmFtZUVsZW1lbnRCYXNlIDogcHVibGljIEhUTUwKIHB1YmxpYzoKICAgICBLVVJMIGxvY2F0aW9u
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lk
IHNldExvY2F0aW9uVG9TcmNkb2MoKTsKIAogICAgIHZpcnR1YWwgU2Nyb2xsYmFyTW9kZSBzY3Jv
bGxpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmc7IH0KICAgICAKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NTc5MSkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw5ICsyMSwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93
bmVyRWxlbWVudC5oIgogCisjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiRE9NV2lu
ZG93LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCiAKICNpZiBF
TkFCTEUoU1ZHKQogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKQEAgLTg4LDQgKzkxLDE0IEBA
IFNWR0RvY3VtZW50KiBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OmdldFMKIH0KICNlbmRpZgogCitT
dWJzdGl0dXRlRGF0YSBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnNyY2RvY1N1YnN0aXR1dGVEYXRh
KGNvbnN0IEtVUkwmIHVybCkgY29uc3QKK3sKKyAgICBpZiAodXJsID09IHNyY2RvY1VSTCgpICYm
IGhhc1RhZ05hbWUoSFRNTE5hbWVzOjppZnJhbWVUYWcpKSB7CisgICAgICAgIGNvbnN0IFN0cmlu
ZyBzcmNkb2MgPSBnZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNkb2NBdHRyKTsKKyAgICAgICAg
aWYgKCFzcmNkb2MuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gU3Vic3RpdHV0ZURhdGEo
c3JjZG9jLCBkb2N1bWVudCgpLT5pc1hIVE1MRG9jdW1lbnQoKSA/ICJ0ZXh0L3htbCIgOiAidGV4
dC9odG1sIiwgS1VSTCgpLCB1cmwpOworICAgIH0KKyAgICByZXR1cm4gU3Vic3RpdHV0ZURhdGEo
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxG
cmFtZU93bmVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVP
d25lckVsZW1lbnQuaAkocmV2aXNpb24gNjU3OTEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZyYW1l
T3duZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBET01XaW5kb3c7CiBjbGFzcyBGcmFtZTsKK2NsYXNzIFN1YnN0
aXR1dGVEYXRhOwogCiAjaWYgRU5BQkxFKFNWRykKIGNsYXNzIFNWR0RvY3VtZW50OwpAQCAtNDgs
NiArNDksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTY3JvbGxiYXJNb2RlIHNjcm9sbGluZ01v
ZGUoKSBjb25zdCB7IHJldHVybiBTY3JvbGxiYXJBdXRvOyB9CiAKICAgICBTYW5kYm94RmxhZ3Mg
c2FuZGJveEZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9zYW5kYm94RmxhZ3M7IH0KKyAgICAKKyAg
ICBTdWJzdGl0dXRlRGF0YSBzcmNkb2NTdWJzdGl0dXRlRGF0YShjb25zdCBLVVJMJikgY29uc3Q7
CiAKIHByb3RlY3RlZDoKICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSUZyYW1l
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50
LmNwcAkocmV2aXNpb24gNjU3OTEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDE3IEBAIHZvaWQgSFRNTElGcmFtZUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAgICAgaWYgKCFhdHRyLT5pc051bGwoKSAmJiAh
YXR0ci0+dmFsdWUoKS50b0ludCgpKQogICAgICAgICAgICAgLy8gQWRkIGEgcnVsZSB0aGF0IG51
bGxzIG91dCBvdXIgYm9yZGVyIHdpZHRoLgogICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIs
IENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsICIwIik7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gc3JjZG9jQXR0cikgeworICAgICAgICAvLyBOYXZpZ2F0ZSB1c2luZyBAc3JjIGlmIEBz
cmNkb2MgaXMgZ2V0dGluZyBjbGVhcmVkLgorICAgICAgICBpZiAoYXR0ci0+aXNOdWxsKCkpCisg
ICAgICAgICAgICBzZXRMb2NhdGlvbihnZXRBdHRyaWJ1dGUoc3JjQXR0cikpOworICAgICAgICBl
bHNlIHsKKyNpZiBFTkFCTEUoU0FOREJPWCkKKyAgICAgICAgICAgIFNhbmRib3hGbGFncyBmbGFn
cyA9IHNhbmRib3hGbGFncygpOworICAgICAgICAgICAgc2V0U2FuZGJveEZsYWdzKGZsYWdzID09
IFNhbmRib3hOb25lID8gU2FuZGJveEFsbCA6IGZsYWdzKTsKKyNlbmRpZgorICAgICAgICAgICAg
c2V0TG9jYXRpb25Ub1NyY2RvYygpOworICAgICAgICB9CiAgICAgfQogI2lmIEVOQUJMRShTQU5E
Qk9YKQogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzYW5kYm94QXR0cikKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbAkocmV2aXNpb24gNjU3OTEpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTElGcmFtZUVsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
IG1vZHVsZSBodG1sIHsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgc2Ny
b2xsaW5nOwogICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBzcmM7CiAgICAg
ICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIHdpZHRoOworICAgICAgICBhdHRyaWJ1
dGUgW1JlZmxlY3RdIERPTVN0cmluZyBzcmNkb2M7CiAKICAgICAgICAgLy8gSW50cm9kdWNlZCBp
biBET00gTGV2ZWwgMjoKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDaGVja0ZyYW1lU2Vj
dXJpdHldIERvY3VtZW50IGNvbnRlbnREb2N1bWVudDsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAJKHJldmlzaW9uIDY1NzkxKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzkwLDcgKzEzOTAsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2Fk
KGNvbnN0IFJlc291cmNlUmVxCiAKIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRXaXRoTmF2aWdhdGlv
bkFjdGlvbihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IE5hdmlnYXRpb25B
Y3Rpb24mIGFjdGlvbiwgYm9vbCBsb2NrSGlzdG9yeSwgRnJhbWVMb2FkVHlwZSB0eXBlLCBQYXNz
UmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlKQogewotICAgIFJlZlB0cjxEb2N1bWVudExvYWRl
cj4gbG9hZGVyID0gbV9jbGllbnQtPmNyZWF0ZURvY3VtZW50TG9hZGVyKHJlcXVlc3QsIFN1YnN0
aXR1dGVEYXRhKCkpOworICAgIFN1YnN0aXR1dGVEYXRhIHN1YnN0aXR1dGVEYXRhID0gbV9mcmFt
ZS0+b3duZXJFbGVtZW50KCkgPyBtX2ZyYW1lLT5vd25lckVsZW1lbnQoKS0+c3JjZG9jU3Vic3Rp
dHV0ZURhdGEocmVxdWVzdC51cmwoKSkgOiBTdWJzdGl0dXRlRGF0YSgpOworICAgIFJlZlB0cjxE
b2N1bWVudExvYWRlcj4gbG9hZGVyID0gbV9jbGllbnQtPmNyZWF0ZURvY3VtZW50TG9hZGVyKHJl
cXVlc3QsIHN1YnN0aXR1dGVEYXRhKTsKICAgICBpZiAobG9ja0hpc3RvcnkgJiYgbV9kb2N1bWVu
dExvYWRlcikKICAgICAgICAgbG9hZGVyLT5zZXRDbGllbnRSZWRpcmVjdFNvdXJjZUZvckhpc3Rv
cnkobV9kb2N1bWVudExvYWRlci0+ZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KCkgPyBtX2Rv
Y3VtZW50TG9hZGVyLT51cmxGb3JIaXN0b3J5KCkgOiBtX2RvY3VtZW50TG9hZGVyLT5jbGllbnRS
ZWRpcmVjdFNvdXJjZUZvckhpc3RvcnkoKSk7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YnN0
aXR1dGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvU3Vic3RpdHV0ZURhdGEu
aAkocmV2aXNpb24gNjU3OTEpCisrKyBXZWJDb3JlL2xvYWRlci9TdWJzdGl0dXRlRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI3LDkgKzI3LDEwIEBACiAjZGVmaW5lIFN1YnN0aXR1dGVEYXRhX2gKIAogI2lu
Y2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNywzMiArMzgsNzEgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFN1YnN0aXR1dGVEYXRhIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIFN1YnN0aXR1dGVEYXRhKCkgeyB9Ci0KLSAgICAgICAgU3Vic3RpdHV0ZURhdGEoUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNv
bnN0IFN0cmluZyYgdGV4dEVuY29kaW5nLCBjb25zdCBLVVJMJiBmYWlsaW5nVVJMLCBjb25zdCBL
VVJMJiByZXNwb25zZVVSTCA9IEtVUkwoKSkKLSAgICAgICAgICAgIDogbV9jb250ZW50KGNvbnRl
bnQpCi0gICAgICAgICAgICAsIG1fbWltZVR5cGUobWltZVR5cGUpCisgICAgICAgIAorICAgICAg
ICBTdWJzdGl0dXRlRGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YUJ1ZmZlciwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmcsIGNvbnN0IEtV
UkwmIGZhaWxpbmdVUkwsIGNvbnN0IEtVUkwmIHJlc3BvbnNlVVJMID0gS1VSTCgpKQorICAgICAg
ICAgICAgOiBtX21pbWVUeXBlKG1pbWVUeXBlKQogICAgICAgICAgICAgLCBtX3RleHRFbmNvZGlu
Zyh0ZXh0RW5jb2RpbmcpCiAgICAgICAgICAgICAsIG1fZmFpbGluZ1VSTChmYWlsaW5nVVJMKQog
ICAgICAgICAgICAgLCBtX3Jlc3BvbnNlVVJMKHJlc3BvbnNlVVJMKQogICAgICAgICB7CisgICAg
ICAgICAgICBtX2NvbnRlbnQgPSBhZG9wdFJlZihuZXcgU3Vic3RpdHV0ZUNvbnRlbnRCdWZmZXIo
ZGF0YUJ1ZmZlcikpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdWJzdGl0dXRlRGF0
YShjb25zdCBTdHJpbmcmIGRhdGFTdHJpbmcsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IEtVUkwmIGZhaWxpbmdVUkwsIGNvbnN0IEtVUkwmIHJlc3BvbnNlVVJMID0gS1VSTCgpKQorICAg
ICAgICAgICAgOiBtX21pbWVUeXBlKG1pbWVUeXBlKQorI2lmIGRlZmluZWQoV1RGX0NQVV9CSUdf
RU5ESUFOKSB8fCBkZWZpbmVkKFdURl9DUFVfTUlERExFX0VORElBTikKKyAgICAgICAgICAgICwg
bV90ZXh0RW5jb2RpbmcoIlVURi0xNkJFIikKKyNlbHNlCisgICAgICAgICAgICAsIG1fdGV4dEVu
Y29kaW5nKCJVVEYtMTZMRSIpCisjZW5kaWYKKyAgICAgICAgICAgICwgbV9mYWlsaW5nVVJMKGZh
aWxpbmdVUkwpCisgICAgICAgICAgICAsIG1fcmVzcG9uc2VVUkwocmVzcG9uc2VVUkwpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fY29udGVudCA9IGFkb3B0UmVmKG5ldyBTdWJzdGl0dXRlQ29u
dGVudFN0cmluZyhkYXRhU3RyaW5nKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNs
YXNzIFN1YnN0aXR1dGVDb250ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8U3Vic3RpdHV0ZUNvbnRl
bnQ+IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBk
YXRhKCkgY29uc3QgPSAwOworICAgICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaXplKCkgY29u
c3QgPSAwOworICAgICAgICAgICAgdmlydHVhbCB+U3Vic3RpdHV0ZUNvbnRlbnQoKSB7fTsKKyAg
ICAgICAgfTsKIAogICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnQgIT0gMDsgfQotCi0gICAgICAgIGNvbnN0IFNoYXJlZEJ1ZmZlciogY29udGVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudC5nZXQoKTsgfQorICAgICAgICBjb25zdCBTdWJzdGl0dXRlQ29u
dGVudCogY29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudC5nZXQoKTsgfQogICAgICAg
ICBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVHlwZTsgfQog
ICAgICAgICBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dEVuY29kaW5nOyB9CiAgICAgICAgIGNvbnN0IEtVUkwmIGZhaWxpbmdVUkwoKSBjb25zdCB7IHJl
dHVybiBtX2ZhaWxpbmdVUkw7IH0KICAgICAgICAgY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwoKSBj
b25zdCB7IHJldHVybiBtX3Jlc3BvbnNlVVJMOyB9CiAgICAgICAgIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fY29udGVudDsKKyAgICAgICAgUmVmUHRyPFN1
YnN0aXR1dGVDb250ZW50PiBtX2NvbnRlbnQ7CiAgICAgICAgIFN0cmluZyBtX21pbWVUeXBlOwog
ICAgICAgICBTdHJpbmcgbV90ZXh0RW5jb2Rpbmc7CiAgICAgICAgIEtVUkwgbV9mYWlsaW5nVVJM
OwogICAgICAgICBLVVJMIG1fcmVzcG9uc2VVUkw7CisgICAgICAgIAorICAgICAgICBjbGFzcyBT
dWJzdGl0dXRlQ29udGVudEJ1ZmZlciA6IHB1YmxpYyBTdWJzdGl0dXRlQ29udGVudCB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFN1YnN0aXR1dGVDb250ZW50QnVmZmVyKFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBkYXRhQnVmZmVyKSA6IG1fZGF0YUJ1ZmZlcihkYXRhQnVmZmVyKSB7
fQorICAgICAgICAgICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YUJ1
ZmZlci0+ZGF0YSgpOyB9CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhQnVmZmVyLT5zaXplKCk7IH0KKyAgICAgICAgICAgIAorICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhQnVmZmVyOworICAgICAg
ICB9OworICAgICAgICAKKyAgICAgICAgY2xhc3MgU3Vic3RpdHV0ZUNvbnRlbnRTdHJpbmcgOiBw
dWJsaWMgU3Vic3RpdHV0ZUNvbnRlbnQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBT
dWJzdGl0dXRlQ29udGVudFN0cmluZyhjb25zdCBTdHJpbmcmIGRhdGFTdHJpbmcpIDogbV9kYXRh
U3RyaW5nKGRhdGFTdHJpbmcpIHt9CisgICAgICAgICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29u
c3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+KG1fZGF0YVN0cmluZy5j
aGFyYWN0ZXJzKCkpOyB9CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhU3RyaW5nLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsgfQorICAgICAgICAgICAg
CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBTdHJpbmcgbV9kYXRhU3RyaW5nOworICAg
ICAgICB9OworICAgICAgICAKICAgICB9OwotCiB9CiAKICNlbmRpZiAvLyBTdWJzdGl0dXRlRGF0
YV9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlzaW9uIDY1NzkxKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9LVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxNiw2ICsxODE2LDEyIEBAIGNvbnN0IEtV
UkwmIGJsYW5rVVJMKCkKICAgICByZXR1cm4gc3RhdGljQmxhbmtVUkw7CiB9CiAKK2NvbnN0IEtV
UkwmIHNyY2RvY1VSTCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChLVVJMLCBzdGF0aWNT
cmNkb2NVUkwsIChQYXJzZWRVUkxTdHJpbmcsICJhYm91dDpzcmNkb2MiKSk7CisgICAgcmV0dXJu
IHN0YXRpY1NyY2RvY1VSTDsKK30KKwogI2lmbmRlZiBOREVCVUcKIHZvaWQgS1VSTDo6cHJpbnQo
KSBjb25zdAogewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJKHJldmlzaW9uIDY1NzkxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9LVVJMLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw2ICsyNTUsNyBAQCBib29sIGVxdWFs
SWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIoY29uCiBib29sIHByb3RvY29sSG9zdEFuZFBvcnRB
cmVFcXVhbChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOwogICAgIAogY29uc3QgS1VSTCYgYmxh
bmtVUkwoKTsKK2NvbnN0IEtVUkwmIHNyY2RvY1VSTCgpOwogCiAvLyBGdW5jdGlvbnMgdG8gZG8g
VVJMIG9wZXJhdGlvbnMgb24gc3RyaW5ncy4KIC8vIFRoZXNlIGFyZSBvcGVyYXRpb25zIHRoYXQg
YXJlbid0IGZhc3RlciBvbiBhIHBhcnNlZCBVUkwuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0tV
UkxHb29nbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZS5j
cHAJKHJldmlzaW9uIDY1NzkxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA4MCw2ICsxMDgwLDEyIEBAIGNvbnN0IEtVUkwmIGJsYW5rVVJM
KCkKICAgICByZXR1cm4gc3RhdGljQmxhbmtVUkw7CiB9CiAKK2NvbnN0IEtVUkwmIHNyY2RvY1VS
TCgpCit7CisgICAgc3RhdGljIEtVUkwgc3RhdGljU3JjZG9jVVJMKFBhcnNlZFVSTFN0cmluZywg
ImFib3V0OnNyY2RvYyIpOworICAgIHJldHVybiBzdGF0aWNTcmNkb2NVUkw7Cit9CisKIGJvb2wg
cHJvdG9jb2xJcyhjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgY2hhciogcHJvdG9jb2wpCiB7CiAg
ICAgLy8gRG8gdGhlIGNvbXBhcmlzb24gd2l0aG91dCBtYWtpbmcgYSBuZXcgc3RyaW5nIG9iamVj
dC4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY1ODEwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDgtMjMgIEp1c3RpbiBTY2h1aCAg
PGpzY2h1aEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50IGlmcmFtZS5zcmNkb2MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNjgzCisKKyAgICAgICAgKiBmYXN0L2Zy
YW1lcy9pZnJhbWUtc3JjZG9jLWxvYWQtZHluYW1pYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbG9hZC1keW5hbWljLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbG9hZC1yZXBsYWNlLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1sb2Fk
LXJlcGxhY2UuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2Rv
Yy1sb2FkLXN0YXRpYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZnJhbWVz
L2lmcmFtZS1zcmNkb2MtbG9hZC1zdGF0aWMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9m
cmFtZXMvaWZyYW1lLXNyY2RvYy1uYXZpZ2F0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA4LTE5
ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFN0ZXZlIEJsb2NrLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNy
Y2RvYy1sb2FkLWR5bmFtaWMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbG9hZC1keW5hbWljLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbG9hZC1k
eW5hbWljLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorT3V0ZXIg
ZnJhbWUgYWJvdmUKKworT3V0ZXIgZnJhbWUgbWlkZGxlCisKK091dGVyIGZyYW1lIGJlbG93CitM
b2c6CistLS0tLS0tLQorRnJhbWUgZjE6IGxvY2F0aW9uID0gYWJvdXQ6c3JjZG9jCitGcmFtZSBm
MTogc3JjID0gaHR0cDovL2V4YW1wbGUuY29tLworRnJhbWUgZjE6IFBBU1MgLSBib2R5IGNvbnRl
bnQgbWF0Y2hlcyBzcmNkb2MuCitGcmFtZSBmMjogbG9jYXRpb24gPSBhYm91dDpzcmNkb2MKK0Zy
YW1lIGYyOiBzcmMgPSBbZW1wdHldCitGcmFtZSBmMjogUEFTUyAtIGJvZHkgY29udGVudCBtYXRj
aGVzIHNyY2RvYy4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2Rv
Yy1sb2FkLWR5bmFtaWMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1l
cy9pZnJhbWUtc3JjZG9jLWxvYWQtZHluYW1pYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1sb2FkLWR5bmFtaWMuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1MCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30K
Kword2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBsb2dnZXIgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgibG9nIik7CisgICAgZnVuY3Rpb24gc2V0ZnJhbWUgKGlkLCB1cmws
IGZpbmlzaCkgeworICAgICAgICB2YXIgZiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFt
ZSIpOworICAgICAgICB2YXIgc3JjZG9jQm9keSA9ICJJbm5lciBGcmFtZSAiICsgaWQKKyAgICAg
ICAgZnVuY3Rpb24gbG9nKHMpIHsKKyAgICAgICAgICAgIGxvZ2dlci5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSgiRnJhbWUgIiArIGlkICsgIjogIiArIHMpKTsKKyAgICAgICAg
ICAgIGxvZ2dlci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKKyAg
ICAgICAgfQorICAgICAgICBmLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgbG9n
KCJsb2NhdGlvbiA9ICIgKyBmLmNvbnRlbnRXaW5kb3cubG9jYXRpb24pOworICAgICAgICAgICAg
bG9nKCJzcmMgPSAiICsgKGYuc3JjLmxlbmd0aCA/IGYuc3JjIDogIltlbXB0eV0iKSk7CisgICAg
ICAgICAgICBpZiAoZi5jb250ZW50V2luZG93LmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID09IHNy
Y2RvY0JvZHkpCisgICAgICAgICAgICAgICAgbG9nKCJQQVNTIC0gYm9keSBjb250ZW50IG1hdGNo
ZXMgc3JjZG9jLiIpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9nKCJGQUlM
IC0gYm9keSBjb250ZW50IGRvZXMgbm90IG1hdGNoIHNyY2RvYy4iKQorICAgICAgICAgICAgaWYg
KGZpbmlzaCAmJiB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgICAgIGYu
c3JjZG9jID0gIjxodG1sPjxib2R5PiIgKyBzcmNkb2NCb2R5ICsgIjwvYm9keT48L2h0bWw+IjsK
KyAgICAgICAgaWYgKHVybCkKKyAgICAgICAgICAgIGYuc3JjID0gdXJsOworICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZChpZCkuYXBwZW5kQ2hpbGQoZik7CisgICAgfQorCisgICAgc2V0
ZnJhbWUoImYxIiwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKKyAgICBzZXRmcmFtZSgiZjIiLCBu
dWxsLCB0cnVlKQorfQorPC9zY3JpcHQ+Cis8aGVhZD4KKzxib2R5PgorT3V0ZXIgZnJhbWUgYWJv
dmU8YnI+Cis8ZGl2IGlkPSJmMSI+PC9kaXY+CitPdXRlciBmcmFtZSBtaWRkbGU8YnI+Cis8ZGl2
IGlkPSJmMiI+PC9kaXY+CitPdXRlciBmcmFtZSBiZWxvdzxicj4KKzxwcmUgaWQ9ImxvZyI+CitM
b2c6CistLS0tLS0tLQorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLWxvYWQtcmVwbGFjZS1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1sb2FkLXJl
cGxhY2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mcmFt
ZXMvaWZyYW1lLXNyY2RvYy1sb2FkLXJlcGxhY2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE0IEBACitPdXRlciBmcmFtZSBhYm92ZQorCitPdXRlciBmcmFtZSBtaWRkbGUK
KworT3V0ZXIgZnJhbWUgYmVsb3cKK0xvZzoKKy0tLS0tLS0tCitGcmFtZSBmMTogbG9jYXRpb24g
PSBhYm91dDpzcmNkb2MKK0ZyYW1lIGYxOiBzcmMgPSBodHRwOi8vZXhhbXBsZS5jb20vCitGcmFt
ZSBmMTogUEFTUyAtIGJvZHkgY29udGVudCBtYXRjaGVzIHNyY2RvYy4KK0ZyYW1lIGYyOiBsb2Nh
dGlvbiA9IGFib3V0OnNyY2RvYworRnJhbWUgZjI6IHNyYyA9IFtlbXB0eV0KK0ZyYW1lIGYyOiBQ
QVNTIC0gYm9keSBjb250ZW50IG1hdGNoZXMgc3JjZG9jLgorCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLWxvYWQtcmVwbGFjZS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbG9hZC1yZXBsYWNlLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLWxv
YWQtcmVwbGFjZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworfQorCit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7Cisg
ICAgdmFyIGxvZ2dlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKTsKKyAgICBmdW5j
dGlvbiBzZXRmcmFtZSAoaWQsIHVybCwgZmluaXNoKSB7CisgICAgICAgIHZhciBmID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgICAgIHZhciBzcmNkb2NCb2R5ID0gIklu
bmVyIEZyYW1lICIgKyBpZAorICAgICAgICBmdW5jdGlvbiBsb2cocykgeworICAgICAgICAgICAg
bG9nZ2VyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJGcmFtZSAiICsgaWQg
KyAiOiAiICsgcykpOworICAgICAgICAgICAgbG9nZ2VyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImJyIikpOworICAgICAgICB9CisgICAgICAgIGYub25sb2FkID0gZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICBmLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIGxvZygibG9jYXRpb24gPSAiICsgZi5jb250ZW50V2luZG93LmxvY2F0aW9uKTsKKyAgICAg
ICAgICAgICAgICBsb2coInNyYyA9ICIgKyAoZi5zcmMubGVuZ3RoID8gZi5zcmMgOiAiW2VtcHR5
XSIpKTsKKyAgICAgICAgICAgICAgICBpZiAoZi5jb250ZW50V2luZG93LmRvY3VtZW50LmJvZHku
aW5uZXJIVE1MID09IHNyY2RvY0JvZHkpCisgICAgICAgICAgICAgICAgICAgIGxvZygiUEFTUyAt
IGJvZHkgY29udGVudCBtYXRjaGVzIHNyY2RvYy4iKQorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgbG9nKCJGQUlMIC0gYm9keSBjb250ZW50IGRvZXMgbm90IG1hdGNo
IHNyY2RvYy4iKQorCSAgICAgICAgICAgIGlmIChmaW5pc2ggJiYgd2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorCSAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmLnNyY2RvYyA9ICI8aHRtbD48Ym9k
eT4iICsgc3JjZG9jQm9keSArICI8L2JvZHk+PC9odG1sPiI7CisgICAgICAgICAgICBpZiAodXJs
KQorICAgICAgICAgICAgICAgIGYuc3JjID0gdXJsOworICAgICAgICB9CisgICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKGlkKS5hcHBlbmRDaGlsZChmKTsKKyAgICB9CisKKyAgICBzZXRm
cmFtZSgiZjEiLCAiaHR0cDovL2V4YW1wbGUuY29tLyIpOworICAgIHNldGZyYW1lKCJmMiIsIG51
bGwsIHRydWUpOworfQorPC9zY3JpcHQ+Cis8aGVhZD4KKzxib2R5PgorT3V0ZXIgZnJhbWUgYWJv
dmU8YnI+Cis8ZGl2IGlkPSJmMSI+PC9kaXY+CitPdXRlciBmcmFtZSBtaWRkbGU8YnI+Cis8ZGl2
IGlkPSJmMiI+PC9kaXY+CitPdXRlciBmcmFtZSBiZWxvdzxicj4KKzxwcmUgaWQ9ImxvZyI+CitM
b2c6CistLS0tLS0tLQorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLWxvYWQtc3RhdGljLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLWxvYWQtc3Rh
dGljLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZnJhbWVz
L2lmcmFtZS1zcmNkb2MtbG9hZC1zdGF0aWMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE0IEBACitPdXRlciBmcmFtZSBhYm92ZQorCitPdXRlciBmcmFtZSBtaWRkbGUKKwor
T3V0ZXIgZnJhbWUgYmVsb3cKK0xvZzoKKy0tLS0tLS0tCitGcmFtZSBmMTogbG9jYXRpb24gPSBh
Ym91dDpzcmNkb2MKK0ZyYW1lIGYxOiBzcmMgPSBodHRwOi8vZXhhbXBsZS5jb20vCitGcmFtZSBm
MTogUEFTUyAtIGJvZHkgY29udGVudCBtYXRjaGVzIHNyY2RvYy4KK0ZyYW1lIGYyOiBsb2NhdGlv
biA9IGFib3V0OnNyY2RvYworRnJhbWUgZjI6IHNyYyA9IFtlbXB0eV0KK0ZyYW1lIGYyOiBQQVNT
IC0gYm9keSBjb250ZW50IG1hdGNoZXMgc3JjZG9jLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLWxvYWQtc3RhdGljLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1sb2FkLXN0YXRpYy5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1sb2FkLXN0
YXRpYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2Fp
dFVudGlsRG9uZSgpOworfQorCitmdW5jdGlvbiBsb2dmcmFtZSAoaWQsIGZpbmlzaCkgeworCXZh
ciBsb2dnZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nIik7CisgICAgdmFyIHNyY2Rv
Y0JvZHkgPSAiSW5uZXIgRnJhbWUgIiArIGlkCisgICAgZnVuY3Rpb24gbG9nKHMpIHsKKyAgICAg
ICAgbG9nZ2VyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJGcmFtZSAiICsg
aWQgKyAiOiAiICsgcykpOworICAgICAgICBsb2dnZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiYnIiKSk7CisgICAgfQorICAgIHZhciBmID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoaWQpOworICAgIGxvZygibG9jYXRpb24gPSAiICsgZi5jb250ZW50V2luZG93LmxvY2F0
aW9uKTsKKyAgICBsb2coInNyYyA9ICIgKyAoZi5zcmMubGVuZ3RoID8gZi5zcmMgOiAiW2VtcHR5
XSIpKTsKKyAgICBpZiAoZi5jb250ZW50V2luZG93LmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID09
IHNyY2RvY0JvZHkpCisgICAgICAgIGxvZygiUEFTUyAtIGJvZHkgY29udGVudCBtYXRjaGVzIHNy
Y2RvYy4iKQorICAgIGVsc2UKKyAgICAgICAgbG9nKCJGQUlMIC0gYm9keSBjb250ZW50IGRvZXMg
bm90IG1hdGNoIHNyY2RvYy4iKQorICAgIGlmIChmaW5pc2ggJiYgd2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9
CisKKzwvc2NyaXB0PgorPGhlYWQ+Cis8Ym9keT4KK091dGVyIGZyYW1lIGFib3ZlPGJyPgorPGlm
cmFtZSBzcmNkb2M9IjxodG1sPjxib2R5PklubmVyIEZyYW1lIGYxPC9ib2R5PjwvaHRtbD4iIHNy
Yz0iaHR0cDovL2V4YW1wbGUuY29tLyIgaWQ9ImYxIiBvbmxvYWQ9ImxvZ2ZyYW1lKCdmMScpIj48
L2lmcmFtZT48YnI+CitPdXRlciBmcmFtZSBtaWRkbGU8YnI+Cis8aWZyYW1lIHNyY2RvYz0iPGh0
bWw+PGJvZHk+SW5uZXIgRnJhbWUgZjI8L2JvZHk+PC9odG1sPiIgaWQ9ImYyIiBvbmxvYWQ9Imxv
Z2ZyYW1lKCdmMicsdHJ1ZSkiPjwvaWZyYW1lPjxicj4KK091dGVyIGZyYW1lIGJlbG93PGJyPgor
PHByZSBpZD0ibG9nIj4KK0xvZzoKKy0tLS0tLS0tCis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbmF2aWdhdGlvbi5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2Mt
bmF2aWdhdGlvbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMv
aWZyYW1lLXNyY2RvYy1uYXZpZ2F0aW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkg
QEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGNoaWxkRnJhbWVXYXNOYXZpZ2F0ZWQoKQoreworICAg
IC8vIENoZWNrIHRoYXQgdGhlIGNoaWxkIGZyYW1lIHdhcyB1bmFibGUgdG8gbG9hZCBhIHBsdWdp
biwgc2luY2UgaXRzIHBhcmVudCBpcyBzYW5kYm94ZWQuCisgICAgc2hvdWxkQmVUcnVlKCIoc2Vs
Zi5zYW5kYm94ZWRGcmFtZS5mcmFtZVdpdGhQbHVnaW4uZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3BsdWdpbicpLmRlc3Ryb3lTdHJlYW0pID09IHVuZGVmaW5lZCIpOworICAgIAorICAgIC8vIENo
ZWNrIGEgbm9uLXNhbmRib3hlZCBmcmFtZSBhcyB3ZWxsLCB0byBlbnN1cmUgdGhhdCB0aGUgcGx1
Z2luIGlzIGRpc2FibGVkIGJ5IHNhbmRib3hpbmcKKyAgICAvLyBhbmQgbm90IHNvbWUgb3RoZXIg
ZmFpbHVyZQorICAgIHNob3VsZEJlVHJ1ZSgiKHNlbGYuZnJhbWVXaXRoUGx1Z2luLmRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdwbHVnaW4nKS5kZXN0cm95U3RyZWFtKSAhPSB1bmRlZmluZWQiKTsK
KworICAgIC8vIFdoZW4gdGhlIGNoaWxkIGZyYW1lIChncmFuZGNoaWxkIG9mIHRoZSBtYWluIHdp
bmRvdykgaGFzIGJlZW4gbmF2aWdhdGVkLAorICAgIC8vIG1ha2UgdGhlIHNhbmRib3hlZCBmcmFt
ZSBuYXZpZ2F0ZSBpdHNlbGYKKyAgICBzZWxmLnNhbmRib3hlZEZyYW1lLmxvY2F0aW9uLmFzc2ln
bigiamF2YXNjcmlwdDogdG9wLnNhbmRib3hXYXNOYXZpZ2F0ZWQoKTsiKTsKK30KKworZnVuY3Rp
b24gc2FuZGJveFdhc05hdmlnYXRlZCgpCit7CisgICAgc2hvdWxkQmUoImRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdzYW5kYm94ZWRGcmFtZUlkJykuc2FuZGJveCIsICInYWxsb3ctc2NyaXB0cyBh
bGxvdy1zYW1lLW9yaWdpbiciKTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworCisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgd2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxi
b2R5PgorICAgIDxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorICAgIDxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorCisgICAgPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUt
b3JpZ2luIgorICAgICAgICAgICAgbmFtZT0ic2FuZGJveGVkRnJhbWUiCisgICAgICAgICAgICBp
ZD0ic2FuZGJveGVkRnJhbWVJZCIKKyAgICAgICAgICAgIHNyY2RvYz0iCisJCQk8aHRtbD4KKwkJ
CTxoZWFkPgorCQkJPHNjcmlwdD4KKwkJCWZ1bmN0aW9uIG1vZGlmeSgpCisJCQl7CisJCQkgICAg
c2VsZi5uYXZpZ2F0ZWQubG9jYXRpb24uYXNzaWduKCZxdW90O2phdmFzY3JpcHQ6IHRvcC5jaGls
ZEZyYW1lV2FzTmF2aWdhdGVkKCk7JnF1b3Q7KTsKKwkJCX0KKwkJCTwvc2NyaXB0PgorCQkJPC9o
ZWFkPgorCQkJPGJvZHkgb25sb2FkPSZxdW90O21vZGlmeSgpOyZxdW90Oz4KKwkJCSAgICA8aWZy
YW1lIG5hbWU9JnF1b3Q7bmF2aWdhdGVkJnF1b3Q7CisJCQkgICAgICAgICAgICBzcmM9JnF1b3Q7
c2FuZGJveGVkLWlmcmFtZS1uYXZpZ2F0aW9uLW5hdmlnYXRlZC5odG1sJnF1b3Q7PgorCQkJICAg
IDwvaWZyYW1lPgorCQkJICAgIDxpZnJhbWUgbmFtZT0mcXVvdDtmcmFtZVdpdGhQbHVnaW4mcXVv
dDsKKwkJCSAgICAgICAgICAgIHNyYz0mcXVvdDtzYW5kYm94ZWQtaWZyYW1lLXBsdWdpbnMtZnJh
bWUtb2JqZWN0Lmh0bWwmcXVvdDs+CisJCQkgICAgPC9pZnJhbWU+CisJCQk8L2JvZHk+CisJCQk8
L2h0bWw+CisiPgorICAgIDwvaWZyYW1lPgorCisgICAgPGlmcmFtZSBuYW1lPSJmcmFtZVdpdGhQ
bHVnaW4iCisgICAgICAgICAgICBzcmM9InJlc291cmNlcy9zYW5kYm94ZWQtaWZyYW1lLXBsdWdp
bnMtZnJhbWUtb2JqZWN0Lmh0bWwiPgorICAgIDwvaWZyYW1lPgorCisgICAgPHNjcmlwdD4KKyAg
ICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1l
IENBTiBuYXZpZ2F0ZSBib3RoIGl0c2VsZiBhbmQgYSBjaGlsZCBpbiB0aGUgZnJhbWUgdHJlZS4g
IgorICAgICAgICAgICAgICAgICsgIkl0IGFsc28gdmVyaWZpZXMgdGhhdCB0aGUgc2FuZGJveCBh
dHRyaWJ1dGUgcmVtYWlucyBpbnRhY3QgYWZ0ZXIgYSBmcmFtZSBoYXMgYmVlbiBuYXZpZ2F0ZWQs
ICIKKyAgICAgICAgICAgICAgICArICJhbmQgdGhhdCBzYW5kYm94IGF0dHJpYnV0ZXMgYXJlIHBy
b3BhZ2F0ZWQgdGhyb3VnaCB0aGUgZnJhbWUgaGllcmFyY2h5LiIpOworICAgIHZhciBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIDwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65877</attachid>
            <date>2010-08-29 22:23:40 -0700</date>
            <delta_ts>2010-09-11 17:46:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43683-20100829222339.patch</filename>
            <type>text/plain</type>
            <size>31308</size>
            <attacher name="Justin Schuh">jschuh</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjM1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTIgQEAKKzIwMTAtMDgtMjkgIEp1c3RpbiBTY2h1aCAgPGpzY2h1aEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50IGlmcmFtZS5zcmNkb2MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQzNjgzCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZnJhbWVzL2lmcmFt
ZS1zcmNkb2MtbG9hZC1keW5hbWljLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZnJhbWVzL2lm
cmFtZS1zcmNkb2MtbG9hZC1yZXBsYWNlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZnJhbWVz
L2lmcmFtZS1zcmNkb2MtbG9hZC1zdGF0aWMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9mcmFt
ZXMvaWZyYW1lLXNyY2RvYy1uYXZpZ2F0aW9uLmh0bWwKKworICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y29tcGxldGVVUkwpOgorICAgICAg
ICAqIGh0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1l
RWxlbWVudEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1l
bnRCYXNlOjpsb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFz
ZTo6c2V0TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6
OnNldExvY2F0aW9uVG9TcmNkb2MpOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJh
c2UuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnNyY2RvY1N1YnN0aXR1dGVEYXRhKToK
KyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwv
SFRNTElGcmFtZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxJRnJhbWVFbGVt
ZW50LmlkbDoKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRXcml0ZXI6OmNyZWF0ZURlY29kZXJJZk5lZWRlZCk6CisgICAgICAg
ICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Ojpsb2FkV2l0aE5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICAqIGxvYWRlci9TdWJmcmFtZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJmcmFtZUxvYWRlcjo6bG9hZFN1YmZyYW1l
KToKKyAgICAgICAgKiBsb2FkZXIvU3Vic3RpdHV0ZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlN1YnN0aXR1dGVEYXRhOjpTdWJzdGl0dXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdWJz
dGl0dXRlRGF0YTo6U3Vic3RpdHV0ZUNvbnRlbnQ6On5TdWJzdGl0dXRlQ29udGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdWJzdGl0dXRlRGF0YTo6Y29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdWJzdGl0dXRlRGF0YTo6U3Vic3RpdHV0ZUNvbnRlbnRCdWZmZXI6OlN1YnN0aXR1dGVDb250
ZW50QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN1YnN0aXR1dGVEYXRhOjpTdWJzdGl0dXRl
Q29udGVudEJ1ZmZlcjo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdWJzdGl0dXRlRGF0YTo6
U3Vic3RpdHV0ZUNvbnRlbnRCdWZmZXI6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U3Vic3Rp
dHV0ZURhdGE6OlN1YnN0aXR1dGVDb250ZW50U3RyaW5nOjpTdWJzdGl0dXRlQ29udGVudFN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTdWJzdGl0dXRlRGF0YTo6U3Vic3RpdHV0ZUNvbnRlbnRT
dHJpbmc6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGE6OlN1YnN0aXR1
dGVDb250ZW50U3RyaW5nOjpzaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNyY2RvY1VSTCk6CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL0tVUkxHb29nbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3Jj
ZG9jVVJMKToKKwogMjAxMC0wOC0yOSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZp
c2lvbiA2NjM0MikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzc4OSw3ICszNzg5LDcgQEAgS1VSTCBEb2N1bWVudDo6Y29tcGxldGVVUkwoY29uc3QgU3Ry
aW5nJgogICAgIC8vIFNlZSBhbHNvIFtDU1NdU3R5bGVTaGVldDo6Y29tcGxldGVVUkwoY29uc3Qg
U3RyaW5nJikKICAgICBpZiAodXJsLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gS1VSTCgpOwot
ICAgIGNvbnN0IEtVUkwmIGJhc2VVUkwgPSAoKG1fYmFzZVVSTC5pc0VtcHR5KCkgfHwgbV9iYXNl
VVJMID09IGJsYW5rVVJMKCkpICYmIHBhcmVudERvY3VtZW50KCkpID8gcGFyZW50RG9jdW1lbnQo
KS0+YmFzZVVSTCgpIDogbV9iYXNlVVJMOworICAgIGNvbnN0IEtVUkwmIGJhc2VVUkwgPSAoKG1f
YmFzZVVSTC5pc0VtcHR5KCkgfHwgbV9iYXNlVVJMID09IGJsYW5rVVJMKCkgfHwgbV9iYXNlVVJM
ID09IHNyY2RvY1VSTCgpKSAmJiBwYXJlbnREb2N1bWVudCgpKSA/IHBhcmVudERvY3VtZW50KCkt
PmJhc2VVUkwoKSA6IG1fYmFzZVVSTDsKICAgICBpZiAoIW1fZGVjb2RlcikKICAgICAgICAgcmV0
dXJuIEtVUkwoYmFzZVVSTCwgdXJsKTsKICAgICByZXR1cm4gS1VSTChiYXNlVVJMLCB1cmwsIG1f
ZGVjb2Rlci0+ZW5jb2RpbmcoKSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5h
bWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4J
KHJldmlzaW9uIDY2MzQyKQorKysgV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgko
d29ya2luZyBjb3B5KQpAQCAtMjYwLDYgKzI2MCw3IEBAIHNwYW4KIHNwZWVjaAogc3BlbGxjaGVj
awogc3JjCitzcmNkb2MKIHN0YW5kYnkKIHN0YXJ0CiBzdGVwCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
RnJhbWVFbGVtZW50QmFzZS5jcHAJKHJldmlzaW9uIDY2MzQyKQorKysgV2ViQ29yZS9odG1sL0hU
TUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDkgKzExMSwxMCBA
QCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpvcGVuVVJMKGJvb2wgCiAKIHZvaWQgSFRNTEZy
YW1lRWxlbWVudEJhc2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsK
LSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHNyY0F0dHIpCi0gICAgICAgIHNldExvY2F0aW9uKGRl
cHJlY2F0ZWRQYXJzZVVSTChhdHRyLT52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoaXNJZEF0dHJp
YnV0ZU5hbWUoYXR0ci0+bmFtZSgpKSkgeworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gc3JjQXR0
cikgeworICAgICAgICBpZiAoIWhhc1RhZ05hbWUoaWZyYW1lVGFnKSB8fCBnZXRBdHRyaWJ1dGUo
c3JjZG9jQXR0cikuaXNOdWxsKCkpCisgICAgICAgICAgICBzZXRMb2NhdGlvbihkZXByZWNhdGVk
UGFyc2VVUkwoYXR0ci0+dmFsdWUoKSkpOworICAgIH0gZWxzZSBpZiAoaXNJZEF0dHJpYnV0ZU5h
bWUoYXR0ci0+bmFtZSgpKSkgewogICAgICAgICAvLyBJbXBvcnRhbnQgdG8gY2FsbCB0aHJvdWdo
IHRvIGJhc2UgZm9yIHRoZSBpZCBhdHRyaWJ1dGUgc28gdGhlIGhhc0lEIGJpdCBnZXRzIHNldC4K
ICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKICAgICAgICAgbV9mcmFtZU5hbWUgPSBhdHRyLT52YWx1ZSgpOwpAQCAtMjE5LDYgKzIyMCw4
IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmF0dGFjaCgpCiAKIEtVUkwgSFRNTEZyYW1l
RWxlbWVudEJhc2U6OmxvY2F0aW9uKCkgY29uc3QKIHsKKyAgICBpZiAoaGFzVGFnTmFtZShpZnJh
bWVUYWcpICYmICFnZXRBdHRyaWJ1dGUoc3JjZG9jQXR0cikuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gc3JjZG9jVVJMKCk7CiAgICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdl
dEF0dHJpYnV0ZShzcmNBdHRyKSk7CiB9CiAKQEAgLTIyOCwxMSArMjMxLDIyIEBAIHZvaWQgSFRN
TEZyYW1lRWxlbWVudEJhc2U6OnNldExvY2F0aW9uKGMKICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0
dGluZ3MtPm5lZWRzQWNyb2JhdEZyYW1lUmVsb2FkaW5nUXVpcmsoKSAmJiBtX1VSTCA9PSBzdHIp
CiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChzdHIgPT0gc3JjZG9jVVJMKCkuc3RyaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKICAgICBtX1VSTCA9IEF0b21pY1N0cmluZyhzdHIpOwog
CiAgICAgaWYgKGluRG9jdW1lbnQoKSkKICAgICAgICAgb3BlblVSTChmYWxzZSwgZmFsc2UpOwog
fQorIAordm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0TG9jYXRpb25Ub1NyY2RvYygpCit7
CisgICAgbV9VUkwgPSBzcmNkb2NVUkwoKS5zdHJpbmcoKTsKKworICAgIGlmIChpbkRvY3VtZW50
KCkpCisgICAgICAgIG9wZW5VUkwoZmFsc2UsIGZhbHNlKTsKK30KIAogYm9vbCBIVE1MRnJhbWVF
bGVtZW50QmFzZTo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEZyYW1lRWxlbWVudEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZy
YW1lRWxlbWVudEJhc2UuaAkocmV2aXNpb24gNjYzNDIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZy
YW1lRWxlbWVudEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQCBjbGFzcyBI
VE1MRnJhbWVFbGVtZW50QmFzZSA6IHB1YmxpYyBIVE1MCiBwdWJsaWM6CiAgICAgS1VSTCBsb2Nh
dGlvbigpIGNvbnN0OwogICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgU3RyaW5nJik7CisgICAg
dm9pZCBzZXRMb2NhdGlvblRvU3JjZG9jKCk7CiAKICAgICB2aXJ0dWFsIFNjcm9sbGJhck1vZGUg
c2Nyb2xsaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nOyB9CiAgICAgCkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAkocmV2aXNpb24gNjYzNDIpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjEsOSArMjEsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkRP
TVdpbmRvdy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
KyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJTdWJzdGl0dXRlRGF0YS5oIgogCiAj
aWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCkBAIC04OCw0ICs5MSwx
NCBAQCBTVkdEb2N1bWVudCogSFRNTEZyYW1lT3duZXJFbGVtZW50OjpnZXRTCiB9CiAjZW5kaWYK
IAorU3Vic3RpdHV0ZURhdGEgSFRNTEZyYW1lT3duZXJFbGVtZW50OjpzcmNkb2NTdWJzdGl0dXRl
RGF0YShjb25zdCBLVVJMJiB1cmwpIGNvbnN0Cit7CisgICAgaWYgKHVybCA9PSBzcmNkb2NVUkwo
KSAmJiBoYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFnKSkgeworICAgICAgICBjb25zdCBT
dHJpbmcgc3JjZG9jID0gZ2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjZG9jQXR0cik7CisgICAg
ICAgIGlmICghc3JjZG9jLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFN1YnN0aXR1dGVE
YXRhKHNyY2RvYywgZG9jdW1lbnQoKS0+aXNYSFRNTERvY3VtZW50KCkgPyAidGV4dC94bWwiIDog
InRleHQvaHRtbCIsIEtVUkwoKSwgdXJsKTsKKyAgICB9CisgICAgcmV0dXJuIFN1YnN0aXR1dGVE
YXRhKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MRnJhbWVPd25lckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZy
YW1lT3duZXJFbGVtZW50LmgJKHJldmlzaW9uIDY2MzQyKQorKysgV2ViQ29yZS9odG1sL0hUTUxG
cmFtZU93bmVyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRE9NV2luZG93OwogY2xhc3MgRnJhbWU7CitjbGFzcyBT
dWJzdGl0dXRlRGF0YTsKIAogI2lmIEVOQUJMRShTVkcpCiBjbGFzcyBTVkdEb2N1bWVudDsKQEAg
LTQ4LDYgKzQ5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgU2Nyb2xsYmFyTW9kZSBzY3JvbGxp
bmdNb2RlKCkgY29uc3QgeyByZXR1cm4gU2Nyb2xsYmFyQXV0bzsgfQogCiAgICAgU2FuZGJveEZs
YWdzIHNhbmRib3hGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fc2FuZGJveEZsYWdzOyB9CisgICAg
CisgICAgU3Vic3RpdHV0ZURhdGEgc3JjZG9jU3Vic3RpdHV0ZURhdGEoY29uc3QgS1VSTCYpIGNv
bnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElG
cmFtZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxl
bWVudC5jcHAJKHJldmlzaW9uIDY2MzQyKQorKysgV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNywxOCBAQCB2b2lkIEhUTUxJRnJh
bWVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAgICAgICAgIGlmICghYXR0ci0+aXNOdWxsKCkg
JiYgIWF0dHItPnZhbHVlKCkudG9JbnQoKSkKICAgICAgICAgICAgIC8vIEFkZCBhIHJ1bGUgdGhh
dCBudWxscyBvdXQgb3VyIGJvcmRlciB3aWR0aC4KICAgICAgICAgICAgIGFkZENTU0xlbmd0aChh
dHRyLCBDU1NQcm9wZXJ0eUJvcmRlcldpZHRoLCAiMCIpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IHNyY2RvY0F0dHIpIHsKKyAgICAgICAgLy8gTmF2aWdhdGUgdXNpbmcgQHNyYyBp
ZiBAc3JjZG9jIGlzIGdldHRpbmcgY2xlYXJlZC4KKyAgICAgICAgaWYgKGF0dHItPmlzTnVsbCgp
KQorICAgICAgICAgICAgc2V0TG9jYXRpb24oZ2V0QXR0cmlidXRlKHNyY0F0dHIpKTsKKyAgICAg
ICAgZWxzZSB7CisjaWYgRU5BQkxFKFNBTkRCT1gpCisgICAgICAgICAgICBTYW5kYm94RmxhZ3Mg
ZmxhZ3MgPSBzYW5kYm94RmxhZ3MoKTsKKyAgICAgICAgICAgIGlmIChmbGFncyA9PSBTYW5kYm94
Tm9uZSkKKyAgICAgICAgICAgICAgICBzZXRTYW5kYm94RmxhZ3MoU2FuZGJveEFsbCk7CisjZW5k
aWYKKyAgICAgICAgICAgIHNldExvY2F0aW9uVG9TcmNkb2MoKTsKKyAgICAgICAgfQogICAgIH0K
ICNpZiBFTkFCTEUoU0FOREJPWCkKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc2FuZGJv
eEF0dHIpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5pZGwJKHJldmlzaW9uIDY2MzQy
KQorKysgV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVj
dF0gRE9NU3RyaW5nIHNjcm9sbGluZzsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0LCBVUkxd
IERPTVN0cmluZyBzcmM7CiAgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIHdp
ZHRoOworICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBzcmNkb2M7CiAKICAg
ICAgICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIFtDaGVja0ZyYW1lU2VjdXJpdHldIERvY3VtZW50IGNvbnRlbnREb2N1bWVudDsKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAJKHJldmlzaW9uIDY2MzQyKQorKysgV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4
IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
clN0YXRlTWFjaGluZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxG
cmFtZU93bmVyRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlBs
YWNlaG9sZGVyRG9jdW1lbnQuaCIKICNpbmNsdWRlICJQbHVnaW5Eb2N1bWVudC5oIgogI2luY2x1
ZGUgIlJhd0RhdGFEb2N1bWVudFBhcnNlci5oIgpAQCAtMTQ4LDExICsxNTAsMTkgQEAgdm9pZCBE
b2N1bWVudFdyaXRlcjo6YmVnaW4oY29uc3QgS1VSTCYgdQogVGV4dFJlc291cmNlRGVjb2Rlciog
RG9jdW1lbnRXcml0ZXI6OmNyZWF0ZURlY29kZXJJZk5lZWRlZCgpCiB7CiAgICAgaWYgKCFtX2Rl
Y29kZXIpIHsKKyAgICAgICAgRnJhbWUqIHJlYWxQYXJlbnRGcmFtZSA9IG1fZnJhbWUtPnRyZWUo
KS0+cGFyZW50KCk7CisgICAgICAgIGlmIChyZWFsUGFyZW50RnJhbWUpIHsKKyAgICAgICAgICAg
IC8vIFdhbGsgYSBzcmNkb2MgaGllcmFyY2h5IHRvIGEgcGFyZW50IHdpdGggYSByZWFsIGVuY29k
aW5nCisgICAgICAgICAgICBjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gcmVh
bFBhcmVudEZyYW1lLT5vd25lckVsZW1lbnQoKTsKKyAgICAgICAgICAgIHdoaWxlIChvd25lciAm
JiBvd25lci0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZVRhZykgJiYgb3duZXItPmhhc0F0
dHJpYnV0ZShIVE1MTmFtZXM6OnNyY2RvY0F0dHIpKSB7CisgICAgICAgICAgICAgICAgcmVhbFBh
cmVudEZyYW1lID0gcmVhbFBhcmVudEZyYW1lLT50cmVlKCktPnBhcmVudCgpOworICAgICAgICAg
ICAgICAgIG93bmVyID0gcmVhbFBhcmVudEZyYW1lID8gcmVhbFBhcmVudEZyYW1lLT5vd25lckVs
ZW1lbnQoKSA6IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgaWYgKFNldHRp
bmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCkpIHsKICAgICAgICAgICAgIG1fZGVj
b2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZShtX21pbWVUeXBlLAogICAgICAgICAg
ICAgICAgIHNldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpLAogICAgICAgICAgICAg
ICAgIHNldHRpbmdzLT51c2VzRW5jb2RpbmdEZXRlY3RvcigpKTsKLSAgICAgICAgICAgIEZyYW1l
KiBwYXJlbnRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7CiAgICAgICAgICAgICAv
LyBTZXQgdGhlIGhpbnQgZW5jb2RpbmcgdG8gdGhlIHBhcmVudCBmcmFtZSBlbmNvZGluZyBvbmx5
IGlmCiAgICAgICAgICAgICAvLyB0aGUgcGFyZW50IGFuZCB0aGUgY3VycmVudCBmcmFtZXMgc2hh
cmUgdGhlIHNlY3VyaXR5IG9yaWdpbi4KICAgICAgICAgICAgIC8vIFdlIGltcG9zZSB0aGlzIGNv
bmRpdGlvbiBiZWNhdXNlIHNvbWVib2R5IGNhbiBtYWtlIGEgY2hpbGQgZnJhbWUgCkBAIC0xNjIs
MTQgKzE3MiwxMyBAQCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBEb2N1bWVudFdyaXRlcjo6Y3JlCiAg
ICAgICAgICAgICAvLyBhbiBhdHRhY2sgdmVjdG9yLgogICAgICAgICAgICAgLy8gRklYTUU6IFRo
aXMgbWlnaHQgYmUgdG9vIGNhdXRpb3VzIGZvciBub24tN2JpdC1lbmNvZGluZ3MgYW5kCiAgICAg
ICAgICAgICAvLyB3ZSBtYXkgY29uc2lkZXIgcmVsYXhpbmcgdGhpcyBsYXRlciBhZnRlciB0ZXN0
aW5nLgotICAgICAgICAgICAgaWYgKGNhblJlZmVyVG9QYXJlbnRGcmFtZUVuY29kaW5nKG1fZnJh
bWUsIHBhcmVudEZyYW1lKSkKLSAgICAgICAgICAgICAgICBtX2RlY29kZXItPnNldEhpbnRFbmNv
ZGluZyhwYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpKTsKKyAgICAgICAgICAgIGlm
IChjYW5SZWZlclRvUGFyZW50RnJhbWVFbmNvZGluZyhtX2ZyYW1lLCByZWFsUGFyZW50RnJhbWUp
KQorICAgICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0SGludEVuY29kaW5nKHJlYWxQYXJlbnRG
cmFtZS0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUobV9taW1lVHlwZSwgU3Ry
aW5nKCkpOwotICAgICAgICBGcmFtZSogcGFyZW50RnJhbWUgPSBtX2ZyYW1lLT50cmVlKCktPnBh
cmVudCgpOwogICAgICAgICBpZiAobV9lbmNvZGluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IGlmIChjYW5SZWZlclRvUGFyZW50RnJhbWVFbmNvZGluZyhtX2ZyYW1lLCBwYXJlbnRGcmFtZSkp
Ci0gICAgICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhwYXJlbnRGcmFtZS0+ZG9j
dW1lbnQoKS0+aW5wdXRFbmNvZGluZygpLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zy
b21QYXJlbnRGcmFtZSk7CisgICAgICAgICAgICBpZiAoY2FuUmVmZXJUb1BhcmVudEZyYW1lRW5j
b2RpbmcobV9mcmFtZSwgcmVhbFBhcmVudEZyYW1lKSkKKyAgICAgICAgICAgICAgICBtX2RlY29k
ZXItPnNldEVuY29kaW5nKHJlYWxQYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+aW5wdXRFbmNvZGlu
ZygpLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZSk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2RlY29kZXItPnNldEVuY29kaW5nKG1fZW5jb2Rp
bmcsCiAgICAgICAgICAgICAgICAgbV9lbmNvZGluZ1dhc0Nob3NlbkJ5VXNlciA/IFRleHRSZXNv
dXJjZURlY29kZXI6OlVzZXJDaG9zZW5FbmNvZGluZyA6IFRleHRSZXNvdXJjZURlY29kZXI6OkVu
Y29kaW5nRnJvbUhUVFBIZWFkZXIpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNp
b24gNjYzNDIpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1OSwxMSArMTU5LDYgQEAgc3RhdGljIGludCBudW1SZXF1ZXN0cyhEb2N1bWVudCog
ZG9jdW1lbgogICAgIHJldHVybiBkb2N1bWVudC0+ZG9jTG9hZGVyKCktPnJlcXVlc3RDb3VudCgp
OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgY2FuUmVmZXJUb1BhcmVudEZyYW1lRW5jb2Rpbmco
Y29uc3QgRnJhbWUqIGZyYW1lLCBjb25zdCBGcmFtZSogcGFyZW50RnJhbWUpIAotewotICAgIHJl
dHVybiBwYXJlbnRGcmFtZSAmJiBwYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmln
aW4oKS0+Y2FuQWNjZXNzKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKLX0K
LQogLy8gVGhpcyBpcyBub3QgaW4gdGhlIEZyYW1lTG9hZGVyIGNsYXNzIHRvIGVtcGhhc2l6ZSB0
aGF0IGl0IGRvZXMgbm90IGRlcGVuZCBvbgogLy8gcHJpdmF0ZSBGcmFtZUxvYWRlciBkYXRhLCBh
bmQgdG8gYXZvaWQgaW5jcmVhc2luZyB0aGUgbnVtYmVyIG9mIHB1YmxpYyBmdW5jdGlvbnMKIC8v
IHdpdGggYWNjZXNzIHRvIHByaXZhdGUgZGF0YS4gIFNpbmNlIG9ubHkgdGhpcyAuY3BwIGZpbGUg
bmVlZHMgaXQsIG1ha2luZyBpdApAQCAtMTM5NCw3ICsxMzg5LDggQEAgdm9pZCBGcmFtZUxvYWRl
cjo6bG9hZChjb25zdCBSZXNvdXJjZVJlcQogCiB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkV2l0aE5h
dmlnYXRpb25BY3Rpb24oY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBOYXZp
Z2F0aW9uQWN0aW9uJiBhY3Rpb24sIGJvb2wgbG9ja0hpc3RvcnksIEZyYW1lTG9hZFR5cGUgdHlw
ZSwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSkKIHsKLSAgICBSZWZQdHI8RG9jdW1l
bnRMb2FkZXI+IGxvYWRlciA9IG1fY2xpZW50LT5jcmVhdGVEb2N1bWVudExvYWRlcihyZXF1ZXN0
LCBTdWJzdGl0dXRlRGF0YSgpKTsKKyAgICBTdWJzdGl0dXRlRGF0YSBzdWJzdGl0dXRlRGF0YSA9
IG1fZnJhbWUtPm93bmVyRWxlbWVudCgpID8gbV9mcmFtZS0+b3duZXJFbGVtZW50KCktPnNyY2Rv
Y1N1YnN0aXR1dGVEYXRhKHJlcXVlc3QudXJsKCkpIDogU3Vic3RpdHV0ZURhdGEoKTsKKyAgICBS
ZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGxvYWRlciA9IG1fY2xpZW50LT5jcmVhdGVEb2N1bWVudExv
YWRlcihyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSk7CiAgICAgaWYgKGxvY2tIaXN0b3J5ICYmIG1f
ZG9jdW1lbnRMb2FkZXIpCiAgICAgICAgIGxvYWRlci0+c2V0Q2xpZW50UmVkaXJlY3RTb3VyY2VG
b3JIaXN0b3J5KG1fZG9jdW1lbnRMb2FkZXItPmRpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeSgp
ID8gbV9kb2N1bWVudExvYWRlci0+dXJsRm9ySGlzdG9yeSgpIDogbV9kb2N1bWVudExvYWRlci0+
Y2xpZW50UmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5KCkpOwogCkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9TdWJmcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvU3ViZnJh
bWVMb2FkZXIuY3BwCShyZXZpc2lvbiA2NjM0MikKKysrIFdlYkNvcmUvbG9hZGVyL1N1YmZyYW1l
TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUyLDcgKzI1Miw3IEBAIEZyYW1lKiBTdWJm
cmFtZUxvYWRlcjo6bG9hZFN1YmZyYW1lKEhUTUwKICAgICAgICAgbWFyZ2luSGVpZ2h0ID0gby0+
Z2V0TWFyZ2luSGVpZ2h0KCk7CiAgICAgfQogCi0gICAgaWYgKCFTZWN1cml0eU9yaWdpbjo6Y2Fu
TG9hZCh1cmwsIHJlZmVycmVyLCAwKSkgeworICAgIGlmICghU2VjdXJpdHlPcmlnaW46OmNhbkxv
YWQodXJsLCByZWZlcnJlciwgb3duZXJFbGVtZW50LT5kb2N1bWVudCgpKSkgewogICAgICAgICBG
cmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKG1fZnJhbWUsIHVybC5zdHJpbmcoKSk7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YnN0aXR1
dGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvU3Vic3RpdHV0ZURhdGEuaAko
cmV2aXNpb24gNjYzNDIpCisrKyBXZWJDb3JlL2xvYWRlci9TdWJzdGl0dXRlRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNyw5ICsyOCwxMCBAQAogI2RlZmluZSBTdWJzdGl0dXRlRGF0YV9oCiAKICNpbmNs
dWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsMzIgKzM5LDcxIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTdWJzdGl0dXRlRGF0YSB7CiAgICAgcHVibGljOgogICAg
ICAgICBTdWJzdGl0dXRlRGF0YSgpIHsgfQotCi0gICAgICAgIFN1YnN0aXR1dGVEYXRhKFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBjb250ZW50LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25z
dCBTdHJpbmcmIHRleHRFbmNvZGluZywgY29uc3QgS1VSTCYgZmFpbGluZ1VSTCwgY29uc3QgS1VS
TCYgcmVzcG9uc2VVUkwgPSBLVVJMKCkpCi0gICAgICAgICAgICA6IG1fY29udGVudChjb250ZW50
KQotICAgICAgICAgICAgLCBtX21pbWVUeXBlKG1pbWVUeXBlKQorICAgICAgICAKKyAgICAgICAg
U3Vic3RpdHV0ZURhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGFCdWZmZXIsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nLCBjb25zdCBLVVJM
JiBmYWlsaW5nVVJMLCBjb25zdCBLVVJMJiByZXNwb25zZVVSTCA9IEtVUkwoKSkKKyAgICAgICAg
ICAgIDogbV9taW1lVHlwZShtaW1lVHlwZSkKICAgICAgICAgICAgICwgbV90ZXh0RW5jb2Rpbmco
dGV4dEVuY29kaW5nKQogICAgICAgICAgICAgLCBtX2ZhaWxpbmdVUkwoZmFpbGluZ1VSTCkKICAg
ICAgICAgICAgICwgbV9yZXNwb25zZVVSTChyZXNwb25zZVVSTCkKICAgICAgICAgeworICAgICAg
ICAgICAgbV9jb250ZW50ID0gYWRvcHRSZWYobmV3IFN1YnN0aXR1dGVDb250ZW50QnVmZmVyKGRh
dGFCdWZmZXIpKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3Vic3RpdHV0ZURhdGEo
Y29uc3QgU3RyaW5nJiBkYXRhU3RyaW5nLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBL
VVJMJiBmYWlsaW5nVVJMLCBjb25zdCBLVVJMJiByZXNwb25zZVVSTCA9IEtVUkwoKSkKKyAgICAg
ICAgICAgIDogbV9taW1lVHlwZShtaW1lVHlwZSkKKyNpZiBkZWZpbmVkKFdURl9DUFVfQklHX0VO
RElBTikgfHwgZGVmaW5lZChXVEZfQ1BVX01JRERMRV9FTkRJQU4pCisgICAgICAgICAgICAsIG1f
dGV4dEVuY29kaW5nKCJVVEYtMTZCRSIpCisjZWxzZQorICAgICAgICAgICAgLCBtX3RleHRFbmNv
ZGluZygiVVRGLTE2TEUiKQorI2VuZGlmCisgICAgICAgICAgICAsIG1fZmFpbGluZ1VSTChmYWls
aW5nVVJMKQorICAgICAgICAgICAgLCBtX3Jlc3BvbnNlVVJMKHJlc3BvbnNlVVJMKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX2NvbnRlbnQgPSBhZG9wdFJlZihuZXcgU3Vic3RpdHV0ZUNvbnRl
bnRTdHJpbmcoZGF0YVN0cmluZykpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFz
cyBTdWJzdGl0dXRlQ29udGVudCA6IHB1YmxpYyBSZWZDb3VudGVkPFN1YnN0aXR1dGVDb250ZW50
PiB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0
YSgpIGNvbnN0ID0gMDsKKyAgICAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2l6ZSgpIGNvbnN0
ID0gMDsKKyAgICAgICAgICAgIHZpcnR1YWwgflN1YnN0aXR1dGVDb250ZW50KCkge307CisgICAg
ICAgIH07CiAKICAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50
ICE9IDA7IH0KLQotICAgICAgICBjb25zdCBTaGFyZWRCdWZmZXIqIGNvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnQuZ2V0KCk7IH0KKyAgICAgICAgY29uc3QgU3Vic3RpdHV0ZUNvbnRl
bnQqIGNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnQuZ2V0KCk7IH0KICAgICAgICAg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVR5cGU7IH0KICAg
ICAgICAgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX3RleHRF
bmNvZGluZzsgfQogICAgICAgICBjb25zdCBLVVJMJiBmYWlsaW5nVVJMKCkgY29uc3QgeyByZXR1
cm4gbV9mYWlsaW5nVVJMOyB9CiAgICAgICAgIGNvbnN0IEtVUkwmIHJlc3BvbnNlVVJMKCkgY29u
c3QgeyByZXR1cm4gbV9yZXNwb25zZVVSTDsgfQogICAgICAgICAKICAgICBwcml2YXRlOgotICAg
ICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2NvbnRlbnQ7CisgICAgICAgIFJlZlB0cjxTdWJz
dGl0dXRlQ29udGVudD4gbV9jb250ZW50OwogICAgICAgICBTdHJpbmcgbV9taW1lVHlwZTsKICAg
ICAgICAgU3RyaW5nIG1fdGV4dEVuY29kaW5nOwogICAgICAgICBLVVJMIG1fZmFpbGluZ1VSTDsK
ICAgICAgICAgS1VSTCBtX3Jlc3BvbnNlVVJMOworICAgICAgICAKKyAgICAgICAgY2xhc3MgU3Vi
c3RpdHV0ZUNvbnRlbnRCdWZmZXIgOiBwdWJsaWMgU3Vic3RpdHV0ZUNvbnRlbnQgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBTdWJzdGl0dXRlQ29udGVudEJ1ZmZlcihQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gZGF0YUJ1ZmZlcikgOiBtX2RhdGFCdWZmZXIoZGF0YUJ1ZmZlcikge30K
KyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGFCdWZm
ZXItPmRhdGEoKTsgfQorICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YUJ1ZmZlci0+c2l6ZSgpOyB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToK
KyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YUJ1ZmZlcjsKKyAgICAgICAg
fTsKKyAgICAgICAgCisgICAgICAgIGNsYXNzIFN1YnN0aXR1dGVDb250ZW50U3RyaW5nIDogcHVi
bGljIFN1YnN0aXR1dGVDb250ZW50IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgU3Vi
c3RpdHV0ZUNvbnRlbnRTdHJpbmcoY29uc3QgU3RyaW5nJiBkYXRhU3RyaW5nKSA6IG1fZGF0YVN0
cmluZyhkYXRhU3RyaW5nKSB7fQorICAgICAgICAgICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPihtX2RhdGFTdHJpbmcuY2hh
cmFjdGVycygpKTsgfQorICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YVN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7IH0KKyAgICAgICAgICAgIAor
ICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgU3RyaW5nIG1fZGF0YVN0cmluZzsKKyAgICAg
ICAgfTsKKyAgICAgICAgCiAgICAgfTsKLQogfQogCiAjZW5kaWYgLy8gU3Vic3RpdHV0ZURhdGFf
aApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL0tVUkwuY3BwCShyZXZpc2lvbiA2NjM0MikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
S1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MTYsNiArMTgxNiwxMiBAQCBjb25zdCBLVVJM
JiBibGFua1VSTCgpCiAgICAgcmV0dXJuIHN0YXRpY0JsYW5rVVJMOwogfQogCitjb25zdCBLVVJM
JiBzcmNkb2NVUkwoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoS1VSTCwgc3RhdGljU3Jj
ZG9jVVJMLCAoUGFyc2VkVVJMU3RyaW5nLCAiYWJvdXQ6c3JjZG9jIikpOworICAgIHJldHVybiBz
dGF0aWNTcmNkb2NVUkw7Cit9CisKICNpZm5kZWYgTkRFQlVHCiB2b2lkIEtVUkw6OnByaW50KCkg
Y29uc3QKIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vS1VSTC5oCShyZXZpc2lvbiA2NjM0MikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vS1VSTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsNiArMjU1LDcgQEAgYm9vbCBlcXVhbEln
bm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKGNvbgogYm9vbCBwcm90b2NvbEhvc3RBbmRQb3J0QXJl
RXF1YWwoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsKICAgICAKIGNvbnN0IEtVUkwmIGJsYW5r
VVJMKCk7Citjb25zdCBLVVJMJiBzcmNkb2NVUkwoKTsKIAogLy8gRnVuY3Rpb25zIHRvIGRvIFVS
TCBvcGVyYXRpb25zIG9uIHN0cmluZ3MuCiAvLyBUaGVzZSBhcmUgb3BlcmF0aW9ucyB0aGF0IGFy
ZW4ndCBmYXN0ZXIgb24gYSBwYXJzZWQgVVJMLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJM
R29vZ2xlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0tVUkxHb29nbGUuY3Bw
CShyZXZpc2lvbiA2NjM0MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwODAsNiArMTA4MCwxMiBAQCBjb25zdCBLVVJMJiBibGFua1VSTCgp
CiAgICAgcmV0dXJuIHN0YXRpY0JsYW5rVVJMOwogfQogCitjb25zdCBLVVJMJiBzcmNkb2NVUkwo
KQoreworICAgIHN0YXRpYyBLVVJMIHN0YXRpY1NyY2RvY1VSTChQYXJzZWRVUkxTdHJpbmcsICJh
Ym91dDpzcmNkb2MiKTsKKyAgICByZXR1cm4gc3RhdGljU3JjZG9jVVJMOworfQorCiBib29sIHBy
b3RvY29sSXMoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IGNoYXIqIHByb3RvY29sKQogewogICAg
IC8vIERvIHRoZSBjb21wYXJpc29uIHdpdGhvdXQgbWFraW5nIGEgbmV3IHN0cmluZyBvYmplY3Qu
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA2NjM1NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEwLTA4LTI5ICBKdXN0aW4gU2NodWggIDxq
c2NodWhAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEltcGxlbWVudCBpZnJhbWUuc3JjZG9jCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzY4MworCisgICAgICAgICogZmFzdC9mcmFt
ZXMvaWZyYW1lLXNyY2RvYy1sb2FkLWR5bmFtaWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLWxvYWQtZHluYW1pYy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLWxvYWQtcmVwbGFjZS1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbG9hZC1y
ZXBsYWNlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2Mt
bG9hZC1zdGF0aWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZyYW1lcy9p
ZnJhbWUtc3JjZG9jLWxvYWQtc3RhdGljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZnJh
bWVzL2lmcmFtZS1zcmNkb2MtbmF2aWdhdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbmF2aWdhdGlvbi5odG1sOiBBZGRlZC4KKwog
MjAxMC0wOC0yOSAgWXV6byBGdWppc2hpbWEgIDx5dXpvQGdvb2dsZS5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCBDaHJvbWl1bSB0ZXN0IGV4cGVjdGF0aW9uIGNoYW5nZSBmb3IgcjY2MjgyLgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1sb2FkLWR5bmFtaWMt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFt
ZS1zcmNkb2MtbG9hZC1keW5hbWljLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbG9hZC1keW5hbWljLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorT3V0ZXIgZnJhbWUgYWJvdmUKKworT3V0
ZXIgZnJhbWUgbWlkZGxlCisKK091dGVyIGZyYW1lIGJlbG93CitMb2c6CistLS0tLS0tLQorRnJh
bWUgZjE6IGxvY2F0aW9uID0gYWJvdXQ6c3JjZG9jCitGcmFtZSBmMTogc3JjID0gaHR0cDovL2V4
YW1wbGUuY29tLworRnJhbWUgZjE6IFBBU1MgLSBib2R5IGNvbnRlbnQgbWF0Y2hlcyBzcmNkb2Mu
CitGcmFtZSBmMjogbG9jYXRpb24gPSBhYm91dDpzcmNkb2MKK0ZyYW1lIGYyOiBzcmMgPSBbZW1w
dHldCitGcmFtZSBmMjogUEFTUyAtIGJvZHkgY29udGVudCBtYXRjaGVzIHNyY2RvYy4KKwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1sb2FkLWR5bmFtaWMuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLWxv
YWQtZHluYW1pYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMv
aWZyYW1lLXNyY2RvYy1sb2FkLWR5bmFtaWMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKword2luZG93Lm9ubG9hZCA9
IGZ1bmN0aW9uKCkgeworICAgIHZhciBsb2dnZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
bG9nIik7CisgICAgZnVuY3Rpb24gc2V0ZnJhbWUgKGlkLCB1cmwsIGZpbmlzaCkgeworICAgICAg
ICB2YXIgZiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgICAgICB2YXIg
c3JjZG9jQm9keSA9ICJJbm5lciBGcmFtZSAiICsgaWQKKyAgICAgICAgZnVuY3Rpb24gbG9nKHMp
IHsKKyAgICAgICAgICAgIGxvZ2dlci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSgiRnJhbWUgIiArIGlkICsgIjogIiArIHMpKTsKKyAgICAgICAgICAgIGxvZ2dlci5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKKyAgICAgICAgfQorICAgICAgICBm
Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgbG9nKCJsb2NhdGlvbiA9ICIgKyBm
LmNvbnRlbnRXaW5kb3cubG9jYXRpb24pOworICAgICAgICAgICAgbG9nKCJzcmMgPSAiICsgKGYu
c3JjLmxlbmd0aCA/IGYuc3JjIDogIltlbXB0eV0iKSk7CisgICAgICAgICAgICBpZiAoZi5jb250
ZW50V2luZG93LmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID09IHNyY2RvY0JvZHkpCisgICAgICAg
ICAgICAgICAgbG9nKCJQQVNTIC0gYm9keSBjb250ZW50IG1hdGNoZXMgc3JjZG9jLiIpCisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9nKCJGQUlMIC0gYm9keSBjb250ZW50IGRv
ZXMgbm90IG1hdGNoIHNyY2RvYy4iKQorICAgICAgICAgICAgaWYgKGZpbmlzaCAmJiB3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgICAgIGYuc3JjZG9jID0gIjxodG1sPjxi
b2R5PiIgKyBzcmNkb2NCb2R5ICsgIjwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgaWYgKHVybCkK
KyAgICAgICAgICAgIGYuc3JjID0gdXJsOworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZChpZCkuYXBwZW5kQ2hpbGQoZik7CisgICAgfQorCisgICAgc2V0ZnJhbWUoImYxIiwgImh0dHA6
Ly9leGFtcGxlLmNvbS8iKTsKKyAgICBzZXRmcmFtZSgiZjIiLCBudWxsLCB0cnVlKQorfQorPC9z
Y3JpcHQ+Cis8aGVhZD4KKzxib2R5PgorT3V0ZXIgZnJhbWUgYWJvdmU8YnI+Cis8ZGl2IGlkPSJm
MSI+PC9kaXY+CitPdXRlciBmcmFtZSBtaWRkbGU8YnI+Cis8ZGl2IGlkPSJmMiI+PC9kaXY+CitP
dXRlciBmcmFtZSBiZWxvdzxicj4KKzxwcmUgaWQ9ImxvZyI+CitMb2c6CistLS0tLS0tLQorPC9w
cmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJh
bWUtc3JjZG9jLWxvYWQtcmVwbGFjZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1sb2FkLXJlcGxhY2UtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1s
b2FkLXJlcGxhY2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACitP
dXRlciBmcmFtZSBhYm92ZQorCitPdXRlciBmcmFtZSBtaWRkbGUKKworT3V0ZXIgZnJhbWUgYmVs
b3cKK0xvZzoKKy0tLS0tLS0tCitGcmFtZSBmMTogbG9jYXRpb24gPSBhYm91dDpzcmNkb2MKK0Zy
YW1lIGYxOiBzcmMgPSBodHRwOi8vZXhhbXBsZS5jb20vCitGcmFtZSBmMTogUEFTUyAtIGJvZHkg
Y29udGVudCBtYXRjaGVzIHNyY2RvYy4KK0ZyYW1lIGYyOiBsb2NhdGlvbiA9IGFib3V0OnNyY2Rv
YworRnJhbWUgZjI6IHNyYyA9IFtlbXB0eV0KK0ZyYW1lIGYyOiBQQVNTIC0gYm9keSBjb250ZW50
IG1hdGNoZXMgc3JjZG9jLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUt
c3JjZG9jLWxvYWQtcmVwbGFjZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
ZnJhbWVzL2lmcmFtZS1zcmNkb2MtbG9hZC1yZXBsYWNlLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLWxvYWQtcmVwbGFjZS5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworfQorCit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGxvZ2dlciA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKTsKKyAgICBmdW5jdGlvbiBzZXRmcmFtZSAoaWQs
IHVybCwgZmluaXNoKSB7CisgICAgICAgIHZhciBmID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
aWZyYW1lIik7CisgICAgICAgIHZhciBzcmNkb2NCb2R5ID0gIklubmVyIEZyYW1lICIgKyBpZAor
ICAgICAgICBmdW5jdGlvbiBsb2cocykgeworICAgICAgICAgICAgbG9nZ2VyLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJGcmFtZSAiICsgaWQgKyAiOiAiICsgcykpOworICAg
ICAgICAgICAgbG9nZ2VyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikp
OworICAgICAgICB9CisgICAgICAgIGYub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICBmLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGxvZygibG9jYXRpb24g
PSAiICsgZi5jb250ZW50V2luZG93LmxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBsb2coInNy
YyA9ICIgKyAoZi5zcmMubGVuZ3RoID8gZi5zcmMgOiAiW2VtcHR5XSIpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoZi5jb250ZW50V2luZG93LmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID09IHNyY2Rv
Y0JvZHkpCisgICAgICAgICAgICAgICAgICAgIGxvZygiUEFTUyAtIGJvZHkgY29udGVudCBtYXRj
aGVzIHNyY2RvYy4iKQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
bG9nKCJGQUlMIC0gYm9keSBjb250ZW50IGRvZXMgbm90IG1hdGNoIHNyY2RvYy4iKQorCSAgICAg
ICAgICAgIGlmIChmaW5pc2ggJiYgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorCSAgICAg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBmLnNyY2RvYyA9ICI8aHRtbD48Ym9keT4iICsgc3JjZG9jQm9keSAr
ICI8L2JvZHk+PC9odG1sPiI7CisgICAgICAgICAgICBpZiAodXJsKQorICAgICAgICAgICAgICAg
IGYuc3JjID0gdXJsOworICAgICAgICB9CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KGlkKS5hcHBlbmRDaGlsZChmKTsKKyAgICB9CisKKyAgICBzZXRmcmFtZSgiZjEiLCAiaHR0cDov
L2V4YW1wbGUuY29tLyIpOworICAgIHNldGZyYW1lKCJmMiIsIG51bGwsIHRydWUpOworfQorPC9z
Y3JpcHQ+Cis8aGVhZD4KKzxib2R5PgorT3V0ZXIgZnJhbWUgYWJvdmU8YnI+Cis8ZGl2IGlkPSJm
MSI+PC9kaXY+CitPdXRlciBmcmFtZSBtaWRkbGU8YnI+Cis8ZGl2IGlkPSJmMiI+PC9kaXY+CitP
dXRlciBmcmFtZSBiZWxvdzxicj4KKzxwcmUgaWQ9ImxvZyI+CitMb2c6CistLS0tLS0tLQorPC9w
cmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJh
bWUtc3JjZG9jLWxvYWQtc3RhdGljLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLWxvYWQtc3RhdGljLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbG9h
ZC1zdGF0aWMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACitPdXRl
ciBmcmFtZSBhYm92ZQorCitPdXRlciBmcmFtZSBtaWRkbGUKKworT3V0ZXIgZnJhbWUgYmVsb3cK
K0xvZzoKKy0tLS0tLS0tCitGcmFtZSBmMTogbG9jYXRpb24gPSBhYm91dDpzcmNkb2MKK0ZyYW1l
IGYxOiBzcmMgPSBodHRwOi8vZXhhbXBsZS5jb20vCitGcmFtZSBmMTogUEFTUyAtIGJvZHkgY29u
dGVudCBtYXRjaGVzIHNyY2RvYy4KK0ZyYW1lIGYyOiBsb2NhdGlvbiA9IGFib3V0OnNyY2RvYwor
RnJhbWUgZjI6IHNyYyA9IFtlbXB0eV0KK0ZyYW1lIGYyOiBQQVNTIC0gYm9keSBjb250ZW50IG1h
dGNoZXMgc3JjZG9jLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3Jj
ZG9jLWxvYWQtc3RhdGljLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mcmFt
ZXMvaWZyYW1lLXNyY2RvYy1sb2FkLXN0YXRpYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1sb2FkLXN0YXRpYy5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQwIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQor
CitmdW5jdGlvbiBsb2dmcmFtZSAoaWQsIGZpbmlzaCkgeworCXZhciBsb2dnZXIgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgibG9nIik7CisgICAgdmFyIHNyY2RvY0JvZHkgPSAiSW5uZXIgRnJh
bWUgIiArIGlkCisgICAgZnVuY3Rpb24gbG9nKHMpIHsKKyAgICAgICAgbG9nZ2VyLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJGcmFtZSAiICsgaWQgKyAiOiAiICsgcykpOwor
ICAgICAgICBsb2dnZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7
CisgICAgfQorICAgIHZhciBmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAgIGxv
ZygibG9jYXRpb24gPSAiICsgZi5jb250ZW50V2luZG93LmxvY2F0aW9uKTsKKyAgICBsb2coInNy
YyA9ICIgKyAoZi5zcmMubGVuZ3RoID8gZi5zcmMgOiAiW2VtcHR5XSIpKTsKKyAgICBpZiAoZi5j
b250ZW50V2luZG93LmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID09IHNyY2RvY0JvZHkpCisgICAg
ICAgIGxvZygiUEFTUyAtIGJvZHkgY29udGVudCBtYXRjaGVzIHNyY2RvYy4iKQorICAgIGVsc2UK
KyAgICAgICAgbG9nKCJGQUlMIC0gYm9keSBjb250ZW50IGRvZXMgbm90IG1hdGNoIHNyY2RvYy4i
KQorICAgIGlmIChmaW5pc2ggJiYgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKKzwvc2NyaXB0PgorPGhl
YWQ+Cis8Ym9keT4KK091dGVyIGZyYW1lIGFib3ZlPGJyPgorPGlmcmFtZSBzcmNkb2M9IjxodG1s
Pjxib2R5PklubmVyIEZyYW1lIGYxPC9ib2R5PjwvaHRtbD4iIHNyYz0iaHR0cDovL2V4YW1wbGUu
Y29tLyIgaWQ9ImYxIiBvbmxvYWQ9ImxvZ2ZyYW1lKCdmMScpIj48L2lmcmFtZT48YnI+CitPdXRl
ciBmcmFtZSBtaWRkbGU8YnI+Cis8aWZyYW1lIHNyY2RvYz0iPGh0bWw+PGJvZHk+SW5uZXIgRnJh
bWUgZjI8L2JvZHk+PC9odG1sPiIgaWQ9ImYyIiBvbmxvYWQ9ImxvZ2ZyYW1lKCdmMicsdHJ1ZSki
PjwvaWZyYW1lPjxicj4KK091dGVyIGZyYW1lIGJlbG93PGJyPgorPHByZSBpZD0ibG9nIj4KK0xv
ZzoKKy0tLS0tLS0tCis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbmF2aWdhdGlvbi1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1uYXZpZ2F0aW9u
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lm
cmFtZS1zcmNkb2MtbmF2aWdhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTEgQEAKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGFuIGlmcmFtZSB3aXRoIGEgQHNyZG9j
IENBTiBuYXZpZ2F0ZSBib3RoIGl0c2VsZiBhbmQgYSBjaGlsZCBpbiB0aGUgZnJhbWUgdHJlZS4g
SXQgYWxzbyB2ZXJpZmllcyB0aGF0IHRoZSBpbXBsaWNpdCBzYW5kYm94IGF0dHJpYnV0ZSByZW1h
aW5zIGludGFjdCBhZnRlciBhIGZyYW1lIGhhcyBiZWVuIG5hdmlnYXRlZCwgYW5kIHRoYXQgc2Fu
ZGJveCBhdHRyaWJ1dGVzIGFyZSBwcm9wYWdhdGVkIHRocm91Z2ggdGhlIGZyYW1lIGhpZXJhcmNo
eS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgKHNlbGYuc2FuZGJveGVk
RnJhbWUuZnJhbWVXaXRoUGx1Z2luLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbHVnaW4nKS5k
ZXN0cm95U3RyZWFtKSA9PSB1bmRlZmluZWQgaXMgdHJ1ZQorUEFTUyBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnc2FuZGJveGVkRnJhbWVJZCcpLnNhbmRib3ggaXMgJ2FsbG93LXNjcmlwdHMgYWxs
b3ctc2FtZS1vcmlnaW4nCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1u
YXZpZ2F0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZy
YW1lLXNyY2RvYy1uYXZpZ2F0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLW5hdmlnYXRpb24uaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3MCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
KworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgd2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gY2hpbGRGcmFtZVdhc05hdmlnYXRl
ZCgpCit7CisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgY2hpbGQgZnJhbWUgd2FzIHVuYWJsZSB0byBs
b2FkIGEgcGx1Z2luLCBzaW5jZSBpdHMgcGFyZW50IGlzIHNhbmRib3hlZC4KKyAgICBzaG91bGRC
ZVRydWUoIihzZWxmLnNhbmRib3hlZEZyYW1lLmZyYW1lV2l0aFBsdWdpbi5kb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgncGx1Z2luJykuZGVzdHJveVN0cmVhbSkgPT0gdW5kZWZpbmVkIik7CisgICAg
CisgICAgLy8gV2hlbiB0aGUgY2hpbGQgZnJhbWUgKGdyYW5kY2hpbGQgb2YgdGhlIG1haW4gd2lu
ZG93KSBoYXMgYmVlbiBuYXZpZ2F0ZWQsCisgICAgLy8gbWFrZSB0aGUgc2FuZGJveGVkIGZyYW1l
IG5hdmlnYXRlIGl0c2VsZgorICAgIHNlbGYuc2FuZGJveGVkRnJhbWUubG9jYXRpb24uYXNzaWdu
KCJqYXZhc2NyaXB0OiB0b3Auc2FuZGJveFdhc05hdmlnYXRlZCgpOyIpOworfQorCitmdW5jdGlv
biBzYW5kYm94V2FzTmF2aWdhdGVkKCkKK3sKKyAgICBzaG91bGRCZSgiZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3NhbmRib3hlZEZyYW1lSWQnKS5zYW5kYm94IiwgIidhbGxvdy1zY3JpcHRzIGFs
bG93LXNhbWUtb3JpZ2luJyIpOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICB3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJv
ZHk+CisgICAgPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+CisgICAgPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+CisKKyAgICA8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1v
cmlnaW4iCisgICAgICAgICAgICBuYW1lPSJzYW5kYm94ZWRGcmFtZSIKKyAgICAgICAgICAgIGlk
PSJzYW5kYm94ZWRGcmFtZUlkIgorICAgICAgICAgICAgc3JjZG9jPSIKKwkJCTxodG1sPgorCQkJ
PGhlYWQ+CisJCQk8c2NyaXB0PgorCQkJZnVuY3Rpb24gbW9kaWZ5KCkKKwkJCXsKKwkJCSAgICBz
ZWxmLm5hdmlnYXRlZC5sb2NhdGlvbi5hc3NpZ24oJnF1b3Q7amF2YXNjcmlwdDogdG9wLmNoaWxk
RnJhbWVXYXNOYXZpZ2F0ZWQoKTsmcXVvdDspOworCQkJfQorCQkJPC9zY3JpcHQ+CisJCQk8L2hl
YWQ+CisJCQk8Ym9keSBvbmxvYWQ9JnF1b3Q7bW9kaWZ5KCk7JnF1b3Q7PgorCQkJICAgIDxpZnJh
bWUgbmFtZT0mcXVvdDtuYXZpZ2F0ZWQmcXVvdDsKKwkJCSAgICAgICAgICAgIHNyYz0mcXVvdDty
ZXNvdXJjZXMvc2FuZGJveGVkLWlmcmFtZS1uYXZpZ2F0aW9uLW5hdmlnYXRlZC5odG1sJnF1b3Q7
PgorCQkJICAgIDwvaWZyYW1lPgorCQkJICAgIDxpZnJhbWUgbmFtZT0mcXVvdDtmcmFtZVdpdGhQ
bHVnaW4mcXVvdDsKKwkJCSAgICAgICAgICAgIHNyYz0mcXVvdDtyZXNvdXJjZXMvc2FuZGJveGVk
LWlmcmFtZS1wbHVnaW5zLWZyYW1lLW9iamVjdC5odG1sJnF1b3Q7PgorCQkJICAgIDwvaWZyYW1l
PgorCQkJPC9ib2R5PgorCQkJPC9odG1sPiI+CisgICAgPC9pZnJhbWU+CisKKyAgICA8c2NyaXB0
PgorICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBhbiBpZnJhbWUgd2l0
aCBhIEBzcmRvYyBDQU4gbmF2aWdhdGUgYm90aCBpdHNlbGYgYW5kIGEgY2hpbGQgaW4gdGhlIGZy
YW1lIHRyZWUuICIKKyAgICAgICAgICAgICAgICArICJJdCBhbHNvIHZlcmlmaWVzIHRoYXQgdGhl
IGltcGxpY2l0IHNhbmRib3ggYXR0cmlidXRlIHJlbWFpbnMgaW50YWN0IGFmdGVyIGEgZnJhbWUg
aGFzIGJlZW4gbmF2aWdhdGVkLCAiCisgICAgICAgICAgICAgICAgKyAiYW5kIHRoYXQgc2FuZGJv
eCBhdHRyaWJ1dGVzIGFyZSBwcm9wYWdhdGVkIHRocm91Z2ggdGhlIGZyYW1lIGhpZXJhcmNoeS4i
KTsKKyAgICB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICA8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67319</attachid>
            <date>2010-09-11 17:46:36 -0700</date>
            <delta_ts>2010-09-11 20:24:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43683-20100911174635.patch</filename>
            <type>text/plain</type>
            <size>44069</size>
            <attacher name="Justin Schuh">jschuh</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzMxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzEgQEAKKzIwMTAtMDktMTEgIEp1c3RpbiBTY2h1aCAgPGpzY2h1aEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50IGlmcmFtZS5zcmNkb2MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQzNjgzCisKKyAgICAgICAgQWRkZWQgaWZyYW1lIHNyY2RvYyBhdHRy
aWJ1dGUgZnJvbSBIVE1MNSBzcGVjLgorICAgICAgICBNYWRlIGlmcmFtZSBzYW5kYm94IGltcGxp
Y2l0IGZvciBzcmNkb2MuCisgICAgICAgIEFkZGVkIGFuIGlubGluZSB0ZXh0IGJ1ZmZlciBwYXNz
LXRocnUgZm9yIFN1YnN0aXR1dGVEYXRhLgorICAgICAgICBBZGRlZCBtZXRob2QgZm9yIERvY3Vt
ZW50TG9hZGVyIHRvIGtub3cgaXQgaGFzIGFuIGlubGluZSB0ZXh0IHJlc291cmNlLgorICAgICAg
ICBNYWRlIERvY3VtZW50V3JpdGVyIGF3YXJlIG9mIGlubGluZSB0ZXh0IHJlb3VyY2VzIGZvciBl
bmNvZGluZyBoaW50aW5nLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2ZyYW1lcy9pZnJhbWUtc3Jj
ZG9jLWxvYWRpbmcuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2Rv
Yy1uYXZpZ2F0ZS1zZWxmLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZnJhbWVzL2lmcmFtZS1z
cmNkb2MtbmF2aWdhdGlvbi5odG1sCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3Jl
LnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpjb21wbGV0ZVVSTCk6CisgICAg
ICAgICogaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW46CisgICAgICAgICogaHRtbC9IVE1MRnJh
bWVFbGVtZW50QmFzZS5oOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudDo6aW5saW5lVGV4dFJl
c291cmNlKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oOgorICAgICAg
ICAqIGh0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElG
cmFtZUVsZW1lbnQ6OnBhcnNlU2FuZGJveEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSUZyYW1lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTElGcmFtZUVsZW1lbnQ6OmlubGluZVRleHRSZXNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSUZyYW1lRWxlbWVudDo6bG9jYXRpb24pOgorICAgICAgICAqIGh0bWwvSFRNTElG
cmFtZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbDoKKyAg
ICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXI6OkRvY3VtZW50TG9hZGVyKToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRM
b2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjppc0lubGluZVRleHRS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2V0SXNJbmxpbmVU
ZXh0UmVzb3VyY2UpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFdyaXRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudFdyaXRlcjo6Y3JlYXRlRGVjb2RlcklmTmVlZGVkKToKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OmxvYWRXaXRoTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgICogbG9hZGVyL1N1YnN0
aXR1dGVEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChkZWZhdWx0VGV4dEVuY29kaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN1YnN0aXR1dGVDb250ZW50QnVmZmVyOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3Vic3RpdHV0ZUNvbnRlbnRCdWZmZXI6OlN1YnN0aXR1dGVDb250ZW50QnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN1YnN0aXR1dGVDb250ZW50QnVmZmVyOjpkYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnN0aXR1dGVDb250ZW50QnVmZmVyOjpzaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN1YnN0aXR1dGVDb250ZW50U3RyaW5nOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3Vic3RpdHV0ZUNvbnRlbnRTdHJpbmc6OlN1YnN0aXR1dGVDb250ZW50U3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlN1YnN0aXR1dGVDb250ZW50U3RyaW5nOjpkYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN1YnN0aXR1dGVDb250ZW50U3RyaW5nOjpzaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlN1YnN0aXR1dGVEYXRhOjpTdWJzdGl0dXRlRGF0YSk6CisgICAgICAgICogbG9h
ZGVyL1N1YnN0aXR1dGVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpTdWJzdGl0dXRlRGF0YTo6
Q29udGVudDo6fkNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGE6OmNv
bnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL0tVUkwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
c3JjZG9jVVJMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmg6CisgICAgICAgICogcGxhdGZv
cm0vS1VSTEdvb2dsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzcmNkb2NVUkwpOgorCiAyMDEw
LTA5LTExICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkLgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNjczMDkpCisrKyBXZWJDb3JlL0FuZHJvaWQu
bWsJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw2ICszNDIsNyBAQCBMT0NBTF9TUkNfRklMRVMgOj0g
JChMT0NBTF9TUkNfRklMRVMpIFwKIAlsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwIFwKIAlsb2Fk
ZXIvU3ViZnJhbWVMb2FkZXIuY3BwIFwKIAlsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwIFwK
Kwlsb2FkZXIvU3Vic3RpdHV0ZURhdGEuY3BwIFwKIAlsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rl
ci5jcHAgXAogCWxvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmNwcCBcCiAJbG9hZGVyL1dvcmtlclRo
cmVhZGFibGVMb2FkZXIuY3BwIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNjczMDkpCisrKyBXZWJD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMTE1LDYgKzExMTUsNyBAQCBT
RVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgbG9hZGVyL1NpbmtEb2N1bWVudC5jcHAKICAgICBsb2Fk
ZXIvU3ViZnJhbWVMb2FkZXIuY3BwCiAgICAgbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAor
ICAgIGxvYWRlci9TdWJzdGl0dXRlRGF0YS5jcHAKICAgICBsb2FkZXIvVGV4dFJlc291cmNlRGVj
b2Rlci5jcHAKICAgICBsb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHAKICAgICBsb2FkZXIvV29y
a2VyVGhyZWFkYWJsZUxvYWRlci5jcHAKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjczMDkpCisrKyBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNzU0LDYgKzE3NTQsNyBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVy
Q2xpZW50LmggXAogCVdlYkNvcmUvbG9hZGVyL1N1YnN0aXR1dGVEYXRhLmggXAogCVdlYkNvcmUv
bG9hZGVyL1N1YnN0aXR1dGVSZXNvdXJjZS5oIFwKKwlXZWJDb3JlL2xvYWRlci9TdWJzdGl0dXRl
RGF0YS5jcHAgXAogCVdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwIFwKIAlX
ZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmggXAogCVdlYkNvcmUvbG9hZGVyL1Ro
cmVhZGFibGVMb2FkZXIuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNjczMDkpCisrKyBXZWJD
b3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC05NzMsNiArOTczLDggQEAgX19a
Tks3V2ViQ29yZTIwUmVzb3VyY2VSZXNwb25zZUJhc2UyMWV4cAogX19aTks3V2ViQ29yZTIwUmVz
b3VyY2VSZXNwb25zZUJhc2UzdXJsRXYKIF9fWk5LN1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VC
YXNlNmlzSFRUUEV2CiBfX1pOSzdXZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNlQmFzZThtaW1lVHlw
ZUV2CitfX1pON1dlYkNvcmUxNFN1YnN0aXR1dGVEYXRhQzFFdgorX19aTjdXZWJDb3JlMTRTdWJz
dGl0dXRlRGF0YUMxRU4zV1RGMTBQYXNzUmVmUHRySU5TXzEyU2hhcmVkQnVmZmVyRUVFUktOUzFf
NlN0cmluZ0VTN19SS05TXzRLVVJMRVNBXwogX19aTks3V2ViQ29yZTIxVXNlckNvbnRlbnRVUkxQ
YXR0ZXJuN21hdGNoZXNFUktOU180S1VSTEUKIF9fWk5LN1dlYkNvcmUyM0ZyYW1lTG9hZGVyU3Rh
dGVNYWNoaW5lMTVmaXJzdExheW91dERvbmVFdgogX19aTks3V2ViQ29yZTIzRnJhbWVMb2FkZXJT
dGF0ZU1hY2hpbmUyM2NvbW1pdHRpbmdGaXJzdFJlYWxMb2FkRXYKSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2
NzMwOSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcwLDYg
KzE5NzAsNyBAQAogICAgICAgICAgICAgJ2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAnLAog
ICAgICAgICAgICAgJ2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oJywKICAgICAgICAgICAgICds
b2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaCcsCisgICAgICAgICAgICAnbG9hZGVyL1N1
YnN0aXR1dGVEYXRhLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL1N1YnN0aXR1dGVEYXRhLmgn
LAogICAgICAgICAgICAgJ2xvYWRlci9TdWJzdGl0dXRlUmVzb3VyY2UuaCcsCiAgICAgICAgICAg
ICAnbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjczMDkp
CisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIzLDYgKzEwMjMs
NyBAQCBTT1VSQ0VTICs9IFwKICAgICBsb2FkZXIvU2lua0RvY3VtZW50LmNwcCBcCiAgICAgbG9h
ZGVyL1N1YmZyYW1lTG9hZGVyLmNwcCBcCiAgICAgbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNw
cCBcCisgICAgbG9hZGVyL1N1YnN0aXR1dGVEYXRhLmNwcCBcCiAgICAgbG9hZGVyL1RleHRSZXNv
dXJjZURlY29kZXIuY3BwIFwKICAgICBsb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHAgXAogICAg
IG5vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDY3MzA5KQorKysgV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjM3NjksNiArMjM3NjksMTAg
QEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
bG9hZGVyXFN1YnN0aXR1dGVEYXRhLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxTdWJzdGl0dXRlRGF0YS5oIg0KIAkJCQk+
DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiA2NzMwOSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNDY5LDYgKzI0NjksNyBAQAogCQk4QzZF
QTYxOTExRUY3RTA0MDBGRDhFRTMgLyogUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QzZFQTYxNzExRUY3RTA0
MDBGRDhFRTMgLyogUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAgKi87IH07CiAJCThDNkVBNjFB
MTFFRjdFMDQwMEZEOEVFMyAvKiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QzZFQTYxODExRUY3RTA0MDBGRDhF
RTMgLyogUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oICovOyB9OwogCQk4RkFDNzc0RDExOTg3MkNC
MDAxNUFFOTQgLyogSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhGOTM0RDg0MTE4OUYxRUUwMDUwOEQ1RCAvKiBK
U01haW5UaHJlYWRFeGVjU3RhdGUuY3BwICovOyB9OworCQk4RkQzMDM5QTEyMzlCRkNGMDA1MjJB
RDggLyogU3Vic3RpdHV0ZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOEZEMzAzOTkxMjM5QkZDRjAwNTIyQUQ4IC8qIFN1YnN0aXR1dGVEYXRh
LmNwcCAqLzsgfTsKIAkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCQzBE
NzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLzsgfTsKIAkJOTMwMkIwQkYwRDc5Rjgy
QzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMDVCMjRE
MDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgzNzcsNiAr
ODM3OCw3IEBACiAJCThDNkVBNjE4MTFFRjdFMDQwMEZEOEVFMyAvKiBSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXMuaDsgcGF0aCA9IGdlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RjkzNEQ4MzExODlGMUVFMDA1MDhENUQgLyogSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
TWFpblRocmVhZEV4ZWNTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Rjkz
NEQ4NDExODlGMUVFMDA1MDhENUQgLyogSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCThGRDMwMzk5MTIzOUJGQ0YwMDUyMkFEOCAv
KiBTdWJzdGl0dXRlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTdWJzdGl0dXRlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDJC
MEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUGFnZUdyb3VwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlR3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xNjY2NCw2ICsxNjY2Niw3IEBACiAJCQkJOTNFMjI3REYwQUY1ODlBRDAwRDQ4MzI0IC8q
IFN1YnJlc291cmNlTG9hZGVyLmNwcCAqLywKIAkJCQk2NTZEMzczMDBBREJBNURFMDBBNDU1NEQg
LyogU3VicmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkxQTMxNzg5MjBCMjBBODE2MDAzMTY5ODcg
LyogU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaCAqLywKKwkJCQk4RkQzMDM5OTEyMzlCRkNGMDA1
MjJBRDggLyogU3Vic3RpdHV0ZURhdGEuY3BwICovLAogCQkJCTY1OUE3RDEyMEI2REI0RDkwMDEx
NTVCMyAvKiBTdWJzdGl0dXRlRGF0YS5oICovLAogCQkJCTFBOEY2QjAxMERCNTMwMDYwMDFEQjc5
NCAvKiBTdWJzdGl0dXRlUmVzb3VyY2UuaCAqLywKIAkJCQlGNTIzRDI3ODAyREU0M0Q3MDE4NjM1
Q0EgLyogVGV4dFJlc291cmNlRGVjb2Rlci5jcHAgKi8sCkBAIC0yMzAyNyw2ICsyMzAzMCw3IEBA
CiAJCQkJOTcyMDVBQjUxMjM5MjkxMDAwQjE3MzgwIC8qIEltYWdlRG9jdW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTcyMDVBQjcxMjM5MjkxMDAwQjE3MzgwIC8qIE1lZGlhRG9jdW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTcyMDVBQkIxMjM5MjkyNzAwQjE3MzgwIC8qIFBsdWdp
bkRvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCThGRDMwMzlBMTIzOUJGQ0YwMDUyMkFE
OCAvKiBTdWJzdGl0dXRlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNjIyQThGMjEyMkM0
NDQ1MDBBNzg1QjMgLyogSlNCaW5kaW5nU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTYy
MkE4RkMxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODkzQzQ3QjcxMjM4QTA5OTAwMkIzRDg2IC8qIEpTRmlsZUNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNjczMDkpCisrKyBXZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MDUsNyArMzgwNSw3IEBA
IEtVUkwgRG9jdW1lbnQ6OmNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYKICAgICAvLyBTZWUgYWxz
byBbQ1NTXVN0eWxlU2hlZXQ6OmNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYpCiAgICAgaWYgKHVy
bC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIEtVUkwoKTsKLSAgICBjb25zdCBLVVJMJiBiYXNl
VVJMID0gKChtX2Jhc2VVUkwuaXNFbXB0eSgpIHx8IG1fYmFzZVVSTCA9PSBibGFua1VSTCgpKSAm
JiBwYXJlbnREb2N1bWVudCgpKSA/IHBhcmVudERvY3VtZW50KCktPmJhc2VVUkwoKSA6IG1fYmFz
ZVVSTDsKKyAgICBjb25zdCBLVVJMJiBiYXNlVVJMID0gKChtX2Jhc2VVUkwuaXNFbXB0eSgpIHx8
IG1fYmFzZVVSTCA9PSBibGFua1VSTCgpIHx8IG1fYmFzZVVSTCA9PSBzcmNkb2NVUkwoKSkgJiYg
cGFyZW50RG9jdW1lbnQoKSkgPyBwYXJlbnREb2N1bWVudCgpLT5iYXNlVVJMKCkgOiBtX2Jhc2VV
Ukw7CiAgICAgaWYgKCFtX2RlY29kZXIpCiAgICAgICAgIHJldHVybiBLVVJMKGJhc2VVUkwsIHVy
bCk7CiAgICAgcmV0dXJuIEtVUkwoYmFzZVVSTCwgdXJsLCBtX2RlY29kZXItPmVuY29kaW5nKCkp
OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiA2NzMwOSkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI2
MCw2ICsyNjAsNyBAQCBzcGFuCiBzcGVlY2gKIHNwZWxsY2hlY2sKIHNyYworc3JjZG9jCiBzdGFu
ZGJ5CiBzdGFydAogc3RlcApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmgJKHJl
dmlzaW9uIDY3MzA5KQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBIVE1MRnJhbWVFbGVtZW50QmFzZSA6IHB1YmxpYyBIVE1MRnJhbWVPd25lckVsZW1lbnQgewog
cHVibGljOgotICAgIEtVUkwgbG9jYXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtVUkwgbG9j
YXRpb24oKSBjb25zdDsKICAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IFN0cmluZyYpOwogCiAg
ICAgdmlydHVhbCBTY3JvbGxiYXJNb2RlIHNjcm9sbGluZ01vZGUoKSBjb25zdCB7IHJldHVybiBt
X3Njcm9sbGluZzsgfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDY3MzA5KQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJET01XaW5kb3cu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVk
ZSAiU3Vic3RpdHV0ZURhdGEuaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0LmgiCiAKICNpZiBFTkFC
TEUoU1ZHKQpAQCAtMTAwLDQgKzEwMSw5IEBAIFNWR0RvY3VtZW50KiBIVE1MRnJhbWVPd25lckVs
ZW1lbnQ6OmdldFMKIH0KICNlbmRpZgogCitTdWJzdGl0dXRlRGF0YSBIVE1MRnJhbWVPd25lckVs
ZW1lbnQ6OmlubGluZVRleHRSZXNvdXJjZShjb25zdCBLVVJMJikgY29uc3QKK3sKKyAgICByZXR1
cm4gU3Vic3RpdHV0ZURhdGEoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAkocmV2aXNpb24gNjczMDkpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBET01XaW5kb3c7CiBjbGFzcyBG
cmFtZTsKK2NsYXNzIFN1YnN0aXR1dGVEYXRhOwogY2xhc3MgUmVuZGVyUGFydDsKIAogI2lmIEVO
QUJMRShTVkcpCkBAIC01NCw2ICs1NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNjcm9sbGJh
ck1vZGUgc2Nyb2xsaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFNjcm9sbGJhckF1dG87IH0KIAog
ICAgIFNhbmRib3hGbGFncyBzYW5kYm94RmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3NhbmRib3hG
bGFnczsgfQorICAgIAorICAgIHZpcnR1YWwgU3Vic3RpdHV0ZURhdGEgaW5saW5lVGV4dFJlc291
cmNlKGNvbnN0IEtVUkwmKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIEhUTUxGcmFtZU93bmVy
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NzMwOSkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MSUZyYW1lRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKKyNpbmNsdWRlICJTdWJzdGl0dXRlRGF0YS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY4LDEwICs2OSwxMSBAQCBib29sIEhUTUxJRnJhbWVF
bGVtZW50OjptYXBUb0VudHJ5KGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoU0FOREJPWCkKLXN0YXRp
YyBTYW5kYm94RmxhZ3MgcGFyc2VTYW5kYm94QXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cmlidXRl
KQoraW5saW5lIFNhbmRib3hGbGFncyBIVE1MSUZyYW1lRWxlbWVudDo6cGFyc2VTYW5kYm94QXR0
cmlidXRlKEF0dHJpYnV0ZSogYXR0cmlidXRlKQogeworICAgIC8vIFJlbW92ZSB0aGUgc2FuZGJv
eCBvbmx5IGlmIGl0J3Mgbm90IGEgc3JjZG9jCiAgICAgaWYgKGF0dHJpYnV0ZS0+aXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBTYW5kYm94Tm9uZTsKKyAgICAgICAgcmV0dXJuIGhhc0F0dHJpYnV0
ZShzcmNkb2NBdHRyKSA/IFNhbmRib3hBbGwgOiBTYW5kYm94Tm9uZTsKIAogICAgIC8vIFBhcnNl
IHRoZSB1bm9yZGVyZWQgc2V0IG9mIHVuaXF1ZSBzcGFjZS1zZXBhcmF0ZWQgdG9rZW5zLgogICAg
IFNhbmRib3hGbGFncyBmbGFncyA9IFNhbmRib3hBbGw7CkBAIC0xMjcsNiArMTI5LDIxIEBAIHZv
aWQgSFRNTElGcmFtZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAgICAgaWYgKCFhdHRy
LT5pc051bGwoKSAmJiAhYXR0ci0+dmFsdWUoKS50b0ludCgpKQogICAgICAgICAgICAgLy8gQWRk
IGEgcnVsZSB0aGF0IG51bGxzIG91dCBvdXIgYm9yZGVyIHdpZHRoLgogICAgICAgICAgICAgYWRk
Q1NTTGVuZ3RoKGF0dHIsIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsICIwIik7CisgICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cikgeworICAgICAgICBpZiAoIWhhc0F0dHJpYnV0
ZShzcmNkb2NBdHRyKSkKKyAgICAgICAgICAgIHNldExvY2F0aW9uKGRlcHJlY2F0ZWRQYXJzZVVS
TChhdHRyLT52YWx1ZSgpKSk7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc3JjZG9j
QXR0cikgeworICAgICAgICAvLyBOYXZpZ2F0ZSB1c2luZyBzcmMgaWYgc3JjZG9jIGlzIGdldHRp
bmcgY2xlYXJlZC4KKyAgICAgICAgaWYgKGF0dHItPmlzTnVsbCgpKQorICAgICAgICAgICAgc2V0
TG9jYXRpb24oZmFzdEdldEF0dHJpYnV0ZShzcmNBdHRyKSk7CisgICAgICAgIGVsc2UgeworI2lm
IEVOQUJMRShTQU5EQk9YKQorICAgICAgICAgICAgLy8gc3JjZG9jIGltcGxpZXMgc2FuZGJveCwg
aWYgdGhlIGF0dHJpYnV0ZSBpc24ndCBhbHJlYWR5IHByZXNlbnQKKyAgICAgICAgICAgIGlmIChz
YW5kYm94RmxhZ3MoKSA9PSBTYW5kYm94Tm9uZSkKKyAgICAgICAgICAgICAgICBzZXRTYW5kYm94
RmxhZ3MoU2FuZGJveEFsbCk7CisjZW5kaWYKKyAgICAgICAgICAgIHNldExvY2F0aW9uKHNyY2Rv
Y1VSTCgpLnN0cmluZygpKTsKKyAgICAgICAgfQogICAgIH0KICNpZiBFTkFCTEUoU0FOREJPWCkK
ICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc2FuZGJveEF0dHIpCkBAIC0xNjcsNCArMTg0
LDIxIEBAIGJvb2wgSFRNTElGcmFtZUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEEKICAgICByZXR1
cm4gYXR0ci0+bmFtZSgpID09IHNyY0F0dHI7CiB9CiAKK1N1YnN0aXR1dGVEYXRhIEhUTUxJRnJh
bWVFbGVtZW50OjppbmxpbmVUZXh0UmVzb3VyY2UoY29uc3QgS1VSTCYgdXJsKSBjb25zdAorewor
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh1cmwuc3RyaW5nKCksIHNyY2RvY1VSTCgpLnN0cmlu
ZygpKSkgeworICAgICAgICBjb25zdCBTdHJpbmcgc3JjZG9jID0gZmFzdEdldEF0dHJpYnV0ZShI
VE1MTmFtZXM6OnNyY2RvY0F0dHIpOworICAgICAgICBpZiAoIXNyY2RvYy5pc051bGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiBTdWJzdGl0dXRlRGF0YShzcmNkb2MsIGRvY3VtZW50KCktPmlzWEhU
TUxEb2N1bWVudCgpID8gInRleHQveG1sIiA6ICJ0ZXh0L2h0bWwiLCBLVVJMKCksIHNyY2RvY1VS
TCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFN1YnN0aXR1dGVEYXRhKCk7Cit9CisKK0tVUkwgSFRN
TElGcmFtZUVsZW1lbnQ6OmxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIWhhc0F0dHJpYnV0
ZShzcmNkb2NBdHRyKSkKKyAgICAgICAgcmV0dXJuIHNyY2RvY1VSTCgpOworICAgIHJldHVybiBI
VE1MRnJhbWVFbGVtZW50QmFzZTo6bG9jYXRpb24oKTsKK30KKwogfQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxJRnJhbWVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJ
RnJhbWVFbGVtZW50LmgJKHJldmlzaW9uIDY3MzA5KQorKysgV2ViQ29yZS9odG1sL0hUTUxJRnJh
bWVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgSFRNTElGcmFtZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEZyYW1lRWxlbWVu
dEJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxJRnJhbWVFbGVtZW50
PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisgICAgdmlydHVhbCBL
VVJMIGxvY2F0aW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdWJzdGl0dXRlRGF0YSBpbmxpbmVU
ZXh0UmVzb3VyY2UoY29uc3QgS1VSTCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEhUTUxJRnJh
bWVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpAQCAtNDYsNiArNDgs
MTAgQEAgcHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0
cmlidXRlKikgY29uc3Q7CiAKKyNpZiBFTkFCTEUoU0FOREJPWCkKKyAgICBTYW5kYm94RmxhZ3Mg
cGFyc2VTYW5kYm94QXR0cmlidXRlKEF0dHJpYnV0ZSopOworI2VuZGlmCisgICAgCiAgICAgQXRv
bWljU3RyaW5nIG1fbmFtZTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxl
bWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50Lmlk
bAkocmV2aXNpb24gNjczMDkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAg
YXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgc2Nyb2xsaW5nOwogICAgICAgICBhdHRyaWJ1
dGUgW1JlZmxlY3QsIFVSTF0gRE9NU3RyaW5nIHNyYzsKICAgICAgICAgYXR0cmlidXRlIFtSZWZs
ZWN0XSBET01TdHJpbmcgd2lkdGg7CisgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3Ry
aW5nIHNyY2RvYzsKIAogICAgICAgICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyOgogICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0NoZWNrRnJhbWVTZWN1cml0eV0gRG9jdW1lbnQgY29u
dGVudERvY3VtZW50OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24g
NjczMDkpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg0LDYgKzg0LDcgQEAgRG9jdW1lbnRMb2FkZXI6OkRvY3VtZW50TG9hZGVyKGNvbnN0
IFJlcwogICAgICwgbV9wcmltYXJ5TG9hZENvbXBsZXRlKGZhbHNlKQogICAgICwgbV9pc0NsaWVu
dFJlZGlyZWN0KGZhbHNlKQogICAgICwgbV93YXNPbmxvYWRIYW5kbGVkKGZhbHNlKQorICAgICwg
bV9pc0lubGluZVRleHRSZXNvdXJjZShmYWxzZSkKICAgICAsIG1fc3RvcFJlY29yZGluZ1Jlc3Bv
bnNlcyhmYWxzZSkKICAgICAsIG1fc3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lcih0aGlz
LCAmRG9jdW1lbnRMb2FkZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXJGaXJlZCkK
ICAgICAsIG1fZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KGZhbHNlKQpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9E
b2N1bWVudExvYWRlci5oCShyZXZpc2lvbiA2NzMwOSkKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgaGFuZGxlZE9ubG9hZEV2ZW50cygpIHsgbV93YXNPbmxv
YWRIYW5kbGVkID0gdHJ1ZTsgfQogICAgICAgICBib29sIHdhc09ubG9hZEhhbmRsZWQoKSB7IHJl
dHVybiBtX3dhc09ubG9hZEhhbmRsZWQ7IH0KICAgICAgICAgYm9vbCBpc0xvYWRpbmdJbkFQSVNl
bnNlKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNJbmxpbmVUZXh0UmVzb3VyY2UoKSBjb25zdCB7
IHJldHVybiBtX2lzSW5saW5lVGV4dFJlc291cmNlOyB9CisgICAgICAgIHZvaWQgc2V0SXNJbmxp
bmVUZXh0UmVzb3VyY2UoYm9vbCBpc0lubGluZVRleHRSZXNvdXJjZSkgeyBtX2lzSW5saW5lVGV4
dFJlc291cmNlID0gaXNJbmxpbmVUZXh0UmVzb3VyY2U7IH0KICAgICAgICAgdm9pZCBzZXRQcmlt
YXJ5TG9hZENvbXBsZXRlKGJvb2wpOwogICAgICAgICB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmlu
ZyYpOwogICAgICAgICB2b2lkIHNldEljb25VUkwoY29uc3QgU3RyaW5nJik7CkBAIC0yNzIsNiAr
Mjc0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fcHJpbWFyeUxvYWRD
b21wbGV0ZTsKICAgICAgICAgYm9vbCBtX2lzQ2xpZW50UmVkaXJlY3Q7CiAgICAgICAgIGJvb2wg
bV93YXNPbmxvYWRIYW5kbGVkOworICAgICAgICBib29sIG1faXNJbmxpbmVUZXh0UmVzb3VyY2U7
CiAKICAgICAgICAgU3RyaW5nIG1fcGFnZVRpdGxlOwogICAgICAgICBTdHJpbmcgbV9wYWdlSWNv
blVSTDsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAJKHJldmlzaW9uIDY3MzA5KQor
KysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRXcml0
ZXIuaCIKIAorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRE9NSW1wbGVt
ZW50YXRpb24uaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpA
QCAtMTQ4LDExICsxNDksMTQgQEAgdm9pZCBEb2N1bWVudFdyaXRlcjo6YmVnaW4oY29uc3QgS1VS
TCYgdQogVGV4dFJlc291cmNlRGVjb2RlciogRG9jdW1lbnRXcml0ZXI6OmNyZWF0ZURlY29kZXJJ
Zk5lZWRlZCgpCiB7CiAgICAgaWYgKCFtX2RlY29kZXIpIHsKKyAgICAgICAgRnJhbWUqIHBhcmVu
dEZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKKyAgICAgICAgLy8gQW4gaW5saW5l
IHRleHQgcmVzb3VyY2UgaXMgYWxyZWFkeSBhIG5hdGl2ZSBzdHJpbmc7IHRoZSBmaXJzdCBub24t
aW5saW5lIGFuY2VzdG9yIHdpbGwgaGF2ZSB0aGUgb3JpZ2luYWwgZW5jb2RpbmcuCisgICAgICAg
IHdoaWxlIChwYXJlbnRGcmFtZSAmJiBwYXJlbnRGcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9h
ZGVyKCktPmlzSW5saW5lVGV4dFJlc291cmNlKCkpCisgICAgICAgICAgICBwYXJlbnRGcmFtZSA9
IHBhcmVudEZyYW1lLT50cmVlKCktPnBhcmVudCgpOwogICAgICAgICBpZiAoU2V0dGluZ3MqIHNl
dHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKSkgewogICAgICAgICAgICAgbV9kZWNvZGVyID0g
VGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKG1fbWltZVR5cGUsCiAgICAgICAgICAgICAgICAg
c2V0dGluZ3MtPmRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCksCiAgICAgICAgICAgICAgICAgc2V0
dGluZ3MtPnVzZXNFbmNvZGluZ0RldGVjdG9yKCkpOwotICAgICAgICAgICAgRnJhbWUqIHBhcmVu
dEZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKICAgICAgICAgICAgIC8vIFNldCB0
aGUgaGludCBlbmNvZGluZyB0byB0aGUgcGFyZW50IGZyYW1lIGVuY29kaW5nIG9ubHkgaWYKICAg
ICAgICAgICAgIC8vIHRoZSBwYXJlbnQgYW5kIHRoZSBjdXJyZW50IGZyYW1lcyBzaGFyZSB0aGUg
c2VjdXJpdHkgb3JpZ2luLgogICAgICAgICAgICAgLy8gV2UgaW1wb3NlIHRoaXMgY29uZGl0aW9u
IGJlY2F1c2Ugc29tZWJvZHkgY2FuIG1ha2UgYSBjaGlsZCBmcmFtZSAKQEAgLTE2Niw3ICsxNzAs
NiBAQCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBEb2N1bWVudFdyaXRlcjo6Y3JlCiAgICAgICAgICAg
ICAgICAgbV9kZWNvZGVyLT5zZXRIaW50RW5jb2RpbmcocGFyZW50RnJhbWUtPmRvY3VtZW50KCkt
PmRlY29kZXIoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4
dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKG1fbWltZVR5cGUsIFN0cmluZygpKTsKLSAgICAgICAg
RnJhbWUqIHBhcmVudEZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKICAgICAgICAg
aWYgKG1fZW5jb2RpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoY2FuUmVmZXJUb1Bh
cmVudEZyYW1lRW5jb2RpbmcobV9mcmFtZSwgcGFyZW50RnJhbWUpKQogICAgICAgICAgICAgICAg
IG1fZGVjb2Rlci0+c2V0RW5jb2RpbmcocGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmlucHV0RW5j
b2RpbmcoKSwgVGV4dFJlc291cmNlRGVjb2Rlcjo6RW5jb2RpbmdGcm9tUGFyZW50RnJhbWUpOwpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNjczMDkpCisrKyBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTEsNyArMTM5MSwxMCBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkKGNvbnN0IFJlc291cmNlUmVxCiAKIHZvaWQgRnJhbWVM
b2FkZXI6OmxvYWRXaXRoTmF2aWdhdGlvbkFjdGlvbihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIGFjdGlvbiwgYm9vbCBsb2NrSGlzdG9yeSwg
RnJhbWVMb2FkVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlKQogewot
ICAgIFJlZlB0cjxEb2N1bWVudExvYWRlcj4gbG9hZGVyID0gbV9jbGllbnQtPmNyZWF0ZURvY3Vt
ZW50TG9hZGVyKHJlcXVlc3QsIFN1YnN0aXR1dGVEYXRhKCkpOworICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgaGF2ZSBhIGdlbmVyaWMgd2F5IHRvIHN1cHBseSBjb250ZW50IGFzc29jaWF0ZWQgd2l0
aCBhIGdpdmVuIGxvYWQsIHJhdGhlciB0aGFuIGNoZWNraW5nIHRoZSBmcmFtZSBoZXJlCisgICAg
U3Vic3RpdHV0ZURhdGEgc3Vic3RpdHV0ZURhdGEgPSBtX2ZyYW1lLT5vd25lckVsZW1lbnQoKSA/
IG1fZnJhbWUtPm93bmVyRWxlbWVudCgpLT5pbmxpbmVUZXh0UmVzb3VyY2UocmVxdWVzdC51cmwo
KSkgOiBTdWJzdGl0dXRlRGF0YSgpOworICAgIFJlZlB0cjxEb2N1bWVudExvYWRlcj4gbG9hZGVy
ID0gbV9jbGllbnQtPmNyZWF0ZURvY3VtZW50TG9hZGVyKHJlcXVlc3QsIHN1YnN0aXR1dGVEYXRh
KTsKKyAgICBsb2FkZXItPnNldElzSW5saW5lVGV4dFJlc291cmNlKHN1YnN0aXR1dGVEYXRhLmlz
VmFsaWQoKSk7CiAgICAgaWYgKGxvY2tIaXN0b3J5ICYmIG1fZG9jdW1lbnRMb2FkZXIpCiAgICAg
ICAgIGxvYWRlci0+c2V0Q2xpZW50UmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5KG1fZG9jdW1lbnRM
b2FkZXItPmRpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeSgpID8gbV9kb2N1bWVudExvYWRlci0+
dXJsRm9ySGlzdG9yeSgpIDogbV9kb2N1bWVudExvYWRlci0+Y2xpZW50UmVkaXJlY3RTb3VyY2VG
b3JIaXN0b3J5KCkpOwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJzdGl0dXRlRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvU3Vic3RpdHV0ZURhdGEuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9sb2FkZXIvU3Vic3RpdHV0ZURhdGEuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTdWJzdGl0dXRlRGF0YS5oIgorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisKK3N0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcm
IGRlZmF1bHRUZXh0RW5jb2RpbmcoKQoreworI2lmIENQVShCSUdfRU5ESUFOKSB8fCBDUFUoTUlE
RExFX0VORElBTikKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywg
c19kZWZhdWx0VGV4dEVuY29kaW5nLCAoIlVURi0xNkJFIikpOworI2Vsc2UKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgc19kZWZhdWx0VGV4dEVuY29kaW5nLCAo
IlVURi0xNkxFIikpOworI2VuZGlmCisgICAgcmV0dXJuIHNfZGVmYXVsdFRleHRFbmNvZGluZzsK
K30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3MgU3Vic3RpdHV0ZUNvbnRlbnRC
dWZmZXIgOiBwdWJsaWMgU3Vic3RpdHV0ZURhdGE6OkNvbnRlbnQgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN1YnN0aXR1dGVDb250ZW50QnVmZmVyPiBjcmVhdGUoUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU3Vic3RpdHV0ZUNvbnRlbnRCdWZmZXIoYnVmZmVyKSk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBTdWJzdGl0dXRlQ29udGVudEJ1ZmZlcihQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
YnVmZmVyKSA6IG1fYnVmZmVyKGJ1ZmZlcikgeyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBk
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXItPmRhdGEoKTsgfQorICAgIHZpcnR1YWwgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci0+c2l6ZSgpOyB9CisgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gbV9idWZmZXI7Cit9OworCitjbGFzcyBTdWJzdGl0dXRlQ29udGVudFN0
cmluZyA6IHB1YmxpYyBTdWJzdGl0dXRlRGF0YTo6Q29udGVudCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3Vic3RpdHV0ZUNvbnRlbnRTdHJpbmc+IGNyZWF0ZShjb25zdCBTdHJp
bmcmIHN0cmluZykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3Vic3RpdHV0
ZUNvbnRlbnRTdHJpbmcoc3RyaW5nKSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBTdWJz
dGl0dXRlQ29udGVudFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykgOiBtX3N0cmluZyhzdHJp
bmcpIHsgfQorICAgIC8vIFdlIG5lZWQgdG8gdHJlYXQgdGhlIFVDaGFyIGFycmF5IGFzIGEgcmF3
IGJ5dGUgYnVmZmVyIChoZW5jZSB0aGUgY2FzdCkKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRh
dGEoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtX3N0cmlu
Zy5jaGFyYWN0ZXJzKCkpOyB9CisgICAgdmlydHVhbCBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyaW5nLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsgfQorICAgIFN0cmluZyBtX3N0
cmluZzsKK307CisKK1N1YnN0aXR1dGVEYXRhOjpTdWJzdGl0dXRlRGF0YSgpIHsgfQorCitTdWJz
dGl0dXRlRGF0YTo6U3Vic3RpdHV0ZURhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZl
ciwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmcsIGNv
bnN0IEtVUkwmIGZhaWxpbmdVUkwsIGNvbnN0IEtVUkwmIHJlc3BvbnNlVVJMKQorICAgIDogbV9j
b250ZW50KFN1YnN0aXR1dGVDb250ZW50QnVmZmVyOjpjcmVhdGUoYnVmZmVyKSkKKyAgICAsIG1f
bWltZVR5cGUobWltZVR5cGUpCisgICAgLCBtX3RleHRFbmNvZGluZyh0ZXh0RW5jb2RpbmcpCisg
ICAgLCBtX2ZhaWxpbmdVUkwoZmFpbGluZ1VSTCkKKyAgICAsIG1fcmVzcG9uc2VVUkwocmVzcG9u
c2VVUkwpCit7Cit9CisKK1N1YnN0aXR1dGVEYXRhOjpTdWJzdGl0dXRlRGF0YShjb25zdCBTdHJp
bmcmIHN0cmluZywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgS1VSTCYgZmFpbGluZ1VS
TCwgY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwpCisgICAgOiBtX2NvbnRlbnQoU3Vic3RpdHV0ZUNv
bnRlbnRTdHJpbmc6OmNyZWF0ZShzdHJpbmcpKQorICAgICwgbV9taW1lVHlwZShtaW1lVHlwZSkK
KyAgICAsIG1fdGV4dEVuY29kaW5nKGRlZmF1bHRUZXh0RW5jb2RpbmcoKSkKKyAgICAsIG1fZmFp
bGluZ1VSTChmYWlsaW5nVVJMKQorICAgICwgbV9yZXNwb25zZVVSTChyZXNwb25zZVVSTCkKK3sK
K30KKworfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3Vic3RpdHV0ZURhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJzdGl0dXRlRGF0YS5oCShyZXZpc2lvbiA2NzMwOSkKKysr
IFdlYkNvcmUvbG9hZGVyL1N1YnN0aXR1dGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDggKzI4LDgg
QEAKICNkZWZpbmUgU3Vic3RpdHV0ZURhdGFfaAogCiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAKQEAgLTM2LDI3ICszNywyNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICBjbGFzcyBTdWJzdGl0dXRlRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBTdWJz
dGl0dXRlRGF0YSgpIHsgfQotCi0gICAgICAgIFN1YnN0aXR1dGVEYXRhKFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBjb250ZW50LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcm
IHRleHRFbmNvZGluZywgY29uc3QgS1VSTCYgZmFpbGluZ1VSTCwgY29uc3QgS1VSTCYgcmVzcG9u
c2VVUkwgPSBLVVJMKCkpCi0gICAgICAgICAgICA6IG1fY29udGVudChjb250ZW50KQotICAgICAg
ICAgICAgLCBtX21pbWVUeXBlKG1pbWVUeXBlKQotICAgICAgICAgICAgLCBtX3RleHRFbmNvZGlu
Zyh0ZXh0RW5jb2RpbmcpCi0gICAgICAgICAgICAsIG1fZmFpbGluZ1VSTChmYWlsaW5nVVJMKQot
ICAgICAgICAgICAgLCBtX3Jlc3BvbnNlVVJMKHJlc3BvbnNlVVJMKQotICAgICAgICB7Ci0gICAg
ICAgIH0KKyAgICAgICAgU3Vic3RpdHV0ZURhdGEoKTsKKyAgICAgICAgU3Vic3RpdHV0ZURhdGEo
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBLVVJMJiwgY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwgPSBLVVJMKCkpOworICAgICAgICBT
dWJzdGl0dXRlRGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBLVVJMJiwg
Y29uc3QgS1VSTCYgcmVzcG9uc2VVUkwgPSBLVVJMKCkpOworICAgICAgICAKKyAgICAgICAgY2xh
c3MgQ29udGVudCA6IHB1YmxpYyBSZWZDb3VudGVkPENvbnRlbnQ+IHsKKyAgICAgICAgcHVibGlj
OgorICAgICAgICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgPSAwOworICAg
ICAgICAgICAgdmlydHVhbCBzaXplX3Qgc2l6ZSgpIGNvbnN0ID0gMDsKKyAgICAgICAgICAgIHZp
cnR1YWwgfkNvbnRlbnQoKSB7IH0KKyAgICAgICAgfTsKIAogICAgICAgICBib29sIGlzVmFsaWQo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnQgIT0gMDsgfQotCi0gICAgICAgIGNvbnN0IFNoYXJl
ZEJ1ZmZlciogY29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudC5nZXQoKTsgfQorICAg
ICAgICBjb25zdCBDb250ZW50KiBjb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50Lmdl
dCgpOyB9CiAgICAgICAgIGNvbnN0IFN0cmluZyYgbWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBt
X21pbWVUeXBlOyB9CiAgICAgICAgIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0RW5jb2Rpbmc7IH0KICAgICAgICAgY29uc3QgS1VSTCYgZmFpbGluZ1VS
TCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGluZ1VSTDsgfQogICAgICAgICBjb25zdCBLVVJMJiBy
ZXNwb25zZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2VVUkw7IH0KICAgICAgICAgCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9jb250ZW50OworICAg
ICAgICBSZWZQdHI8Q29udGVudD4gbV9jb250ZW50OwogICAgICAgICBTdHJpbmcgbV9taW1lVHlw
ZTsKICAgICAgICAgU3RyaW5nIG1fdGV4dEVuY29kaW5nOwogICAgICAgICBLVVJMIG1fZmFpbGlu
Z1VSTDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gNjczMDkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL0tVUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODE2LDYgKzE4MTYsMTIgQEAgY29uc3Qg
S1VSTCYgYmxhbmtVUkwoKQogICAgIHJldHVybiBzdGF0aWNCbGFua1VSTDsKIH0KIAorY29uc3Qg
S1VSTCYgc3JjZG9jVVJMKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEtVUkwsIHN0YXRp
Y1NyY2RvY1VSTCwgKFBhcnNlZFVSTFN0cmluZywgImFib3V0OnNyY2RvYyIpKTsKKyAgICByZXR1
cm4gc3RhdGljU3JjZG9jVVJMOworfQorCiAjaWZuZGVmIE5ERUJVRwogdm9pZCBLVVJMOjpwcmlu
dCgpIGNvbnN0CiB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuaAkocmV2aXNpb24gNjczMDkpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL0tVUkwuaAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDYgKzI1NSw3IEBAIGJvb2wgZXF1
YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihjb24KIGJvb2wgcHJvdG9jb2xIb3N0QW5kUG9y
dEFyZUVxdWFsKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CiAgICAgCiBjb25zdCBLVVJMJiBi
bGFua1VSTCgpOworY29uc3QgS1VSTCYgc3JjZG9jVVJMKCk7CiAKIC8vIEZ1bmN0aW9ucyB0byBk
byBVUkwgb3BlcmF0aW9ucyBvbiBzdHJpbmdzLgogLy8gVGhlc2UgYXJlIG9wZXJhdGlvbnMgdGhh
dCBhcmVuJ3QgZmFzdGVyIG9uIGEgcGFyc2VkIFVSTC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
S1VSTEdvb2dsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xl
LmNwcAkocmV2aXNpb24gNjczMDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0tVUkxHb29nbGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDgwLDYgKzEwODAsMTIgQEAgY29uc3QgS1VSTCYgYmxhbmtV
UkwoKQogICAgIHJldHVybiBzdGF0aWNCbGFua1VSTDsKIH0KIAorY29uc3QgS1VSTCYgc3JjZG9j
VVJMKCkKK3sKKyAgICBzdGF0aWMgS1VSTCBzdGF0aWNTcmNkb2NVUkwoUGFyc2VkVVJMU3RyaW5n
LCAiYWJvdXQ6c3JjZG9jIik7CisgICAgcmV0dXJuIHN0YXRpY1NyY2RvY1VSTDsKK30KKwogYm9v
bCBwcm90b2NvbElzKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBjaGFyKiBwcm90b2NvbCkKIHsK
ICAgICAvLyBEbyB0aGUgY29tcGFyaXNvbiB3aXRob3V0IG1ha2luZyBhIG5ldyBzdHJpbmcgb2Jq
ZWN0LgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjczMTApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0wOS0xMSAgSnVzdGluIFNjaHVo
ICA8anNjaHVoQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgaWZyYW1lLnNyY2RvYworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM2ODMKKworICAgICAgICAqIGZhc3Qv
ZnJhbWVzL2lmcmFtZS1zcmNkb2MtbG9hZGluZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbG9hZGluZy5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLW5hdmlnYXRlLXNlbGYtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLW5hdmlnYXRlLXNl
bGYuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1uYXZp
Z2F0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mcmFtZXMvaWZyYW1l
LXNyY2RvYy1uYXZpZ2F0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA5LTExICBNYXJ0aW4gUm9i
aW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBBZGQgYSBwbGF0Zm9ybS1z
cGVjaWZpYyByZXN1bHQgYWZ0ZXIgcjY3MjgxLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mcmFt
ZXMvaWZyYW1lLXNyY2RvYy1sb2FkaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLWxvYWRpbmctZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1sb2Fk
aW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBAQAorVGhpcyB0ZXN0
IHZlcmlmaWVzIHRoYXQgc3JjZG9jIGxvYWRpbmcgb2NjdXJzIGNvcnJlY3RseSBhbmQgZmlyZXMg
dGhlIGNvcnJlY3QgZXZlbnRzLiBJdCBhbHNvIHZlcmlmaWVzIHRoYXQgYSBub24tbnVsbCBzcmNk
b2MgYXR0cmlidXRlIHByZXZlbnRzIGFueSBuYXZpZ2F0aW9uIGV2ZW50cyB3aGVuIHNyYyBpcyBt
b2RpZmllZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9jdW1lbnQubG9jYXRpb24u
dG9TdHJpbmcoKSBpcyAnYWJvdXQ6c3JjZG9jJworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5ib2R5LnRleHRDb250ZW50IGlzICdU
aGlzIGlzIHRoZSBzcmNkb2MgZnJhbWUuJworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c3JjZG9jRnJhbWVJZCcpLnNyYyBpcyAnaHR0cDovL2V4YW1wbGUuY29tLycKK1BBU1MgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9jdW1lbnQubG9jYXRp
b24udG9TdHJpbmcoKSBpcyAnYWJvdXQ6c3JjZG9jJworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5ib2R5LnRleHRDb250ZW50IGlz
ICdUaGlzIGlzIHRoZSBzcmNkb2MgZnJhbWUuJworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnc3JjZG9jRnJhbWVJZCcpLnNyYyBpcyAnJworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5sb2NhdGlvbi50b1N0cmluZygpIGlz
ICdhYm91dDpzcmNkb2MnCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFt
ZUlkJykuY29udGVudERvY3VtZW50LmJvZHkudGV4dENvbnRlbnQgaXMgJ1RoaXMgaXMgdGhlIHNy
Y2RvYyBmcmFtZS4nCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlk
Jykuc3JjIGlzICdhYm91dDpibGFuaycKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1l
LXNyY2RvYy1sb2FkaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mcmFt
ZXMvaWZyYW1lLXNyY2RvYy1sb2FkaW5nLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLWxvYWRpbmcuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1NSBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
K2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworfQorCitmdW5jdGlvbiBzcmNkb2NMb2FkaW5nVGVzdCgpIHsKKyAgICAvLyBUZXN0IGxv
YWRpbmcgYXQgcGFyc2luZy4KKyAgICBzaG91bGRCZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9jdW1lbnQubG9jYXRpb24udG9TdHJpbmcoKSIsICIn
YWJvdXQ6c3JjZG9jJyIpOworICAgIHNob3VsZEJlKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5ib2R5LnRleHRDb250ZW50IiwgIidUaGlz
IGlzIHRoZSBzcmNkb2MgZnJhbWUuJyIpOworICAgIHNob3VsZEJlKCJkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLnNyYyIsICInaHR0cDovL2V4YW1wbGUuY29tLyciKTsK
KyAgICB2YXIgZjEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpOwor
ICAgIHZhciBmMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgIGYyLnNy
Y2RvYyA9IGYxLnNyY2RvYzsKKyAgICAKKyAgICAvLyBUZXN0IGxvYWRpbmcgb2YgYSBkeW5hbWlj
YWxseSBjcmVhdGVkIGZyYW1lCisgICAgZjIub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IGYxLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZjEpOworICAgICAgICBmMi5pZCA9ICJzcmNkb2NG
cmFtZUlkIjsKKyAgICAgICAgc2hvdWxkQmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNk
b2NGcmFtZUlkJykuY29udGVudERvY3VtZW50LmxvY2F0aW9uLnRvU3RyaW5nKCkiLCAiJ2Fib3V0
OnNyY2RvYyciKTsKKyAgICAgICAgc2hvdWxkQmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdz
cmNkb2NGcmFtZUlkJykuY29udGVudERvY3VtZW50LmJvZHkudGV4dENvbnRlbnQiLCAiJ1RoaXMg
aXMgdGhlIHNyY2RvYyBmcmFtZS4nIik7CisgICAgICAgIHNob3VsZEJlKCJkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLnNyYyIsICInJyIpOworICAgICAgICBmMi5zcmMg
PSAiYWJvdXQ6YmxhbmsiOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSBzZXR0aW5nIHNyYyBkb2Vz
bid0IHRyaWdnZXIgbmF2aWdhdGlvbiBhd2F5LiAoTmVlZCBzZXRUaW1lb3V0IGJlY2F1c2Ugd2Un
cmUgbG9va2luZyBmb3IgdGhlIGFic2VuY2Ugb2YgYSBsb2FkLikKKyAgICAgICAgc2V0VGltZW91
dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNob3VsZEJlKCJkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5sb2NhdGlvbi50b1N0cmluZygp
IiwgIidhYm91dDpzcmNkb2MnIik7CisgICAgICAgICAgICBzaG91bGRCZSgiZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9jdW1lbnQuYm9keS50ZXh0Q29u
dGVudCIsICInVGhpcyBpcyB0aGUgc3JjZG9jIGZyYW1lLiciKTsKKyAgICAgICAgICAgIHNob3Vs
ZEJlKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLnNyYyIsICInYWJv
dXQ6YmxhbmsnIik7CisgICAgICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICB3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9LCAyMCk7
CisgICAgfQorICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZjIpOworfQorPC9zY3JpcHQ+
Cis8aGVhZD4KKzxib2R5PgorICAgIDxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorICAgIDxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorICAgIDxpZnJhbWUgaWQ9InNyY2RvY0ZyYW1lSWQiIHNyYz0i
aHR0cDovL2V4YW1wbGUuY29tLyIgb25sb2FkPSJzcmNkb2NMb2FkaW5nVGVzdCgpIgorICAgICAg
ICBzcmNkb2M9IjxodG1sPjxib2R5PlRoaXMgaXMgdGhlIHNyY2RvYyBmcmFtZS48L2JvZHk+PC9o
dG1sPiI+PC9pZnJhbWU+CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgIGRlc2NyaXB0aW9uKCJU
aGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBzcmNkb2MgbG9hZGluZyBvY2N1cnMgY29ycmVjdGx5IGFu
ZCBmaXJlcyB0aGUgY29ycmVjdCBldmVudHMuICIKKyAgICAgICAgICAgICAgICAgICAgKyAiSXQg
YWxzbyB2ZXJpZmllcyB0aGF0IGEgbm9uLW51bGwgc3JjZG9jIGF0dHJpYnV0ZSBwcmV2ZW50cyBh
bnkgbmF2aWdhdGlvbiBldmVudHMgd2hlbiBzcmMgaXMgbW9kaWZpZWQuIik7CisgICAgICAgIHZh
ciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgICAgICA8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbmF2
aWdhdGUtc2VsZi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9m
cmFtZXMvaWZyYW1lLXNyY2RvYy1uYXZpZ2F0ZS1zZWxmLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbmF2aWdhdGUtc2Vs
Zi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEgQEAKK1RoaXMgdGVzdCB2
ZXJpZmllcyBhIHNyY2RvYyBjb250ZXh0IGNhbiBiZSBuYXZpZ2F0ZWQgYnkgc2V0dGluZyB0aGUg
c3JjZG9jIGF0dHJpYnV0ZSBvciBieSBuYXZpZ2F0aW5nIHRvIGFib3V0OnNyY2RvYyB3aGVuIHRo
ZSBzcmNkb2MgYXR0cmlidXRlIGlzIHByZXNlbnQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlkJykuY29u
dGVudERvY3VtZW50LmxvY2F0aW9uLnRvU3RyaW5nKCkgaXMgJ2Fib3V0OnNyY2RvYycKK1BBU1Mg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9jdW1lbnQu
Ym9keS50ZXh0Q29udGVudCBpcyAnVGhpcyBpcyB0aGUgc3JjZG9jIGZyYW1lLicKK1BBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9jdW1lbnQubG9j
YXRpb24uaHJlZi50b1N0cmluZygpIGlzICdhYm91dDpibGFuaycKK1BBU1MgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9jdW1lbnQuYm9keS50ZXh0Q29u
dGVudCBpcyAnJworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcp
LmNvbnRlbnREb2N1bWVudC5sb2NhdGlvbi50b1N0cmluZygpIGlzICdhYm91dDpzcmNkb2MnCitQ
QVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlkJykuY29udGVudERvY3Vt
ZW50LmJvZHkudGV4dENvbnRlbnQgaXMgJ1RoaXMgaXMgdGhlIHNyY2RvYyBmcmFtZS4nCitQQVNT
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlkJykuY29udGVudERvY3VtZW50
LmxvY2F0aW9uLnRvU3RyaW5nKCkgaXMgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0Zy
YW1lSWQnKS5zcmMKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQn
KS5jb250ZW50RG9jdW1lbnQuYm9keS50ZXh0Q29udGVudCBpcyAnJworUEFTUyBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5sb2NhdGlvbi50
b1N0cmluZygpIGlzICdhYm91dDpzcmNkb2MnCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdzcmNkb2NGcmFtZUlkJykuY29udGVudERvY3VtZW50LmJvZHkudGV4dENvbnRlbnQgaXMgJycK
K1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9j
dW1lbnQubG9jYXRpb24udG9TdHJpbmcoKSBpcyAnYWJvdXQ6c3JjZG9jJworUEFTUyBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5ib2R5LnRl
eHRDb250ZW50IGlzICdUaGlzIGlzIHRoZSBzcmNkb2MgZnJhbWUuJworUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbmF2aWdhdGUtc2VsZi5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbmF2aWdhdGUtc2VsZi5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1u
YXZpZ2F0ZS1zZWxmLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAKKzxodG1sPgor
PGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9
CisKK3ZhciBuYXZpZ2F0aW9uU3RhdGUgPSAwOwordmFyIHNhdmVkU3JjZG9jOworZnVuY3Rpb24g
bmF2aWdhdGVGcmFtZXMoKQoreworICAgIHN3aXRjaCgrK25hdmlnYXRpb25TdGF0ZSkgeworICAg
IGNhc2UgMTogLy8gSW5pdGlhbCBsb2FkCisgICAgICAgIHNyY2RvY0ZyYW1lID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKTsKKyAgICAgICAgc2hvdWxkQmUoImRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlkJykuY29udGVudERvY3VtZW50LmxvY2F0
aW9uLnRvU3RyaW5nKCkiLCAiJ2Fib3V0OnNyY2RvYyciKTsKKyAgICAgICAgc2hvdWxkQmUoImRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlkJykuY29udGVudERvY3VtZW50LmJv
ZHkudGV4dENvbnRlbnQiLCAiJ1RoaXMgaXMgdGhlIHNyY2RvYyBmcmFtZS4nIik7CisgICAgICAg
IHNyY2RvY0ZyYW1lLmNvbnRlbnREb2N1bWVudC5sb2NhdGlvbi5hc3NpZ24oImFib3V0OmJsYW5r
Iik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAyOiAvLyBOYXZpZ2F0ZWQgdG8gYWJvdXQ6
YmxhbmsKKyAgICAgICAgc2hvdWxkQmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NG
cmFtZUlkJykuY29udGVudERvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9TdHJpbmcoKSIsICInYWJv
dXQ6YmxhbmsnIik7CisgICAgICAgIHNob3VsZEJlKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5ib2R5LnRleHRDb250ZW50IiwgIicnIik7
CisgICAgICAgIHNhdmVkU3JjZG9jID0gc3JjZG9jRnJhbWUuc3JjZG9jOworICAgICAgICBzcmNk
b2NGcmFtZS5jb250ZW50RG9jdW1lbnQubG9jYXRpb24uYXNzaWduKCJBQk9VVDpTUkNET0MiKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDM6IC8vIE5hdmlnYXRlZCB0byBBQk9VVDpTUkNE
T0MKKyAgICAgICAgc2hvdWxkQmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFt
ZUlkJykuY29udGVudERvY3VtZW50LmxvY2F0aW9uLnRvU3RyaW5nKCkiLCAiJ2Fib3V0OnNyY2Rv
YyciKTsKKyAgICAgICAgc2hvdWxkQmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NG
cmFtZUlkJykuY29udGVudERvY3VtZW50LmJvZHkudGV4dENvbnRlbnQiLCAiJ1RoaXMgaXMgdGhl
IHNyY2RvYyBmcmFtZS4nIik7CisgICAgICAgIHNhdmVkU3JjZG9jID0gc3JjZG9jRnJhbWUuc3Jj
ZG9jOworICAgICAgICBzcmNkb2NGcmFtZS5zcmNkb2MgPSBudWxsOworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgNDogLy8gTmF2aWdhdGVkIHRvIHNyYyBhdHRyaWJ1dGUgYWZ0ZXIgc3JjZG9j
IGNsZWFyZWQgCisgICAgICAgIHNob3VsZEJlKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3Jj
ZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5sb2NhdGlvbi50b1N0cmluZygpIiwgImRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlkJykuc3JjIik7CisgICAgICAgIHNob3Vs
ZEJlKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1
bWVudC5ib2R5LnRleHRDb250ZW50IiwgIicnIik7CisgICAgICAgIHNyY2RvY0ZyYW1lLmNvbnRl
bnREb2N1bWVudC5sb2NhdGlvbi5hc3NpZ24oImFib3V0OnNyY2RvYyIpOworICAgICAgICBicmVh
azsKKworICAgIGNhc2UgNTogLy8gTmF2aWdhdGVkIHRvIGFuIGVtcHR5IGFib3V0OiBjb250ZXh0
IGJlY2F1c2Ugbm8gc3JjZG9jIGlzIHByZXNlbnQKKyAgICAgICAgc2hvdWxkQmUoImRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlkJykuY29udGVudERvY3VtZW50LmxvY2F0aW9u
LnRvU3RyaW5nKCkiLCAiJ2Fib3V0OnNyY2RvYyciKTsKKyAgICAgICAgc2hvdWxkQmUoImRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlkJykuY29udGVudERvY3VtZW50LmJvZHku
dGV4dENvbnRlbnQiLCAiJyciKTsKKyAgICAgICAgc3JjZG9jRnJhbWUuc3JjZG9jID0gc2F2ZWRT
cmNkb2M7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSA2OiAvLyBOYXZpZ2F0ZWQgdG8gYWJv
dXQ6c3JjZG9jIGJ5IHNldHRpbmcgYSBuZXcgc3JjZG9jCisgICAgICAgIHNob3VsZEJlKCJkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5sb2Nh
dGlvbi50b1N0cmluZygpIiwgIidhYm91dDpzcmNkb2MnIik7CisgICAgICAgIHNob3VsZEJlKCJk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5i
b2R5LnRleHRDb250ZW50IiwgIidUaGlzIGlzIHRoZSBzcmNkb2MgZnJhbWUuJyIpOworICAgICAg
ICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCis8L3NjcmlwdD4KKzwvaGVhZD4K
KworPGJvZHk+CisgICAgPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+CisgICAgPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+CisKKyAgICA8aWZyYW1lIGlkPSJzcmNkb2NGcmFtZUlkIiBzcmM9InJlc291
cmNlcy9lbXB0eS1ib2R5Lmh0bWwiCisgICAgICAgICAgICBzcmNkb2M9IjxodG1sPjxib2R5PlRo
aXMgaXMgdGhlIHNyY2RvYyBmcmFtZS48L2JvZHk+PC9odG1sPiIKKyAgICAgICAgICAgIG9ubG9h
ZD0ibmF2aWdhdGVGcmFtZXMoKSI+CisgICAgPC9pZnJhbWU+CisgICAgPHNjcmlwdD4KKyAgICBk
ZXNjcmlwdGlvbigiVGhpcyB0ZXN0IHZlcmlmaWVzIGEgc3JjZG9jIGNvbnRleHQgY2FuIGJlIG5h
dmlnYXRlZCBieSBzZXR0aW5nIHRoZSBzcmNkb2MgYXR0cmlidXRlICIKKyAgICAgICAgICAgICAg
ICArICJvciBieSBuYXZpZ2F0aW5nIHRvIGFib3V0OnNyY2RvYyB3aGVuIHRoZSBzcmNkb2MgYXR0
cmlidXRlIGlzIHByZXNlbnQuIik7CisgICAgdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
CisgICAgPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbmF2aWdhdGlvbi1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUt
c3JjZG9jLW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEx
IEBACitUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBhbiBpZnJhbWUgd2l0aCBhIHNyZG9jIENBTiBu
YXZpZ2F0ZSBib3RoIGl0c2VsZiBhbmQgYSBjaGlsZCBpbiB0aGUgZnJhbWUgdHJlZS4gSXQgYWxz
byB2ZXJpZmllcyB0aGF0IHRoZSBpbXBsaWNpdCBzYW5kYm94IGF0dHJpYnV0ZSByZW1haW5zIGlu
dGFjdCBhZnRlciBhIGZyYW1lIGhhcyBiZWVuIG5hdmlnYXRlZCwgYW5kIHRoYXQgc2FuZGJveCBh
dHRyaWJ1dGVzIGFyZSBwcm9wYWdhdGVkIHRocm91Z2ggdGhlIGZyYW1lIGhpZXJhcmNoeS4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgKHNlbGYuc2FuZGJveGVkRnJhbWUu
ZnJhbWVXaXRoUGx1Z2luLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbHVnaW4nKS5kZXN0cm95
U3RyZWFtKSA9PSB1bmRlZmluZWQgaXMgdHJ1ZQorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnc2FuZGJveGVkRnJhbWVJZCcpLnNhbmRib3ggaXMgJ2FsbG93LXNjcmlwdHMgYWxsb3ctc2Ft
ZS1vcmlnaW4nCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1uYXZpZ2F0
aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNy
Y2RvYy1uYXZpZ2F0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zy
YW1lcy9pZnJhbWUtc3JjZG9jLW5hdmlnYXRpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3MCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gY2hpbGRGcmFtZVdhc05hdmlnYXRlZCgpCit7
CisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgY2hpbGQgZnJhbWUgd2FzIHVuYWJsZSB0byBsb2FkIGEg
cGx1Z2luLCBzaW5jZSBpdHMgcGFyZW50IGlzIHNhbmRib3hlZC4KKyAgICBzaG91bGRCZVRydWUo
IihzZWxmLnNhbmRib3hlZEZyYW1lLmZyYW1lV2l0aFBsdWdpbi5kb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgncGx1Z2luJykuZGVzdHJveVN0cmVhbSkgPT0gdW5kZWZpbmVkIik7CisgICAgCisgICAg
Ly8gV2hlbiB0aGUgY2hpbGQgZnJhbWUgKGdyYW5kY2hpbGQgb2YgdGhlIG1haW4gd2luZG93KSBo
YXMgYmVlbiBuYXZpZ2F0ZWQsCisgICAgLy8gbWFrZSB0aGUgc2FuZGJveGVkIGZyYW1lIG5hdmln
YXRlIGl0c2VsZgorICAgIHNlbGYuc2FuZGJveGVkRnJhbWUubG9jYXRpb24uYXNzaWduKCJqYXZh
c2NyaXB0OiB0b3Auc2FuZGJveFdhc05hdmlnYXRlZCgpOyIpOworfQorCitmdW5jdGlvbiBzYW5k
Ym94V2FzTmF2aWdhdGVkKCkKK3sKKyAgICBzaG91bGRCZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3NhbmRib3hlZEZyYW1lSWQnKS5zYW5kYm94IiwgIidhbGxvdy1zY3JpcHRzIGFsbG93LXNh
bWUtb3JpZ2luJyIpOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisKKyAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cisg
ICAgPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
CisKKyAgICA8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4i
CisgICAgICAgICAgICBuYW1lPSJzYW5kYm94ZWRGcmFtZSIKKyAgICAgICAgICAgIGlkPSJzYW5k
Ym94ZWRGcmFtZUlkIgorICAgICAgICAgICAgc3JjZG9jPSIKKwkJCTxodG1sPgorCQkJPGhlYWQ+
CisJCQk8c2NyaXB0PgorCQkJZnVuY3Rpb24gbW9kaWZ5KCkKKwkJCXsKKwkJCSAgICBzZWxmLm5h
dmlnYXRlZC5sb2NhdGlvbi5hc3NpZ24oJnF1b3Q7amF2YXNjcmlwdDogdG9wLmNoaWxkRnJhbWVX
YXNOYXZpZ2F0ZWQoKTsmcXVvdDspOworCQkJfQorCQkJPC9zY3JpcHQ+CisJCQk8L2hlYWQ+CisJ
CQk8Ym9keSBvbmxvYWQ9JnF1b3Q7bW9kaWZ5KCk7JnF1b3Q7PgorCQkJICAgIDxpZnJhbWUgbmFt
ZT0mcXVvdDtuYXZpZ2F0ZWQmcXVvdDsKKwkJCSAgICAgICAgICAgIHNyYz0mcXVvdDtyZXNvdXJj
ZXMvc2FuZGJveGVkLWlmcmFtZS1uYXZpZ2F0aW9uLW5hdmlnYXRlZC5odG1sJnF1b3Q7PgorCQkJ
ICAgIDwvaWZyYW1lPgorCQkJICAgIDxpZnJhbWUgbmFtZT0mcXVvdDtmcmFtZVdpdGhQbHVnaW4m
cXVvdDsKKwkJCSAgICAgICAgICAgIHNyYz0mcXVvdDtyZXNvdXJjZXMvc2FuZGJveGVkLWlmcmFt
ZS1wbHVnaW5zLWZyYW1lLW9iamVjdC5odG1sJnF1b3Q7PgorCQkJICAgIDwvaWZyYW1lPgorCQkJ
PC9ib2R5PgorCQkJPC9odG1sPiI+CisgICAgPC9pZnJhbWU+CisKKyAgICA8c2NyaXB0PgorICAg
IGRlc2NyaXB0aW9uKCJUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBhbiBpZnJhbWUgd2l0aCBhIHNy
ZG9jIENBTiBuYXZpZ2F0ZSBib3RoIGl0c2VsZiBhbmQgYSBjaGlsZCBpbiB0aGUgZnJhbWUgdHJl
ZS4gIgorICAgICAgICAgICAgICAgICsgIkl0IGFsc28gdmVyaWZpZXMgdGhhdCB0aGUgaW1wbGlj
aXQgc2FuZGJveCBhdHRyaWJ1dGUgcmVtYWlucyBpbnRhY3QgYWZ0ZXIgYSBmcmFtZSBoYXMgYmVl
biBuYXZpZ2F0ZWQsICIKKyAgICAgICAgICAgICAgICArICJhbmQgdGhhdCBzYW5kYm94IGF0dHJp
YnV0ZXMgYXJlIHByb3BhZ2F0ZWQgdGhyb3VnaCB0aGUgZnJhbWUgaGllcmFyY2h5LiIpOworICAg
IHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIDwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67328</attachid>
            <date>2010-09-11 20:24:46 -0700</date>
            <delta_ts>2010-09-16 11:44:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43683-20100911202445.patch</filename>
            <type>text/plain</type>
            <size>44025</size>
            <attacher name="Justin Schuh">jschuh</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzMxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzEgQEAKKzIwMTAtMDktMTEgIEp1c3RpbiBTY2h1aCAgPGpzY2h1aEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50IGlmcmFtZS5zcmNkb2MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQzNjgzCisKKyAgICAgICAgQWRkZWQgaWZyYW1lIHNyY2RvYyBhdHRy
aWJ1dGUgZnJvbSBIVE1MNSBzcGVjLgorICAgICAgICBNYWRlIGlmcmFtZSBzYW5kYm94IGltcGxp
Y2l0IGZvciBzcmNkb2MuCisgICAgICAgIEFkZGVkIGFuIGlubGluZSB0ZXh0IGJ1ZmZlciBwYXNz
LXRocnUgZm9yIFN1YnN0aXR1dGVEYXRhLgorICAgICAgICBBZGRlZCBtZXRob2QgZm9yIERvY3Vt
ZW50TG9hZGVyIHRvIGtub3cgaXQgaGFzIGFuIGlubGluZSB0ZXh0IHJlc291cmNlLgorICAgICAg
ICBNYWRlIERvY3VtZW50V3JpdGVyIGF3YXJlIG9mIGlubGluZSB0ZXh0IHJlb3VyY2VzIGZvciBl
bmNvZGluZyBoaW50aW5nLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2ZyYW1lcy9pZnJhbWUtc3Jj
ZG9jLWxvYWRpbmcuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2Rv
Yy1uYXZpZ2F0ZS1zZWxmLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZnJhbWVzL2lmcmFtZS1z
cmNkb2MtbmF2aWdhdGlvbi5odG1sCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3Jl
LnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpjb21wbGV0ZVVSTCk6CisgICAg
ICAgICogaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW46CisgICAgICAgICogaHRtbC9IVE1MRnJh
bWVFbGVtZW50QmFzZS5oOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudDo6aW5saW5lVGV4dFJl
c291cmNlKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oOgorICAgICAg
ICAqIGh0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElG
cmFtZUVsZW1lbnQ6OnBhcnNlU2FuZGJveEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSUZyYW1lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTElGcmFtZUVsZW1lbnQ6OmlubGluZVRleHRSZXNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSUZyYW1lRWxlbWVudDo6bG9jYXRpb24pOgorICAgICAgICAqIGh0bWwvSFRNTElG
cmFtZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbDoKKyAg
ICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXI6OkRvY3VtZW50TG9hZGVyKToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRM
b2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjppc0lubGluZVRleHRS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2V0SXNJbmxpbmVU
ZXh0UmVzb3VyY2UpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFdyaXRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudFdyaXRlcjo6Y3JlYXRlRGVjb2RlcklmTmVlZGVkKToKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OmxvYWRXaXRoTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgICogbG9hZGVyL1N1YnN0
aXR1dGVEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChkZWZhdWx0VGV4dEVuY29kaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN1YnN0aXR1dGVDb250ZW50QnVmZmVyOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3Vic3RpdHV0ZUNvbnRlbnRCdWZmZXI6OlN1YnN0aXR1dGVDb250ZW50QnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN1YnN0aXR1dGVDb250ZW50QnVmZmVyOjpkYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnN0aXR1dGVDb250ZW50QnVmZmVyOjpzaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN1YnN0aXR1dGVDb250ZW50U3RyaW5nOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3Vic3RpdHV0ZUNvbnRlbnRTdHJpbmc6OlN1YnN0aXR1dGVDb250ZW50U3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlN1YnN0aXR1dGVDb250ZW50U3RyaW5nOjpkYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN1YnN0aXR1dGVDb250ZW50U3RyaW5nOjpzaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlN1YnN0aXR1dGVEYXRhOjpTdWJzdGl0dXRlRGF0YSk6CisgICAgICAgICogbG9h
ZGVyL1N1YnN0aXR1dGVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpTdWJzdGl0dXRlRGF0YTo6
Q29udGVudDo6fkNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGE6OmNv
bnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL0tVUkwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
c3JjZG9jVVJMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmg6CisgICAgICAgICogcGxhdGZv
cm0vS1VSTEdvb2dsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzcmNkb2NVUkwpOgorCiAyMDEw
LTA5LTExICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0FuZHJvaWQubWsJKHJldmlzaW9uIDY3MzE2KQorKysgV2ViQ29yZS9BbmRyb2lk
Lm1rCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsNiArMzQyLDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9
ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcCBcCiAJbG9h
ZGVyL1N1YmZyYW1lTG9hZGVyLmNwcCBcCiAJbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcCBc
CisJbG9hZGVyL1N1YnN0aXR1dGVEYXRhLmNwcCBcCiAJbG9hZGVyL1RleHRSZXNvdXJjZURlY29k
ZXIuY3BwIFwKIAlsb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHAgXAogCWxvYWRlci9Xb3JrZXJU
aHJlYWRhYmxlTG9hZGVyLmNwcCBcCkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDY3MzE2KQorKysgV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTExNSw2ICsxMTE1LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGxvYWRlci9TaW5rRG9jdW1lbnQuY3BwCiAgICAgbG9h
ZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAogICAgIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAK
KyAgICBsb2FkZXIvU3Vic3RpdHV0ZURhdGEuY3BwCiAgICAgbG9hZGVyL1RleHRSZXNvdXJjZURl
Y29kZXIuY3BwCiAgICAgbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuY3BwCiAgICAgbG9hZGVyL1dv
cmtlclRocmVhZGFibGVMb2FkZXIuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDY3MzE2KQorKysg
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTc1NCw2ICsxNzU0LDcg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRl
ckNsaWVudC5oIFwKIAlXZWJDb3JlL2xvYWRlci9TdWJzdGl0dXRlRGF0YS5oIFwKIAlXZWJDb3Jl
L2xvYWRlci9TdWJzdGl0dXRlUmVzb3VyY2UuaCBcCisJV2ViQ29yZS9sb2FkZXIvU3Vic3RpdHV0
ZURhdGEuY3BwIFwKIAlXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCBcCiAJ
V2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oIFwKIAlXZWJDb3JlL2xvYWRlci9U
aHJlYWRhYmxlTG9hZGVyLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDY3MzE2KQorKysgV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtOTczLDYgKzk3Myw4IEBAIF9f
Wk5LN1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlMjFleHAKIF9fWk5LN1dlYkNvcmUyMFJl
c291cmNlUmVzcG9uc2VCYXNlM3VybEV2CiBfX1pOSzdXZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNl
QmFzZTZpc0hUVFBFdgogX19aTks3V2ViQ29yZTIwUmVzb3VyY2VSZXNwb25zZUJhc2U4bWltZVR5
cGVFdgorX19aTjdXZWJDb3JlMTRTdWJzdGl0dXRlRGF0YUMxRXYKK19fWk43V2ViQ29yZTE0U3Vi
c3RpdHV0ZURhdGFDMUVOM1dURjEwUGFzc1JlZlB0cklOU18xMlNoYXJlZEJ1ZmZlckVFRVJLTlMx
XzZTdHJpbmdFUzdfUktOU180S1VSTEVTQV8KIF9fWk5LN1dlYkNvcmUyMVVzZXJDb250ZW50VVJM
UGF0dGVybjdtYXRjaGVzRVJLTlNfNEtVUkxFCiBfX1pOSzdXZWJDb3JlMjNGcmFtZUxvYWRlclN0
YXRlTWFjaGluZTE1Zmlyc3RMYXlvdXREb25lRXYKIF9fWk5LN1dlYkNvcmUyM0ZyYW1lTG9hZGVy
U3RhdGVNYWNoaW5lMjNjb21taXR0aW5nRmlyc3RSZWFsTG9hZEV2CkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24g
NjczMTYpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTk3MCw2
ICsxOTcwLDcgQEAKICAgICAgICAgICAgICdsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwJywK
ICAgICAgICAgICAgICdsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaCcsCiAgICAgICAgICAgICAn
bG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50LmgnLAorICAgICAgICAgICAgJ2xvYWRlci9T
dWJzdGl0dXRlRGF0YS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9TdWJzdGl0dXRlRGF0YS5o
JywKICAgICAgICAgICAgICdsb2FkZXIvU3Vic3RpdHV0ZVJlc291cmNlLmgnLAogICAgICAgICAg
ICAgJ2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDY3MzE2
KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTAyMyw2ICsxMDIz
LDcgQEAgU09VUkNFUyArPSBcCiAgICAgbG9hZGVyL1NpbmtEb2N1bWVudC5jcHAgXAogICAgIGxv
YWRlci9TdWJmcmFtZUxvYWRlci5jcHAgXAogICAgIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5j
cHAgXAorICAgIGxvYWRlci9TdWJzdGl0dXRlRGF0YS5jcHAgXAogICAgIGxvYWRlci9UZXh0UmVz
b3VyY2VEZWNvZGVyLmNwcCBcCiAgICAgbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuY3BwIFwKICAg
ICBub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2NzMxNikKKysrIFdlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzNzY5LDYgKzIzNzY5LDEw
IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGxvYWRlclxTdWJzdGl0dXRlRGF0YS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcU3Vic3RpdHV0ZURhdGEuaCINCiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gNjczMTYpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQ2OSw2ICsyNDY5LDcgQEAKIAkJOEM2
RUE2MTkxMUVGN0UwNDAwRkQ4RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEM2RUE2MTcxMUVGN0Uw
NDAwRkQ4RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwICovOyB9OwogCQk4QzZFQTYx
QTExRUY3RTA0MDBGRDhFRTMgLyogUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEM2RUE2MTgxMUVGN0UwNDAwRkQ4
RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCAqLzsgfTsKIAkJOEZBQzc3NEQxMTk4NzJD
QjAwMTVBRTk0IC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4RjkzNEQ4NDExODlGMUVFMDA1MDhENUQgLyog
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcCAqLzsgfTsKKwkJOEZEMzAzOUExMjM5QkZDRjAwNTIy
QUQ4IC8qIFN1YnN0aXR1dGVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDhGRDMwMzk5MTIzOUJGQ0YwMDUyMkFEOCAvKiBTdWJzdGl0dXRlRGF0
YS5jcHAgKi87IH07CiAJCTkzMDJCMEJEMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMkIwQkMw
RDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi87IH07CiAJCTkzMDJCMEJGMEQ3OUY4
MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzA1QjI0
RDA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04Mzc3LDYg
KzgzNzgsNyBAQAogCQk4QzZFQTYxODExRUY3RTA0MDBGRDhFRTMgLyogUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmg7IHBhdGggPSBnZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEY5MzREODMxMTg5RjFFRTAwNTA4RDVEIC8qIEpT
TWFpblRocmVhZEV4ZWNTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U01haW5UaHJlYWRFeGVjU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEY5
MzREODQxMTg5RjFFRTAwNTA4RDVEIC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01haW5UaHJlYWRFeGVjU3RhdGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4RkQzMDM5OTEyMzlCRkNGMDA1MjJBRDgg
LyogU3Vic3RpdHV0ZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU3Vic3RpdHV0ZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzAy
QjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VHcm91cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUdyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTY2NjQsNiArMTY2NjYsNyBAQAogCQkJCTkzRTIyN0RGMEFGNTg5QUQwMEQ0ODMyNCAv
KiBTdWJyZXNvdXJjZUxvYWRlci5jcHAgKi8sCiAJCQkJNjU2RDM3MzAwQURCQTVERTAwQTQ1NTRE
IC8qIFN1YnJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMUEzMTc4OTIwQjIwQTgxNjAwMzE2OTg3
IC8qIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50LmggKi8sCisJCQkJOEZEMzAzOTkxMjM5QkZDRjAw
NTIyQUQ4IC8qIFN1YnN0aXR1dGVEYXRhLmNwcCAqLywKIAkJCQk2NTlBN0QxMjBCNkRCNEQ5MDAx
MTU1QjMgLyogU3Vic3RpdHV0ZURhdGEuaCAqLywKIAkJCQkxQThGNkIwMTBEQjUzMDA2MDAxREI3
OTQgLyogU3Vic3RpdHV0ZVJlc291cmNlLmggKi8sCiAJCQkJRjUyM0QyNzgwMkRFNDNENzAxODYz
NUNBIC8qIFRleHRSZXNvdXJjZURlY29kZXIuY3BwICovLApAQCAtMjMwMjcsNiArMjMwMzAsNyBA
QAogCQkJCTk3MjA1QUI1MTIzOTI5MTAwMEIxNzM4MCAvKiBJbWFnZURvY3VtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk3MjA1QUI3MTIzOTI5MTAwMEIxNzM4MCAvKiBNZWRpYURvY3VtZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MjA1QUJCMTIzOTI5MjcwMEIxNzM4MCAvKiBQbHVn
aW5Eb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4RkQzMDM5QTEyMzlCRkNGMDA1MjJB
RDggLyogU3Vic3RpdHV0ZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTYyMkE4RjIxMjJD
NDQ0NTAwQTc4NUIzIC8qIEpTQmluZGluZ1N0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE2
MjJBOEZDMTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg5M0M0N0I3MTIzOEEwOTkwMDJCM0Q4NiAvKiBKU0ZpbGVDYWxsYmFjay5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDY3MzE2KQorKysgV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODA1LDcgKzM4MDUsNyBA
QCBLVVJMIERvY3VtZW50Ojpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmCiAgICAgLy8gU2VlIGFs
c28gW0NTU11TdHlsZVNoZWV0Ojpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmKQogICAgIGlmICh1
cmwuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBLVVJMKCk7Ci0gICAgY29uc3QgS1VSTCYgYmFz
ZVVSTCA9ICgobV9iYXNlVVJMLmlzRW1wdHkoKSB8fCBtX2Jhc2VVUkwgPT0gYmxhbmtVUkwoKSkg
JiYgcGFyZW50RG9jdW1lbnQoKSkgPyBwYXJlbnREb2N1bWVudCgpLT5iYXNlVVJMKCkgOiBtX2Jh
c2VVUkw7CisgICAgY29uc3QgS1VSTCYgYmFzZVVSTCA9ICgobV9iYXNlVVJMLmlzRW1wdHkoKSB8
fCBtX2Jhc2VVUkwgPT0gYmxhbmtVUkwoKSB8fCBtX2Jhc2VVUkwgPT0gc3JjZG9jVVJMKCkpICYm
IHBhcmVudERvY3VtZW50KCkpID8gcGFyZW50RG9jdW1lbnQoKS0+YmFzZVVSTCgpIDogbV9iYXNl
VVJMOwogICAgIGlmICghbV9kZWNvZGVyKQogICAgICAgICByZXR1cm4gS1VSTChiYXNlVVJMLCB1
cmwpOwogICAgIHJldHVybiBLVVJMKGJhc2VVUkwsIHVybCwgbV9kZWNvZGVyLT5lbmNvZGluZygp
KTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgkocmV2aXNpb24gNjczMTYpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjAsNiArMjYwLDcgQEAgc3Bhbgogc3BlZWNoCiBzcGVsbGNoZWNrCiBzcmMKK3NyY2RvYwogc3Rh
bmRieQogc3RhcnQKIHN0ZXAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCShy
ZXZpc2lvbiA2NzMxNikKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgSFRNTEZyYW1lRWxlbWVudEJhc2UgOiBwdWJsaWMgSFRNTEZyYW1lT3duZXJFbGVtZW50IHsK
IHB1YmxpYzoKLSAgICBLVVJMIGxvY2F0aW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBLVVJMIGxv
Y2F0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBTdHJpbmcmKTsKIAog
ICAgIHZpcnR1YWwgU2Nyb2xsYmFyTW9kZSBzY3JvbGxpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9zY3JvbGxpbmc7IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA2NzMxNikKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiRE9NV2luZG93
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1
ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFydC5oIgogCiAjaWYgRU5B
QkxFKFNWRykKQEAgLTEwMCw0ICsxMDEsOSBAQCBTVkdEb2N1bWVudCogSFRNTEZyYW1lT3duZXJF
bGVtZW50OjpnZXRTCiB9CiAjZW5kaWYKIAorU3Vic3RpdHV0ZURhdGEgSFRNTEZyYW1lT3duZXJF
bGVtZW50OjppbmxpbmVUZXh0UmVzb3VyY2UoY29uc3QgS1VSTCYpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFN1YnN0aXR1dGVEYXRhKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgJKHJldmlzaW9uIDY3MzE2KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRE9NV2luZG93OwogY2xhc3Mg
RnJhbWU7CitjbGFzcyBTdWJzdGl0dXRlRGF0YTsKIGNsYXNzIFJlbmRlclBhcnQ7CiAKICNpZiBF
TkFCTEUoU1ZHKQpAQCAtNTQsNiArNTUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTY3JvbGxi
YXJNb2RlIHNjcm9sbGluZ01vZGUoKSBjb25zdCB7IHJldHVybiBTY3JvbGxiYXJBdXRvOyB9CiAK
ICAgICBTYW5kYm94RmxhZ3Mgc2FuZGJveEZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9zYW5kYm94
RmxhZ3M7IH0KKyAgICAKKyAgICB2aXJ0dWFsIFN1YnN0aXR1dGVEYXRhIGlubGluZVRleHRSZXNv
dXJjZShjb25zdCBLVVJMJikgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBIVE1MRnJhbWVPd25l
ckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcAkocmV2aXNpb24gNjczMTYpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiUmVuZGVySUZyYW1lLmgiCisjaW5jbHVkZSAiU3Vic3RpdHV0ZURhdGEuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02OCwxMCArNjksMTEgQEAgYm9vbCBIVE1MSUZyYW1l
RWxlbWVudDo6bWFwVG9FbnRyeShjb25zdAogfQogCiAjaWYgRU5BQkxFKFNBTkRCT1gpCi1zdGF0
aWMgU2FuZGJveEZsYWdzIHBhcnNlU2FuZGJveEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHJpYnV0
ZSkKK2lubGluZSBTYW5kYm94RmxhZ3MgSFRNTElGcmFtZUVsZW1lbnQ6OnBhcnNlU2FuZGJveEF0
dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHJpYnV0ZSkKIHsKKyAgICAvLyBSZW1vdmUgdGhlIHNhbmRi
b3ggb25seSBpZiBpdCdzIG5vdCBhIHNyY2RvYwogICAgIGlmIChhdHRyaWJ1dGUtPmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4gU2FuZGJveE5vbmU7CisgICAgICAgIHJldHVybiBoYXNBdHRyaWJ1
dGUoc3JjZG9jQXR0cikgPyBTYW5kYm94QWxsIDogU2FuZGJveE5vbmU7CiAKICAgICAvLyBQYXJz
ZSB0aGUgdW5vcmRlcmVkIHNldCBvZiB1bmlxdWUgc3BhY2Utc2VwYXJhdGVkIHRva2Vucy4KICAg
ICBTYW5kYm94RmxhZ3MgZmxhZ3MgPSBTYW5kYm94QWxsOwpAQCAtMTI3LDYgKzEyOSwyMSBAQCB2
b2lkIEhUTUxJRnJhbWVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAgICAgICAgIGlmICghYXR0
ci0+aXNOdWxsKCkgJiYgIWF0dHItPnZhbHVlKCkudG9JbnQoKSkKICAgICAgICAgICAgIC8vIEFk
ZCBhIHJ1bGUgdGhhdCBudWxscyBvdXQgb3VyIGJvcmRlciB3aWR0aC4KICAgICAgICAgICAgIGFk
ZENTU0xlbmd0aChhdHRyLCBDU1NQcm9wZXJ0eUJvcmRlcldpZHRoLCAiMCIpOworICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IHNyY0F0dHIpIHsKKyAgICAgICAgaWYgKCFoYXNBdHRyaWJ1
dGUoc3JjZG9jQXR0cikpCisgICAgICAgICAgICBzZXRMb2NhdGlvbihkZXByZWNhdGVkUGFyc2VV
UkwoYXR0ci0+dmFsdWUoKSkpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHNyY2Rv
Y0F0dHIpIHsKKyAgICAgICAgLy8gTmF2aWdhdGUgdXNpbmcgc3JjIGlmIHNyY2RvYyBpcyBnZXR0
aW5nIGNsZWFyZWQuCisgICAgICAgIGlmIChhdHRyLT5pc051bGwoKSkKKyAgICAgICAgICAgIHNl
dExvY2F0aW9uKGZhc3RHZXRBdHRyaWJ1dGUoc3JjQXR0cikpOworICAgICAgICBlbHNlIHsKKyNp
ZiBFTkFCTEUoU0FOREJPWCkKKyAgICAgICAgICAgIC8vIHNyY2RvYyBpbXBsaWVzIHNhbmRib3gs
IGlmIHRoZSBhdHRyaWJ1dGUgaXNuJ3QgYWxyZWFkeSBwcmVzZW50CisgICAgICAgICAgICBpZiAo
c2FuZGJveEZsYWdzKCkgPT0gU2FuZGJveE5vbmUpCisgICAgICAgICAgICAgICAgc2V0U2FuZGJv
eEZsYWdzKFNhbmRib3hBbGwpOworI2VuZGlmCisgICAgICAgICAgICBzZXRMb2NhdGlvbihzcmNk
b2NVUkwoKS5zdHJpbmcoKSk7CisgICAgICAgIH0KICAgICB9CiAjaWYgRU5BQkxFKFNBTkRCT1gp
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHNhbmRib3hBdHRyKQpAQCAtMTY3LDQgKzE4
NCwyMSBAQCBib29sIEhUTUxJRnJhbWVFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBCiAgICAgcmV0
dXJuIGF0dHItPm5hbWUoKSA9PSBzcmNBdHRyOwogfQogCitTdWJzdGl0dXRlRGF0YSBIVE1MSUZy
YW1lRWxlbWVudDo6aW5saW5lVGV4dFJlc291cmNlKGNvbnN0IEtVUkwmIHVybCkgY29uc3QKK3sK
KyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodXJsLnN0cmluZygpLCBzcmNkb2NVUkwoKS5zdHJp
bmcoKSkpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nIHNyY2RvYyA9IGZhc3RHZXRBdHRyaWJ1dGUo
SFRNTE5hbWVzOjpzcmNkb2NBdHRyKTsKKyAgICAgICAgaWYgKCFzcmNkb2MuaXNOdWxsKCkpCisg
ICAgICAgICAgICByZXR1cm4gU3Vic3RpdHV0ZURhdGEoc3JjZG9jLCBkb2N1bWVudCgpLT5pc1hI
VE1MRG9jdW1lbnQoKSA/ICJ0ZXh0L3htbCIgOiAidGV4dC9odG1sIiwgS1VSTCgpLCBzcmNkb2NV
UkwoKSk7CisgICAgfQorICAgIHJldHVybiBTdWJzdGl0dXRlRGF0YSgpOworfQorCitLVVJMIEhU
TUxJRnJhbWVFbGVtZW50Ojpsb2NhdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNBdHRyaWJ1
dGUoc3JjZG9jQXR0cikpCisgICAgICAgIHJldHVybiBzcmNkb2NVUkwoKTsKKyAgICByZXR1cm4g
SFRNTEZyYW1lRWxlbWVudEJhc2U6OmxvY2F0aW9uKCk7Cit9CisKIH0KSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MSUZyYW1lRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
SUZyYW1lRWxlbWVudC5oCShyZXZpc2lvbiA2NzMxNikKKysrIFdlYkNvcmUvaHRtbC9IVE1MSUZy
YW1lRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIEhUTUxJRnJhbWVFbGVtZW50IDogcHVibGljIEhUTUxGcmFtZUVsZW1l
bnRCYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MSUZyYW1lRWxlbWVu
dD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHZpcnR1YWwg
S1VSTCBsb2NhdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgU3Vic3RpdHV0ZURhdGEgaW5saW5l
VGV4dFJlc291cmNlKGNvbnN0IEtVUkwmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBIVE1MSUZy
YW1lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTQ2LDYgKzQ4
LDEwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0
dHJpYnV0ZSopIGNvbnN0OwogCisjaWYgRU5BQkxFKFNBTkRCT1gpCisgICAgU2FuZGJveEZsYWdz
IHBhcnNlU2FuZGJveEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKyNlbmRpZgorICAgIAogICAgIEF0
b21pY1N0cmluZyBtX25hbWU7CiB9OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVs
ZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5p
ZGwJKHJldmlzaW9uIDY3MzE2KQorKysgV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50Lmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAg
IGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIHNjcm9sbGluZzsKICAgICAgICAgYXR0cmli
dXRlIFtSZWZsZWN0LCBVUkxdIERPTVN0cmluZyBzcmM7CiAgICAgICAgIGF0dHJpYnV0ZSBbUmVm
bGVjdF0gRE9NU3RyaW5nIHdpZHRoOworICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0
cmluZyBzcmNkb2M7CiAKICAgICAgICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKICAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDaGVja0ZyYW1lU2VjdXJpdHldIERvY3VtZW50IGNv
bnRlbnREb2N1bWVudDsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9u
IDY3MzE2KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NCw2ICs4NCw3IEBAIERvY3VtZW50TG9hZGVyOjpEb2N1bWVudExvYWRlcihjb25z
dCBSZXMKICAgICAsIG1fcHJpbWFyeUxvYWRDb21wbGV0ZShmYWxzZSkKICAgICAsIG1faXNDbGll
bnRSZWRpcmVjdChmYWxzZSkKICAgICAsIG1fd2FzT25sb2FkSGFuZGxlZChmYWxzZSkKKyAgICAs
IG1faXNJbmxpbmVUZXh0UmVzb3VyY2UoZmFsc2UpCiAgICAgLCBtX3N0b3BSZWNvcmRpbmdSZXNw
b25zZXMoZmFsc2UpCiAgICAgLCBtX3N1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXIodGhp
cywgJkRvY3VtZW50TG9hZGVyOjpzdWJzdGl0dXRlUmVzb3VyY2VEZWxpdmVyeVRpbWVyRmlyZWQp
CiAgICAgLCBtX2RpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeShmYWxzZSkKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRMb2FkZXIuaAkocmV2aXNpb24gNjczMTYpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1
bWVudExvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIGhhbmRsZWRPbmxvYWRFdmVudHMoKSB7IG1fd2FzT25s
b2FkSGFuZGxlZCA9IHRydWU7IH0KICAgICAgICAgYm9vbCB3YXNPbmxvYWRIYW5kbGVkKCkgeyBy
ZXR1cm4gbV93YXNPbmxvYWRIYW5kbGVkOyB9CiAgICAgICAgIGJvb2wgaXNMb2FkaW5nSW5BUElT
ZW5zZSgpIGNvbnN0OworICAgICAgICBib29sIGlzSW5saW5lVGV4dFJlc291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0lubGluZVRleHRSZXNvdXJjZTsgfQorICAgICAgICB2b2lkIHNldElzSW5s
aW5lVGV4dFJlc291cmNlKGJvb2wgaXNJbmxpbmVUZXh0UmVzb3VyY2UpIHsgbV9pc0lubGluZVRl
eHRSZXNvdXJjZSA9IGlzSW5saW5lVGV4dFJlc291cmNlOyB9CiAgICAgICAgIHZvaWQgc2V0UHJp
bWFyeUxvYWRDb21wbGV0ZShib29sKTsKICAgICAgICAgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJp
bmcmKTsKICAgICAgICAgdm9pZCBzZXRJY29uVVJMKGNvbnN0IFN0cmluZyYpOwpAQCAtMjcyLDYg
KzI3NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3ByaW1hcnlMb2Fk
Q29tcGxldGU7CiAgICAgICAgIGJvb2wgbV9pc0NsaWVudFJlZGlyZWN0OwogICAgICAgICBib29s
IG1fd2FzT25sb2FkSGFuZGxlZDsKKyAgICAgICAgYm9vbCBtX2lzSW5saW5lVGV4dFJlc291cmNl
OwogCiAgICAgICAgIFN0cmluZyBtX3BhZ2VUaXRsZTsKICAgICAgICAgU3RyaW5nIG1fcGFnZUlj
b25VUkw7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCShyZXZpc2lvbiA2NzMxNikK
KysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRvY3VtZW50V3Jp
dGVyLmgiCiAKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkRPTUltcGxl
bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
QEAgLTE0OCwxMSArMTQ5LDE0IEBAIHZvaWQgRG9jdW1lbnRXcml0ZXI6OmJlZ2luKGNvbnN0IEtV
UkwmIHUKIFRleHRSZXNvdXJjZURlY29kZXIqIERvY3VtZW50V3JpdGVyOjpjcmVhdGVEZWNvZGVy
SWZOZWVkZWQoKQogewogICAgIGlmICghbV9kZWNvZGVyKSB7CisgICAgICAgIEZyYW1lKiBwYXJl
bnRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7CisgICAgICAgIC8vIEFuIGlubGlu
ZSB0ZXh0IHJlc291cmNlIGlzIGFscmVhZHkgYSBuYXRpdmUgc3RyaW5nOyB0aGUgZmlyc3Qgbm9u
LWlubGluZSBhbmNlc3RvciB3aWxsIGhhdmUgdGhlIG9yaWdpbmFsIGVuY29kaW5nLgorICAgICAg
ICB3aGlsZSAocGFyZW50RnJhbWUgJiYgcGFyZW50RnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExv
YWRlcigpLT5pc0lubGluZVRleHRSZXNvdXJjZSgpKQorICAgICAgICAgICAgcGFyZW50RnJhbWUg
PSBwYXJlbnRGcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKICAgICAgICAgaWYgKFNldHRpbmdzKiBz
ZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCkpIHsKICAgICAgICAgICAgIG1fZGVjb2RlciA9
IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZShtX21pbWVUeXBlLAogICAgICAgICAgICAgICAg
IHNldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpLAogICAgICAgICAgICAgICAgIHNl
dHRpbmdzLT51c2VzRW5jb2RpbmdEZXRlY3RvcigpKTsKLSAgICAgICAgICAgIEZyYW1lKiBwYXJl
bnRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7CiAgICAgICAgICAgICAvLyBTZXQg
dGhlIGhpbnQgZW5jb2RpbmcgdG8gdGhlIHBhcmVudCBmcmFtZSBlbmNvZGluZyBvbmx5IGlmCiAg
ICAgICAgICAgICAvLyB0aGUgcGFyZW50IGFuZCB0aGUgY3VycmVudCBmcmFtZXMgc2hhcmUgdGhl
IHNlY3VyaXR5IG9yaWdpbi4KICAgICAgICAgICAgIC8vIFdlIGltcG9zZSB0aGlzIGNvbmRpdGlv
biBiZWNhdXNlIHNvbWVib2R5IGNhbiBtYWtlIGEgY2hpbGQgZnJhbWUgCkBAIC0xNjYsNyArMTcw
LDYgQEAgVGV4dFJlc291cmNlRGVjb2RlciogRG9jdW1lbnRXcml0ZXI6OmNyZQogICAgICAgICAg
ICAgICAgIG1fZGVjb2Rlci0+c2V0SGludEVuY29kaW5nKHBhcmVudEZyYW1lLT5kb2N1bWVudCgp
LT5kZWNvZGVyKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fZGVjb2RlciA9IFRl
eHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZShtX21pbWVUeXBlLCBTdHJpbmcoKSk7Ci0gICAgICAg
IEZyYW1lKiBwYXJlbnRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7CiAgICAgICAg
IGlmIChtX2VuY29kaW5nLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKGNhblJlZmVyVG9Q
YXJlbnRGcmFtZUVuY29kaW5nKG1fZnJhbWUsIHBhcmVudEZyYW1lKSkKICAgICAgICAgICAgICAg
ICBtX2RlY29kZXItPnNldEVuY29kaW5nKHBhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5pbnB1dEVu
Y29kaW5nKCksIFRleHRSZXNvdXJjZURlY29kZXI6OkVuY29kaW5nRnJvbVBhcmVudEZyYW1lKTsK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDY3MzE2KQorKysgV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkyLDcgKzEzOTIsMTAg
QEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZChjb25zdCBSZXNvdXJjZVJlcQogCiB2b2lkIEZyYW1l
TG9hZGVyOjpsb2FkV2l0aE5hdmlnYXRpb25BY3Rpb24oY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiBhY3Rpb24sIGJvb2wgbG9ja0hpc3Rvcnks
IEZyYW1lTG9hZFR5cGUgdHlwZSwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSkKIHsK
LSAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGxvYWRlciA9IG1fY2xpZW50LT5jcmVhdGVEb2N1
bWVudExvYWRlcihyZXF1ZXN0LCBTdWJzdGl0dXRlRGF0YSgpKTsKKyAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGhhdmUgYSBnZW5lcmljIHdheSB0byBzdXBwbHkgY29udGVudCBhc3NvY2lhdGVkIHdp
dGggYSBnaXZlbiBsb2FkLCByYXRoZXIgdGhhbiBjaGVja2luZyB0aGUgZnJhbWUgaGVyZQorICAg
IFN1YnN0aXR1dGVEYXRhIHN1YnN0aXR1dGVEYXRhID0gbV9mcmFtZS0+b3duZXJFbGVtZW50KCkg
PyBtX2ZyYW1lLT5vd25lckVsZW1lbnQoKS0+aW5saW5lVGV4dFJlc291cmNlKHJlcXVlc3QudXJs
KCkpIDogU3Vic3RpdHV0ZURhdGEoKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGxvYWRl
ciA9IG1fY2xpZW50LT5jcmVhdGVEb2N1bWVudExvYWRlcihyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0
YSk7CisgICAgbG9hZGVyLT5zZXRJc0lubGluZVRleHRSZXNvdXJjZShzdWJzdGl0dXRlRGF0YS5p
c1ZhbGlkKCkpOwogICAgIGlmIChsb2NrSGlzdG9yeSAmJiBtX2RvY3VtZW50TG9hZGVyKQogICAg
ICAgICBsb2FkZXItPnNldENsaWVudFJlZGlyZWN0U291cmNlRm9ySGlzdG9yeShtX2RvY3VtZW50
TG9hZGVyLT5kaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50cnkoKSA/IG1fZG9jdW1lbnRMb2FkZXIt
PnVybEZvckhpc3RvcnkoKSA6IG1fZG9jdW1lbnRMb2FkZXItPmNsaWVudFJlZGlyZWN0U291cmNl
Rm9ySGlzdG9yeSgpKTsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvU3Vic3RpdHV0ZURhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnN0aXR1dGVEYXRhLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvbG9hZGVyL1N1YnN0aXR1dGVEYXRhLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU3Vic3RpdHV0ZURhdGEuaCIKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCitzdGF0aWMgY29uc3QgU3RyaW5nJiBkZWZh
dWx0VGV4dEVuY29kaW5nKCkKK3sKKyNpZiBDUFUoQklHX0VORElBTikKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgc19kZWZhdWx0VGV4dEVuY29kaW5nLCAoIlVU
Ri0xNkJFIikpOworI2Vsc2UKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0
cmluZywgc19kZWZhdWx0VGV4dEVuY29kaW5nLCAoIlVURi0xNkxFIikpOworI2VuZGlmCisgICAg
cmV0dXJuIHNfZGVmYXVsdFRleHRFbmNvZGluZy5zdHJpbmcoKTsKK30KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIAorY2xhc3MgU3Vic3RpdHV0ZUNvbnRlbnRCdWZmZXIgOiBwdWJsaWMgU3Vi
c3RpdHV0ZURhdGE6OkNvbnRlbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN1
YnN0aXR1dGVDb250ZW50QnVmZmVyPiBjcmVhdGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1
ZmZlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3Vic3RpdHV0ZUNvbnRl
bnRCdWZmZXIoYnVmZmVyKSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBTdWJzdGl0dXRl
Q29udGVudEJ1ZmZlcihQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKSA6IG1fYnVmZmVy
KGJ1ZmZlcikgeyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXItPmRhdGEoKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX2J1ZmZlci0+c2l6ZSgpOyB9CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9i
dWZmZXI7Cit9OworCitjbGFzcyBTdWJzdGl0dXRlQ29udGVudFN0cmluZyA6IHB1YmxpYyBTdWJz
dGl0dXRlRGF0YTo6Q29udGVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Vi
c3RpdHV0ZUNvbnRlbnRTdHJpbmc+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3Vic3RpdHV0ZUNvbnRlbnRTdHJpbmcoc3Ry
aW5nKSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBTdWJzdGl0dXRlQ29udGVudFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0cmluZykgOiBtX3N0cmluZyhzdHJpbmcpIHsgfQorICAgIC8vIFdl
IG5lZWQgdG8gdHJlYXQgdGhlIFVDaGFyIGFycmF5IGFzIGEgcmF3IGJ5dGUgYnVmZmVyIChoZW5j
ZSB0aGUgY2FzdCkKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVy
biByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtX3N0cmluZy5jaGFyYWN0ZXJzKCkpOyB9
CisgICAgdmlydHVhbCBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmxlbmd0
aCgpICogc2l6ZW9mKFVDaGFyKTsgfQorICAgIFN0cmluZyBtX3N0cmluZzsKK307CisKK1N1YnN0
aXR1dGVEYXRhOjpTdWJzdGl0dXRlRGF0YSgpIHsgfQorCitTdWJzdGl0dXRlRGF0YTo6U3Vic3Rp
dHV0ZURhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmcsIGNvbnN0IEtVUkwmIGZhaWxpbmdV
UkwsIGNvbnN0IEtVUkwmIHJlc3BvbnNlVVJMKQorICAgIDogbV9jb250ZW50KFN1YnN0aXR1dGVD
b250ZW50QnVmZmVyOjpjcmVhdGUoYnVmZmVyKSkKKyAgICAsIG1fbWltZVR5cGUobWltZVR5cGUp
CisgICAgLCBtX3RleHRFbmNvZGluZyh0ZXh0RW5jb2RpbmcpCisgICAgLCBtX2ZhaWxpbmdVUkwo
ZmFpbGluZ1VSTCkKKyAgICAsIG1fcmVzcG9uc2VVUkwocmVzcG9uc2VVUkwpCit7Cit9CisKK1N1
YnN0aXR1dGVEYXRhOjpTdWJzdGl0dXRlRGF0YShjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgS1VSTCYgZmFpbGluZ1VSTCwgY29uc3QgS1VSTCYgcmVz
cG9uc2VVUkwpCisgICAgOiBtX2NvbnRlbnQoU3Vic3RpdHV0ZUNvbnRlbnRTdHJpbmc6OmNyZWF0
ZShzdHJpbmcpKQorICAgICwgbV9taW1lVHlwZShtaW1lVHlwZSkKKyAgICAsIG1fdGV4dEVuY29k
aW5nKGRlZmF1bHRUZXh0RW5jb2RpbmcoKSkKKyAgICAsIG1fZmFpbGluZ1VSTChmYWlsaW5nVVJM
KQorICAgICwgbV9yZXNwb25zZVVSTChyZXNwb25zZVVSTCkKK3sKK30KKworfQpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvU3Vic3RpdHV0ZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9TdWJzdGl0dXRlRGF0YS5oCShyZXZpc2lvbiA2NzMxNikKKysrIFdlYkNvcmUvbG9hZGVyL1N1
YnN0aXR1dGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDggKzI4LDggQEAKICNkZWZpbmUgU3Vic3Rp
dHV0ZURhdGFfaAogCiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAK
QEAgLTM2LDI3ICszNywyNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBTdWJz
dGl0dXRlRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBTdWJzdGl0dXRlRGF0YSgpIHsgfQot
Ci0gICAgICAgIFN1YnN0aXR1dGVEYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBjb250ZW50
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZywgY29u
c3QgS1VSTCYgZmFpbGluZ1VSTCwgY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwgPSBLVVJMKCkpCi0g
ICAgICAgICAgICA6IG1fY29udGVudChjb250ZW50KQotICAgICAgICAgICAgLCBtX21pbWVUeXBl
KG1pbWVUeXBlKQotICAgICAgICAgICAgLCBtX3RleHRFbmNvZGluZyh0ZXh0RW5jb2RpbmcpCi0g
ICAgICAgICAgICAsIG1fZmFpbGluZ1VSTChmYWlsaW5nVVJMKQotICAgICAgICAgICAgLCBtX3Jl
c3BvbnNlVVJMKHJlc3BvbnNlVVJMKQotICAgICAgICB7Ci0gICAgICAgIH0KKyAgICAgICAgU3Vi
c3RpdHV0ZURhdGEoKTsKKyAgICAgICAgU3Vic3RpdHV0ZURhdGEoUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBLVVJMJiwgY29uc3Qg
S1VSTCYgcmVzcG9uc2VVUkwgPSBLVVJMKCkpOworICAgICAgICBTdWJzdGl0dXRlRGF0YShjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgcmVzcG9u
c2VVUkwgPSBLVVJMKCkpOworICAgICAgICAKKyAgICAgICAgY2xhc3MgQ29udGVudCA6IHB1Ymxp
YyBSZWZDb3VudGVkPENvbnRlbnQ+IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgPSAwOworICAgICAgICAgICAgdmlydHVhbCBz
aXplX3Qgc2l6ZSgpIGNvbnN0ID0gMDsKKyAgICAgICAgICAgIHZpcnR1YWwgfkNvbnRlbnQoKSB7
IH0KKyAgICAgICAgfTsKIAogICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnQgIT0gMDsgfQotCi0gICAgICAgIGNvbnN0IFNoYXJlZEJ1ZmZlciogY29udGVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudC5nZXQoKTsgfQorICAgICAgICBjb25zdCBDb250ZW50
KiBjb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50LmdldCgpOyB9CiAgICAgICAgIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX21pbWVUeXBlOyB9CiAgICAg
ICAgIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RW5j
b2Rpbmc7IH0KICAgICAgICAgY29uc3QgS1VSTCYgZmFpbGluZ1VSTCgpIGNvbnN0IHsgcmV0dXJu
IG1fZmFpbGluZ1VSTDsgfQogICAgICAgICBjb25zdCBLVVJMJiByZXNwb25zZVVSTCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzcG9uc2VVUkw7IH0KICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9jb250ZW50OworICAgICAgICBSZWZQdHI8Q29udGVu
dD4gbV9jb250ZW50OwogICAgICAgICBTdHJpbmcgbV9taW1lVHlwZTsKICAgICAgICAgU3RyaW5n
IG1fdGV4dEVuY29kaW5nOwogICAgICAgICBLVVJMIG1fZmFpbGluZ1VSTDsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vS1VSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9LVVJM
LmNwcAkocmV2aXNpb24gNjczMTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODE2LDYgKzE4MTYsMTIgQEAgY29uc3QgS1VSTCYgYmxhbmtVUkwoKQog
ICAgIHJldHVybiBzdGF0aWNCbGFua1VSTDsKIH0KIAorY29uc3QgS1VSTCYgc3JjZG9jVVJMKCkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEtVUkwsIHN0YXRpY1NyY2RvY1VSTCwgKFBhcnNl
ZFVSTFN0cmluZywgImFib3V0OnNyY2RvYyIpKTsKKyAgICByZXR1cm4gc3RhdGljU3JjZG9jVVJM
OworfQorCiAjaWZuZGVmIE5ERUJVRwogdm9pZCBLVVJMOjpwcmludCgpIGNvbnN0CiB7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L0tVUkwuaAkocmV2aXNpb24gNjczMTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuaAkod29y
a2luZyBjb3B5KQpAQCAtMjU1LDYgKzI1NSw3IEBAIGJvb2wgZXF1YWxJZ25vcmluZ0ZyYWdtZW50
SWRlbnRpZmllcihjb24KIGJvb2wgcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKGNvbnN0IEtV
UkwmLCBjb25zdCBLVVJMJik7CiAgICAgCiBjb25zdCBLVVJMJiBibGFua1VSTCgpOworY29uc3Qg
S1VSTCYgc3JjZG9jVVJMKCk7CiAKIC8vIEZ1bmN0aW9ucyB0byBkbyBVUkwgb3BlcmF0aW9ucyBv
biBzdHJpbmdzLgogLy8gVGhlc2UgYXJlIG9wZXJhdGlvbnMgdGhhdCBhcmVuJ3QgZmFzdGVyIG9u
IGEgcGFyc2VkIFVSTC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcAkocmV2aXNpb24gNjcz
MTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0tVUkxHb29nbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDgwLDYgKzEwODAsMTIgQEAgY29uc3QgS1VSTCYgYmxhbmtVUkwoKQogICAgIHJldHVybiBz
dGF0aWNCbGFua1VSTDsKIH0KIAorY29uc3QgS1VSTCYgc3JjZG9jVVJMKCkKK3sKKyAgICBzdGF0
aWMgS1VSTCBzdGF0aWNTcmNkb2NVUkwoUGFyc2VkVVJMU3RyaW5nLCAiYWJvdXQ6c3JjZG9jIik7
CisgICAgcmV0dXJuIHN0YXRpY1NyY2RvY1VSTDsKK30KKwogYm9vbCBwcm90b2NvbElzKGNvbnN0
IFN0cmluZyYgdXJsLCBjb25zdCBjaGFyKiBwcm90b2NvbCkKIHsKICAgICAvLyBEbyB0aGUgY29t
cGFyaXNvbiB3aXRob3V0IG1ha2luZyBhIG5ldyBzdHJpbmcgb2JqZWN0LgpJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gNjczMTYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNyBAQAorMjAxMC0wOS0xMSAgSnVzdGluIFNjaHVoICA8anNjaHVoQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bXBsZW1lbnQgaWZyYW1lLnNyY2RvYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDM2ODMKKworICAgICAgICAqIGZhc3QvZnJhbWVzL2lmcmFtZS1zcmNk
b2MtbG9hZGluZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZnJhbWVzL2lm
cmFtZS1zcmNkb2MtbG9hZGluZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZyYW1lcy9p
ZnJhbWUtc3JjZG9jLW5hdmlnYXRlLXNlbGYtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLW5hdmlnYXRlLXNlbGYuaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1uYXZpZ2F0aW9u
Lmh0bWw6IEFkZGVkLgorCiAyMDEwLTA5LTExICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbG9hZGluZy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1sb2FkaW5nLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFt
ZS1zcmNkb2MtbG9hZGluZy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTgg
QEAKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IHNyY2RvYyBsb2FkaW5nIG9jY3VycyBjb3JyZWN0
bHkgYW5kIGZpcmVzIHRoZSBjb3JyZWN0IGV2ZW50cy4gSXQgYWxzbyB2ZXJpZmllcyB0aGF0IGEg
bm9uLW51bGwgc3JjZG9jIGF0dHJpYnV0ZSBwcmV2ZW50cyBhbnkgbmF2aWdhdGlvbiBldmVudHMg
d2hlbiBzcmMgaXMgbW9kaWZpZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlkJykuY29udGVudERvY3Vt
ZW50LmxvY2F0aW9uLnRvU3RyaW5nKCkgaXMgJ2Fib3V0OnNyY2RvYycKK1BBU1MgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9jdW1lbnQuYm9keS50ZXh0
Q29udGVudCBpcyAnVGhpcyBpcyB0aGUgc3JjZG9jIGZyYW1lLicKK1BBU1MgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5zcmMgaXMgJ2h0dHA6Ly9leGFtcGxlLmNvbS8n
CitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlkJykuY29udGVudERv
Y3VtZW50LmxvY2F0aW9uLnRvU3RyaW5nKCkgaXMgJ2Fib3V0OnNyY2RvYycKK1BBU1MgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9jdW1lbnQuYm9keS50
ZXh0Q29udGVudCBpcyAnVGhpcyBpcyB0aGUgc3JjZG9jIGZyYW1lLicKK1BBU1MgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5zcmMgaXMgJycKK1BBU1MgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9jdW1lbnQubG9jYXRpb24u
dG9TdHJpbmcoKSBpcyAnYWJvdXQ6c3JjZG9jJworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5ib2R5LnRleHRDb250ZW50IGlzICdU
aGlzIGlzIHRoZSBzcmNkb2MgZnJhbWUuJworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c3JjZG9jRnJhbWVJZCcpLnNyYyBpcyAnYWJvdXQ6YmxhbmsnCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKyAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
ZnJhbWVzL2lmcmFtZS1zcmNkb2MtbG9hZGluZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbG9hZGluZy5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1sb2FkaW5nLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2Ny
aXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gc3JjZG9jTG9hZGluZ1Rlc3QoKSB7Cisg
ICAgLy8gVGVzdCBsb2FkaW5nIGF0IHBhcnNpbmcuCisgICAgc2hvdWxkQmUoImRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlkJykuY29udGVudERvY3VtZW50LmxvY2F0aW9uLnRv
U3RyaW5nKCkiLCAiJ2Fib3V0OnNyY2RvYyciKTsKKyAgICBzaG91bGRCZSgiZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9jdW1lbnQuYm9keS50ZXh0Q29u
dGVudCIsICInVGhpcyBpcyB0aGUgc3JjZG9jIGZyYW1lLiciKTsKKyAgICBzaG91bGRCZSgiZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5zcmMiLCAiJ2h0dHA6Ly9leGFt
cGxlLmNvbS8nIik7CisgICAgdmFyIGYxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2Rv
Y0ZyYW1lSWQnKTsKKyAgICB2YXIgZjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUi
KTsKKyAgICBmMi5zcmNkb2MgPSBmMS5zcmNkb2M7CisgICAgCisgICAgLy8gVGVzdCBsb2FkaW5n
IG9mIGEgZHluYW1pY2FsbHkgY3JlYXRlZCBmcmFtZQorICAgIGYyLm9ubG9hZCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICBmMS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYxKTsKKyAgICAgICAgZjIu
aWQgPSAic3JjZG9jRnJhbWVJZCI7CisgICAgICAgIHNob3VsZEJlKCJkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5sb2NhdGlvbi50b1N0cmlu
ZygpIiwgIidhYm91dDpzcmNkb2MnIik7CisgICAgICAgIHNob3VsZEJlKCJkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5ib2R5LnRleHRDb250
ZW50IiwgIidUaGlzIGlzIHRoZSBzcmNkb2MgZnJhbWUuJyIpOworICAgICAgICBzaG91bGRCZSgi
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5zcmMiLCAiJyciKTsKKyAg
ICAgICAgZjIuc3JjID0gImFib3V0OmJsYW5rIjsKKworICAgICAgICAvLyBNYWtlIHN1cmUgc2V0
dGluZyBzcmMgZG9lc24ndCB0cmlnZ2VyIG5hdmlnYXRpb24gYXdheS4gKE5lZWQgc2V0VGltZW91
dCBiZWNhdXNlIHdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBhYnNlbmNlIG9mIGEgbG9hZC4pCisgICAg
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzaG91bGRCZSgiZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9jdW1lbnQubG9jYXRp
b24udG9TdHJpbmcoKSIsICInYWJvdXQ6c3JjZG9jJyIpOworICAgICAgICAgICAgc2hvdWxkQmUo
ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlkJykuY29udGVudERvY3VtZW50
LmJvZHkudGV4dENvbnRlbnQiLCAiJ1RoaXMgaXMgdGhlIHNyY2RvYyBmcmFtZS4nIik7CisgICAg
ICAgICAgICBzaG91bGRCZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQn
KS5zcmMiLCAiJ2Fib3V0OmJsYW5rJyIpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJz
ZWQoKTsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgICAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAg
ICAgICAgfSwgMjApOworICAgIH0KKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYyKTsK
K30KKzwvc2NyaXB0PgorPGhlYWQ+Cis8Ym9keT4KKyAgICA8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKyAgICA8aWZyYW1lIGlkPSJzcmNkb2NG
cmFtZUlkIiBzcmM9Imh0dHA6Ly9leGFtcGxlLmNvbS8iIG9ubG9hZD0ic3JjZG9jTG9hZGluZ1Rl
c3QoKSIKKyAgICAgICAgc3JjZG9jPSI8aHRtbD48Ym9keT5UaGlzIGlzIHRoZSBzcmNkb2MgZnJh
bWUuPC9ib2R5PjwvaHRtbD4iPjwvaWZyYW1lPgorICAgICAgICA8c2NyaXB0PgorICAgICAgICBk
ZXNjcmlwdGlvbigiVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgc3JjZG9jIGxvYWRpbmcgb2NjdXJz
IGNvcnJlY3RseSBhbmQgZmlyZXMgdGhlIGNvcnJlY3QgZXZlbnRzLiAiCisgICAgICAgICAgICAg
ICAgICAgICsgIkl0IGFsc28gdmVyaWZpZXMgdGhhdCBhIG5vbi1udWxsIHNyY2RvYyBhdHRyaWJ1
dGUgcHJldmVudHMgYW55IG5hdmlnYXRpb24gZXZlbnRzIHdoZW4gc3JjIGlzIG1vZGlmaWVkLiIp
OworICAgICAgICB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJh
bWUtc3JjZG9jLW5hdmlnYXRlLXNlbGYtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1zcmNkb2MtbmF2aWdhdGUtc2VsZi1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9j
LW5hdmlnYXRlLXNlbGYtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBA
CitUaGlzIHRlc3QgdmVyaWZpZXMgYSBzcmNkb2MgY29udGV4dCBjYW4gYmUgbmF2aWdhdGVkIGJ5
IHNldHRpbmcgdGhlIHNyY2RvYyBhdHRyaWJ1dGUgb3IgYnkgbmF2aWdhdGluZyB0byBhYm91dDpz
cmNkb2Mgd2hlbiB0aGUgc3JjZG9jIGF0dHJpYnV0ZSBpcyBwcmVzZW50LgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3JjZG9j
RnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5sb2NhdGlvbi50b1N0cmluZygpIGlzICdhYm91dDpz
cmNkb2MnCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlkJykuY29u
dGVudERvY3VtZW50LmJvZHkudGV4dENvbnRlbnQgaXMgJ1RoaXMgaXMgdGhlIHNyY2RvYyBmcmFt
ZS4nCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlkJykuY29udGVu
dERvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9TdHJpbmcoKSBpcyAnYWJvdXQ6YmxhbmsnCitQQVNT
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlkJykuY29udGVudERvY3VtZW50
LmJvZHkudGV4dENvbnRlbnQgaXMgJycKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Ny
Y2RvY0ZyYW1lSWQnKS5jb250ZW50RG9jdW1lbnQubG9jYXRpb24udG9TdHJpbmcoKSBpcyAnYWJv
dXQ6c3JjZG9jJworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcp
LmNvbnRlbnREb2N1bWVudC5ib2R5LnRleHRDb250ZW50IGlzICdUaGlzIGlzIHRoZSBzcmNkb2Mg
ZnJhbWUuJworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNv
bnRlbnREb2N1bWVudC5sb2NhdGlvbi50b1N0cmluZygpIGlzIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdzcmNkb2NGcmFtZUlkJykuc3JjCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdz
cmNkb2NGcmFtZUlkJykuY29udGVudERvY3VtZW50LmJvZHkudGV4dENvbnRlbnQgaXMgJycKK1BB
U1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9jdW1l
bnQubG9jYXRpb24udG9TdHJpbmcoKSBpcyAnYWJvdXQ6c3JjZG9jJworUEFTUyBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5ib2R5LnRleHRD
b250ZW50IGlzICcnCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlk
JykuY29udGVudERvY3VtZW50LmxvY2F0aW9uLnRvU3RyaW5nKCkgaXMgJ2Fib3V0OnNyY2RvYycK
K1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9j
dW1lbnQuYm9keS50ZXh0Q29udGVudCBpcyAnVGhpcyBpcyB0aGUgc3JjZG9jIGZyYW1lLicKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLW5hdmlnYXRlLXNlbGYuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLW5hdmln
YXRlLXNlbGYuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lm
cmFtZS1zcmNkb2MtbmF2aWdhdGUtc2VsZi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4
IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgd2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworfQorCit2YXIgbmF2aWdhdGlvblN0YXRlID0gMDsKK3ZhciBzYXZlZFNyY2Rv
YzsKK2Z1bmN0aW9uIG5hdmlnYXRlRnJhbWVzKCkKK3sKKyAgICBzd2l0Y2goKytuYXZpZ2F0aW9u
U3RhdGUpIHsKKyAgICBjYXNlIDE6IC8vIEluaXRpYWwgbG9hZAorICAgICAgICBzcmNkb2NGcmFt
ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcmNkb2NGcmFtZUlkJyk7CisgICAgICAgIHNo
b3VsZEJlKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnRE
b2N1bWVudC5sb2NhdGlvbi50b1N0cmluZygpIiwgIidhYm91dDpzcmNkb2MnIik7CisgICAgICAg
IHNob3VsZEJlKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRl
bnREb2N1bWVudC5ib2R5LnRleHRDb250ZW50IiwgIidUaGlzIGlzIHRoZSBzcmNkb2MgZnJhbWUu
JyIpOworICAgICAgICBzcmNkb2NGcmFtZS5jb250ZW50RG9jdW1lbnQubG9jYXRpb24uYXNzaWdu
KCJhYm91dDpibGFuayIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgMjogLy8gTmF2aWdh
dGVkIHRvIGFib3V0OmJsYW5rCisgICAgICAgIHNob3VsZEJlKCJkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvU3Ry
aW5nKCkiLCAiJ2Fib3V0OmJsYW5rJyIpOworICAgICAgICBzaG91bGRCZSgiZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9jdW1lbnQuYm9keS50ZXh0Q29u
dGVudCIsICInJyIpOworICAgICAgICBzYXZlZFNyY2RvYyA9IHNyY2RvY0ZyYW1lLnNyY2RvYzsK
KyAgICAgICAgc3JjZG9jRnJhbWUuY29udGVudERvY3VtZW50LmxvY2F0aW9uLmFzc2lnbigiQUJP
VVQ6U1JDRE9DIik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAzOiAvLyBOYXZpZ2F0ZWQg
dG8gQUJPVVQ6U1JDRE9DCisgICAgICAgIHNob3VsZEJlKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5sb2NhdGlvbi50b1N0cmluZygpIiwg
IidhYm91dDpzcmNkb2MnIik7CisgICAgICAgIHNob3VsZEJlKCJkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1bWVudC5ib2R5LnRleHRDb250ZW50Iiwg
IidUaGlzIGlzIHRoZSBzcmNkb2MgZnJhbWUuJyIpOworICAgICAgICBzYXZlZFNyY2RvYyA9IHNy
Y2RvY0ZyYW1lLnNyY2RvYzsKKyAgICAgICAgc3JjZG9jRnJhbWUuc3JjZG9jID0gbnVsbDsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDQ6IC8vIE5hdmlnYXRlZCB0byBzcmMgYXR0cmlidXRl
IGFmdGVyIHNyY2RvYyBjbGVhcmVkIAorICAgICAgICBzaG91bGRCZSgiZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50RG9jdW1lbnQubG9jYXRpb24udG9TdHJp
bmcoKSIsICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLnNyYyIpOwor
ICAgICAgICBzaG91bGRCZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQn
KS5jb250ZW50RG9jdW1lbnQuYm9keS50ZXh0Q29udGVudCIsICInJyIpOworICAgICAgICBzcmNk
b2NGcmFtZS5jb250ZW50RG9jdW1lbnQubG9jYXRpb24uYXNzaWduKCJhYm91dDpzcmNkb2MiKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDU6IC8vIE5hdmlnYXRlZCB0byBhbiBlbXB0eSBh
Ym91dDogY29udGV4dCBiZWNhdXNlIG5vIHNyY2RvYyBpcyBwcmVzZW50CisgICAgICAgIHNob3Vs
ZEJlKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnREb2N1
bWVudC5sb2NhdGlvbi50b1N0cmluZygpIiwgIidhYm91dDpzcmNkb2MnIik7CisgICAgICAgIHNo
b3VsZEJlKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3JjZG9jRnJhbWVJZCcpLmNvbnRlbnRE
b2N1bWVudC5ib2R5LnRleHRDb250ZW50IiwgIicnIik7CisgICAgICAgIHNyY2RvY0ZyYW1lLnNy
Y2RvYyA9IHNhdmVkU3JjZG9jOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgNjogLy8gTmF2
aWdhdGVkIHRvIGFib3V0OnNyY2RvYyBieSBzZXR0aW5nIGEgbmV3IHNyY2RvYworICAgICAgICBz
aG91bGRCZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250ZW50
RG9jdW1lbnQubG9jYXRpb24udG9TdHJpbmcoKSIsICInYWJvdXQ6c3JjZG9jJyIpOworICAgICAg
ICBzaG91bGRCZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NyY2RvY0ZyYW1lSWQnKS5jb250
ZW50RG9jdW1lbnQuYm9keS50ZXh0Q29udGVudCIsICInVGhpcyBpcyB0aGUgc3JjZG9jIGZyYW1l
LiciKTsKKyAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworPC9zY3Jp
cHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorICAg
IDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisgICAgPGlmcmFtZSBpZD0ic3JjZG9jRnJhbWVJ
ZCIgc3JjPSJyZXNvdXJjZXMvZW1wdHktYm9keS5odG1sIgorICAgICAgICAgICAgc3JjZG9jPSI8
aHRtbD48Ym9keT5UaGlzIGlzIHRoZSBzcmNkb2MgZnJhbWUuPC9ib2R5PjwvaHRtbD4iCisgICAg
ICAgICAgICBvbmxvYWQ9Im5hdmlnYXRlRnJhbWVzKCkiPgorICAgIDwvaWZyYW1lPgorICAgIDxz
Y3JpcHQ+CisgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdCB2ZXJpZmllcyBhIHNyY2RvYyBjb250
ZXh0IGNhbiBiZSBuYXZpZ2F0ZWQgYnkgc2V0dGluZyB0aGUgc3JjZG9jIGF0dHJpYnV0ZSAiCisg
ICAgICAgICAgICAgICAgKyAib3IgYnkgbmF2aWdhdGluZyB0byBhYm91dDpzcmNkb2Mgd2hlbiB0
aGUgc3JjZG9jIGF0dHJpYnV0ZSBpcyBwcmVzZW50LiIpOworICAgIHZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworICAgIDwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUtc3JjZG9jLW5h
dmlnYXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9m
cmFtZXMvaWZyYW1lLXNyY2RvYy1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMSBAQAorVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgYW4gaWZyYW1lIHdpdGgg
YSBzcmRvYyBDQU4gbmF2aWdhdGUgYm90aCBpdHNlbGYgYW5kIGEgY2hpbGQgaW4gdGhlIGZyYW1l
IHRyZWUuIEl0IGFsc28gdmVyaWZpZXMgdGhhdCB0aGUgaW1wbGljaXQgc2FuZGJveCBhdHRyaWJ1
dGUgcmVtYWlucyBpbnRhY3QgYWZ0ZXIgYSBmcmFtZSBoYXMgYmVlbiBuYXZpZ2F0ZWQsIGFuZCB0
aGF0IHNhbmRib3ggYXR0cmlidXRlcyBhcmUgcHJvcGFnYXRlZCB0aHJvdWdoIHRoZSBmcmFtZSBo
aWVyYXJjaHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIChzZWxmLnNh
bmRib3hlZEZyYW1lLmZyYW1lV2l0aFBsdWdpbi5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGx1
Z2luJykuZGVzdHJveVN0cmVhbSkgPT0gdW5kZWZpbmVkIGlzIHRydWUKK1BBU1MgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3NhbmRib3hlZEZyYW1lSWQnKS5zYW5kYm94IGlzICdhbGxvdy1zY3Jp
cHRzIGFsbG93LXNhbWUtb3JpZ2luJworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1z
cmNkb2MtbmF2aWdhdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZnJh
bWVzL2lmcmFtZS1zcmNkb2MtbmF2aWdhdGlvbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXNyY2RvYy1uYXZpZ2F0aW9uLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzAgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNy
Yz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICB3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGNoaWxkRnJhbWVXYXNO
YXZpZ2F0ZWQoKQoreworICAgIC8vIENoZWNrIHRoYXQgdGhlIGNoaWxkIGZyYW1lIHdhcyB1bmFi
bGUgdG8gbG9hZCBhIHBsdWdpbiwgc2luY2UgaXRzIHBhcmVudCBpcyBzYW5kYm94ZWQuCisgICAg
c2hvdWxkQmVUcnVlKCIoc2VsZi5zYW5kYm94ZWRGcmFtZS5mcmFtZVdpdGhQbHVnaW4uZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3BsdWdpbicpLmRlc3Ryb3lTdHJlYW0pID09IHVuZGVmaW5lZCIp
OworICAgIAorICAgIC8vIFdoZW4gdGhlIGNoaWxkIGZyYW1lIChncmFuZGNoaWxkIG9mIHRoZSBt
YWluIHdpbmRvdykgaGFzIGJlZW4gbmF2aWdhdGVkLAorICAgIC8vIG1ha2UgdGhlIHNhbmRib3hl
ZCBmcmFtZSBuYXZpZ2F0ZSBpdHNlbGYKKyAgICBzZWxmLnNhbmRib3hlZEZyYW1lLmxvY2F0aW9u
LmFzc2lnbigiamF2YXNjcmlwdDogdG9wLnNhbmRib3hXYXNOYXZpZ2F0ZWQoKTsiKTsKK30KKwor
ZnVuY3Rpb24gc2FuZGJveFdhc05hdmlnYXRlZCgpCit7CisgICAgc2hvdWxkQmUoImRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdzYW5kYm94ZWRGcmFtZUlkJykuc2FuZGJveCIsICInYWxsb3ctc2Ny
aXB0cyBhbGxvdy1zYW1lLW9yaWdpbiciKTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOwor
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgd2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+
CisKKzxib2R5PgorICAgIDxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorICAgIDxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorCisgICAgPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIGFsbG93
LXNhbWUtb3JpZ2luIgorICAgICAgICAgICAgbmFtZT0ic2FuZGJveGVkRnJhbWUiCisgICAgICAg
ICAgICBpZD0ic2FuZGJveGVkRnJhbWVJZCIKKyAgICAgICAgICAgIHNyY2RvYz0iCisJCQk8aHRt
bD4KKwkJCTxoZWFkPgorCQkJPHNjcmlwdD4KKwkJCWZ1bmN0aW9uIG1vZGlmeSgpCisJCQl7CisJ
CQkgICAgc2VsZi5uYXZpZ2F0ZWQubG9jYXRpb24uYXNzaWduKCZxdW90O2phdmFzY3JpcHQ6IHRv
cC5jaGlsZEZyYW1lV2FzTmF2aWdhdGVkKCk7JnF1b3Q7KTsKKwkJCX0KKwkJCTwvc2NyaXB0Pgor
CQkJPC9oZWFkPgorCQkJPGJvZHkgb25sb2FkPSZxdW90O21vZGlmeSgpOyZxdW90Oz4KKwkJCSAg
ICA8aWZyYW1lIG5hbWU9JnF1b3Q7bmF2aWdhdGVkJnF1b3Q7CisJCQkgICAgICAgICAgICBzcmM9
JnF1b3Q7cmVzb3VyY2VzL3NhbmRib3hlZC1pZnJhbWUtbmF2aWdhdGlvbi1uYXZpZ2F0ZWQuaHRt
bCZxdW90Oz4KKwkJCSAgICA8L2lmcmFtZT4KKwkJCSAgICA8aWZyYW1lIG5hbWU9JnF1b3Q7ZnJh
bWVXaXRoUGx1Z2luJnF1b3Q7CisJCQkgICAgICAgICAgICBzcmM9JnF1b3Q7cmVzb3VyY2VzL3Nh
bmRib3hlZC1pZnJhbWUtcGx1Z2lucy1mcmFtZS1vYmplY3QuaHRtbCZxdW90Oz4KKwkJCSAgICA8
L2lmcmFtZT4KKwkJCTwvYm9keT4KKwkJCTwvaHRtbD4iPgorICAgIDwvaWZyYW1lPgorCisgICAg
PHNjcmlwdD4KKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgYW4gaWZy
YW1lIHdpdGggYSBzcmRvYyBDQU4gbmF2aWdhdGUgYm90aCBpdHNlbGYgYW5kIGEgY2hpbGQgaW4g
dGhlIGZyYW1lIHRyZWUuICIKKyAgICAgICAgICAgICAgICArICJJdCBhbHNvIHZlcmlmaWVzIHRo
YXQgdGhlIGltcGxpY2l0IHNhbmRib3ggYXR0cmlidXRlIHJlbWFpbnMgaW50YWN0IGFmdGVyIGEg
ZnJhbWUgaGFzIGJlZW4gbmF2aWdhdGVkLCAiCisgICAgICAgICAgICAgICAgKyAiYW5kIHRoYXQg
c2FuZGJveCBhdHRyaWJ1dGVzIGFyZSBwcm9wYWdhdGVkIHRocm91Z2ggdGhlIGZyYW1lIGhpZXJh
cmNoeS4iKTsKKyAgICB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICA8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="56599"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>